A JSON inspection workbench for saving, sharing, understanding, annotating, and evolving payload contracts from real examples.
Context
Specimen began as Fable — a minimal JSON paste-and-share tool inspired by JSONBlob. The first version did one thing well: paste JSON, save it, share a link. After using that flow myself, the more interesting problem became obvious. Teams pass around example payloads all the time, but the payload rarely explains which fields are required, nullable, enum-like, unstable, or important for specific UI states.
Specimen sits between a lightweight sharing tool and a full schema-authoring system.
Problem
Most JSON tools either stop at storage or jump straight to full schema authoring. Frontend and backend teams need something in between — lightweight contract metadata inferred from real payloads, with room to annotate fields, attach examples, and still share everything through a link.
Product
- JSON paste, edit, save, and share flows.
- Contract inference from real payloads.
- Field-level metadata: type, required state, nullable state, enums, descriptions.
- Named examples stored alongside each document.
- Shareable URLs with Convex-backed persistence.
- A focused editor experience using TanStack Router, Convex, and CodeMirror.
System Architecture
Specimen is structured as three cooperating systems rather than a single CRUD app:
Loading diagram…
Specimen UI — the editor, sharing flows, and collaboration surfaces. Built with TanStack Router and CodeMirror, optimised for fast paste-edit-share loops.
Contract Engine — inference and annotation logic that turns raw JSON into structured contract metadata: types, required/nullable state, enums, descriptions, and named examples.
Convex Backend — persistence, real-time sync, and shareable document storage behind the public URLs.
Keeping inference logic separate from both the UI and persistence layer means the contract engine can evolve — editable schemas, payload variants, chaos parameters — without rewriting the editor or storage model.
Current State
The core loop works well. Next steps: editable contracts, multiple payload variants (success, error, empty), and tighter frontend–backend collaboration workflows.

