# Synter — AI ad operations across 16 ad platforms

> Source: https://synterai.com/story
> Cached: 2026-10-09T01:09:29.706Z
> Words: 1253

---

[Skip to app content](#global-agent-app-surface)[Skip to main content](#main-content)
```
███████╗██╗   ██╗███╗   ██╗████████╗███████╗██████╗ 
    ██╔════╝╚██╗ ██╔╝████╗  ██║╚══██╔══╝██╔════╝██╔══██╗
    ███████╗ ╚████╔╝ ██╔██╗ ██║   ██║   █████╗  ██████╔╝
    ╚════██║  ╚██╔╝  ██║╚██╗██║   ██║   ██╔══╝  ██╔══██╗
    ███████║   ██║   ██║ ╚████║   ██║   ███████╗██║  ██║
    ╚══════╝   ╚═╝   ╚═╝  ╚═══╝   ╚═╝   ╚══════╝╚═╝  ╚═╝
```

# Building Synter

The Full Story — 103 Days, 5 Pivots, 1 Vision

September 11, 2025 → December 23, 2025

8,437Commits876KLines Added5Major Pivots146AI CommitsPivot #1September 11, 2025 — Day 1From ai-advertising to SynterThe first commit tells the story: "Rebrand from ai-advertising to Synter - AI Advertising Agency." A FastAPI backend, Railway deployment configs, and a vision document that would guide everything that followed.

Architecture v1: Python Monolith
graph LR
    subgraph "Railway"
        A[FastAPI] --> B[(MySQL)]
        A --> C[Redis Queue]
        C --> D[Workers]
    end
    E[User] --> A
    style A fill:#1a1a2e,stroke:#c9f554
    style B fill:#1a1a2e,stroke:#38bdf8
    style C fill:#1a1a2e,stroke:#f59e0b
    style D fill:#1a1a2e,stroke:#a78bfa
                
```
┌─────────────────────────────────────────────────────────────┐
│  Day 1 Commits                                              │
│  ─────────────────────────────────────────────────────────  │
│  d31b2ff  Rebrand from ai-advertising to Synter             │
│  ef6e0df  Add Railway deployment configuration              │
│  e499e68  Fix nixpacks.toml: remove duplicate section       │
│  97061ff  Fix nixpacks.toml: properly configure Python      │
│  c027f8f  Fix nixpacks.toml: correct providers syntax       │
│  6d3f2b7  Fix nixpacks.toml: use ensurepip                  │
│  fcead60  Simplify nixpacks.toml                            │
│  f947cbb  Simplify deployment                               │
│  ─────────────────────────────────────────────────────────  │
│  13 commits in one day — the deployment dance               │
└─────────────────────────────────────────────────────────────┘
```

138Commits13,113Lines AddedPivot #2September 12-13, 2025 — Days 2-3Python → Next.jsIn 48 hours, the entire frontend shifted from Python templates to Next.js 15. D3.js charts, a settings panel, auth sessions, RBAC — 22,000+ lines in a single day.

PPC Dashboard with D3.js ChartsSeptember 13, 2025Dashboard OverviewOctober 17, 2025Architecture v2: Next.js + Python Backend
graph TB
    subgraph "Vercel"
        A[Next.js 15] --> B[API Routes]
    end
    subgraph "Railway"
        C[FastAPI] --> D[(PostgreSQL)]
        C --> E[Redis]
    end
    B --> C
    F[User] --> A
    style A fill:#1a1a2e,stroke:#c9f554
    style B fill:#1a1a2e,stroke:#38bdf8
    style C fill:#1a1a2e,stroke:#f59e0b
    style D fill:#1a1a2e,stroke:#a78bfa
                October 2, 2025 — Day 22Multi-Platform Ad VaultThe first major feature: OAuth connections to Google Ads, LinkedIn, Microsoft, Reddit. A credential vault with auto token refresh. The foundation for cross-platform campaign management.

Platform IntegrationsOctober 17, 2025Onboarding FlowOctober 17, 2025OAuth Token Management
sequenceDiagram
    participant U as User
    participant S as Synter
    participant P as Ad Platform
    participant DB as PostgreSQL
    
    U->>S: Connect Platform
    S->>P: OAuth Redirect
    P->>S: Auth Code
    S->>P: Exchange for Token
    P->>S: Access + Refresh Token
    S->>DB: Store Encrypted
    Note over S,DB: Auto-refresh before expiry
                Pivot #3November 11, 2025 — Day 62The AI EntersAmp makes its first commits. The codebase gains a collaborator. 439 commits in one day — 16 files touched by AI. The vision of human-machine collaboration becomes real.

Joel"Apparently these are moats for YC startups — please review and let me know how this compares to Synter."Amp"Your strongest near-term play is Counter-Positioning + Speed. The 'Cursor for ad campaigns' vision directly challenges legacy dashboard tools that can't cannibalize their own seat-based revenue."Nov 11First AI commits appear16 files touched by AmpNov 16625 commits in one dayMassive feature pushNov 22Campaign IDE redesign"Chat-first interface (Cursor-style)"Nov 24Claude joinsSecond AI collaboratorPivot #4November 22, 2025 — Day 73Dashboard → Chat-First IDEThe biggest pivot: "Redesign Campaign IDE landing as chat-first interface (Cursor-style)." No more dashboards with forms. Just describe what you want, and the AI builds it.

Before: Dashboard-FirstNovember 2025After: Chat-First IDEDecember 2025Campaign IDE Architecture
graph TB
    subgraph "Campaign IDE"
        A[Chat Interface] --> B[AI Agent]
        B --> C[Tool Registry]
        C --> D[Google Ads API]
        C --> E[LinkedIn API]
        C --> F[Reddit API]
        C --> G[Analytics APIs]
        B --> H[Document Editor]
        H --> I[YJS Real-time]
    end
    style A fill:#1a1a2e,stroke:#c9f554
    style B fill:#1a1a2e,stroke:#38bdf8
    style C fill:#1a1a2e,stroke:#f59e0b
                Joel"I started building campaign memory with a RAG model. Accept/Reject is good — we have it in the agent, yet I don't know if it's really being incorporated."Amp"Found the gap. The feedback is being collected but never retrieved to influence future responses. It's write-only. Let me implement the feedback loop to close it."November 25, 2025 — Day 76The Nango MigrationFour major refactors in one day: "Switch all ad platforms to use Nango authentication." Migrate to NextAuth.js v5. Move all OAuth flows to frontend. Remove Railway backend dependency for auth.

Before: Custom OAuth per Platform
graph LR
    A[Frontend] --> B[Railway Backend]
    B --> C[Google OAuth]
    B --> D[LinkedIn OAuth]
    B --> E[Meta OAuth]
    B --> F[Reddit OAuth]
    style B fill:#1a1a2e,stroke:#ef4444
                After: Unified Nango Flow
graph LR
    A[Frontend] --> B[Nango]
    B --> C[All Platforms]
    B --> D[Token Refresh]
    B --> E[Webhook Sync]
    A --> F[Vercel API]
    F --> G[(PostgreSQL)]
    style B fill:#1a1a2e,stroke:#c9f554
                December 4-6, 2025 — Days 85-87Teaching the Agent to ThinkThe Oracle enters: GPT-5 reasoning for complex analysis. Business profile inference. Funnel blueprints per company type. The agent learns to think differently about enterprise vs. SaaS customers.

Joel"Investigate why the agent continues to focus solely on PostHog tracking. For enterprise customers, PostHog tracking is not always the right fit — they use offline conversion APIs."Oracle"Synter is PostHog-biased because PostHog is treated as the 'analytics truth' in tool definitions. The simplest fix is to infer a business profile for each workspace, define a funnel blueprint per business type, and wire that into system prompts."Business Profile → Funnel Intelligence
graph TB
    subgraph "Profile Inference"
        A[CRM Connected?] --> B{Business Type}
        B -->|Enterprise| C[Pipeline Focus]
        B -->|SaaS| D[Subscription Focus]
        B -->|E-commerce| E[Transaction Focus]
    end
    
    subgraph "Funnel Blueprint"
        C --> F[Ads → Web → CRM → Revenue]
        D --> G[Ads → Product → Conversion]
        E --> H[Ads → Cart → Purchase]
    end
    style B fill:#1a1a2e,stroke:#38bdf8
    style C fill:#1a1a2e,stroke:#c9f554
    style D fill:#1a1a2e,stroke:#f59e0b
    style E fill:#1a1a2e,stroke:#a78bfa
                Pivot #5December 22-23, 2025 — Days 103-104Agent AutonomyThe final frontier: teaching the agent to execute code. E2B sandboxed execution. Approval workflows. Script catalogs. The agent becomes truly autonomous.

Sandboxed Execution Architecture
graph TB
    subgraph "Agent"
        A[Chat Request] --> B[Tool Selection]
        B --> C{Needs Code?}
    end
    
    subgraph "Sandbox Orchestrator"
        C -->|Yes| D[Script Catalog]
        D --> E[E2B Sandbox]
        E --> F[Isolated VM]
        F --> G[stdout/stderr]
    end
    
    subgraph "Safety"
        H[Egress Allowlist] --> E
        I[Approval Flow] --> D
        J[Audit Log] --> E
    end
    
    C -->|No| K[Direct Tool Call]
    G --> L[Response]
    K --> L
    
    style E fill:#1a1a2e,stroke:#c9f554
    style I fill:#1a1a2e,stroke:#f59e0b
                Amp"Done! The sandbox executor is deployed to Railway. E2B stdout capture is working. Phase 3b complete."
```
┌─────────────────────────────────────────────────────────────┐
│  Sandbox Implementation Phases                              │
│  ─────────────────────────────────────────────────────────  │
│  ✓ SYN-94  Disable broken execute_python in production      │
│  ✓ SYN-95  Implement constrained HTTP API tool              │
│  ✓ SYN-96  Formalize Python script catalog                  │
│  ✓ SYN-97  Design sandboxed executor architecture           │
│  ✓ SYN-98  Build sandbox orchestrator service               │
│  ✓ SYN-99  Implement approval workflows                     │
└─────────────────────────────────────────────────────────────┘
```

## 103 Days Later

Final Architecture
graph TB
    subgraph "Frontend - Vercel"
        A[Next.js 15] --> B[Campaign IDE]
        B --> C[Chat Interface]
        B --> D[Document Editor]
        D --> E[YJS Real-time]
    end
    
    subgraph "Backend - Railway"
        F[FastAPI] --> G[E2B Sandbox]
        F --> H[Script Catalog]
    end
    
    subgraph "Services"
        I[Nango OAuth] --> J[6 Ad Platforms]
        K[PostgreSQL] --> L[pgvector RAG]
        M[Stripe] --> N[Billing System]
    end
    
    subgraph "AI Layer"
        O[Claude/GPT] --> P[Tool Registry]
        Q[Oracle] --> R[Deep Reasoning]
        S[Feedback Loop] --> T[Memory System]
    end
    
    C --> O
    C --> F
    A --> I
    A --> K
    A --> M
    
    style B fill:#1a1a2e,stroke:#c9f554
    style O fill:#1a1a2e,stroke:#38bdf8
    style I fill:#1a1a2e,stroke:#f59e0b
            8,437Total Commits876,298Lines Added254,819Lines Removed6Ad Platforms146AI CommitsFrom a Python monolith to a chat-first IDE with sandboxed AI execution — built by humans and machines working together.

```
████████╗██╗  ██╗███████╗    ███████╗███╗   ██╗██████╗ ██████╗ 
   ╚══██╔══╝██║  ██║██╔════╝    ██╔════╝████╗  ██║██╔══██╗╚════██╗
      ██║   ███████║█████╗      █████╗  ██╔██╗ ██║██║  ██║  ▄███╔╝
      ██║   ██╔══██║██╔══╝      ██╔══╝  ██║╚██╗██║██║  ██║  ▀▀══╝ 
      ██║   ██║  ██║███████╗    ███████╗██║ ╚████║██████╔╝  ██╗   
      ╚═╝   ╚═╝  ╚═╝╚══════╝    ╚══════╝╚═╝  ╚═══╝╚═════╝   ╚═╝
```

Synter — AI ad operations across 16 ad platforms

---

*This is a cached, LLM-optimized version of [https://synterai.com/story](https://synterai.com/story).*
*Generated by [Synter LLM Cache](https://llm.synterai.com).*