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
139 lines
5.2 KiB
Markdown
139 lines
5.2 KiB
Markdown
# 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*
|