Demo Provisioning Platform
Tracking document for issue #281 — see the pull request description for full requirements.
Quick Start
Local (with dev.sh running)
# Start simulator with auto-provisioning
bazel run //tools/simulator:simulator -- \
-Dsim.auto-provision=true \
-Dsim.demo-org-name="Acme Mart" \
-Dsim.demo-store-name="Main Street Store"
GCP Demo VM
# Spin up a demo environment
./tools/demo/demo.sh up acme --org-name "Acme Mart" --store-name "Main Street Store"
# Check status
./tools/demo/demo.sh status acme
# Tear down
./tools/demo/demo.sh down acme
# List all demos
./tools/demo/demo.sh list
Simulator Config Properties
| Property | Default | Description |
|---|---|---|
sim.management-api.url | http://localhost:8082 | Management API base URL |
sim.admin-firebase-token | (auto) | Admin tenant Firebase token |
sim.admin-firebase-tenant-id | admin-tenant-local | Admin tenant ID |
sim.admin-firebase-email | support@peakpos.co | Admin tenant email |
sim.admin-firebase-password | admin123 | Admin tenant password |
sim.auto-provision | false | Auto-provision on startup |
sim.demo-org-name | Custom org name for demo | |
sim.demo-store-name | Custom store name for demo |
Architecture
The simulator authenticates to two Firebase tenants:
- user-tenant-local — for merchant-api calls (products, customers, shifts, etc.)
- admin-tenant-local — for management-api calls (org, store, terminal provisioning)
The provisioning flow:
- Sign in to both Firebase tenants (auto via emulator)
- Find or create org via management-api
- Find or create store
- Find or create terminal
- Create superadmin
- Verify merchant-api auth via
/api/v1/auth/me - Update simulator config with provisioned IDs
- Proceed to seed data and live simulation