Puls → Dashboard umbenennen + Projekt-Beschreibung
UI/Routing - Tab + Route: /puls → /dashboard, Heading „Unternehmens-Puls" → „Dashboard" - Shortcut: g p → g d (Cheatsheet entsprechend) - Breadcrumbs, 404-Hinweistext, alle internen Links angepasst Code-Layout - apps/web/src/routes/puls.tsx → dashboard.tsx (Komponente DashboardRoute) - apps/api/src/routers/puls.ts → dashboard.ts (dashboardRouter) - tRPC-Aufrufe: trpc.puls.* / utils.puls.* → trpc.dashboard.* / utils.dashboard.* - Auth-Redirects (/api/auth/login, /callback, dev-login) zeigen jetzt auf /dashboard Projekt-Beschreibung - Migration 0007_project_description: project.description text (nullable) - Shared Zod: ProjectSchemas.createProjectInput.description (max 2000, optional) - Backend: project.create mappt input.description - Frontend Dialog „Neues Projekt": Textarea (3 Zeilen, optional) - Projekt-Detail: zeigt Beschreibung als whitespace-pre-wrap unter Subtitle README - Routen-Tabelle, Shortcut-Liste, Verzeichnis-Baum, DB-Tabellen, Migration-Range, Frontend-Routenliste aktualisiert Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
4879556905
commit
c8fc024ca0
21 files changed
+2025
-39
No files matched your search
@@ -10,7 +10,7 @@ Internes Web-Tool von **ToolCTRL** für den täglichen Überblick über alle Pro
|
||||
|
||||
| Bereich | Feature |
|
||||
|---|---|
|
||||
| **Puls** (`/puls`) | Unternehmens-Übersicht: Bereichs-Ampelstatus, „Heute fehlt"-Liste, bereichsübergreifende Blocker, Pflicht-Minimum-Übersicht, Jourfixe-Hinweis, „Heute im Team" (ToDos), „Zeit im Team heute" (Live-Tracking), Vortags-Feed |
|
||||
| **Dashboard** (`/dashboard`) | Unternehmens-Übersicht: Bereichs-Ampelstatus, „Heute fehlt"-Liste, bereichsübergreifende Blocker, Pflicht-Minimum-Übersicht, Jourfixe-Hinweis, „Heute im Team" (ToDos), „Zeit im Team heute" (Live-Tracking), Vortags-Feed |
|
||||
| **Bereich** (`/bereich`, `/bereich/<slug>`) | Tab-Switcher über Entwicklung / Vertrieb / Marketing — pro Bereich Projekt-Liste (Kundenprojekte / Interne Projekte) mit Pflicht-Minimum-Indicator |
|
||||
| **Projekt** (`/projekt/:id`) | Detail: Verlinkungen (Outline-Steckbrief, Plane-Board, Risikoliste), Pflicht-Minimum-Status, Meilenstein-Checkliste, DoD, Projekt-Abschluss (P1) |
|
||||
| **Heute** (`/heute`) | Tagesrhythmus: Lock-in mit ToDo-Liste, Auto-Carryover offener ToDos vom Vortag, ToDo-Editor, Zeiterfassungs-Timeline mit Edit/Delete/Nachtrag |
|
||||
@@ -19,11 +19,11 @@ Internes Web-Tool von **ToolCTRL** für den täglichen Überblick über alle Pro
|
||||
|
||||
**Querschnittsfunktionen**
|
||||
|
||||
- **Zeiterfassung**: Persistente Timer-Pill in der TopNav (Live-Sekundenzähler), Quick-Picker mit ToDos + Kategorien + Freitext, retroaktiver Nachtrag-Dialog, Bindung an ToDo optional. Personenübergreifend sichtbar auf dem Puls.
|
||||
- **Zeiterfassung**: Persistente Timer-Pill in der TopNav (Live-Sekundenzähler), Quick-Picker mit ToDos + Kategorien + Freitext, retroaktiver Nachtrag-Dialog, Bindung an ToDo optional. Personenübergreifend sichtbar im Dashboard.
|
||||
- **Blocker**: Inline in der Reflexion oder über `n`-Shortcut bzw. den globalen „Neuer Blocker"-Dialog. Auflösung nur durch den Projekt-P1.
|
||||
- **Pflicht-Minimum-Check** (Leitfaden §9): 6-Punkte-Checkliste pro Projekt, einer davon (Status-Ampel aktuell) wird stündlich per Cron aus den Reflexions-Zeitstempeln aktualisiert.
|
||||
- **Streak**: aufeinanderfolgende Werktage mit voller Reflexion. Flammen-Pill rechts oben.
|
||||
- **Keyboard-Shortcuts**: `g p/b/h/a` Navigation, `g e/v/m` direkt in Entwicklung/Vertrieb/Marketing, `n` Neuer Blocker, `?` Cheatsheet.
|
||||
- **Keyboard-Shortcuts**: `g d/b/h/a` Navigation, `g e/v/m` direkt in Entwicklung/Vertrieb/Marketing, `n` Neuer Blocker, `?` Cheatsheet.
|
||||
|
||||
---
|
||||
|
||||
@@ -67,7 +67,7 @@ Internes Web-Tool von **ToolCTRL** für den täglichen Überblick über alle Pro
|
||||
│ │ │ ├── hooks/ useCurrentUser
|
||||
│ │ │ ├── lib/ router, trpc, trpc-provider, voice,
|
||||
│ │ │ │ format-duration, time-categories
|
||||
│ │ │ ├── routes/ puls, bereich, projekt, heute, reflexion,
|
||||
│ │ │ ├── routes/ dashboard, bereich, projekt, heute, reflexion,
|
||||
│ │ │ │ archiv, login, not-found
|
||||
│ │ │ └── styles/globals.css
|
||||
│ │ ├── index.html
|
||||
@@ -80,7 +80,7 @@ Internes Web-Tool von **ToolCTRL** für den täglichen Überblick über alle Pro
|
||||
│ ├── cron/routes.ts /internal/cron/* (Bearer-Token geschützt)
|
||||
│ ├── lib/ werktag (Mo-Fr Berlin), ampel, pflicht-minimum, logger
|
||||
│ ├── routers/ _app, user, area, project, deal, gtm,
|
||||
│ │ campaign, blocker, day-entry, time, puls
|
||||
│ │ campaign, blocker, day-entry, time, dashboard
|
||||
│ ├── env.ts Zod-validierte Env-Vars
|
||||
│ ├── db.ts Singleton-Drizzle-Client
|
||||
│ ├── trpc.ts Context, protectedProcedure, withAudit
|
||||
@@ -89,7 +89,7 @@ Internes Web-Tool von **ToolCTRL** für den täglichen Überblick über alle Pro
|
||||
├── packages/
|
||||
│ ├── db/ Drizzle-Schema + Migrationen
|
||||
│ │ ├── src/{schema,client,seed,index}.ts
|
||||
│ │ ├── migrations/ 0000_init … 0006_time_entry
|
||||
│ │ ├── migrations/ 0000_init … 0007_project_description
|
||||
│ │ └── drizzle.config.ts
|
||||
│ └── shared/ Zod-Schemas + Konstanten + Types
|
||||
│ └── src/schemas/ day-entry, project, deal, campaign, time-entry
|
||||
@@ -169,7 +169,7 @@ pnpm --filter @cockpit/db migrate:generate --name=<name> # neue Migration
|
||||
|
||||
Postgres 16, Drizzle als ORM und Migrator. **Schema-Single-Source-of-Truth**: `packages/db/src/schema.ts`.
|
||||
|
||||
### Tabellen (aktueller Stand nach Migration 0006)
|
||||
### Tabellen (aktueller Stand nach Migration 0007)
|
||||
|
||||
| Tabelle | Zweck |
|
||||
|---|---|
|
||||
@@ -177,7 +177,7 @@ Postgres 16, Drizzle als ORM und Migrator. **Schema-Single-Source-of-Truth**: `p
|
||||
| `session` | Server-Side Sessions (Postgres-persistent), Browser kennt nur Cookie-`id` |
|
||||
| `audit_event` | Audit-Trail für jede mutierende Operation |
|
||||
| `area` | Bereich (entwicklung / vertrieb / marketing / allgemein) |
|
||||
| `project` | Projekt mit Cockpit-Sicht-Feldern (Outline-/Plane-URLs, Pflicht-Minimum-State JSONB, etc.) |
|
||||
| `project` | Projekt: Name, optionale `description`, Outline-/Plane-URLs, Arbeitsmodus (cycle/kanban), `pflicht_minimum_state` JSONB, Status-/Trend-Cache, Archiv-Felder |
|
||||
| `milestone` | Cockpit-Sicht-Meilenstein pro Projekt |
|
||||
| `day_entry` | Tageseintrag (begun / full / absent), `published_at` für Vortrags-Veröffentlichung |
|
||||
| `todo` | Tagesplan-Item, optional an Bezug gebunden, `carried_over`-Flag |
|
||||
@@ -221,7 +221,7 @@ dayEntry today, todayTeam, pendingCarryOver, checkIn,
|
||||
updateTodos, submitReflection, feed, todayPresence
|
||||
time now, start, stop, listToday, update, upsertManual,
|
||||
delete, teamToday
|
||||
puls overview
|
||||
dashboard overview
|
||||
```
|
||||
|
||||
Frontend importiert den Typ via `import type { AppRouter } from '@cockpit/api/router'` (siehe `apps/web/src/lib/trpc.ts`).
|
||||
@@ -259,7 +259,7 @@ Im `NODE_ENV=development` ist `/api/auth/dev-login` aktiv. Die Frontend-Login-Ro
|
||||
|
||||
- Sucht den User mit `email = 'dejan@tool-ctrl.de'`.
|
||||
- Existiert er nicht, wird er via `upsertUserFromOidc` mit `sub='local-dejan'` angelegt.
|
||||
- Session wird gesetzt, Redirect auf `/puls`.
|
||||
- Session wird gesetzt, Redirect auf `/dashboard`.
|
||||
|
||||
In Production ist diese Route nicht registriert, weil die `if (env.NODE_ENV === 'development')`-Guard in `apps/api/src/auth/routes.ts` dann false ist.
|
||||
|
||||
@@ -299,7 +299,7 @@ Login-Route ist außerhalb der `AppShell` (`/login`). Alle übrigen Routen unter
|
||||
In `apps/web/src/components/layout/AppShell.tsx`:
|
||||
|
||||
```
|
||||
g p Puls
|
||||
g d Dashboard
|
||||
g b Bereich (Default Entwicklung)
|
||||
g e Entwicklung
|
||||
g v Vertrieb
|
||||
|
||||
Reference in new issue
Block a user