# navruzbek05/txt2vcf architecture

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

- Interactive diagram: https://gitdiagram.com/navruzbek05/txt2vcf
- Repository: https://github.com/navruzbek05/txt2vcf
- Video tour (about a minute): https://gitdiagram.com/navruzbek05/txt2vcf/video

## Overview

txt2vcf is a browser-only contact-list converter. The documented workflow is text entry, parsing and phone normalization, editable preview, then vCard export. README capabilities not visible in the sampled parser are represented under index.html; their precise internal wiring is not shown.

Main entry points: [`index.html`](https://github.com/navruzbek05/txt2vcf/blob/main/index.html) (App interface), [`parser.js`](https://github.com/navruzbek05/txt2vcf/blob/main/parser.js) (Parse contacts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Contact conversion"]
  node_input["Contact text"]
  node_preview["Editable preview<br/>[index.html]"]
  node_download["VCF file"]
end

subgraph group_experience["Browser interface"]
  node_page["App interface<br/>[index.html]"]
  node_country["Country settings<br/>[index.html]"]
  node_language["Language choice<br/>[index.html]"]
  node_preferences["Browser preferences"]
end

subgraph group_logic["Contact logic"]
  node_parse["Parse contacts<br/>[parser.js]"]
  node_normalize["Normalize phones<br/>[parser.js]"]
  node_warnings["Length warnings<br/>[parser.js]"]
  node_vcard["Build vCard<br/>[parser.js]"]
end

node_user(("User"))

node_user -->|"uses"| node_page
node_user -->|"enters contacts"| node_input
node_input -->|"provides text"| node_page
node_page -->|"parses lines"| node_parse
node_parse -->|"normalizes phones"| node_normalize
node_country -->|"supplies options"| node_parse
node_parse -->|"returns contacts"| node_page
node_page -->|"checks lengths"| node_warnings
node_page -->|"renders contacts"| node_preview
node_user -->|"edits or deletes"| node_preview
node_page -->|"builds export"| node_vcard
node_vcard -->|"produces file"| node_download
node_page -->|"downloads"| node_download
node_user -->|"chooses language"| node_language
node_language -->|"remembers choice"| node_preferences
node_preferences -->|"restores choice"| node_page
node_country -->|"remembers settings"| node_preferences

click node_page "https://github.com/navruzbek05/txt2vcf/blob/main/index.html"
click node_parse "https://github.com/navruzbek05/txt2vcf/blob/main/parser.js"
click node_normalize "https://github.com/navruzbek05/txt2vcf/blob/main/parser.js"
click node_warnings "https://github.com/navruzbek05/txt2vcf/blob/main/parser.js"
click node_preview "https://github.com/navruzbek05/txt2vcf/blob/main/index.html"
click node_country "https://github.com/navruzbek05/txt2vcf/blob/main/index.html"
click node_language "https://github.com/navruzbek05/txt2vcf/blob/main/index.html"
click node_vcard "https://github.com/navruzbek05/txt2vcf/blob/main/parser.js"

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_input,node_preview,node_download,node_user toneBlue
class node_page,node_country,node_language,node_preferences toneAmber
class node_parse,node_normalize,node_warnings,node_vcard toneMint
```

## Components

### Contact conversion

- **Contact text**
- [Editable preview](https://github.com/navruzbek05/txt2vcf/blob/main/index.html): `index.html`
- **VCF file**

### Browser interface

- [App interface](https://github.com/navruzbek05/txt2vcf/blob/main/index.html): `index.html`
- [Country settings](https://github.com/navruzbek05/txt2vcf/blob/main/index.html): `index.html`
- [Language choice](https://github.com/navruzbek05/txt2vcf/blob/main/index.html): `index.html`
- **Browser preferences**

### Contact logic

- [Parse contacts](https://github.com/navruzbek05/txt2vcf/blob/main/parser.js): `parser.js`
- [Normalize phones](https://github.com/navruzbek05/txt2vcf/blob/main/parser.js): `parser.js`
- [Length warnings](https://github.com/navruzbek05/txt2vcf/blob/main/parser.js): `parser.js`
- [Build vCard](https://github.com/navruzbek05/txt2vcf/blob/main/parser.js): `parser.js`

### Other components

- **User**

## Connections

- User → App interface: uses
- User → Contact text: enters contacts
- Contact text → App interface: provides text
- App interface → Parse contacts: parses lines
- Parse contacts → Normalize phones: normalizes phones
- Country settings → Parse contacts: supplies options
- Parse contacts → App interface: returns contacts
- App interface → Length warnings: checks lengths
- App interface → Editable preview: renders contacts
- User → Editable preview: edits or deletes
- App interface → Build vCard: builds export
- Build vCard → VCF file: produces file
- App interface → VCF file: downloads
- User → Language choice: chooses language
- Language choice → Browser preferences: remembers choice
- Browser preferences → App interface: restores choice
- Country settings → Browser preferences: remembers settings
