Countdown

Shared countdown timers that stay in sync on every screen — no account, any number of viewers.

LLM Mart 3 views 7 listing impressions
Transport
Not stated
Package
—
Registry id
app.countlink/countdown

No install snippet on purpose. A working MCP config is a command, its arguments and an environment block — the last two are where API keys live, so this catalogue never stores them and cannot publish them. Follow the link above for the authors' own instructions.

A free, zero-backend countdown timer. Set a duration, copy the link, send it to a room — everyone who opens that link sees the identical countdown, perfectly in sync, because the deadline is a timestamp encoded in the URL itself. No account, no server, no database.

Live at countlink.app. For local dev, open index.html directly or serve the folder — see below.

License: source-available, not open source. No LICENSE file means all rights reserved by default — this repo is public so the "nothing you paste is uploaded" claim is checkable, not an invitation to redistribute or relaunch it as your own product.

Why this exists

Full research and reasoning is in the project memory (see /Users/bruno/.claude/projects/-Users-bruno-Code-boring-apps/memory/), but the short version: single-purpose "boring" utility sites (vClock, Wheel of Names, word counters) generate real, verifiable ad revenue at near-zero operating cost. vClock specifically — a free online timer — earns an estimated ~$500K/yr from Google AdSense on ~5.4M monthly visits. CountLink copies that proven business model (free tool, one ad slot, programmatic SEO pages) while adding a genuine feature vClock doesn't have: shareable, synced-by-link countdowns.

Project structure

index.html              the tool — home page, canonical version of the UI
control.html            phone-control remote (opt-in, off by default — see docs/phone-control-setup.md)
assets/
  style.css             all styling, shared by index.html and every /timers/ page
  app.js                all timer logic, shared the same way
  control.js             control.html's logic — separate file, different DOM shape
  realtime.js            thin Ably pub/sub wrapper for phone control, inert with no key configured
  realtime-config.js     the on/off switch — window.COUNTLINK_ABLY_KEY, empty by default
features.html           generated — every capability, named (see "The feature inventory")
timers/                 programmatic SEO landing pages (see docs/monetization.md)
  meeting-timer.html     the Meetings cluster hub
  exam-timer.html
  ...                    (the eight fixed-duration pages were consolidated into
                          /timers/ on 2026-07-29 — see _redirects for why)
guides/                 generated long-form articles
vs/                     generated head-to-head comparison pages (/vs/<competitor>)
functions/              Cloudflare Pages Functions — the only server-side code here
  mcp.js                 the MCP server at /mcp
  badge.svg.js           the README badge image
  j/[code].js            join codes: /j/<code> -> the ordinary #t= link
scripts/
  build-timer-pages.mjs  regenerates /timers/, /guides/, /vs/, features.html,
                          sitemap.xml and llms.txt from one data list
  articles.mjs           the /guides articles, as data
  comparisons.mjs        the /vs/ comparisons, as data — read its header before
                          editing: these pages make factual claims about other
                          companies and the rules are not stylistic
docs/
  monetization.md        step-by-step: analytics, AdSense, Pro/Stripe, growing /timers/
  perception-gap-2026-09-06.md  why assistants called this site "minimalist", and the fix
  phone-control-setup.md pause/adjust/stop from a phone — LIVE since 2026-07-26, opt-in checkbox in the setup panel, Ably key already configured
ads.txt                 AdSense seller-verification file — already filled in and live; AdSense approval is separate from this file existing
robots.txt              allows crawling, points to sitemap.xml
sitemap.xml             generated — do not hand-edit, re-run the build script instead
archive/                earlier prototype ideas explored before CountLink (kept for reference)

Running it locally

From the project's README.