Pacing Tech Stack Architecture
Purpose: single source of truth for Pacing Agency marketing/website stack. Keep this aligned with live systems before executing changes.
This documentation is in a shared Google Drive folder. Multiple team members can work in the same folder.
Before making any edits:
- Run
git pull origin mainto get the latest changes - Verify you're editing the correct file type (tool doc vs custom page)
- Check
git statusbefore committing to ensure you're only committing intended changes
Never commit generated files in docusaurus/docs/tools/ (they're auto-generated on build).
Quick map (IDs and routes)
| Area | Details |
|---|---|
| Webflow site | 669e9035529a7f101e149eca (pacing.agency) |
| GTM (web) | GTM-PGPK24VR via Stape loader https://load.data.pacing.agency/... |
| sGTM (server) | GTM-NHVBMP3D |
| GA4 | Measurement ID G-TPFS2Z0HNJ (via sGTM) |
| Ads pixels | Meta 1743482129607086 (CAPI); Pinterest Advertiser 549769377338; Google Ads AW-17079344453; LinkedIn Insight/Conversion IDs via lookup; Reddit Pixel present; Floodlight (historical, verify) |
| Data sink | BigQuery: pacing-agency-we-1733769538574.SGTMtoBQ1pacing.pacingeventssgtm1 |
| Consent | Termly CMP in web GTM; Consent Mode to confirm |
| Client ID | _c_pca localStorage-first; propagates to forms and server events |
Web Properties, Hosting, and Frameworks
- Primary domain:
pacing.agency(London-based agency site). - Hosting: Amazon Web Services with Cloudflare CDN/proxy in front; HSTS enabled; SSL active (Cloudflare-issued).
- Frontend: React with GSAP and jQuery present; Webpack build; core-js polyfills.
- CMS: Webflow for all content (marketing pages, blog, ecommerce).
- Hosting backend: Webflow hosting infrastructure.
Content & CMS Model (current Webflow structure)
Complete documentation for all CMS collections is available in scripts/resources/webflow/CMS Collections Documentation.md, including:
- Tone of voice guidelines for each collection
- Content types and usage patterns
- Keyword optimization strategies
- Maintenance to-do lists
- Cross-collection linking strategies
MCP automation tools are available in scripts/resources/webflow/MCP Prompts/ for automating common tasks like SEO audits, keyword optimization, and style refactoring. See tools/webflow.md for details.
| Collection | ID | Notes |
|---|---|---|
| Services | 676058e3b03e90853d8d8ceb | Required: name, slug, category; deliverable bullets; rich text; related tools/case studies; FAQ toggles; SEO title/description. |
| Sub-Services | 682b1fbd6c6612118937bd6e | Required: name, slug; short-description, images/icons; linked services and service category; rich text. |
| Case Studies | 68763c05b86dd4610d8d02b5 | Rich media, KPIs, colours, CTA, team, gallery, SEO; linked services/clients; toggles. |
| Blog Posts | 669e9035529a7f101e149f62 | Required: name, slug, date, category, main/thumbnail images, summary, body, SEO title/description; author options; featured; TOC/comments toggles. |
| Blog Categories | 669e9035529a7f101e149f3f | Name, slug, description, SEO title/description. |
| Tools | 6846f16677c2090f3a234e1e | Required: name, slug, h1, short-name; tool category (options), colour, rich text; links to services/sub-services/case studies; icon/main image; SEO. |
| Service Categories | 676059e731c716d9f1c56a81 | Taxonomy for Services. |
| Case Study Categories | 6877b2356fe34f35bd1aee7c | Taxonomy for Case Studies. |
| FAQs | 682b4ac67f18d4b67ac2573b | Name/slug; question, answers (short/long), sort-order; SEO; links to services/tools/case studies/static pages. |
| Clients | 68763c19276771c33e72e281 | Logos, sort order, linked case studies. |
| Stats | 6877c4d76b2a3fa8115d9602 | Metrics support. |
| Processes | 68d1c1156a3f8fbcca06ca01 | Steps, images, bullets, sort order. |
| Testimonials | 68f8b252cedf970a559665dd | Quotes, names/roles, images, links to clients/case studies, SEO. |
| Landing Pages | 6904dcb47ebff962cc495004 | LP-specific content. |
| Contact LP1s | 69121374a47442d74f41201b | Contact LP variant. |
| Callouts / Callout Categories | 691214529959af0aee59ca74 / 691214642055c39447645580 | CTA snippets and taxonomy. |
| FAQ Page Reference (Static) | 6846f93bfb297bfbf47d3034 | Static page linkage for FAQs. |
Analytics, Tracking, and Tagging
The dual GTM setup (Web + Server) provides several advantages:
Privacy & Compliance:
- Server-side tracking is more privacy-friendly and less susceptible to ad blockers
- Better control over what data is sent to third parties
- Enhanced consent management via Termly CMP
Data Quality:
- More reliable data collection (not affected by browser restrictions)
- Improved attribution accuracy
- Server-side enrichment capabilities
Performance:
- Reduced client-side JavaScript execution
- Faster page load times
- Consolidated tracking reduces network requests
- Tag manager: Web container
GTM-PGPK24VRloaded via Stape custom loader (https://load.data.pacing.agency/...); server containerGTM-NHVBMP3D(sGTM) hosted on Stape atdata.pacing.agency. - Consent: Termly CMP drives firing; confirm Consent Mode settings and any geo rules.
- Analytics/behaviour: GA4 routed via sGTM (Measurement ID
G-TPFS2Z0HNJ), Microsoft Clarity, Cloudflare Browser Insights. - Ads/remarketing pixels: Meta Pixel (
1743482129607086) via CAPI, LinkedIn Insight/Conversions, Pinterest (Advertiser ID 549769377338), Microsoft Ads UET, Reddit Pixel, Google Ads (AW-17079344453), Floodlight historically (verify current use). - Server routing: sGTM sends GA4 (all events), Google Ads conversions, Meta CAPI, LinkedIn CAPI, Pinterest CAPI; BigQuery logging to
pacing-agency-we-1733769538574.SGTMtoBQ1pacing.pacingeventssgtm1. - Event naming (spec): base events include page_view, scroll_75, contact/link clicks, form submits (
lead_form_submit,demo_form_submit,newsletter_form_submit), video events, 404. Only lead/demo events are mapped to ad platforms; others are GA-only unless expanded. - Client ID: first-party
_c_pcaprioritises localStorage over cookie; propagated to forms and server events; seetools/gtm.md. - Security/anti-abuse: reCAPTCHA active.
- CDN/perf telemetry: Cloudflare Browser Insights running; Cloudflare edge caching.
Data Flow Architecture
Tech Stack Overview
Marketing Automation, CRM, and Data
- CRM: TwentyCRM (open source) deployed at
pacingagency.comfor internal agency use and client workspaces. Multi-workspace instance with Google OAuth authentication. Seetools/twentycrm.mdfor REST API documentation. - CRM Hosting: Hetzner Cloud project "CRM1" (project ID:
12083932). Servertwenty-crm-prod-2(CPX31: 4 vCPU, 8GB RAM, 160GB disk) in Falkenstein, Germany. Public IP:49.13.82.194. Managed via hcloud CLI. Seetools/hetzner.mdfor infrastructure details. - Automation: N8N self-hosted automation platform at
n8n.pacing.agencyfor client and internal workflows. Seetools/n8n.mdfor details. - N8N Hosting: Hetzner Cloud project "Pacing n8n" (project ID:
12332922). Servern8n2(CCX13: 2 vCPU dedicated, 8GB RAM, 80GB disk) in Falkenstein, Germany. Public IP:91.98.150.95. Managed via hcloud CLI. Seetools/hetzner.mdfor infrastructure details. - N8N Active Workflows: 9 active workflows including Webflow cache clearing (Pacing, TTL, HML), Twilio call data processing, Google Ads offline conversion uploads, and CircleLoop webhooks. See
tools/n8n.mdfor complete workflow documentation. - N8N API: REST API available at
https://n8n.pacing.agency/api/v1with workflow management, execution tracking, and tag organisation. API key stored in project.envfile. Seetools/n8n.mdfor API documentation. - Email: Notifuse self-hosted email sending platform at
email.pacing.agencyfor transactional and marketing emails. Seetools/notifuse.mdfor details. - Notifuse Hosting: Hetzner Cloud project "notifuse-pacing1" (project ID:
12336267). Servernotifuse-email(CPX21: 3 vCPU, 4GB RAM, 80GB disk) in Nuremberg, Germany. Public IP:91.99.193.35. Managed via hcloud CLI. Seetools/hetzner.mdfor infrastructure details. - SMTP: Stalwart open source SMTP server for cold email delivery. See
tools/stalwart.mdfor details. - Stalwart Hosting: Hetzner Cloud project "Stalwart SMTP" (project ID:
12629745). Serverstalwart-smtp(CPX11: 2 vCPU, 2GB RAM, 40GB disk) in Nuremberg, Germany. Public IP:157.90.126.220. Managed via hcloud CLI. Seetools/hetzner.mdfor infrastructure details. - Comments: Remark42 self-hosted commenting system installed on Pacing blog, available for client websites. See
tools/remark42.mdfor details. - Remark42 Hosting: Hetzner Cloud project "Comments1" (project ID:
12402044). Serverremark42(CPX21: 3 vCPU, 4GB RAM, 80GB disk) in Nuremberg, Germany. Public IP:91.98.226.29. Managed via hcloud CLI. Seetools/hetzner.mdfor infrastructure details. - AI Headshots: HeadshotAI professional AI headshot generator at
headshots.pacing.agencyfor generating professional headshots. Seetools/headshotai.mdfor details. - HeadshotAI Hosting: Hetzner Cloud project "headshotai" (project ID:
12423907). Serverheadshots-pacing(CPX21: 3 vCPU, 4GB RAM, 80GB disk) in Nuremberg, Germany. Public IP:91.98.70.125. Managed via hcloud CLI. Seetools/hetzner.mdfor infrastructure details. - Digital Asset Management: ResourceSpace open source DAM system for organising, storing, and sharing digital assets. See
tools/resourcespace.mdfor details. - ResourceSpace Hosting: Hetzner Cloud project "resource-space" (project ID:
12401568). No servers currently deployed. Seetools/hetzner.mdfor infrastructure details. - Data warehouse: BigQuery sync configured for TwentyCRM data (
crm1-474415.twentycrm_live). Daily automated sync at 2:00 AM. See deployment docs in/Users/benpower/VSC/twentyCRM/BIGQUERY_SYNC_SETUP.md. - Reporting: BigQuery dataset available for Looker Studio, custom dashboards, and analytics.
Security, Compliance, and Performance Notes
Critical security and compliance considerations:
- HTTPS Everywhere: Cloudflare fronting AWS with HSTS enforces HTTPS-by-default
- Form Protection: reCAPTCHA active for form abuse mitigation
- Consent Management: Confirm current Termly CMP configuration and regional compliance (UK/EU GDPR)
- Data Privacy: Server-side tracking improves privacy posture
- Performance: Keep third-party pixels/SDKs consolidated through GTM to reduce layout shift
Action Required: Verify Consent Mode configuration and document any geo-specific rules.
- Cloudflare fronting AWS with HSTS suggests HTTPS-by-default posture.
- reCAPTCHA present for form abuse mitigation.
- Cookie/consent tooling not identified in scan — confirm current consent management platform and regional compliance (UK/EU).
- Keep third-party pixels/SDKs consolidated through GTM where possible to reduce layout shift and duplicate beacons.
Automation Workflows (n8n)
Workflow Overview
Workflow Details
Webflow → Cloudflare Cache Clearing
- Pacing Website: Webhook triggers Cloudflare cache purge on publish (workflow
N11idwXDFWNwGYDh) - TTL Website: Webhook triggers Cloudflare cache purge on publish (workflow
KowT1FqN6Xk6UoRE) - HML Website: Webhook triggers Cloudflare cache purge on publish (workflow
lQvLaJJihWpebP6c)
Twilio Call Processing
- Process Call Data LIVE TWILIO (workflow
Br8hV6MAxI3ZqR2J): Downloads recordings, transcribes via ElevenLabs, analyzes with Google Vertex AI, extracts structured data (booking likelihood, pricing, addresses, spam detection), stores in Google Sheets - Process Call Data LIVE (workflow
TsmCwp84TKbHa62o): Processes call data from Google Sheets
Google Ads Offline Conversions
- Google Ads Offline Conversion - CALL (workflow
lvWrOkP2lyFnVbQV): Uploads call conversions to Google Ads API from processed call data - Google Ads Offline Conversion - CALL NON-CL (workflow
kFpW5Ahu63kGfrSL): Uploads non-CircleLoop call conversions
Other Workflows
- CIRCLELOOP-WEBHOOK1 (workflow
ZOYW9YJWM7Zlyob9): CircleLoop webhook handler for MTL client - My workflow 3 (workflow
QpjmWcZTwupjkXHI): Internal workflow
See tools/n8n.md for complete workflow documentation and scripts/resources/n8n/ for workflow backups.
Open Questions / Next Steps
References
- Operational guidelines:
README.md. - Cursor execution and writing rules: Project Rules in
.cursor/rules/(primary) and the legacy.cursorrulesfile. - Tool-specific notes live under
tools/(add before creating new tags or integrations). - Automation scripts and resource files organised by tool in
scripts/resources/(seescripts/resources/README.md). - Webflow CMS documentation:
scripts/resources/webflow/CMS Collections Documentation.md(tone of voice, content types, keywords, to-do lists). - Webflow MCP prompts:
scripts/resources/webflow/MCP Prompts/(automation capabilities for SEO, keywords, links, styles, breakpoints, sliders).
FAQs
What is the primary tracking setup for pacing.agency?
The site uses a dual GTM setup: Web container GTM-PGPK24VR loaded via Stape custom loader, and Server container GTM-NHVBMP3D hosted on Stape. All events flow through sGTM to GA4 (Measurement ID G-TPFS2Z0HNJ) and BigQuery for data warehousing.
How does the data flow from the website to analytics platforms?
User events are captured by the Web GTM container, which checks consent via Termly CMP. After consent, events are sent to the Server GTM container, which routes them to GA4, ad platforms (via CAPI), and BigQuery for long-term storage. The client ID _c_pca is stored in localStorage and propagated to forms and server events.
What is the hosting infrastructure for pacing.agency?
The site is hosted on Amazon Web Services with Cloudflare CDN/proxy in front. Cloudflare provides HSTS, SSL certificates, edge caching, and Browser Insights. The frontend uses React with GSAP and jQuery, built with Webpack.
Where are automation workflows hosted?
n8n automation workflows are self-hosted at n8n.pacing.agency on a Hetzner Cloud server. The platform handles Webflow cache clearing, Twilio call processing, Google Ads offline conversions, and various webhook integrations. See tools/n8n.md for complete workflow documentation.
How is consent management handled?
Termly CMP (Consent Management Platform) is integrated into the Web GTM container. It drives tag firing based on user consent. Consent Mode settings should be confirmed, and any geo-specific rules need to be documented.