No description
Find a file
lorentz 8b5e926bb1 feat(24-03): add Route 53 audit lifecycle and pulse_crud history persistence
- createPendingAuditLog/markAuditCommitted/markAuditFailed implement the pending -> committed/failed lifecycle (D-07, SC-3); markAuditFailed always sanitizes via sanitizeAwsError
- insertPulseCrudHistory writes 'pulse_crud' history rows, documented as callable only after a committed write
- upsertMirrorRecord/softDeleteMirrorRecord/loadMirrorRecord manage the route53_records mirror; mirror writes are best-effort and soft-delete only (D-08), audit/history writes are not best-effort
- log same pre-existing itglue-search.test.ts failures (unrelated, out of scope) in deferred-items.md
2026-08-05 20:22:24 -04:00
.claude/skills/pulse-overshell-b2-evidence chore: check in pending work — queue preferences, QBO AR diagnostics, mobile engagement fixes, ops scripts 2026-07-18 06:34:57 -04:00
.devin/workflows docs: capture exploration — PAX8 integration scope 2026-07-10 11:45:11 -04:00
.firecrawl feat: Mimecast multi-tenant held mail viewer 2026-03-31 22:38:22 -04:00
.planning feat(24-03): add Route 53 audit lifecycle and pulse_crud history persistence 2026-08-05 20:22:24 -04:00
app chore: check in pending work — queue preferences, QBO AR diagnostics, mobile engagement fixes, ops scripts 2026-07-18 06:34:57 -04:00
components chore: check in pending work — queue preferences, QBO AR diagnostics, mobile engagement fixes, ops scripts 2026-07-18 06:34:57 -04:00
dev feat(260519-0oz-02): add apply-fh-deposit.ts CLI script and 5/18 batch mapping JSON 2026-05-19 00:37:31 -04:00
docs chore: check in pending work — queue preferences, QBO AR diagnostics, mobile engagement fixes, ops scripts 2026-07-18 06:34:57 -04:00
hooks Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
lib feat(24-03): add Route 53 audit lifecycle and pulse_crud history persistence 2026-08-05 20:22:24 -04:00
migrations feat(24-01): install AWS Route 53 SDK and create dedicated schema migration 2026-08-05 19:23:43 -04:00
public feat(260712-ash): add PAX8 card to sync overview page 2026-07-12 07:52:21 -04:00
scripts chore: check in pending work — queue preferences, QBO AR diagnostics, mobile engagement fixes, ops scripts 2026-07-18 06:34:57 -04:00
tasks feat: Duo Security integration — full data sync from Accounts + Admin API 2026-03-27 11:10:30 -04:00
.dockerignore Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
.gitignore chore: check in pending work — queue preferences, QBO AR diagnostics, mobile engagement fixes, ops scripts 2026-07-18 06:34:57 -04:00
.mcp.json feat(design): nav/visual overhaul — brand layer, /status route, KPI dashboard, TanStack DataTable 2026-05-03 09:33:13 -04:00
_clientMiddlewareManifest.json Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
ADDIGY_API_GUIDE.md Add Addigy API integration and Docker deployment with Redis caching 2025-10-28 22:49:08 -04:00
ARCHITECTURE.md feat(design): nav/visual overhaul — brand layer, /status route, KPI dashboard, TanStack DataTable 2026-05-03 09:33:13 -04:00
AUTOTASK_API_GUIDE.md Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
CLAUDE.md feat(24-01): implement Route 53 credential factory 2026-08-05 19:25:36 -04:00
components.json Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
DESIGN.md feat: status popover + CSV export 2026-05-03 10:20:27 -04:00
docker-compose.yml chore: check in pending work — queue preferences, QBO AR diagnostics, mobile engagement fixes, ops scripts 2026-07-18 06:34:57 -04:00
DOCKER_README.md Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
Dockerfile Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
eslint.config.mjs Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
favicon.0b3bf435.ico Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
FIX_TICKET_SYNC.md Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
get-config-text.js Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
LCI_FEATURE_DESIGN.md feat: QuickBooks Online integration 2026-03-17 07:39:55 -04:00
mcp.json feat: add authentication, user management, and admin features 2026-01-31 12:43:14 -05:00
middleware.ts feat(appgate): add AppGate SDP integration health check and sync service 2026-07-11 09:43:48 -04:00
next-development.log Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
next-devtools-config.json Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
next.config.ts Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
package-lock.json feat(24-01): install AWS Route 53 SDK and create dedicated schema migration 2026-08-05 19:23:43 -04:00
package.json feat(24-01): install AWS Route 53 SDK and create dedicated schema migration 2026-08-05 19:23:43 -04:00
postcss.config.mjs Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
POSTGRES_SYNC_SETUP.md Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
PULSE_DATABASE_SKILL.md docs: refresh database skill — timezone (UTC), full picklist tables, updated row counts 2026-03-17 23:05:57 -04:00
QBO_INTEGRATION_HANDOFF.md docs(quick-260718-9qg): add self-contained QBO integration handoff document 2026-07-18 07:07:26 -04:00
README.md docs(analyzer): phase 8 — operator runbook 2026-04-29 11:05:46 -04:00
routes.d.ts Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
test-config.js Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
test-time-entry.js Add comprehensive admin features and multi-system integration 2025-11-19 14:18:16 -05:00
tsconfig.json Restructure: rename to Pulse and move app to root 2025-10-28 23:08:54 -04:00
vitest.config.ts feat: AI ticket analyzer (phases 1-6) 2026-04-29 10:59:40 -04:00

