Working software
It files the request, counts the statutory days,
and says so while a window is still open.
A backend for records requests: it emails the agencies that publish a mailbox, refuses to pretend for the ones that do not, computes deadlines against the federal holiday calendar, and asserts the two statutory consequences of a missed deadline that most requesters never assert.
What this is
This is a running server, not a proposal. It takes a request you have written, sends it from a domain that can be authenticated, records the date it went, and from that date forward it knows more about your deadline than you do.
Most FOIA tools are text generators. They produce a well-drafted letter and then stop, which leaves the hardest part — the calendar — to the person least equipped to keep it. The statutory clock is unforgiving and it is arithmetic: twenty business days, excluding federal holidays; ten more if the agency invokes unusual circumstances; ninety calendar days to appeal a Justice Department denial, sixty for ICE, and fifteen business days in Pennsylvania running from a denial you were never actually sent.
So this system does the arithmetic, and it does two other things that follow from taking the arithmetic seriously.
The spine · 1
Sending is its own permission
There was no authentication at all. Anyone who could reach the API could post letters to federal agencies over the operator's SPF, DKIM and DMARC-authenticated domain, in someone else's name. That is not a data-leak problem — the thing being spent is a domain's reputation and a stranger's identity.
Now: bearer tokens hashed at rest, three scopes with send deliberately separated from write, loopback binding by default, a refuse-to-start guard if the port is exposed with no token minted, per-token send rate limiting, and an audit row naming the token behind every message.
The spine · 2
Nothing is quiet while a right is expiring
A reply from an agency still never changes a request's status by itself. A classifier that misreads a determination letter and closes a request would silently burn an appeal window, and an appeal window is a right — once it passes it does not come back.
But "we suggest, you confirm" was only half an answer. If a determination arrives and nobody confirms it, the appeal clock is running in the real world whatever the database believes. So a determination now computes its appeal deadline immediately, carries it on the record as at risk, and gets louder as it shrinks: normal → high → critical → expired. Nothing changes status until a person says so.
The console
The request builder that this server sits behind. It runs entirely in your browser, drafts the letter, and hands it to a server you point it at — yours, on your own machine or your own host.
Who is asking
The requester is the user. Never the server.
FOIA fee category turns on who is asking and why, and review fees are the dominant cost on contract and law-enforcement records. If the server sent mail as itself, the operator would be the requester — and the records would belong to the operator.
The mail is constructed so that the envelope is the operator's and the request is the user's:
From: "Krissy Smith (via FOIA Console)" <req-AbC123@foia.yourdomain.org>
Reply-To: krissy@example.com
The envelope sender is a domain the operator controls, because that is the only way SPF, DKIM and DMARC can authenticate the message — and a request that lands in a government spam folder is a request that was never made. The per-request address makes reply capture unambiguous: the agency presses Reply, and the message arrives somewhere that can only mean one request. Reply-To keeps the human in the loop and keeps the requester the requester. The letter body carries the user's own name and address.
If you operate this for other people
Say so plainly in your terms: you are a transmission service, the user is the requester, and the user owns the records. That sentence is a legal design decision, not a technical one, and it is easy to get wrong in a way that is expensive to unwind.
What is on this site
- What it sends, and what it refuses — twelve of the twenty-two agencies in the dispatch table publish a mailbox. For the other ten the send endpoint returns
409with the portal URL rather than reporting a success it did not have. - Deadlines — business days that exclude federal holidays, agency extensions, asymmetric tolling, and five jurisdictions where the engine refuses to produce a due date at all.
- Signals and appeal windows — how an inbound reply is recorded, why it never moves a status, and how the appeal deadline it would create is computed and escalated anyway.
- Security and tokens — the threat, the three scopes, the refuse-to-start guard, the rate limit, and the audit trail.
- The API — every endpoint, the scope it requires, and the status codes that mean something.
- Deploying — DNS, environment, the dry run, and warming a new domain.
- Limits — what is not modelled, what the classifier is not, and where this stops.
The credibility of a tool like this is what it says it cannot do.
A tracker that silently drops half your requests is worse than no tracker, because you would believe they had been filed. Every refusal in this system is there for a reason of that shape.
How this works
0:54 · narrated · captioned · served from this site, and nothing is sent anywhere when you press play. Prefer to read it? The transcript is below.
Transcript
| At | Section | What it says |
|---|---|---|
| 0:02 | What it is | This is a running server, not a proposal. It takes a records request you have written, sends it, and from that day forward it knows your deadline. |
| 0:11 | Why that matters | Most tools stop at the letter. That leaves the calendar to the person least equipped to keep it, and the statutory clock is unforgiving arithmetic. |
| 0:20 | Sending is a permission | Sending is its own scope. What is at stake is not data. It is the ability to post mail to a federal agency over your authenticated domain, in your name. |
| 0:31 | Signals | A reply from an agency never changes a status by itself. But if it looks like a determination, the appeal deadline is computed at once and carried as at risk. |
| 0:41 | The honest part | About half these agencies cannot be emailed at all. It hands you the portal address and says nothing was sent, rather than reporting a success it never had. |