# iampradeep-hr/multilingual-ecommerce-search architecture

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

- Interactive diagram: https://gitdiagram.com/iampradeep-hr/multilingual-ecommerce-search
- Repository: https://github.com/iampradeep-hr/multilingual-ecommerce-search

## Overview

Mila? is a multilingual commerce storefront with Spring Boot APIs, a MongoDB catalog, Kafka-backed product ingestion and indexing, Typesense search, and Gemma tag generation via Ollama or an optional remote provider. Shoppers search and filter products and resolve a store location; admins authenticate, manage products, and request rule-based or AI tags. The backend owns those API calls and dispatches queued work. Cart contents remain browser-local; checkout and payment are not implemented. Arrows reflect sampled calls and README-documented integrations; unsampled frontend views and service wiring are not expanded.

Main entry points: [`backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java`](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java) (Catalog service), [`backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java`](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java) (Admin endpoints), [`backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java`](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java) (Product submission), [`frontend/src/app/commerce-api.service.ts`](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/frontend/src/app/commerce-api.service.ts) (Commerce API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Storefront"]
  node_app["Storefront app<br/>[app.ts]"]
  node_api_client["Commerce API client"]
end

subgraph group_api["Backend API"]
  node_storefront_api["Storefront endpoints"]
  node_admin_api["Admin endpoints"]
  node_security["Admin security"]
end

subgraph group_catalog["Catalog and tags"]
  node_catalog_service["Catalog service"]
  node_product_model["Product model<br/>[Product.java]"]
  node_mongo_store["Mongo catalog store"]
  node_mongo_repo["Mongo repository"]
  node_mongo[("MongoDB")]
  node_tag_rules["Rule tag generation"]
  node_gemma["Gemma tag service"]
  node_ollama["Ollama / Gemma"]
  node_remote_tags["Remote tag bridge"]
end

subgraph group_async["Async product processing"]
  node_submission["Product submission"]
  node_kafka["Kafka topics"]
  node_ingest["Ingest worker"]
  node_index_events["Index event publisher"]
  node_index_worker["Index worker"]
end

subgraph group_search["Search index"]
  node_search_api["Search service"]
  node_typesense[("Typesense")]
end

node_shopper(("Shopper"))
node_admin(("Admin"))

node_shopper -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"calls"| node_api_client
node_api_client -.->|"HTTP requests"| node_storefront_api
node_api_client -.->|"HTTP requests"| node_admin_api
node_storefront_api -->|"calls"| node_catalog_service
node_admin_api -->|"calls"| node_catalog_service
node_admin_api -->|"submits products"| node_submission
node_admin_api -->|"requests tags"| node_gemma
node_security -.->|"protects"| node_admin_api
node_catalog_service -->|"uses"| node_mongo_store
node_mongo_store -->|"delegates to"| node_mongo_repo
node_mongo_repo -.->|"reads and writes"| node_mongo
node_catalog_service -->|"generates aliases"| node_tag_rules
node_gemma -->|"generates tags"| node_ollama
node_gemma -.->|"optional provider"| node_remote_tags
node_submission -->|"creates product"| node_catalog_service
node_submission -->|"publishes ingest"| node_kafka
node_submission -->|"queues deletion"| node_index_events
node_kafka -->|"delivers ingest"| node_ingest
node_ingest -->|"saves product"| node_catalog_service
node_ingest -->|"publishes product"| node_index_events
node_index_events -->|"publishes index event"| node_kafka
node_kafka -.->|"delivers index event"| node_index_worker
node_index_worker -->|"indexes or deletes"| node_search_api
node_catalog_service -->|"searches products"| node_search_api
node_search_api -->|"searches and indexes"| node_typesense
node_storefront_api -->|"returns products"| node_product_model
node_catalog_service -->|"creates products"| node_product_model

click node_app "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/frontend/src/app/app.ts"
click node_api_client "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/frontend/src/app/commerce-api.service.ts"
click node_storefront_api "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/StorefrontController.java"
click node_admin_api "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java"
click node_security "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/SecurityConfiguration.java"
click node_catalog_service "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java"
click node_product_model "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/Product.java"
click node_mongo_store "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/MongoProductCatalogStore.java"
click node_mongo_repo "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/MongoProductRepository.java"
click node_tag_rules "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java"
click node_gemma "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/GemmaTagService.java"
click node_submission "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java"
click node_ingest "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductIngestWorker.java"
click node_index_events "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductIndexEventPublisher.java"
click node_index_worker "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductIndexWorker.java"
click node_search_api "https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductSearchService.java"

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_api_client toneBlue
class node_storefront_api,node_admin_api,node_security toneAmber
class node_catalog_service,node_product_model,node_mongo_store,node_mongo_repo,node_mongo,node_tag_rules,node_gemma,node_ollama,node_remote_tags toneMint
class node_submission,node_kafka,node_ingest,node_index_events,node_index_worker toneRose
class node_search_api,node_typesense,node_shopper,node_admin toneIndigo
```

## Components

### Storefront

- [Storefront app](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/frontend/src/app/app.ts): `frontend/src/app/app.ts`
- [Commerce API client](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/frontend/src/app/commerce-api.service.ts): `frontend/src/app/commerce-api.service.ts`

### Backend API

- [Storefront endpoints](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/StorefrontController.java): `backend/src/main/java/com/jaldi/quickcommerce/StorefrontController.java`
- [Admin endpoints](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java): `backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java`
- [Admin security](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/SecurityConfiguration.java): `backend/src/main/java/com/jaldi/quickcommerce/SecurityConfiguration.java`

### Catalog and tags

- [Catalog service](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java): `backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java`
- [Product model](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/Product.java): `backend/src/main/java/com/jaldi/quickcommerce/Product.java`
- [Mongo catalog store](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/MongoProductCatalogStore.java): `backend/src/main/java/com/jaldi/quickcommerce/MongoProductCatalogStore.java`
- [Mongo repository](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/MongoProductRepository.java): `backend/src/main/java/com/jaldi/quickcommerce/MongoProductRepository.java`
- **MongoDB**
- [Rule tag generation](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java): `backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java`
- [Gemma tag service](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/GemmaTagService.java): `backend/src/main/java/com/jaldi/quickcommerce/GemmaTagService.java`
- **Ollama / Gemma**
- **Remote tag bridge**

### Async product processing

- [Product submission](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java): `backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java`
- **Kafka topics**
- [Ingest worker](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductIngestWorker.java): `backend/src/main/java/com/jaldi/quickcommerce/ProductIngestWorker.java`
- [Index event publisher](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductIndexEventPublisher.java): `backend/src/main/java/com/jaldi/quickcommerce/ProductIndexEventPublisher.java`
- [Index worker](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductIndexWorker.java): `backend/src/main/java/com/jaldi/quickcommerce/ProductIndexWorker.java`

### Search index

- [Search service](https://github.com/iampradeep-hr/multilingual-ecommerce-search/blob/main/backend/src/main/java/com/jaldi/quickcommerce/ProductSearchService.java): `backend/src/main/java/com/jaldi/quickcommerce/ProductSearchService.java`
- **Typesense**

### Other components

- **Shopper**
- **Admin**

## Connections

- Shopper → Storefront app: uses (evidence: `README.md`)
- Admin → Storefront app: uses (evidence: `README.md`)
- Storefront app → Commerce API client: calls (evidence: `frontend/src/app/app.ts`)
- Commerce API client → Storefront endpoints: HTTP requests (evidence: `README.md`)
- Commerce API client → Admin endpoints: HTTP requests (evidence: `README.md`)
- Storefront endpoints → Catalog service: calls (evidence: `backend/src/main/java/com/jaldi/quickcommerce/StorefrontController.java`)
- Admin endpoints → Catalog service: calls (evidence: `backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java`)
- Admin endpoints → Product submission: submits products (evidence: `backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java`)
- Admin endpoints → Gemma tag service: requests tags (evidence: `backend/src/main/java/com/jaldi/quickcommerce/AdminProductController.java`)
- Admin security → Admin endpoints: protects
- Catalog service → Mongo catalog store: uses (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java`)
- Mongo catalog store → Mongo repository: delegates to (evidence: `backend/src/main/java/com/jaldi/quickcommerce/MongoProductCatalogStore.java`)
- Mongo repository → MongoDB: reads and writes
- Catalog service → Rule tag generation: generates aliases (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java`)
- Gemma tag service → Ollama / Gemma: generates tags (evidence: `backend/src/main/java/com/jaldi/quickcommerce/GemmaTagService.java`)
- Gemma tag service → Remote tag bridge: optional provider (evidence: `backend/src/main/java/com/jaldi/quickcommerce/GemmaTagService.java`)
- Product submission → Catalog service: creates product (evidence: `backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java`)
- Product submission → Kafka topics: publishes ingest (evidence: `backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java`)
- Product submission → Index event publisher: queues deletion (evidence: `backend/src/main/java/com/jaldi/quickcommerce/KafkaProductSubmissionService.java`)
- Kafka topics → Ingest worker: delivers ingest (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductIngestWorker.java`)
- Ingest worker → Catalog service: saves product (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductIngestWorker.java`)
- Ingest worker → Index event publisher: publishes product (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductIngestWorker.java`)
- Index event publisher → Kafka topics: publishes index event (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductIndexEventPublisher.java`)
- Kafka topics → Index worker: delivers index event
- Index worker → Search service: indexes or deletes (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductIndexWorker.java`)
- Catalog service → Search service: searches products (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java`)
- Search service → Typesense: searches and indexes (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductSearchService.java`)
- Storefront endpoints → Product model: returns products (evidence: `backend/src/main/java/com/jaldi/quickcommerce/StorefrontController.java`)
- Catalog service → Product model: creates products (evidence: `backend/src/main/java/com/jaldi/quickcommerce/ProductCatalogService.java`)
