# alejandrolog/retrograde-raspberry architecture

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

- Interactive diagram: https://gitdiagram.com/alejandrolog/retrograde-raspberry
- Repository: https://github.com/alejandrolog/retrograde-raspberry

## Overview

1. **Overall shape**
   - This is an **Astro** project that acts mainly as a shell for a **React-based single-page application**.
   - The repository is organized around a music commerce/admin domain: releases, tracks, artists, merch, orders, inventory, genres, and users.

2. **Astro entry point**
   - `src/pages/index.astro` is the only visible page route in the tree, so the app likely boots from a single Astro page and hands control to React.
   - `astro.config.mjs` and the minimal Astro starter structure suggest Astro is used for hosting/building rather than as the primary application framework.

3. **Client application boundary**
   - `src/components/AppRouter.tsx` is the most likely top-level application boundary.
   - It probably decides which dashboard or feature view to show based on authentication and role, and coordinates navigation among the app sections.

4. **Role-based feature areas**
   - The component set is clearly split by user type:
     - **Admin:** `AdminDashboard`, `AdminSummary`, `AdminUsers`, `AdminOrders`, `AdminInventory`, `AdminMerch`, `AdminGenres`, `AdminFormats`
     - **Artist:** `ArtistDashboard`, `ArtistProfile`, `ArtistSales`, `ArtistMerch`
     - **Customer:** `CustomerDashboard`, `CustomerProfile`, `CustomerOrders`
   - This implies a **role-aware UI layer** with different capabilities and views sharing the same backend domain.

5. **Core music catalog flow**
   - `ReleasesList`, `ReleaseDetail`, `CreateReleaseForm`, and `TracksManager` define the release lifecycle.
   - The flow is likely: browse releases → inspect release detail → create or edit a release → manage associated tracks.
   - This is one of the central domain paths in the app.

6. **Commerce and operations flow**
   - `AdminInventory`, `AdminOrders`, `ArtistSales`, `CustomerOrders`, `AdminMerch`, and `ArtistMerch` indicate the app also manages **selling and fulfillment**.
   - Inventory and order management appear in the admin area, while artists and customers each have their own sales/order visibility.

7. **Authentication and user context**
   - `Auth.tsx` is the likely entry for login/session handling and user-role establishment.
   - `UserService` in `src/api` supports user-related backend interactions, which probably feed the auth and profile/dashboard views.

8. **API boundary and backend integration**
   - The `src/api/` folder is the main integration layer:
     - `artistService`
     - `genreService`
     - `merchService`
     - `releaseService`
     - `shopService`
     - `trackService`
     - `userService`
     - `config.ts`
   - These services likely wrap HTTP calls and isolate the UI from backend endpoints, creating a clean separation between presentation and data access.

9. **Shared data contracts**
   - `src/types/dtos.ts` suggests the app uses **shared DTO/type definitions** for API payloads and responses.
   - That means the components and service layer are probably strongly typed around backend objects such as releases, tracks, genres, merch, and users.

10. **UI composition pattern**
   - The components are mostly feature-oriented rather than generic design-system widgets.
   - This points to a structure where each major business area owns its own view logic, with the router and services providing the glue.

11. **Static assets and styling**
   - `public/assets` holds static files such as images or branding assets.
   - `src/styles/global.css` provides app-wide styling, which likely spans both Astro-rendered shell elements and React views.

12. **Likely runtime/data path**
   - Browser loads the Astro page → React app mounts → `AppRouter` selects the active section → feature component calls the relevant service in `src/api` → service exchanges data with the backend → DTOs type the response and populate dashboards/forms.
   - The main architectural boundary is therefore **UI vs API services**, with role-based screens sitting above domain-specific service modules.

13. **What to draw in an architecture diagram**
   - A simple diagram should show:
     - **Astro shell** at the top
     - **React application/router** inside it
     - Three major UI branches: **Admin**, **Artist**, **Customer**
     - A shared **auth/user layer**
     - A shared **API service layer**
     - A shared **DTO/types layer**
     - External **backend API/server** outside the repo boundary

