I Built Finito: A Production Tracker That Actually Gets Music Producers
*I created this post for the purposes of entering the H0 Hackathon.
H0Hackathon
The Problem I Kept Ignoring
Producers always struggle to finish their tracks — drives are always
full of unfinished projects, and the reason isn't talent, it's having
no system. I understand this issue personally because I have a music
background. Every solution out there is a generic task manager
reskinned with a music emoji. None of them understand how producers
actually work.
So I built Finito to fix that. It is personally helping me finish
and track my own music progress.
What Is Finito?
Finito gives every track a visual pipeline — Idea → WIP → Mixing →
Mastering → Finished — so producers can save and track all their
projects in one place with real-time reminders so nothing goes cold.
But the pipeline is just the container. The real features are what
happen inside it.
The Features That Matter
🎛️ Real Audio Analysis
This is the best part. Upload a mix and Finito runs an actual FFT
on the audio file using the Web Audio API — entirely in the browser,
no server processing needed. It measures real low, mid, and high
frequency balance from the actual signal data, then sends those
numbers to Gemini AI for a specific mixing diagnosis.
Not guesswork. Not loudness scores. Real frequency data from your
actual mix.
// FFT runs client-side — audio never leaves the browser
const analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;
const bufferLength = analyser.frequencyBinCount;
const dataArray = new Float32Array(bufferLength);
analyser.getFloatFrequencyData(dataArray);
🤖 DAW-Aware AI
Set your DAW and every AI suggestion changes:
- FL Studio → Fruity Parametric EQ 2 references
- Ableton → stock device advice
- Logic Pro → Channel EQ suggestions
- Studio One → Pro EQ guidance
It feels like a producer friend who actually knows your setup — not
a generic blog post that could apply to anyone.
✅ Milestones
At the starting phase we did not have milestones, but I thought this
could be a great feature because milestones add excitement and give
immense satisfaction even when you complete just a few checkpoints.
Break tracks into checkpoints — drums done, vocals recorded, mix
approved. Check them off as you go. Progress bars update on the kanban
card. Small wins compound into finished tracks.
📧 Automated Accountability
- Untouched for 3 days? Email.
- Deadline approaching? Email.
- Mark a track Finished? AWS Lambda fires automatically via DynamoDB Streams and sends a congratulations email.
That moment deserves to be celebrated.
📤 Export
Imagine you have plans to travel and all your project data is on the
dashboard. Simply export everything and work offline. Download all
projects as Excel, JSON, or CSV — BPM, key, genre, DAW, milestones,
deadlines, all included.
The AWS Architecture
This is where it gets interesting. Built on the H0 stack —
Vercel + AWS.
DynamoDB — The Core Database
I ended up with three DynamoDB tables:
| Table | Purpose |
|---|---|
| finito-projects | All project data |
| finito-activity-log | Every user action timestamped |
| finito-ai-chat | AI chat history per project |
The projects table uses:
- GSI — for status-based queries (show all WIP projects)
- TTL — auto-expires abandoned projects after 180 days
- DynamoDB Streams — triggers Lambda on every status change
- Transactions — atomic writes across tables when marking Finished
- Conditional writes — prevents duplicate entries
This isn't a demo database. This is production-grade DynamoDB usage.
S3 — Audio Storage
Producers upload audio files up to 5GB per project. The frontend
never touches AWS credentials directly:
- App requests a presigned URL from the API
- Browser uploads directly to S3 using that URL
- The S3 key is stored in DynamoDB
- Downloads use the same presigned URL pattern
Audio never passes through Vercel — it goes straight browser → S3.
Lambda + SES — Event-Driven Emails
When a producer marks a track Finished:
DynamoDB status change
→ DynamoDB Streams detects it
→ Lambda function fires
→ SES sends congratulations email
No polling. No cron. Fully event-driven.
A separate Vercel Cron job runs daily checking for:
- Projects untouched for 3+ days → reminder email
- Deadlines within 7 days → deadline alert email
- Upcoming release dates → release reminder email
IAM — Scoped Permissions
The Lambda role only has access to:
- The specific DynamoDB tables it needs
- SES send permissions
Not admin credentials. Properly scoped IAM — because that's how
it should be done.
The Challenges
1. Never used AWS before.
DynamoDB Streams and Lambda wiring took significant debugging. IAM
permissions had to be scoped exactly right — one wrong policy and
nothing fires.
2. SES sandbox mode.
Emails land in spam in sandbox mode. In production this would use a
verified domain with DKIM and SPF. This was frustrating, but I am
happy it is working — it took significant time to get it right.
3. Knowing when to stop.
Every hour on feature fourteen is an hour the first thirteen features
go unexplained. I learned this the hard way.
What I Learned
DynamoDB Streams are underused. The pattern of "data changes →
event fires → something happens" is exactly right for reactive
applications. Cleaner than polling, cleaner than webhooks.
FFT in the browser is more capable than I expected. The Web Audio
API's AnalyserNode gives you real frequency data — not just a
visualizer, actually useful for mixing diagnosis.
DAW-aware AI was the best idea I had. Generic AI advice for
producers is everywhere. Advice that knows you're on FL Studio and
references Fruity Parametric EQ 2 — that feels completely different.
What's Next
- Full auth with AWS Cognito
- Spotify and SoundCloud integration for release tracking
- Mobile app for logging ideas on the go
- Inspiration library — reference tracks, album art, DAW templates
Top comments (0)