# kabiracharya/snaffalyzer architecture

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

- Interactive diagram: https://gitdiagram.com/kabiracharya/snaffalyzer
- Repository: https://github.com/kabiracharya/snaffalyzer

## Overview

Snaffalyzer is an offline browser application for parsing and triaging Snaffler scan logs. The main workflow reads a dropped or selected file, parses plain or TSV records and scan metadata, then presents findings for visual analysis and filtering. Users can export findings or generate a standalone HTML report, optionally encrypted. The README also documents CLI report generation. Dashboard composition and some reporting/export wiring are represented from documented capabilities and the tree; those unsampled implementations are not independently verified.

Main entry points: [`src/components/Dashboard.tsx`](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/Dashboard.tsx) (Dashboard), [`src/App.tsx`](https://github.com/kabiracharya/snaffalyzer/blob/main/src/App.tsx) (Workflow State), [`src/utils/reportGenerator.ts`](https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/reportGenerator.ts) (HTML Generator), [`src/components/DropZone.tsx`](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/DropZone.tsx) (File Drop)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Log Intake"]
  node_drop["File Drop<br/>[DropZone.tsx]"]
  node_app["Workflow State<br/>[App.tsx]"]
  node_parser["Log Parser<br/>[parser.ts]"]
  node_warning["Invalid Warning"]
end

subgraph group_triage["Triage Dashboard"]
  node_dashboard["Dashboard<br/>[Dashboard.tsx]"]
  node_metrics["Scan Metrics<br/>[MetricsRow.tsx]"]
  node_charts["Charts and Summary<br/>[Charts.tsx]"]
  node_findings["Findings Table<br/>[FindingsTable.tsx]"]
  node_info["Scan Information<br/>[InfoSection.tsx]"]
end

subgraph group_reports["Reports and Export"]
  node_save["Save Report<br/>[SaveModal.tsx]"]
  node_generator["HTML Generator<br/>[reportGenerator.ts]"]
  node_crypto["Report Encryption<br/>[crypto.ts]"]
  node_template["Standalone Template"]
  node_export["CSV and Clipboard<br/>[export.ts]"]
  node_cli["CLI Report Generation<br/>[generate-report.sh]"]
  node_report["HTML Report"]
  node_csv["CSV or Clipboard Output"]
end

node_user(("Analyst"))

node_user -->|"selects or drops"| node_drop
node_drop -->|"delivers file"| node_app
node_app -->|"parses text"| node_parser
node_parser -->|"returns findings"| node_app
node_app -->|"shows warning"| node_warning
node_app -->|"supplies scan data"| node_dashboard
node_dashboard -->|"renders metrics"| node_metrics
node_dashboard -->|"renders summaries"| node_charts
node_dashboard -->|"renders findings"| node_findings
node_dashboard -->|"renders scan info"| node_info
node_user -->|"reviews and filters"| node_dashboard
node_dashboard -->|"opens report save"| node_save
node_save -->|"requests report"| node_generator
node_generator -.->|"encrypts optionally"| node_crypto
node_generator -->|"loads template"| node_template
node_generator -->|"downloads HTML"| node_report
node_dashboard -->|"exports findings"| node_export
node_export -->|"downloads or copies"| node_csv
node_user -->|"provides log file"| node_cli
node_cli -->|"generates HTML"| node_report

click node_drop "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/DropZone.tsx"
click node_app "https://github.com/kabiracharya/snaffalyzer/blob/main/src/App.tsx"
click node_parser "https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/parser.ts"
click node_warning "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/InvalidWarningModal.tsx"
click node_dashboard "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/Dashboard.tsx"
click node_metrics "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/MetricsRow.tsx"
click node_charts "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/Charts.tsx"
click node_findings "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/FindingsTable.tsx"
click node_info "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/InfoSection.tsx"
click node_save "https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/SaveModal.tsx"
click node_generator "https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/reportGenerator.ts"
click node_crypto "https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/crypto.ts"
click node_template "https://github.com/kabiracharya/snaffalyzer/blob/main/public/report-template.html"
click node_export "https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/export.ts"
click node_cli "https://github.com/kabiracharya/snaffalyzer/blob/main/generate-report.sh"

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_drop,node_app,node_parser,node_warning toneBlue
class node_dashboard,node_metrics,node_charts,node_findings,node_info toneAmber
class node_save,node_generator,node_crypto,node_template,node_export,node_cli,node_report,node_csv toneMint
class node_user toneIndigo
```

## Components

### Log Intake

- [File Drop](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/DropZone.tsx): `src/components/DropZone.tsx`
- [Workflow State](https://github.com/kabiracharya/snaffalyzer/blob/main/src/App.tsx): `src/App.tsx`
- [Log Parser](https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/parser.ts): `src/utils/parser.ts`
- [Invalid Warning](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/InvalidWarningModal.tsx): `src/components/InvalidWarningModal.tsx`

### Triage Dashboard

- [Dashboard](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/Dashboard.tsx): `src/components/Dashboard.tsx`
- [Scan Metrics](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/MetricsRow.tsx): `src/components/MetricsRow.tsx`
- [Charts and Summary](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/Charts.tsx): `src/components/Charts.tsx`
- [Findings Table](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/FindingsTable.tsx): `src/components/FindingsTable.tsx`
- [Scan Information](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/InfoSection.tsx): `src/components/InfoSection.tsx`

### Reports and Export

- [Save Report](https://github.com/kabiracharya/snaffalyzer/blob/main/src/components/SaveModal.tsx): `src/components/SaveModal.tsx`
- [HTML Generator](https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/reportGenerator.ts): `src/utils/reportGenerator.ts`
- [Report Encryption](https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/crypto.ts): `src/utils/crypto.ts`
- [Standalone Template](https://github.com/kabiracharya/snaffalyzer/blob/main/public/report-template.html): `public/report-template.html`
- [CSV and Clipboard](https://github.com/kabiracharya/snaffalyzer/blob/main/src/utils/export.ts): `src/utils/export.ts`
- [CLI Report Generation](https://github.com/kabiracharya/snaffalyzer/blob/main/generate-report.sh): `generate-report.sh`
- **HTML Report**
- **CSV or Clipboard Output**

### Other components

- **Analyst**

## Connections

- Analyst → File Drop: selects or drops
- File Drop → Workflow State: delivers file
- Workflow State → Log Parser: parses text
- Log Parser → Workflow State: returns findings
- Workflow State → Invalid Warning: shows warning
- Workflow State → Dashboard: supplies scan data
- Dashboard → Scan Metrics: renders metrics
- Dashboard → Charts and Summary: renders summaries
- Dashboard → Findings Table: renders findings
- Dashboard → Scan Information: renders scan info
- Analyst → Dashboard: reviews and filters
- Dashboard → Save Report: opens report save
- Save Report → HTML Generator: requests report
- HTML Generator → Report Encryption: encrypts optionally
- HTML Generator → Standalone Template: loads template
- HTML Generator → HTML Report: downloads HTML
- Dashboard → CSV and Clipboard: exports findings
- CSV and Clipboard → CSV or Clipboard Output: downloads or copies
- Analyst → CLI Report Generation: provides log file
- CLI Report Generation → HTML Report: generates HTML
