Two Wada Pavs, a Newspaper, and a City Made of Pixels

(Updated on )
The Mumbai portfolio street, with its garage, newspaper kiosk, wada pav stall, and illustrated pedestrians.
A little Mumbai on the internet.

Act I: It Started With a Wada Pav

Last year, while I was visiting India, I was on my way to my grandma’s place when we made a quick stop for wada pav.

Naturally, I bought two.

They came wrapped in newspaper, the way they often do. I got back into the car, unwrapped the first one, and ate it without giving the packaging a second thought. When there’s a freshly made wada pav in front of you, your priorities are pretty clear.

But when I looked down to grab the second one, something caught my eye.

An advertisement, printed right there on the wrapper.

When I looked down to grab the second wada pav, something on the newspaper caught my eye.

A matrimonial advertisement.

GROOM WANTED URGENTLY. Must be 6 feet tall, IIT/IIM educated, earning ₹50 LPA minimum, own a 3BHK in South Bombay, have a full head of hair, and be willing to live with in-laws. Horoscope must match. Balding candidates kindly excuse.

Apparently, they weren’t looking for a husband. They were hiring a unicorn with generational wealth.

Classic Mumbai.

Most people would finish their wada pav, crumple the newspaper, and get on with their day. I finished my wada pav, obviously. But that little advertisement stayed with me long after the snack was gone.

I didn’t know it yet, but it was the first piece of a project I hadn’t even imagined.

A Little Nostalgia, a Lot of Pixels

A few months later, I was taking a Mobile Game Development class, and I kept noticing how drawn people were to old-school pixel games. EarthBound. The Legend of Zelda: A Link to the Past. Streets of Rage. Tiny sprites, vibrant environments, and surprisingly expressive little worlds.

It amazed me how much personality could fit into so few pixels.

I was studying Computer Science with a focus on Multimedia and Creative Technologies, and one thought kept coming back to me: what if I built something that actually put the creative in Creative Technologist?

I started digging into pixel art, game environments, and interactive websites. The deeper I went, the more questions I had. What makes a portfolio memorable? How do you turn something as ordinary as a navigation menu into an experience? What parts of myself would I want someone to discover?

Out of that increasingly chaotic word cloud, one question stood out:

If I were going to build a world about myself, shouldn’t it reflect where I come from?

Bringing a Little Mumbai to the Internet

I grew up in the suburbs of Mumbai, a city where something is always happening, always moving, always asking to be looked at. Vendors calling out to customers. Auto-rickshaws weaving through traffic. Buildings layered with signs. Roadside stalls, chai breaks, conversations, and the kind of organized chaos that makes perfect sense when you grow up inside it.

Remember Ishaan in Taare Zameen Par, the scene where he bunks school and wanders around Mumbai, completely absorbed in everything around him? That’s still the best description I have of how I like to experience the world. Observing. Taking it all in. Finding something interesting in what everyone else walks past.

And suddenly, it clicked.

I already had a portfolio, and if you’re reading this, congratulations: you found it. It has an editorial, magazine-like feel, with clean layouts, photography, and a page for each piece of work. I liked it. I still do. I didn’t want to replace it.

I wanted to imagine what would happen if all of those pages existed as places, inside a little world that was colorful, inviting, unmistakably Mumbai, and, most importantly, unmistakably me.

The Wada Pav That Became a Contact Page

Remember that newspaper? I certainly did.

Usually, a contact page is a few links. Email, LinkedIn, GitHub. Maybe a form if you’re feeling fancy.

But what if you could walk up to a wada pav stall, pick up a newspaper-wrapped snack, and watch the paper unfold to reveal how to reach me?

That was the first real piece of the world. And obviously, I couldn’t use just any newspaper. So I made my own: The Chai & Code Chronicle, a publication dedicated to the most pressing issues of our time. Which, apparently, consisted mostly of me. My projects, my interests, my work, and a small advertisement inviting you to get in touch.

Not going to lie, I felt a little like Oprah.

You get a headline! You get a headline! Everybody gets a headline!

