Show what the product does
Grids, split lists, image features, phones, steps, benefits, code tabs and integrations.
11 layouts
Everything a marketing site needs
Each block has its own fields, so editors fill in content instead of fighting a layout.
Blocks in any order
Add, remove and drag blocks. Every one holds up next to any other.
Options per block
Layouts, backgrounds and anchors, set in the Options tab.
SEO per page
Titles and descriptions per page, with fallbacks from settings.
Typed end to end
Schemas, queries and components share one set of types.
Live on publish
Publish in the Studio and the page updates on the next request.
Easy to extend
A new block is one folder and one line in each registry.
Links that resolve
Point a button at a page and the URL follows when its slug changes.
Settings in one place
Navigation, footer and defaults live in a single document.
Pages are a stack of blocks, nothing more
There are no templates to outgrow. A page is an ordered list of blocks, and each block knows how to look next to the others.
Editors build a new landing page in the time it takes to write the copy, and nobody waits on a developer to move a section.
Reorder by dragging
Required fields checked
Images with hotspots
Reuse across pages
Editors in control, developers in the loop
Every option is a field with a sensible default, so a page always looks finished.
Layouts
Switch a hero or a feature block to another layout without losing content.
Backgrounds
Set a block on light or dark, and every token inside it follows.
Anchors
Give a block an anchor and link straight to it from anywhere.
Roles
Sanity roles decide who can publish and who can only draft.
Choose exactly who sees it
Every rule is a line anyone on the team can read, and percentages stay sticky per person, so nobody flips between the old checkout and the new one.
- 1
Your own team first
Ship to everyone with a company email and try it on real data.
- 2
Then a tenth of customers
Watch errors and conversion for a day before going further.
- 3
Then everyone
Raise it to 100% and remove the flag when the dust settles.
Turn it off before anyone notices
When a release goes wrong, switch the flag off from the dashboard or the terminal. No deploy, no restart, and if the network drops your app keeps the last rules it had.
0.4 s
From the switch in the dashboard to every server running your app.
Old flags tidy themselves away
Flags that have not changed in months are marked for you. Find every place one is used, remove it from the code and archive it in two clicks.
Anything unchanged for 90 days gets a stale tag
The CLI lists every file and line that still reads it
Archived flags keep their history and come back in a click
A Monday email lists the flags ready to go
No cookies, so no banner
Visits are counted without storing anything on the device. There is nothing to ask consent for, and nothing to put in front of your page.
1.8 KB
The whole script, loaded after everything else on the page.
Your server, your data
Three containers on any machine with Docker. Your visitors' data stays where you put it, and nobody else ever sees it.
- 1
Download the compose file
The app, its database and a worker, in one file you can read.
- 2
Run docker compose up
Migrations run on their own, and updates are one pull away.
- 3
Add the script to your site
One line in the head, and the first visit shows up live.
Your first pull request, reviewed within a day
A maintainer looks at every pull request within a working day. The checks tell you what to fix before anyone has to, and every release note names the people who shipped it.
I opened a small fix on a Friday night and had a friendly review by Saturday morning. Three releases later I help review the queue myself.

Javier Ortega
Contributor since 2023
It reads where your team already writes
Connect the places your answers already live. The assistant keeps up as they change, and nothing is used to train anyone else's model.
A person steps in when it matters
Billing mistakes, upset customers and anything it is not sure about go straight to your team, with the whole conversation attached.
The handovers are the best part. By the time a chat reaches me I know the question, what it already tried and which article it read.

Chiara Bianchi
Head of support
See what your docs are missing
Every question it could not answer lands in one list, sorted by how often it was asked. Write the article once and the assistant uses it the same minute.
Top questions
What people ask most this week, in their own words.
Gaps marked
Questions with no answer in your docs, flagged for you.
Fixed in minutes
Publish the article and the next answer already uses it.
A weekly report
Answered, handed over and missing, in one email on Monday.
See a typo? Click it
Click any text on the live page and its field opens in the Studio. Fix it, check the draft on the real page and publish when it reads right.
We used to wait two days for a developer to change a price. Now I fix it myself in a minute, and I can see exactly how it looks first.

