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]>
2.5 KiB
2.5 KiB
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 [email protected]"; 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.Zpull 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), thenbun x drizzle-kit generatein packages/db. - Device sign-in: the person's viewing a code (
deviceVerify) claims it, thendeviceApprove; the hub's/api/v1/device/approvedoes 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\bunand...\nodejs(not on PATH; nobunx: usebun 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).