Durable discussion
Spaces, categories, threads, posts, revisions, archival, and search are modeled as long-lived community assets.
Independent community infrastructure
GP stands for Good Phorum. The P in Phorum stands for Perl. A general-purpose, Perl-native forum platform for communities that need durable discussion, explicit governance, serious moderation, and infrastructure that can be operated for years.
Good Phorum treats a forum as civic software: conversations, policy, moderation, search, events, and operations are all first-class parts of the system.
Spaces, categories, threads, posts, revisions, archival, and search are modeled as long-lived community assets.
Reports, scoped staff authority, reversible actions, audit logs, and policy versioning keep governance visible.
Modern Perl, Mojolicious, DBIx::Class, PostgreSQL full-text search, Minion, and a Redis-optional coordination model.
The design favors explicit boundaries, stateless app nodes, event tables, asynchronous projections, observable workers, and cache layers that can be rebuilt.
Good Phorum does not bury moderation inside ad hoc admin screens. Policy, trust, role scope, auditability, appeals, content lifecycle, and privacy rights are documented as architecture.
Authorization evaluates actor, action, target, scope, resource state, and user state.
Durable domain events drive projections, notifications, replay, and audit investigation.
Retention, deletion, export, consent, search visibility, and breach readiness are explicit.
The forum HTTP MVP is running. What remains is the hardening that turns a working system into one you can trust with a community.
Registration, login, server-side sessions, revocation, CSRF, and password and email lifecycle tokens.
Categories, threads, replies, revisions, keyset pagination, search, and safe server-rendered composition.
Scoped roles, reports, reversible actions, suspensions, and audit review for staff.
Mail delivery, staging drills, database-backed failure tests, and load tests on representative hardware.
Open source, BSD-3-Clause
Clone the repository, install dependencies with Carton, and run make check: syntax, tests, Perl::Critic, perltidy, and the architecture contract.