# uynilo9/unipfp architecture

> Architecture diagram of the GitHub repository uynilo9/unipfp, 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/uynilo9/unipfp
- Repository: https://github.com/uynilo9/unipfp

## Overview

Unipfp is a personal-use CLI that applies one chosen profile image across selected social accounts. Its workflow validates the local image, gathers platform choices and confirmation, then creates browser- or API-based updaters and runs them sequentially. Browser updates check login state, log in and verify when needed, persist cookies, and upload the image; GitLab is the documented API route. The README documents the uniform-update goal and setup, while sampled adapters show browser login and upload behavior. Other platform-specific details are represented from the tree and entry-point wiring, not inspected source.

Main entry points: [`src/unipfp.ts`](https://github.com/uynilo9/unipfp/blob/main/src/unipfp.ts) (CLI coordinator), [`src/utils/update.ts`](https://github.com/uynilo9/unipfp/blob/main/src/utils/update.ts) (Updater orchestration), [`src/utils/totp.ts`](https://github.com/uynilo9/unipfp/blob/main/src/utils/totp.ts) (TOTP generation), [`src/plats/discord.ts`](https://github.com/uynilo9/unipfp/blob/main/src/plats/discord.ts) (Discord adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["CLI workflow"]
  node_cli["CLI coordinator<br/>[unipfp.ts]"]
  node_image_check["Image validation<br/>[image.ts]"]
end

subgraph group_runtime["Update runtime"]
  node_browser_setup["Browser setup<br/>[browser.ts]"]
  node_updater["Updater orchestration<br/>[update.ts]"]
  node_contracts["Platform contracts<br/>[types.ts]"]
  node_totp["TOTP generation<br/>[totp.ts]"]
  node_cookie_state["Cookie state<br/>[update.ts]"]
end

subgraph group_browser_adapters["Browser platforms"]
  node_discord["Discord adapter<br/>[discord.ts]"]
  node_github["GitHub adapter<br/>[github.ts]"]
  node_instagram["Instagram adapter<br/>[instagram.ts]"]
  node_plex["Plex adapter<br/>[plex.ts]"]
  node_reddit["Reddit adapter<br/>[reddit.ts]"]
  node_steam["Steam adapter<br/>[steam.ts]"]
  node_threads["Threads adapter<br/>[threads.ts]"]
  node_twitch["Twitch adapter<br/>[twitch.ts]"]
  node_twitterx["Twitter X adapter<br/>[twitterx.ts]"]
end

subgraph group_api_adapters["API platform"]
  node_gitlab["GitLab adapter<br/>[gitlab.ts]"]
end

node_user(("User"))
node_chromium["Chromium browser"]
node_social_services{{"Social platforms"}}
node_gitlab_service{{"GitLab service"}}

node_user -->|"provides choices"| node_cli
node_cli -->|"validates image"| node_image_check
node_cli -->|"creates browser"| node_browser_setup
node_browser_setup -->|"launches"| node_chromium
node_cli -->|"prepares and dispatches"| node_updater
node_updater -->|"uses contracts"| node_contracts
node_cli -->|"selects adapter"| node_discord
node_cli -->|"selects adapter"| node_github
node_cli -->|"selects adapter"| node_instagram
node_cli -->|"selects adapter"| node_plex
node_cli -->|"selects adapter"| node_reddit
node_cli -->|"selects adapter"| node_steam
node_cli -->|"selects adapter"| node_threads
node_cli -->|"selects adapter"| node_twitch
node_cli -->|"selects adapter"| node_twitterx
node_cli -->|"selects API adapter"| node_gitlab
node_updater -->|"calls browser workflow"| node_discord
node_updater -->|"calls browser workflow"| node_github
node_updater -->|"calls browser workflow"| node_instagram
node_updater -->|"calls browser workflow"| node_plex
node_updater -->|"calls browser workflow"| node_reddit
node_updater -->|"calls browser workflow"| node_steam
node_updater -->|"calls browser workflow"| node_threads
node_updater -->|"calls browser workflow"| node_twitch
node_updater -->|"calls browser workflow"| node_twitterx
node_updater -->|"calls API update"| node_gitlab
node_updater -->|"reads and writes"| node_cookie_state
node_discord -.->|"generates code"| node_totp
node_plex -.->|"generates code"| node_totp
node_reddit -.->|"generates code"| node_totp
node_threads -.->|"generates code"| node_totp
node_twitch -.->|"generates code"| node_totp
node_twitterx -.->|"generates code"| node_totp
node_discord -->|"checks login and updates"| node_social_services
node_github -->|"checks login and updates"| node_social_services
node_instagram -->|"checks login and updates"| node_social_services
node_plex -->|"checks login and updates"| node_social_services
node_reddit -->|"checks login and updates"| node_social_services
node_steam -->|"checks login and updates"| node_social_services
node_threads -->|"checks login and updates"| node_social_services
node_twitch -->|"checks login and updates"| node_social_services
node_twitterx -->|"checks login and updates"| node_social_services
node_gitlab -->|"updates via API"| node_gitlab_service

click node_cli "https://github.com/uynilo9/unipfp/blob/main/src/unipfp.ts"
click node_image_check "https://github.com/uynilo9/unipfp/blob/main/src/utils/image.ts"
click node_browser_setup "https://github.com/uynilo9/unipfp/blob/main/src/utils/browser.ts"
click node_updater "https://github.com/uynilo9/unipfp/blob/main/src/utils/update.ts"
click node_contracts "https://github.com/uynilo9/unipfp/blob/main/src/types.ts"
click node_totp "https://github.com/uynilo9/unipfp/blob/main/src/utils/totp.ts"
click node_cookie_state "https://github.com/uynilo9/unipfp/blob/main/src/utils/update.ts"
click node_discord "https://github.com/uynilo9/unipfp/blob/main/src/plats/discord.ts"
click node_github "https://github.com/uynilo9/unipfp/blob/main/src/plats/github.ts"
click node_instagram "https://github.com/uynilo9/unipfp/blob/main/src/plats/instagram.ts"
click node_plex "https://github.com/uynilo9/unipfp/blob/main/src/plats/plex.ts"
click node_reddit "https://github.com/uynilo9/unipfp/blob/main/src/plats/reddit.ts"
click node_steam "https://github.com/uynilo9/unipfp/blob/main/src/plats/steam.ts"
click node_threads "https://github.com/uynilo9/unipfp/blob/main/src/plats/threads.ts"
click node_twitch "https://github.com/uynilo9/unipfp/blob/main/src/plats/twitch.ts"
click node_twitterx "https://github.com/uynilo9/unipfp/blob/main/src/plats/twitterx.ts"
click node_gitlab "https://github.com/uynilo9/unipfp/blob/main/src/plats/gitlab.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_image_check,node_user,node_chromium toneBlue
class node_browser_setup,node_updater,node_contracts,node_totp,node_cookie_state toneAmber
class node_discord,node_github,node_instagram,node_plex,node_reddit,node_steam,node_threads,node_twitch,node_twitterx toneMint
class node_gitlab toneRose
class node_social_services,node_gitlab_service toneIndigo
```

## Components

### CLI workflow

- [CLI coordinator](https://github.com/uynilo9/unipfp/blob/main/src/unipfp.ts): `src/unipfp.ts`
- [Image validation](https://github.com/uynilo9/unipfp/blob/main/src/utils/image.ts): `src/utils/image.ts`

### Update runtime

- [Browser setup](https://github.com/uynilo9/unipfp/blob/main/src/utils/browser.ts): `src/utils/browser.ts`
- [Updater orchestration](https://github.com/uynilo9/unipfp/blob/main/src/utils/update.ts): `src/utils/update.ts`
- [Platform contracts](https://github.com/uynilo9/unipfp/blob/main/src/types.ts): `src/types.ts`
- [TOTP generation](https://github.com/uynilo9/unipfp/blob/main/src/utils/totp.ts): `src/utils/totp.ts`
- [Cookie state](https://github.com/uynilo9/unipfp/blob/main/src/utils/update.ts): `src/utils/update.ts`

### Browser platforms

- [Discord adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/discord.ts): `src/plats/discord.ts`
- [GitHub adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/github.ts): `src/plats/github.ts`
- [Instagram adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/instagram.ts): `src/plats/instagram.ts`
- [Plex adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/plex.ts): `src/plats/plex.ts`
- [Reddit adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/reddit.ts): `src/plats/reddit.ts`
- [Steam adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/steam.ts): `src/plats/steam.ts`
- [Threads adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/threads.ts): `src/plats/threads.ts`
- [Twitch adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/twitch.ts): `src/plats/twitch.ts`
- [Twitter X adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/twitterx.ts): `src/plats/twitterx.ts`

### API platform

- [GitLab adapter](https://github.com/uynilo9/unipfp/blob/main/src/plats/gitlab.ts): `src/plats/gitlab.ts`

### Other components

- **User**
- **Chromium browser**
- **Social platforms**
- **GitLab service**

## Connections

- User → CLI coordinator: provides choices
- CLI coordinator → Image validation: validates image
- CLI coordinator → Browser setup: creates browser
- Browser setup → Chromium browser: launches
- CLI coordinator → Updater orchestration: prepares and dispatches
- Updater orchestration → Platform contracts: uses contracts
- CLI coordinator → Discord adapter: selects adapter
- CLI coordinator → GitHub adapter: selects adapter
- CLI coordinator → Instagram adapter: selects adapter
- CLI coordinator → Plex adapter: selects adapter
- CLI coordinator → Reddit adapter: selects adapter
- CLI coordinator → Steam adapter: selects adapter
- CLI coordinator → Threads adapter: selects adapter
- CLI coordinator → Twitch adapter: selects adapter
- CLI coordinator → Twitter X adapter: selects adapter
- CLI coordinator → GitLab adapter: selects API adapter
- Updater orchestration → Discord adapter: calls browser workflow
- Updater orchestration → GitHub adapter: calls browser workflow
- Updater orchestration → Instagram adapter: calls browser workflow
- Updater orchestration → Plex adapter: calls browser workflow
- Updater orchestration → Reddit adapter: calls browser workflow
- Updater orchestration → Steam adapter: calls browser workflow
- Updater orchestration → Threads adapter: calls browser workflow
- Updater orchestration → Twitch adapter: calls browser workflow
- Updater orchestration → Twitter X adapter: calls browser workflow
- Updater orchestration → GitLab adapter: calls API update
- Updater orchestration → Cookie state: reads and writes
- Discord adapter → TOTP generation: generates code
- Plex adapter → TOTP generation: generates code
- Reddit adapter → TOTP generation: generates code
- Threads adapter → TOTP generation: generates code
- Twitch adapter → TOTP generation: generates code
- Twitter X adapter → TOTP generation: generates code
- Discord adapter → Social platforms: checks login and updates
- GitHub adapter → Social platforms: checks login and updates
- Instagram adapter → Social platforms: checks login and updates
- Plex adapter → Social platforms: checks login and updates
- Reddit adapter → Social platforms: checks login and updates
- Steam adapter → Social platforms: checks login and updates
- Threads adapter → Social platforms: checks login and updates
- Twitch adapter → Social platforms: checks login and updates
- Twitter X adapter → Social platforms: checks login and updates
- GitLab adapter → GitLab service: updates via API
