Files
t5de-hub/apps/web/README.md
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

53 lines
2.3 KiB
Markdown

# T5DE Hub website
The hub's website: accounts, linked IMVU accounts, who's online, signing T5DE in, and the moderation console.
Next.js (App Router), Tailwind CSS and shadcn/ui. Pages are rendered on the server, which calls the hub's API
(`apps/api`) with the visitor's cookie; forms use server actions. The browser only talks to this app: `/api/*` is
rewritten to the API, so the API's session cookies belong to the website's origin.
## Develop
From the repository root, `bun install`, then start the API (`cd apps/api && bun src/index.ts`) and the website:
```sh
cd apps/web
bun run dev # http://localhost:4100
bun run check-types
bun run build
```
The first account created is the hub's admin.
## Configuration
| Variable | Default | What |
| --------- | ----------------------- | -------------------------------------------------------------------------------------- |
| `API_URL` | `http://localhost:4101` | The API's address as this app reaches it. Needed at build time and at run time (below). |
| `PORT` | `4100` | The standalone server's port (`next start` and `bun run dev` use 4100). |
The API's `WEB_URL` must be this website's public address (it's where Better Auth trusts requests from, and where
T5DE's sign-in code page is).
`API_URL` is read in two places: by server code on every request, and by `next.config.ts`'s `/api` rewrite, which
Next fixes when it builds. So build with the same `API_URL` the app will run with.
## Deploy
### Container
The `Dockerfile` builds a standalone server (`output: "standalone"`). Build it from the repository root:
```sh
docker build -f apps/web/Dockerfile --build-arg API_URL=http://api:4101 -t t5de-hub-web .
docker run -p 4100:4100 -e API_URL=http://api:4101 t5de-hub-web
```
Next's own gzip is off (it held back the API's live event stream), so put a reverse proxy that compresses in front,
and don't let it buffer `text/event-stream` responses (`/api/v1/online/events`).
### Vercel
Import the repository with the project's root directory set to `apps/web` (Vercel installs the Bun workspace from the
root). Set `API_URL` to the API's public address for both builds and runtime. Nothing else is needed: there's no
custom server.