# bit-waiz/bit-protector architecture

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

- Interactive diagram: https://gitdiagram.com/bit-waiz/bit-protector
- Repository: https://github.com/bit-waiz/bit-protector

## Overview

Bit Protector is a client-side file metadata inspection and sanitization app. Users select a file, review detected metadata and a risk verdict, choose categories to remove, then clean, re-inspect, and download the result. The README documents image, PDF, and Office-format support; the sampled extractor and sanitizer excerpts do not expose every format-specific implementation or all UI callback wiring.

Main entry points: [`src/App.tsx`](https://github.com/bit-waiz/bit-protector/blob/main/src/App.tsx) (App workflow), [`src/lib/sanitizer.ts`](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts) (Format cleaning), [`src/lib/extractor.ts`](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts) (Format extraction), [`src/components/PurgeControls.tsx`](https://github.com/bit-waiz/bit-protector/blob/main/src/components/PurgeControls.tsx) (Purge choices)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_app["App workflow<br/>[App.tsx]"]
  node_dropzone["File selection<br/>[Dropzone.tsx]"]
  node_risk["Risk verdict"]
  node_metadata["Metadata review<br/>[MetadataTable.tsx]"]
  node_controls["Purge choices<br/>[PurgeControls.tsx]"]
  node_faq["Privacy FAQ<br/>[FaqSection.tsx]"]
end

subgraph group_inspection["Metadata inspection"]
  node_extractor["Format extraction<br/>[extractor.ts]"]
  node_imageformats["Image metadata<br/>[extractor.ts]"]
  node_pdfformat["PDF metadata<br/>[extractor.ts]"]
  node_officeformat["Office metadata<br/>[extractor.ts]"]
end

subgraph group_cleaning["Sanitization"]
  node_sanitizer["Format cleaning<br/>[sanitizer.ts]"]
  node_imageclean["Image cleaning<br/>[sanitizer.ts]"]
  node_pdfclean["PDF cleaning<br/>[sanitizer.ts]"]
  node_officeclean["Office cleaning<br/>[sanitizer.ts]"]
  node_download["Clean download<br/>[App.tsx]"]
end

subgraph group_shared["Shared model"]
  node_types["Result and options<br/>[types.ts]"]
end

node_user(("User"))

node_user -->|"selects file"| node_dropzone
node_dropzone -->|"passes file"| node_app
node_app -->|"inspects file"| node_extractor
node_extractor -->|"parses image"| node_imageformats
node_extractor -->|"parses PDF"| node_pdfformat
node_extractor -->|"parses Office"| node_officeformat
node_extractor -->|"returns result"| node_types
node_app -->|"supplies inspection"| node_risk
node_app -->|"supplies inspection"| node_metadata
node_app -->|"supplies inspection"| node_controls
node_user -->|"chooses categories"| node_controls
node_controls -->|"updates options"| node_app
node_app -->|"cleans file"| node_sanitizer
node_sanitizer -->|"cleans image"| node_imageclean
node_sanitizer -->|"cleans PDF"| node_pdfclean
node_sanitizer -->|"cleans Office"| node_officeclean
node_sanitizer -->|"verifies output"| node_extractor
node_sanitizer -->|"returns result"| node_types
node_app -->|"starts download"| node_download
node_download -->|"provides file"| node_user
node_app -->|"shows FAQ"| node_faq

click node_app "https://github.com/bit-waiz/bit-protector/blob/main/src/App.tsx"
click node_dropzone "https://github.com/bit-waiz/bit-protector/blob/main/src/components/Dropzone.tsx"
click node_risk "https://github.com/bit-waiz/bit-protector/blob/main/src/components/RiskVerdictBanner.tsx"
click node_metadata "https://github.com/bit-waiz/bit-protector/blob/main/src/components/MetadataTable.tsx"
click node_controls "https://github.com/bit-waiz/bit-protector/blob/main/src/components/PurgeControls.tsx"
click node_faq "https://github.com/bit-waiz/bit-protector/blob/main/src/components/FaqSection.tsx"
click node_extractor "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts"
click node_imageformats "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts"
click node_pdfformat "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts"
click node_officeformat "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts"
click node_sanitizer "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts"
click node_imageclean "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts"
click node_pdfclean "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts"
click node_officeclean "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts"
click node_download "https://github.com/bit-waiz/bit-protector/blob/main/src/App.tsx"
click node_types "https://github.com/bit-waiz/bit-protector/blob/main/src/lib/types.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_app,node_dropzone,node_risk,node_metadata,node_controls,node_faq,node_user toneBlue
class node_extractor,node_imageformats,node_pdfformat,node_officeformat toneAmber
class node_sanitizer,node_imageclean,node_pdfclean,node_officeclean,node_download toneMint
class node_types toneRose
```

## Components

### User interface

- [App workflow](https://github.com/bit-waiz/bit-protector/blob/main/src/App.tsx): `src/App.tsx`
- [File selection](https://github.com/bit-waiz/bit-protector/blob/main/src/components/Dropzone.tsx): `src/components/Dropzone.tsx`
- [Risk verdict](https://github.com/bit-waiz/bit-protector/blob/main/src/components/RiskVerdictBanner.tsx): `src/components/RiskVerdictBanner.tsx`
- [Metadata review](https://github.com/bit-waiz/bit-protector/blob/main/src/components/MetadataTable.tsx): `src/components/MetadataTable.tsx`
- [Purge choices](https://github.com/bit-waiz/bit-protector/blob/main/src/components/PurgeControls.tsx): `src/components/PurgeControls.tsx`
- [Privacy FAQ](https://github.com/bit-waiz/bit-protector/blob/main/src/components/FaqSection.tsx): `src/components/FaqSection.tsx`

### Metadata inspection

- [Format extraction](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts): `src/lib/extractor.ts`
- [Image metadata](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts): `src/lib/extractor.ts`
- [PDF metadata](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts): `src/lib/extractor.ts`
- [Office metadata](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/extractor.ts): `src/lib/extractor.ts`

### Sanitization

- [Format cleaning](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts): `src/lib/sanitizer.ts`
- [Image cleaning](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts): `src/lib/sanitizer.ts`
- [PDF cleaning](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts): `src/lib/sanitizer.ts`
- [Office cleaning](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/sanitizer.ts): `src/lib/sanitizer.ts`
- [Clean download](https://github.com/bit-waiz/bit-protector/blob/main/src/App.tsx): `src/App.tsx`

### Shared model

- [Result and options](https://github.com/bit-waiz/bit-protector/blob/main/src/lib/types.ts): `src/lib/types.ts`

### Other components

- **User**

## Connections

- User → File selection: selects file
- File selection → App workflow: passes file
- App workflow → Format extraction: inspects file
- Format extraction → Image metadata: parses image
- Format extraction → PDF metadata: parses PDF
- Format extraction → Office metadata: parses Office
- Format extraction → Result and options: returns result
- App workflow → Risk verdict: supplies inspection
- App workflow → Metadata review: supplies inspection
- App workflow → Purge choices: supplies inspection
- User → Purge choices: chooses categories
- Purge choices → App workflow: updates options
- App workflow → Format cleaning: cleans file
- Format cleaning → Image cleaning: cleans image
- Format cleaning → PDF cleaning: cleans PDF
- Format cleaning → Office cleaning: cleans Office
- Format cleaning → Format extraction: verifies output
- Format cleaning → Result and options: returns result
- App workflow → Clean download: starts download
- Clean download → User: provides file
- App workflow → Privacy FAQ: shows FAQ
