0%
Loading · fonts · textures
2,095 Q-codes · 46 inclusion triggers
Switching Charlie on
Charlie: a robot built from cardboard boxes, with dial eyes, a bent wire antenna, bottle-cap buttons and funnel arms.

A fan build of 18F's open-source Slack bot

Charlie

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

The board

Next holiday
Days until
Evermarch
3-paycheck month
Jokes served
Coffee queue

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

What Charlie can do

Live Fetches Link-out Demo

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.

Federal holidays

Live

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.

Three-paycheck month

Live

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.

Evermarch

Live

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.

Q-Expander

Live

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.

Fancy font

Live

scripts/fancy-font.js

Feeling fancy, and want your message to reflect that? The map is copied character for character from the bot.

Handy tau-bot

Live

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.

Dad jokes

Live

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.

Inclusion bot

Live

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.

Animal facts

Fetches

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.

Glossary

Fetches

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.

Zen

Fetches

scripts/zen.js · api.github.com/zen

A random line of product wisdom straight from GitHub's own endpoint. Read it, and breathe.

Pug me

Fetches

scripts/pugs.js · 20 pictures

The same twenty pug photographs the bot posted, still sitting on the image host upstream pointed at.

US Code

Link-out

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.

OPM office status

Link-out

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.

Handbook search

Link-out

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.

Coffeemate

Demo

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

About this page

What Charlie was

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.

What this is

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.

Not affiliated

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.

What runs where

  • Live in this page: holidays, three-paycheck month, Evermarch, Q-expander, fancy font, tau-bot, dad jokes, inclusion bot.
  • Fetched live: animal facts and the glossary from raw.githubusercontent.com, zen from api.github.com, pug photographs from their image host.
  • Link-out only: US Code (Cornell LII), OPM status, the TTS Handbook — none of them allow cross-origin reads.
  • Demo: Coffeemate, which needed a Slack workspace. Its queue is in your browser's localStorage and nowhere else.

Credits

Set in Anton and Libre Baskerville. Grain by machine. ★ In memory of a good bot.  ·  Classic version