Pulse

Internal PSA management dashboard for Wulf Consulting. Pulse syncs Autotask data into Postgres and layers dashboards, ticket workflow automation, and analytics across a number of MSP tooling integrations (Microsoft 365, Datto RMM, Veeam, Auvik, Addigy, IT Glue, Mimecast, SentinelOne, Duo, Zoom, QuickBooks Online, Zabbix, and more).

Stack

  • Next.js 16 (App Router) + React 19, TypeScript
  • PostgreSQL 16 via pg (no ORM); Redis for caching
  • Better Auth — magic link, TOTP 2FA, Microsoft OAuth
  • Tailwind 4 + shadcn/ui, recharts, sonner, lucide
  • Anthropic SDK for AI triage and analysis features
  • node-cron scheduler embedded in the app process
  • Docker Compose for local and prod (Traefik-fronted)

Quick start

Prerequisites: Docker + Docker Compose, or Node 20+ and a local Postgres/Redis.

cp .env.example .env.local   # if present, otherwise see docker-compose.yml
docker compose up -d         # Postgres applies migrations/ on first init
npm install
npm run dev                  # http://localhost:3100

The first user to authenticate is bootstrapped as super-admin from DEFAULT_ADMIN_EMAIL.

Scripts

Command What it does
npm run dev Next.js dev server on port 3100
npm run build Production build (turbopack)
npm start Run the built app
npm run lint ESLint
npx tsc --noEmit --pretty Type check (the project's only automated check — there is no test suite or CI)

Project layout

app/                    Next.js App Router — pages and app/api/**/route.ts handlers
components/             Feature components; components/ui/ is shadcn primitives
lib/services/           Integration clients, sync services, scheduler
lib/types/              Shared TypeScript types per domain
lib/auth*.ts            Better Auth config and helpers
migrations/             Numbered SQL migrations applied on Postgres init
scripts/                One-off ops/diagnostic scripts (not tests)
docs/                   Deep-dive guides per integration and feature

Configuration

All credentials come from environment variables. The major groups:

  • Database / cache: POSTGRES_HOST/PORT/DB/USER/PASSWORD (or DATABASE_URL), REDIS_URL
  • Auth: BETTER_AUTH_SECRET, BETTER_AUTH_URL, MICROSOFT_CLIENT_ID/SECRET/TENANT_ID, DEFAULT_ADMIN_EMAIL
  • Autotask: AUTOTASK_API_URL, AUTOTASK_USERNAME, AUTOTASK_SECRET, AUTOTASK_API_INTEGRATION_CODE, AUTOTASK_WEBHOOK_SECRET
  • Microsoft 365 Graph (app): MSGRAPH_CLIENT_ID/SECRET/TENANT_ID
  • Other integrations: DATTO_RMM_*, VEEAM_VSPC_*, AUVIK_*, ADDIGY_*, ITGLUE_*, MIMECAST_*, S1_*, DUO_*, ZOOM_*, QBO_*, ZABBIX_*, SALESBLDR_*
  • AI: ANTHROPIC_API_KEY

See AUTOTASK_API_GUIDE.md and ADDIGY_API_GUIDE.md for credential setup. docs/ has per-integration guides for the rest.

Documentation

  • CLAUDE.md — repo orientation for AI coding sessions; also a useful overview for new contributors
  • AUTOTASK_API_GUIDE.md, ADDIGY_API_GUIDE.md — credential setup
  • POSTGRES_SYNC_SETUP.md — database initialization
  • DOCKER_README.md — Docker workflow
  • PULSE_DATABASE_SKILL.md — diagnostic SQL queries
  • docs/wulf-pulse-ticket-analyzer-runbook.md — AI ticket analyzer operator runbook (cost monitoring, IT Glue alias map, failure triage)
  • docs/ — sync behavior, webhook setup, workflow editor, per-integration guides

Deployment

Production runs via docker compose up -d behind Traefik. The app is reachable at pulse.wulfconsulting.cloud. There is no CI/CD pipeline — deploys are manual (rebuild image, recreate containers).

License

Internal use only.