ferst-core
v0.6.2
Published
Ferst Core — the shared, brand-agnostic client-site system: Astro components, layouts, content schemas, the layered config resolver, and a neutral styling architecture that every client overrides.
Downloads
4,434
Maintainers
Readme
ferst-core
The shared, brand-agnostic client-site system behind Ferst. It ships the Astro components, layouts, content schemas, the layered config resolver, and a neutral styling architecture that every client site is built on. Update the core → every client benefits; brand and bespoke changes live in the client's own repo.
This is the open, source-available core. It is deliberately generic — there are no verticals baked in (a "parish" or a "school" site is a preset of generic capabilities and content, never core code). Premium capability modules and the hosting platform live elsewhere.
Install
npm install ferst-core astroastro is a peer dependency (Astro 5+). The package ships raw .astro / .ts
source and is compiled by your own Astro build.
Usage
A client site holds only its content, brand, and config. The core owns the schemas, the resolver, and the chrome.
1. Re-export the content collections (Astro requires the config to live in the consumer — this one line is the whole contract):
// src/content/config.ts
export { collections } from 'ferst-core/content/collections';2. Render pages through the core layout:
---
import Base from 'ferst-core/layouts/Base.astro';
import Button from 'ferst-core/components/Button.astro';
---
<Base title="Home">
<h1>Welcome</h1>
<Button href="/contact/">Get in touch</Button>
</Base><Base> loads the site's settings (identity, navigation, logos, calendar,
footer) from the consumer's content collections and composes the header,
footer, and cookie controls automatically.
Brand colours are yours
The core ships a neutral slate + indigo default palette. Design your whole brand
from three colours in the themeSettings collection — the core derives the
~40 working tokens for you (light via color-mix, dark via an OKLCH translation).
No code change; the colours live in your repo, edited by hand or in the CMS:
// src/content/themeSettings/index.json
{
"brand": "#0E4D4A",
"ink": "#10201F",
"surface": "#FBFDFC",
"fonts": { "heading": "Poppins, sans-serif", "body": "Inter, sans-serif" },
"corners": "rounded",
"elevation": "raised",
"stroke": "on",
"fields": "boxed"
}brand drives buttons/links/accents, ink text, surface backgrounds (cards,
sections and borders are tinted from it). The four knobs — corners /
elevation / stroke / fields — are set once and apply to every card, tile
and input. Set no brand and the neutral defaults stand. For the rare token that
must differ from what the three colours derive, advanced.light / advanced.dark
are raw { "--token": "value" } escape hatches layered last.
Licence
Business Source License 1.1 from v0.2.0 (v0.1.x was Apache-2.0 and stays that way). You may use this in production to build, operate and maintain individual websites -- your own, or ones you build for a client who controls the site, and any developer may take that site over. You may not use it to run a multi-tenant or hosted website service for third parties. Each version converts automatically to Apache-2.0 four years after publication. Please retain the NOTICE attribution when redistributing.
