Skip to content
MohamedajabPublic

About

An editorial workspace built with Django and PostgreSQL. Draft, review and publish stories with revision history and a REST API. Try it live, no signup.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Pressroom

A Django CMS for small editorial teams. Write a draft, send it for review, and publish an approved version. Later edits stay private until they are approved.

Try the live demo · CI · API guide

Workflow recording · Test results

Each visitor gets a separate workspace with sample stories, revision history and author/editor switching. No signup is needed. The workspace expires after an hour.

Content library with sample stories and their publishing status

Features

  • Workspace permissions with owner, editor, author and viewer roles.
  • Draft, review, published, scheduled and archived states.
  • Public pages read the approved revision; draft changes stay private.
  • Revision restore, edit conflict detection and an activity log.
  • REST API with session/token authentication and OpenAPI docs.
  • Markdown rendering with HTML sanitization.

Screenshots

Review and revisions

Review a draft, check earlier versions, and approve it for publication.

Story review with publication controls and revision history

Public publication

Readers see the approved version while the next draft stays private.

Published stories in the Fieldnotes Studio publication

Demo landing page, sign-in and mobile

Demo landing page

Public demo landing page with workspace preview

Sign in

Pressroom account sign-in page

Mobile workspace

Pressroom content library on a mobile screen

Run locally

Python 3.12 or newer. SQLite works for a quick start; PostgreSQL is used in Docker and CI.

git clone https://github.com/Mohamedajab/pressroom.git
cd pressroom
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
python manage.py migrate
DEMO_ENABLED=true python manage.py runserver

On Windows PowerShell, use .\.venv\Scripts\Activate.ps1 to activate the environment and $env:DEMO_ENABLED='true' before running python manage.py runserver.

Open localhost:8000/demo/. API docs are at /api/docs/ and database health is at /health/.

For a persistent local workspace, run python manage.py bootstrap_workspace my-studio --name "My Studio" --username owner. It prompts for a password when creating an account. The local-only seed_demo command is also available; see deployment notes.

Checks

pytest
python manage.py check
python manage.py makemigrations --check --dry-run
ruff check .
ruff format --check .

SQLite skips the two PostgreSQL concurrency tests. CI tests with PostgreSQL on Python 3.12 and 3.13. Browser checks are in scripts/demo_smoke.py and scripts/browser_smoke.py.

Deployment

The live demo uses Vercel and Neon PostgreSQL. Vercel runs python manage.py migrate --noinput during builds and serves collected static files. Configure DEBUG=false, DEMO_ENABLED=true, a random SECRET_KEY, DATABASE_URL, ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS, and TRUST_PROXY=true behind Vercel's proxy.

The live demo supports manual publishing. Scheduled publication needs a separate scheduler running python manage.py publish_due; it is not configured on the current Vercel deployment. Expired visitor workspaces are cleaned when a new demo starts.

For Docker/PostgreSQL and other hosts, see deployment and hosted demo setup.

Code and scope

Templates and the REST API call the same functions in publishing/services.py. Changes, revisions and audit events commit together. PostgreSQL row locks and version checks protect concurrent edits.

See architecture, API routes, and contributing.

Uploads, email invitations, SSO and billing are not included. API rate limits use a per-worker memory cache. Use a shared cache before scaling.

MIT licensed.

About

An editorial workspace built with Django and PostgreSQL. Draft, review and publish stories with revision history and a REST API. Try it live, no signup.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages