โ† Case Studies

Full-Stack Development ยท Content Platform

Zenmora Blog

An editorial home decor blog and ecommerce platform built from scratch. Full CMS with a rich post editor, newsletter subscriptions, reader engagement features, and an integrated shop, built on a custom Next.js 15 foundation.

What it is

Zenmora Co. is a content-driven home decor brand that needed a publishing platform purpose-built to its requirements rather than adapted from a generic CMS. The site combines an editorial blog with an integrated shop, giving the brand full control over content presentation, product curation, and reader engagement without relying on third-party platforms.

The admin is a password-protected dashboard that lets editors publish posts with rich media, manage shop items, moderate comments and messages, and customise homepage content, all within the same application. No external CMS is involved. Authentication is session-based, handled entirely within Next.js Server Actions, which also power every form submission on the site.

What was built

Blog & CMS

Editors publish posts through an inline-media editor backed by Supabase Storage. Posts support custom meta tags for SEO, category tagging, and markdown content with HTML sanitization to prevent XSS.

Shop

Product listings with manual sort ordering, a featured item flag for homepage placement, and independent management from the blog. Built to expand into a transactional flow without a structural rewrite.

Reader Engagement

Per-post comments and likes tracked in PostgreSQL. A contact form with an admin inbox for direct messages. All interactions handled through Server Actions, with no separate API routes required.

Newsletter

Subscription management with optional new-post notifications via Resend. Subscribers stored in the same Postgres database, managed through the admin dashboard alongside all other content.

How it is built

  • Next.js 15 App Router with React 19, with full Server Components and Server Actions throughout
  • Prisma ORM over PostgreSQL (Neon) with separate pooled and direct connection strings for serverless
  • Supabase Storage for media uploads, accessed directly from the admin editor
  • Session-based admin authentication with no external auth service
  • HTML sanitization on all user-generated content before persistence
  • SEO metadata generated per post with Open Graph and Twitter card support
  • Resend integration for transactional email (newsletter notifications)
  • GitHub Actions CI running ESLint, TypeScript checks, and Vitest on every push
  • Vitest test suite with coverage reporting
  • Deployed on Vercel with pre-commit hooks enforcing lint and type correctness

Tools involved

  • Next.js 15 (App Router)
  • React 19
  • TypeScript
  • Prisma ORM
  • PostgreSQL (Neon)
  • Supabase Storage
  • Resend
  • Vitest
  • GitHub Actions
  • Vercel