Blog

One Month of Open Alpha

One month into open alpha, Circadia has moved from a tool I built for my own impossible sleep into an app with enough real N24 data to make the research side feel less theoretical. The Community tab is live, Jon replaced the particle filter forecast with a tag-aware Kalman-IMM model, and the app now has enough users to expose the administrative layer under health software: platform rules, security audits, server costs, and the boring financial reality of keeping something useful alive.

Open alpha went live on May 13. That makes this the one-month update!

The first update was two days in, when Circadia was still mostly a tool I had built around my own sleep. I needed somewhere to put data that normal sleep apps either rejected, flattened, or treated like user error. I drift around 5 hours per night, with frequent 30 to 65+ hour stretches awake. I did not need another app telling me my sleep was irregular. I needed one that understood irregular as the starting point.

A month later, Circadia is in the strange last stretch between open alpha and native launch. People are logging, importing, sharing data, breaking charts, testing forecasts, and showing me what the app has to handle if it is going to work outside my own sleep. We are days away from submitting the iOS app, with Android following after Google Play’s required closed test.

The app shipped constantly this month. The harder part was the layer under and around the code: health-data permissions, store rules, security audits, server costs, accessibility issues, and years of messy sleep history arriving all at once. That is what this update is about: what changed, what shipped, what broke, what still costs money, and what I am doing about it.

The numbers

In my first update, Circadia had been open for two days. 36 people had signed up, and 11 were sharing data. One month in, there are 97 sign-ups, 50+ people logging daily, and over 21,000 sleep entries in the app. Some people started from nothing. Some imported years of sleep history and immediately proved that my original chart code had been living a sheltered life.

The smaller number matters more: 43 people are sharing data to improve the algorithm, 38 at the research tier, and 36 have consented to future publication. The largest study of sighted Non-24 ever published followed 57 patients, twenty-one years ago (Hayakawa et al., 2005). Circadia has not passed that yet, but the research-sharing cohort is approaching that scale in its first month.

A month in, I am already seeing possible phenotypes inside N24. Some people have a bad night with a huge drift, then snap back toward their natural τ with negative drift. Some people have the same bad night and simply continue from the new point as if the lurch became the new baseline. Some sleep long after a sleepless stretch. Some seem almost locked into a fixed total cycle, where staying awake longer means sleeping less. Others drift in both directions instead of cleanly free-running one way.

That is the kind of structure I have not seen described well in the literature. Circadia may be able to bring it into view: not one N24 pattern, not one average τ, but different ways the disorder behaves over time.

