# eddymandran/bm-horizon-frontend architecture

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

- Interactive diagram: https://gitdiagram.com/eddymandran/bm-horizon-frontend
- Repository: https://github.com/eddymandran/bm-horizon-frontend

## Overview

BM Horizon Extérieur is an Angular frontend for a home-exterior services business. Visitors browse published projects and submit a quote request with photos; administrators sign in, manage service categories and project records, and upload before/after photos. Routing and HTTP configuration provide the application shell, while feature services communicate with the external API. The README describes Angular tooling rather than product behavior, so the feature map is based on the supplied source excerpts and index; unsampled implementation details are not inferred.

Main entry points: [`src/app/app.routes.ts`](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/app.routes.ts) (Feature routes), [`src/app/devis/pages/devis-formulaire/devis-formulaire.ts`](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/devis/pages/devis-formulaire/devis-formulaire.ts) (Quote form), [`src/app/realisation/pages/realisation-admin/realisation-admin.ts`](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/pages/realisation-admin/realisation-admin.ts) (Project admin), [`src/app/auth/services/auth.ts`](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/auth/services/auth.ts) (Auth service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app["Application shell<br/>[app.ts]"]
  node_routes["Feature routes<br/>[app.routes.ts]"]
  node_httpconfig["HTTP configuration<br/>[app.config.ts]"]
end

subgraph group_auth["Authentication"]
  node_login["Login page<br/>[login.ts]"]
  node_authservice["Auth service<br/>[auth.ts]"]
  node_guard["Auth guard<br/>[auth-guard.ts]"]
  node_adminlayout["Admin layout<br/>[admin-layout.ts]"]
end

subgraph group_quote["Quote Requests"]
  node_quoteform["Quote form"]
  node_photorules["Photo rules<br/>[regles-photos.ts]"]
  node_quoteservice["Quote service<br/>[devis.ts]"]
end

subgraph group_projects["Projects &amp; Categories"]
  node_categories["Category admin<br/>[categorie-admin.ts]"]
  node_categoryservice["Category service<br/>[categorie.ts]"]
  node_gallery["Project gallery"]
  node_comparison["Photo comparison"]
  node_projectadmin["Project admin"]
  node_photomanager["Project photos"]
  node_projectservice["Project service<br/>[realisation.ts]"]
end

node_visitor(("Visitor"))
node_administrator(("Administrator"))
node_api{{"Backend API"}}

node_visitor -->|"opens pages"| node_routes
node_administrator -->|"opens admin"| node_routes
node_routes -->|"routes to"| node_login
node_routes -->|"routes to"| node_gallery
node_routes -->|"routes to"| node_quoteform
node_routes -->|"guards admin"| node_guard
node_routes -->|"loads admin"| node_adminlayout
node_routes -->|"routes to"| node_categories
node_routes -->|"routes to"| node_projectadmin
node_login -->|"calls"| node_authservice
node_guard -->|"checks session"| node_authservice
node_adminlayout -->|"uses"| node_authservice
node_authservice -->|"requests auth"| node_api
node_categoryservice -->|"requests categories"| node_api
node_categories -->|"manages categories"| node_categoryservice
node_quoteform -->|"loads offerings"| node_categoryservice
node_quoteform -->|"validates photos"| node_photorules
node_quoteform -->|"submits request"| node_quoteservice
node_quoteservice -->|"sends quote"| node_api
node_gallery -->|"loads projects"| node_projectservice
node_gallery -->|"renders"| node_comparison
node_projectadmin -->|"manages projects"| node_projectservice
node_projectadmin -->|"loads categories"| node_categoryservice
node_projectadmin -->|"uses photo manager"| node_photomanager
node_photomanager -->|"manages photos"| node_projectservice
node_projectservice -->|"requests projects"| node_api
node_httpconfig -->|"provides routing"| node_routes

click node_app "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/app.ts"
click node_routes "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/app.routes.ts"
click node_httpconfig "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/app.config.ts"
click node_login "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/auth/pages/login/login.ts"
click node_authservice "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/auth/services/auth.ts"
click node_guard "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/auth/guards/auth-guard.ts"
click node_adminlayout "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/admin/layout/admin-layout/admin-layout.ts"
click node_categories "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/categorie/pages/categorie-admin/categorie-admin.ts"
click node_categoryservice "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/categorie/services/categorie.ts"
click node_quoteform "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/devis/pages/devis-formulaire/devis-formulaire.ts"
click node_photorules "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/devis/regles-photos.ts"
click node_quoteservice "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/devis/services/devis.ts"
click node_gallery "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/pages/realisation-galerie/realisation-galerie.ts"
click node_comparison "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/components/comparateur-photos/comparateur-photos.ts"
click node_projectadmin "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/pages/realisation-admin/realisation-admin.ts"
click node_photomanager "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/components/realisation-photos/realisation-photos.ts"
click node_projectservice "https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/services/realisation.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_app,node_routes,node_httpconfig toneBlue
class node_login,node_authservice,node_guard,node_adminlayout toneAmber
class node_quoteform,node_photorules,node_quoteservice,node_api toneMint
class node_categories,node_categoryservice,node_gallery,node_comparison,node_projectadmin,node_photomanager,node_projectservice toneRose
class node_visitor,node_administrator toneIndigo
```

## Components

### Application

- [Application shell](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/app.ts): `src/app/app.ts`
- [Feature routes](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/app.routes.ts): `src/app/app.routes.ts`
- [HTTP configuration](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/app.config.ts): `src/app/app.config.ts`

### Authentication

- [Login page](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/auth/pages/login/login.ts): `src/app/auth/pages/login/login.ts`
- [Auth service](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/auth/services/auth.ts): `src/app/auth/services/auth.ts`
- [Auth guard](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/auth/guards/auth-guard.ts): `src/app/auth/guards/auth-guard.ts`
- [Admin layout](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/admin/layout/admin-layout/admin-layout.ts): `src/app/admin/layout/admin-layout/admin-layout.ts`

### Quote Requests

- [Quote form](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/devis/pages/devis-formulaire/devis-formulaire.ts): `src/app/devis/pages/devis-formulaire/devis-formulaire.ts`
- [Photo rules](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/devis/regles-photos.ts): `src/app/devis/regles-photos.ts`
- [Quote service](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/devis/services/devis.ts): `src/app/devis/services/devis.ts`

### Projects & Categories

- [Category admin](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/categorie/pages/categorie-admin/categorie-admin.ts): `src/app/categorie/pages/categorie-admin/categorie-admin.ts`
- [Category service](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/categorie/services/categorie.ts): `src/app/categorie/services/categorie.ts`
- [Project gallery](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/pages/realisation-galerie/realisation-galerie.ts): `src/app/realisation/pages/realisation-galerie/realisation-galerie.ts`
- [Photo comparison](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/components/comparateur-photos/comparateur-photos.ts): `src/app/realisation/components/comparateur-photos/comparateur-photos.ts`
- [Project admin](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/pages/realisation-admin/realisation-admin.ts): `src/app/realisation/pages/realisation-admin/realisation-admin.ts`
- [Project photos](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/components/realisation-photos/realisation-photos.ts): `src/app/realisation/components/realisation-photos/realisation-photos.ts`
- [Project service](https://github.com/eddymandran/bm-horizon-frontend/blob/main/src/app/realisation/services/realisation.ts): `src/app/realisation/services/realisation.ts`

### Other components

- **Visitor**
- **Administrator**
- **Backend API**

## Connections

- Visitor → Feature routes: opens pages (evidence: `src/app/app.routes.ts`)
- Administrator → Feature routes: opens admin (evidence: `src/app/app.routes.ts`)
- Feature routes → Login page: routes to (evidence: `src/app/app.routes.ts`)
- Feature routes → Project gallery: routes to (evidence: `src/app/app.routes.ts`)
- Feature routes → Quote form: routes to (evidence: `src/app/app.routes.ts`)
- Feature routes → Auth guard: guards admin (evidence: `src/app/app.routes.ts`)
- Feature routes → Admin layout: loads admin (evidence: `src/app/app.routes.ts`)
- Feature routes → Category admin: routes to (evidence: `src/app/app.routes.ts`)
- Feature routes → Project admin: routes to (evidence: `src/app/app.routes.ts`)
- Login page → Auth service: calls (evidence: `src/app/auth/pages/login/login.ts`)
- Auth guard → Auth service: checks session (evidence: `src/app/auth/guards/auth-guard.ts`)
- Admin layout → Auth service: uses (evidence: `src/app/admin/layout/admin-layout/admin-layout.ts`)
- Auth service → Backend API: requests auth (evidence: `src/app/auth/services/auth.ts`)
- Category service → Backend API: requests categories (evidence: `src/app/categorie/services/categorie.ts`)
- Category admin → Category service: manages categories (evidence: `src/app/categorie/pages/categorie-admin/categorie-admin.ts`)
- Quote form → Category service: loads offerings (evidence: `src/app/devis/pages/devis-formulaire/devis-formulaire.ts`)
- Quote form → Photo rules: validates photos (evidence: `src/app/devis/pages/devis-formulaire/devis-formulaire.ts`)
- Quote form → Quote service: submits request (evidence: `src/app/devis/pages/devis-formulaire/devis-formulaire.ts`)
- Quote service → Backend API: sends quote (evidence: `src/app/devis/services/devis.ts`)
- Project gallery → Project service: loads projects (evidence: `src/app/realisation/pages/realisation-galerie/realisation-galerie.ts`)
- Project gallery → Photo comparison: renders (evidence: `src/app/realisation/pages/realisation-galerie/realisation-galerie.ts`)
- Project admin → Project service: manages projects (evidence: `src/app/realisation/pages/realisation-admin/realisation-admin.ts`)
- Project admin → Category service: loads categories (evidence: `src/app/realisation/pages/realisation-admin/realisation-admin.ts`)
- Project admin → Project photos: uses photo manager (evidence: `src/app/realisation/pages/realisation-admin/realisation-admin.ts`)
- Project photos → Project service: manages photos (evidence: `src/app/realisation/components/realisation-photos/realisation-photos.ts`)
- Project service → Backend API: requests projects (evidence: `src/app/realisation/services/realisation.ts`)
- HTTP configuration → Feature routes: provides routing (evidence: `src/app/app.config.ts`)
