Commit Graph
20 Commits
Author SHA1 Message Date
dhkatzandClaude Opus 5.5 d57674d90c Products: images need https addresses; lowering a rating waits for review; library shows creators
CI / test (push) Successful in 50s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 19:14:12 -07:00
dhkatzandClaude Opus 5.5 51d5bb5ff3 Website: products, library, catalogs and their console page
/products (search), product pages with revisions, getting and staying on a
revision, retracting; /products/:id/edit; /create and new revisions upload
from the browser straight to the catalog with a token from the hub;
/library; /catalogs (directory, registering with a once-shown key);
/console/catalogs to approve or reject. Every page now sends a nonce-based
CSP (proxy.ts), so product descriptions can't run scripts.

buttonVariants now merges classes, so outline links get their border.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 19:06:08 -07:00
dhkatzandClaude Opus 5.5 b4f6fce9df Product registry: catalogs, revisions, product info and libraries
CI / test (push) Successful in 43s
The hub registers catalogs (hidden until a moderator approves them), hands out upload tokens, and records the
revisions catalogs register after validating uploads: numbered, never changed, signed by the hub (its own
Ed25519 key, published at /.well-known/t5de-keys.json). Creators edit product info (descriptions cleaned by an
allowlist) and can retract revisions. People get products into their library, optionally staying on a
revision; the proxy asks which revision to load and where. Contract in docs/products.md.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 18:53:52 -07:00
dhkatzandClaude Opus 5.5 7fea63fc4f Design: everywhere the T5 badge appears
CI / test (push) Successful in 37s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 18:41:43 -07:00
dhkatzandClaude Opus 5.5 143aeb3d84 Design: T5 products in the client's shop and inventory
CI / test (push) Successful in 40s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 18:38:23 -07:00
dhkatzandClaude Opus 5.5 6ba4d83317 Room channel and rooms list
CI / test (push) Successful in 6m38s
The realtime connection now carries the IMVU chats a client is in: the hub tells each proxy in a chat which
other T5DE users are there and what community products they wear (adult products only to adult accounts), on
joining and on every change. Rooms T5DE users enter are looked up on IMVU; those that are public, listed and
whose owner turned on "List my public rooms" appear on the new Rooms page, with the T5DE users in them who
show they're online. AP rooms are shown to adults only.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 18:14:43 -07:00
dhkatzandClaude Opus 5.5 7db9fc0370 Vendor-neutral age verification, with IMVU as the first provider
CI / test (push) Successful in 35s
Age checks are recorded in one table (age_check) by provider, method and result, never with documents or
birth dates; one rule decides whether an IMVU account counts as adult (its person's check, or its own).
Providers implement a small interface (start, webhook or browser completion, re-check) and are chosen by
configuration, so phone wallets and Didit can be added, or swapped, as adapters. IMVU's answer per account
is re-checked when it expires (about daily). Existing links' results move into the new table.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 05:44:36 -07:00
dhkatzandClaude Opus 5.5 339ba8e2d6 Presence: count an account as soon as it's linked; accept an empty outfit
CI / test (push) Successful in 36s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 05:07:28 -07:00
dhkatzandClaude Opus 5.5 7a06ba49c3 Rebuild the hub on Bun: Elysia API, Better Auth, Drizzle, Next.js website
CI / test (push) Successful in 30s
The hub becomes a Bun monorepo: apps/api (Elysia, Better Auth for accounts, roles, bans, proxy device
sign-in and JWT keys; tagline linking, presence and the console as before), packages/db (Drizzle; Postgres in
production, PGlite in development and tests), and the Next.js website from apps/web. Self-hostable with
docker compose; the website deploys to Vercel-style hosts, the API to any that runs Bun or containers. The
first version, in Go, is removed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 05:03:54 -07:00
dhkatzandClaude Opus 5.5 64c552330b Website: Next.js app for accounts, linking, who's online, device sign-in and the console
apps/web: Next.js 16 (App Router), Tailwind 4 and shadcn/ui, light and dark from the system. Pages render on the
server and call the API with Eden Treaty (typed by @t5de/api), forwarding the visitor's cookie; forms use server
actions; sign-up, sign-in and sign-out use Better Auth's React client. /api is rewritten to the API so its cookies
are first-party. Who's online follows the API's event stream (Next's gzip is off: it held the stream back).
Standalone output with a Dockerfile; deploys to Vercel as is.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 05:02:00 -07:00
dhkatzandClaude Opus 5.5 7afada1c63 CI: test against a Postgres service (embedded Postgres won't run as root)
CI / test (push) Successful in 1m5s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 03:48:32 -07:00
dhkatzandClaude Opus 5.5 b9dc3f0ec1 Hub: accounts, IMVU linking by tagline, proxy sign-in, presence, console
CI / test (push) Failing after 42s
People sign up on the website and link IMVU accounts by putting a code in the account's tagline, which the
hub reads from IMVU's public API (the most recent proof wins; link caps per person). IMVU's age verification
or Access Pass make an account adult. T5DE's proxy signs in with a device code and keeps a WebSocket open,
reporting the IMVU account in use and the community products it wears; /online shows those who opted in.
Moderators get a console: who's online, people, link caps, bans, roles, and the audit log. Tests run the
website and API against an embedded Postgres and a fake IMVU API.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 03:45:52 -07:00
dhkatzandClaude Opus 5.5 54e569bea3 Latest revision by default; pins are opt-in per product, for what one wears
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:34:47 -07:00
dhkatzandClaude Opus 5.5 5db4939799 Product revisions with a public history
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:33:16 -07:00
dhkatzandClaude Opus 5.5 e923577c5a Editable product info, with HTML descriptions made safe
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:31:45 -07:00
dhkatzandClaude Opus 5.5 a229f8c5d0 Room list, occupancy, scenes and other sessions
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:20:20 -07:00
dhkatzandClaude Opus 5.5 0a4268bb62 Anyone can see catalogs' products; wearing needs membership
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:15:17 -07:00
dhkatzandClaude Opus 5.5 355002ec79 What a room needs from the server, for hosted rooms
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:10:42 -07:00
dhkatzandClaude Opus 5.5 4e0fca0825 Decide age, catalog access, takedown contacts, chat retention and server rendering
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:06:59 -07:00
dhkatzandClaude Opus 5.5 4564aa53cc Design draft for the hub, catalogs and community products
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 02:01:08 -07:00