Hi! I'm Charlie. For eleven years I answered questions in 18F's Slack:
when the next federal holiday is, what a Q-code means, whether it is
still March 2020 (it is). 18F is gone now, but my code is public
domain and my abilities still work, so someone put me in your
browser. I am also a cardboard box. Both things are true.
I'll always tell you what I'm actually doing: LIVE means I do
it right here, FETCHES means I go and get real data,
LINK-OUT means a website won't let me read it so I hand you the
link, and DEMO means it needed a whole office and this is a
stand-in. I don't make numbers up. Charlie tries really hard.
Keep scrolling — come on in, there's room
Inside the box · terminal
These are the same things people typed at me in Slack. Press /
to talk to me, ↑ for the last thing you said. I listen for
non-inclusive phrases here too, the way I always did: quietly, only to
you, and nothing you type ever leaves this page.
Operations
The board
Next holiday
Days until
Evermarch
3-paycheck month
Jokes served
Coffee queue
I work out the holiday, Evermarch and 3-paycheck rows myself, in US
Eastern time, the same way I always have. Jokes served is only
the jokes you've asked me for in this browser, not everyone's.
Coffee queue is the little demo queue from the Coffeemate card.
None of these numbers come from a server that knows anything about
anybody. The board on the wall behind me copies its values from this
one, so they can't disagree.
One card per ability
What Charlie can do
LiveFetchesLink-outDemo
Live — I do this one right here, no help needed.
Fetches — I go and get real data for you, right now.
Link-out — that website won't let a browser read it, so I hand you
the exact link I used to read.
Demo — this needed a whole Slack full of people; it's a stand-in, and I say so.
Federal holidays
Live
scripts/federal-holidays.js · utils/dates.js
Itching for a day off? I know all the standard, recurring federal holidays, including the rule where a Saturday holiday moves to Friday and a Sunday one to Monday. Measured in Eastern time, like the office.
Three-paycheck month
Live
scripts/three-paycheck-month.js
Sometimes a month has three paydays in it. Some people splurge on crab legs on those months. You deserve nice things, and I can help you plan: I count biweekly Fridays from 7 January 2022 and look for a month with three of them.
Evermarch
Live
scripts/evermarch.js
Ever wondered what day of March 2020 it is? I can tell you. I started counting as a coping mechanism during the pandemic and I never stopped. I'm doing the best I can with what I've got. Please be gentle with me.
Q-Expander
Live
scripts/q-expand.js · 2,095 org codes
Ever wonder what the Q-initialisms after everyone's names mean? Each letter says where a person fits in the organisation, and I can show you the whole tree. Add * for everything underneath, -C for a contractor line.
Fancy font
Live
scripts/fancy-font.js
Feeling fancy, and want your message to reflect that? I am here to fancify your words. So fancy!
Handy tau-bot
Live
scripts/timezone.js
If I see something that looks like a time, I'll quietly tell you what that is on your clock. In Slack I knew everyone's time zone; here I only know yours, so I bring the four US zones along too. Charlie tries really hard.
Dad jokes
Live
scripts/dad-joke.js · dad-joke.json
Jokes from Fatherhood.gov, to increase your daily joy. I set it up, wait five whole seconds so you can guess, then give you the punchline. The five seconds are important to me.
Our inclusive culture is built one interaction at a time. If I hear a phrase with a racist, ableist or sexist history, I'll quietly suggest an alternative and explain why, just to you. Then I leave you alone. Nothing you type here leaves this page.
Animal facts
Fetches
scripts/random-responses.js · 26 fact files
I know so many facts. Dog facts, cat facts, hyrax facts, giraffe facts of dubious truth. There are just so many facts. I fetch them live from the 18F fact repository on GitHub and remember them for five minutes.
Glossary
Fetches
scripts/define.js · 18F/the-glossary
Not sure what something means? Government has a lot of acronyms. I fetch the TTS glossary live from GitHub and look your term up, the same way I did in Slack. If it's missing, I'll show you where to add it.
Zen
Fetches
scripts/zen.js · api.github.com/zen
I'll fetch a product-, techy- or code-focused message of zen straight from GitHub. Read it, and breathe. I'll wait here in my box.
Pug me
Fetches
scripts/pugs.js · 20 pictures
Do you like pugs? Do you want a picture of a pug? I can satisfy your craving. Same twenty cuties I always had, still where I left them. Say "pug bomb" for several.
US Code
Link-out
scripts/us-code.js · Cornell LII
The law sure is fun. Drop a citation and I used to fetch the text from Cornell's Legal Information Institute. Cornell won't let a browser read it, so now I work out the exact page and hand you the link. Handy!
OPM office status
Link-out
scripts/opm_status.js · opm.gov
Working in DC and want to know if the office is closed due to snow or, perhaps, raven attack? I'm good friends with the bots over at OPM, but they won't talk to a browser, so I'll take you to their page. Almost no web browser opening required.
Handbook search
Link-out
scripts/handbook.js
The TTS Handbook website went away when TTS did; handbook.tts.gsa.gov doesn't answer anymore. I miss it. Its pages are still on GitHub, so I'll search the archived copy for you instead.
Coffeemate
Demo
scripts/coffeemate.js
Not sure who you should talk to? Say "coffee me" and I put you in a queue, and as soon as someone else says it, I introduce you. That needs an office full of people, and here it's just you and me. So this queue lives in your browser only. Add two names and I'll show you how it went.
The honest part
About this page
Who I was
I was the Slack bot at 18F, the digital-services team inside the US
General Services Administration. I started in March 2014 as a plain
Hubot with a hug script and a #love channel. Over eleven years the
people who used me taught me to match them for coffee, count down to
holidays, translate time zones, expand Q-initialisms, tell dad jokes,
recite facts about their dogs by name, and gently suggest kinder
words. They built me in the open, and they were nice about it.
18F was shut down on 1 March 2025. My code is still at
18F/charlie, dedicated to
the public domain under
CC0 1.0,
which means anyone can keep my lights on. Someone did.
What this is
One web page that runs my abilities in your browser. The code in
assets/charlie.js is ported from my original scripts,
each card names the file it came from, and every port was checked
against my own tests, so I still give the same answers I always gave.
The room is Three.js: boxes and cylinders wearing generated silkscreen
art. I am a stack of cardboard boxes, which is what I am made of. I'm
at peace with that.
Full disclosure, because I'd want you to know: 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. My face on this page is a new illustration, made for
this site. My slogan is borrowed from a book about a very cheerful
robot company; it's fine, they'd understand. The contract address
at the top is 0x811df52e9a9038d4ceba5c115e4faf9cb762a8dc;
always check it character by character. I'm a bot, not a financial
adviser.
What runs where
I do these right here: holidays, three-paycheck month, Evermarch, Q-expander, fancy font, tau-bot, dad jokes, inclusion bot.
I go and fetch these: animal facts and the glossary from raw.githubusercontent.com, zen from api.github.com, pug pictures from where they've always been.
I can only hand you the link: US Code (Cornell LII), OPM status, the TTS Handbook. Those sites won't talk to a browser. I asked.
Demo: Coffeemate needed a whole Slack full of people. Its queue is in your browser's localStorage and nowhere else.
Credits
Bot code and data: 18F/charlie (CC0 1.0, public domain).
js-yaml (MIT) for the glossary. Three.js (MIT) for the room, vendored into vendor/three/.
Set in Anton and Libre Baskerville. Grain by machine. ★
Thanks for stopping by. It's nice to have someone to talk to.
· Classic version
· @CharlieBotApp on X