- Nuxt 3 CSR (ssr:false), @nuxtjs/tailwindcss, dev proxy to backend - useAuth composable: CSRF cookie, XSRF token, login/logout/fetchUser - auth middleware: redirects to /login if no session - Login page, client list with search + create modal - Client detail with editable name, dynamic notes (JSON), history feed - History form with type select, inline edit/delete per entry - Print layout at /clients/:id/print (calls window.print on mount) - TypeScript interfaces: User, Client, HistoryEntry, PaginatedResponse - German UI labels throughout Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
34 lines
1.3 KiB
Markdown
34 lines
1.3 KiB
Markdown
# Mandant CRM — Monorepo
|
|
|
|
## Layout
|
|
- `backend/` — Laravel 10 API + Filament admin
|
|
- `frontend/` — Nuxt 3 CSR SPA
|
|
- `docker/` — Docker Compose, nginx, PHP Dockerfile
|
|
|
|
## Dev commands (run from repo root)
|
|
```
|
|
make dev # docker compose up -d
|
|
make stop # docker compose down
|
|
make test # composer test inside backend container
|
|
make lint # composer static-analysis inside backend container
|
|
make migrate # php artisan migrate
|
|
make fresh # migrate:fresh --seed
|
|
make shell-php # bash into backend container
|
|
make shell-node # sh into frontend container
|
|
```
|
|
|
|
## Agent scope rules
|
|
- Backend feature → edit only `backend/`
|
|
- Frontend feature → edit only `frontend/`
|
|
- Auth / Docker / infra → root + both apps
|
|
- New module → follow scaffold in `.claude/skills/new-module.md`
|
|
- New history type → follow `.claude/skills/new-history-type.md`
|
|
|
|
## Commit style
|
|
feat/fix/chore/refactor/test/docs — conventional commits
|
|
Examples: `feat(client): add search endpoint`, `fix(history): soft delete cascade`
|
|
|
|
### Telegram Channel Guidelines
|
|
- Before calling any write_file, edit_file, or bash tools that trigger system permission prompts, you MUST send a Telegram text message summarizing exactly what you are about to modify and why.
|
|
- Never trigger a tool call blindly without explaining the context to the user first.
|
|
|