Hartmut
dd2c9c0f88
perf(api,web,db): refactor and optimize for enterprise readiness
...
- Add missing @@index([userId]) on Account and Session models (auth query perf)
- Batch holiday-auto-import to eliminate N+1 query pattern (O(n) → O(1))
- Reduce SessionProvider refetchInterval from 5min to 15min
- Fix Cache-Control catch-all to stop blocking static asset caching
- Decompose assistant-tools.ts (2,562 → 809 lines) into callers, helpers, access-control modules
- Add @next/bundle-analyzer for data-driven bundle optimization
- Add @react-pdf/renderer to optimizePackageImports
- Add safety caps (take limits) on unbounded findMany queries
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-11 22:34:41 +02:00
Hartmut
0d79f97d7a
fix(types): remove unnecessary as any casts in web components
...
- ProjectHealthWidget: row already typed as ProjectHealthRow with id field
- ResourceDetail: use narrowed unknown cast instead of any for error code
- provider.tsx: same pattern for TRPCClientError data access
- ChatPanel: use intersection type for Next.js typed route push
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-10 15:13:06 +02:00
Hartmut
485e220c49
fix(api,web): env startup validation, QueryClient defaults, warn on missing REDIS_URL
...
- Throw at startup in production if REDIS_URL/DATABASE_URL/NEXTAUTH_SECRET missing
- Warn in development when REDIS_URL falls back to localhost
- QueryClient: add gcTime, disable refetchOnWindowFocus, skip retry on 4xx
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 16:42:34 +02:00
Hartmut
bf8577dbaf
feat(auth): proactive session expiry redirect across all delivery paths
...
- Split auth config into auth.config.ts (edge-safe, no argon2) and auth-edge.ts
for middleware use; auth.ts now spreads the shared config
- Middleware wraps with auth() to redirect unauthenticated requests to /auth/signin
before any page render; passes through /auth/, /api/, /invite/ paths
- SessionGuard client component watches useSession() and redirects on
status=unauthenticated, closing the SPA navigation gap
- QueryCache + MutationCache in TRPCProvider redirect on UNAUTHORIZED tRPC errors
without retrying; SessionProvider polls session state every 5 minutes
- Middleware tests updated for async auth wrapper and auth-edge mock
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-04-03 10:42:10 +02:00
Hartmut
5ffc0d92e4
perf: lazy-load xlsx/recharts, split estimate tabs, memoize nav
...
- xlsx dynamically imported via cached singleton in excel.ts and
skillMatrixParser.ts (removes ~100 kB from 4 routes)
- recharts extracted into lazy-loaded SkillDistributionChart and
PeakTimesChart components (removes ~60 kB from 3 routes)
- EstimateWorkspaceClient: 7 tab components + 2 editors loaded via
next/dynamic (reduces /estimates/[id] from 323 kB to 138 kB)
- ImportModal lazy-loaded in ResourcesClient (deferred until open)
- NavItem memoized with React.memo, top 5 routes get prefetch=true
- Raw <img> replaced with next/image in ProjectsClient, CoverArtSection
- tRPC QueryClient: refetchOnWindowFocus/Reconnect disabled globally
Heaviest routes reduced 39-66% First Load JS:
/analytics/skills: 383→132 kB (-66%)
/estimates/[id]: 323→138 kB (-57%)
/resources/[id]: 458→210 kB (-54%)
/estimates: 310→170 kB (-45%)
/resources: 363→222 kB (-39%)
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-19 01:23:33 +01:00
Hartmut
ddec3a927a
feat: timeline multi-select, demand popover, resource hover card, merged tooltips, dark mode fixes
...
Major timeline enhancements:
- Right-click drag multi-selection with floating action bar (batch delete/assign)
- DemandPopover for demand strip details (replaces broken "Loading" modal)
- ResourceHoverCard on name hover showing skills, rates, role, chapter
- Merged heatmap+vacation tooltips into unified TimelineTooltip component
- Fixed overbooking blink animation (date normalization, z-index ordering)
- Fixed dark mode sticky column bleed-through in project view
- System roles admin page, notification task management, performance review docs
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-18 23:43:51 +01:00
Hartmut
625a842d89
feat: dashboard overhaul, chargeability reports, dispo import enhancements, UI polish
...
Dashboard: expanded chargeability widget, resource/project table widgets
with sorting and filters, stat cards with formatMoney integration.
Chargeability: new report client with filtering, chargeability-bookings
use case, updated dashboard overview logic.
Dispo import: TBD project handling, parse-dispo-matrix improvements,
stage-dispo-projects resource value scores, new tests.
Estimates: CommercialTermsEditor component, commercial-terms engine
module, expanded estimate schemas and types.
UI: AppShell navigation updates, timeline filter/toolbar enhancements,
role management improvements, signin page redesign, Tailwind/globals
polish, SystemSettings SMTP section, anonymization support.
Tests: new router tests (anonymization, chargeability, effort-rule,
entitlement, estimate, experience-multiplier, notification, resource,
staffing, vacation).
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-14 23:29:07 +01:00
Hartmut
dd55d0e78b
chore(repo): initialize planarchy workspace
2026-03-14 14:31:09 +01:00