Easydeck

Easydeck

An AI presentation generator built around a constraint I still like: keep planning cheap and editable, make rendering the thing that costs money.

Project lives at: ~/code/planetaryescape/easydeck/

In one paragraph

Easydeck takes a prompt or a rough outline, turns that into a real slide plan, lets the user edit the outline, then generates the actual slide images and exports. The sharp architectural choice is the billing boundary. The app does not spend credits when the user merely clicks "generate." It waits until the outline parser knows how many slides the job will really create, reserves that exact budget, and only settles the spend when slide creation happens.

Why it exists

The obvious problem is "make me a presentation." The less obvious problem is that one-shot deck generation usually steals control at the wrong moment. Easydeck's answer is to put the editable outline in the middle: enough AI to get momentum, enough structure that the user can still steer before the expensive part starts.

What is true in code as of 2026-05-31

Validated against the repo:

That is a cleaner model than the earlier version I had in my head. The old instinct was "charge when generation starts." The code truth now says "price when the plan is concrete." Much better.

GA hardening update from 2026-05-31

Validated against the current PR head and repo docs:

The new general lesson is not "always degrade gracefully." It is sharper: degrade gracefully for availability guardrails like rate limiting, but fail closed for authority, billing, and public URL safety.

AI model-routing update from 2026-06-23

The 2026-05-31 lessons still held when rechecked against the code. The new drift was in model routing, not credits or privacy.

Current code truth:

The live gateway check on 2026-06-23 confirmed the important bit: google:gemini-2.0-flash still returns model_not_found for this Vercel AI Gateway account, while google:gemini-2.5-flash and google:gemini-3-flash succeed.

The reusable lesson is Model Catalogs Need Runtime Smoke Tests. A model appearing in local metadata or an SDK type union is not enough. Production model choices need a smoke test through the same registry, account, gateway options, and environment the app uses.

Reusable lessons this project surfaced

Documentation drift this project exposed

The 2026-05-31 docs pass found a few different kinds of drift:

That mix matters. Some drift lived in docs. Some lived in app copy. Some lived in tests and comments. Same root problem: the old story kept surviving after the architecture moved.

What I would want future-me to remember

Easydeck is not just "AI makes slides." The more interesting part is the boundary discipline around cost, planning, and user control:

That pattern will outlive this app.