# marensovich/pinterestpingenerator architecture

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

## Overview

PinterestPinGenerator is a web-managed pin-generation product: users manage a clothing catalog and request outfit-based pin images. The Java API owns outfit selection and render orchestration; a Python service lays out and renders scenes, then stores and serves image files. The UI also exposes dashboard, pin-history, and hashtag areas. README describes Pinterest publication, but the sampled source does not establish its runtime integration, so it is not connected here. Unsampled subsystem links are included only where the documented architecture supports them.

Main entry points: [`pinterest-site/src/App.jsx`](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/App.jsx) (Web application), [`pinterest-core/src/main/java/me/marensovich/pinterestcore/PinterestCoreApplication.java`](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/PinterestCoreApplication.java) (Spring API), [`pinterest-imagegenerator/app/renderer/service.py`](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/renderer/service.py) (Scene preparation), [`pinterest-imagegenerator/app/main.py`](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/main.py) (Render service API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_site["Web application<br/>[App.jsx]"]
  node_catalog["Item catalog<br/>[Table.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_pins["Pin history<br/>[PinsHistory.jsx]"]
  node_hashtags["Hashtags<br/>[HashTag.jsx]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["Java API"]
  node_core["Spring API"]
  node_auth["Authentication"]
  node_item_api["Item endpoints"]
  node_item_service["Item service<br/>[ItemService.java]"]
  node_item_store[("Item records")]
  node_user_store[("User records")]
  node_render_api["Render endpoints"]
  node_outfits["Outfit selection<br/>[OutfitService.java]"]
  node_generation["Render adapter"]
  node_generation_logs[("Generation history")]
end

subgraph group_render["Image rendering"]
  node_image_api["Render service API<br/>[main.py]"]
  node_render_service["Scene preparation<br/>[service.py]"]
  node_layout["Scene layout<br/>[layout_engine.py]"]
  node_renderer["Image renderer<br/>[renderer.py]"]
  node_storage[("File storage<br/>[repository.py]")]
end

node_user(("Operator"))

node_user -->|"uses"| node_site
node_site -->|"routes to"| node_catalog
node_site -->|"routes to"| node_dashboard
node_site -->|"routes to"| node_pins
node_site -->|"routes to"| node_hashtags
node_site -->|"requests via"| node_api_client
node_api_client -->|"calls API"| node_core
node_core -->|"dispatches"| node_auth
node_core -->|"dispatches"| node_item_api
node_core -->|"dispatches"| node_render_api
node_auth -->|"persists users"| node_user_store
node_item_api -->|"calls"| node_item_service
node_item_service -->|"reads/writes"| node_item_store
node_item_service -->|"uploads images"| node_image_api
node_render_api -->|"generates outfits"| node_outfits
node_render_api -->|"requests renders"| node_generation
node_outfits -->|"reads/writes"| node_generation_logs
node_generation -->|"sends scene"| node_image_api
node_image_api -->|"renders scene"| node_render_service
node_render_service -->|"arranges entities"| node_layout
node_render_service -->|"renders output"| node_renderer
node_render_service -->|"saves output"| node_storage
node_image_api -->|"serves and manages files"| node_storage

click node_site "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/App.jsx"
click node_catalog "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/Catalog/Table.jsx"
click node_dashboard "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/Dashboard/Dashboard.jsx"
click node_pins "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/PinsHistory/PinsHistory.jsx"
click node_hashtags "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/HashTag/HashTag.jsx"
click node_api_client "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/services/api.js"
click node_core "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/PinterestCoreApplication.java"
click node_auth "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/AuthController.java"
click node_item_api "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/ItemController.java"
click node_item_service "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/service/ItemService.java"
click node_item_store "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/ItemRepository.java"
click node_user_store "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/UserRepository.java"
click node_render_api "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/RenderController.java"
click node_outfits "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/service/OutfitService.java"
click node_generation "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/service/OutfitGenerationService.java"
click node_generation_logs "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/GenerationLogRepository.java"
click node_image_api "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/main.py"
click node_render_service "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/renderer/service.py"
click node_layout "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/renderer/layout_engine.py"
click node_renderer "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/renderer/renderer.py"
click node_storage "https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/storage/repository.py"

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_site,node_catalog,node_dashboard,node_pins,node_hashtags,node_api_client toneBlue
class node_core,node_auth,node_item_api,node_item_service,node_item_store,node_user_store,node_render_api,node_outfits,node_generation,node_generation_logs toneAmber
class node_image_api,node_render_service,node_layout,node_renderer,node_storage toneMint
class node_user toneIndigo
```

## Components

### Web interface

- [Web application](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/App.jsx): `pinterest-site/src/App.jsx`
- [Item catalog](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/Catalog/Table.jsx): `pinterest-site/src/pages/Catalog/Table.jsx`
- [Dashboard](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/Dashboard/Dashboard.jsx): `pinterest-site/src/pages/Dashboard/Dashboard.jsx`
- [Pin history](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/PinsHistory/PinsHistory.jsx): `pinterest-site/src/pages/PinsHistory/PinsHistory.jsx`
- [Hashtags](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/pages/HashTag/HashTag.jsx): `pinterest-site/src/pages/HashTag/HashTag.jsx`
- [API client](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-site/src/services/api.js): `pinterest-site/src/services/api.js`

### Java API

- [Spring API](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/PinterestCoreApplication.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/PinterestCoreApplication.java`
- [Authentication](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/AuthController.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/AuthController.java`
- [Item endpoints](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/ItemController.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/ItemController.java`
- [Item service](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/service/ItemService.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/service/ItemService.java`
- [Item records](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/ItemRepository.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/ItemRepository.java`
- [User records](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/UserRepository.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/UserRepository.java`
- [Render endpoints](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/RenderController.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/controller/RenderController.java`
- [Outfit selection](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/service/OutfitService.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/service/OutfitService.java`
- [Render adapter](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/service/OutfitGenerationService.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/service/OutfitGenerationService.java`
- [Generation history](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/GenerationLogRepository.java): `pinterest-core/src/main/java/me/marensovich/pinterestcore/db/repository/GenerationLogRepository.java`

### Image rendering

- [Render service API](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/main.py): `pinterest-imagegenerator/app/main.py`
- [Scene preparation](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/renderer/service.py): `pinterest-imagegenerator/app/renderer/service.py`
- [Scene layout](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/renderer/layout_engine.py): `pinterest-imagegenerator/app/renderer/layout_engine.py`
- [Image renderer](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/renderer/renderer.py): `pinterest-imagegenerator/app/renderer/renderer.py`
- [File storage](https://github.com/marensovich/pinterestpingenerator/blob/master/pinterest-imagegenerator/app/storage/repository.py): `pinterest-imagegenerator/app/storage/repository.py`

### Other components

- **Operator**

## Connections

- Operator → Web application: uses
- Web application → Item catalog: routes to
- Web application → Dashboard: routes to
- Web application → Pin history: routes to
- Web application → Hashtags: routes to
- Web application → API client: requests via
- API client → Spring API: calls API
- Spring API → Authentication: dispatches
- Spring API → Item endpoints: dispatches
- Spring API → Render endpoints: dispatches
- Authentication → User records: persists users
- Item endpoints → Item service: calls
- Item service → Item records: reads/writes
- Item service → Render service API: uploads images
- Render endpoints → Outfit selection: generates outfits
- Render endpoints → Render adapter: requests renders
- Outfit selection → Generation history: reads/writes
- Render adapter → Render service API: sends scene
- Render service API → Scene preparation: renders scene
- Scene preparation → Scene layout: arranges entities
- Scene preparation → Image renderer: renders output
- Scene preparation → File storage: saves output
- Render service API → File storage: serves and manages files
