Skip to content

Quick Start

Terminal window
npx create-wolly my-site
cd my-site

This scaffolds a new WollyCMS project with:

  • package.json with @wollycms/server dependency
  • .env with a generated JWT secret
  • .gitignore, .env.example, docker-compose.yml
  • data/ and uploads/ directories
Terminal window
npm install
npm run migrate
npm run seed
npm run dev

Your CMS is now running:

Default login: admin@wollycms.local / admin123

In a separate directory, create an Astro project:

Terminal window
npm create astro@latest my-frontend
cd my-frontend
npm install @wollycms/astro

Create src/lib/wolly.ts:

import { createClient } from '@wollycms/astro';
export const wolly = createClient({
apiUrl: 'http://localhost:4321/api/content',
});

Create src/lib/blocks.ts:

// Map CMS block type slugs to Astro components
export { default as hero } from '../blocks/Hero.astro';
export { default as rich_text } from '../blocks/RichText.astro';
export { default as image } from '../blocks/ImageBlock.astro';
// Add more as you create block components

Create src/pages/[...slug].astro:

---
import Layout from '../layouts/Default.astro';
import BlockRenderer from '@wollycms/astro/components/BlockRenderer.astro';
import { wolly } from '../lib/wolly';
import * as blocks from '../lib/blocks';
const slug = Astro.params.slug || 'home';
const page = await wolly.pages.getBySlug(slug);
---
<Layout title={page.title}>
<BlockRenderer
blocks={page.regions.hero ?? []}
components={blocks}
/>
<BlockRenderer
blocks={page.regions.content ?? []}
components={blocks}
/>
</Layout>

Create src/blocks/Hero.astro:

---
const { fields } = Astro.props;
---
<section>
<h1>{fields.heading}</h1>
{fields.description && <p>{fields.description}</p>}
</section>