# dansugc/reverse-engineer-marketing architecture

> Architecture diagram of the GitHub repository dansugc/reverse-engineer-marketing, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dansugc/reverse-engineer-marketing
- Repository: https://github.com/dansugc/reverse-engineer-marketing

## Overview

REM reverse-engineers a company’s marketing from a website or app-store link, producing an evidence-backed marketing report and playbook. The main workflow parses the target, gathers public and optional paid-source evidence, analyzes channel strength, then renders a deterministic report or synthesizes one with an AI writer. The web app, CLI, MCP server, and run-diff capability expose that workflow in different ways. Collector coverage is summarized by source modules; several capabilities are documented in the README but their implementation details were not sampled, so their internal call paths are not asserted.

Main entry points: [`src/index.ts`](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/index.ts) (Collection orchestrator), [`src/web/server.ts`](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/web/server.ts) (Web app), [`src/cli.ts`](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/cli.ts) (CLI), [`src/sources/website.ts`](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/website.ts) (Website and funnel)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entrypoints["User interfaces"]
  node_cli["CLI<br/>[cli.ts]"]
  node_web["Web app<br/>[server.ts]"]
  node_mcp["MCP server<br/>[mcp.ts]"]
end

subgraph group_collection["Evidence collection"]
  node_orchestrator["Collection orchestrator<br/>[index.ts]"]
  node_website["Website and funnel<br/>[website.ts]"]
  node_html["HTML analysis<br/>[html.ts]"]
  node_paid["Paid ads<br/>[paid.ts]"]
  node_apple["Apple ads<br/>[apple-ads.ts]"]
  node_social["Organic social<br/>[social.ts]"]
  node_seo["SEO and GEO<br/>[seo.ts]"]
  node_people["Founders<br/>[people.ts]"]
  node_reddit["Community<br/>[reddit.ts]"]
  node_free["Apps and history<br/>[free.ts]"]
  node_tracking["Tracking stack<br/>[tracking.ts]"]
end

subgraph group_analysis["Analysis and reporting"]
  node_scorecard["Channel scorecard<br/>[scorecard.ts]"]
  node_synthesis["Report synthesis<br/>[synthesize.ts]"]
  node_markdown["Markdown report<br/>[markdown.ts]"]
  node_validation["Report validation<br/>[validate.ts]"]
  node_diff["Run comparison<br/>[diff.ts]"]
end

subgraph group_platform["Shared runtime"]
  node_target["Target parsing<br/>[target.ts]"]
  node_evidence[("Evidence store<br/>[evidence.ts]")]
  node_runs[("Saved runs<br/>[runs.ts]")]
  node_harness["Report guidance<br/>[harness.ts]"]
  node_http["Safe HTTP and cache<br/>[http.ts]"]
end

node_user(("Analyst"))
node_scrape["Scrape Creators"]
node_ai["Anthropic API"]

node_user -->|"runs"| node_cli
node_user -->|"submits link"| node_web
node_user -->|"invokes tools"| node_mcp
node_cli -->|"collects evidence"| node_orchestrator
node_web -->|"collects evidence"| node_orchestrator
node_orchestrator -->|"parses input"| node_target
node_orchestrator -->|"collects website"| node_website
node_orchestrator -->|"collects ads"| node_paid
node_orchestrator -->|"collects ads"| node_apple
node_orchestrator -->|"collects accounts"| node_social
node_orchestrator -->|"collects search"| node_seo
node_orchestrator -->|"collects founders"| node_people
node_orchestrator -->|"collects community"| node_reddit
node_orchestrator -->|"collects app data"| node_free
node_website -->|"parses pages"| node_html
node_website -->|"detects pixels"| node_tracking
node_orchestrator -->|"builds bundle"| node_evidence
node_orchestrator -->|"scores channels"| node_scorecard
node_cli -->|"renders report"| node_markdown
node_web -->|"renders report"| node_markdown
node_web -->|"writes report"| node_synthesis
node_synthesis -->|"loads guidance"| node_harness
node_synthesis -->|"requests report"| node_ai
node_web -->|"validates report"| node_validation
node_web -->|"saves and loads"| node_runs
node_cli -->|"compares runs"| node_diff
node_diff -->|"uses channel labels"| node_markdown
node_paid -.->|"requests ad data"| node_scrape
node_orchestrator -.->|"uses network helpers"| node_http

