Het schema in code. De inhoud via HTTP.
Definieer collecties in TypeScript, bewerk ze in de admin, lees ze via REST, GraphQL of de Astro-loader. Gehost in de EU, of op je eigen servers.
Vier dingen die je kunt nakijken.
- Het schema Veertien veldtypen Tekst, textarea, rich text, getal, boolean, datum en tijd, slug, select, relatie, media, groep, array, JSON, blokken. Allemaal geëxporteerd door het core-pakket.
- Het publieke lezen Zonder sleutel, standaard 404 Een collectie is alleen zonder sleutel leesbaar als haar toegangsregel een anonieme aanroeper toelaat. Al het andere antwoordt 404, nooit 403.
- De talen Tien inhoudstalen Gelokaliseerde velden, een dekkingsmatrix per pagina en taal, en de gaten als CSV.
- De sleutels Gehasht, één keer getoond API-sleutels worden opgeslagen als HMAC-hash met pepper. Je ziet de sleutel bij het aanmaken; de admin bewaart de laatste vier tekens.
Van een TypeScript-bestand naar een pagina op het web.
Scroll. Dezelfde inhoud, bij elk van zijn vier haltes.
- 01 · Schema
Je definieert de collectie in TypeScript.
Slug, velden, toegangsregels. Het leeft in je repository en gaat door review als elke andere code.
import { defineCollection, fields } from '@osprey/core' export const blogPost = defineCollection({ slug: 'blog-post', access: { read: () => true }, fields: { slug: fields.slug({ from: 'title' }), locale: fields.text({ required: true }), title: fields.text({ required: true }), excerpt: fields.textarea(), body: fields.richText({ required: true }), publishedAt: fields.datetime(), }, }) - 02 · Admin
De admin leest het schema en tekent het formulier.
Verplichte velden, de taalkeuze, de rich-text body. Niets wordt twee keer ingesteld.
- 03 · API
Gepubliceerde items komen eruit als JSON.
Eén GET, zonder sleutel, met SEO, canonical en hreflang al samengevoegd in elk item.
GET /api/v1/collections/blog-post/entries?locale=en Host: cms.altovar.net 200 OK { "data": [ { "id": "fdoc_16d9i3ef", "data": { "title": "EU-first content infrastructure", … }, "seo": { "metaTitle": "EU-first content infrastructure", … }, "canonical": "https://…/en/eu-first-content-infrastructure", "alternates": { "en": …, "x-default": … } } ], "pagination": { "page": 1, "limit": 20, "total": 3 } } - 04 · Site
Je frontend rendert ze.
De Astro-loader haalt de items op tijdens de build. De blog hieronder is precies zo gebouwd, vanuit dit CMS.
Open de live blog →import { defineCollection } from 'astro:content' import { ospreyLoader } from '@osprey/astro' const blog = defineCollection({ loader: ospreyLoader({ collection: 'blog-post', baseUrl: 'https://cms.altovar.net', tenantId: 'altovar', }), })
Jouw inhoud. Jouw server. Vandaag.
Gratis plan, geen kaart. Gehost in de EU, of op je eigen machines.