Inspiration

My older daughter was born on Qixi — the Chinese Valentine's Day. My younger one on the Western one.

One of those dates moves every year. The other never does.

I only started building calendar and astrology engines a few months ago. The wall showed up almost immediately: the sexagenary calendar my culture has used for thousands of years is beautiful, and almost nobody outside East Asia can read it. Every attempt to explain it turned into a lecture.

So I stopped explaining it. I turned it into sound.

I wanted to give my daughters something only their own life could make. Not a photo, not a video — something that exists because they were born on the days they were born.

What it does

You type in a date. You hear it.

SIXTY · 60 turns the sexagenary calendar into a music generator. Your birth date picks your instrument, and it never changes — that's your sound. The day itself decides the mode, the tempo, the density, the space between the notes.

A day becomes a short piece. A month of days becomes a song.

It never tells you a day is lucky or unlucky. It only says the day sounds different.

Everything runs on the device. No account, no server, no AI, no network. It works on a plane.

How we built it

The engine is pure Dart with no Flutter dependency — the calendar, the ten-god relations, the musical mapping, the composer and the synthesis are one library that can be tested on its own. Audio is generated on device and rendered offline to WAV.

The hard requirement was determinism: the same date must produce the same music forever. Every random choice runs through a seeded generator derived from the profile and the ISO date. If a song can change under you, it isn't a keepsake.

That has a consequence I didn't see coming. Any time I improve the composer, everyone's existing songs change. So the engine carries a version fingerprint, and anything a person has paid for gets pinned to the version it was made in.

Most of this code was written with AI — Claude, Codex and Gemini, running as a loop I supervised. None of it runs in the app. SIXTY makes no network requests at all.

Challenges we ran into

The piano kept getting rejected.

I started with a fully synthesized piano — oscillators, filters, envelopes, no audio assets at all. It kept the app tiny and let any note be made on the spot.

My 12-year-old turned down version after version. Not "I don't like it." She could hear specifically that it wasn't a piano: the note died too fast, the release was wrong, the hammer wasn't there. I chased it with parameters for a long time — sustain length, a damper that responds to pitch, brightness that doesn't collapse at the top.

Eventually I stopped. Some things you don't reach by tuning. There are now two versions: the synthesized one, which is weightless and instant and honest about being synthetic, and a recorded piano for when it has to sound like a piano.

The test suite lied to me.

I had an acceptance test checking that "the four weeks show a visible difference in density." It passed. It kept passing. What it actually measured was the number of audio events per week — and that number only grows if you add more instruments each week. I had decided, twice, to keep it to solo piano. The test was quietly protecting the thing I had ruled out.

A green test that locks in the wrong behaviour is worse than no test. It makes the mistake look deliberate.

Nothing I could write could tell me whether it sounded good.

I have 297 tests. Every one of them checks the output is correct — right pitches, no clipping, reproducible to the note. Not one of them can hear.

Accomplishments that we're proud of

The engine is verified rather than assumed. The day-pillar algorithm is checked against fixed anchors, and 72 golden samples hold the Dart port to the original prototype note for note.

It genuinely runs with nothing behind it. No account, no server, no AI, no network request — a constraint that was easy to write down and hard to keep, and it survived.

And the month song went from four instruments down to one piano playing one note at a time. Cutting things is not usually the part you're proud of. This time it is.

What we learned

My daughters are 12 and 9. They listened to every version and told me three things: whether the piano actually sounded like a piano, whether the harmony was pleasant, and whether the screen was pretty.

The 9-year-old's entire first review was that it was too black. She was right, and it made the app feel like an instrument panel instead of something you'd want to keep. When strangers finally tried it, the first thing they said was that it looked nice.

They were right about the things I had no way to measure, and they were right early.

The other thing I learned was subtraction. Less isn't always more — but with one piano playing one note at a time, I could finally hear what was actually happening.

What's next for SIXTY · 60

Beyond your birthday: the day you met someone, your ten-thousandth day alive, the day everything changed.

Every date already has a pattern in this calendar. I just want people to be able to hear theirs.

Built With

Share this project:

Updates

Submission history