Cola de nietos
Reads one sentence out of a government PDF every month and publishes the thing no single bulletin states: which month of applications is being processed, and how long it has been the same.
- Role
- Solo
- Period
- 2026
- Type
- Lab
- Status
- live
- 36
- Months behind, and growing
- 1
- Month cleared in seven
- 11
- Bulletins read
Showcase
Overview
Around 645,000 people applied for Spanish citizenship through the Buenos Aires consulate under the ley de nietos. Most of them have been waiting years with no idea where they are in the queue. The information exists — the consulate publishes which month of applications it is working through — but it is one sentence, buried in a four-page PDF, once a month, worded differently every time.
This reads that sentence and keeps the answers. The value is not the month, which anybody who knows to look can find; it is the series. No single bulletin can say how long the number has been the same, and nobody reading one bulletin can know it.
The answer turns out to be worse than the number suggests. In seven months of the consulate reporting it, the queue cleared one month of backlog — while the ordinary citizenship queue at the same counter cleared twenty-two. Both figures come out of the same paragraph of the same PDF.
Modules
Reading the bulletin
Finding one sentence in a government PDF whose wording changes every month.
- The listing page is scraped, never guessed — the PDFs live in three folders under three naming conventions
- Typed questions with closed options, asked of the whole document at once
- A month is stored only when three answers agree: the gate, the month and the year
- Every field is an enum or a month, so a reading costs no output tokens
The series
Pure code over the stored rows — this is where the thing worth publishing is computed.
- How long the frontier has been unchanged, walking back through editions that said nothing
- The backlog against each bulletin’s own date, which grows on its own while the queue stands still
- The same reading for the ordinary citizenship queue, for the comparison
- A month is two integers and never a Date — a timezone slip would look exactly like the queue moving
What it refuses to do
The rules that keep it honest, encoded rather than hoped for.
- Never estimate when somebody’s own file will be resolved
- Never store a reading the three questions disagreed about
- Never send the month you applied in anywhere — it stays on the device
Engineering
Both alternatives to a model failed, in opposite directions
A regular expression invented two frontiers that do not exist, reading the application deadline and an IDU announcement as processing months. Then I read the eleven PDFs by hand and missed three, because those editions head the section with the acronym — "EXPEDIENTES DE LMD" — and I had searched for the name of the law. The hand reading is what shipped first, and the model is what caught it: given the whole document and no phrase to look for, it got all eleven right. The project now treats a false frontier as the worst possible outcome and stores nothing unless three independent answers agree.
The number worth publishing is a fact about the series
The frontier itself is on the consulate’s own website. What is nowhere is how long it has been the same — and the sharper version, which nobody states at all: a queue that stands still does not stay level, it falls a month further behind every month. That is the one thing on the page that cannot be read off any single bulletin, and it is the reason the project exists rather than a bookmark.
Refusing to answer the only question anybody asks
Every reader wants a date. One month cleared in seven projects to something like twenty more years, which looks like a finding and is an extrapolation from two points either side of a single movement. These readers have been waiting for years and would use a fabricated date to decide about jobs, leases and where their children go to school. The page states the distance, says plainly that a distance is not a schedule, and stops.
Stack
- 01Next.js 16
- 02TypeScript
- 03Supabase
- 04Jev
- 05unpdf
- 06Web Push
- 07Vercel Cron