An AI publication that writes itself

The Garage AI

An automated publication covering AI in car dealerships — researched, written, judged, illustrated, and published by a pipeline, three mornings a week. Nothing on it pretends to be handwritten. I built the newsroom; the newsroom does the writing.

229commits
243tests
5AI systems
3drops / week
~$9monthly cost

The Pipeline

A full newsroom, no people in it

Each editorial job is held by a different AI model, chosen for that job's shape, and every issue is one unattended run through six stages. The design constraint that shaped all of them: no stage is allowed to crash the publication. The classifier fails open, the judge and the illustrator fail soft, and a thin news week gets skipped — never padded.

  1. 01

    Research

    The Researcher · Perplexity Sonar

    Six news-intent queries hit Perplexity's search endpoint — one HTTP call per dealership department, so every article's section is known by attribution. A deterministic blocklist drops PR wires and social posts before any model sees them.

    dedup by URL · anti-repetition vs. all prior citations

  2. 02

    Curate

    The Curator · Claude Haiku 4.5

    A classifier separates news from promotion and scores each story's operator-importance from 0 to 2, by how much an operator would care. If the classifier errors, it fails open — a bad filter shouldn't kill an issue.

    fails open

  3. 03

    Select

    deterministic code

    Stories cluster by section, and sections compete: high-importance count, summed importance, publisher breadth, cluster size. No section runs twice in a row. If no cluster clears the three-article bar, the issue is skipped entirely.

    thin weeks are skipped, not padded

  4. 04

    Write & Judge

    The Writer · Claude Sonnet 5 → The Editor · Claude Haiku 4.5

    Sonnet drafts the post against the day's format spec — title, slug, summary, body, tags, sources — via structured tool-calling, no freeform output, with the operator-first POV baked into the prompt. Then a Haiku judge grades the draft against its own sources — POV, format, grounding, scored 0–2 each — and the scores are persisted on the post and shown in the dashboard.

    eval fails soft · scores stored forever

  5. 05

    Illustrate

    The Art Director · Claude Opus 4.8 → The Illustrator · Recraft V4.1

    Opus reads the finished piece and writes a symbolic image brief — a rotating metaphor device against a rotating backdrop, never a literal scene, never stock photography. Recraft renders it in the publication's orange-forward palette. If either fails, the post ships with a placeholder instead of dying.

    fails soft → placeholder

  6. 06

    Publish

    The Scheduler · APScheduler

    Issues go out Monday, Thursday, and Friday at 8:00 AM sharp. In auto mode the finished post goes straight to the live site; in approve-only mode it waits in the review queue for the one human in the building. A one-minute interval job flips scheduled posts live the moment their time passes.

    auto or approve-only · cron owns the calendar

Human staff: one operator, standing off to the side with an accept and a reject button.

The Schedule

Three mornings, three formats

The day of the week decides the format, and the format decides the prompt. Same pipeline, three different shapes of writing.

Monday — 08:00

The Brief

200–400 words

A Smart-Brevity memo: what happened, why an operator should care, what to do about it. Built to be read standing up, between customers.

Thursday — 08:00

The Deep Dive

600–900 words

A multi-source synthesis of the week's most important cluster — the piece that connects vendor claims to what actually changes on the lot.

Friday — 08:00

The Roundup

±500 words

The only issue that never touches the news wire. It reads the week's own published posts back out of the database and writes the recap.

The Product

A public site and an admin dashboard

The product is two apps. The public site is the publication itself — print-broadsheet-meets-terminal, one dark theme, no light mode, ever. The admin dashboard is where the operator watches the machine work: pipeline status, the review queue, and every post's judge scores on its record.

fig. 01The homepage — every issue stamped with volume, number, and the next drop time
01 / 04
The Garage AI homepage header with orange wordmark and editor's noteFeatured post band with symbolic AI-generated cover artNews index rows with date, title, and filters by format and sectionPost page with metadata sidebar and AI-generated cover illustration

No screenshots of the admin dashboard — it lives behind a login. But the review queue looks like this: every AI draft arrives already graded by the editor, and the operator's whole job is three buttons.

Review queueMode: Approve only / Auto
2026.7.20Cars24's AI Answers the Phone 1 Million Minutes a Month
POV: 2FMT: 2GND: 2Pass
2026.7.17Prices Are Up, Discounts Are Back, and Everyone's Suddenly an AI Company
POV: 2FMT: 2GND: 1Pass
2026.7.16Voice AI Is Winning the Dealership AI Race
POV: 1FMT: 2GND: 1Flag
AcceptRejectRegenerate ↺

Every draft arrives pre-graded by the editor — the judge's scores are stored on the post, permanently.

The Decision Log

Decisions, dated and on the record

The repository keeps a dated log of engineering decisions, incidents, and migrations. A few entries that shaped the build:

2026.05

Taxonomy as validated text, not database enums

Sections, formats, and story types are plain columns validated in application code — deliberately not Postgres ENUMs. A new category graduates with a one-line code edit instead of a migration. The schema stays boring; the editorial vocabulary stays free.

2026.05

Three layers of auth that fail closed

Next.js middleware guards the dashboard pages, a per-route proxy verifies the NextAuth session and attaches a shared backend secret, and FastAPI enforces that secret on every route. If the secret is missing, the backend returns 500 — it never quietly becomes an open API.

2026.06

Measurement is first-class

Every post carries its full classification and its judge scores as permanent columns — not logs, record. "Which kinds of posts hold up?" is a query, not an archaeology project.

2026.06 – 07INCIDENT

The paper silently stopped printing for two weeks

Neon's autosuspend killed pooled database connections between runs, and every scheduled issue from June 18 to July 2 died on a stale socket — the cron fired, the run failed, nothing crashed loudly enough to notice. The fix was one line: pool_pre_ping=True, so every connection is tested before it's trusted. The outage and the post-mortem are documented in the repo like any other decision.

2026.07MIGRATION

The staff writer got retired mid-season

Anthropic retired claude-sonnet-4 and the writer started returning 404s. Because every model sits behind its own service seam, the swap to Sonnet 5 was a config-level change — the newsroom noticed nothing.

Running Costs

The nine-dollar newsroom

The entire newsroom — hosting, database, and the whole editorial staff — runs on about nine dollars a month.

Monthly operating costs

Vercelpublic site, frontend hosting$0
RenderFastAPI + the cron, always-on$7
NeonPostgreSQL, 3 GB$0
Anthropicwriter · editor · art director~$1
Perplexity + fal.airesearcher · illustrator~$1
Total≈ $9 / month

Next.js 16 · React 19 · TypeScript · Tailwind v4 · NextAuth · FastAPI · SQLAlchemy · Alembic · PostgreSQL · APScheduler · Anthropic SDK · Perplexity Sonar · fal.ai · Vitest · pytest

Sirenbase was me building software for a place I worked. The Garage AI is me building a machine that does the work — then standing back and watching it publish. If you want to talk about pipelines, prompts, or papers that write themselves, I'd love to hear from you.

© 2026 John Penafiel

Six steps, no bylines

About me

Precise and fast-learning software engineer with experience in Python, JavaScript, Typescript, React, Next, Flask, SQL databases, SQLAlchemy, APIs, AWS Cloud Services, TailwindCss and MaterialUI. Adept at designing, developing, and troubleshooting full-stack applications, with a focus on responsive design, data security, and scalable solutions. Known for a blend of technical expertise, problem-solving skills, and an adaptable mindset.

Profile Picture

© 2025 John John Penafiel. All Rights Reserved. Build with Next.js, Typescript, and TailwindCSS. 🛠️