The native Astro CMS that reads the schema you already wrote.
AstroCraft mounts into an Astro site you already have. It adds an admin that edits your own markdown, commits it as the signed-in author, and never asks you to describe your content twice.
Not just an editor. The whole workflow.
Validation, the build gate, the commit, the push, and who is allowed to do any of it. All of it inside your own Astro server. Nothing calls out.
Your schema is the schema
It pushes. You deploy.
It shrinks what you committed
The build is the gate
Four files, and one line
Editors, and clients
Changed underneath you
It writes to your repo, not to a database.
Publishing is git commit && git push, so an edit is a commit by the person who made it. Nothing lives in a service you would have to migrate off later.
- a3f19c2Sarah Chencontent(blog): update "ethiopia-guji"
- 7e0b41dMarcus Reidcontent(blog): create "cupping-notes"
- 1c94ee8Sarah Chencontent(pages): update "wholesale"
- 0d2a7f5Marcus Reidcontent(team): update "sarah-chen"
committer astrocraft <[email protected]>
Two people editing show up as two authors. One committer, because the server is what holds the checkout.
{
saved: false,
sha: 'a3f19c2…',
raw: '---\ntitle: How we…'
}
A mismatch comes back as data, not an error — the dialog needs the file to show you.
- 1,338 tests across 60 files
- 61 kB gzipped on the editor route
The screen you hand to the client.
Sections are your own components. The client edits declared props, never raw CSS, so the worst thing they can do to your design system is fill in a field and it arrives as a diff you read before it merges.
Open the live composerWholesale
4 rows is the whole page. The outline is the file, so reordering here is reordering src/pages/wholesale.astro.
Drag a row to reorder it, or focus one and press ↑ / ↓.
sections/6
sections/proof/3
sections/action/3
Not composable
blocks/items only
primitives/not sections
Nothing matches. The library is src/components/ — it only has what the repo has.
For cafés and grocers
Wholesale coffee for people who care where it came from
Three picking passes, twelve years of direct relationships, and a published roast profile for every lot we sell.
Open an accountThree passes, not one
Cherries are picked over three passes rather than stripped in one. It is slower and it costs more, and it is the whole reason the cup tastes like stone fruit instead of toast.
How we source →
12 yrs
Direct trade
40+
Café partners
3
Picking passes
Open a wholesale account
Talk to usEvery section is gone. Drag one back in from the library.
For cafés and grocers
Wholesale coffee for people who care where it came from
Three picking passes, twelve years of direct relationships, and a published roast profile for every lot we sell.
Open an accountRoasted the week you order
Every bag leaves the roastery within four days.
Free delivery on wholesale orders over 12 kg
Three passes, not one
Cherries are picked over three passes rather than stripped in one. It is slower and it costs more, and it is the whole reason the cup tastes like stone fruit instead of toast.
How we source →
What we look for
Density
Measured on every lot and published with it.
Process
Measured on every lot and published with it.
Roast
Measured on every lot and published with it.
We buy from the same eleven farms we started with, and we publish what we paid for every lot.
12 yrs
Direct trade
40+
Café partners
3
Picking passes
They are the only roaster who ever showed us the purchase sheet.
Ana Ruiz · Café Mirador
Open a wholesale account
Talk to usThe Thursday cupping note
Tell us what you pour
Name
Café
Monthly volume
Hero
titlestring
eyebrowstring
align"left" | "center"
tone"warm" | "cool"
imageImageRef

ReplaceRemove
badgesBadge[]
2 items
Type not readable — round-tripped untouched
Nothing is selected. Click a section in the canvas to edit its props, or drag one in from the library.
route
layout
sections
collection
Page props are the layout's, not a section's. They are read from the same schema and written to the same file.
titlestring
eyebrowstring
align"left" | "center"
tone"warm" | "cool"
imageImageRef

ReplaceRemove
badgesBadge[]
2 items
Type not readable — round-tripped untouched
titlestring
bodystring
media"left" | "right"
textstring
tone"warm" | "cool"
titlestring
bodystring
linkstring
media"left" | "right"
titlestring
columns"two" | "three"
bodystring
tone"warm" | "cool"
itemsStat[]
3 items
quotestring
attributionstring
itemsLogo[]
5 items
tone"warm" | "cool"
titlestring
actionstring
tone"warm" | "cool"
titlestring
actionstring
titlestring
fieldsField[]
4 items
A three-pane editor has no honest phone layout — scroll the panel sideways to reach the library and the props.
Open the demo workspace
Save all day. Nothing moves until you publish.
Edits autosave into the working tree, not onto the site. The published site keeps serving the last commit that was pushed, so an unfinished sentence is never live.
How we roast the Ethiopia Guji
Beans grown above 2,000 metres are denser, so they take heat differently. We drop the charge temperature by twelve degrees and stretch the development phase.
Every bag we send out starts on a wet mill in Guji, where the cherries are picked over three passes rather than stripped in one.
Your client edits. You approve.
A client account cannot publish. Their changes arrive as a field-by-field diff — was on top, now underneath — and one approval is one commit carrying the name of the person who made it.
Three passes on the wet mill
The images are in your repo too.
Uploads land in src/assets and are committed like anything else. Alt text that is missing and sources above 1920px are counted rather than nagged about, because AstroCraft does not run your build.





ALT
ALT
ALT
ALT
ALT
ALT
ALT
2400px
2500px
2400px
2560px
2400px
2560px
Buy it once. A year of updates, then the build is yours to keep.
Three tiers, and the only thing that changes between them is how many sites the key covers — the terms below are identical for all three. An unlicensed copy is not a trial; it is the same build with a reminder in it.
Every licence
- Updates for a year — the version you bought never expires
- Verified offline — no licence server
- Nothing phones home, ever
- Nothing locked behind the key
- Never watermarked or throttled
- Entries stay markdown in your repo
- Unlicensed copies keep working
- No per-seat and no monthly cost
- Polar is the merchant of record
- Sales tax and refunds handled
How a key works
- Paste it once in Settings
- Checked against a key in the binary
- It never leaves your machine
- Works with no network at all
No account required
The dashboard is already in your editor’s language.
19, shipped in the repo — not a plugin, not a paid tier, not a translation API. English is the source; the other 18 sit in files beside it.
3 ways people run this.
Same three names as the licences, in the same order, so you already know which one is yours by the time you reach the price.

Post details
astrocraft.dev/blog/The solo developer
One project you maintain and also write for. You want the admin so you stop editing frontmatter in a code editor at eleven at night.

Changes requested· back with you
Domi Roussel asked for changes 20 minutes ago — “Excerpt still says 40k pages, should be 40,000.”
The studio
Client sites you built and still own. You want the client changing their own copy without a Slack message, and without touching your components.

What a licence covers
- A year of updates from the date on the key
- Verified offline: no account, no licence server, no phone-home
- Use it on as many of your own machines as you like
The agency
A dozen sites on one stack. You want one key, one invoice, and no per-seat arithmetic every time a junior joins.
Everything else you would ask a maintainer.
6 things the sections above leave open.
Do I need a licence for it to work?
What happens when the year of updates ends?
Can it run with no network at all?
Does it change the pages I already have?
The project moved, or a client took it over — now what?
When do the six missing things land?
Install it into a site you already have.
Four files and one config, and your markdown stays where it is. Install it unlicensed and every feature works — the licence is what you buy when it sticks.


