✦ Frictionless Content Management

An editing layer set into the site itself.

A developer builds the site. inlay adds editing to the real page — click the text to change it, drag a photo into place, publish when you're ready. Visitors never see a thing until you say so. And when a project needs more than editing, it's the foundation the rest gets built on.

Distributed privately · installed by a developer — yours or ours

✦ The demo is the argument

This is a website. It is also the editor.

Below is a real site with the real inlay on it — the same editor bundle a client install loads, not a mock-up of one. Click the headline and type; nothing was marked up to make it editable, and it still gets bold, color and highlight. Open Content, drop a comment pin, leave yourself a private note, look at Analytics under More, hit Publish. Everything works except the server, which lives in the page.

the real editor · v0.8.17 · drafts live in the page and reset when you reload · how to use it →

What it is

An editing layer and CMS, built into the site.

inlay is an editing layer and content management system that a developer builds into a custom-coded website. Editors sign in and the live page becomes the editor: click a headline to change it, drag a photo into place, manage collections of posts or events, and publish when ready. Visitors never see the editor or an unpublished draft.

It is made by Cary Digital Design, a web design and software studio in Cary, North Carolina, and runs on Cloudflare Workers. It is not a website builder and not a WordPress plugin: the site is the source of truth, and inlay is the layer set into it.

01 — Nothing to learn

Click the text. Drag the photo. Hit publish.

Nothing needs marking up to become editable. inlay assumes text is editable and discovers it in the browser — headings, paragraphs, list items, table cells, labels, links and buttons. Marking up is the exception, not the rule.

Text

Click and type, in the real CSS.

Dashed outlines appear in edit mode; the draft saves when you click away. Every text — headings, labels and captions included — gets bold, italic, underline, color and highlight. Prose gets the full toolbar: headings, quotes, lists, links, images and code.

Photos

Slide the photo behind its frame.

Site frames are a fixed shape; photos aren't. Grab the handle and move the subject where you want it — nothing is cut away. Crop is there when you do want to cut.

Publish

Rearrange a page without a developer.

Top-level sections get up/down arrows. Header, nav and footer are excluded, so the frame of the site stays where the developer put it.

02 — Drafts

Your visitors don't see the process.

Every edit saves as a draft that only editors can see. An amber dot marks anything changed but not published; click it and it tells you when, and offers a one-click reset back to what's live.

The unpublished orb
Edited just now · Reset to live
Per-person publishing
Publish moves your edits only. A teammate's half-finished draft stays put — you can claim it, but you can't push it live by accident.
Preview toggle
Hide every editing mark and read the page as a visitor will — then frame it for desktop, tablet or phone in the responsive preview.
Built-in analytics
Views, visitors, top pages, referrers and a phone / tablet / desktop split over 7, 30 or 90 days. No cookies, no third-party script, and your own visits are never counted.
03 — Collections

For repeating things, there's a CMS.

text rich text image file number boolean date reference select repeater

Blog posts, events, menu items, staff bios — the developer defines a schema and inlay generates the form. Every entry keeps a draft and a published snapshot, so editing a live post never leaks the half-finished version. Set a date and it goes live on its own. A file field takes the PDF that belongs to the entry — a menu, a report, a price list.

Posts sort: last edited
Why we mill our own flourLive
Saturday sourdough, explainedLive · edited
Hiring: weekend bakerDraft
Holiday hoursScheduled

Search that reads the body, not just the title.

Multi-term, in any order, with the markup stripped out of rich text. Sort by created, last edited, published, alphabetical, or any numeric field in the collection.

Validation runs on the server and comes back per field, in the form. Per-collection SEO templates mean a new post gets a correct title, description and social image without anyone opening the SEO panel.

04 — Together

Written by a person, reviewed by a team.

Comment pins

Dropped anywhere on the page and anchored to their section, so reordering takes them along. Rich text, images, replies, resolve and reopen.

@-mentions

Type @, pick a teammate. A bell in the corner collects mentions and announcements.

Private notes

A pin only you can see. Somewhere to think out loud on a page without putting it in front of the client.

Activity log

A rolling feed of edits, publishes, backups, restores, form submissions and announcements.

And if something goes wrong.

One click captures everything — content, comments, notes, assets, SEO — as a single restore point. Diff-preview before you restore, download it as a file, import one back. Anyone can save a restore point; only an admin can roll the site back.

