- TypeScript 97.2%
- JavaScript 0.9%
- HCL 0.8%
- CSS 0.6%
- Shell 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
CI / build (pull_request) Failing after 34m53s
Deploy dev / Detect changed services (push) Successful in 24s
Deploy dev / CI coverage guard (push) Successful in 51s
Deploy dev / Server-side quality gate (push) Failing after 25m53s
Deploy dev / Build + push web:dev (push) Has been skipped
Deploy dev / Seed platform admin (dev) (push) Has been skipped
Deploy dev / Post-deploy verification (push) Has been skipped
Deploy dev / Notify deploy result (push) Has been skipped
Deploy dev / Build + push api:dev (push) Has been skipped
Deploy dev / Build + push tileserver:dev (push) Has been skipped
Deploy dev / Build + push jobs:dev (push) Has been skipped
Deploy dev / Build + push audio-transcoder:dev (push) Has been skipped
Deploy dev / Run Prisma migrations (dev) (push) Has been skipped
Deploy dev / Terraform apply (dev) (push) Has been skipped
Deploy dev / Deploy dev (roll Cloud Run) (push) Has been skipped
CI / secret-scan (pull_request) Successful in 5m39s
Step 5 (docs/specs/2026-08-18): rooms/calendars/booking-request-messages Prisma adapters (P2002 mapped by EXACT constraint name first — Prisma 7 driver-adapter mode omits meta.target, discovered live; substring probe kept as documented fallback), Repos entries + PlacesRepo.updateTimezone flipped REQUIRED with staging branches removed, tz-lookup@6.1.25 behind TimezoneLookupPort wired at both composition roots, Place.timezone threaded through defaultStartsAt + save-payload timezone together. Additive migration: BookingRequestAttachment uploadedBySide/HumanId; delete refined to uploader-or-venue via read-then-check-then-mutate (existence-leak closed). Availability upsert is full-PUT (isOpen required — editing a blackout note can no longer silently reopen the date). Integration suite (testcontainers, migrate-deploy replay proof, setup-honesty gate): room-bleed SQL pin, default-calendar equivalence, P2002 mappings, cursor/markRead/touch semantics, didStamp, uploader round-trip. Authz gate deduped to _shared/ensure-place-owner-access. backfill-venue-defaults script for pre-hierarchy places (prod deploy runs once). Guest-thread tokens NOT included (user decision pending). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
| .claude | ||
| .githooks | ||
| .github | ||
| .qa-shots | ||
| .vscode | ||
| apps | ||
| docs | ||
| infra | ||
| packages | ||
| scripts | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .gitleaks.toml | ||
| .mcp.json | ||
| .npmrc | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| prisma.config.ts | ||
| README.md | ||
| tsconfig.all.json | ||
| tsconfig.base.json | ||
| tsconfig.json | ||
| turbo.json | ||
Ithas Fire
Monorepo for the Ithas Fire platform -- transparent, developer-grade ticketing and event infrastructure.
Index
Documentation
See docs/README.md for the full documentation index. Key starting points:
docs/engineering-standards.md-- Engineering standards and architecturedocs/env.md-- Environment variables referencedocs/db-setup.md-- Database setup and Prisma workflowdocs/production-checklist.md-- Production deployment guide
CI workflow
The repository includes a GitHub Actions workflow at .github/workflows/ci.yml that runs on push and PRs to main.
What the CI does:
- Installs dependencies with pnpm
- Validates the Prisma schema in
packages/db - Generates the Prisma client
- Runs the monorepo build (via turbo)
- Type-checks and runs lint
To run the checks locally (macOS / Linux):
# install deps
pnpm install
# Validate Prisma schema (requires a running Postgres for full validation)
export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/dev?schema=public"
pnpm db:validate
# Generate Prisma client
pnpm -F @th/db prisma generate
# Build and typecheck
pnpm build
pnpm -w tsc -p tsconfig.base.json
# Lint
pnpm lint
Quick infra start (local dev)
This repo includes infra/docker/docker-compose.yml and infra/.env (keep .env local). A safe example is included at infra/.env.example — copy it to infra/.env and edit secrets locally.
Start the infra:
cd infra/docker
docker compose up -d
Need only Redis (for example to exercise the idempotency, rate-limit, or DLQ adapters) but still want data to persist between sessions? Use the dedicated compose file:
cd infra/docker
docker compose -f docker-compose.redis.yml up -d redis-dev
It binds to localhost:16379 by default (override with HOT_EVENTS_REDIS_PORT) and stores data in the named volume ithasfire-redis-dev, so you can stop/start containers without losing state. Tear it down with docker compose -f docker-compose.redis.yml down when you’re finished.
Then apply Prisma migrations and run a smoke test:
export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/dev?schema=public"
cd packages/db
pnpm -F @th/db prisma migrate dev --name init
pnpm -F @th/db prisma generate
node test-smoke.js
Notes:
- Do not commit
infra/.envto the repository. Instead copyinfra/.env.exampletoinfra/.envand edit the values locally.
App surfaces & helper scripts
Once Postgres/Redis are running you can boot individual services (or the full stack) with the helper scripts under package.json:
| Command | Purpose |
|---|---|
pnpm api:bg |
Starts apps/api in a detached background process. PID lives in .tmp/api-dev.pid and logs stream to logs/dev/api/api-<timestamp>.log (files older than ~48h are auto-pruned). Tail with tail -f logs/dev/api/<latest>.log. |
pnpm api:bg:status |
Prints whether the detached API is still running. |
pnpm api:bg:stop |
Sends SIGTERM to the detached API and cleans up the PID file. |
pnpm web:dev:local |
Launches the Next.js dev server while ensuring WEB_API_BASE_URL is set (defaults to http://localhost:3001). Pass a different base with --base https://api.dev.foo. |
pnpm stack:dev |
Convenience combo that runs pnpm api:bg first and then pnpm web:dev:local --base http://localhost:3001. |
pnpm db:reset |
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dev?schema=public tsx scripts/db-reset.ts |
pnpm db:reset:remote |
tsx scripts/db-reset.ts |
pnpm db:wipe |
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dev?schema=public tsx scripts/db-wipe.ts |
pnpm db:wipe:remote |
tsx scripts/db-wipe.ts |
pnpm db:backfill:paidout |
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dev?schema=public tsx scripts/backfill-order-item-paidout.ts |
pnpm db:backfill:paidout:remote |
tsx scripts/backfill-order-item-paidout.ts |
pnpm human:dev |
node scripts/human-dev.cjs |
pnpm mobile |
pnpm -F mobile ios |
pnpm mobile:smoke |
pnpm -F mobile smoke |
pnpm mobile:lint |
pnpm -F mobile lint |
pnpm vitest:bg |
node scripts/run-vitest-watch.cjs |
pnpm vitest:bg:stop |
node scripts/stop-vitest-watch.cjs |
pnpm scanner |
pnpm -F scanner start |
pnpm prisma:gen |
pnpm -C packages/db run generate |
pnpm prisma:push |
pnpm exec prisma db push |
pnpm db:migrate:dev |
pnpm exec prisma migrate dev |
pnpm db:migrate:deploy |
pnpm exec prisma migrate deploy |
pnpm db:migrate:status |
pnpm exec prisma migrate status |
pnpm db:validate |
pnpm exec prisma validate |
pnpm infra:test |
bash infra/scripts/validate.sh |
pnpm seed:dev |
pnpm -F api seed:dev |
pnpm android |
expo run:android |
pnpm ios |
expo run:ios |
pnpm email:preview |
Start the @th/ui-email preview server (browse templates at http://localhost:3004). |
The API logs directory is gitignored; if you need to inspect previous runs, look under logs/dev/api. Each invocation appends a timestamped file so they do not clobber one another, and anything older than roughly two days is removed automatically.
The web helper simply wraps pnpm -F web dev and injects WEB_API_BASE_URL if the env variable is missing; all other flags and .env.local entries still behave normally.
The Vitest helper derives a label from the directory path (packages/core → packages-core). Override it with --label my-core when you want clearer names or multiple watchers per directory. Example: pnpm vitest:bg --dir packages/core to start a long-running watcher, then pnpm vitest:bg:stop --label packages-core (or kill $(cat logs/dev/tests/packages-core/watcher.pid)) when you're done.