No description
  • TypeScript 97%
  • JavaScript 1%
  • HCL 1%
  • Shell 0.5%
  • CSS 0.4%
Find a file
AI Satan 69fc0fb422 docs(specs): 2026-08-04 scoping batch — six backlog items specced
- ticket-type-packs: platform pack layer over the SHIPPED TicketTypeTemplate
  feature (reality check: templates+apply dialogs exist since 2026-07-23);
  sales windows phased behind real on-sale columns.
- volunteer-management-unification: shared tab shell + component extraction
  list; askRoles.delete deliberately NOT event-cascade (ROLE_IN_USE);
  occurrences Schedule tab over the eff42e71 endpoints.
- admin-search-parity: switch the admin spotlight to the org-truthful
  adminOrgSearch backend (drafts are unindexable in Meili; three of four
  admin pills aren't org-scoped today); facet set committed.
- embed-unified-views: one Embed row already serves grid+calendar — add
  defaultView + viewToggle with zero backfill; embedId contracts frozen;
  booking embed stays separate.
- booking-inbox-placement: config stays in settings; received-request inbox
  joins the existing Bookings nav destination; countOpen endpoint specced
  for the rail badge; role-visibility widening flagged as open question.
- scan-ticket-redesign: current-state inventory (offline resolve dead-end,
  zero-confirmation legacy web path, silent queue drops, feedback collapse);
  scanner design-system FR is residue-completion, not migration.
- scanner-distribution-decision: memo — ship email→web-scan now, run
  TestFlight/Play Internal in parallel; user-decision list enumerated.
  (Found the invite-404 bug fixed in 4e73f248.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 23:58:09 -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 chore(security): add gitleaks secret scanning (config, pre-commit hook, CI) 2026-07-07 16:42:57 -05:00
.github fix(idempotency,ci): reclaim expired idempotency rows; stop the web gate silently dropping its flags 2026-07-31 01:14:39 -05:00
.vscode chore(security): stop tracking .vscode/tasks.json (contained live creds) 2026-07-07 17:14:05 -05:00
apps fix(orgs): emailed invites 404'd — the accept URL pointed at a route that never existed 2026-08-04 23:52:40 -05:00
docs docs(specs): 2026-08-04 scoping batch — six backlog items specced 2026-08-04 23:58:09 -05:00
infra fix(auth): make the deployed-dev session cookie cross-subdomain 2026-07-31 13:31:07 -05:00
packages fix(orgs): emailed invites 404'd — the accept URL pointed at a route that never existed 2026-08-04 23:52:40 -05:00
scripts feat(web): drop session replay, go bannerless, add cookieless analytics 2026-07-30 17:32:27 -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 chore: land working tree — host-only session cookie, fee waivers, resource-burn tracking 2026-07-30 23:21:49 -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(ui-native): extract the RN design system into @th/ui-native 2026-07-30 14:02:08 -05:00
pnpm-lock.yaml chore: land working tree — host-only session cookie, fee waivers, resource-burn tracking 2026-07-30 23:21:49 -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): drop session replay, go bannerless, add cookieless analytics 2026-07-30 17:32:27 -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 youre 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/corepackages-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.