← back to Marketing Command Center

modules/registry.js

39 lines

// Module registry — the single source of truth for which panels the Command
// Center mounts. server.js iterates this; the shell builds nav from /api/panels.
// Each module file lives at modules/<id>/index.js and exports the MODULE CONTRACT
// (see README.md): { id, title, icon, mount(router), panel: {html, js} paths }.
//
// Agents own one module each and edit ONLY their modules/<id>/ + public/panels/<id>.*
// — never this file or server.js (avoids cross-agent conflicts). To add a module,
// the integrator appends one line here.
module.exports = [
  'composer',           // Composer board: combine an asset/banner + copy → publish/stage to all connected socials at once (assembles assets+copy+channels)
  'accounts',           // Amazon-style rail: every social account + connection status + inline "how to fix" credentials (read-only view over channels + linkedin)
  'board',              // Hootsuite-style streams board: one column per channel (social + email), dated cards
  'constant-contact',   // CC: campaigns, contacts, calendar, draft + schedule (gated sends)
  'calendar',           // marketing calendar: retail/holiday dates + campaign schedule
  'calendars',          // All Calendars: unified activation-SKU + marketing + campaign + Google layers with a left-panel field-filter rail
  'copy',               // suggested copy: subject lines, email/social body (LLM-backed)
  'layouts',            // on-demand HTML/CSS email + social layout mockups
  'assets',             // image asset library: upload / URL / live DW-catalog pull
  'sounds',             // Sounds & Assets: curated free/royalty-free music + TikTok creative sources, badged by brand-safety (incl. Grateful Dead live archive as listen-only)
  'performance',        // performance dashboard: email + GA4 KPIs, charts, top campaigns
  'social',             // social scheduler: IG/TikTok queue board, gated publish
  'follow-counts',      // Followers/Following: per-DW-IG-account followers_count + follows_count (COUNTS ONLY, official Graph API via Norma :9810) + daily-snapshot growth chart
  'reels',              // New Arrivals Reels console (dw-marketing-reels :9848) embedded via same-origin proxy — the app that previously owned marketing.designerwallcoverings.com
  'linkedin',           // LinkedIn composer + drafts + manual post (deep-link) + gated API publish (Phase 2)
  'clients',            // Clients & Prospects: FileMaker client DB (43k) + Google-Places prospect groups, LinkedIn+Instagram discovery + emails (staged; not on CC)
  'segments',           // audience segments: rule builder + live preview over contacts
  'vendors',            // vendor IG reporting: DW + all vendor Instagram accounts roster
  'channels',           // publishing engine: FB/IG/TikTok/YouTube connectors + composer (gated live posts)
  'send-times',         // send-time optimization: heatmap + per-contact predicted peak open window
  'ab-tests',           // A/B test planner: two variants + holdout, predicted opens/clicks, winner call (STAGED)
  'profiles',           // contact 360: search + email engagement timeline + segment memberships + cross-channel placeholder (read-only)
  'segment-perf',       // segment performance: email KPIs split by audience (Designers/Commercial/Retail/At-Risk), 90d SVG trends, health colour-coding
  'templates',          // campaign templates: 8 pre-built DW luxury email campaigns (welcome, memo D0/D7/D21, VIP preview, seasonal, re-engagement) — STAGED
  'journeys',           // cross-channel journeys: email → wait → SMS/social → retarget per segment, persisted, with recommendations + dry-run (STAGED)
  'browse-abandon',     // browse-abandonment drip: Day1 storytelling → Day14 room-setting → Day30 suppress, mock events + dry-run preview (STAGED)
  'playbook',           // monthly playbook: 4-6 suggested campaigns/actions for next 4 weeks from calendar + segment health + perf gaps (Gemini or template)
  'engine',             // Engine: daily AI-suggested social posts with an approve → schedule → post flow (queue via store.js, live via channels.postLive)
];