EN FR

Chapter 19Operate

Day-to-day operation

Deliver a site, train the client, update ten sites at once, publish the packages, and know how to answer the requests that will come anyway.

5 min read10 sectionsChapter 19 / 22

Delivering a site

  1. Generate production credentials

    bash bash
    npm run create:site -- --nom "Martin Bakery" --depot agency/martin-bakery

    The command prints two blocks that do not travel together: what goes to the client (a key, an address) and what goes to the host (the hash, the secrets, the token). Plus the pre-delivery checklist.

    The key is written nowhere. What is not copied at that moment is lost — deliberately.

  2. Verify before announcing

    The four commands from Deployment, plus the five-wrong-keys trial. A delivery announced and then patched costs more than an hour of checking.

  3. Hand over

    • the address thesite.com/admin;
    • the key, through a separate channel — not in the same message as the address, ideally not by email;
    • the link to /aide;
    • the training video.

The training video

Six minutes, recorded as a screen share on the client's own site. The client watches it when they need it — that is, three weeks after delivery, the day they want to change a photo. A live session is forgotten before it is useful.

SequenceLengthWhat is shown
1. Getting in30 s/admin, entering the key, landing on the site, the bar at the bottom.
2. Changing a text60 sThe click, the typing, the variants bar.
3. Replacing an image90 sA real, unresized iPhone photo, and the “description” field.
4. Adding a video30 sPasting a YouTube link.
5. A list60 sDuplicate, edit, move up, and delete with the confirmation.
6. Publishing, and what can go wrong90 sClose the tab, reopen it, publish, show a real conflict message.
7. Where to find help30 sThe “Help” link and the contact address.
Filming rules
  • Zero technical words. If “JSON”, “commit”, “deployment” or “repo” slips out, reshoot.
  • Never show the key on screen. Paste it from the clipboard, masked field, then check the final video frame by frame on that sequence.
  • Show the errors. Sequence 6 is the most useful in the whole video: a client who has seen the conflict message once does not panic when it happens.
  • Slow pace. A pause after every click: the client is following on their own screen.

And one sentence, exactly one, about what they cannot break: “You cannot break the layout, and nothing is ever permanently lost: every publication is kept. When in doubt, write to us.”

What not to include: multilingual features if the site is monolingual, how the rebuild works, the name of the host or the repository, and a list of forbidden things — the client cannot do them, and listing them only suggests the tool is fragile.

Updating a site

bash bash
npm update inline-core
npm test && npm run check

The changelog says what changes. Semantic versioning here carries one rule of its own:

VersionWhat it meansTo do on the site
majorThe contract changes: configuration signature, schema shape, data-cms attributes.One intervention, described in the changelog.
minorNew field, new editing gesture.Nothing.
patchFix with no contract change.Nothing.
The project's own rule

A schema change that would invalidate already published content is always a major version, even if the code compiles: it is the client's content that breaks, not ours.

Publishing the packages

  1. Test the archives

    bash bash
    npm run test:pack

    The only mode that catches a file forgotten in files or a path missing from exports. Those errors are invisible while installing from a folder, and they break the first third-party site.

  2. Update the changelog

    What changed, and above all what a site must do to follow.

  3. Publish

    bash bash
    npm run release:core     # inline-core
    npm run release:cli      # create-inline

Trying an archive by hand

bash bash
# 1. build the archives
npm pack ./packages/inline-core   --pack-destination /tmp/inline
npm pack ./packages/create-inline --pack-destination /tmp/inline

# 2. create a site from the creation archive
cd /tmp/inline && mkdir workshop && cd workshop
npm exec --yes -- "file:/tmp/inline/create-inline-1.0.0.tgz" my-site --nom "Trial"

# 3. install the core from its archive, then build
cd my-site
npm install "file:/tmp/inline/inline-core-2.0.0.tgz"
npm run build && npm run serve:functions
Two traps met along the way
  • npx <archive> resolves the relative path from an unexpected folder: use npm exec --yes -- "file:<absolute path>".
  • Installing inline-core by its folder requires the trial project to be on the same drive as the repository: npm then creates a symlink, and Astro computes the path of an injected route with path.relative, which does not exist across drives. Installing the archive copies the package and lifts the constraint.

Running several sites

Beyond three clients, the question is no longer “does it work” but “which version runs where”. Keep a table, somewhere, with one row per site:

SiteRepositoryinline-coreToken expiresKey handed over
martin-bakery.comagency/martin-bakery2.0.02027-03-012026-08-12
durand-practice.comagency/durand-practice2.0.02027-01-152026-06-30

That table is what makes a security fix applicable: ten npm update inline-core, ten npm test, ten pushes. Not ten edits to find again across ten different codebases.

The deadline everyone forgets

Git token expiry. It does not break the site: it breaks publishing, and the client finds out while trying to change a page — often on a Friday. A reminder a week ahead, per site, takes thirty seconds to set.

Backup and restore

Backup

There is none to do

Content is in the repository, already replicated. There is no database, so nothing to export overnight.

Restore

A git revert

Going back to the state before a publish is a standard gesture. The site rebuilds within the minute.

The requests that will come

Client requestAnswer
“I'd like to add a page”Developer: a content file, a template, a navigation link. One hour.
“I'd like to move this block”Developer. That is the boundary announced at delivery.
“I'd like another colour for this heading”Within their theme: yes, right away, themselves. Outside it: developer.
“My colleague would like to edit too”Technically: give them the same key — history will not tell them apart. Properly: move to delegated authentication. To be decided, not improvised.
“I lost my key”Rotation. It is not recovered, it is regenerated.
“I'd like a contact form with stored submissions”Out of scope. A third-party service, or another tool.
“I'd like a blog with categories and search”Out of scope — and that is the signal that an off-the-shelf CMS would fit better.

Handing over

What a developer taking over the project must receive:

  • Access to the repositories and the machine account.
  • Access to the host, and the list of projects.
  • The site table: version, deadlines, dates.
  • The first three chapters of this documentation, in order.
  • The repository's instruction file — the eleven absolute rules.
  • And above all: why the scope is frozen. That is what gets lost first.