Software development is often seen as a discipline of pure logic and rigid structures. We talk about architecture, frameworks, and design patterns – the building blocks of a rational and predictable process. But what if there’s another side to it? A more intuitive, artistic, and dare I say, philosophical approach to building things? This is the story of my journey with “vibecoding” while building a personal project called Dhanika.

What is Vibecoding?

The term “vibecoding,” recently popularized by Andrej Karpathy, describes a software development approach that is less about rigid plans and more about the “vibe” of the project. It’s about letting your intuition and the feel of the product guide the development process. Instead of detailed specs and roadmaps, you work with a general idea, a vision, and you let the project evolve organically.

It’s a dance between logic and intuition, a form of mindfulness where you are fully present with the code and the project, responding to its needs in the moment. This might sound chaotic, and in some ways it is. But it’s a controlled chaos. It’s about being in tune with the project’s needs, the user’s needs, and your own creative flow.

The Dhanika Project

Dhanika is a personal finance tracker I built for myself. I’ve tried many finance apps, but none of them felt quite right. They were either too complex or too simple. I wanted something that was tailored to my specific needs and my way of thinking about money.

The vision for Dhanika was simple: a clean, intuitive interface to track my income and expenses, with a focus on simplicity and mindfulness about my spending habits.

What started as a personal tool has since been shared with some of my friends, who have started using it to gain clarity on their own financial posture. They’ve found the ability to visualize their finances with graphs and charts particularly helpful. This has been incredibly rewarding and has reinforced the value of building something with a clear and simple vision.

The Vibecoding Journey with Dhanika

To be honest, the initial phase of this journey was daunting. I felt a profound sense of imposter syndrome. Was this “vibecoding” just an excuse for not having a proper plan? Was I doing things “the wrong way”? The feeling was akin to standing still while the world moved on. I had to have a serious talk with myself. I realized that the future of creation is fluid and intuitive, and clinging to old, rigid methods was like trying to carry heavy luggage onto a moving train. Once I broke free from that guilt and embraced the uncertainty, everything changed. The project took off, and I truly started to vibe with the code.

I started Dhanika with no grand design document. I had a single-sentence vision: “A beautiful and simple finance tracker that feels good to use.”

The first step was to create the most basic feature: adding an expense. I didn’t worry about the database schema or the overall architecture. I just wanted to get something on the screen that worked.

As I used the app myself, I started to get a feel for what was missing. I’d think, “It would be cool if I could see a chart of my spending this month.” So, I’d add a chart. Then I’d think, “I wish I could categorize my expenses.” So, I’d add categories.

The development process was a continuous conversation between me, the user, and the code. The “vibe” of the project guided my decisions. If a feature felt too complicated or didn’t align with the core vision of simplicity, I’d scrap it.

Git was a magic tool in this process. Before each commit, I had to make sure that none of the existing features would break and the design on web and mobile was not compromised. This also taught me how to incrementally build a basic working PWA, then focus on the UI, then the UX, and finally other details. This iterative process of building, testing, and committing was crucial to the project’s success.

Pros of Vibecoding:

  • Creative Freedom: It’s incredibly liberating to not be constrained by a rigid plan. You can follow your creative instincts and explore new ideas as they come up.
  • Organic Evolution: The product evolves in a very natural way, based on real usage and feedback.
  • High Motivation: Working on what feels right at the moment is a great way to stay motivated and engaged.

Cons of Vibecoding:

  • Lack of Predictability: It’s hard to estimate timelines or even what the final product will look like. This makes it unsuitable for projects with strict deadlines or multiple stakeholders.
  • Risk of Scope Creep: Without a clear plan, it’s easy to keep adding features and never reach a “finished” state.
  • Potential for Architectural Issues: Making design decisions on the fly can lead to a messy codebase if you’re not careful. It requires a good sense of when to refactor and clean up.
  • Risk of Project Reset: The fluid nature of vibecoding can be dangerous. If you’re not careful, especially when using powerful CLIs, you might accept permissions that could reset your work. While Git is a lifesaver, it’s a critical point to be mindful of.

Tips for Successful Vibecoding

  • Embrace Version Control: Use Git religiously and commit often. It’s your best friend and safety net in a fluid development process.
  • Start with a Core Idea: You don’t need a detailed plan, but have a clear, simple vision for what you want to build.
  • Listen to Your Gut: If a feature feels wrong or overly complicated, it probably is. Trust your intuition to guide you.
  • Refactor Fearlessly: Vibecoding can get messy. Don’t be afraid to pause and clean up your code when things start to feel disorganized.
  • Stay Mindful and Present: Focus on the task at hand and be fully engaged with the code. The best ideas often come when you’re in a state of flow.
  • Keep Documentation Updated: Whether it’s a README.md or an agent.md for AI collaborators, keep documentation current. Since AI models have token limitations, this helps them clearly understand the project’s structure, philosophy, and goals, no matter which model you use.

Lessons Learned: The Philosophy of Vibecoding

Vibecoding is not for every project or every person. It’s best suited for personal projects, prototypes, or early-stage startups where the product vision is still evolving.

Whether a non-technical person can build complex systems with vibecoding is a valid doubt, and the reasons often go beyond the code itself. The building process might be manageable, but the technical hurdles of hosting, configuring domains, understanding DNS for services like GitHub Pages, and other deployment intricacies require a solid technical foundation. While there are excellent platforms that eliminate these complexities, they often come at a cost. This project, for instance, cost me nothing but my time, largely because I could navigate these technical challenges and utilize free tools like the Gemini CLI. This highlights a key aspect of vibecoding: the more technical skills you have, the more freedom and economic flexibility you have to bring your vision to life. It also reinforces the idea that in vibecoding, the developer is not just an engineer, but also a designer, a product manager, and a DevOps specialist, all rolled into one.

This approach challenges the traditional separation of roles and encourages a more holistic way of creating. It’s about embracing the uncertainty and imperfection of the creative process. It’s a reminder that sometimes, the most beautiful things are not planned, but discovered.

Another profound lesson is that when you are vibecoding, you are not just a coder; you are the manager. You have to know what model to use and when, how to order the tasks so they don’t break the entire codebase, and when to take control and enforce some structure, even in a fluid process. This includes the often-neglected task of documentation. In a typical software job, you might not get to wear all these hats due to company policies and defined roles. But here, on your own project, you are the boss. You are the founder, the manager, the coder, and so much more. This level of ownership and responsibility is both daunting and incredibly empowering.

I am certain that with this vibecoding experience, I will be able to solve day-to-day problems with technology much faster than before. It has honed my ability to quickly prototype and iterate on ideas, to trust my gut, and to listen to the voice of the project itself.

Conclusion

Building Dhanika with the vibecoding approach was a deeply rewarding experience. It allowed me to create a product that is not only functional but also has a personality, a “vibe” that is uniquely its own. It reminded me that software development can be as much an art as it is a science. It’s a journey of discovery, a conversation with the digital canvas, and a testament to the power of creative intuition.