wulf-pulse/.planning/codebase/STACK.md
lorentz 9658640c04 fix(04-01): restore phase 2/3 work lost by worktree soft-reset
The soft reset to 77073ba inadvertently staged deletions of all phase 2
and 3 artifacts. This commit restores them from their source commits so
subsequent task commits build on the complete prior-phase foundation:
- components/mobile/{BottomNav,HeaderBar,KpiCardMobile,MoreDrawer,NeedsAttentionStrip,WorkerStatusRow}
- app/mobile/layout.tsx, dashboard/page.tsx, analyzer/page.tsx
- app/api/mobile/dashboard/route.ts
- All .planning/** files from phases 01-04
- CLAUDE.md, app/layout.tsx, app/styles/brand.css, public/manifest.json
2026-05-03 18:01:14 -04:00

5.2 KiB

Technology Stack

Analysis Date: 2026-05-03

Languages

Primary:

  • TypeScript 5 - Entire codebase, strict mode enabled
  • JavaScript/JSX - React components via TypeScript with JSX support

Secondary:

  • SQL - PostgreSQL migrations and queries
  • Bash - Build and deployment scripts

Runtime

Environment:

  • Node.js (version inferred from package.json compatibility)
  • Next.js 16.1.1 running on port 3100

Package Manager:

  • npm (lockfile: package-lock.json)

Frameworks

Core:

  • Next.js 16.1.1 - App Router with output: 'standalone' for Docker, React Compiler enabled
  • React 19.2.3 - Server and client components, React Compiler active
  • Better Auth 1.4.10 - Authentication with magic link, TOTP 2FA, Microsoft OAuth

UI & Styling:

  • Tailwind CSS 4.1.18 - Utility-first styling
  • shadcn/ui (via Radix UI primitives) - Component library: components/ui/
    • @radix-ui packages: accordion, alert-dialog, checkbox, collapsible, dialog, dropdown-menu, label, navigation-menu, popover, progress, scroll-area, select, separator, slot, switch, tabs
  • Recharts 3.7.0 - Charts and graphs (analytics/dashboards)
  • Lucide React 0.562.0 - Icon library
  • Sonner 2.0.7 - Toast notifications
  • cmdk 1.1.1 - Command palette component

Forms & Validation:

  • react-hook-form 7.70.0 - Form state management (admin/auth only)
  • Zod 4.3.5 - Type-safe schema validation
  • @hookform/resolvers 5.2.2 - Form resolver for Zod

Tables & Data:

  • @tanstack/react-table 8.21.3 - Headless table library with sorting, pagination, search
  • react-markdown 10.1.0 - Markdown rendering
  • remark-gfm 4.0.1 - GitHub-flavored markdown support

Utilities:

  • date-fns 4.1.0 - Date manipulation and formatting
  • react-day-picker 9.13.0 - Calendar date picker
  • clsx 2.1.1 - Conditional className utility
  • tailwind-merge 3.4.0 - Merge Tailwind class conflicts
  • class-variance-authority 0.7.1 - CSS-in-JS variant management
  • next-themes 0.4.6 - Dark mode theme switching

Testing & Build

Testing:

  • vitest 4.1.5 - Unit and integration testing runner
  • Run: npm test (run once), npm run test:watch (watch mode)
  • Test coverage for: lib/services/analyzer/**, lib/services/rmm/**, lib/services/b2/**, lib/services/analyzer/link-discovery.test.ts

Build/Dev:

  • Turbopack (via Next.js 16) - Fast bundler for development and production
  • ESLint 9.39.2 - Linting (with eslint-config-next 16.1.1)
  • TypeScript - Type checking via npx tsc --noEmit --pretty

Key Dependencies

Critical:

  • pg 8.11.0 - PostgreSQL client (no ORM); queries via postgresClient singleton
  • ioredis 5.9.0 - Redis client for caching; optional (graceful fallback if REDIS_URL unset)
  • node-cron 4.2.1 - Job scheduler for sync tasks and workflows
  • @anthropic-ai/sdk 0.91.1 - Anthropic Claude API client for AI Ticket Analyzer pipeline

External API Integrations:

  • Better Auth ecosystem packages - OAuth, 2FA, session management
  • nodemailer 7.0.12 - Email delivery for magic link auth

Development:

  • babel-plugin-react-compiler 1.0.0 - React Compiler for optimized renders
  • shadcn 4.6.0 - CLI tool for adding shadcn/ui components
  • baseline-browser-mapping 2.10.8 - Browser compatibility mapping
  • tw-animate-css 1.4.0 - Tailwind animation utilities

Configuration

Environment Variables:

  • BETTER_AUTH_URL - Base URL for auth (e.g., http://localhost:3100 or https://pulse.wulfconsulting.cloud)
  • BETTER_AUTH_SECRET - Secret key for session signing
  • DATABASE_URL or POSTGRES_* - PostgreSQL connection (host, port, db, user, password)
  • REDIS_URL - Redis connection (e.g., redis://localhost:6380 in Docker compose)
  • SESSION_TIMEOUT_SECONDS - Session TTL (default: 86400 / 24 hours)
  • MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET, MICROSOFT_TENANT_ID - Microsoft OAuth for login (tenant is specific, not 'common')
  • DEFAULT_ADMIN_EMAIL - Bootstrap admin account email
  • Integration env vars: prefixed by service (e.g., AUTOTASK_*, DATTO_RMM_*, MSGRAPH_*, etc.) — see INTEGRATIONS.md

TypeScript Config:

  • Path alias: @/* maps to project root for cleaner imports
  • Target: ES2017
  • Strict mode enabled
  • Config: tsconfig.json

Next.js Config:

  • File: next.config.ts
  • Standalone output for Docker deployment
  • React Compiler enabled
  • Image domains: configurable (currently empty)

Build Output:

  • npm run build → Next.js standalone app in .next/
  • npm run start → Starts production server on port 3100

Platform Requirements

Development:

  • Node.js 18+ (inferred from Next.js 16 compatibility)
  • npm 8+
  • PostgreSQL 16 (local or Docker)
  • Redis 7 (optional, enables caching)
  • Docker & Docker Compose (for full stack)

Production:

  • Docker with docker-compose.yml provided
  • Postgres 16 container (applies migrations on init)
  • Redis 7 container on port 6380 (custom, not 6379)
  • Next.js app container on port 3100
  • Traefik integration available (via labels in docker-compose.yml) for routing at pulse.wulfconsulting.cloud

Deployment:

  • Container-based: standalone Next.js image with migrations applied via Postgres init
  • Volume mounts for data persistence: redis_data, postgres_data
  • Environment configuration via .env.local file mounted read-only

Stack analysis: 2026-05-03