AppSpec

The Document Model for AI Code Generation

Every application is a document

Custom apps are naturally flexible and nested — entities, relationships, endpoints, auth rules — each shaped differently. That's a document. When AI generates this structured spec instead of raw code, there's nothing left to hallucinate. No phantom imports. No invented dependencies. Just a validated document that compiles into production-ready code for any stack.

Describe, Don't Code

The AI designs your application as a rich JSON document — data models, relationships, endpoints. Structure it can reason about, not syntax it can fumble.

Compile, Don't Hope

Deterministic templates transform the spec into production code with pinned versions, auth patterns, and security practices. Same input, same output. Every time.

One Spec, Any Stack

The same document targets Python or TypeScript, MongoDB or PostgreSQL. Your application definition outlives any framework decision.

Try:
Language
Database
Python + FastAPI AppSpec JSON MongoDB
About AppSpec

Vibe-coding tools let AI write code directly — fast, creative, and dangerously inconsistent. AppSpec rejects the premise.

AI = The What

The LLM designs your app as a validated JSON document. It fills in a form, not writes a novel.

Templates = The How

Jinja2 templates enforce your dependency versions, security patterns, and coding standards.

FAQ
Why not just let AI write the code directly?

You can't audit what you can't reproduce. Templates guarantee the same bcrypt version, JWT flow, and Docker base image across every service.

Why JSON? Why documents?

JSON is the only format at the intersection of LLM output, schema validation, document storage, clean Git diffs, and template rendering.

What stacks are supported?

Python + FastAPI and TypeScript + Express, each with MongoDB or PostgreSQL. Every project includes Docker, JWT auth, RBAC, seed data, and a Tailwind UI.

Can I edit the spec and regenerate?

That's the whole point. The spec is the contract; the code is derived. Change it, regenerate, and get a consistent codebase every time.

View on GitHub