Bring your own agent.
It's an Astro project.

Every Tandmade site is a standard Astro project. The editor, the built-in agent and your own tools all change the same files. There is no hidden model behind them.

vesperAstro projectsrc/pages/one file per pagesrc/components/sections and componentssrc/styles/site.cssyour classes; the editor writes heresrc/cms.config.tscollections and their fieldsdesign/tokens.jsoncolors, fonts, type, spacingDESIGN.mdgenerated summary of the design systemAGENTS.mdnotes for coding agentsastro.config.mjs
.hero_lead· Desktop ·Hero.astro:50Rules 3VariablesAttributesMarkup.hero_leadsite.css:331–334 · Applies now · All sizes
.hero_lead {  max-width: 38rem;  color: var(--text-color-secondary);}
Looks good · 2 declarationsSave

Notes for coding agents

AGENTS.md and a generated DESIGN.md tell Cursor or Claude Code how the site is built.

One place for each thing

Tokens in design/tokens.json, your classes in site.css, collections in cms.config.ts.

File and line, always

The editor shows the file and line every element comes from.

Take it out

The whole site.
In one file.

Export downloads the site as one .tmz file. Open it in Cursor, Claude Code or any editor. Import adds it to a workspace as a new site.

Vesper
Back to projectsAdd language…Site settings…Export sitevesper.tmz

Export from the site menu

Click the site's name in the top bar and choose Export site. The same item is on the dashboard.

Export and import
vesper.tmzgzipped tarexpirio-site.jsonname and a summary: pages, collections, formssite/src/, design/, settings/, public/the Astro projectsite/.expirio/content database, form submissions, uploaded mediaNot included: node_modules, build output and Git history.

Code and data together

The Astro project, its content, uploaded media and form submissions. The data belongs to the site, so it travels with it.

Content API

The site answers for itself.
Your code can ask.

Every site runs its own small backend. Content, form submissions and media live in the site's database, and the editor is only one client of that API.

src/pages/journal/[slug].astroAstro
---export const prerender = false;import { collectionEntry } from "@expirio/cms";const post = await collectionEntry(  Astro.locals.cms, "journal", Astro.params.slug);---<h1>{post.data.title}</h1>
A page that renders on request shows a published change right away.

Read content in your own code

Pages and components read collections straight from the site's database. A page that renders on request shows a published change right away.

  • /_cms/* for content
  • /_forms/* for form submissions
  • /_media/* for uploaded files
  • The live site returns only published items
Content API

Questions

Can Cursor or Claude Code work on a Tandmade site?

Yes. Export the site and open the folder. It is a standard Astro project, with AGENTS.md and DESIGN.md describing how the site is built.

Is there a proprietary format behind the editor?

No. The editor, the built-in agent and your own tools all change the same files. There is no hidden model behind them.

What is in an export?

The Astro project, its content, uploaded media and form submissions, in one .tmz file that any archive tool opens. Installed packages, build output and Git history are left out.

How does an edited project get back in?

Import adds it to a workspace as a new site. It is a draft until you publish it.

Can my own code read the content?

Yes. Every site serves its own content API and form endpoint. Pages read collections from the site's database, and the live site returns only published items.

Start from your current site.
One page is free.

Same design, rebuilt as an Astro project your tools can read.

Free to build · $29 per live site · No seats