Main entry points: [`src/components/AdminDashboard.tsx`](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminDashboard.tsx) (Admin dashboard), [`src/api/config.ts`](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/config.ts) (API config), [`src/components/AppRouter.tsx`](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AppRouter.tsx) (App router), [`src/types/dtos.ts`](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/types/dtos.ts) (DTO types)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shell["Astro shell"]
  node_src_pages_index_astro["Home page<br/>astro entry<br/>[index.astro]"]
  node_astro_config_mjs["Astro config<br/>build config<br/>[astro.config.mjs]"]
end

subgraph group_app["React app"]
  node_src_components_approuter_tsx["App router<br/>spa router<br/>[AppRouter.tsx]"]
  node_src_components_auth_tsx["Auth<br/>session gate<br/>[Auth.tsx]"]
end

subgraph group_domain["Domain UI"]
  node_src_components_releaseslist_tsx["Releases list<br/>catalog view<br/>[ReleasesList.tsx]"]
  node_src_components_releasedetail_tsx["Release detail<br/>release view<br/>[ReleaseDetail.tsx]"]
  node_src_components_createreleaseform_tsx["Create release<br/>release form"]
  node_src_components_tracksmanager_tsx["Tracks manager<br/>track editor<br/>[TracksManager.tsx]"]
  node_src_components_admindashboard_tsx["Admin dashboard<br/>admin hub<br/>[AdminDashboard.tsx]"]
  node_src_components_adminsummary_tsx["Admin summary<br/>admin overview<br/>[AdminSummary.tsx]"]
  node_src_components_adminusers_tsx["Admin users<br/>user admin<br/>[AdminUsers.tsx]"]
  node_src_components_adminorders_tsx["Admin orders<br/>order ops<br/>[AdminOrders.tsx]"]
  node_src_components_admininventory_tsx["Admin inventory<br/>inventory ops<br/>[AdminInventory.tsx]"]
  node_src_components_artistdashboard_tsx["Artist dashboard<br/>artist hub"]
  node_src_components_artistprofile_tsx["Artist profile<br/>[ArtistProfile.tsx]"]
  node_src_components_artistsales_tsx["Artist sales<br/>sales view<br/>[ArtistSales.tsx]"]
  node_src_components_customerdashboard_tsx["Customer dashboard<br/>customer hub"]
  node_src_components_customerprofile_tsx["Customer profile"]
  node_src_components_customerorders_tsx["Customer orders<br/>order view<br/>[CustomerOrders.tsx]"]
end

subgraph group_data["Data layer"]
  node_src_api_release_service_ts["Release service<br/>api client<br/>[releaseService.ts]"]
  node_src_api_track_service_ts["Track service<br/>api client<br/>[trackService.ts]"]
  node_src_api_artist_service_ts["Artist service<br/>api client<br/>[artistService.ts]"]
  node_src_api_user_service_ts["User service<br/>api client<br/>[userService.ts]"]
  node_src_api_genre_service_ts["Genre service<br/>api client<br/>[genreService.ts]"]
  node_src_api_merch_service_ts["Merch service<br/>api client<br/>[merchService.ts]"]
  node_src_api_shop_service_ts["Shop service<br/>api client<br/>[shopService.ts]"]
  node_src_api_config_ts["API config<br/>endpoint config<br/>[config.ts]"]
  node_src_types_dtos_ts["DTO types<br/>shared types<br/>[dtos.ts]"]
end

node_backend_api[("Backend API<br/>external system")]

