full template
All Publier surfaces enabled — docs, blog, company-site sub-pages, and standard pages. The kitchen-sink starting point.
The full template scaffolds every Publier surface at once: a documentation section, a blog, marketing sub-pages, a changelog, a status page, and a knowledge base. Start here when you expect to use most of these surfaces — it’s easier to disable what you don’t need than to add it later.
Scaffold
publier new my-site --template fullDirectory layout
my-site/ src/ pages/ index.astro # / — Hero + FeatureGrid + PricingTable + TestimonialCard + CtaBand components/ CustomWidget.tsx # example custom Qwik component content/ docs/ # /docs/<slug> index.mdx quick-start.mdx blog/ # /blog/<slug> welcome-to-the-blog.mdx v1-architecture.mdx changelog/ # /changelog entries v0-9-0.mdx v1-0-0.mdx publier.config.yaml theme.yaml astro.config.ts content.config.tsastro.config.ts
import tailwind from '@tailwindcss/vite';import { defineConfig } from 'astro/config';import { docsShell } from '@publier/shell/integration';
export default defineConfig({ integrations: [docsShell({ snippets: { directory: 'content/snippets' } })], vite: { plugins: [tailwind()] },});content.config.ts
import { defineCollection } from 'astro:content';import { blogLoader, contentLoader, docsLoader, pagesLoader } from '@publier/shell/loaders';import { blogSchema, docsSchema, pagesSchema } from '@publier/shell/schemas';
export const collections = { docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), blog: defineCollection({ loader: blogLoader(), schema: blogSchema }), pages: defineCollection({ loader: pagesLoader(), schema: pagesSchema }), press: defineCollection({ loader: contentLoader({ base: './src/content/press' }), schema: blogSchema, }), team: defineCollection({ loader: contentLoader({ base: './src/content/team' }), schema: blogSchema, }), careers: defineCollection({ loader: contentLoader({ base: './src/content/careers' }), schema: blogSchema, }), changelog: defineCollection({ loader: contentLoader({ base: './src/content/changelog' }), schema: blogSchema, }),};publier.config.yaml
# Publier site configuration for the `full` template.# All surfaces enabled by default. Set any to `false` to opt out.
name: My Siteurl: https://example.comfavicon: /favicon.svg
nav: title: My Site links: - label: Docs href: /docs - label: Blog href: /blog - label: About href: /about - label: Careers href: /careers
sidebar: defaultOpenLevel: 1
search: enabled: true hotkey: k
theme: theme.yaml
pages: # Primary content shapes docs: true blog: true # Company-site sub-pages landing: true about: true team: true careers: true press: true contact: true # Cross-template standard pages changelog: true status: true knowledge-base: true
appearance: default: system strict: falseDisabling surfaces
Set any surface to false under pages: and remove the corresponding content directory and/or src/pages/*.astro file:
| Surface | pages: key | Files to remove |
|---|---|---|
| Docs | docs: false | src/content/docs/ + docs collection from content.config.ts |
| Blog | blog: false | src/content/blog/ + blog collection |
| Landing | landing: false | src/pages/index.astro |
| Changelog | changelog: false | src/content/changelog/ + changelog collection |
| Any sub-page | e.g. team: false | src/pages/team.astro (if present) |
Custom Qwik components
The template includes src/components/CustomWidget.tsx as a starter. Add your own Qwik component$() components there and import them in any .mdx or .astro file:
import { CustomWidget } from '../components/CustomWidget';
<CustomWidget />