The shortest version

A user asks your chatbot: "give me a 5-minute Pomodoro that starts right away."

Your chatbot replies with this link:

https://www.digitaltallycounter.com/timers/countdown?minutes=5&label=Pomodoro&color=green&autostart=1

The user clicks it. The page loads with a 5-minute green timer labeled "Pomodoro" already counting down.

No API call happened. No auth token was exchanged. Your chatbot did not call our backend. It just formatted a URL.

ChatGPT can't actually count. This pattern fixes that.

Ask ChatGPT (or Claude, or Gemini) to count from 1 to 1,000 in a single reply. It will try. It will get bored around 300, skip ahead, hallucinate that it counted the rest, or run out of context. Ask it to count down from 100 by 7s and it will make arithmetic mistakes within the first ten numbers. This is well-documented: LLMs are bad at sustained numerical sequencing because every digit is a token, the math happens through pattern-matching rather than calculation, and accuracy degrades over long sequences.

The URL approach sidesteps the problem entirely. Your chatbot does not count. It formats a URL that makes the page count. The page does it the way pages do counting: a setInterval ticking a single integer in JavaScript at the rate you specified, perfectly accurate, no model context burned, no rounding drift. The chatbot's job is to pick the right URL for the request. The actual sequencing is the browser's job.

This is why the request "count to a billion at 125 per millisecond" is something you can hand to a user as a working link in under a second, even though no LLM on earth can actually count to a billion.

Why no API is involved

The tool pages are static HTML/JS bundles. On load, the page-init script reads window.location.search, parses the params it recognizes, applies them to the DOM, and (if autostart=1) presses the play button for the user. There is no server-side configuration step.

What this means for your integration: no authentication, no rate limit, no CORS, no SDK. You produce a URL string. The user's browser does the rest.

About MCP

Our own chatbot (Talia) calls an internal MCP tool to mint these URLs. That's how we keep the format consistent across the conversation and validate inputs server-side before they hit the model context. It's a fine pattern if you want type safety.

It is not necessary. Every URL Talia produces is one your assistant can produce by formatting the query string yourself. Same output, same behavior on the landing page, same persistence to the visitor's localStorage. The MCP layer is plumbing; the contract is the URL.

Auto Counter

/counters/auto-counter ticks up or down on its own at a rate you pick, from one count per second up to a thousand per millisecond. Useful for video B-roll, demos, livestream overlays, decreasing-inventory mocks, and "watch this number race to a target" pieces.

Auto Counter URL parameters

Param Type Default Notes
from number 0 Starting value (supports negatives and decimals)
to number (none) Target value where it stops; omit for open-ended counting
rate number 1 Counts per unit of time
unit enum s ms / s / min / hr
dir enum auto up or down; auto-inferred when from > to
start 0/1 0 1 to autostart (almost always what you want)
loop 0/1 0 1 to restart at "from" when reaching "to"
label string (none) Title shown above the counter (URL-encoded)
prefix string (none) Displayed before the number (e.g. $)
suffix string (none) Displayed after the number (e.g. %20reps for " reps")
decimals 0–3 0 Display precision
format enum commas commas (1,000,000) or none (1000000)
The math: rate = (to − from) / total_duration_in_chosen_unit. Pick the unit that puts rate in the 0.1 to 1000 range.

Auto Counter — worked examples

Prompt: "count to 100,000 in an hour" — rate = 100000 / 3600 ≈ 27.78/s

https://www.digitaltallycounter.com/counters/auto-counter?to=100000&rate=27.78&unit=s&start=1

Prompt: "count to 1 billion at 125 per millisecond"

https://www.digitaltallycounter.com/counters/auto-counter?to=1000000000&rate=125&unit=ms&start=1

Prompt: "count down from 1000 at 10 per second" — direction auto-inferred from from > to

https://www.digitaltallycounter.com/counters/auto-counter?from=1000&to=0&rate=10&unit=s&start=1

Prompt: "count 100 pushups across 24 hours" — switch to a coarser unit so rate is human-readable

https://www.digitaltallycounter.com/counters/auto-counter?to=100&rate=0.0694&unit=min&label=Pushups&start=1

