No description
  • TypeScript 97.2%
  • JavaScript 0.9%
  • HCL 0.8%
  • CSS 0.6%
  • Shell 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
AI Satan d0bd5126a7
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
feat(venue): wire the hierarchy live — prisma adapters, tz lookup, uploader columns
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>
2026-08-18 23:55:28 -05:00
.claude chore: land working tree — host-only session cookie, fee waivers, resource-burn tracking 2026-07-30 23:21:49 -05:00
.githooks fix(hooks): stop the watchdog truncating a suite that actually passes 2026-08-05 16:20:06 -05:00
.github fix(locale): sort the catalogs, and wire the gate that was never running 2026-08-17 17:52:54 -05:00
.qa-shots feat(fees): define the platform fee in code; let free events publish 2026-08-13 09:17:52 -05:00
.vscode chore(security): stop tracking .vscode/tasks.json (contained live creds) 2026-07-07 17:14:05 -05:00
apps feat(venue): wire the hierarchy live — prisma adapters, tz lookup, uploader columns 2026-08-18 23:55:28 -05:00
docs feat(settlements): make payouts ledger-authoritative; kill the refund-then-payout leak 2026-08-13 17:29:55 -05:00
infra feat(fees): define the platform fee in code; let free events publish 2026-08-13 09:17:52 -05:00
packages feat(venue): wire the hierarchy live — prisma adapters, tz lookup, uploader columns 2026-08-18 23:55:28 -05:00
scripts feat(web): inject the Cloudflare beacon ourselves, and fix the cookie table on phones 2026-08-11 15:49:23 -05:00
.dockerignore fix(ci): exclude nested .env files from Docker context + add deploy email notification 2026-04-03 11:42:15 -05:00
.env.example chore: rename Hearthfire → Ithas Fire (code + copy + mobile bundle IDs) 2026-06-03 15:28:46 -05:00
.gitattributes ci: drop apps/web/public/ from LFS — runner auth fails on object GETs 2026-05-02 23:08:52 -05:00
.gitignore chore: land accumulated local backlog 2026-07-29 01:11:05 -05:00
.gitleaks.toml chore(security): add gitleaks secret scanning (config, pre-commit hook, CI) 2026-07-07 16:42:57 -05:00
.mcp.json chore(mcp): run chrome-devtools MCP with --isolated 2026-06-24 18:46:41 -06:00
.npmrc chore: update docs, CI, configs, lockfile, and remaining UI components 2026-02-09 16:32:13 -06:00
AGENTS.md chore: rename Hearthfire → Ithas Fire (code + copy + mobile bundle IDs) 2026-06-03 15:28:46 -05:00
CHANGELOG.md chore: rename Hearthfire → Ithas Fire (code + copy + mobile bundle IDs) 2026-06-03 15:28:46 -05:00
CLAUDE.md docs(ops): Stripe webhook audit, and record that pnpm typecheck skips apps/ 2026-08-07 15:34:50 -05:00
CONTRIBUTING.md chore: rename Hearthfire → Ithas Fire (code + copy + mobile bundle IDs) 2026-06-03 15:28:46 -05:00
LICENSE chore: rename Hearthfire → Ithas Fire (code + copy + mobile bundle IDs) 2026-06-03 15:28:46 -05:00
package.json feat(fees): define the platform fee in code; let free events publish 2026-08-13 09:17:52 -05:00
pnpm-lock.yaml feat(venue): wire the hierarchy live — prisma adapters, tz lookup, uploader columns 2026-08-18 23:55:28 -05:00
pnpm-workspace.yaml feat(ui-native): extract the RN design system into @th/ui-native 2026-07-30 14:02:08 -05:00
prisma.config.ts style: bump prettier to 3.8.3 and reflow the repo 2026-05-14 15:32:19 -05:00
README.md chore(events): remove hot-events trending pipeline (calm-honest-ux) 2026-07-05 22:31:27 -05:00
tsconfig.all.json chore: update docs, CI, configs, lockfile, and remaining UI components 2026-02-09 16:32:13 -06:00
tsconfig.base.json feat(errors): shared @th/errors contract + tRPC data.appCode boundary 2026-06-23 12:51:40 -06:00
tsconfig.json fix: add retryLabel and loadingLabel props to avoid hardcoded English 2026-04-23 16:17:36 -05:00
turbo.json feat(web): inject the Cloudflare beacon ourselves, and fix the cookie table on phones 2026-08-11 15:49:23 -05:00

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:

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/.env to the repository. Instead copy infra/.env.example to infra/.env and 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.