The Chai & Code Chronicle newspaper artwork, with personal stories and a contact advertisement.
An entire newspaper about myself. A very modest first step.

Wait. I Already Have a Newspaper.

I had a newspaper. I had a blog. And I really, really liked chai.

You can see where this is going.

What better place to pick up a newspaper than a roadside chai stall? Instead of clicking a tab labeled “Blog,” visitors could browse copies of the Chronicle at the counter and pick an edition to read. Then my projects needed a home, and a converted garage studio felt exactly right.

One ordinary newspaper wrapper had turned into a whole neighborhood. Nobody had handed me a brief. I was writing it as I went, one memory at a time.

A route map of creative associations: a wada pav wrapper becomes the Chronicle, Contact and Blog; Mumbai and pixel games suggest a street; friends and cricket cards suggest collectibles.
No master plan. Just one idea finding an excuse to become another.

Act II: Learning to Build, and Learning to Delegate

Okay, But How Do I Actually Build This?

I started with Canva. I found a newspaper template, put together the first edition of the Chronicle, exported it as an image, and brought it into Blender as the texture for a 3D newspaper.

Simple enough, right?

The whole idea was this: click Contact, and a newspaper-wrapped wada pav appears. The paper gradually unwraps, revealing two wada pavs and, conveniently, an advertisement with my contact details.

Except the newspaper refused to cooperate.

I wanted it to crumple, fold, and unwrap in a way that felt natural, and every attempt to deform the geometry introduced a new problem. I had beginner-level Blender experience, and this was well beyond anything I’d tried. I experimented, read, asked people who knew far more than I did, and modeled the wada pav itself along the way, because apparently one difficult task wasn’t enough.

One of my early Blender experiments. The paper and I had a long relationship.

Eventually, I hit a wall. I knew exactly what I wanted the animation to look like. I just couldn’t get there.

So, like many personal projects, it went into that very familiar folder: I’ll come back to this.

But I never really stopped thinking about it. It was my idea, and I wasn’t ready to let it go.

Enter AI, and a Lot of Trial and Error

In early September, I came across a demonstration of ChatGPT Astra working with software like Blender. The idea of describing a 3D environment in plain language and having a model help build it was exciting. I also watched Blender Guru’s review of Astra, which was a useful reality check: the results weren’t as polished as the demos suggested, and there was plenty of room for error.

So I went in with healthy skepticism. I wasn’t expecting to type “make me a beautiful Mumbai street” and receive a finished portfolio. (Although, admittedly, that would have been nice.)

Instead, I started small. I sketched the buildings and stalls I wanted, gathered references, thought about their proportions and personalities, and described them one at a time.

One building. One stall. One increasingly specific instruction.

It wasn’t perfect. Not even close. But for the first time, the place in my head was beginning to exist outside of it.

The Five-Hour Waiting Room

Of course, there was a catch.

Tokens. So. Many. Tokens.

I’d be halfway through refining a building, fixing a texture, or nudging a piece of geometry into place, and I’d hit my usage limit. Then came what I started calling the five-hour token blackout. Nothing humbles your creative ambitions quite like being locked out of the thing you were obsessing over ten minutes ago.

There was a simple fix: pay for more. But I was working within my existing ChatGPT Plus subscription, and I was absolutely not about to justify an upgrade because I couldn’t get a virtual chai stall to look right. I’d already committed to building Mumbai on the internet. I had to draw the line somewhere.

So I made a decision: if I couldn’t buy more time with the model, I’d make every minute with it count.

I’d been treating every interaction like a conversation. Describe an idea, look at the result, explain what was wrong, repeat. And I realized that much of that back-and-forth wasn’t the model failing. It was me explaining decisions halfway through making them, or discovering decisions I hadn’t made at all.

So I started writing things down. Increasingly extensive Markdown things.

Each handoff described what should change, what absolutely shouldn’t be touched, which references mattered, how the result should behave, and what had to be checked before I’d call it done. The blackouts turned into my planning time: review what had been built, catch the problems, sketch the next change, and write the brief. When the limit reset, I wasn’t showing up with a vague idea and hoping we’d figure it out. I had a plan.