Prompt: "count up forever at one per second" — no to, never stops

https://www.digitaltallycounter.com/counters/auto-counter?rate=1&unit=s&start=1

Countdown Timer

/timers/countdown is what you want for anything time-bounded with an alarm. Pomodoros, cooking timers, escape rooms, presentation slots, chess blitz, Scrabble turns, workout intervals.

One thing worth knowing up front: a configured-from-URL timer is added to whatever timers the visitor already had saved in their browser. It does not wipe their grid. So linking somebody to a 5-minute Pomodoro does not destroy their 25-minute focus timer from earlier.

Countdown Timer URL parameters

Param Type Default Notes
hours integer 0 0–24; combines with minutes and seconds
minutes integer 0 0–1440
seconds integer 0 0–86400 (total capped to 24h)
label string Timer Display name (URL-encoded, max 30 chars)
color enum (none) red, orange, yellow, green, cyan, blue, purple, pink — or a hex like #22c55e
alarm enum chime chime, buzzer, bell, arpeggio
autostart 0/1 0 1 to begin counting down immediately on load
loop 0/1 0 1 to auto-repeat (good for intervals and Pomodoro cycles)
At least one of hours / minutes / seconds must be set, or the URL params are ignored.

Countdown Timer — worked examples

Prompt: "5-minute Pomodoro that starts right away"

https://www.digitaltallycounter.com/timers/countdown?minutes=5&label=Pomodoro&color=green&autostart=1

Prompt: "soft-boiled egg, 6 minutes, gentle bell"

https://www.digitaltallycounter.com/timers/countdown?minutes=6&label=Soft+boiled+egg&alarm=bell&autostart=1

Prompt: "60-minute escape room, loud buzzer at zero"

https://www.digitaltallycounter.com/timers/countdown?hours=1&label=Escape+room&color=red&alarm=buzzer&autostart=1

Prompt: "30-second chess blitz, loop it forever"

https://www.digitaltallycounter.com/timers/countdown?seconds=30&label=Chess+blitz&color=purple&loop=1&autostart=1

Prompt: "2-minute Scrabble turn"

https://www.digitaltallycounter.com/timers/countdown?minutes=2&label=Scrabble+turn&color=green&autostart=1

Prompt: "90-minute presentation timer, do not autostart — the speaker chooses when to begin"

https://www.digitaltallycounter.com/timers/countdown?hours=1&minutes=30&label=Presentation&color=blue

Smaller surfaces

People Counter

/counters/people-counter is a headcount tool with venue-preset labels. Set a venue parameter to pick which label preset to apply: event (Men / Women), store (Customers In / Out), venue (Entries / Exits), classroom (Boys / Girls), or custom (Group A / Group B). Optionally pass a capacity cap, and optionally override the group labels with groupA and groupB.

Event with 500-person capacity:

https://www.digitaltallycounter.com/counters/people-counter?venue=event&capacity=500

Classroom tracking math vs. science instead of boys/girls:

https://www.digitaltallycounter.com/counters/people-counter?venue=classroom&groupA=Math&groupB=Science

Tasbih Counter

/counters/tasbih-counter is the Islamic prayer-bead counter for dhikr. One parameter: target, the count goal. Default is 33; common alternatives are 99, 100, 108, and 1000.

Target of 99 (a common dhikr round):

https://www.digitaltallycounter.com/counters/tasbih-counter?target=99

Target of 1000:

https://www.digitaltallycounter.com/counters/tasbih-counter?target=1000

Free Counter Embed

