CountdownBoxes - 3000+ live countdowns, and every category is a calendar

by
I wanted one page that answers "how long until X" for anything: the next F1 race, tonight's anime episode, Nowruz, the next Falcon 9 launch. No single API covers all of that, so CountdownBoxes pulls 3000+ upcoming events from 38 sync jobs into one model. Every category is also a webcal/ICS feed your calendar refreshes forever, any event embeds as a live widget in one iframe, and one tap sets a push reminder. You never need an account.

Add a comment

Replies

Best
Hunter
📌
This started as a single page that answered one question: how many days until the next F1 race? Then we wanted the same thing for tonight's anime episode, and for Nowruz, and for the next Falcon 9 launch, and that's where the actual problem showed up: no single API covers "everything that has a date". So basically the countdown page turned into an ingestion pipeline. 38 sync jobs pull from official APIs, public ICS calendars and a few undocumented but stable endpoints, and all of it normalizes into one event model (Next.js, Postgres, pgvector). As we write this it's more than 3700 upcoming events across 114 countries. Two things changed our mind while building it. First, we stopped treating the countdowns as the product. Here's the thing though: once we could subscribe to webcal://countdownboxes.app/api/... and have new events roll into my phone forever, we stopped opening my own site. That's when the calendar feeds, the embed widget and push reminders moved from "extras" to the main thing, and the countdown became the preview of the feed. Second, dedup killed our first assumption. The same marathon arrives from 4 providers with 4 different titles, and we assumed one cosine similarity threshold on embeddings would separate real duplicates from distinct events. It doesn't. Real cross source duplicates sit at 0.90 to 0.96, which is below same source noise at 0.96 to 0.98. In other words, no single global threshold can work, wherever you put it. What actually worked: class specific thresholds in SQL plus a "do these two locations contradict each other?" guard, because a missing city is not a different city. We want to be upfront about the rough parts. Coverage is uneven (SPORTS has 947 upcoming events, CRYPTO has 2), and we're still chasing a cron bug where a few sync jobs die quietly under the 30 second function limit. Everything works without an account. Happy to go deep on the pipeline if anyone is interested :)