Repository navigation
Glossary
One word for each idea, used the same way in conversation, code, documents and the control panel. This page is Rule 11 written down.
- Client word: what clients see, when it differs.
- Not: words we avoid for this idea, so they do not creep back in.
- In code: the name in the code, where there is one.
A new term goes here before it is used. If you find two words for one idea, pick one here and change the other.
Sections: The product · Content · Publishing · People and signing in · Hosting and tools · Building the code
The rules a client's Astro site follows from its first day, so Slim Killer can be added after the client approves the website without rework. See Astro site rules.
- Not: site contract, site standard, the bible (fine in conversation)
One client's website project: their Astro site, theme, modules and content, in their own Git repository. It uses core.
- Client word: your website
- Not: instance, theme, install
The part of a client site where people sign in and edit: /cp on the client's own domain.
- Client word: control panel
- Not: admin, back end, dashboard (the dashboard is one page of it), CMS
-
In code:
src/Http/ControlPanel/, the/cpaddress
This repository: the control panel, hammer and everything every client site shares. Released as tagged versions.
- Not: framework, engine, platform
The first page of the control panel after signing in.
- Client word: dashboard
The command-line tool: php hammer <command>. A hammer, not an artisan.
- Not: artisan, CLI (fine as a description, not as its name)
-
In code:
hammer,src/Console/
The product: Astro websites that clients edit in a small PHP control panel, on ordinary shared hosting.
- Not: Slim Edge (its old working name)
The three ways Slim Killer is sold: Edge Static (no control panel), Edge Blog (control panel) and Edge Storefront (control panel and a shop).
The Markdown text of an entry, below the front matter.
- Client word: text
- Not: content (too broad)
A shape of content that every client site uses the same way: an image, a link, a
section, a quote, a call to action, a gallery, a card, and the page's search details.
@monatemedia/slim-killer-astro gives each one's schema; each site's components decide
how it looks. See Field names and building blocks.
- Client word: none; clients see the block's own name, for example "Section"
- Not: component (that is the code that draws it), widget, module
-
In code:
image(),link(),seo(),card(),quote(),cta(),section(),gallery()
A group of content files of one kind, with one schema: articles, packages, destinations.
- Client word: the collection's own name, for example "Articles"
- Not: post type, content type, table
The words and images of a site: Markdown files and images in the client site's repository. Core updates never touch it.
- Client word: content
A note on a schema field, added with Zod's .meta(), that tells the control panel how to show it: a label (title), help text (description) and which editor to use (input: text, textarea, markdown or image).
- Not: annotation, widget
One file in a collection: one article, one package.
- Client word: page, or the collection's own word ("article")
- Not: post, record, document
The fields at the top of a content file, between the two --- lines: title, description, images.
- Client word: the form's fields; clients never see the words "front matter"
- Not: metadata, header, YAML header
-
In code:
FrontMatter(spike S4)
An image that is already optimised: a map, flag, logo, diagram or SVG. Kept in
content/graphics/ and copied into the site exactly as it is, never compressed. See
Astro site rules, rule 3.
- Not: icon (unless it is one), asset, illustration
A page that lists the entries of a collection, such as /articles/. Its own text (heading,
introduction, banner) is in content/<collection>-list/index.md.
- Client word: the page's name, for example "Articles list"
- Not: index page, archive, overview
An image the site compresses when it is built. Kept in content/images/.
- Client word: photo, image
- Not: picture, media, upload
The definition of a collection's fields, in the client site's content.config.ts. The single source of truth for every editing form.
- Not: model, blueprint, field definition (in the control panel)
The last part of a page's address on the site (/destinations/namibia/). It comes from the entry's file or folder name. The panel shows it but does not change it: a new address breaks links, so changing it is the developer's job.
- Client word: Web address
- Not: URL, permalink, slug (to clients)
-
In code:
slug
GitHub Actions turning the client site into finished web pages (astro build), published to the dist branch.
- Client word: Publishing (the "Building" stage)
- Not: compile, generate
One recorded change in Git. One save makes one commit, with its text and images together.
- Client word: (not shown; clients see Save)
Someone else saved the same page after this person opened it. Nothing is written: the form keeps what she typed, and the panel fetches the newer version, so Discard changes shows it.
- Client word: "Someone saved this page after you opened it"
- Not: clash, merge conflict, collision
-
In code:
SaveResult::conflict()
The branch in a client site's repository that holds only the finished build. The host fetches from it.
-
In code:
dist
The host downloading a finished build from GitHub and unpacking it into a new release. Started by the webhook; cron checks for a missed one every few minutes.
- Client word: Publishing (the "Going live" stage)
- Not: deploy, pull (used for the principle "the host pulls"), sync, download
-
In code:
hammer deploy:fetch(planned)
What the public sees now.
- Client word: Live
- Not: production (to clients), published
The client's word for the whole path from Save to Live: build, fetch, switch. The control panel shows the stages Saved, Building, Going live, Live, with a time estimate taken from the site's own recent publishes.
- Client word: Publish, Publishing…, Live
- Not: deploy (to clients)
One finished build, unpacked into its own folder on the host. The site shows one release at a time; the previous one is kept for rollback.
- Client word: version (in "go back to the previous version")
- Not: deployment, snapshot
Switching back to the previous release.
- Client word: Go back to the previous version
- Not: revert (that is a Git word for something else)
What a person does in the control panel. For the system, a save is one commit to the client site's repository.
- Client word: Save
- Not: submit, update, commit (to clients)
Pointing the website at a new release, in one step, by rewriting one .htaccess file.
- Client word: Live
- Not: swap, flip, deploy
A web address one system calls to tell another that something happened. GitHub calls the host's webhook when a new build is ready; the host then fetches the build itself and starts at once. Picture a doorbell: it announces, it never comes in. GitHub never pushes files onto the host.
- Client word: (not shown)
- Not: doorbell (except as the picture above), callback, ping, hook (on its own)
-
In code:
/cp/hooks/build-ready(planned)
The host's copy of the client site's content, which the panel reads from. GitHub holds the real version; the panel updates its copy after each save, and after a conflict.
- Client word: none; clients never see it
- Not: cache, local copy, checkout
-
In code:
ContentRepository
Monate Media: a person who looks after the site, updates and recovery.
- Client word: administrator
- Not: admin (in text; fine in code), superuser
-
In code:
Role::Admin
The record of sign-ins, failed sign-ins, password and two-factor changes, and resets.
-
In code:
AuditLog
The phone app that shows the six-digit codes. We suggest Google Authenticator; any authenticator app works.
- Client word: authenticator app
One of eight single-use codes shown once when two-factor is set up. Signs in once instead of the six-digit code. Only hashes are stored.
- Client word: recovery code
- Not: backup code, emergency code
-
In code:
RecoveryCodes
A private link to the setup page, printed by hammer doctor. Works for one hour.
-
In code:
SetupLink
Proving who you are: email address and password, then a six-digit code.
- Client word: Sign in, Sign out
- Not: log in, login, log on
-
In code:
/cp/sign-in,/cp/sign-out,SignInAction,SignInThrottle
The client: a person who edits their own site.
- Client word: site owner
-
In code:
Role::Owner
The second step of signing in: a six-digit code from an authenticator app, or a recovery code. Required for everyone.
- Client word: two-factor sign-in, six-digit code
- Not: 2FA, MFA, OTP (in text for clients)
-
In code:
Totp
A single-use link, valid for 72 hours, that hammer install, user:create and user:reset print. The person opens it to choose their own password and set up two-factor.
- Client word: welcome link
- Not: invite, invitation, activation link
-
In code:
WelcomeLinks, the/cp/welcomeaddress
The host's timer that runs a command every minute. Slim Killer uses it as a safety net and for scheduled jobs.
- Client word: scheduled task
- Not: scheduler, timer
The server that serves a client site, usually shared hosting such as Hostinger.
- Client word: hosting
- Not: server (fine), box, VPS (a different thing)
One check that hammer doctor runs: PASS, WARN, FAIL or INFO.
- Not: health check, test
-
In code:
PhpCheck,HostCheck,Status
The checks that must pass before a branch is merged: Pint (code style), PHPStan (types) and Pest (tests). The branch scripts run them.
- Not: CI checks, linters
A throwaway copy of a client site used for spikes, so the real site is never touched.
A short experiment that answers one question and is then thrown away. Slim Killer's spikes S1 to S5 tested committing from PHP, fetching builds, reading Astro's schemas, editing files without changing them, and timing a save to live.
- Not: prototype (a prototype is kept), proof of concept
Objects that must be correct together at the same instant, changed as one. See Rule 10.
A line in the container's definitions that says which implementation to use for an interface. A client site changes behaviour by changing a binding.
- Not: registration, provider
The extra structure domain modelling adds: value objects, aggregates, exception trees. Worth it only where the rules are hard. See Rule 7.
The object that builds every other object and hands each one what it needs (PHP-DI).
- Not: service locator (the misuse to avoid), DI framework
The part of the code that holds business rules. In Slim Killer, mostly the publish pipeline and the shop. See Rule 7.
- Not: business logic layer, model layer
Where a program starts and everything is wired together: hammer and the control panel's public/cp/index.php. See Rule 1.
- Not: bootstrap (that is the folder), main
A stand-in for the outside world in tests, such as a fake clock or a fake GitHub.
- Not: mock (a mock checks calls, which Rule 2 avoids), stub
A rule that must always be true, such as "a release cannot go live before it is checked".
- Not: constraint, validation (validation is how you check one)
A small read-only object that is valid from the moment it exists, such as EmailAddress. See Rule 9.