ChromaCal: Four Versions of the Same App
My wife wanted a calendar app where she could see her schedule as colors instead of text. Glance at the month and immediately know if you're balanced or buried.
I built it for her. It took four attempts. Here's the app, how I built it, and what finally clicked.
The App
ChromaCal works like this: you assign colors to event types, organize them into groups, and log events on days. The month view fills each day with the colors of what happened there. Multiple events create diagonal stripes. Glance at your month and patterns emerge that words would hide.
The year view zooms out so you can spot patterns across months. Toggle event groups on and off to filter what you see.
The Build
ChromaCal was one of my first vibe-coded apps, started when the tools were rougher and I was still figuring out how to use them. Early attempts suffered from a pattern I've since learned to recognize: vague prompts produce cluttered results. The AI would add features I never asked for. I'd get functionality working, then break it adding something else.
I rebuilt the app across Cursor, Claude Code, Replit, and Google AI Studio. Each tool revealed different strengths. By the final version, I'd developed a workflow that stuck: spec the app in detail before touching code. Use Google AI Studio to iterate on the UI with that spec as context. Then use Claude Code for functionality, breaking the spec into discrete tasks.
The separation turned out to be essential. UI generation and functional development require different kinds of AI interaction.
The tech stack is Next.js 15, Neon PostgreSQL with Row Level Security, BetterAuth for Google OAuth, and Lemon Squeezy for payments. Hosted on Vercel.
What I Learned
ChromaCal is a simple app. The concept fits in a sentence. But building it taught me more about working with AI than any tutorial or class.
Throw away attempts that aren't working. Write specs that leave nothing to interpretation. Separate UI from functionality. Stay open as the tools evolve. Most of what I built got thrown away. What I kept was the workflow.