Federal holidays
Livescripts/federal-holidays.js · utils/dates.js
Every standard recurring federal holiday, with the Saturday→Friday and Sunday→Monday observed rule, measured in US Eastern time.
A fan build of 18F's open-source Slack bot
Your plastic pal who's fun to be with
Scroll to walk over
Ops room · centre console
Charlie answered questions in 18F's Slack for years: the next federal holiday, what a Q-code means, whether it is still March 2020. The bot is public domain. The agency is gone. The abilities still work — so here they are, running in your browser.
Every panel says what it actually does: LIVE (the upstream algorithm runs here), FETCHES (real data over the network), LINK-OUT (the source blocks browsers, so you get the link), or DEMO (a local stand-in for something that needed Slack). Nothing on this page is invented.
Keep scrolling — straight into the box
Inside the box · terminal
The same commands people typed at the bot in Slack. Press / for the prompt, ↑ for the last thing you typed. Charlie's inclusion bot listens to everything typed here, the same way it listened in Slack — it runs entirely in this page and sends nothing anywhere.
Operations
Holiday, Evermarch and 3-paycheck values are computed here from the
upstream algorithms, in US Eastern time. Jokes served counts only
the jokes this browser has asked for — a localStorage
number, not a global one. Coffee queue is the local demo queue
from the Coffeemate card. No number on this board comes from a server
that knows anything about anybody else. The board painted on the wall
behind reads the same values off this one.
One card per ability
Live — the upstream function runs in this page. Fetches — real data pulled over the network right now. Link-out — the upstream source sends no CORS header, so a browser cannot read it; you get the same URL the bot would have read. Demo — needed a Slack workspace; this is a local stand-in and says so.
scripts/federal-holidays.js · utils/dates.js
Every standard recurring federal holiday, with the Saturday→Friday and Sunday→Monday observed rule, measured in US Eastern time.
scripts/three-paycheck-month.js
Biweekly Friday paydays counted from 7 January 2022. A month has three of them when the first Friday is a payday and +14 and +28 land in the same month.
scripts/evermarch.js
A joke bot about how time stopped in March 2020. Days since 1 March 2020 in Eastern time, plus one. Upstream asked future maintainers to be gentle about it.
scripts/q-expand.js · 2,095 org codes
Each letter of a Q-code says where someone sat in the organisation. Add * for the whole subtree, -C for a contractor line.
scripts/fancy-font.js
Feeling fancy, and want your message to reflect that? The map is copied character for character from the bot.
scripts/timezone.js
Post a time with a zone and Charlie quietly tells you what that is on your clock. Slack knew everyone's zone; a web page only knows yours, so the four US zones come along for context.
scripts/dad-joke.js · dad-joke.json
Jokes collected from Fatherhood.gov. Charlie sets it up, waits five whole seconds, then ruins it. The wait is upstream's, not ours.
scripts/inclusion-bot.js · 46 triggers, 98 phrases
Charlie listened passively for language with exclusionary histories and offered an alternative, privately. Type something and see. It never leaves this page.
scripts/random-responses.js · 26 fact files
Dog facts, cat facts, giraffe facts, hyrax facts. Fetched live from the 18F fact repository on GitHub and cached for five minutes, exactly as upstream did.
scripts/define.js · 18F/the-glossary
Government acronyms, defined. Fetched live from the glossary repository and parsed with a vendored js-yaml, the same library the bot used.
scripts/zen.js · api.github.com/zen
A random line of product wisdom straight from GitHub's own endpoint. Read it, and breathe.
scripts/pugs.js · 20 pictures
The same twenty pug photographs the bot posted, still sitting on the image host upstream pointed at.
scripts/us-code.js · Cornell LII
Upstream scraped Cornell's Legal Information Institute on a server. Cornell sends no CORS header, so a browser cannot read the page — Charlie builds the citation URL and hands it over.
scripts/opm_status.js · opm.gov
Is the DC office closed for snow, or perhaps raven attack? OPM's status JSON has no CORS header either, so this is the page itself.
scripts/handbook.js
The TTS Handbook site went away with TTS — handbook.tts.gsa.gov no longer resolves at all. Its source is still on GitHub, so this searches the archived repository instead.
scripts/coffeemate.js
Coffeemate put you in a queue and introduced you to the next person who wanted coffee. That needs a workspace full of people. This queue lives in your browser only — add two names and watch it pair them.
The honest part
Charlie was the Slack bot of 18F, the digital-services team inside the US General Services Administration. It matched people for coffee, counted down to federal holidays, translated times between zones, expanded the agency's Q-initialisms, told dad jokes, recited animal facts, and nudged people toward more inclusive language. It was maintained in the open, by the people who used it.
18F was shut down on 1 March 2025. The bot's repository, 18F/charlie, is still there, and it is dedicated to the public domain under CC0 1.0.
A single static page that runs those abilities in your browser. The
algorithms in assets/charlie.js are ported from
reference/upstream-src/, with the upstream filename named
above each card, and checked against upstream's own test fixtures.
The room is Three.js: boxes and cylinders, with every surface
textured from generated silkscreen art. Charlie is a stack of
cardboard boxes, which is what he is made of.
Prefer the flat poster? The classic version is the same abilities without the 3D.
This is an independent fan build. It is not affiliated with, endorsed by, or connected to the General Services Administration, 18F, TTS, or the United States government. No government seal, wordmark or logo is used here. Charlie's likeness on this page is a new illustration, made for this site.
raw.githubusercontent.com, zen from api.github.com, pug photographs from their image host.localStorage and nowhere else.vendor/three/.Set in Anton and Libre Baskerville. Grain by machine. ★ In memory of a good bot. · Classic version