click node_cli "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/cli.ts"
click node_web "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/web/server.ts"
click node_mcp "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/mcp.ts"
click node_target "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/target.ts"
click node_orchestrator "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/index.ts"
click node_website "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/website.ts"
click node_html "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/html.ts"
click node_paid "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/paid.ts"
click node_apple "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/apple-ads.ts"
click node_social "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/social.ts"
click node_seo "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/seo.ts"
click node_people "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/people.ts"
click node_reddit "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/reddit.ts"
click node_free "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/free.ts"
click node_tracking "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/tracking.ts"
click node_evidence "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/evidence.ts"
click node_scorecard "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/analyze/scorecard.ts"
click node_synthesis "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/analyze/synthesize.ts"
click node_markdown "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/report/markdown.ts"
click node_validation "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/report/validate.ts"
click node_diff "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/report/diff.ts"
click node_runs "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/runs.ts"
click node_harness "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/harness.ts"
click node_http "https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/http.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_web,node_mcp toneBlue
class node_orchestrator,node_website,node_html,node_paid,node_apple,node_social,node_seo,node_people,node_reddit,node_free,node_tracking toneAmber
class node_scorecard,node_synthesis,node_markdown,node_validation,node_diff,node_ai toneMint
class node_target,node_evidence,node_runs,node_harness,node_http toneRose
class node_user,node_scrape toneIndigo
```

## Components

### User interfaces

- [CLI](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/cli.ts): `src/cli.ts`
- [Web app](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/web/server.ts): `src/web/server.ts`
- [MCP server](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/mcp.ts): `src/mcp.ts`

### Evidence collection

- [Collection orchestrator](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/index.ts): `src/index.ts`
- [Website and funnel](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/website.ts): `src/sources/website.ts`
- [HTML analysis](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/html.ts): `src/sources/html.ts`
- [Paid ads](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/paid.ts): `src/sources/paid.ts`
- [Apple ads](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/apple-ads.ts): `src/sources/apple-ads.ts`
- [Organic social](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/social.ts): `src/sources/social.ts`
- [SEO and GEO](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/seo.ts): `src/sources/seo.ts`
- [Founders](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/people.ts): `src/sources/people.ts`
- [Community](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/reddit.ts): `src/sources/reddit.ts`
- [Apps and history](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/free.ts): `src/sources/free.ts`
- [Tracking stack](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/sources/tracking.ts): `src/sources/tracking.ts`

### Analysis and reporting

- [Channel scorecard](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/analyze/scorecard.ts): `src/analyze/scorecard.ts`
- [Report synthesis](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/analyze/synthesize.ts): `src/analyze/synthesize.ts`
- [Markdown report](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/report/markdown.ts): `src/report/markdown.ts`
- [Report validation](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/report/validate.ts): `src/report/validate.ts`
- [Run comparison](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/report/diff.ts): `src/report/diff.ts`

### Shared runtime

- [Target parsing](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/target.ts): `src/target.ts`
- [Evidence store](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/evidence.ts): `src/evidence.ts`
- [Saved runs](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/runs.ts): `src/runs.ts`
- [Report guidance](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/harness.ts): `src/harness.ts`
- [Safe HTTP and cache](https://github.com/dansugc/reverse-engineer-marketing/blob/main/src/http.ts): `src/http.ts`

### Other components

- **Analyst**
- **Scrape Creators**
- **Anthropic API**

## Connections

- Analyst → CLI: runs (evidence: `README.md`)
- Analyst → Web app: submits link (evidence: `README.md`)
- Analyst → MCP server: invokes tools (evidence: `README.md`)
- CLI → Collection orchestrator: collects evidence (evidence: `src/cli.ts`)
- Web app → Collection orchestrator: collects evidence (evidence: `src/web/server.ts`)
- Collection orchestrator → Target parsing: parses input (evidence: `src/index.ts`)
- Collection orchestrator → Website and funnel: collects website (evidence: `src/index.ts`)
- Collection orchestrator → Paid ads: collects ads (evidence: `src/index.ts`)
- Collection orchestrator → Apple ads: collects ads (evidence: `src/index.ts`)
- Collection orchestrator → Organic social: collects accounts (evidence: `src/index.ts`)
- Collection orchestrator → SEO and GEO: collects search (evidence: `src/index.ts`)
- Collection orchestrator → Founders: collects founders (evidence: `src/index.ts`)
- Collection orchestrator → Community: collects community (evidence: `src/index.ts`)
- Collection orchestrator → Apps and history: collects app data (evidence: `src/index.ts`)
- Website and funnel → HTML analysis: parses pages (evidence: `src/sources/website.ts`)
- Website and funnel → Tracking stack: detects pixels (evidence: `src/sources/website.ts`)
- Collection orchestrator → Evidence store: builds bundle (evidence: `src/index.ts`)
- Collection orchestrator → Channel scorecard: scores channels (evidence: `src/index.ts`)
- CLI → Markdown report: renders report (evidence: `src/cli.ts`)
- Web app → Markdown report: renders report (evidence: `src/web/server.ts`)
- Web app → Report synthesis: writes report (evidence: `src/web/server.ts`)
- Report synthesis → Report guidance: loads guidance (evidence: `src/analyze/synthesize.ts`)
- Report synthesis → Anthropic API: requests report (evidence: `src/analyze/synthesize.ts`)
- Web app → Report validation: validates report (evidence: `src/web/server.ts`)
- Web app → Saved runs: saves and loads (evidence: `src/web/server.ts`)
- CLI → Run comparison: compares runs (evidence: `src/cli.ts`)
- Run comparison → Markdown report: uses channel labels (evidence: `src/report/diff.ts`)
- Paid ads → Scrape Creators: requests ad data
- Collection orchestrator → Safe HTTP and cache: uses network helpers
