Skip to content
✨ Publier v1 is live — a polished docs platform built for the open web.
On this page

company-site template

Marketing and company website with six Astro starter pages — landing, about, team, careers, press, and contact.

The company-site template scaffolds a marketing-focused company website. It ships six sub-pages, each pre-wired with @publier/shell components. Every page is overridable — edit src/pages/<name>.astro in place.

Scaffold

Terminal window
publier new my-site --template company-site

Directory layout

my-site/
src/
pages/
index.astro # / — Hero + FeatureGrid + TestimonialCard + CtaBand
about.astro # /about
careers.astro # /careers — JobsList
contact.astro # /contact
press.astro # /press — PressGallery
team.astro # /team — TeamGrid
content/
press/ # MDX press releases — seed entry included
publier.config.yaml
theme.yaml
astro.config.ts
content.config.ts

The press/ directory ships with a seed press release. The team/ and careers/ content directories are registered in content.config.ts but are created when you add your first MDX entries.

astro.config.ts

Keep the generated integration array: docsShell() first, then Expressive Code, MDX, sitemap, Pagefind, and Qwik. These integrations are registered explicitly; the shell warns when one is missing and does not add it. See Configuration for the complete configuration and required order.

content.config.ts

src/content.config.ts
import { defineCollection } from 'astro:content';
import { contentLoader, pagesLoader } from '@publier/shell/loaders';
import { blogSchema, pagesSchema } from '@publier/shell/schemas';
export const collections = {
// Standalone MDX pages (landing, about, pricing).
pages: defineCollection({ loader: pagesLoader(), schema: pagesSchema }),
// Press releases.
press: defineCollection({
loader: contentLoader({ base: './src/content/press' }),
schema: blogSchema,
}),
// Team member profiles.
team: defineCollection({
loader: contentLoader({ base: './src/content/team' }),
schema: blogSchema,
}),
// Job postings.
careers: defineCollection({
loader: contentLoader({ base: './src/content/careers' }),
schema: blogSchema,
}),
};

publier.config.yaml

The project requires a site mapping with a non-empty site.name:

publier.config.yaml
site:
name: My Company
url: https://example.com
favicon: /favicon.svg

Keep the generated navigation, then customize it using Global settings. search.enabled controls the header trigger; the shortcut remains Cmd/Ctrl+K. The template’s pages: flags do not create or suppress routes. See Pages for the current route controls and limits.

Enabling and disabling sub-pages

The six starter routes come from files in src/pages/. YAML pages: flags are not applied and do not hide those files or their navigation links. Update the route files and navigation explicitly when changing the published page set.

Customizing a sub-page

The scaffolded .astro files in src/pages/ are starter implementations. You have two options:

Edit the .astro file in place — update component props, add or remove sections, change copy.

Use MDX content in your own route — registering the pages collection loads entries but does not create routes. A route must retrieve and render the MDX content; adding src/content/pages/about.mdx alone does not publish /about.

See Pages reference for full per-page documentation and override patterns.