PromptStack

Blog or CMS

A publishing system: posts with drafts and scheduling, media, categories and tags, and multiple authors. Search visibility and server-rendered pages matter more here than in most projects.

You can change every choice once the builder opens.
Core features for the MVP
  • Post editor with draft, scheduled, and published states
  • Media library with image upload and resizing
  • Categories and tags, with archive pages for each
  • Multiple authors with their own profile pages
  • Server-rendered public pages with per-post metadata
  • Sitemap, RSS feed, and Open Graph preview cards
  • Full-text search across published posts
Left for later
  • Comments with moderation
  • Newsletter delivery to subscribers
  • Scheduled social posting
  • Content versioning with rollback

Recommended stack

SectionRecommended
LanguageTypeScript
Frontend frameworkNext.js
UI and stylingTailwind CSSshadcn/ui
BackendNext.js server
API styleServer actions
Database enginePostgreSQL
Database providerNeon
ORM and data accessDrizzle
CachingCDN caching
AuthenticationClerk
Authorization and rolesRole-based access control
SecurityInput validationRate limitingSecurity headers and CSPSecrets management
File storageAWS S3
SearchPostgres full-text search
Email and notificationsResend
Hosting and deploymentVercel
CI/CDGitHub Actions
Monitoring and analyticsSentryVercel Analytics
TestingVitestPlaywright
ExtrasSEOAccessibility (WCAG)InternationalizationBackupsDocumentation

Data model draft

Post

One article, in whatever state it currently is.

  • id
  • slug
  • title
  • excerpt
  • body
  • status
  • authorId
  • coverImageId
  • publishedAt
  • updatedAt
  • Belongs to one Author
  • Has many Tags
  • Belongs to one Category
Author

Someone who writes or edits posts.

  • id
  • userId
  • displayName
  • bio
  • avatarUrl
  • slug
  • Has many Posts
Category

A single primary grouping for a post.

  • id
  • slug
  • name
  • description
  • Has many Posts
Tag

A free-form label; a post may carry several.

  • id
  • slug
  • name
  • Has many Posts through PostTags
MediaAsset

An uploaded image or file used in a post.

  • id
  • storageKey
  • fileName
  • mimeType
  • width
  • height
  • altText
  • Used by many Posts