# 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*