Inkwell - Blog/CMS Template (Next.js)
Blog/CMS starter built on Next.js 16, PostgreSQL, and the Inkwell editorial design tokens. Ships auth scaffolding, Gate 17 compliance wiring, CMS admin, public /blog reader, RSS, sitemap, comments, moderation, and content analytics.
Quick Start
Prerequisites: Node.js 22.13+, pnpm 10+, PostgreSQL 15+.
- Clone or extract the ZIP.
cp .env.example .envpnpm install- Start PostgreSQL:
docker compose -f docker-compose.demo.yml up -d pnpm db:migratepnpm db:seedpnpm dev- Visit
http://localhost:3000
Demo credentials:
- User:
demo@example.com/Password123!! - Admin:
admin@example.com/Password123!!
What's Included
Foundation layer:
- Auth scaffolding: email/password login, password reset, JWT + refresh, audit-logged failed logins
- UK / EU / US compliance scaffold (Gate 17)
- Inkwell theme tokens: warm-sand accent, Lora display, dark + light mode
- Drizzle ORM + PostgreSQL, Zod validation, structured logging
- Responsive layout from 375px to 2560px
- Docker demo environment and Vercel-ready build path
- Auth flags through
SITE_CONFIG
CMS layer:
- Posts CRUD with Markdown editor, live preview, revisions, scheduling fields, and status workflow
- Hierarchical Categories and flat Tags with slug auto-generation
- Public
/bloglisting and/blog/[slug]article reader - CMS-managed static pages at slugs such as
/aboutand/contact - RSS feed at
/rss.xmland XML sitemap at/sitemap.xml - Reader comments with admin moderation queue and author notification emails
- Media library metadata backed by the upload system
- Content analytics: per-post views, views over time, popular posts, and top categories
Useful Routes
/blog- public article index/about- seeded CMS-managed static page/content- admin CMS studio/content/comments- moderation queue/content/analytics- content analytics dashboard/api/docs- API reference
Tech Stack
- Framework: Next.js 16 App Router
- Database: PostgreSQL via Drizzle ORM
- Auth: JWT access tokens + httpOnly refresh cookies
- Payments: Not included in Inkwell Blog/CMS Lite; add checkout/payment processing before accepting money.
- Styling: Tailwind CSS v4 + shadcn/ui
- Theme: Inkwell (Warm Sand, Lora display)
Environment Variables
See .env.example for all required variables. For production, set:
DATABASE_URLorPOSTGRES_*JWT_SECRETOAUTH_STATE_SECRETwhen OAuth is enabledNEXT_PUBLIC_APP_URLSEED_PASSWORDifDEMO_MODE=trueon a public deployment
Documentation
- INSTALLATION.md - setup and verification
- CUSTOMIZATION.md - branding, theme, CMS content, and demo replacement
- DEPLOYMENT.md - production deployment
- COMPLIANCE.md - Gate 17 compliance scaffold
- LICENCE.md - commercial licence terms
Version
- Version: 1.14.0
- Edition: Inkwell
- Stack: Next.js