node_src_pages_index_astro -->|"mounts"| node_src_components_approuter_tsx
node_astro_config_mjs -.->|"builds"| node_src_pages_index_astro
node_src_components_approuter_tsx -->|"gates"| node_src_components_auth_tsx
node_src_components_approuter_tsx -->|"admin"| node_src_components_admindashboard_tsx
node_src_components_approuter_tsx -->|"artist"| node_src_components_artistdashboard_tsx
node_src_components_approuter_tsx -->|"customer"| node_src_components_customerdashboard_tsx
node_src_components_approuter_tsx -->|"catalog"| node_src_components_releaseslist_tsx
node_src_components_releaseslist_tsx -->|"opens"| node_src_components_releasedetail_tsx
node_src_components_releasedetail_tsx -->|"edits"| node_src_components_createreleaseform_tsx
node_src_components_createreleaseform_tsx -->|"uses"| node_src_components_tracksmanager_tsx
node_src_components_admindashboard_tsx -->|"shows"| node_src_components_adminsummary_tsx
node_src_components_admindashboard_tsx -->|"manages"| node_src_components_adminusers_tsx
node_src_components_admindashboard_tsx -->|"manages"| node_src_components_adminorders_tsx
node_src_components_admindashboard_tsx -->|"manages"| node_src_components_admininventory_tsx
node_src_components_artistdashboard_tsx -->|"shows"| node_src_components_artistprofile_tsx
node_src_components_artistdashboard_tsx -->|"shows"| node_src_components_artistsales_tsx
node_src_components_customerdashboard_tsx -->|"shows"| node_src_components_customerprofile_tsx
node_src_components_customerdashboard_tsx -->|"shows"| node_src_components_customerorders_tsx
node_src_components_releasedetail_tsx -->|"fetches"| node_src_api_release_service_ts
node_src_components_tracksmanager_tsx -->|"fetches"| node_src_api_track_service_ts
node_src_components_artistprofile_tsx -->|"fetches"| node_src_api_artist_service_ts
node_src_components_auth_tsx -->|"auth/user"| node_src_api_user_service_ts
node_src_components_adminusers_tsx -->|"fetches"| node_src_api_user_service_ts
node_src_components_admindashboard_tsx -->|"commerce"| node_src_api_shop_service_ts
node_src_components_admininventory_tsx -->|"fetches"| node_src_api_shop_service_ts
node_src_components_artistsales_tsx -->|"fetches"| node_src_api_shop_service_ts
node_src_components_customerorders_tsx -->|"fetches"| node_src_api_shop_service_ts
node_src_components_artistdashboard_tsx -->|"fetches"| node_src_api_merch_service_ts
node_src_components_admindashboard_tsx -->|"fetches"| node_src_api_merch_service_ts
node_src_components_admindashboard_tsx -->|"fetches"| node_src_api_genre_service_ts
node_src_api_release_service_ts -->|"uses"| node_src_api_config_ts
node_src_api_track_service_ts -->|"uses"| node_src_api_config_ts
node_src_api_artist_service_ts -->|"uses"| node_src_api_config_ts
node_src_api_user_service_ts -->|"uses"| node_src_api_config_ts
node_src_api_genre_service_ts -->|"uses"| node_src_api_config_ts
node_src_api_merch_service_ts -->|"uses"| node_src_api_config_ts
node_src_api_shop_service_ts -->|"uses"| node_src_api_config_ts
node_src_api_release_service_ts -->|"types"| node_src_types_dtos_ts
node_src_api_track_service_ts -->|"types"| node_src_types_dtos_ts
node_src_api_artist_service_ts -->|"types"| node_src_types_dtos_ts
node_src_api_user_service_ts -->|"types"| node_src_types_dtos_ts
node_src_api_genre_service_ts -->|"types"| node_src_types_dtos_ts
node_src_api_merch_service_ts -->|"types"| node_src_types_dtos_ts
node_src_api_shop_service_ts -->|"types"| node_src_types_dtos_ts
node_src_api_config_ts -->|"calls"| node_backend_api

