Configure an event, generate a private shareable link. Nothing is sent to any server — all data lives in the link itself.
How this works, what it does with your data, and what it can’t protect you from.
A countdown timer where the whole timer lives in the link. You fill out a short form, get a URL, and share it. Anyone who opens it sees a live countdown. No account, no sign-up, no database.
The tick is the countdown itself — the seconds ticking down to your moment. The zero is everything the page deliberately does without:
# in the URL, which browsers never send to a server, so no host ever learns what you’re counting down to.And the countdown, of course, runs down to zero.
Open this page with no # in the URL and you get the builder: an event title, a target date and time, which units to show (days/hours/minutes/seconds), and what happens at zero. Hit Generate link, then Copy link.
Paste the copied link anywhere — chat, email, a calendar invite. Opening the link is the timer; there’s nothing to install.
You get the builder back with an inline message explaining what was wrong (bad timestamp, bad units, bad zero-behavior) rather than a blank page or an error. Nothing crashes.
Yes. Your date and time are entered in your local timezone, but the link stores an absolute UTC instant. Everyone who opens it counts down to the exact same moment, whatever their timezone.
No. Every tick recomputes from the current wall clock rather than subtracting one second from a counter, so it self-corrects after sleep/wake and after browsers throttle background tabs.
When the tab is in the background, the tab title shows the running clock (e.g. 02d:14h — Launch Day, or +00m:42s when counting up) so you can watch it from another tab. Focus the tab and the title goes back to just the event name.
Not in place — the link is the timer. Make a new one and share the new link. The old link keeps working until people stop using it.
No. Settings go after the # in the URL, and browsers never send that fragment to the server. A host serving this file sees only GET /index.html — never your title or date.
No cookies, no localStorage, no sessionStorage, no IndexedDB.
None at runtime. No CDN scripts, web fonts, analytics, or remote images — even the hourglass favicon is inlined. A Content-Security-Policy blocks outbound requests at the browser level, so it’s enforced, not just promised. The same policy pins the page’s own inline code by its hash, so even a script injected downstream by a host or proxy is refused rather than run.
No.
Yes. Save this page as a single index.html and open it via file:// — builder and viewer both work with no internet.
Almost — three things are outside this page’s control and worth knowing:
No. It’s readable by anyone who has it — treat it like an unlisted link, not a password-protected one.
The toggle in the top-right cycles auto → light → dark for the current session only. Persisting it would require storage, which this page deliberately never uses, so it resets to auto on reload. Auto follows your operating system’s setting.
Yes — pick any combination under “Units to display.” Whatever you leave out gets rolled into the largest unit shown (turn days off and hours accumulate past 24, and so on). Display order is always days → hours → minutes → seconds regardless of how you check them.
Yes — the layout scales fluidly and the number boxes wrap on narrow screens.
Yes. The source code is linked at the top of this page. It’s one self-contained HTML file, MIT-licensed, with no build step. Drop it on any static host. Include the _headers file on Cloudflare Pages or Netlify to also get the CSP, HSTS, and anti-clickjacking headers, and 404.html if you want unknown paths to return a real 404 instead of the homepage. Both are optional — the app itself is still just index.html.