``Frontend Challenge Perfect Landing Submission π²π₯§
This is a submission for Frontend Challenge - Comfort Food Edition, Perfect Landing.
An interactive landing page for vada pav β not a restaurant, not a recipe blog, a love letter to one dish that means something specific to me.
Vada pav is comfort food that people from Maharashtra will defend with real conviction β everyone has an opinion about the right ratio of garlic chutney to green, whether onion belongs on it, and which cart does it best. I wanted the page to feel like the dish itself: warm, a little chaotic, and specific rather than generic.
What I Built
The site has a hero section with an animated illustration (continuous steam, twinkling string lights evoking a stall at dusk, a slow monsoon-rain layer in the background), a personal story section, a four-moment "Day With It" timeline walking through the same dish at different times of day, and an interactive centerpiece: the Vada Pav Builder.
The builder lets you toggle five real toppings β green chutney, dry garlic chutney, a fried chili, raw onion, and sev β and watch them stack in the correct order on an SVG sandwich, regardless of what order you click them in. As you build, a live-generated sentence describes your exact combination in plain English, and an animated heat meter tracks how spicy your choices are.
Demo
Live site: https://mumbaivadapav.netlify.app/
CodePen: https://codepen.io/editor/lvjstkex-the-vuer/pen/019ff081-af80-78e8-8213-5a8a3f37f6cb
Journey
I wanted to avoid the landing-page defaults I kept seeing myself reach for β a cream background with a single warm accent, or a generic hero with a stock gradient. Since vada pav already has a strong, specific visual identity, I built the palette directly from the dish instead: a deep frying-oil brown-black (the kadhai it's cooked in), turmeric gold, chili red, and curry-leaf green, with a warm cream reserved for the reading sections.
The Vada Pav Builder is the part I'm most proud of. Under the hood it's plain vanilla JavaScript β a state object mapping each ingredient to a boolean, rendered into a fixed-order stack using CSS order so the sandwich always assembles correctly no matter which order you click ingredients in. Tying it to three things at once β the visual stack, a live-generated natural-language sentence, and an animated heat meter β is what took it from "a toggle list" to something that actually feels like assembling food.
The "Day With It" timeline walks through the dish at four real moments (a station-platform grab, after school, a monsoon evening under a stall's tarpaulin, and the last cart open at night) β a real sequence, not just a stylistic list, which is why it's numbered/ordered rather than presented as flat cards.
On accessibility: every ingredient toggle is a real <button aria-pressed>, not a clickable div; an aria-live region announces each addition and removal for screen reader users; all interactive elements have visible keyboard focus states; and every animation β the steam, the string lights, the stack's spring-in motion, the rain layer β is disabled cleanly via a prefers-reduced-motion check, both in CSS and in the JavaScript that spawns the sparkle effects.
The whole thing is a single self-contained HTML file β no build step, no framework β which felt like the right scope for a food-themed love letter rather than a full application.
Thanks for reading β go find your own fifteen-rupee miracle. πΆοΈ
Top comments (2)
Thanks for reading! If you want to skip straight to the fun part, scroll
to the builder and try loading every topping at once π
Genuinely curious β what's the dish from where you grew up that would
get this same treatment? Drop it below, I'd love to see what people pick.