Other fun numbers: ~160,000 hours of sleep logged across everyone (almost 18 years), 247 logged stretches of 24+ hours awake, more than 16,000 full sleep-wake cycles, and — added all together — over 600 laps around the clock. Plus, my own exciting number: about 1,350 code commits in 30 days. (I've been busy!)

The Community tab

N24 isolates by making time unstable. Your waking hours slide later, sometimes slowly and sometimes all at once, and the people around you stay attached to a clock your body keeps leaving behind. After a while, the disorder is not just about when you sleep. It is about when you can answer messages, when you should eat, when you should take medication, when you can show up, when light helps or hurts, and why 4pm can be a perfectly normal afternoon for someone else and the middle of the night for you.

Most people with sighted Non-24 have never met another person who has it, and almost none of us have seen what the disorder looks like across more than one body. The Community tab is my attempt at that second thing. It is not a social feed, but it can show you the shape of the group you’re part of: who's awake on your schedule right now, where your body-clock length sits among everyone else's, who drifts at nearly your pace, and which everyday things seem to move people's rhythms. The point is less "meet other people" and more "stop feeling like the only data point."

It is opt-in, anonymous, and share-to-see. It is also separate from research and publication consent. Community pools derived numbers, not raw nights, because rare-disorder data does not become safe just because a name is removed from it.

What it shows

The N24 Atlas shows where everyone’s body clock is sitting right now, not where they live, but where their biology is across the 24-hour day. Your slice is marked, so you can see how many others are near your body time. That sounds small until you have spent years feeling like your sleep exists in a private weather system nobody else can see.

The Community Discoveries section looks at what factors may be moving drift: light timing, darkness, screens, melatonin, caffeine, alcohol, last food, stress, illness, social obligations, medication, and exercise. Those are zeitgebers, time-givers, the external signals that can nudge a circadian rhythm.

The important part is the math. Each effect is computed within one person first, then averaged across the opted-in community. Circadia compares your tagged nights against your other nights before adding your result to the group, so the fastest drifters cannot drag the whole finding around. It is not asking whether people with worse N24 behave differently. It is asking whether a change inside one person’s life lines up with a change inside that same person’s drift.

Each finding gets a confidence tier: Emerging, Moderate, or Strong. The group is still small, n=20, so most findings should be treated as early. That is the point of showing confidence instead of dressing every number up as a conclusion. The early results are already interesting enough that I keep checking them.

How you compare

There is also a τ percentile, so you can see where your body-clock length falls against the group. A tighter view compares you only with people whose body clock runs within an hour or two of yours, because someone drifting twenty minutes a day and someone drifting four hours a day do not belong in the same bucket.

Sleep Constellations sort people into drift archetypes — Fast drifter, Moderate drifter, Slow drifter, Near-24, and Bidirectional — so you can see your type and who shares it. Sleep Clubs are badges earned from your own patterns: Fresh Starts, Marathon Loggers, Smooth Operators, Erratic Drifters, Speed Lappers, Long Haulers.

Everything else that got built

Forecast and τ math

Jon replaced the forecast. The previous adaptive forecast was a particle filter: sixty-four competing guesses about your rhythm that updated every time you logged a night. He wrote that version up here. This month, he replaced the particle filter forecast with Adaptive V3, a Kalman-IMM model.

Plain version: it runs two filters at once. One assumes your drift is relatively steady. The other assumes your rhythm is unstable. A Markov chain decides how much to trust each one from night to night. The forecast widens when the two disagree, or when your recent nights are messy, and tightens when things settle. That is what I want from a forecast for this disorder: not confidence as a costume, but uncertainty that actually responds to the data.

The new forecast also reads tags. If you log caffeine, illness, stress, medication, or other context (like custom tags), that information can affect the next prediction instead of sitting off to the side like a note nobody reads. There is also a personalization layer underneath it. The current model can use general settings across users, but the paid tier will add an every-two-weeks training run on your own sleep history. That means the forecast can keep adapting to your rhythm over time, rather than relying only on population-level defaults.

My side was the τ math. I rewrote the Smart estimator in gap-space, which fixed a bug where one long cycle could read as either −9.95 or +14.05 hours of drift depending on which way around the clock the math measured it. The old estimator benched those nights instead of risking a bad read. That was safer than using them wrong, but it also meant some of the most important nights were being excluded because the clock is circular and the math did not know how to be honest about it. Now a long cycle reads as a long cycle. I wrote that change up on its own.

Planning tools

The Body-Time Translator turns clock time into body time. If a doctor offers you a 9am appointment, Circadia can show that 9am may land at 2:13am for your body, with a conflict score to match. The related event check answers the question underneath every future plan: “Am I likely to be awake then?”

The Clock runs off the live forecast. It has a continuous awake band, sunrise and sunset markers, raw latitude and longitude, polar-latitude handling, and a wake-relative planner so meds, meals, caffeine, and light can be planned around your biological day instead of the wall clock. You can also anchor events to your predicted bedtime, which helps for evening meds, wind-down times, and more.

The Time Zone Passport names the world city whose local time currently matches your body clock and stamps the cities your clock passes through as it drifts. For fast drifters, one stamp per day is too coarse. I am working on a version that shows several cities across a single day, because my body clock can apparently take a layover before breakfast.

Charts and analysis

The chart took more work than almost anything else. I built the first version on my own log. Then testers arrived with several thousand sessions across years, and the chart folded. It now has a canvas fast path, fewer slow recomputes, a navigation strip for long histories, weekly downsampling, normalize-to-τ, group-by-day, center-on-you, and per-date rows so missing days do not disappear.

Next to it, the new Analysis tab is where you actually dig in. It has the actogram — one row per cycle, the standard chronobiology view — which you can read against a 24-hour day, where a free-running rhythm marches diagonally down the page, or realign to your own τ, where the same rhythm stacks into a straight line. It also shows your own with-versus-without effect for each tag, how steadily your timing drifts, when you tend to fall asleep, a sleep-midpoint metric, and a forced-wakes panel. That forced-wakes split matters, because a sleep that ends naturally and a sleep that ends because the world demanded consciousness are not the same data point.

Sharing and community context

Calendar sync publishes a private feed you can subscribe to in Apple or Google Calendar. Predicted sleep windows show up as events and move as your rhythm moves. You can include past logged sleeps, choose which forecast drives it, and use the in-app calendar view if you want the forecast as bars instead. I teach contortion and I free-run. I made this because students kept trying to book me for hours I was asleep. Now anything that reads my calendar knows when I am actually available.

Circle is the partner-and-friend sharing I wanted early on, built with real boundaries instead of "just show someone everything." You generate a code or link and decide per person, exactly how much they see — three tiers, scaled to how close they are. Availability only is just your busy/free windows, for classmates, coworkers, and acquaintances. Family & friends adds your current status, today's predicted wake, and when you're likely reachable. Full detail is a read-only view of your whole Circadia — recent nights, weekly trends, your predicted week — for the people who actually plan around your sleep. There are public, read-only status links for people who aren't on Circadia, and an Awake Planner that answers "how awake will they be at 7pm?" right on someone's card. The point is that someone who loves you can know whether you're probably asleep without waking you to find out.

Accessibility

The accessibility pass was one of the most important parts of the month. There is real overlap between circadian disorders and light sensitivity, vision differences, chronic illness, migraine, and neurodivergence. An app for this group has no business being difficult to look at or navigate. The pass added text & app scaling, numbered icons instead of emoji for mood and cognition, contrast fixes, screen-reader labels, reduced motion, faster tooltips, and a high-contrast theme.

Imports and polish

Imports now cover Sleep As Android, Fitbit, Oura, Huckleberry for baby or child sleep, and paste-your-notes, all with dedupe so re-imports do not duplicate old data. Logging got split-sleep grouping, a one-tap "didn't really sleep," a stale-logs guard so the app stops warning that you have been awake for 130 hours when you forgot to log, bulk "fill unknowns," a "my usual" shortcut, two-tap delete, and settings that sync across devices.

The navigation changed too: Clock, Log, Predict, Community, Trends. Settings got more compact. The Doctor's Report PDF got a real methodology section. Themes and color schemes were added for those that don't vibe with the cosmic backdrop: Aurora, Bioluminescence, Bubblegum, and more along with some light-themes like Dawn and a high-contrast black-and-white.

That is the visible list. Underneath it is the longer list every app has: small fixes, wording changes, performance repairs, edge cases, import weirdness, scroll positions, save buttons, missing states, tooltips, and all the places where a real user does something more interesting than the developer's test data.

Native apps, and why Android is later

The iOS and Android apps are already built. I have mostly been tinkering, polishing, fixing native-specific weirdness, and updating them every time the web app changes, which has been often because open alpha has been moving fast.

The part I underestimated was not “can I make the app run on a phone?” It runs on a phone, and quite well. The part I underestimated was everything between a working app and a store release. I did not understand how many platform rules sit between those two things until I ran into them.

iOS is coming first. I plan to submit it soon, though submission and publication are not the same thing, especially for a health-adjacent app. Circadia is careful with wording on purpose. It does not diagnose, treat, or pretend a forecast is a medical conclusion. It shows patterns, estimates, uncertainty, and context, because that is what the app can honestly know.

Android is ready too, but Google Play has an extra gate I did not know about until after I paid for my account and was ready to hit submit. New developer accounts have to run a closed test with at least 12 testers for 14 continuous days before they can apply for production release. Not before approval. Before applying. If those 12 testers don't open the app daily, they fail you and you have to start over.

Then I found out I needed to buy an Android phone to prove I had a real test device. That is fair enough in hindsight, but it was not on my mental checklist when I started building. I am new to apps, and this has been one of the louder ways the process has reminded me.

So Android is not later because the app is less built. It is later because Google Play has a mandatory waiting room, and I walked into it later than I would have if I had known it existed. With almost 100 users already in open alpha, being required to run a closed test is objectively funny. Not helpful, but funny. So iOS comes first, and Android follows as soon as Google’s required waiting period is over. I will be sending out tester requests soon!

The walls I hit

I wanted Fitbit sync to be simple because the user-facing idea is simple: connect the thing people already sleep with, pull in the sleep data, and let Circadia do the part Circadia is good at.

That is not how health data works.

Google retired new access to the old Fitbit Web API, so Fitbit sleep data now has to come through the Google Health API. Sleep is a restricted scope. Restricted scopes require verification, and for this one, verification includes a third-party CASA assessment, a Cloud Application Security Assessment. The cost range I was given is roughly $500 to $4,500 a year.

Per year.

For a company, that is a compliance line item. For a small app with one health-data integration, it changes the entire calculation of the feature. I understand why health data has a higher bar, I want health data to have a higher bar. I also understand now that the bar is priced for organizations with budgets, not tiny projects trying to add one integration without charging everyone for it.

So for now, live Fitbit sync is paused while the app sits in Google's verification queue so I can find out how much (in that very LARGE range) verification will cost. Fitbit users can import from a free Google Takeout or Fitbit export instead. It costs nothing, works today, and uses the same underlying data.

The larger lesson is that almost none of this is visible until you hit it. Scope tiers. Security audits. Token lifecycles. Store-review rules. Claim wording. Permissions. The administrative side of health software is not a side quest. It is part of the product whether I like that or not.

Keeping Circadia alive

I feel weird charging people for a tool I built because I need help.

I feel weirder imagining the community losing it because I tried to make server bills disappear through moral purity.

The core stays free: logging, drift, τ, the actogram, the basic forecast, and the Doctor’s Report PDF. Those are the parts someone needs to understand their rhythm and bring something coherent to a doctor. I built Circadia because normal sleep tools did not work for me, and I do not want the basic version to become another thing people with N24 cannot access.

But Circadia costs money to run. Servers cost money. Forecasting costs compute. App stores take their cut. Health-data access has verification and security costs, including a third-party CASA assessment that can cost $500 to $4,500 a year. None of that gets cheaper because the app is useful.

There is already a donate button in the account menu. It does not unlock anything, it is not a secret subscription, and it will not follow you around the app making sad owl eyes. It is just there for people who want to help with server costs, security costs, and the general reality of keeping Circadia alive before the paid tier launches.

When the native apps launch, there will be a paid tier. I am tentatively planning on launching it at $4.99/month, with an optional $9.99/month supporter tier for people who want to help fund the project beyond their own account. There will also be annual options and lifetime options, as well as a special rate for those who helped me test in Alpha, so many of you made the app what it is with your feature requests and bug reports. There will also be a free trial, and an “I can’t afford this” option where people can email me. The point is not to take away parts of the app people have been using. It is to keep the doors open.

The paid tier will not be a sad little unlock screen with one extra chart. It will include the expensive and advanced parts of Circadia, especially personalized adaptive forecasting: a training run on your own sleep every two weeks, so the model can keep learning your rhythm instead of treating you like the average user. Other newer planning and analysis features will live there too.

N24 is a disability, and disability affects income. I know that from the inside. I want people who need Circadia to be able to use it. I also want Circadia to still exist six months from now.

That is the line I am trying to hold: the essentials stay free, the paid tier is worth paying for, donations are there for people who want to help early, and the people who can support the project help keep the tool alive for the people who cannot.

The people testing it

Much of what shipped this month came from people using the app hard enough to break it.

Someone reported a bug. I fixed it. Someone tested the fix, found the next edge case, and the loop started over. The chart only handles years of sleep data because someone brought years of sleep data and made it fail. Several forecast problems were caught because people watched their own predictions go wrong and could tell me exactly where the model stopped matching their life. A lot of the planner, import, analysis, and sharing work started with some version of, “Could it also do this?”

The Discord has made that possible in a way I did not expect. It lets people report something while it is fresh, attach the screenshot, explain the weird sleep context behind it, and then test the fix before the thread has gone cold. That is a very different development cycle than guessing alone from my own data. Circadia is better because the testers are not just saying whether the app works. They are showing me what “works” has to mean for N24.

I also made a Facebook group for people who would rather not use Discord. The community is already split across different comfort zones, different schedules, and different levels of energy, so I want there to be more than one door in.

That part matters more than I expected. N24 is isolating because your schedule keeps leaving other people behind. Most of us have spent years trying to explain a rhythm nobody around us could see. Watching people find each other through the app, compare patterns, and realize they are not the only impossible-looking data point has been one of the best parts of the month.

Circadia is still becoming the thing it needs to be. It has real users, real data, real bugs, real costs, and a community that is already changing the shape of the tool.

Keep telling me what is broken. Keep telling me what you wish it did.

— Dayah

FAQ

What is Circadia?
Circadia is a sleep tracker for Non-24-Hour Sleep-Wake Disorder and other circadian rhythm disorders. You log your sleep, and it shows your circadian drift, your τ (the length of your body's day), and a forecast of when your next sleep window opens. It runs in the browser at circadia.owlandkestrel.com, with native iOS and Android apps in progress.
Is Circadia free, and will it stay free?
The core stays free: logging, drift, τ, the actogram, the basic forecast, and the Doctor’s Report PDF. When the native apps launch, there will be a paid tier for the more advanced and expensive-to-run features, including personalized adaptive forecasting and newer planning/analysis tools. There will be a free trial, and an option to email me if you cannot afford it.
What is Non-24-Hour Sleep-Wake Disorder?
Non-24-Hour Sleep-Wake Disorder is a circadian rhythm disorder where your body clock does not stay aligned to the 24-hour day. In sighted Non-24, sleep and wake times often drift later and later instead of holding to a stable schedule. It is common in totally blind people and under-recognized in sighted people. There is a full explanation here.
Can Circadia import my Fitbit or Oura data?
Yes. Circadia imports Sleep As Android, Fitbit, Oura, Huckleberry for baby or child sleep, and paste-your-notes. Oura syncs live over OAuth. Fitbit live sync is paused while Google Health API access clears verification, so Fitbit data comes in by free file import for now.
How does Circadia predict my sleep?
Two ways. The transparent estimators, Smart, Clean, and Raw, compute τ and drift from your history. Jon's adaptive forecast uses a Kalman-IMM model that runs two filters at once, one for steady drift and one for unstable rhythm, then blends them based on which fits your recent data. It also reads tags like coffee, illness, stress, and medication.
What is the Community tab?
The Community tab is an opt-in, anonymous view that pools derived numbers, never raw nights and never research data. It shows where everyone's body clock sits, what factors may be moving people's drift, where your τ falls against the group, and the people whose clocks run closest to yours.
Is my data private?
Sharing is opt-in, with separate choices for app improvement, research, publication, and Community. Community uses derived numbers. Research sharing strips identifying information and can be revoked.
Is there a native app yet?
Not yet. The iOS and Android apps are built. iOS will launch first. Android will launch at least two weeks later because Google Play requires new personal developer accounts to complete a 14-day closed test with 12 people before applying for production release.
How can I support Circadia?
Use it. Log honestly. If you are comfortable, opt into data sharing so the forecasts and research tools improve. There is also a donate button in the app, in the account menu, if you want to help with running costs.

Comments