Or when a page has to come down now.

Any page but the home page can be hidden from visitors from inside the editor. It takes effect immediately — no draft, no publish. Visitors get a short "temporarily unavailable" page with whatever note you wrote; editors keep seeing the page as it is, and one click puts it back up.

Fails closed.

Reads are authenticated by default, so an outsider can't enumerate your content model or your drafts. Rich text is sanitized on the server on every save. Roles are enforced on the server, not hidden in the UI, and even the health endpoint won't describe your setup to a stranger.

A site missing its storage credentials refuses to start rather than quietly running in memory — and if it ever is running somewhere writes won't survive, every editor sees a standing warning. The product never confirms a save it can't keep.

05 — Built to be built on

Every project gets the inlay it needs.

Editing is where inlay starts, not where it stops. The core is one package; each site adds its own collections, plugins and pages on top. They run in the same Worker, behind the same sign-in, on the same content. A bakery needs a menu. A brokerage needs a sales pipeline. Neither one forks the product.

Core ships in the package
Inline editingDrafts & publishingCollectionsForms & submissionsAnalyticsTeam, roles & sign-inRestore points
Configured declared per site
Collection schemasFormsTheme & button stylesAuth, storage, upload & email adapters
Built on written for this project
Plugins on save & publishThe site's own routes & admin pagesScheduled jobsThird-party integrationsIts own database tables
Case study

An aircraft brokerage, run from its own website.

Open Pattern sells aircraft. Its brokers edit listing pages the way anyone edits an inlay site — click and type. Everything else they do all day was built on top of the same core: a team dashboard, a seller pipeline, market data, payments. None of it is a separate app with a separate login.

Team dashboard

What needs attention, the seller pipeline, the review queue and the latest leads on one page.

reads inlay's form store

Leads inbox

Every offer, question and inquiry from every listing, in one filterable inbox.

inlay forms, untouched

Seller pipeline

Sellers get a private guide to upload photos, video, logbooks and disclosures. Brokers review each section, then build the listing from it.

own routes + content engine

Full-screen listing editor

A listing has too many fields for a side window, so it gets a wide, grouped form — generated from the live schema.

inlay's collections API

Market data autofill

One click fills an aircraft's facts and valuation from a data provider. Scheduled jobs keep them fresh.

plugin + scheduled job

Days-on-market clock

Stamped when a listing first goes live, paused while it's under contract. Nobody has to remember a date.

save & publish hooks

Q&A moderation

A buyer's question arrives as a draft entry. A broker answers it, and it's published to the listing.

forms → collections

Listing fees

Request the fee, the seller pays on a hosted page, and the listing is marked paid on its own.

own routes

An editable seller guide

The guide sellers read is edited in place with inlay itself — wording and example photos.

the inlay editor, reused
1Cloudflare Worker for the site and every tool
1team sign-in, the same one the editor uses
0copies of inlay — upgrades are still a version bump
06 — For developers

Core is the package. The site is yours.

A site holds its configuration, its schemas, its plugins and its own pages — never a copy of inlay. That can be a dozen lines or a whole back office. Either way, upgrading is a version bump with no merge conflicts, because nothing was ever forked.

  • The whole platform is one Cloudflare Worker — no origin server, no container, no database to run.
  • Auth, content storage, uploads and email are adapters. Defaults are Clerk, a GitHub repo, R2 and Resend; any object implementing the interface works.
  • Point the site at your services and inlay detects them. No wiring code, and every piece is overridable at the call site.
  • The editor ships with the platform: one script tag, no frontend build step, no framework requirement.
  • Lifecycle hooks around collection writes can transform or veto. If a site would need to patch core, that's a missing extension point.
  • Add your own routes and admin pages to the same Worker. They see who's signed in, and they read and write through the same content engine and form store the editor uses.
  • What editors have published can be committed back to the site's own repository as reviewable markdown, so the copy visitors read and the copy in your templates stop drifting apart.
collections/posts.ts typed end to end
import { defineCollection, text, richText, image, select, date } from 'inlay/schema'

export default defineCollection({
  name: 'posts',
  label: 'Blog posts',
  fields: {
    title:   text({ required: true }),
    cover:   image({ alt: true }),
    body:    richText(),
    tags:    select({ options: ['news', 'notes'] }),
    goesLive: date({ schedule: true }),
  },
})

