DEV Community

Şehit Şamil GÖKMEN
Şehit Şamil GÖKMEN

Posted on

Vibecoding a Time Tracker: A Cynical Guide to AI Orchestration

As a frontend engineer with over six years in the trenches, I’ve seen my share of over-engineered garbage. So, naturally, I slapped together a time-tracking app last weekend, relying almost entirely on AI agents and chatbots. Yes, I know. Another time-tracker. There is already an absurd amount of well-established competition in this space, backed by endless case studies and projects churned out before—and increasingly after—the dawn of AI coding workflows.

The primary reason I built it? My beloved fiancée needed something exactly like it. When I asked my developer friends for app recommendations, they hit me with the classic joke: "Why don't you just make one for her?" I laughed it off initially and gave it a hard pass. But then, as the weekend rolled around, I realized I needed a break from micromanaging my towns in Manor Lords, and frankly, I was itching to feel productive without trying too hard.

So, I started discussing it with Gemini, as I often do these days. It all began with a casual architectural debate: for a project like this, what makes more sense—lean React or Next.js? One hypothetical tangent led to another, and with a little artificial encouragement that "this would be a good exercise," I fired up the initial commit.

I headed over to bolt.new. After briefly reviewing a few AI mockup and wireframing tools, I decided they were too much of a hassle for a weekend fling. Instead, I just hit Bolt with a few sentences, describing the idea and specifying the stack: React, Vite, and shadcn. A few minutes later, Bolt spit out an expectedly good-looking UI masking an unexpectedly horrifying codebase.

_Result of the bolt.new_
The initial Bolt output. UI looks clean, code not so much.

I quickly turned it into a GitHub repo and switched back to my loyal AI coding pal, Cursor. After setting up some baseline Cursor rules, I selected Claude 4.6 Sonnet—Opus would have been a massive overkill for this. My first prompt was simple: scan the repo and find what’s completely broken. Boy, did it find a lot of garbage. After burning through some tokens to fix Bolt's problematic foundation, I was ready to dive into the details, expand the functionality, and morph this fast-tracked tech demo into an actual product.

The God Complex and the Generic Pot

I have to admit, it was dangerously fun to shape the frontend exactly as I pleased. Operating as a highly opinionated Product Owner with near-slave-level code generation at my disposal gave me a profound understanding of the psychology behind low-level managers in poorly run mid-sized companies—the kind of C-levels who micromanage every developer without even knowing their names.

Satire aside, I tried to give the UI a distinctive feel. We achieved it to some extent, though it begs the question: how unique can a product's UI truly be when you're relying entirely on pre-styled component libraries? A debate for another time.

I sprinkled in some color and added basic features missing from the Bolt demo, like Google Sheets integration. Slowly, the product took a shape I liked. I felt like a potter at a wheel, watching my spinning pile of digital dirt turn into something functional. Of course, it was going to be a pot just like a million other pots, but it was my pot.

WIP ui screenshot

I spent the weekend mapping out a roadmap with Gemini—brainstorming names, locking in the tech stack (Zustand for state management, a tally mark for the logo, etc.), and finally settling on the name Çetele. After throwing a few more API tokens at Cursor, I had a working platform sitting in front of me. It was almost entirely AI-written, with just a few manual tweaks here and there for the edge cases that weren't worth making my $20 Cursor subscription sweat over.

But this is the exact moment where you have to sprinkle in that "product-minded engineer’s fairy dust."
Gemini is fantastic for discussing technical details, but it rarely volunteers the critical, unsexy information unless you explicitly ask for it. It won't spontaneously offer the brilliant, defining architectural pivot that separates your end product from the digital landfill. I had to throw specific concepts and keywords at it to generate a secondary roadmap—the one that turns a "vibecoded" demo into a robust application.

I'm talking about the stuff every seasoned engineer instinctively looks for: proper error handling with visual toast components, subtle UI UX refinements that users actually feel, and ensuring API security is locked down (even without a traditional backend, you absolutely cannot leave a Google API exposed for abuse). I added debouncing logic here, and edge-case handling for Google connection timeouts there. This checklist might sound painfully obvious, but let's not forget that these AI workflows are currently being weaponized by non-technical idealists and juniors with zero real-world product experience to launch incredibly vulnerable software. For a seasoned engineer, this is an automatic mental checklist; for an AI, it's an afterthought.

