# nooneknowspeter/campi-cli architecture

> Architecture diagram of the GitHub repository nooneknowspeter/campi-cli, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/nooneknowspeter/campi-cli
- Repository: https://github.com/nooneknowspeter/campi-cli

## Overview

campi-cli is a command-line tool for managing marketing campaigns as code. The documented workflow is to initialize a project, validate its configuration and manifests, plan changes from a manifest, then apply them; users can also import existing campaigns into state and manage configuration. The README documents platform support as a goal, with Meta and TikTok implemented and other adapters incomplete. Source excerpts were unavailable, so edges are limited to relationships documented in the README.

Main entry points: [`src/cli/commands.zig`](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands.zig) (Command dispatch), [`src/cli/commands/init.zig`](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/init.zig) (Initialize project), [`src/cli/commands/validate.zig`](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/validate.zig) (Validate inputs), [`src/cli/commands/plan.zig`](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/plan.zig) (Plan changes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI workflow"]
  node_entry["CLI entry<br/>[main.zig]"]
  node_commands["Command dispatch<br/>[commands.zig]"]
  node_init["Initialize project<br/>[init.zig]"]
  node_validate["Validate inputs<br/>[validate.zig]"]
  node_plan_cmd["Plan changes<br/>[plan.zig]"]
  node_apply["Apply changes<br/>[apply.zig]"]
  node_import["Import campaigns<br/>[import.zig]"]
  node_config_cmd["Manage config<br/>[config.zig]"]
  node_state_cmd["Inspect state<br/>[state.zig]"]
end

subgraph group_inputs["Campaign inputs"]
  node_config["Configuration<br/>[main.zig]"]
  node_manifest["Campaign manifest<br/>[main.zig]"]
  node_plan["Change plan<br/>[main.zig]"]
  node_state[("Campaign state<br/>[main.zig]")]
end

subgraph group_platforms["Platform integrations"]
  node_platforms["Platform adapters<br/>[main.zig]"]
  node_meta["Meta adapter<br/>[main.zig]"]
  node_tiktok["TikTok adapter<br/>[main.zig]"]
end

subgraph group_runtime["Runtime support"]
  node_filesystem["Filesystem<br/>[main.zig]"]
  node_artifacts["Artifact handling<br/>[main.zig]"]
end

node_user(("Operator"))
node_marketing_apis(("Marketing platforms"))

node_user -->|"runs CLI"| node_entry
node_entry -->|"dispatches commands"| node_commands
node_commands -->|"dispatches"| node_init
node_commands -->|"dispatches"| node_validate
node_commands -->|"dispatches"| node_plan_cmd
node_commands -->|"dispatches"| node_apply
node_commands -->|"dispatches"| node_import
node_commands -->|"dispatches"| node_config_cmd
node_commands -->|"dispatches"| node_state_cmd
node_init -->|"writes base config"| node_config
node_init -->|"prepares directory"| node_filesystem
node_validate -->|"validates"| node_config
node_validate -->|"validates"| node_manifest
node_plan_cmd -->|"reads"| node_manifest
node_plan_cmd -->|"computes changes"| node_plan
node_apply -->|"applies changes"| node_plan
node_config_cmd -->|"manages"| node_config
node_state_cmd -->|"reads and compares"| node_state
node_import -->|"imports campaigns"| node_state
node_platforms -->|"provides adapter"| node_meta
node_platforms -->|"provides adapter"| node_tiktok
node_meta -.->|"connects to"| node_marketing_apis
node_tiktok -.->|"connects to"| node_marketing_apis

click node_entry "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/main.zig"
click node_commands "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands.zig"
click node_init "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/init.zig"
click node_validate "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/validate.zig"
click node_plan_cmd "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/plan.zig"
click node_apply "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/apply.zig"
click node_import "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/import.zig"
click node_config_cmd "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/config.zig"
click node_state_cmd "https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/state.zig"
click node_config "https://github.com/nooneknowspeter/campi-cli/blob/main/src/config/main.zig"
click node_manifest "https://github.com/nooneknowspeter/campi-cli/blob/main/src/manifest/main.zig"
click node_plan "https://github.com/nooneknowspeter/campi-cli/blob/main/src/plan/main.zig"
click node_state "https://github.com/nooneknowspeter/campi-cli/blob/main/src/state/main.zig"
click node_filesystem "https://github.com/nooneknowspeter/campi-cli/blob/main/src/fs/main.zig"
click node_artifacts "https://github.com/nooneknowspeter/campi-cli/blob/main/src/artifacts/main.zig"
click node_platforms "https://github.com/nooneknowspeter/campi-cli/blob/main/src/platforms/main.zig"
click node_meta "https://github.com/nooneknowspeter/campi-cli/blob/main/src/platforms/meta/main.zig"
click node_tiktok "https://github.com/nooneknowspeter/campi-cli/blob/main/src/platforms/tiktok/main.zig"

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_entry,node_commands,node_init,node_validate,node_plan_cmd,node_apply,node_import,node_config_cmd,node_state_cmd toneBlue
class node_config,node_manifest,node_plan,node_state toneAmber
class node_platforms,node_meta,node_tiktok toneMint
class node_filesystem,node_artifacts toneRose
class node_user,node_marketing_apis toneIndigo
```

## Components

### CLI workflow

- [CLI entry](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/main.zig): `src/cli/main.zig`
- [Command dispatch](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands.zig): `src/cli/commands.zig`
- [Initialize project](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/init.zig): `src/cli/commands/init.zig`
- [Validate inputs](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/validate.zig): `src/cli/commands/validate.zig`
- [Plan changes](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/plan.zig): `src/cli/commands/plan.zig`
- [Apply changes](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/apply.zig): `src/cli/commands/apply.zig`
- [Import campaigns](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/import.zig): `src/cli/commands/import.zig`
- [Manage config](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/config.zig): `src/cli/commands/config.zig`
- [Inspect state](https://github.com/nooneknowspeter/campi-cli/blob/main/src/cli/commands/state.zig): `src/cli/commands/state.zig`

### Campaign inputs

- [Configuration](https://github.com/nooneknowspeter/campi-cli/blob/main/src/config/main.zig): `src/config/main.zig`
- [Campaign manifest](https://github.com/nooneknowspeter/campi-cli/blob/main/src/manifest/main.zig): `src/manifest/main.zig`
- [Change plan](https://github.com/nooneknowspeter/campi-cli/blob/main/src/plan/main.zig): `src/plan/main.zig`
- [Campaign state](https://github.com/nooneknowspeter/campi-cli/blob/main/src/state/main.zig): `src/state/main.zig`

### Platform integrations

- [Platform adapters](https://github.com/nooneknowspeter/campi-cli/blob/main/src/platforms/main.zig): `src/platforms/main.zig`
- [Meta adapter](https://github.com/nooneknowspeter/campi-cli/blob/main/src/platforms/meta/main.zig): `src/platforms/meta/main.zig`
- [TikTok adapter](https://github.com/nooneknowspeter/campi-cli/blob/main/src/platforms/tiktok/main.zig): `src/platforms/tiktok/main.zig`

### Runtime support

- [Filesystem](https://github.com/nooneknowspeter/campi-cli/blob/main/src/fs/main.zig): `src/fs/main.zig`
- [Artifact handling](https://github.com/nooneknowspeter/campi-cli/blob/main/src/artifacts/main.zig): `src/artifacts/main.zig`

### Other components

- **Operator**
- **Marketing platforms**

## Connections

- Operator → CLI entry: runs CLI
- CLI entry → Command dispatch: dispatches commands
- Command dispatch → Initialize project: dispatches
- Command dispatch → Validate inputs: dispatches
- Command dispatch → Plan changes: dispatches
- Command dispatch → Apply changes: dispatches
- Command dispatch → Import campaigns: dispatches
- Command dispatch → Manage config: dispatches
- Command dispatch → Inspect state: dispatches
- Initialize project → Configuration: writes base config
- Initialize project → Filesystem: prepares directory
- Validate inputs → Configuration: validates
- Validate inputs → Campaign manifest: validates
- Plan changes → Campaign manifest: reads
- Plan changes → Change plan: computes changes
- Apply changes → Change plan: applies changes
- Manage config → Configuration: manages
- Inspect state → Campaign state: reads and compares
- Import campaigns → Campaign state: imports campaigns
- Platform adapters → Meta adapter: provides adapter
- Platform adapters → TikTok adapter: provides adapter
- Meta adapter → Marketing platforms: connects to
- TikTok adapter → Marketing platforms: connects to