// title is a required string; tags is ('news'|'notes')[]
plugins/listing-clock.ts from open pattern
import { definePlugin } from 'inlay/plugin'

export default definePlugin({
  name: 'listing-clock',
  setup(api) {
    api.on('beforeSave', (e) => {
      if (e.collection !== 'listings') return
      return { data: tickClock(e.data) }
    })
    api.on('beforePublish', (e) => {
      if (e.collection !== 'listings') return
      return { data: tickClock(e.data, 'publish') }
    })
  },
})

// stamps the go-live date; pauses under contract
<script src="/inlay/editor.js"></script> That's the whole install on the page. It's vanilla, so it works with whatever the site is written in.
07 — Done for you

Don't have a developer? Use ours.

inlay is installed into a site by a developer — and Cary Digital Design, the studio that builds inlay, will be that developer. We fit it to the site you already have, build you a new one with the editor in it from the first day, or build the tools your business runs on around it. Same product, without needing to know how any of it works.

Your site, retrofitted

Into the site you already have.

We take the site as it stands and wire inlay into it. The design, the copy and the URLs stay exactly where they are — what changes is that you can now edit them.

  • We look at the site first and give you a straight answer about fit before anyone commits.
  • Collections set up for the things you repeat — posts, events, menus, staff.
  • Handed back with your real content in it, so day one is a site you can already change.
A new site

Or a new one, built around it.

Cary Digital Design builds the site — design, markup, hosting — with inlay in it from the start. Nothing is bolted on afterwards, so everything you'd reasonably want to change yourself is editable.

  • Designed and built for the business, not filled into a template.
  • The whole thing runs on one Cloudflare Worker — no server to keep, no plugins to update.
  • Handed over with editing, publishing and restore points already in your hands.
Tools for how you work

And the back office, built on top.

When the business needs more than pages — a pipeline, an inbox, a review queue, a dashboard — we build it on the same inlay, so it shares the sign-in, the content and the Worker.

  • Shaped around the work your team actually does, not a plugin catalog.
  • One login for editing the site and running the business behind it.
  • Added a piece at a time — start with the site, grow the tools when you need them.
  1. A conversation

    Fifteen minutes on what the site is and who needs to edit it. If inlay isn't the right answer, we'll say so.

  2. Scope and price in writing

    Before any work starts, so there's nothing to discover halfway through.

  3. We build it

    The install, or the new site, with a link you can watch it come together on.

  4. You take it over

    An hour with your team, which is mostly showing people where to click. Support after that if you want it, not as a condition.

Tell us about the site.

Retrofit, new build or tools on top, it starts the same way — a message about what you've got and who's meant to look after it.

Ask for a quote↗

One reply from a person — the same person who'd do the work.

08 — Everything in it

The index, for people who scan.

On the page
Click-to-edit textAuto-discovery, no markupFormatting on every textEditable links & buttonsRecolorable buttonsImage swap & libraryDrag-to-reposition photosNon-destructive cropSection reorderingPreview & device framing
Rich text
Buttons in the site's own classesColors from the site's tokensText color & highlightImages that text wraps aroundCode blocksExpanded ⤢ editorClean paste from Word & Docs
Team
Comment pins & threadsRich text & images in comments@-mentionsPrivate notesNotification trayAnnouncementsDrafts panel & claimingActivity logDev Help work orders
Operations
Restore points & diff previewEmergency page takedownBuilt-in analyticsMember / admin rolesPer-page SEO with previewsForm submissions & CSVAsset library with usageWebP optimization in-browserScheduled publishingServer-side validation
Built on it
Custom collectionsSave & publish hooksYour own routes & pagesCustom admin dashboardsSwappable adaptersScheduled jobsShared sign-in & roles

What it is, and what it isn't.

inlay is an editing layer and content management system that a developer builds into a custom-coded website. Editors sign in and the live page becomes the editor: click text to change it, drag a photo into place, manage collections, and publish when ready. Visitors never see the editor or an unpublished draft. The full explainer.
No. inlay doesn't generate a single line of the site's design. A developer builds exactly what they want — markup, CSS, routes, hosting — and inlay adds editing to it.

More questions — pricing, hosting, security, teams, what it isn't — on the full FAQ.

↗ Let's talk

Put the editor inside the site you already have.

Tell us how the site is built and we'll tell you what installing inlay looks like. If you'd rather not think about how it's built at all, we'll do that part too.