Files
t5de-hub/CLAUDE.md
T
dhkatzandClaude Opus 5.5 fe3882695d
Pull request / title (pull_request) Successful in 1s
CI / test (pull_request) Successful in 59s
CI / image (apps/api/Dockerfile, t5de-hub-api) (pull_request) Skipped
CI / image (apps/web/Dockerfile, t5de-hub-web) (pull_request) Skipped
ci: release pull requests, and conventional-commit PR titles
Pull requests only, squash-merged, titled as conventional commits (checked); release-bot keeps a
chore(release) pull request open, worked out by git-cliff, and merging it tags the release.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 08:37:16 +00:00

38 lines
2.5 KiB
Markdown

# t5de-hub
T5DE's hub (see README.md and docs/design.md). Related repositories, usually checked out beside this one: `t5de`
(patches), `t5de-proxy` (local proxy, Go; it signs in to the hub), `t5de-api` (shared definitions), later
`t5de-catalog`.
## Rules
- Never commit IMVU's code or captured traffic with account data. Our own declarations of IMVU's protocols and notes
in our own words are fine.
- Test with a throwaway IMVU account, never a real one.
- Commits: author "dhkatz <dev@t5de.dev>"; never the user's real name or email.
- Changes reach main only through pull requests, squash-merged: the PR's title becomes the commit on main, so it must
be a conventional commit (`feat(api): …`, `fix(web): …`, `docs: …`; `!` before the colon for a breaking change),
checked by `.gitea/workflows/pull-request.yml`. Commits on the branch can be anything. Push a branch and open the
pull request on git.t5de.dev (web UI or API); the user merges.
- Releases: release-bot keeps a `chore(release): vX.Y.Z` pull request open (`release.yml`, git-cliff from those
titles); merging it tags vX.Y.Z, which builds the image and deploys prod. Never tag by hand (v* tags are
release-bot's).
- IMVU session keys never leave the user's machine; the hub never asks for them.
## Notes
- Stack (the user's choice, 2026-10-29): Bun, Elysia, Better Auth, Drizzle (Postgres; PGlite in development and
tests), Next.js 16 with Tailwind 4 and shadcn/ui, Turborepo. Must stay self-hostable (docker compose) and deployable
to Vercel/Heroku-style hosts. Go was used first and replaced.
- The website's look: modern and neutral, light/dark following the system, color only for status. Not IMVU Classic's
style (T5DE's setup keeps that).
- Better Auth's tables must match its plugins: when changing plugins, compare with `getAuthTables` (Better Auth logs
"Drizzle schema mismatch" otherwise), then `bun x drizzle-kit generate` in packages/db.
- Device sign-in: the person's viewing a code (`deviceVerify`) claims it, then `deviceApprove`; the hub's
`/api/v1/device/approve` does both and logs it. Proxies' sessions are told apart by their User-Agent
(`t5de-proxy...`).
- On this VM, Bun and Node are portable installs in `%LOCALAPPDATA%\Programs\bun` and `...\nodejs` (not on PATH; no
`bunx`: use `bun x`).
- Calls to IMVU (`apps/api/src/imvu.ts`, its public API) are rare and rate-limited: linking, age re-checks, rooms,
and the IMVU products T5 products derive from (`parent_info`, looked up once per revision).