v0 is an AI tool that allows anyone to build, iterate on, and ship their ideas. It was created by Vercel in 2023, and has evolved a lot since then. I joined in Winter 2025 to work on v0, focusing a lot of my effort on first-class support for full-stack app development.
The v0 team is pretty small and talent-dense, which let me take on many projects with lots of ownership and agency. We shipped features and iterated super fast.
At the time, v0 was widely known as excellent for UI generation and frontend development, but not capable of building full-stack apps with meaningful backend logic.
Technically, building apps with features like authentication, databases, and more was possible, but it required a lot of manual setup and configuration. The goal of the integrations project I led was creating a first-class user experience for intuitively building full-stack apps and integrating with 3rd-party services.
Some key requirements:
The Vercel Marketplace is an extensive collection of 3rd-party products for AI, storage, authentication, and much more. The marketplace product was already fairly established when planning the integrations project, giving us the advantage of already having a generalized adapter for supporting external providers within v0! This was also a competitive advantage over similar products who supported very few providers, where adding more would require significant manual setup.
My work first involved collaborating with the Marketplace team on supporting integration connections through the v0 UI. This involved many decisions to achieve minimal friction in the setup flow, while conforming to existing agreements the Marketplace team had with external providers.
Building the integrations flow needed complex logic to interface with internal Marketplace APIs, through creating and modifying services in both the v0 and Vercel codebases. The result was an extensible system allowing unlimited providers to be supported in the future.
For the user experience around setup, I began with basic generative UI flows for integration discovery and connection. Integrations management was added to the project settings, in addition to surfacing the feature through a header button and chat suggestions.
Another major feature in this project was inline SQL execution. This paired well with database providers in v0, and acted as a continuation step after completing the setup process. For example, v0 could suggest migrations for the schema, seed scripts, and much more.
Building this involved many changes across the code execution service, database schema, chat UI, and more.
After some company demo days, lots of internal feedback, and many iterations in collaboration with the team, we shipped the feature!
The launch went well, leading to a long streak of v0 growth records, and a pretty cool statistic from the Supabase CEO:
After launch, we continued to improve this feature in various ways. Thanks to Ary for helping a ton with this and carrying it forward!
Making edits with v0 through the chat was powerful, but relatively slow if the user's desired changes were very targeted and didn't require full context / codebase discovery steps. One feature that enables this in modern code editors is inline AI editing, where you can prompt edits directly in files based on selected regions of code.
I worked on inline editing in v0 as a side project for a little while, shipping it during in my last week at Vercel at my last demo day.
The first step to building this feature was the in-editor UI. v0 uses the Monaco editor library, which powers VSCode and exposes a detailed API for building complex, custom editor features. Using view zones, content widgets, and a ResizeObserver to handle dynamic textarea height, I achieved this UI:
It's triggered on ⌘+K
, and supports navigating edit history via arrow keys.
Next, as code streamed in from the LLM, I wanted to animate the changes with line decorations and display a real-time diff of the generated changes.
This was challenging, and came with some unexpected challenges! Some notes:
After many iterations and lots of whiteboarding, I created an algorithm to diff, group, and elegantly visualize generated changes in real-time successfully:
I also built intelligent auto-selections. My implementation handled various cases, one of which was triggering inline editing with your cursor on a function signature, which selects the entire function.
I built a ton of other features as well! While some big projects were internal, here are a few public features I built. Thanks to Pran for designing a lot of this!
Previously, the console panel in v0 was a separate tab. This added extra friction and differed from the typical development experience in browsers where you'd view logs alongside the window. I improved the panel experience by rebuilding it as a collapsible, resizable panel below the preview window.
The resizing, collapsing, and snapping logic were custom-built, and I added layout persistence with SSR support through debounced cookie updates.
The project settings sheet went through many iterations during my time at Vercel, arriving at this final tab-separated design.
This exposed key project details and features in a well-organized way, without overwhelming the user with too many options at once.
Vercel is a pretty unique company, with incredible developers that have built tools many of us use every day, and that comes with tons of learning by working directly in this environment. The v0 team was certainly an example of this, and I grew a lot. I'm really proud of the ownership and initiative I took, and the impact I had on v0's growth and trajectory.
I've been using Vercel to ship my projects since I began coding, and working with people I've looked up to for a long time before joining like Shu, shadcn, and many others was super cool. I'm grateful for this experience, and it felt very full-circle!
Special thanks to Alana for helping set this up, Lindsey for taking a chance on me, and Max for being an incredible mentor and leader. Finally, thanks to friends at the office for the fun goodbye :)