Puls → Dashboard umbenennen + Projekt-Beschreibung
ci / quality (push) Has been cancelled
ci / build (push) Has been cancelled

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:
dejanandClaude Opus 4.7 committed 2026-06-02 17:51:08 +02:00
1 parent 4879556905
commit c8fc024ca0
21 files changed
+2025 -39

No files matched your search

+2 -2
View File
@@ -3,7 +3,7 @@
import { router, publicProcedure } from '../trpc.js';
import { dayEntryRouter } from './day-entry.js';
import { userRouter } from './user.js';
import { pulsRouter } from './puls.js';
import { dashboardRouter } from './dashboard.js';
import { projectRouter } from './project.js';
import { dealRouter, gtmRouter } from './deal.js';
import { campaignRouter } from './campaign.js';
@@ -25,7 +25,7 @@ export const appRouter = router({
blocker: blockerRouter,
dayEntry: dayEntryRouter,
time: timeRouter,
puls: pulsRouter,
dashboard: dashboardRouter,
});
export type AppRouter = typeof appRouter;
@@ -4,7 +4,7 @@ import { router, protectedProcedure } from '../trpc.js';
import { todayIso, previousWerktag } from '../lib/werktag.js';
import { aggregateAreaAmpel } from '../lib/ampel.js';
export const pulsRouter = router({
export const dashboardRouter = router({
overview: protectedProcedure.query(async ({ ctx }) => {
const todayDate = todayIso();
const [areas, allProjects, openBlockers, todayPresence, totalActiveUsers, feedRows] =
+1 -1
View File
@@ -297,7 +297,7 @@ export const dayEntryRouter = router({
/**
* Konsolidierter Vortrags-Feed: alle bereits publizierten Einträge.
* Nutzbar in Story 3.4 (Puls-Feed).
* Nutzbar in Story 3.4 (Dashboard-Feed).
*/
feed: protectedProcedure.query(async ({ ctx }) => {
const entries = await ctx.db
+1
View File
@@ -64,6 +64,7 @@ export const projectRouter = router({
.values({
areaId: input.areaId,
name: input.name,
description: input.description ?? null,
kind: input.kind,
verantwortlicheUserId: input.verantwortlicheUserId ?? null,
arbeitsmodus: input.arbeitsmodus ?? null,