Files
dashfront/README.md
2026-09-22 07:20:31 +02:00

68 lines
2.4 KiB
Markdown

# Dashfront
Vite + React web client for Dashback. Auth uses Google Sign-In and a
cookie session on the Dashback API.
## Stack
- Vite 8 (`type: module`)
- React 19 (function components only)
- MUI 9 (`@mui/material`, `@mui/icons-material`, Emotion)
- notistack (toast notifications)
- Google Identity Services + Dashback cookie auth
## Getting started
```bash
npm install
npm run dev
```
Open `http://localhost:4209`. The dev server proxies `/api` to Dashback at
`http://localhost:4208` and uses Vite HMR for fast reloads.
To test the full PWA precache (production build + preview, no HMR), use
`npm run dev:pwa` instead.
For production deployment with NGINX, see [NGINX.md](file:///home/seb/src/dashfront/NGINX.md).
Dashback must be running and your Google account must be authorized on the
backend.
## Shared GUI library (`dashgui`)
Reusable custom GUI class components live in the **`dashgui`** package
(`../dashgui`), installed here as a `file:` dependency (npm workspace symlink)
so source imports are reflected instantly.
- `dashgui/panels` — `PanelTile`, `PanelTileGrid`, `EditablePanelTile`, layout helpers
- `dashgui/lists` — `RecordList`, the generic presentational list used by the
Lieferungen / Angebote / Bestellungen / Kunden list pages
- `dashgui/tiles` — base `Tile` (extended by `src/components/tiles/*`)
- `dashgui/SingleLineTextEdit`, `dashgui/ElevatedPill`
See `../dashgui/README.md` for details and the dev/mock-page harness used for
future test cases.
## Auth flow
1. On boot the app calls `GET /api/auth/me` with `credentials: 'include'`.
- **200** — `{ user, googleClientId }` (valid session)
- **401 / 403** — `{ error, googleClientId }` (no session or no longer authorized)
2. The login page uses `googleClientId` from that response to obtain a Google ID
token and posts it to `POST /api/auth/login` as `{ idToken }`.
3. Dashback sets an HTTP-only `token` cookie; all later API calls send it
automatically.
4. Sign out calls `POST /api/auth/logout`.
The Vite dev proxy (`/api` → Dashback) satisfies the same-origin cookie
requirement without needing HTTPS on the frontend dev server.
## Architecture
- `src/api/index.js` — all backend communication (`credentials: 'include'`).
- `src/auth/googleSignIn.js` — Google Identity Services helper.
- `src/auth/AuthProvider.jsx` — session state + login/logout.
- `src/auth/useAuth.js` — auth context hook.
- `src/components/*` — small function components with local state.