How I shipped an interview prep app in just 5 days with AI.
My journey designing, building, and shipping product with the help of AI coding agents
This post is an extension to my main post.
I built FearCutter in just 5 days. It’s live, production-grade, and self-serve. This process would have typically taken an engineering, product, design team ~2 months, but with the help of Windsurf, I was able to build and ship it completely on my own. The process was empowering and fun and it makes me optimistic about the future.
Taking on the challenge of building this project was initially very scary, especially because I haven’t been in the game for a while and had become rusty. For example, I don’t have much front-end engineering experience. I don’t know React or Typescript, and I haven’t coded much in a while. I haven’t directly dealt with full stack app deployment. I never implemented an authentication feature before. I certainly never built an entire app by myself that was production-grade, self-serve, generally available. But I succeeded in building and shipping it and so can you.
Here’s how I did it.
Defining the product
While preparing for PM interviews, I noticed that there are tons of resources about what to prepare for and what’s expected, but it’s harder to actually practice for them in a realistic way. The options are either paying hundreds of dollars for a single mock interview session with a coach (I kid you not, and the quality of coaches can be inconsistent) or trying to schedule practice chats with busy PM friends. Neither felt compelling or efficient, so I turned to LLMs for help by simulating typical PM interview questions: "How would you design X?", "Estimate the market for Y?", "Should we enter market Z”, "Why is product churn up and what would you do about it?".
My hacky LLM approach was promising, but the user experience was underwhelming because:
Getting a realistic experience requires a lot of prompting engineering, and the questions tend to get repetitive.
Writing the prompts manually takes away the surprise factor of a real interview.
Chat tools (ChatGPT, Claude.ai, Gemini) all have tiny input boxes that make typing longer answers unpleasant. The input does not support markdown, not even simple bullet point formatting.
Many times I’d send incomplete answers when I hit the Enter key accidentally, when all I wanted was a new line.
So I thought:
“fuck it, I can build something much better for this, and I want to see how fast I could do it”
5-Day Building Sprint
Below is a highlight of my 5-day building sprint, broken down by what I did and accomplished each day.
Day 1 - Foundations
Defined the problem and basic features to build. My goal was to set a solid technical foundation to achieve my product vision. Sketched out some UI/UX flows and a basic data model. Spent a lot of time in systems design, and “choosing parts” to use (programming language, web framework, UI component library, markdown editor, styling approach, app layout, architecture, database, auth system, LLM, etc.).
Day 2 - MVP
Manually set up a fresh Next.js 15 app with React 19 (huge mistake warning, more on Day 5). Generated a basic page for the chat session, hooked it up to a mock JSON file as my database. Integrated the text editor to accept markdown input with real-time rendering (try typing: # Heading 1).
By the end of day I had a working prototype: I could open the app and chat with the AI interviewer. Note: I already had an early version of a system prompt that I had been using for myself.
Day 3 - Features
Set up a database server and rewired the app to work with it. Implemented register/login functionality via email and password, interview session management with auto-save sessions, and an onboarding page to incorporate user interview preferences. By the end of Day 3, I could sign up, login, and start a new chat session; when I was done, I could go back to my dashboard to see a list of all my sessions.
I was impressed with my progress: today’s features alone would have usually taken a small dev team a week, and I was able to do this in a few hours.
Day 4 - Interview quality
Board games with friends during the day (played Avalon and Inkan Gold lol). In the evening, I focused on system prompt improvements. I wanted the AI interviewer to avoid repeating questions and to personalize them based on the user preferences collected via the onboarding page built on Day 3.
Towards the end of the day, I then tried to build the app (npm run build) with the ever-naive hope that it would just work. But who was I kidding, AI or not, this never “just works”. Turns out React 19 is RC. What was I thinking when I installed Next.js 15 and React 19? I had been too ambitious so I downgraded to React 18, but the app was still broken. Ended the day frustrated.
Day 5 - Deploy
This was the most painful and frustrating day, but also the most rewarding because the app was deployed live by the end of this. No better feeling than a deployed app. It was a long day, I split it up into two parts:
Part I - Fake deploy
I was determined to ship today. So I had to do whatever it took to build and deploy ASAP: freeze features, simplify, cut down, whatever it takes. So naturally, I proceeded to add more features like register/login with Google, reset passwords, limit practice sessions to prevent abuse (which required database schema changes and updating types), and a landing page — in other words, the exact opposite of what shipping means. Tried to build the app once again and it exploded, so I took a break.
Part II - Real Deploy
I had so many Typescript errors from “declaring but not using” variables/imports everywhere. I was hoping Windsurf would just deal with them magically, but it didn’t. I was quite frustrated and disheartened at this point. It was late and the app wasn’t shipped. After going in circles for a long time, I had one more idea: nuke Next.js 15 and downgrade to the latest 14. This was promising! — I still had many build errors but the list was cut in half! After a few more rounds of debugging and error-fixing, the app finally built! Once I got the build working locally, I knew deploying to prod would be easy. It mostly was (I forgot to add my envs) and the app was live shortly after.
Conclusion
At the end of this journey, FearCutter was live. In just five days, I went from a pain point experienced during my own interview prep to a functional, deployed application that addresses that very need. While the journey was far from smooth, especially on the final day, the feeling of accomplishment after deploying was awesome. My experience proves that rapid prototyping and deployment is more accessible than ever. A huge win for builders out there!
Other related posts: