The local quickstart uses
MEETCOST_ENVIRONMENT=development and MEETCOST_AUTH_MODE=dev, which enables the meetcost token command and relaxes some production checks. These modes are explicitly refused when MEETCOST_ENVIRONMENT=production. See Deployment for the production setup with Postgres and OIDC.Prerequisites
- Docker
- Without Docker
- Docker Desktop or Docker Engine with Compose v2
- Git
jq(optional, for pretty-printing the API response)
Setup
- With Docker
- Without Docker
1
Clone the repository
2
Create your environment file
Copy the example env file. You will fill in the encryption key in the next step.
3
Generate an encryption key
Pay values are stored encrypted with AES-256-GCM under a key you supply. Generate one now and paste it into Open
.env as MEETCOST_ENCRYPTION_KEY..env in your editor and set:4
Start the service
http://localhost:8000.5
Seed demo data
The Expected output:
seed-demo command creates eight fictional employees with pay records, assigns roles, and injects a few completed meetings so the reports pages are not empty.6
Open the admin UI
Visit http://localhost:8000/admin, click Get a development token, and enter
ada@example.com. Ada is the seeded admin user.Get a development token
Themeetcost token command mints a short-lived JWT signed with your MEETCOST_SECRET_KEY. It works only when MEETCOST_ENVIRONMENT is not production.
- With Docker
- Without Docker
Call the estimate endpoint
With the service running and demo data seeded, ask for the cost of a one-hour weekly sync with all eight demo employees:- With Docker
- Without Docker
Understanding the response
Cadence values
Thecadence field accepts: one_off, daily, weekdaily, weekly, biweekly, monthly, quarterly.
What the demo data looks like
seed-demo creates the following people and roles:
It also injects three weekly all-hands meetings (from the past three weeks) and one monthly roadmap review, so the digests and reports endpoints return real data.
Assigning roles from the CLI
You can grant roles without going through the admin UI:participant, organiser, team_lead, finance, and admin.
Running the tests
The test suite runs with no network access and completes in a few seconds:server/tests/test_no_egress.py, which asserts that the service makes no outbound connections to any host that is not in the configured egress allowlist — this is the test that keeps the data-residency claim honest.
Next steps
Production Deployment
Switch to Postgres, configure OIDC against your identity provider, supply an encryption key from your secret manager, and deploy with the provided Helm chart.
Architecture
Understand the four-layer code structure, storage schema, boot sequence, and extension points.
Permissions
Full detail on the role model, salary-inference protections, and the small-meeting rounding rules.
Adapters
Connect a directory provider (Google, Microsoft), an attendance collector, or an HRIS for automated pay data sync.