From Prototype to Production: Vibe Coding the Gravity Road Website
We vibecoded our new website and we learned a lot.

When people talk about “vibe coding”, it’s often framed as a kind of creative sleight of hand: describe a website in plain English and let AI generate the code. The reality, from our collaboration with One Pixel Wide shows, is more pragmatic — and more revealing about where these tools genuinely add value.
At its simplest, vibe coding means using natural language to generate code. But as One Pixel Wide’s co-founder Peter Browse explains, there’s a meaningful distinction in how it’s applied. “There are two broad approaches,” he says. “One is fully code-agnostic, where you describe everything and trust the model to get close. The other is guided — where prompting is still doing a lot of the work, but it’s steered by someone who understands how a website should be structured.” For Gravity Road, the second approach proved essential.
The process didn’t start from scratch. The Gravity Road team had already built an early prototype in Replit, uploading designs and screenshots and prompting their way to something that looked and felt close to a finished site. That prototype mattered, Browse notes, because it captured intent. “It meant we weren’t starting from a blank page,” he says. “We had something that already expressed the direction visually and structurally.”
Once the team dug into the prototype, however, its limitations became clear. “The code underneath wasn’t particularly clean,” Browse explains, “and there was a mismatch between what was rendering and what existed in the static files. In places, the agent had effectively overwritten itself.” Rather than attempting to patch those inconsistencies, the team made a deliberate decision to reset. A new repository was created and the site rebuilt properly, using the prototype as a reference point rather than a foundation.
In terms of output, vibe coding still played a substantial role. Compared with a traditional build, Browse estimates that “around 50 to 70 per cent of the work was driven through prompting.” Where it proved most powerful was in speed. “What vibe coding is very good at is getting you to a strong baseline quickly,” he says. “It replaces the need for boilerplate or blank templates and gives you something project-specific much earlier.”
That acceleration doesn’t remove the need for experience. For non-developers, vibe coding can take projects surprisingly far — up to a point. “If you understand that a website is essentially blocks, containers and styles stacked together, you can get a long way with prompting alone,” Browse says. “With a small amount of knowledge, particularly around CSS, you could probably get 80 to 90 per cent of the way there.”
Where it begins to fall down is in responsiveness and complex behaviour. “Things like media queries and breakpoints need very specific language,” he explains. “If you don’t know what to ask for, the results become inconsistent.”
Those limits surfaced clearly during the Gravity Road build. A continuously scrolling carousel resisted every attempt at prompt-based problem solving. “We tried to solve it purely through prompting and it just couldn’t grasp the underlying logic,” Browse says. The solution came not from better prompts, but from applying a React motion library he already knew. “Without prior experience of libraries like that, it would have been very difficult to solve,” he adds — a reminder that vibe coding accelerates expertise rather than replacing it.
The process also required new ways of working. Setup proved one challenge. “Replit is a self-contained environment,” Browse notes, “so things like environment variables and configuration take more upfront work than in a typical development setup.” Another was recognising when the model had become unhelpfully stuck. “Sometimes the fastest solution is to abandon a file or start a fresh chat so it loses the context it’s built up,” he says.
Where vibe coding consistently paid off was in repetition and maintenance. “Once you’ve built one content structure, you can ask the model to replicate it elsewhere while you move on to something else,” Browse explains. That was particularly valuable when working with a CMS, where a single change often needs to cascade across multiple templates. “Having an agent handle that reduces cognitive load — especially when you come back to a project weeks later.”
Replit ultimately served its purpose as a prototyping tool rather than a production environment. As the site evolved, Gravity Road needed a headless CMS that the wider team could update safely. “Replit isn’t designed for that kind of local CMS development,” Browse says, “so it stopped being viable as the production foundation.”
The takeaway from the project isn’t that vibe coding can replace development teams. It’s that it reshapes how work gets done. “Vibe coding is a very strong tool for prototyping and for helping teams express intent early,” Browse reflects. “Where we’re not quite there yet is full replacement of production development.”
In short, vibe coding doesn’t replace expertise. It amplifies it.