code
Github and the git repo is the primary primitive for managing code.
Repo
The layout of the code is the following:
code/marketing/. Landing Page / Marketing page built with Docusaurus.frontend. Frontend React code.mobile. Mobile appscli. cli/tui apps.backend. API/AI backend code.finance. hledger finance code.infra. Terraform and Kubernetes code.
We want a monorepo for all of our code so that AI agents can work on different pieces of the code and manage dependencies between them. We also want to have a single source of truth for all of our code.
Branches
We have couple different branching strategies for different purposes:
main. I too like to live dangerously and deploy directly from main.dev->prod. Separate dev and production branches.dev->qa->prod. Separate dev, qa and production branches.feature->dev->prod. Separate feature branches, qa and production branches.
We use Github Environments to deploy to each environment.
Actions
We use Github Actions extensively to automate our workflows.
.github/workflowsdeploy-*.yml. Deploy marketing, frontend, backend to different environments.routine-*.yml. Create Github issues and any other Standard Operating Procedures (SOPs) that we want to automate.pr-*.yml. Run on Pull Requests.
Project
The Github Project that runs the entire company. Have a singular Github Project that manages all of the work in the company. This is the single source of truth for all of the work that is being done in the company at any given time.
The Project Cards should be simple:
- Spec. Any work that is yet to be defined.
- In Progress. Any work that an AI agent or human can pick up.
- In Review. Work that is ready for a human to review.
- Done. Merged and completed.