It didn’t eliminate mistakes. But it made the work structured, intentional, and mine.

Which is an elaborate way of saying I learned to write better documentation because I was too stubborn to pay for more tokens. I’m glad I did, because those documents became the foundation for everything that followed.

Learning to Delegate, Not Just Prompt

Telling an AI model to “make a wada pav stall” is a lot like telling someone to “design a house.” What kind of house? How big? What style? Where are the doors?

The model could produce a result. That didn’t mean it would produce my result.

And as the project grew, that difference mattered more. These buildings weren’t decorations. The wada pav stall had to host an interactive newspaper. The chai stall had to display papers you could browse. The garage had to open into a studio with a working project archive. They were parts of a system.

So I stopped thinking like someone requesting an image and started thinking like someone directing a production.

I set up specialized AI roles, each with a different lens. An architect reviewed structure, proportions, and placement. A set designer looked at composition, props, and whether a space felt believable. A Blender technician checked the geometry, textures, and whether an asset would actually work inside the browser. Their reviews were consolidated into one brief, and a single implementer made the changes, so nobody was editing the same scene at once.

At one point, the biscuits at the chai stall were floating inside their jars. This was not the atmosphere I was going for. The next brief asked for grounded golden stacks, clearer glass, and room below the lids. Keep the stall. Keep the newspapers. Please put the biscuits down.

The garage taught me something subtler. A cleaner, tidier studio had quietly started to look like a room behind a shutter, not a converted Mumbai workshop. Bringing back the supports, tools, conduit, and a pair of hanging headphones restored its character. Nothing was technically broken. It just wasn’t right.

“Fixed” and “feels right” were becoming two different questions, and only one of them could be checked automatically.

Notes from my imaginary production department

The loop behind the little world.

  1. I notice
  2. I write the brief
  3. AI builds & checks
  4. I look again

Architect · Set designer · Blender technician. One scene writer. My judgment comes back around.

The newspaper had other plans

The newspaper had other plans

The idea
A wrapper opens around two wada pavs, then becomes readable contact information.
The surprise
Corner curls made a boat. Separate panels made a box. An open surround still left the food visible.
The smaller brief
One continuous sheet. Hide the pavs first. Spread unevenly, then settle flat.
What I inspected
Inspect the motion between endpoints, not just the final pose. Topology and clearance checks help; my eyes still get a vote.
Real production newspaper geometry gathered over the wada pavs.
Five poses from an earlier in-browser version of the wrapper. Every in-between pose had to read as paper, not just the endpoints.
The garage identity crisis

The garage identity crisis

The idea
A Mumbai garage converted into my creative workspace.
The surprise
The cleaner studio started reading as a room behind a shutter.
The smaller brief
Keep the facade, footprint, and monitor. Bring back workshop supports, conduit, tools, and hanging headphones.
What I inspected
Inspect furniture joins, supported props, and the actual monitor camera path. A valid export still has to feel like this place.
Saved Blender render of the converted garage studio workbench with tools, supports and personal objects.
The refined workspace, with its workshop character back.
Biscuits versus gravity

Biscuits versus gravity

The idea
A lived-in chai counter, with biscuits you could recognize through the jars.
The surprise
Biscuit pieces were floating inside their jars.
The smaller brief
Ground golden stacks on the jar bases. Leave headspace. Clarify the glass. Keep the rest of the stall.
What I inspected
Review both render angles, preserve the newspapers and jar positions, then export and validate. Stop when the named change is done.
Saved model detail of grounded golden biscuit stacks in the chai stall jars.
The biscuits, finally on solid ground.

A check passing and another agent agreeing are not the same as it looking right. That last call was always mine.

The Creative Director Is Still Responsible

This was the biggest lesson of the whole project.

AI can help execute a creative vision. It can’t take responsibility for it.

It misunderstood instructions. It produced geometry that looked plausible from one angle and completely wrong from another. It solved one issue and introduced three more. Sometimes it confidently told me something was fixed when it absolutely wasn’t. And sometimes a second agent agreed with the first, and they were both confidently missing the point.

