Open-source blogging platform built with Nuxt 3 and Supabase.
Demo: pluma.daryandev.com
- Roles: admin, author, and reader
- Posts with Markdown editor, drafts, scheduled publish, and preview links
- Categories, series, comments (with moderation)
- Multi-language UI and content (
en,ku,ar,es,fr,de) - SSR with sitemap, RSS, robots.txt, and Open Graph / Twitter meta
- Branding, logos, favicon, and homepage layout from the dashboard
- Docker image, or deploy on Vercel / Netlify
| Layer | Technology |
|---|---|
| App | Nuxt 3, Vue 3, Tailwind CSS |
| Auth & data | Supabase (Postgres, Auth, Storage) |
| Runtime | Nitro (Node SSR) |
- Node.js 20+
- A Supabase project (or compatible Postgres + Auth + Storage)
git clone https://github.com/Daryan97/pluma.git
cd pluma
npm install
cp .env.example .envEdit .env with your Supabase URL, anon key, and public site URL (see .env.example).
| Scenario | What to run |
|---|---|
| New project | Open /install in the browser, or run src/install/pluma_initial.sql in the Supabase SQL editor |
| Upgrade (series / schedule / preview) | src/install/pluma_features_v2.sql |
| Upgrade (i18n content) | src/install/pluma_i18n_v3.sql (after v2) |
| Multi-step login lookup | src/install/pluma_login_lookup.sql |
| Broken storage/settings RLS after restore | src/install/pluma_rls_fix.sql |
Do not re-run v2/v3 after a fresh pluma_initial.sql install; those features are already included.
npm run devOpen http://localhost:3000. In development, /test is available for diagnostics.
npm run build
npm startUse only VITE_* variables (do not also set NUXT_PUBLIC_*).
| Variable | Required | Description |
|---|---|---|
VITE_SUPABASE_URL |
Yes | Supabase API URL |
VITE_SUPABASE_ANON_KEY |
Yes | Supabase anon key |
VITE_SITE_URL |
Yes | Public origin (canonical URLs, sitemap, RSS, i18n) |
VITE_ENV |
Yes | production or development |
VITE_SITE_LOCALE |
No | Default locale (default en) |
VITE_TWITTER_SITE |
No | Twitter/X @handle for cards |
VITE_FEEDS_CACHE_TTL_MS |
No | Feed cache TTL in ms (default 300000) |
Published image: daryan997/pluma
docker compose -f docker-compose.example.yml up -dOr set the same VITE_* variables on any container that runs daryan997/pluma:latest (port 80).
Full deployment docs: docs/DEPLOY.md.
One-click hosts:
- Deployment — Docker, Vercel, Netlify, env vars, health checks, backups
- Contributing