# vtjvlad/bifo architecture

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

- Interactive diagram: https://gitdiagram.com/vtjvlad/bifo
- Repository: https://github.com/vtjvlad/bifo

## Overview

This repository combines a Hotline product-catalog scraper with a MongoDB-backed online-store API. The store workflow is a client request routed by the Express server to product, catalog, filter, or account/order endpoints, which read or update model data. The scraper workflow is driven by its CLI or parser entry point, fetches Hotline catalog data, and saves results. Parser capabilities such as batching, multi-category runs, adaptive delays, progress, and CSV/JSON output are documented; not all implementation links were visible in the excerpts.

Main entry points: [`server.js`](https://github.com/vtjvlad/bifo/blob/main/server.js) (Express server), [`routes/orders.js`](https://github.com/vtjvlad/bifo/blob/main/routes/orders.js) (Order routes), [`some/hotline-parser.js`](https://github.com/vtjvlad/bifo/blob/main/some/hotline-parser.js) (Catalog parser), [`routes/auth.js`](https://github.com/vtjvlad/bifo/blob/main/routes/auth.js) (Account routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_store["Store API"]
  node_server["Express server<br/>[server.js]"]
  node_auth["Account routes<br/>[auth.js]"]
  node_catalog_routes["Catalog routes<br/>[catalogs.js]"]
  node_product_routes["Product routes<br/>[products.js]"]
  node_filter_routes["Filter routes<br/>[filters.js]"]
  node_order_routes["Order routes<br/>[orders.js]"]
end

subgraph group_data["Store data"]
  node_catalog_model[("Catalog model<br/>[Catalog.js]")]
  node_product_model[("Product model<br/>[Product.js]")]
  node_filter_model[("Filter model<br/>[Filters.js]")]
  node_user_model[("User model<br/>[User.js]")]
  node_order_model[("Order model<br/>[Order.js]")]
end

subgraph group_scraper["Hotline scraper"]
  node_cli["Parser CLI"]
  node_parser["Catalog parser<br/>[hotline-parser.js]"]
  node_tokens["Token fallback<br/>[tt.js]"]
end

subgraph group_web["Store interface"]
  node_app_js["Store app UI<br/>[app.js]"]
  node_category_js["Category UI<br/>[category.js]"]
  node_product_js["Product UI<br/>[product.js]"]
  node_components_js["UI components<br/>[components.js]"]
end

node_shopper(("Store user"))
node_mongo[("MongoDB")]
node_browser(("Store browser"))
node_hotline["Hotline site"]
node_output_files["JSON / CSV output"]

node_shopper -.->|"requests store"| node_server
node_server -.->|"routes to"| node_auth
node_server -.->|"routes to"| node_catalog_routes
node_server -.->|"routes to"| node_product_routes
node_server -.->|"routes to"| node_filter_routes
node_server -.->|"routes to"| node_order_routes
node_auth -->|"queries"| node_user_model
node_catalog_routes -->|"queries"| node_catalog_model
node_product_routes -->|"queries"| node_product_model
node_filter_routes -.->|"queries"| node_filter_model
node_order_routes -->|"queries"| node_user_model
node_order_routes -->|"queries"| node_order_model
node_order_routes -->|"updates stock"| node_product_model
node_server -.->|"connects"| node_mongo
node_browser -.->|"uses UI"| node_app_js
node_cli -->|"invokes"| node_parser
node_parser -->|"loads tokens"| node_tokens
node_parser -->|"fetches catalog"| node_hotline
node_parser -->|"saves results"| node_output_files

click node_server "https://github.com/vtjvlad/bifo/blob/main/server.js"
click node_auth "https://github.com/vtjvlad/bifo/blob/main/routes/auth.js"
click node_catalog_routes "https://github.com/vtjvlad/bifo/blob/main/routes/catalogs.js"
click node_product_routes "https://github.com/vtjvlad/bifo/blob/main/routes/products.js"
click node_filter_routes "https://github.com/vtjvlad/bifo/blob/main/routes/filters.js"
click node_order_routes "https://github.com/vtjvlad/bifo/blob/main/routes/orders.js"
click node_catalog_model "https://github.com/vtjvlad/bifo/blob/main/models/Catalog.js"
click node_product_model "https://github.com/vtjvlad/bifo/blob/main/models/Product.js"
click node_filter_model "https://github.com/vtjvlad/bifo/blob/main/models/Filters.js"
click node_user_model "https://github.com/vtjvlad/bifo/blob/main/models/User.js"
click node_order_model "https://github.com/vtjvlad/bifo/blob/main/models/Order.js"
click node_app_js "https://github.com/vtjvlad/bifo/blob/main/public/js/app.js"
click node_category_js "https://github.com/vtjvlad/bifo/blob/main/public/js/category.js"
click node_product_js "https://github.com/vtjvlad/bifo/blob/main/public/js/product.js"
click node_components_js "https://github.com/vtjvlad/bifo/blob/main/public/js/components.js"
click node_cli "https://github.com/vtjvlad/bifo/blob/main/some/cli-parser-simple.js"
click node_parser "https://github.com/vtjvlad/bifo/blob/main/some/hotline-parser.js"
click node_tokens "https://github.com/vtjvlad/bifo/blob/main/some/tt.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_server,node_auth,node_catalog_routes,node_product_routes,node_filter_routes,node_order_routes,node_shopper,node_browser toneBlue
class node_catalog_model,node_product_model,node_filter_model,node_user_model,node_order_model,node_mongo toneAmber
class node_cli,node_parser,node_tokens toneMint
class node_app_js,node_category_js,node_product_js,node_components_js toneRose
class node_hotline,node_output_files toneIndigo
```

## Components

### Store API

- [Express server](https://github.com/vtjvlad/bifo/blob/main/server.js): `server.js`
- [Account routes](https://github.com/vtjvlad/bifo/blob/main/routes/auth.js): `routes/auth.js`
- [Catalog routes](https://github.com/vtjvlad/bifo/blob/main/routes/catalogs.js): `routes/catalogs.js`
- [Product routes](https://github.com/vtjvlad/bifo/blob/main/routes/products.js): `routes/products.js`
- [Filter routes](https://github.com/vtjvlad/bifo/blob/main/routes/filters.js): `routes/filters.js`
- [Order routes](https://github.com/vtjvlad/bifo/blob/main/routes/orders.js): `routes/orders.js`

### Store data

- [Catalog model](https://github.com/vtjvlad/bifo/blob/main/models/Catalog.js): `models/Catalog.js`
- [Product model](https://github.com/vtjvlad/bifo/blob/main/models/Product.js): `models/Product.js`
- [Filter model](https://github.com/vtjvlad/bifo/blob/main/models/Filters.js): `models/Filters.js`
- [User model](https://github.com/vtjvlad/bifo/blob/main/models/User.js): `models/User.js`
- [Order model](https://github.com/vtjvlad/bifo/blob/main/models/Order.js): `models/Order.js`

### Hotline scraper

- [Parser CLI](https://github.com/vtjvlad/bifo/blob/main/some/cli-parser-simple.js): `some/cli-parser-simple.js`
- [Catalog parser](https://github.com/vtjvlad/bifo/blob/main/some/hotline-parser.js): `some/hotline-parser.js`
- [Token fallback](https://github.com/vtjvlad/bifo/blob/main/some/tt.js): `some/tt.js`

### Store interface

- [Store app UI](https://github.com/vtjvlad/bifo/blob/main/public/js/app.js): `public/js/app.js`
- [Category UI](https://github.com/vtjvlad/bifo/blob/main/public/js/category.js): `public/js/category.js`
- [Product UI](https://github.com/vtjvlad/bifo/blob/main/public/js/product.js): `public/js/product.js`
- [UI components](https://github.com/vtjvlad/bifo/blob/main/public/js/components.js): `public/js/components.js`

### Other components

- **Store user**
- **MongoDB**
- **Store browser**
- **Hotline site**
- **JSON / CSV output**

## Connections

- Store user → Express server: requests store
- Express server → Account routes: routes to (evidence: `server.js`)
- Express server → Catalog routes: routes to (evidence: `server.js`)
- Express server → Product routes: routes to (evidence: `server.js`)
- Express server → Filter routes: routes to (evidence: `server.js`)
- Express server → Order routes: routes to (evidence: `server.js`)
- Account routes → User model: queries (evidence: `routes/auth.js`)
- Catalog routes → Catalog model: queries (evidence: `routes/catalogs.js`)
- Product routes → Product model: queries (evidence: `routes/products.js`)
- Filter routes → Filter model: queries (evidence: `routes/filters.js`)
- Order routes → User model: queries (evidence: `routes/orders.js`)
- Order routes → Order model: queries (evidence: `routes/orders.js`)
- Order routes → Product model: updates stock (evidence: `routes/orders.js`)
- Express server → MongoDB: connects
- Store browser → Store app UI: uses UI
- Parser CLI → Catalog parser: invokes (evidence: `some/cli-parser-simple.js`)
- Catalog parser → Token fallback: loads tokens (evidence: `some/hotline-parser.js`)
- Catalog parser → Hotline site: fetches catalog (evidence: `some/hotline-parser.js`)
- Catalog parser → JSON / CSV output: saves results (evidence: `some/hotline-parser.js`)
