← Back

[Project] Pluma

Table of Contents

What is Pluma?

Pluma is a modern blogging platform built for writers and developers who want a clean, distraction-free writing experience with powerful features under the hood.

Technical Stack

Core Features

Architecture

Pluma is a Django monolith with subdomain-based multi-tenancy. Each user gets username.pluma.ink, routed by a custom middleware that resolves subdomains and custom domains to the correct user context.

Custom domains are supported through Caddy on-demand TLS — when a request hits a new domain, Caddy calls a validation endpoint on the Django app to verify ownership before provisioning an SSL certificate. DNS verification ensures the domain points to the server before it is accepted.

The editor stores content as markdown. On save, each block in the editor serializes to markdown, which gets posted to the API and stored in PostgreSQL. On page load, a custom server-side markdown parser renders the stored markdown to HTML with support for LaTeX, syntax highlighting, and custom block types.

All API endpoints are rate-limited and protected with CSRF tokens. Plan-gated features (analytics, newsletters, custom domains) are enforced at the view level with a decorator that checks the user's Stripe subscription status.

Newsletters use a custom Django email backend built on top of the Brevo API, with per-plan send limits enforced server-side.