Shipping Chronicle with Laravel & Supabase
Inspiration
I heard someone on a podcast say they just build useful tools for themselves. That stuck with me.
I wanted somewhere to log my design decisions as they happened and share a link with anyone who wanted to follow along. That was basically it.
Why I Made It
The idea is simple: log what I'm working on, the decisions I'm making, and what I'm learning in public, as it happens. Project updates, design decisions with the reasoning behind them, weekly recaps. A chronological feed that becomes a body of work over time. It's personal by design. I'm the only one who can log entries, the public link is read-only.
No one asked for this tool. I had an idea, wanted to expose myself to more AI tooling and went for it.
How I Made It
Day one was straightforward. React, Vite, Tailwind, Supabase, Motion. Built in Cursor, deployed on Vercel. A personal tool, just for me.
Day two I decided to open it up. If I was going to share this with other people, it needed to actually work for other people. That meant a real rebuild. I also used it as an excuse to try something completely new to me: Laravel.
A dev friend had been encouraging me to give it a shot. Auth, routing, a lot of the backend scaffolding comes right out of the box, which made the learning curve more manageable. AI tooling handled the troubleshooting in real time. What could've been a frustrating weekend of chasing errors was actually just... building and tinkering. The toughest call was figuring out hosting and database management. I ended up connecting it back to Supabase for cost reasons and deployed on Laravel Cloud.

I also overhauled onboarding. Rather than dropping someone into an empty feed, it's guided and task-based. You create your first entry as part of getting set up. Seemed like the most intuitive way to show someone what the tool is actually for.
My Favorite Part
Once you have an account, the logging interface lives at the bottom of the feed. At rest it's a simple input. Start typing, press Enter, entry logged. Hit expand and it grows in place to reveal the full form — one continuous component, no content swapping, text never lost between states.
It took the most work. The first version swapped between two separate components and felt janky. The fix was rebuilding it as one unified component where fields reveal through height and opacity changes. Nothing ever unmounts, the component just shows more of itself.
Sequencing mattered too. Content exits first, then the container shrinks. 150ms of ordering that completely changed how it felt.
Spring physics felt too bouncy so I switched to custom cubic-bezier curves. Expansions drift in slow, collapses snap out fast. That asymmetry is what makes it feel intentional.
What's Next
There are things I still want to fix. But shipping something real — a new framework, a proper backend, multi-user auth, a flow that actually onboards someone — in a weekend felt worth documenting. Learn by doing, then do it again.
