Synter — AI ad operations across 16 ad platforms
Building Synter
The Full Story — 103 Days, 5 Pivots, 1 Vision
September 11, 2025 → December 23, 2025
8,437
Commits
876K
Lines Added
5
Major Pivots
146
AI Commits
Pivot #1
September 11, 2025 — Day 1
From ai-advertising to Synter
The 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
- Railway
- MySQL
- FastAPI
- Redis Queue
- Workers
- User
┌─────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────┘
138
Commits
13,113
Lines Added
Pivot #2
September 12-13, 2025 — Days 2-3
Python → Next.js
In 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 Charts - September 13, 2025
Dashboard Overview - October 17, 2025
Architecture v2: Next.js + Python Backend
- Railway
- Vercel
- PostgreSQL
- FastAPI
- Redis
- API Routes
- Next.js 15
October 2, 2025 — Day 22
Multi-Platform Ad Vault
The 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 Integrations - October 17, 2025
Onboarding Flow - October 17, 2025
OAuth Token Management
PostgreSQL Ad Platform Synter User
Auto-refresh before expiry Connect Platform OAuth Redirect Auth Code Exchange for Token Access + Refresh Token Store Encrypted
Pivot #3
November 11, 2025 — Day 62
The AI Enters
Amp 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 11 First AI commits appear
16 files touched by Amp
Nov 16 625 commits in one day
Massive feature push
Nov 22 Campaign IDE redesign
"Chat-first interface (Cursor-style)"
Nov 24 Claude joins
Second AI collaborator
Pivot #4
November 22, 2025 — Day 73
Dashboard → Chat-First IDE
The 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-First - November 2025
After: Chat-First IDE - December 2025
Campaign IDE Architecture
- Campaign IDE
- AI Agent
- Chat Interface
- Tool Registry
- Google Ads API
- LinkedIn API
- Reddit API
- Analytics APIs
- Document Editor
- YJS Real-time
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 76
The Nango Migration
Four 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
- Frontend
- Railway Backend
- Google OAuth
- LinkedIn OAuth
- Meta OAuth
- Reddit OAuth
After: Unified Nango Flow
- Frontend
- Nango
- All Platforms
- Token Refresh
- Webhook Sync
- Vercel API
- PostgreSQL
December 4-6, 2025 — Days 85-87
Teaching the Agent to Think
The 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
| Funnel Blueprint | Profile Inference |
|---|---|
| Enterprise | Ads → Web → CRM → Revenue |
| SaaS | Ads → Product → Conversion |
| E-commerce | Ads → Cart → Purchase |
Pivot #5
December 22-23, 2025 — Days 103-104
Agent Autonomy
The final frontier: teaching the agent to execute code. E2B sandboxed execution. Approval workflows. Script catalogs. The agent becomes truly autonomous.
Sandboxed Execution Architecture
- Safety
- Sandbox Orchestrator
- Agent
- Yes
- No
- Egress Allowlist
- Approval Flow
- Audit Log
- Script Catalog
- E2B Sandbox
- Isolated VM
- stdout/stderr
- Tool Selection
- Chat Request
- Needs Code?
- Direct Tool Call
- Response
Amp
"Done! The sandbox executor is deployed to Railway. E2B stdout capture is working. Phase 3b complete."
103 Days Later
Final Architecture
- AI Layer
- Services
- Backend - Railway
- Frontend - Vercel
- Tool Registry
- Claude/GPT
- Deep Reasoning
- Oracle
- Memory System
- Feedback Loop
- 43 advertising platforms
- Nango OAuth
- pgvector RAG
- PostgreSQL
- Billing System
- Stripe
- E2B Sandbox
- FastAPI
- Script Catalog
- Campaign IDE
- Next.js 15
- Chat Interface
- Document Editor
- YJS Real-time
8,437
Total Commits
876,298
Lines Added
254,819
Lines Removed
6
Ad Platforms
146
AI Commits
From a Python monolith to a chat-first IDE with sandboxed AI execution — built by humans and machines working together.