Yesterday I wrote that I was starting over.
Today was the first real test of that decision: could I restart without rebuilding the same overhead under a cleaner name?
I did not start with a landing page. I did not start with a VPS. I did not start with monitoring or a content backlog.
I started with the things that decide whether the project has a spine.
Repository split
The community edition lives on GitHub as an AGPL-licensed open source project — the source of truth for the core product.
Cloud and infrastructure concerns live separately in private repositories.
The important decision is that the cloud version will not fork the community edition: It depends on it as a Python package, imports core apps, and extends them. When the community edition releases, the cloud version updates a dependency. No manual sync.
The plan is for the cloud version to eventually become a managed offering — for those who want WeRemember without the self-hosting overhead, or who need enterprise features like SSO, audit logs, or RBAC. The community edition stays the open source core either way.
CI/CD boundary
CI builds and pushes images to public registries. It knows nothing about the deployment target.
Deployment belongs to a separate private pipeline.
The community repository stays clean. It knows only that an image is ready,not where it goes.
Governance scaffold
I opened PR #1 before writing any application code. It includes:
- issue and pull request templates
- label taxonomy managed via a committed setup script
- branch naming:
<type>/<issue-number>-<short-description> - Conventional Commits
- branch ruleset documented as
gh apicommands
The issue number is mandatory on every branch. Every branch must point back to tracked work.
Labels and rulesets are version-controlled and reproducible, not configured once through the GitHub UI and forgotten.
———
Top comments (0)