I wanted to practice vibe coding, but in a more intentional and practical way. The common advice for building projects is to solve a problem you actually have. Make it personal.
Before AI coding agents became a thing, I learned the fundamentals the traditional way: reading books and manually writing every line of code. I'm really glad I did. But I've also been paying attention to the challenges software engineers face now that AI is part of the workflow. It's hard to resist the speed. AI can complete a feature fast and you can quickly move on to the next. The downside is that it may work, but it may not be the most efficient or best approach.
A good analogy I like to compare this to is math. You get the right answer, but you have no idea how you got there. You just scribbled some numbers and somehow landed on it. The problem is when you get a harder math problem, you wouldn't even know where to start. Programming is the same way. Understand the issue, why it happened, how it happened, and why you were incorrect, before moving on. Why? Because that gap might seem harmless when everything is working, but it can cause a lot bigger problems down the road.
For anyone learning programming, I highly recommend The Pragmatic Programmer by Andy Hunt and Dave Thomas, and Clean Code by Robert C. Martin. Good concepts to know are readability, Don't Repeat Yourself (DRY), Keep It Simple Stupid (KISS), testing, error handling, abstraction, taking care of broken windows, and most importantly taking ownership of your code, your career, and your work.
For this project, I am intentionally taking my time to understand what's happening under the hood. Especially since I have no backend engineering experience. That's a whole other can of worms... things like databases, authentication, security.
About the project - the "why":
I have a bad habit of forgetting my favorite dishes and where they're from. Someone asks me "hey, where's your favorite place to get cookies?" and instead of having an answer ready, I'm scrambling through my memory trying to piece it together. I wanted a simple way to keep track of that and share it with friends.
Like anyone with ideas, I brainstormed a lot of directions I could take this app to make it more fun and attractive to use. But the reality is, I had to put the big ideas aside and focus on the actual problem I was solving: tracking my favorite dishes and sharing them with friends. That's it. Everything else is out of scope for now.
The MVP is simple. Log a dish, remember where it's from, share the list. Making it social, adding extra features, all of that can wait. I just need to get the core solution done correctly first:
The Approach:
1. Figuring Out the Core Feature
Before anything else, I had to get clear on what this app actually needed to do at its most basic level. No extras, no nice-to-haves. Just the one thing it had to solve.
2. Research
I looked at what was already out there. What apps exist that are similar, what do they look like, and how do they flow? This step matters because you're not designing in a vacuum. Understanding what's already been built helps you figure out where your app fits and what you want to do differently.
3. Design
For inspiration I used resources like Mobbin, Dribbble, Screen Design Daily, and Pinterest. But research wasn't just about finding things that looked good. It was about thinking from the user's perspective.
Users gravitate toward apps that feel familiar and easy to use. That meant I had to put my own creative ideas aside and think about what was actually practical. What would make sense to someone using this for the first time? Figma was my tool for brain dumping, mapping out the flow, and creating the screens.
4. Tech Stack
When it came to choosing my tools, I went with what I already knew so I wasn't learning everything from scratch at the same time.
React was familiar to me, so React Native was a natural extension of that.
Tailwind CSS translated to NativeWind for styling.
Expo made the framework easier to work with and get up and running quickly.
Supabase already had an account set up and it covered authentication, database, and more out of the box.
Codex for AI assistance, honestly I just picked this one.
VS Code as my IDE, already had it installed, no reason to switch.
Understanding AI Agents
Working with AI agents is not just about typing a question and hoping for the best. A big part of it is prompt engineering, which is really just learning how to communicate with AI effectively.
Tokens and Context Window
Think of the context window like a whiteboard. The more you write on it, the harder it becomes to find what you need. Too much information at once and the AI starts missing things or losing track of what matters. On top of that, more tokens means higher cost. So keeping things focused is not just good practice, it actually saves you money.
Structuring Your Prompts
One thing that made a big difference for me was treating each chat like it had one job. One chat, one feature, one outcome. The more scattered your prompt is, the more scattered your results will be.
A few things that help:
Constraints. Tell the AI what not to do. This sounds simple but it cuts out a lot of noise.
Context. Be clear about the scope. What are you building, what stage are you at, what matters right now?
Examples. AI learns from data, so show it what you want. If you have a pattern you like or a result you are going for, include it. It makes a huge difference.
Agentic Skills
Learning how to use agentic workflows helps reduce the back and forth. Instead of going one prompt at a time and course correcting constantly, you set up a structure and let it follow through. It moves faster and stays more focused.
Circling Back to Programming Best Practices
This is where it all connects. The same principles that make good code make good AI interactions.
The single responsibility rule means each prompt, like each function, should do one thing. Abstraction means keeping things separate so when something breaks you know exactly where to look and how to fix it. And keeping it simple is always the move. The more complicated you make it, the more room there is for things to go wrong.
AI is a powerful tool but it still works best when you bring good fundamentals to the table.
Learning Process
One principle I keep coming back to is the 80/20 rule. You do not need to know everything. Understanding the fundamentals well enough gives you the foundation to troubleshoot when things go wrong. So when I approach something new, the first question I ask myself is what is the 20% I actually need to know to move forward? That way I am not chasing side quests every five minutes.
Though I will be honest, I am guilty of that. I tend to go deep on topics because I always want to know why. Why does this work this way, why did that break, why is this the recommended approach. It is a good habit to have but it can also pull you far off track if you are not careful.
Something else I picked up along the way is knowing when to just fix something yourself instead of prompting AI to do it. Styling fixes for example are way faster for me to just go in and handle directly. The back and forth of describing what you want visually, waiting for a response, and then correcting it is sometimes more effort than it is worth. Know your strengths and use them.
Something else I have had to remind myself throughout this project is that programming is hard. I did not come from a technical background. I should not feel behind. There is no team here, no one else to pick up the slack, it is just me. So if something takes me a while to grasp, that is okay. Slow down. Understand it. Then move forward.
The last thing I will say here is to document your process. Take notes, write reflections, capture what you are learning as you go. Like I am doing right now with this post. I am actually planning to write more posts about this project as I keep building, sharing what I am learning and the challenges I run into along the way. So stay tuned for that.
Final Thoughts
Take advantage of AI, but do not let it think for you. Use it to brainstorm, to learn, to work through problems together. It is practically a non-judgmental tutor available whenever you need it.
I will be honest, I was a bit iffy about using AI in coding at first. It felt like cheating, like I was a fraud for leaning on it. But the reality is nobody is handwriting all their code anymore. The industry is adapting and you have to adapt with it. That does not mean outsourcing your brain, it means using the tools available to you to get things done smarter.
So do not be afraid to use technology to move faster. Just always come back to your why, keep your fundamentals sharp, and use your own brain to think critically instead of just accepting whatever AI hands you.
If you want to follow along with this project you can find it on my GitHub. A s for posts on here, I will update as I can. That is kind of the whole point of this site anyway, honing my why and writing about the messy middle of learning. See you in the next one.