/changelog/projects/graphite-message-lab

Graphite Message Lab

live

A public message form with private-by-default moderation, backed by Django, PostgreSQL, Redis and Celery and deployed automatically through the Project Graphite hosting path.

  • django
  • postgresql
  • redis
  • celery
  • docker
owner
Amr El-Sheraey
source
project-graphite/graphite-message-lab ↗
project page
/projects/graphite-message-lab

releases · 4

v1.2.0 — Form privacy, contrast and worker health

Follow-up fixes keep unsent message text out of URLs, raise faint text to WCAG AA contrast and add a health check for the production Celery worker. The favicon and header now carry the Project Graphite mark.

security

  • The message form posts its data, so unsent message text never reaches the URL or access logs when the page script fails to loadd24b42d · AmrMsCLL

added

  • The production Celery worker has a health check that pings it every 60 seconds4395fe1 · AmrMsCLL

changed

  • The favicon and header tile use the Project Graphite pencil-A markb3a63a5 · AmrMsCLL

fixed

  • Faint text meets WCAG AA contrastf21247e · AmrMsCLL

v1.1.0 — Wall privacy fixes and Graphite theme

An audit pass closed gaps that could put private or flagged messages on the public wall, made the wall resilient to failed requests, and moved the site and admin onto the shared Graphite theme.

security

  • Messages that never requested publication can no longer be published to the wall, and a flagged display name now keeps a message private402cad8 · AmrMsCLL

changed

  • The site and the admin use the Graphite dark theme with a single SVG favicon in place of the upstream favicon kitcfaa1a1 · AmrMsCLL

fixed

  • A failed refresh keeps the messages already on the wall and shows a styled notice, form errors fall back to a readable message, screen readers no longer re-announce the wall on every refresh, and the header wraps at phone width35c51dc · AmrMsCLL
  • Docker Compose honours the documented APP_UID, APP_GID and CELERY_LOG_LEVEL settingsbd75c15 · AmrMsCLL

removed

  • DATABASE_URL is no longer read; PostgreSQL is configured only through the POSTGRES_* variables4017ed6 · AmrMsCLL

v1.0.0 — Live on Coolify with private review

Message Lab went live at message-lab.project-graphite.com, deployed by Coolify from a production Compose stack that redeploys automatically after each successful push to main. Messages are now private by default and reach the public wall only after an administrator publishes them.

added

  • Production Compose stack that pulls the prebuilt GHCR images, limits CPU and memory, persists PostgreSQL and Redis in named volumes and runs migrations before Gunicorn starts95754e0 · AmrMsCLL
  • Trusted CSRF origins, HTTPS detection behind the proxy and secure cookies outside debug mode95754e0 · AmrMsCLL
  • Every successful push to main redeploys production through the Coolify deployment webhookd99ffc5 · AmrMsCLL
  • Visitors choose between Private and Public after review, every message lands in a private inbox, and only messages an administrator publishes appear on the public wall5b53693 · AmrMsCLL
  • The admin inbox shows each message's requested visibility and moderation flag, with bulk actions to publish messages or make them private5b53693 · AmrMsCLL
  • Messages containing flagged language are marked for moderation and always stay private5b53693 · AmrMsCLL
  • The project is registered in Project Graphite as a live, listed application4f4b04e · AmrMsCLL

changed

  • Production now runs as a Coolify-managed Docker Compose application instead of on Kubernetes95754e0 · AmrMsCLL

v0.1.0 — First message feed

The first version of the lab: visitors post a short message, Django stores it in PostgreSQL, and a Celery worker processes it in the background while the page polls for the result. It ships with a local Docker Compose setup and container images published to GitHub Container Registry.

added

  • Visitors can post a message with their name from the browser and watch it appear on a feed that refreshes from the JSON API at /api/messages/2c96953 · AmrMsCLL
  • A Celery worker picks up each new message through Redis, counts its words and marks it processed2c96953 · AmrMsCLL
  • Health endpoints at /up/ and /up/databases report whether the app, PostgreSQL and Redis are reachable2c96953 · AmrMsCLL
  • Docker Compose setup for local development, with CI that publishes immutable web and worker images to GitHub Container Registry on every push to main2c96953 · AmrMsCLL
  • Production resources are generated for Kubernetes from the platform registry entry, with Docker Compose kept for local development only2973625 · AmrMsCLL