Catching that was my job.

Using AI well turned out to have less to do with knowing what to ask and more to do with knowing how to define the problem, communicate the constraints, divide the responsibilities, and evaluate the result. There’s a real difference between accepting something because it looks finished and accepting it because I understand what it does and know it meets the bar.

If I approved a model, a design decision, or a piece of generated code, I owned it. I couldn’t point at a tool and say, “Well, that’s what it gave me.”

This was my project. My name was going on it. And I wanted to be proud of what I put into the world.

Act III: Making It All Work

From Blender Files to an Actual Street

So I had a wada pav stall, a chai stall, a garage, and an increasingly elaborate vision.

The small problem: they were all individual 3D models, and individual 3D models do not assemble themselves into a website. (Though given everything I’d been asking AI to do, I was starting to wonder.)

I turned to Three.js. I’d never used it before, but I had a background in computer graphics, game development, and 3D environments, so the underlying ideas weren’t foreign. The new challenge was bringing them to the web. I briefly considered OpenUSD for managing assets, but exporting from Blender as GLB was the more practical path: geometry, materials, and textures packaged in a format the browser could load.

That became the bridge between my Blender models and the street. And once it was in place, things got exciting.

Giving AI the Heavy Lifting, With Ground Rules

By now I had a workflow: handoff documents, defined roles, and a habit of thinking in requirements, constraints, and validation. So when it was time to integrate everything into Three.js, I wasn’t starting from scratch.

I’ll be clear about how the work was divided. AI wrote a significant amount of the JavaScript and did much of the asset integration. I didn’t personally write every line that powers this website.

What I did was decide what it should be. I defined how the street should look, feel, and behave: how visitors move between buildings, what happens when they interact with a stall, and how each experience returns them to the street. I set the ground rules: stay compatible across browsers, keep it responsive, avoid unnecessary rendering cost, don’t break what already works, and verify before calling anything finished. Then I reviewed every result and sent it back when it didn’t match what I had in mind.

A beautiful 3D portfolio isn’t worth much if your laptop sounds like it’s preparing for takeoff just opening it. And I learned to tell the difference between a model saying something was optimized and having actual evidence that it was.

Finding My Flow

Something shifted once the process settled in.

The blackouts were still there, but they no longer derailed me. They became part of the rhythm. Whenever an idea came up, I’d think it through first. How does it fit the street? Does it feel natural? Does it add something meaningful, or am I adding it just because I can?

I’d sketch it, write down the interaction, think about what could go wrong, decide how it should feel, and then hand it off and iterate.

It became a kind of creative flow. Not because everything worked the first time (it absolutely did not), but because I was spending less energy explaining ideas halfway through building them, and more energy on the ideas themselves.

And each finished piece sparked the next. The newspaper became a contact page. The chai stall became a blog. The garage became a studio. Slowly, the street stopped feeling like a collection of models and started feeling like a place.

From the first rough street in September to the version with people in it, in five checkpoints. GIF version.

A Street Needs People

I’d been showing the site to a few friends, including Payal, and asking not just whether it looked good, but how it felt to explore. Was it inviting? Did the interactions make sense? Was it somewhere you’d want to spend a little time?

Their feedback shaped a lot of the experience. And somewhere in the middle of it, I noticed something obvious.

Why was my street so empty?

I had buildings, stalls, a whole little Mumbai. But where were the people?

And what better way to bring it to life than with the people I actually know? So I started asking my friends whether they’d like to become 16-bit walking characters.

A perfectly normal question to ask your friends, obviously.

Their photographs became references for pixel-art versions of themselves, and eventually, animated sprites walking along the street. They picked up little routines, too. Nico stops for wada pav. Kartik drinks chai. Vrishabh photographs the mural.

But I didn’t want them to be background decoration. I wanted you to be able to meet them.

Fifty Rupees and a Folder Full of Cricket Cards

Growing up in India, I collected cricket trading cards. Little packs for around fifty rupees, full of players, statistics, and illustrations that made every card feel special. I loved them. I still have my folder.