click node_src_pages_index_astro "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/pages/index.astro"
click node_astro_config_mjs "https://github.com/alejandrolog/retrograde-raspberry/blob/master/astro.config.mjs"
click node_src_components_approuter_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AppRouter.tsx"
click node_src_components_auth_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/Auth.tsx"
click node_src_components_releaseslist_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ReleasesList.tsx"
click node_src_components_releasedetail_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ReleaseDetail.tsx"
click node_src_components_createreleaseform_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CreateReleaseForm.tsx"
click node_src_components_tracksmanager_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/TracksManager.tsx"
click node_src_components_admindashboard_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminDashboard.tsx"
click node_src_components_adminsummary_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminSummary.tsx"
click node_src_components_adminusers_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminUsers.tsx"
click node_src_components_adminorders_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminOrders.tsx"
click node_src_components_admininventory_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminInventory.tsx"
click node_src_components_artistdashboard_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ArtistDashboard.tsx"
click node_src_components_artistprofile_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ArtistProfile.tsx"
click node_src_components_artistsales_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ArtistSales.tsx"
click node_src_components_customerdashboard_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CustomerDashboard.tsx"
click node_src_components_customerprofile_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CustomerProfile.tsx"
click node_src_components_customerorders_tsx "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CustomerOrders.tsx"
click node_src_api_release_service_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/releaseService.ts"
click node_src_api_track_service_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/trackService.ts"
click node_src_api_artist_service_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/artistService.ts"
click node_src_api_user_service_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/userService.ts"
click node_src_api_genre_service_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/genreService.ts"
click node_src_api_merch_service_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/merchService.ts"
click node_src_api_shop_service_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/shopService.ts"
click node_src_api_config_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/config.ts"
click node_src_types_dtos_ts "https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/types/dtos.ts"

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_src_pages_index_astro,node_astro_config_mjs toneBlue
class node_src_components_approuter_tsx,node_src_components_auth_tsx toneAmber
class node_src_components_releaseslist_tsx,node_src_components_releasedetail_tsx,node_src_components_createreleaseform_tsx,node_src_components_tracksmanager_tsx,node_src_components_admindashboard_tsx,node_src_components_adminsummary_tsx,node_src_components_adminusers_tsx,node_src_components_adminorders_tsx,node_src_components_admininventory_tsx,node_src_components_artistdashboard_tsx,node_src_components_artistprofile_tsx,node_src_components_artistsales_tsx,node_src_components_customerdashboard_tsx,node_src_components_customerprofile_tsx,node_src_components_customerorders_tsx toneMint
class node_src_api_release_service_ts,node_src_api_track_service_ts,node_src_api_artist_service_ts,node_src_api_user_service_ts,node_src_api_genre_service_ts,node_src_api_merch_service_ts,node_src_api_shop_service_ts,node_src_api_config_ts,node_src_types_dtos_ts toneRose
class node_backend_api toneNeutral
```

## Components

### Astro shell

Static entry and app host

- [Home page](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/pages/index.astro): astro entry · Single Astro route that boots the app · `src/pages/index.astro`
- [Astro config](https://github.com/alejandrolog/retrograde-raspberry/blob/master/astro.config.mjs): build config · Astro build/runtime configuration · `astro.config.mjs`

### React app

Client-side UI and role routing

- [App router](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AppRouter.tsx): spa router · Top-level client app boundary and role/navigation switch · `src/components/AppRouter.tsx`
- [Auth](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/Auth.tsx): session gate · Login and user-role establishment · `src/components/Auth.tsx`

### Domain UI

Role-based screens and music commerce workflows

- [Releases list](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ReleasesList.tsx): catalog view · Browse releases · `src/components/ReleasesList.tsx`
- [Release detail](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ReleaseDetail.tsx): release view · Inspect a release and its details · `src/components/ReleaseDetail.tsx`
- [Create release](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CreateReleaseForm.tsx): release form · Create or edit a release · `src/components/CreateReleaseForm.tsx`
- [Tracks manager](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/TracksManager.tsx): track editor · Manage tracks for a release · `src/components/TracksManager.tsx`
- [Admin dashboard](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminDashboard.tsx): admin hub · Primary admin entry screen · `src/components/AdminDashboard.tsx`
- [Admin summary](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminSummary.tsx): admin overview · Administrative summary and metrics · `src/components/AdminSummary.tsx`
- [Admin users](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminUsers.tsx): user admin · User management and oversight · `src/components/AdminUsers.tsx`
- [Admin orders](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminOrders.tsx): order ops · Order management for admins · `src/components/AdminOrders.tsx`
- [Admin inventory](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/AdminInventory.tsx): inventory ops · Inventory and stock management · `src/components/AdminInventory.tsx`
- [Artist dashboard](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ArtistDashboard.tsx): artist hub · Primary artist entry screen · `src/components/ArtistDashboard.tsx`
- [Artist profile](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ArtistProfile.tsx): artist profile · Artist account and profile view · `src/components/ArtistProfile.tsx`
- [Artist sales](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/ArtistSales.tsx): sales view · Artist sales visibility · `src/components/ArtistSales.tsx`
- [Customer dashboard](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CustomerDashboard.tsx): customer hub · Primary customer entry screen · `src/components/CustomerDashboard.tsx`
- [Customer profile](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CustomerProfile.tsx): customer profile · Customer account and profile view · `src/components/CustomerProfile.tsx`
- [Customer orders](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/components/CustomerOrders.tsx): order view · Customer order history and status · `src/components/CustomerOrders.tsx`

### Data layer

API clients and shared DTOs

- [Release service](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/releaseService.ts): api client · HTTP client for releases · `src/api/releaseService.ts`
- [Track service](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/trackService.ts): api client · HTTP client for tracks · `src/api/trackService.ts`
- [Artist service](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/artistService.ts): api client · HTTP client for artist data · `src/api/artistService.ts`
- [User service](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/userService.ts): api client · HTTP client for users and profiles · `src/api/userService.ts`
- [Genre service](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/genreService.ts): api client · HTTP client for genres · `src/api/genreService.ts`
- [Merch service](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/merchService.ts): api client · HTTP client for merch · `src/api/merchService.ts`
- [Shop service](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/shopService.ts): api client · HTTP client for shop and commerce flows · `src/api/shopService.ts`
- [API config](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/api/config.ts): endpoint config · Shared API base and request configuration · `src/api/config.ts`
- [DTO types](https://github.com/alejandrolog/retrograde-raspberry/blob/master/src/types/dtos.ts): shared types · Shared data contracts for API payloads · `src/types/dtos.ts`

### Other components

- **Backend API**: external system · Remote server consumed by the app

## Connections

- Home page → App router: mounts · Astro page hands off to the React app
- Astro config → Home page: builds · Astro configuration controls the shell
- App router → Auth: gates · App router establishes authenticated context
- App router → Admin dashboard: admin · Routes to admin experience
- App router → Artist dashboard: artist · Routes to artist experience
- App router → Customer dashboard: customer · Routes to customer experience
- App router → Releases list: catalog · Exposes release browsing
- Releases list → Release detail: opens · List leads into release detail
- Release detail → Create release: edits · Detail view can branch into release editing
- Create release → Tracks manager: uses · Release editing includes track management
- Admin dashboard → Admin summary: shows · Admin hub surfaces summary
- Admin dashboard → Admin users: manages · Admin hub links user management
- Admin dashboard → Admin orders: manages · Admin hub links orders
- Admin dashboard → Admin inventory: manages · Admin hub links inventory
- Artist dashboard → Artist profile: shows · Artist hub links profile
- Artist dashboard → Artist sales: shows · Artist hub links sales
- Customer dashboard → Customer profile: shows · Customer hub links profile
- Customer dashboard → Customer orders: shows · Customer hub links orders
- Release detail → Release service: fetches · Release UI reads release data
- Tracks manager → Track service: fetches · Track editor reads and updates tracks
- Artist profile → Artist service: fetches · Artist profile uses artist data
- Auth → User service: auth/user · Auth and user context come from user API
- Admin users → User service: fetches · User management uses user service
- Admin dashboard → Shop service: commerce · Admin commerce views use shop APIs
- Admin inventory → Shop service: fetches · Inventory view uses shop/stock APIs
- Artist sales → Shop service: fetches · Artist sales view uses commerce data
- Customer orders → Shop service: fetches · Customer orders use shop APIs
- Artist dashboard → Merch service: fetches · Artist merch management uses merch API
- Admin dashboard → Merch service: fetches · Admin merch management uses merch API
- Admin dashboard → Genre service: fetches · Genre administration uses genre API
- Release service → API config: uses · Service shares API configuration
- Track service → API config: uses · Service shares API configuration
- Artist service → API config: uses · Service shares API configuration
- User service → API config: uses · Service shares API configuration
- Genre service → API config: uses · Service shares API configuration
- Merch service → API config: uses · Service shares API configuration
- Shop service → API config: uses · Service shares API configuration
- Release service → DTO types: types · Services and UI share DTO contracts
- Track service → DTO types: types · Services and UI share DTO contracts
- Artist service → DTO types: types · Services and UI share DTO contracts
- User service → DTO types: types · Services and UI share DTO contracts
- Genre service → DTO types: types · Services and UI share DTO contracts
- Merch service → DTO types: types · Services and UI share DTO contracts
- Shop service → DTO types: types · Services and UI share DTO contracts
- API config → Backend API: calls · API layer communicates with the remote backend
