Writora
A self-hostable blogging platform — each author gets a themable site, custom domain, email subscribers, and a real authoring experience.
A blogging platform built for writers who want their own space without the bloat of WordPress or the rent-seeking of Medium. Each author gets a public site at yourdomain.com/username, 40+ swappable themes, email subscribers with double opt-in, and a newsletter blast on every publish.
Stack
- Turborepo monorepo with three apps: a NestJS 11 API and two Next.js 16 App Router frontends (public site + author dashboard).
- PostgreSQL via Prisma 7 for the data layer.
- Tiptap editor with images, code blocks, embeds, and drag-and-drop image upload.
- Redis (ioredis) for hot-path caching with explicit invalidation, plus per-IP rate limiting on auth/subscribe/upload.
- RabbitMQ (amqplib) for durable newsletter blasts that survive crashes.
- S3-compatible storage (
@aws-sdk/client-s3) — works with AWS S3, Cloudflare R2, B2, Spaces, or MinIO behind one env switch. - sharp for image processing (resize, WebP, EXIF rotation).
- Resend + react.email for transactional and newsletter templates.
- JWT in an httpOnly cookie shared across the
.yourdomain.comsubdomain — one auth, three apps.
Notable bits
The whole thing degrades gracefully — leave Redis, RabbitMQ, or S3 unset and the API falls back to no-ops, inline sends, and disk storage so local dev needs nothing but Postgres. The newsletter pipeline is durable end to end: publish a post, the API enqueues a job, a consumer fans it out to subscribers, and a crash mid-blast doesn't lose anyone.
Reader-side has a real SEO surface — sitemap, robots, RSS auto-discovery, JSON-LD BlogPosting schema, dynamic OG images per post, and a per-author RSS feed at /{username}/feed.xml. Authors get a Tiptap-based editor with autosave and an unsaved-changes guard, plus an analytics dashboard with views over time, top posts, and week-over-week trends.
Themes are powered by the tweakcn registry — 40+ themes, swappable per blog, no rebuild required. Ships with Dockerfiles for all three apps (slim multi-stage builds, ~180–220MB each) and a docker compose up spins the full stack.
Highlights
- Turborepo monorepo: NestJS API + two Next.js 16 frontends sharing a JWT cookie across subdomains.
- Durable newsletter pipeline — RabbitMQ producer/consumer so a crash mid-blast doesn't drop subscribers.
- Pluggable S3-compatible storage and graceful degradation when Redis/Rabbit/S3 are unset.
- Tiptap editor with autosave, drag-and-drop image upload, and sharp-based WebP processing.
- Per-author public site with 40+ tweakcn themes, RSS feed, JSON-LD, and dynamic OG images.
- Redis-backed read-through cache with explicit invalidation, plus per-IP throttling on sensitive endpoints.