So when I thought about how visitors could meet my friends, those cards came right back. What if clicking on someone opened a little collectible card about them?

Nothing formal. Just a glimpse of who they are.

I asked each friend to pick a movie they liked. Not necessarily their all-time favorite. Not their Letterboxd Top Four. Definitely not something curated to prove impeccable taste in cinema.

Just a movie they liked. Something that meant something to them.

Everyone got back to me quickly, which was lovely, considering I’d essentially recruited them into my increasingly elaborate digital arts-and-crafts project.

Payal's walking sprite and collectible card, pairing her pixel portrait with personal favorites against Mumbai's seafront.
Familiar faces, small personal details, and absolutely no requirement for impeccable taste in cinema.

And suddenly, the street wasn’t just about me anymore. It had little pieces of my friends in it, too.

Making It Repeatable

Creating every character from scratch wasn’t going to scale. I’d been generating each one from reference photos and long, detailed prompts, and I kept running into the same problem I’d had with the Blender models: I was repeating myself. A lot.

I already knew the visual language I wanted: a consistent 16-bit aesthetic, recognizable features, clean silhouettes, and proportions that sat well next to everyone else. Why was I explaining it all again for every person?

So I started building a reusable workflow in ComfyUI. Give it a friend’s reference photo, adjust only what’s unique to them, and keep everything else consistent. A finished portrait became the starting point for both the walking animation and the collectible card.

It was the same lesson, showing up again: instead of treating every character as a brand-new task, build a pipeline. Refine it once, then adapt it. The more structure I gave the process, the more room I had for the creative differences that actually mattered.

A Little World of Its Own

Looking back, it’s funny how this snowballed. A newspaper wrapped around two wada pavs became a contact page, then a chai stall, a garage, a Mumbai street, and a small cast of animated friends.

None of it existed as a complete plan. It grew through experimentation, feedback, iteration, and more than a few frustrating evenings.

AI helped me build things I couldn’t have built alone, especially within the time and budget I had. But it also made me confront a real question: what does it mean to make something yourself when AI does much of the implementation?

For me, the answer is ownership.

I imagined this place. I decided what it should be, set the standards it had to meet, approved every decision, and chose what to publish. The tools could help construct the world, but they couldn’t decide which memories belonged in it. They couldn’t decide that a newspaper should become a contact page, or that a fifty-rupee pack of cricket cards should shape how you meet my friends.

Those decisions came from me. I wasn’t using AI to remove myself from the creative process. I was using it to bring more of myself into it.

Putting the Creative in Creative Technologist

I still care deeply about the technical details: why a render pass looks the way it does, why a camera transition feels awkward, whether a feature actually performs well in a browser. Working with AI doesn’t make those questions less important. It makes it more important that I know what to check, what to question, and what I’m willing to put my name on.

I also learned that a good idea isn’t a specification. Translating the picture in my head into something a tool or a collaborator can work with is a creative skill of its own. So is admitting when something isn’t good enough yet, and doing one more pass.

And I keep coming back to that first newspaper.

The animation I couldn’t figure out was the reason this whole project stalled. It was also the one piece I refused to give up on. Many iterations later, the wrapper became exactly what I’d pictured in that car on the way to my grandma’s: an art-directed fold that opens to reveal two wada pavs and a way to reach me.

The newspaper, finally cooperating. The full journey, and how it works, is on the project page.

So if you explore the street and find a chai stall, a garage, or one of my friends wandering past, now you know a little of the story behind it.

A lot of planning, a surprising amount of Markdown, several token blackouts, and one snack I probably should have eaten before it got cold.

Walk the street ↗

Visual credits

Images show this project’s artwork, model renders, and browser captures. Small props visible in the street and garage use adapted CC BY 4.0 models: Tuk Tuk Rikshaw by alnmathew; Dog by sv.stats; LEGO Scarlet Witch by Ramón Ruiz; Art Reference: Utah Teapot by Smallpoly; and Chicago Cubs by Laurance Animations.