Members file a short periodic log of what happened. pressroom compiles a month's public logs into publication drafts, renders an email-safe branded newsletter, and dresses HTML-first posters in four social formats — all from source, never hand-patched, signed off by one named approver.
The demo runs entirely in your browser on fictional seed data (Orbital Collective, a community lab that does not exist) — no server, no account, and nothing you do in it is saved.
Raw logs are filed as-is and never rewritten. Everything downstream is generated from them — so corrections go into the source, and the outputs are rebuilt.
Each member files a short weekly or monthly log: highlights, progress, people, the thing they learned, one line for the public. visibility: internal never leaves the repo.
A month's public logs are assembled into one compile input with provenance headers. Internal logs are excluded — and every exclusion is counted.
An AI pass — your key, your provider, or a local Ollama — drafts the newsletter, social post, and collateral brief. No invented facts; unknowns stay marked.
The brand extractor samples your website — colors, fonts, logo — into one tokens file. The poster engine itself ships zero brand values.
Posters compose a fixed component vocabulary in four formats: 4:5, 1:1, 9:16, 16:9. One build inlines everything into a single standalone HTML file.
One named approver reads the notes — exclusions, unverified figures, open questions — and signs off. Nothing publishes before that.
Everything below was generated by the same commands you would run for your own organization, using the fictional Orbital Collective seed content.
The app, in demo mode
The full log / feed / compile workflow running in-memory in your browser: seeded member logs, an approved June 2026 compilation, and the branded newsletter build — including the internal-log exclusion count.
Open the demo
The starter poster board
The kitchen-sink campaign wearing the engine's neutral skin: all four poster formats, the dark register, stat tiles, step lists, and the loud TBD marker — one self-contained HTML file.
Open the board
The sample newsletter
The fictional July 2026 issue rendered email-safe: brand token values inlined, table-based single column, no external references — the render you would actually paste into a send.
Open the issueNode 20 or newer, zero npm dependencies. The one optional install is playwright, and only for PNG and PDF export.
LOCAL is a node-stdlib server plus git — no accounts, no cloud. TEAM adds Google sign-in, Firestore, and hosting. The same SPA picks its backend at load, with no build step.
The renderer resolves your brand token values out of
tokens.css and inlines them, because email clients do not support CSS
custom properties. Table layout, 640px single column, inline styles only — it
degrades sanely in Outlook and Gmail.
A log filed as internal never enters any output — and every exclusion is counted,
so the approver can see that redaction happened without seeing what was redacted.
Visibility fails closed: anything but exactly public is excluded.
Anthropic, OpenAI, Gemini, or a local Ollama for the fully offline path. Keys live in your browser or your env vars — never in the database, never in git. The AI sorts and drafts; people decide.
Point the extractor at your site and it samples colors, fonts, and the logo into
one tokens file, with a TODO(spot-check) comment on every judgment
call. Posters stay on-brand by construction, not by review.
Any fact you do not actually have renders loud amber — in posters and in the newsletter alike — so a draft can never quietly pass as final. Grep for it before anything ships.
# Node >= 20. No npm install — there are no dependencies.
# (update the clone URL after the first publish of this repo)
git clone https://github.com/fritzhand/pressroom && cd pressroom
cp pressroom.config.example.json pressroom.config.json
node cli/serve.mjs # the UI on http://localhost:8123
File a log, compile the month, build the branded newsletter from the
Compile tab — or render the fictional sample issue with no setup at all:
node newsletter/build.mjs --sample. Git is the collaboration layer;
team mode with sign-in and a hosted dashboard is documented in the repo.
Knowing the edges up front beats discovering them mid-rollout.