How nitheeshdr/pulsecommerce works
Purpose and entry points
PulseCommerce is a self-hosted WooCommerce analytics and WhatsApp campaign system. It ingests a store’s WooCommerce REST data, derives analytics from a cached snapshot, and sends WhatsApp through a separately hosted OpenWA gateway.
UI entry points are the public/authentication pages and route groups: src/app/(marketing)/page.tsx, src/app/login/page.tsx, src/app/connect/page.tsx, and the authenticated application shell at src/app/(app)/layout.tsx. Server entry points are Next.js route handlers under src/app/api/; deployment targets Node/Vercel via vercel.json.
Store authorization, tenancy, and persistence
WooCommerce authorization is a three-leg flow: browser start, WooCommerce server-to-server credential callback, then browser return. Its handlers are src/app/api/auth/woo/start/route.ts, src/app/api/auth/woo/callback/route.ts, and src/app/api/auth/woo/return/route.ts. Signed session/state and tenant selection live in src/lib/auth/session.ts, src/lib/auth/pending.ts, and src/lib/auth/tenant.ts.
Supabase supplies durable relational state and migrations establish the KV, Woo mirror, app tables, multi-tenancy, RLS, broadcast recipients, and cron support: src/lib/supabase/server.ts, supabase/migrations/20260811140000_multi_tenant.sql, supabase/migrations/20260811150000_rls.sql. The app can also use filesystem/Redis-style snapshot persistence through src/lib/store/config.ts and src/lib/store/snapshot.ts.
WooCommerce ingestion and snapshot boundary
The Woo integration fetches orders, products, customers, coupons, and attribution through the Woo REST API; it is the primary external data boundary. Core modules are src/lib/woo/client.ts, src/lib/woo/sync.ts, and src/lib/woo/mirror.ts.
Sync routes trigger or schedule pulls at src/app/api/sync/route.ts and src/app/api/cron/sync/route.ts. Data is trimmed/slimmed and cached as a tenant/store-specific snapshot before downstream computation. This isolates Woo I/O and retries from request-time analytics; re-authorization updates credentials without conceptually changing the analytical model.
Pure analytics and application pages
src/lib/analytics/engine.ts is the central computation boundary: snapshot input produces reproducible KPIs and page payloads without external I/O. Domain stages split into customer/RFM and cohorts (src/lib/analytics/customers.ts, src/lib/analytics/cohorts.ts), acquisition (src/lib/analytics/acquisition.ts), and merchandise/operations/inventory (src/lib/analytics/products.ts, src/lib/analytics/inventory.ts, src/lib/analytics/operations.ts).
The aggregate analytics API is src/app/api/analytics/route.ts; individual customer history is loaded on demand through src/app/api/customers/[key]/route.ts. App pages such as src/app/(app)/dashboard/page.tsx, src/app/(app)/customers/page.tsx, and src/app/(app)/inventory/page.tsx render those derived results. Phone numbers remain server-side; browser-facing data uses reachability rather than raw contact details.
WhatsApp campaigns, flows, and inbox
WhatsApp is an outbound integration boundary: the app calls a self-hosted OpenWA gateway over HTTPS/API key; the gateway owns the persistent WhatsApp session. Client/configuration and recipient safety logic reside in src/lib/whatsapp/client.ts, src/lib/whatsapp/recipients.ts, and src/lib/whatsapp/opt-out.ts.
Broadcast creation and tick-based progress are exposed at src/app/api/whatsapp/broadcast/route.ts and implemented in src/lib/whatsapp/broadcast.ts. Audiences are recomputed server-side from snapshots, then phone resolution, deduplication, and opt-out filtering occur before dispatch. Scheduled multi-step flows persist due state and advance through src/app/api/cron/flows/route.ts and src/lib/whatsapp/flows.ts. Inbox, menu, session/QR, and gateway settings are separate API surfaces under src/app/api/whatsapp/.
Assistant, exports, and operational infrastructure
The Groq-backed assistant uses controlled tools in src/lib/ai/tools.ts and src/lib/ai/execute.ts, exposed by src/app/api/ai/chat/route.ts. Read tools operate on store data; actions are proposals that require later use of ordinary guarded endpoints.
Reports derive from the same analytics data and generate CSV/XLSX/PDF through src/lib/export/csv.ts, src/lib/export/xlsx.ts, and src/lib/export/pdf.ts, served by src/app/api/reports/export/route.ts.
Material runtimes/services are Next.js 16/React 19/TypeScript, Supabase, WooCommerce/WordPress, optional Redis-compatible KV on serverless, Vercel Cron for flows/sync, Groq for AI, and an always-on VPS/container-hosted OpenWA gateway. API contracts are published from src/app/api/openapi/route.ts and rendered at src/app/api-docs/route.ts.
Main entry points: engine.ts Analytics engine · sync.ts Woo sync and mirror · snapshot.ts Tenant snapshot · route.ts Woo authorization
Components 20
Next.js application
- Public and app UI · Marketing, login, connect, and authenticated analytics views.
src/app/(app)/layout.tsx - Woo authorization · Three-leg store credential authorization flow.
src/app/api/auth/woo/start/route.ts - Tenant sessions · Signed session, pending state, and tenant selection.
src/lib/auth/session.ts - Application APIs · Analytics, customer, and guarded application endpoints.
src/app/api/analytics/route.ts - Sync triggers · Manual and scheduled WooCommerce pulls.
src/app/api/sync/route.ts - AI assistant · Groq-backed read tools and proposal-only actions.
src/lib/ai/execute.ts - Report exports · Produces reports from shared analytics data.
src/app/api/reports/export/route.ts - Platform operations · Vercel cron invokes scheduled work; OpenAPI documents contracts.
src/app/api/openapi/route.ts
Data & analytics
- Woo sync and mirror · Fetches, slims, and mirrors WooCommerce entities.
src/lib/woo/sync.ts - Tenant snapshot · Store-specific boundary between ingestion and computation.
src/lib/store/snapshot.ts - Analytics engine · Reproducible KPIs and page payloads from snapshots.
src/lib/analytics/engine.ts - Analytics domains · Customer, cohort, acquisition, product, inventory, and operations stages.
src/lib/analytics/customers.ts
External services
- Supabase · Multi-tenant app state, Woo mirror, RLS, recipients, and cron state.
src/lib/supabase/server.ts - WooCommerce / WordPress · Primary external store-data and credential boundary.
src/lib/woo/client.ts - Optional snapshot KV · Alternative snapshot persistence, including serverless-compatible KV.
src/lib/store/config.ts - OpenWA gateway · Always-on gateway owning the persistent WhatsApp session.
src/lib/whatsapp/client.ts
Campaign automation
- WhatsApp APIs · Broadcast, inbox, menu, session, and gateway API surfaces.
src/app/api/whatsapp/broadcast/route.ts - Audience safety · Resolves phones, deduplicates, and enforces opt-outs server-side.
src/lib/whatsapp/recipients.ts - Broadcast runner · Creates broadcasts and advances tick-based delivery.
src/lib/whatsapp/broadcast.ts - Scheduled flows · Persists due steps and advances campaign flows.
src/lib/whatsapp/flows.ts
Connections 23
- Public and app UI → Woo authorization: connects store
- Woo authorization → Tenant sessions: establishes
- Woo authorization → WooCommerce / WordPress: credential callback
- Tenant sessions → Application APIs: scopes requests
- Sync triggers → Woo sync and mirror: starts pulls
- Woo sync and mirror → WooCommerce / WordPress: fetches REST data
- Woo sync and mirror → Tenant snapshot: writes slimmed data
- Woo sync and mirror → Supabase: updates mirror
- Tenant snapshot → Analytics engine: input
- Analytics domains → Analytics engine: contributes metrics
- Analytics engine → Application APIs: derived payloads
- Application APIs → Public and app UI: renders results
- Tenant snapshot → Optional snapshot KV: optionally persists
- WhatsApp APIs → Audience safety: prepares audience
- Tenant snapshot → Audience safety: recomputes audience
- Audience safety → Broadcast runner: eligible recipients
- Broadcast runner → OpenWA gateway: dispatches HTTPS/API key
- Scheduled flows → Broadcast runner: advances due steps
- Scheduled flows → Supabase: persists state
- Platform operations → Sync triggers: scheduled invocation
- Platform operations → Scheduled flows: scheduled invocation
- AI assistant → Analytics engine: controlled read tools
- Report exports → Analytics engine: report data