Premium Tupperware and Finding a Soul

Even after checking all those boxes, a technically sound project still isn't a product. It needs one more thing: a soul.
Cheesy reveal, right? But it's true. A tech project with all the right implementations is still just a demo until you add branding, themes, localization, mobile responsiveness, and a live deployment.
To achieve this, I crawled back to my everything-assistant, Gemini. I described a logo idea, had it generate an image prompt, fed that prompt to Nano Banana, and voilà—a beautiful logo. A few minor Photoshop tweaks later, I had my favicon, Open Graph images, and the core branding needed.

_Cetele logo_

Next, acting purely on impulse, I asked Gemini for a prompt to generate an "absurdly modern and good-looking animated landing page." I pasted that prompt into Cursor, and it one-shotted the exact page I was yearning for.

But here is the inherent problem with these pages: they look fantastic, but they look like they rolled off a mass-production line. That’s exactly why AI is so good at creating them—they all look and feel the exact same. AI-generated landing pages are the digital equivalent of premium Tupperware. They look expensive, they make you feel special for having them, but at the end of the day, you just put leftover pasta in them, and everyone else in your neighborhood has the exact same set.

But you know what? I took the Tupperware (both figuratively and literally). It saved me five hours of CSS debugging, and it was a nice touch; I’m admittedly amazed every time I look at it.

_A delightful page indeed_

From there, I knocked out the remaining list. I implemented an EN/TR language switch with proper i18n support, defaulting to Turkish since my fiancée is the target audience (and it’s always better UX when an app opens in your native language). I ended up regenerating the Turkish locale files with Gemini, as it handles contextual translation far better than a blind Cursor operation. I slapped on a clean Google Font—it is endlessly remarkable how much a single font can dictate whether a frontend looks modern or generic. Finally, I polished the mobile responsiveness, knowing full well that any developer friend I sent this to would open it on their phone.
The final leg of branding was the domain name. Naturally, cetele.app and cetele.com were already squatted on. I usually check availability before settling on a name, but this time I genuinely didn't care enough for the name since there were none that I really liked. On the bright side, it saved me the domain registration fee. I bypassed certain genocide-backing cloud infrastructures and deployed it straight to Netlify in a few clicks. So far, so good.
You can give it a go from here.

The Death of the Code Monkey

The site is live. It received solid reviews from developer friends who don't hold their tongues on matters like this—which is a pretty neat quality that separates phony hype-men from actual friends. The fiancée is impressed. Mission accomplished.

It’s another showcase proving I can take a product from zero to hero. Granted, it wasn't a tough nut to crack—there's no incredibly complex business logic or enterprise scaling plan to handle massive concurrent traffic—but it is still something. It is alive. It sits in its cold cloud, waiting to be used. It was excellent practice, and I am happy with the result, which is all that matters.

_Current state of the app_
Current state of the UI

I briefly entertained the idea of writing a sanitized, corporate LinkedIn post about this to attract recruiters or throw a stone into a still lake. Then I thought: fuck the LinkedIn post and fuck being a sellout. Why not just write a cynical, sarcastic blog post instead?
Long story short, I built an entirely unnecessary app over the weekend using AI, and it felt dangerously good. It’s so easy that it almost feels like it should be illegal. But when you look at the trajectory of the industry, this is exactly where we are heading. As models and tools become increasingly expensive, the era of bosses and financial backers approving unlimited API budgets for developers will inevitably end.

The fact that a standard $20 Cursor subscription worth of AI tokens can code a functional product in a lazy weekend proves that the definition of a "developer" is changing—or rather, it already has. A developer is no longer just someone who writes code; they are an orchestrator of AI tools. This brings us to the modern reality of the "Product Engineer," a title I suppose I now hold, which is really just a fancy way of saying I successfully babysat AI bots for 48 hours to build a glorified timer.
AI has evolved enough to write the code for us. Therefore, developers must evolve to become full-circle product engineers, or risk remaining coding monkeys in an era that no longer needs them.

Peace out.

Live Demo: https://ssg-cetele.netlify.app/
Source Code: https://github.com/ssamilg/cetele

Top comments (0)