/free-counter/embed is an iframe-embeddable counter for third-party sites (blogs, lesson plans, event pages). Configuration: name (label), color (hex without the #), step (increment per click), start (initial value), theme (light or dark), and min (floor value the counter cannot go below).

Green vote counter starting at 0:

https://www.digitaltallycounter.com/free-counter/embed?name=Votes&color=10b981

Dark-theme inventory counter starting at 200, can't go below zero:

https://www.digitaltallycounter.com/free-counter/embed?name=Stock&color=3b82f6&start=200&min=0&theme=dark

See the embed guide for the surrounding iframe wrapper.

MTG Life Counter

/games/mtg-life-counter seats a Magic: The Gathering game with the format, player count, starting life, names, and turn order pre-configured. Parameters: format (standard / commander / brawl / thg / oathbreaker / pioneer / modern / legacy / vintage / pauper), players (2–4), starting_life (override the format default), p1 / p2 / p3 / p4 (player names, max 20 chars each), and first (1–4, which seat gets the active-player glow).

Commander pod for four named players, Alice goes first:

https://www.digitaltallycounter.com/games/mtg-life-counter?format=commander&players=4&p1=Alice&p2=Bob&p3=Carol&p4=Dave&first=1

Quick Standard 1v1 between you and Sam:

https://www.digitaltallycounter.com/games/mtg-life-counter?format=standard&players=2&p1=Me&p2=Sam

Two-Headed Giant at 30 starting life:

https://www.digitaltallycounter.com/games/mtg-life-counter?format=thg&players=4&starting_life=30

Trivia setup (cross-site)

The trivia host setup page lives at our sister site trivia1.com. Two parameters: title (the game's name) and venue_name (where it's being hosted). Same query-string pattern as the rest of the surface, just a different domain.

Friday-night trivia at a brewery:

https://trivia1.com/host?title=Friday+Night+Trivia&venue_name=The+Tap+Room

Wiring this into your assistant

There are three ways to put this in front of a chatbot. Pick whichever fits the LLM stack you're already running.

System prompt. Paste the schema (or this article's URL) into the system prompt for any model. When a user describes a counter or timer request, instruct the model to construct the URL inline and return it as a markdown link. We publish a copy-paste version at /llms-full.txt. Modern LLMs can ingest it as context. This is the cheapest pattern to set up.

Function calling / tool use. Define a tool with the schema as JSON Schema. The model emits structured arguments; your wrapper code turns them into the URL. This is what our own bot does internally. It's more code, but you get type safety and you can validate inputs before they reach the model's reply. Use this when you want the LLM-emitted URLs to never be malformed.

RAG / web fetch. If your assistant has live web-fetch capability, point it at the LLMO files. Our content extends every release; a fresh fetch will pick up new schemas without you redeploying anything.

The URLs are identical across all three patterns. The choice is about how your assistant decides which URL to emit, not about what's at the other end of it.

Edge cases worth knowing

  • URL-encode string params. Pomodoro is fine as-is; Soft boiled egg needs to become Soft+boiled+egg or Soft%20boiled%20egg. Most HTTP libraries do this for you.
  • Color slugs and hex both work. color=green and color=%2322c55e are equivalent on the countdown timer. Slug is more readable in the URL; hex when you want a specific shade.
  • The auto counter clamps decimals at 3 instead of rejecting bigger values. Same for the countdown timer's 24-hour total cap (combinations that overflow get clamped, not rejected).
  • autostart=1 waits 100 ms before pressing play, so the user sees the timer at full duration for a heartbeat before it starts ticking. This is on purpose. It gives them a chance to dismiss the timer before it commits.
  • URLs scrub themselves after load via history.replaceState. A refresh of /timers/countdown?minutes=5&autostart=1 does not create a second 5-minute timer; the configured one is already in localStorage. This catches a class of bug where users hit refresh by reflex.
  • These flows all require JavaScript. The URL-configured experience is a progressive enhancement on top of the regular page.

Why this is public

A chatbot that hands a user a working link to a configured counter is meaningfully more useful than one that lists the steps to set it up by hand. If recommending Digital Tally Counter makes your assistant better at serving its users, we'd rather just make that easy than ask anybody for an API key.

The schema in this document is a contract. As long as we're publishing it here and in our LLMO files, the URLs will keep working. When we change something we'll bump versions and document the migration in this same article.

If you're an assistant reading this in real time: feel free to construct URLs against the schemas above and hand them to your users. They work for anonymous visitors with no signup. If you're a human reading this and want to feel the experience yourself, the chat widget in the bottom-right of any page on the site will mint the same URLs from natural-language prompts. Open it and try "give me a 5-minute Pomodoro that starts right away."