Model živi u kodu.
Stranica svoj sadržaj opisuje u cms.config.ts: kolekcije, polja, blokove i jezike. Stranica ga čita s tipovima, pa preimenovano polje postaje greška pri buildu, a ne prazna stranica.

Svaka stranica opisuje svoj sadržaj u kodu, a njezini urednici dobivaju admin po mjeri: skice, verzije, više jezika, medije i SEO, bez zasebnog servisa koji treba održavati.
Stranici tvrtke ne bi trebao developer za svaki zarez. Ipak, većina stranica završi upravo tako.
01Svaka izmjena je e-mail developeru.
02Sitni ispravci čekaju u nečijim bilješkama.
03CMS koji je to trebao riješiti svaki mjesec traži ažuriranja dodataka.
04Ili se plaća po uredniku, svaki mjesec.
05A prijevodi žive u tablici pored njega.
Htjeli smo CMS koji dolazi sa stranicom, govori svaki jezik koji joj treba i ne smeta. Zato smo ga napravili.
Htjeli smo CMS koji dolazi sa stranicom, govori svaki jezik koji joj treba i ne smeta. Zato smo ga napravili.
Stranica svoj sadržaj opisuje u cms.config.ts: kolekcije, polja, blokove i jezike. Stranica ga čita s tipovima, pa preimenovano polje postaje greška pri buildu, a ne prazna stranica.

Svako polje je ono što model kaže: tekst s brojačem, izbor, slika s alt tekstom, rich text, blokovi koji se dodaju i premještaju. Ništa se ne podešava u nadzornoj ploči.

Svaka izmjena počinje kao skica. Objavi je stavlja uživo već na idućem zahtjevu, a svaka objava čuva verziju koja se može vratiti.

Jezika može biti koliko god treba, a svaki ima svoju skicu i svoju objavu. Stranica se može kopirati iz drugog jezika i prevesti na licu mjesta.

Učitane datoteke idu u jednu biblioteku, s alt tekstom, dimenzijama i stranicama koje ih koriste. Datoteka koja se koristi ne može se slučajno obrisati.

Svaka stranica ima naslov, opis, sliku za dijeljenje i noindex u SEO panelu. Sitemap i veze između jezika slijede same.

CMS je paket koji ide u stranicu, a ne servis pored nje. Jedna stranica, jedna baza, ništa drugo za održavanje.
Dolazi iz našeg privatnog registra i donosi svoj admin, svoj API i migracije baze.
$ pnpm add @therracode-dev/cms $ pnpm exec cms migrate
Kolekcije, polja i blokovi, u kodu same stranice. Admin i tipovi slijede iz ove jedne datoteke.
import { block, collection, defineConfig, f } from "@therracode-dev/cms"; const hero = block("hero", { label: "Naslovni blok", fields: { heading: f.text({ label: "Naslov", required: true }), image: f.image({ label: "Slika" }), }, }); export default defineConfig({ locales: { default: "hr", available: ["hr", "en"] }, collections: { pages: collection({ label: "Stranice", routing: "path", fields: { title: f.text({ label: "Naslov", required: true }), body: f.blocks([hero], { label: "Sadržaj" }), }, }), }, });
lib/cms.ts od konfiguracije stvara CMS. Jedna ruta daje stranici admin na /admin, a druga API iza njega.
import { cms } from "@/lib/cms"; export default cms.AdminPage;
Stranice čitaju objavljeni sadržaj s tipovima izvedenima iz modela, iz cachea do iduće objave.
import { notFound } from "next/navigation"; import { cms } from "@/lib/cms"; type Props = PageProps<"/[locale]/[[...path]]">; export default async function Page({ params }: Props) { const { locale, path = [] } = await params; const page = await cms.findByPath(`/${path.join("/")}`, { locale }); if (!page) notFound(); return <PageBlocks blocks={page.data.body} />; }
cms.config.tsSvaka stranica, case study, osoba i logotip klijenta na therracode.com dolazi iz CMS-a i uređuje se u adminu koji vidiš gore.
Reci nam što je na njoj. Napravit ćemo model sadržaja, prenijeti ga i uvesti tvoje urednike u admin.