Sofia Nyström
Marketing lead
Restyle it once, every block follows
Colours, fonts and radii live in tokens. Change one file and the whole site takes the new look.
Read the docsTokens for colour
Every block reads the same colour tokens.
One type scale
Headings and text come from a single Text component.
Shared fields
Links, images and options are defined once.
Plain Astro
Blocks are Astro components you can read and change.
Light and dark
Any block switches tone and its colours follow.
One theme file
Fonts, radii and shadows are set in one place.
Built around your week
Five things the app does well, and nothing it makes you do.





Three ways to look at your time
Switch views with a swipe. Every task stays where you left it.

Day
The hours ahead, with your calendar events between the tasks.

Week
Seven days side by side, and the time each one needs.

Month
The busy weeks and the quiet ones, so you can plan ahead.
Everything a planner needs, and no more
Six small things that make the week easier to keep.

- Your week at a glance
Seven days on one screen, with the time each task needs added up per day.
- Drag to plan
Move a task to another day with one finger. There is nothing else to set.
- Done is done
Tick a task and it leaves the list, with a quiet record of what you finished.
- Repeats on its own
Weekly and monthly tasks come back by themselves, on the day you pick.
- Shared lists
Plan the house or a trip together, and everyone sees changes as they happen.
- Private by default
Your plans stay on your phone and in your own cloud account.
From a fresh clone to a published page in minutes
- 01
Install
Clone the repo and install once. The site and the Studio share one workspace.
pnpm install - 02
Connect your project
Add your Sanity project ID to both apps. Nothing else to configure.
SANITY_PROJECT_ID="your-project-id" - 03
Seed and start
Load the demo pages, then open the site and the Studio side by side.
pnpm seed pnpm dev
How a project runs
Four stages and about ten weeks, from the first workshop to the day you go live.
- 01
Workshop
Week 1Two half days with your team to agree what the brand stands for and who it is for.
- 02
Design
Weeks 2 to 5The identity and the key pages, shown every week so nothing comes as a surprise.
- 03
Build
Weeks 6 to 9The site, built in house on blocks, with your copy and your photos in place.
- 04
Launch
Week 10We train your editors, go live together and stay on call for the first month.
Ask it what your customers ask you
A few of the questions it answered this week, word for word.
Can I move my plan to another workspace?
Account
Why was I charged twice in March?
Billing
How do I invite someone without giving them admin?
Team
Does the export include deleted items?
Data
Is there a discount for schools?
Pricing
How long do you keep my files after I cancel?
Privacy
Add a block in three files
A schema for the Studio, a query for the data and a component for the page. Register it once and it shows up everywhere.
export const banner = defineType({
name: "banner",
title: "Banner",
type: "object",
fields: [
defineField({ name: "heading", type: "string" }),
defineField({ name: "link", type: "link" }),
],
});The schema decides what editors see in the Studio.
Validation runs before anyone can publish.
Shared fields like link and figure come for free.
Groups keep content and options apart.
export const bannerQuery = /* groq */ `
heading,
link${linkQuery},
${optionsQuery}
`;Each block asks only for the fields it renders.
Links resolve to URLs in the query.
Images arrive with size and hotspot.
Types live next to the query.
<Block options={options}>
<Text tag="h2" variant="displayMD">
{heading}
</Text>
<Button href={link.href}>{link.label}</Button>
</Block>Components are plain Astro, styled with the same tokens.
Block handles spacing, background and anchor.
Text and Button keep the type scale consistent.
No client JavaScript unless a block needs it.
Works with the tools you already use
Every block is plain Astro and Tailwind, so the rest of your stack stays yours.
- Framework
Astro
pnpm add astro - Studio
Sanity
pnpm add sanity - Styling
Tailwind CSS
pnpm add tailwindcss - Preview
Visual Editing
pnpm add @sanity/visual-editing - Server
Node adapter
pnpm add @astrojs/node - Types
TypeScript
pnpm add -D typescript