Legacy AMS → Agend Suite: Parity Map
The pre-migration checklist promised by O6 (
platform-opportunities.md) and the bridge map §6: what the old Groundhogg-based AMS does, where each capability lands in the suite, and where the honest gaps are. Source: code audit of~/work/agend-ams-wordpress(2026-07-08) — a full WP site repo (Docker mirror ofams.agend.infoon Kinsta): 106 commercial plugins + ~10 custom plugins inpublic/deployemnts-ZjV5E3qWPx/, with 16 capability docs indocs/capabilities/and the production DB dump (agendlab.sql, 73.7 MB) as the authoritative data source. Status: PARITY BASELINE · per-client copies get a status column
0 · The head start nobody priced in
The old AMS is already partially integrated with the suite, in production: agend-integration v2.3.0 provides OAuth2+PKCE SSO, one-way Groundhogg→Directory sync (membership-gated, debounced), Agend-LMS course sales/enrolment (per-user/seat/unlimited licences, [agend_cpd_balance], [agend_certificates]), a QMS entitlement module, and ~20 Elementor widgets. agend-loop-wp separately syncs users, WooCommerce Teams and committees into Loop, and Discourse (community) is already suite-adjacent. Identity mapping and several data flows are solved problems. Migration = completing a bridge that's already carrying traffic, not starting one.
1 · Parity table
| Old AMS capability | Powered by | Suite home | Verdict |
|---|---|---|---|
| Individual memberships (recurring dues, dunning, proration, self-service pause/cancel/upgrade) | WC Subscriptions + Memberships + ams-common managers (62K-line lifecycle classes) | CRM memberships/tiers + commerce | Lossy — custom lifecycle + dunning logic must be re-specified against the suite billing engine |
| Corporate/team memberships (seats, roster self-service, invites, hybrid base+per-seat pricing) | WC Memberships for Teams + agend-teams-hybrid-pricing (self-described "stopgap… while a full billing engine replacement is built") | CRM companies + billing engine | Lossy — but pre-ordained: the stopgap plugin's own header names the suite billing engine as its successor |
| CRM (contacts, tags, custom fields, notes, tasks, companies) | Groundhogg core + ams-common GH manager (45.7K) | CRM | Clean — migration transformers exist (apps/crm/lib/migration) |
| CRM (multi-pipeline deals, lead scoring, appointments) | Groundhogg Pro extensions | CRM deals exist; lead scoring/appointments do not | Partial — deals port; lead scoring + appointments/booking are suite gaps |
| Marketing automation (visual funnels, if/else, timers, cart abandonment, birthday triggers) | Groundhogg funnels + WP Fusion | Workflows (apps/workflows) | Rebuild, not port — funnel definitions are structurally different; rebuild per client from the funnel inventory |
| Email/SMS comms (broadcasts, drip, preference topics, Mailgun/SES bounce sync, Twilio SMS/WhatsApp) | Groundhogg comms extensions | CRM email + Mailchimp sync + workflows | Lossy — preference-topic centre, SMS/WhatsApp channels and bounce history have no suite equivalent yet |
| Events & ticketing (calendar, recurring series, RSVP + paid tickets, per-attendee fields, QR check-in, waitlists, member pricing) | The Events Calendar Pro + Event Tickets Plus | Events (native) | Mostly clean — TEC import wizard exists in the suite; gaps: recurring series, per-attendee custom fields (shared gap with the Upbeat audit), per-event check-in API keys |
| LMS / CPD | Tutor LMS (on-site) + Agend LMS (already integrated) + ams-cpd-points custom ledger table | LMS + CPD | Mixed — Agend-LMS side already live; Tutor course content + the CPD entries table need data migration |
| Member portal (orders, invoices, subscriptions, roster, saved cards) | WC My Account + Elementor widgets | Portal + widgets (WP front-end kept) | Clean — portal UX is rebuilt anyway on the one-WP-build model |
| Directory / find-a-member | agend-integration directory sync (live) + legacy iugo-find-a-member + ams-flexi-search | Directory | Clean — sync already runs; retire the two legacy search plugins |
| Jobs board | WP Job Manager + agend-integration jobs module | Jobs | Clean-ish — migrate listing data |
| Community | Discourse integration (SSO, gating, committee sync); BuddyBoss removed | Loop | Clean — agend-loop-wp already syncs committees; Loop replaces Discourse |
| Commerce & finance (Stripe SCA, purchase orders, PDF invoices, three Xero integrations, custom finance ledger table) | WC + xeroom + iugo-woocommerce-xero + ams-common ledger | Commerce/cart + CRM Xero integration | Lossy — PO checkout, Xero reconciliation depth and the finance ledger need explicit treatment; consolidating 3 Xero paths into the suite's one is a win, not a loss |
| Forms (registration → user + contact, surveys/NPS, prorated-dues calculations, populate-anything) | Gravity Forms + 12 extensions | GAP | No suite form builder — the biggest genuine gap (shared with nothing: Upbeat clients keep GF on their WP; legacy clients can too, but GF→suite field mapping must replace GF→Groundhogg feeds) |
| Knowledge base | Heroic KB (ams-common/includes/heroic/) | CMS | Verify still active; likely light migration |
| Cvent import | ams-common Cvent API client | GAP | Client-specific — confirm whether any migrating client still needs it |
| Auth/SSO | WP as SAML IdP + OAuth2 to suite + JWT REST | Supabase auth + @agend/sso | Inverted — today WP is the identity provider; post-migration the suite must be the IdP and WP the SP. A cutover plan of its own |
| Admin/ops (roles, activity logs, Wordfence, Rollbar) | various | Suite platform concerns | None needed |
2 · Groundhogg data migration inventory (56 gh_* tables in prod)
Ports cleanly (transformers exist or trivial): contacts + meta, tags + relationships (load-bearing — tags drive gating, directory sync, membership status), companies, notes & tasks, WooCommerce↔CRM tracking.
Ports with mapping work: deals/pipelines (suite deals exist, stage mapping per client), email assets & send history (decide: archive vs import), engagement activity, form submissions.
Rebuild, don't port: funnels/automations (→ workflows), superlinks, lead-score levels.
Legally required to carry: consent/preference state — topic opt-ins, bounce/complaint flags, unsubscribe status. This is non-negotiable in any client migration and currently has no suite target field set. Add to the CRM consent model before the first migration.
Non-GH custom tables: CPD entries (ams-cpd-points) and the finance ledger (ams-common) — both need explicit suite destinations (LMS CPD ledger; billing/reporting).
3 · The hard 20% (everything else is known machinery)
- Billing — WC Subscriptions dunning, hybrid seat pricing (stopgap awaiting the billing engine by its own admission), purchase-order checkout, Xero consolidation. The billing engine programme is the dependency; legacy migration should sequence behind its relevant milestones.
- CRM feature gaps — lead scoring, appointments/booking, preference-topic centre, SMS/WhatsApp channels. Decide per gap: build in suite, drop, or leave on WP-side plugins during transition.
- The SAML-IdP inversion — flipping identity mastery from WP to the suite is its own cutover project with client-visible impact (every SSO-connected system re-points).
4 · Suggested migration sequence (per client)
- Contacts/tags/companies via the existing transformers (+ consent state once the target exists) — hub becomes CRM of record; Groundhogg goes read-only.
- Directory, LMS, Loop, QMS — already bridged; flip from sync to native.
- Events — TEC import wizard; note shared gaps with the Upbeat events decision (per-attendee fields benefit both programmes).
- Memberships/billing — behind the billing-engine milestones; hybrid-pricing clients last.
- Automations — rebuild top funnels in workflows from a per-client funnel inventory.
- Identity inversion — last, once everything else reads/writes the suite.
- Retire plugins wave by wave; the WP site converges on the thin BOA-08 plugin + widgets (O6).
5 · Reusable assets
docs/capabilities/*.md (16 pre-written capability docs — per-client parity starts there, not from code), agendlab.sql (authoritative data), apps/crm/lib/migration (Groundhogg transformers + CSV importer + tier mapping), wp-migration-* schema migrations, agend-integration + agend-loop-wp (live bridges), the suite's TEC import wizard.