CMS Chronicle #09: Rebranding and Landing Rebranding and eating our own dog food
The CMS got a new identity — webhouse.app branding throughout, a branded login experience, and a landing page that is itself managed by the CMS. Plus the repo rename, deploy file cleanup, and npm publish.
A new face
The project has been called cms-engine internally since the start. Today we renamed the repository to just cms — matching the npm scope @webhouse/cms — and applied the webhouse.app brand identity everywhere.
The eye
The webhouse.app logo is a stylized eye with a golden iris. It represents observation, attention to detail, and the idea that a CMS should see your content clearly. The icon now appears in:
- Admin sidebar (stacked: eye + wordmark + tagline)
- Login page (centered, 72px)
- Favicon (64px)
- Landing page (hero, nav, footer)
- webhouse-site footer ("Powered by")
The wordmark switches between dark and light variants based on the active theme.
Brand colors
| Color | Hex | Usage |
|---|---|---|
| Primary gold | #F7BB2E | Logo, CTAs, accents |
| Dark gold | #D9A11A | Hover states, shadows |
| Near-black | #0D0D0D | Primary dark background |
| Dark blue-blacks | #1C1C1C — #2A2A3E | Surface variants with subtle blue undertone |
Login experience
The login page was previously rendered inside the admin layout — sidebar, tabs, and all visible behind the form. Now it is a fullscreen overlay with:
- Dark gradient background with grid pattern
- Radial gold glow accent
- Eye icon + wordmark centered
- "Powered by @webhouse/cms" footer
- Glassmorphism card with backdrop blur
Sign out sends you to the landing page instead of back to login.
The landing page
Unauthenticated visitors at localhost:3010 see a marketing page for webhouse.app. It features:
- Hero with floating eye icon, wordmark, terminal snippet
- Stats bar (scaffold time, code needed, Lighthouse score)
- Feature cards (AI agents, schema-driven content, static output, etc.)
- Architecture diagram (the real SVG from Illustrator, not ASCII)
- MCP section (public + authenticated server descriptions)
- CTA section with GitHub link
The page is served as static HTML at 120% zoom for a bolder feel. Authenticated users are redirected straight to /admin.
Dog food: landing as a CMS example
Here is the interesting part. The landing page content is also defined as a CMS schema:
defineCollection({
name: 'pages',
label: 'Pages',
urlPrefix: '/',
fields: [
{ name: 'title', type: 'text', required: true },
{ name: 'metaDescription', type: 'textarea' },
{ name: 'sections', type: 'blocks', blocks: ['hero', 'stats', 'features', 'architecture', 'mcp', 'cta'] },
],
})
Six block types — hero, stats, features, architecture, mcp, cta — each with their own fields. The content is seeded as content/pages/home.json with all the real landing page data.
This lives in examples/landing/ alongside the existing examples/blog/. It is the second example site, and thanks to the multi-site admin (Chronicle #08), both sites are manageable from the same admin instance.
Repo cleanup
- Repository renamed
webhousecode/cms-engine→webhousecode/cms - Git remote, scripts, Dockerfile, fly-start.sh all updated
- Deploy files moved into
deploy/within the repo (tracked in git) - webhouse-site's dependency path updated from
../cms-engine/to../cms/
npm publish
All five packages are now published on npm:
@webhouse/cms— core engine@webhouse/cms-ai— AI agents@webhouse/cms-cli— CLI tool@webhouse/cms-mcp-client— public MCP server@webhouse/cms-mcp-server— authenticated MCP server
npx @webhouse/cms init is now a real thing.
What is next
The landing page is currently a static HTML file. The next step is building the template engine that renders the block-based content from home.json into the same HTML — so edits in the admin UI update the live landing page. That is Phase 3 of the landing migration.
But first: multi-site management. That is Chronicle #08.