If you are reading this in 2025, maybe you’d like to know what vibe coding means and what’s the hype around it. In the last 2 years, artificial intelligence has develop expenentially and now can be used in many areas of our lifes. This means that we can use AI to program. Inicially I started using AI with Github copilot at work. At first glance, it seems to be just an “improved” auto complete future. At that time it was common to hear complain about how many times copilot would not recommend the code completition needed.
It’s been between 1 or 2 years since I first tried copilot, and I do not mean to say that it was not useful, but it was just an “improved” auto complete. This weekend I decided to try again and started using Cursor. The experience has been really different as I’ve been able to write a smaññ app with maybe 90% of the code auto generated by AI.
However I have admit this was not entirely vibe coding, the tearm was first seen from a post where it is defined as “forgetting” about the code exists. This is possible given that tools like Cursor allow you to write to an agent in natural language what you need in your app and it will generate all the neede code, ideally no human needs to review the code.
To test vibe coding, I decided to use Cursor and tried to use AI to create a simple app. Spoiler, I did not use the tools to generate all the code at once, but I starte instructing the agent with small parts where it generated some code (i.e. a lambda function), I reviewed it and accepted the changes on the base code. I decided to go this route, as I saw multiple videos where they tried to generate complete apps with trial and error inn multiple conversations wuth the agent, however it seemed to be very frustrating.
The app is really simple. It is a web that allows you to upload videos to s3, it will generate subtitles and embed them in the video. This kind of videos are viral in social networks at the time. At the begining I had no idea on what I wanted to build, but now it looks like this:
Being a backend by nature, I decided to use Cursos to write some lambda function. The prompt is relatively simple but it needs to be explicit enough for cursor to be able to write the expected code. For example:
write a lambda function, that processes events from the api on /v1/users/me/videos and receives the access token in the Authorization bearer header. Then uses the email in the token to hash it using md5 and then goes to the table UPLOAD_REQUESTS_BY_USER and lists the videos in this table. This is a get endpoint paginated using the dynamo db pagination mechanism. Each request returns 50 items. The response is a JSON with key "videos" and each video contains timestamp, filename, status, created_at, file_size, content_type
Most of the time, I did not change the generated code, I only did it for when the code was not doing what I initially intended. For example the agent generated the AWS SAM template with all the function, then it added the dynamodb tables that I needed. This way my time was invested on reviewing the generated code and adjust some things that did not work as I expected.
What I did noticed, was that the agent can not optimize code structure. For exmaple, it generated duplicated code to manage the token validation in auth. Maybe my fault for not expecifying that it should look for the function in other lambdas, but still I can understand the vision of “vube with it”, [maybe] refactor later.
I used v0 from vercel With the prompt.
Create a modern, responsive web app for SubME. Subme is an app that allows you to upload a file and it will process it to add shot subtitles to viral videos on the internet. Use a modern colorful design. The app will have multiple pages.
The home page needs to have a header with the company logo, navigation links, and a call-to-action button. In the center it will have a hero section to prompt the user to upload the video. It will have a catchy phrase related to the app, the upload prompt will be centered on the screen and it will be the main action here.
After the hero section build a showcase section for videos that other users uploaded, each tile will have the video in the background, the user name on the top left and as a sub headline the date uploaded. Videos in the background do not auto play.
I decided not to keep using v0 to do all pages in the web, instead I downloaded the generated code (since it was looking good for what I needed) and starte doing changes with prompts in the project, the same way as I did for the backend.
The only thing that I noticed at this point, was that the generated code by v0 had a bunch of UI components and dependencies that I did not really needed. Probably becasue the base project that it used to generate my code used all these components.
With this experence, I beluieve that vibe coding is a great tool to start a project, quick and dirty, test the idea. AI models are capable, with the right prompt, of generating code that works and maybe with some extra care, you could make sure that there is not a hugh tech debt. None the less if my small project ever needs to grow, I am definitly gonna find my self in the need to rewrite most of it - specially in the front end - to be able to scale the project properly.
I also have to acknowledge that I’ve programed in Java most of my career and I have not invested enough time to speciallyze in web development nor other languages - given that I do not want to write Java lambda functions. However I can read code, understand it and identify patterns. For this reason I believe that having AI generate the code while I review it frees me from reading all the docs all the time for a specific framework (react) or language (go) or library (go aws sdk). This will enable people to do a proof of concept really fast, the important things is to identify when it stops being a poc, and a refactor is needed.