84 lines
3.1 KiB
Markdown
84 lines
3.1 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project overview
|
|
|
|
`stream-ui` is a Vue 3 SSR frontend deployed on Cloudflare Workers. It uses Hono as the Worker server layer and a custom Vite SSR setup rather than Nuxt.
|
|
|
|
## Common commands
|
|
|
|
Run all commands from `stream-ui/`.
|
|
|
|
```bash
|
|
# Install dependencies
|
|
bun install
|
|
|
|
# Start local dev server
|
|
bun run dev
|
|
|
|
# Build client + worker bundles
|
|
bun run build
|
|
|
|
# Preview production build locally
|
|
bun run preview
|
|
|
|
# Deploy to Cloudflare Workers
|
|
bun run deploy
|
|
|
|
# Regenerate Cloudflare binding types from Wrangler config
|
|
bun run cf-typegen
|
|
|
|
# Tail Cloudflare Worker logs
|
|
bun run tail
|
|
```
|
|
|
|
Notes:
|
|
- This project uses Bun (`bun.lock` is present).
|
|
- There is currently no configured `test` script.
|
|
- There is currently no configured `lint` script.
|
|
|
|
## Architecture
|
|
|
|
### SSR entrypoints
|
|
- `src/index.tsx`: Hono Worker entry; registers middleware, proxy routes, merge/display/manifest routes, then SSR routes
|
|
- `src/main.ts`: shared app factory for SSR and client hydration
|
|
- `src/client.ts`: client-side hydration entry
|
|
- `ssrPlugin.ts`: custom Vite SSR plugin that builds the client first, injects the Vite manifest, and swaps environment-specific modules
|
|
|
|
### Routing and app structure
|
|
- Routes live in `src/routes/index.ts`.
|
|
- Routing is SSR-aware: `createMemoryHistory()` on the server and `createWebHistory()` in the browser.
|
|
- The app is split into:
|
|
- public pages
|
|
- auth pages
|
|
- protected dashboard/settings pages
|
|
- Current protected areas include `videos`, `notification`, and `settings/*` routes.
|
|
|
|
### State and hydration
|
|
- Pinia is used for app state.
|
|
- `@pinia/colada` is used for server-state/query hydration.
|
|
- SSR serializes Pinia state into `$p` and query cache into `$colada`; `src/client.ts` restores both during hydration.
|
|
- `src/stores/auth.ts` owns session state and route guards depend on `auth.user`.
|
|
|
|
### API integration
|
|
- `src/api/client.ts` is generated by `swagger-typescript-api`; do not hand-edit generated sections.
|
|
- API access should go through the generated client and `@httpClientAdapter`, not raw `fetch`.
|
|
- `src/api/httpClientAdapter.server.ts` handles SSR-side API calls by forwarding request headers/cookies and proxying frontend `/r/*` requests to `https://api.pipic.fun`.
|
|
- `src/api/httpClientAdapter.client.ts` is the browser-side adapter.
|
|
|
|
### Notable flows
|
|
- `src/stores/auth.ts` initializes the logged-in user from `/me` and opens an MQTT connection after login.
|
|
- `src/composables/useUploadQueue.ts` implements the custom upload queue:
|
|
- 90MB chunks
|
|
- max 3 parallel uploads
|
|
- max 3 retries
|
|
- max 5 queued items
|
|
- Styling uses UnoCSS (`uno.config.ts`).
|
|
|
|
## Important notes
|
|
|
|
- Prefer the actual current code over older documentation when they conflict.
|
|
- The previous version of this file contained stale route and dependency details; verify against `src/routes/index.ts` and `package.json` before assuming old pages or libraries still exist.
|
|
- Any frontend change that affects API contracts should be checked against the backend repo (`../stream.api`) as well.
|