Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| infrastructure_roadmap [2025/08/19 18:26] – cornelius.reyneke | infrastructure_roadmap [2025/08/20 10:52] (current) – cornelius.reyneke | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Infrastructure Roadmap | + | === Infrastructure Roadmap === |
| - | === For Crowdfunding Campaign | + | == For Crowdfunding Campaign == |
| View our [[https:// | View our [[https:// | ||
| Infrastructure we still need: | Infrastructure we still need: | ||
| + | |||
| * Campaign Website | * Campaign Website | ||
| - | ====== Ecosystem Overview ====== | + | ======== Ecosystem Overview |
| * n8n: Orchestrates the automations and connects all systems. | * n8n: Orchestrates the automations and connects all systems. | ||
| Line 18: | Line 19: | ||
| - | ====== Workflow 1: Mautic Contact Updated → Discord Invite(s) → Mautic + EspoCRM Sync → Invite Email ====== | + | ======= Workflow 1: Mautic Contact Updated → Discord Invite(s) → Mautic + EspoCRM Sync → Invite Email ======= |
| - | + | ||
| - | {{: | + | |
| Purpose: | Purpose: | ||
| When a Mautic contact is updated and has opted in, this workflow issues the correct Discord invite (VIP or Basic), saves the link on the Mautic contact, ensures a Lead exists in EspoCRM, and emails the invite. It includes jitter and “already has a link?” checks to prevent duplicates. | When a Mautic contact is updated and has opted in, this workflow issues the correct Discord invite (VIP or Basic), saves the link on the Mautic contact, ensures a Lead exists in EspoCRM, and emails the invite. It includes jitter and “already has a link?” checks to prevent duplicates. | ||
| - | === Steps === | + | ==== Steps ==== |
| - | * Unordered List ItemTrigger: Mautic " | + | * Trigger: Mautic " |
| * Wait 0–3s (jitter to reduce concurrent updates) | * Wait 0–3s (jitter to reduce concurrent updates) | ||
| * Check if " | * Check if " | ||
| * If " | * If " | ||
| - | | + | * Check if VIP Discord invite link exists |
| * If not, wait 0.3–1.2s, re-fetch contact, check again | * If not, wait 0.3–1.2s, re-fetch contact, check again | ||
| * If still missing, issue VIP Discord invite link (via Discord API) | * If still missing, issue VIP Discord invite link (via Discord API) | ||
| Line 47: | Line 46: | ||
| * Try to retrieve Lead by contact attributes (typically email) | * Try to retrieve Lead by contact attributes (typically email) | ||
| * If not found, create Lead in EspoCRM (via HTTP POST) | * If not found, create Lead in EspoCRM (via HTTP POST) | ||
| + | |||
| + | {{: | ||
| === Outputs & Side Effects === | === Outputs & Side Effects === | ||
| - | * Unordered List ItemMautic | + | * Mautic |
| * Appropriate invite email is sent from Mautic. | * Appropriate invite email is sent from Mautic. | ||
| * A corresponding Lead exists in EspoCRM. | * A corresponding Lead exists in EspoCRM. | ||
| - | ====== Workflow 2: Stripe → VIP Coupon → Mautic Update → Coupon Email ====== | + | ======== Workflow 2: Stripe → VIP Coupon → Mautic Update → Coupon Email ======== |
| - | {{:screenshot_from_2025-08-19_18-36-42.png?400|}} | + | Purpose: |
| + | When a customer successfully purchases a "VIP reservation" | ||
| - | Purpose: | + | ==== Steps ==== |
| - | When a customer successfully purchases a "VIP reservation" | + | |
| * Trigger: Stripe webhook on checkout.session.completed | * Trigger: Stripe webhook on checkout.session.completed | ||
| Line 71: | Line 72: | ||
| * Set contact " | * Set contact " | ||
| * Send email with coupon to contact (from Mautic) | * Send email with coupon to contact (from Mautic) | ||
| + | |||
| + | {{: | ||
| === Outputs & Side Effects === | === Outputs & Side Effects === | ||
| Line 78: | Line 81: | ||
| * Coupon email is sent from Mautic. | * Coupon email is sent from Mautic. | ||
| - | === Notes === | + | ==== Notes ==== |
| * Only runs for successful payments and only for the VIP product. | * Only runs for successful payments and only for the VIP product. | ||
| Line 85: | Line 88: | ||
| - | === Field Conventions (Mautic Contact) === | + | ==== Field Conventions (Mautic Contact) |
| - | * Unordered List Itemvip_status: boolean | + | * vip_status: boolean |
| * promo_code: string (from Workflow 1) | * promo_code: string (from Workflow 1) | ||
| * discord_invite_link_vip / discord_invite_link_basic: | * discord_invite_link_vip / discord_invite_link_basic: | ||
| * opt_in_confirmed: | * opt_in_confirmed: | ||
| - | === Operational Tips === | + | ==== Operational Tips ==== |
| * Credentials needed: Stripe (API + webhook secret), Mautic API + email config, Shopware API token, Discord Bot token, EspoCRM API credentials. | * Credentials needed: Stripe (API + webhook secret), Mautic API + email config, Shopware API token, Discord Bot token, EspoCRM API credentials. | ||