# winterx04/marklogic architecture

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

## Overview

This repository appears to implement a Flask trademark-management and similarity-search application. Users can search registered marks, compare uploaded marks or client records, and import trademark/client datasets; administrators manage records and accounts. The central Flask app owns the HTTP workflows, while PDF/image extraction, matching logic, and persistence have separate modules. The README documents PostgreSQL setup and running the app but gives little product detail. Source excerpts are partial, so uncertain endpoint-to-module wiring is omitted.

Main entry points: [`app.py`](https://github.com/winterx04/marklogic/blob/main/app.py) (Flask application), [`static/search.js`](https://github.com/winterx04/marklogic/blob/main/static/search.js) (Trademark search), [`static/compare.js`](https://github.com/winterx04/marklogic/blob/main/static/compare.js) (Mark comparison), [`templates/search.html`](https://github.com/winterx04/marklogic/blob/main/templates/search.html) (Search page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["Flask application<br/>[app.py]"]
  node_search_ui["Trademark search<br/>[search.js]"]
  node_compare_ui["Mark comparison<br/>[compare.js]"]
  node_search_page["Search page<br/>[search.html]"]
  node_compare_page["Compare page<br/>[compare.html]"]
end

subgraph group_trademark["Trademark data"]
  node_dataset_ui["Registry dataset<br/>[dataset.js]"]
  node_client_ui["Client dataset<br/>[client-dataset.js]"]
  node_dataset_page["Dataset page<br/>[dataset.html]"]
  node_client_page["Client dataset page"]
  node_database["Persistence<br/>[database.py]"]
  node_postgres[("PostgreSQL")]
end

subgraph group_matching["Extraction and matching"]
  node_extract["PDF/image extraction<br/>[pdf_extractor.py]"]
  node_ml["Embedding models<br/>[ml_utils.py]"]
  node_similarity["Match scoring<br/>[similarity.py]"]
end

subgraph group_accounts["Accounts and administration"]
  node_admin_ui["Admin interface<br/>[admin.js]"]
  node_admin_page["Admin page<br/>[admin.html]"]
  node_auth_ui["Sign-in and password<br/>[sign-in.js]"]
  node_signin_page["Sign-in page<br/>[signin.html]"]
  node_mail["Email service"]
end

node_user(("User"))

node_user -->|"opens"| node_search_page
node_user -->|"opens"| node_compare_page
node_user -->|"opens"| node_dataset_page
node_user -->|"opens"| node_client_page
node_user -->|"opens"| node_signin_page
node_search_page -->|"loads"| node_search_ui
node_compare_page -->|"loads"| node_compare_ui
node_dataset_page -->|"loads"| node_dataset_ui
node_client_page -->|"loads"| node_client_ui
node_signin_page -->|"loads"| node_auth_ui
node_search_ui -->|"requests search"| node_app
node_compare_ui -->|"requests comparison"| node_app
node_dataset_ui -->|"uploads and manages"| node_app
node_client_ui -->|"uploads and manages"| node_app
node_admin_page -->|"loads"| node_admin_ui
node_admin_ui -->|"requests administration"| node_app
node_auth_ui -->|"requests authentication"| node_app
node_app -->|"extracts uploaded files"| node_extract
node_app -->|"generates embeddings"| node_ml
node_app -->|"scores matches"| node_similarity
node_app -->|"reads and writes"| node_database
node_database -->|"queries"| node_postgres
node_app -.->|"sends account email"| node_mail

click node_app "https://github.com/winterx04/marklogic/blob/main/app.py"
click node_search_ui "https://github.com/winterx04/marklogic/blob/main/static/search.js"
click node_compare_ui "https://github.com/winterx04/marklogic/blob/main/static/compare.js"
click node_dataset_ui "https://github.com/winterx04/marklogic/blob/main/static/dataset.js"
click node_client_ui "https://github.com/winterx04/marklogic/blob/main/static/client-dataset.js"
click node_search_page "https://github.com/winterx04/marklogic/blob/main/templates/search.html"
click node_compare_page "https://github.com/winterx04/marklogic/blob/main/templates/compare.html"
click node_dataset_page "https://github.com/winterx04/marklogic/blob/main/templates/dataset.html"
click node_client_page "https://github.com/winterx04/marklogic/blob/main/templates/client-dataset.html"
click node_extract "https://github.com/winterx04/marklogic/blob/main/pdf_extractor.py"
click node_ml "https://github.com/winterx04/marklogic/blob/main/ml_utils.py"
click node_similarity "https://github.com/winterx04/marklogic/blob/main/similarity.py"
click node_database "https://github.com/winterx04/marklogic/blob/main/database.py"
click node_admin_ui "https://github.com/winterx04/marklogic/blob/main/admin.js"
click node_admin_page "https://github.com/winterx04/marklogic/blob/main/templates/admin.html"
click node_auth_ui "https://github.com/winterx04/marklogic/blob/main/static/sign-in.js"
click node_signin_page "https://github.com/winterx04/marklogic/blob/main/templates/signin.html"

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_search_ui,node_compare_ui,node_search_page,node_compare_page,node_user toneBlue
class node_dataset_ui,node_client_ui,node_dataset_page,node_client_page,node_database,node_postgres toneAmber
class node_extract,node_ml,node_similarity toneMint
class node_admin_ui,node_admin_page,node_auth_ui,node_signin_page,node_mail toneRose
```

## Components

### Web application

- [Flask application](https://github.com/winterx04/marklogic/blob/main/app.py): `app.py`
- [Trademark search](https://github.com/winterx04/marklogic/blob/main/static/search.js): `static/search.js`
- [Mark comparison](https://github.com/winterx04/marklogic/blob/main/static/compare.js): `static/compare.js`
- [Search page](https://github.com/winterx04/marklogic/blob/main/templates/search.html): `templates/search.html`
- [Compare page](https://github.com/winterx04/marklogic/blob/main/templates/compare.html): `templates/compare.html`

### Trademark data

- [Registry dataset](https://github.com/winterx04/marklogic/blob/main/static/dataset.js): `static/dataset.js`
- [Client dataset](https://github.com/winterx04/marklogic/blob/main/static/client-dataset.js): `static/client-dataset.js`
- [Dataset page](https://github.com/winterx04/marklogic/blob/main/templates/dataset.html): `templates/dataset.html`
- [Client dataset page](https://github.com/winterx04/marklogic/blob/main/templates/client-dataset.html): `templates/client-dataset.html`
- [Persistence](https://github.com/winterx04/marklogic/blob/main/database.py): `database.py`
- **PostgreSQL**

### Extraction and matching

- [PDF/image extraction](https://github.com/winterx04/marklogic/blob/main/pdf_extractor.py): `pdf_extractor.py`
- [Embedding models](https://github.com/winterx04/marklogic/blob/main/ml_utils.py): `ml_utils.py`
- [Match scoring](https://github.com/winterx04/marklogic/blob/main/similarity.py): `similarity.py`

### Accounts and administration

- [Admin interface](https://github.com/winterx04/marklogic/blob/main/admin.js): `admin.js`
- [Admin page](https://github.com/winterx04/marklogic/blob/main/templates/admin.html): `templates/admin.html`
- [Sign-in and password](https://github.com/winterx04/marklogic/blob/main/static/sign-in.js): `static/sign-in.js`
- [Sign-in page](https://github.com/winterx04/marklogic/blob/main/templates/signin.html): `templates/signin.html`
- **Email service**

### Other components

- **User**

## Connections

- User → Search page: opens
- User → Compare page: opens
- User → Dataset page: opens
- User → Client dataset page: opens
- User → Sign-in page: opens
- Search page → Trademark search: loads
- Compare page → Mark comparison: loads
- Dataset page → Registry dataset: loads
- Client dataset page → Client dataset: loads
- Sign-in page → Sign-in and password: loads
- Trademark search → Flask application: requests search
- Mark comparison → Flask application: requests comparison
- Registry dataset → Flask application: uploads and manages
- Client dataset → Flask application: uploads and manages
- Admin page → Admin interface: loads
- Admin interface → Flask application: requests administration
- Sign-in and password → Flask application: requests authentication
- Flask application → PDF/image extraction: extracts uploaded files
- Flask application → Embedding models: generates embeddings
- Flask application → Match scoring: scores matches
- Flask application → Persistence: reads and writes
- Persistence → PostgreSQL: queries
- Flask application → Email service: sends account email
