Launch
CountdownBoxes
Visit
Example Image

CountdownBoxes

3000+ live countdowns, and every category is a calendar

Visit

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.

Example Image
Example Image
Example Image
Example Image
Example Image
Example Image
Example Image

Features

  • 3,000+ live events from 50+ sources. Sports fixtures, concerts, rocket launches, anime episodes, game releases, holidays in 100+ countries. 13 categories, one event model.
  • Every category is a calendar subscription. One webcal:// URL per category (or all of them at once) that your calendar app refreshes forever. UIDs are id-based and stable, so events never duplicate on your side.
  • Push reminders in one tap. Pick any event, get notified before it starts. No account, no email address.
  • Embeddable countdown widget. One iframe snippet puts a live countdown for any event on your own site. Theme-aware, oEmbed supported, no JS bundle.
  • One search box over all of it. 300ms debounced, results render in the same live-countdown grid as the home page.
  • Country pages and date tools. Upcoming events per country, "what happens on this date" pages, and 30/60/90/100/180/365-days-from-today calculators.
  • Cross-source dedup. The same marathon arrives from four providers with four different titles. pgvector embeddings merge them into one event, so the grid is not a pile of near-copies.
  • No signup wall anywhere. Grid, search, feeds, widgets, reminders: all work logged out. Cookie-free analytics, and it is a PWA, so it opens offline.

Use Cases

  • Follow one topic and stop checking. Subscribe to a category feed once, and every new fixture, launch or episode lands in Apple/Google Calendar on its own. Rocket launch dates slip constantly; the feed refreshes, so your calendar entry moves with it.
  • Catch anime episodes and premieres at your own local time. Airtimes are normalized to your timezone, so no more converting JST in your head.
  • Plan across countries. Holidays in 100+ countries in one place, for remote teams, freelancers with foreign clients, and anyone scheduling a call into another country's long weekend.
  • Put a countdown on your own site. Product launch, tournament, album drop: copy one iframe and it counts down and updates itself.
  • Give your community one link instead of a pinned message that goes stale. Share the category feed, everyone subscribes, the schedule stays current.
  • Answer a date question in one page. "What is 90 days from today?" or "what happens on March 14?" without opening a spreadsheet.

Comments

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 :)

Premium Products
Social Links

Comments

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 :)

Premium Products