# semah-soudeni/web-project architecture

> Architecture diagram of the GitHub repository semah-soudeni/web-project, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/semah-soudeni/web-project
- Repository: https://github.com/semah-soudeni/web-project

## Overview

This Symfony application is a campus clubs and events portal: visitors browse club information and upcoming events, then sign in or register for events; members can join clubs, while administrators manage events and communicate with club members. The graph also shows account creation and the map as distinct product areas. Event listing, registration, membership creation, signup, and selected admin operations are supported by sampled controller code. Other controllers and pages appear in the tree but were not sampled, so their internal data wiring is not inferred.

Main entry points: [`src/Controller/AdminController.php`](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/AdminController.php) (Event administration), [`src/Controller/EventsController.php`](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/EventsController.php) (Event listing), [`src/Entity`](https://github.com/semah-soudeni/web-project/tree/symfony/src/Entity) (Domain entities), [`config/packages/doctrine.yaml`](https://github.com/semah-soudeni/web-project/blob/symfony/config/packages/doctrine.yaml) (Application database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Portal experience"]
  node_home["Home page<br/>[HomeController.php]"]
  node_club_pages["Club pages"]
  node_club_templates["Club templates"]
  node_map["Campus map<br/>[MapController.php]"]
  node_shared_templates["Portal templates"]
end

subgraph group_accounts["Accounts and membership"]
  node_signup["Account signup"]
  node_signin["Account sign-in"]
  node_authenticator["Login authenticator"]
  node_membership["Join a club"]
  node_membership_repo["Membership queries"]
end

subgraph group_events["Events and administration"]
  node_events["Event listing"]
  node_admin["Event administration"]
  node_admin_templates["Admin pages"]
  node_event_templates["Event pages"]
  node_mailer["Email service"]
end

subgraph group_domain["Domain and persistence"]
  node_clubs_repo["Club queries"]
  node_events_repo["Event queries"]
  node_register_repo["Registration queries"]
  node_entities["Domain entities"]
  node_database[("Application database<br/>[doctrine.yaml]")]
end

node_visitor(("Visitor or member"))
node_staff_actor(("Club administrator"))

node_visitor -->|"requests page"| node_home
node_visitor -->|"browses clubs"| node_club_pages
node_club_pages -->|"renders"| node_club_templates
node_visitor -->|"requests map"| node_map
node_visitor -->|"creates account"| node_signup
node_signup -->|"persists student"| node_entities
node_signup -->|"authenticates user"| node_authenticator
node_visitor -->|"signs in"| node_signin
node_signin -->|"authenticates"| node_authenticator
node_visitor -->|"joins club"| node_membership
node_membership -->|"looks up club"| node_clubs_repo
node_membership -->|"persists membership"| node_entities
node_visitor -->|"browses events"| node_events
node_events -->|"queries events"| node_events_repo
node_events -->|"checks registrations"| node_register_repo
node_events -->|"persists registration"| node_entities
node_events -->|"renders"| node_event_templates
node_staff_actor -->|"manages events"| node_admin
node_admin -->|"reads and updates events"| node_events_repo
node_admin -->|"queries clubs"| node_clubs_repo
node_admin -->|"finds club membership"| node_membership_repo
node_admin -->|"persists event changes"| node_entities
node_admin -->|"renders"| node_admin_templates
node_admin -.->|"sends club email"| node_mailer
node_entities -->|"maps domain data"| node_database
node_events_repo -->|"queries event data"| node_database
node_register_repo -->|"queries registrations"| node_database
node_clubs_repo -->|"queries club data"| node_database
node_membership_repo -->|"queries memberships"| node_database

click node_home "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/HomeController.php"
click node_club_pages "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/ClubsController.php"
click node_club_templates "https://github.com/semah-soudeni/web-project/tree/symfony/templates/clubs"
click node_map "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/MapController.php"
click node_shared_templates "https://github.com/semah-soudeni/web-project/tree/symfony/templates"
click node_signup "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/SignupController.php"
click node_signin "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/SigninController.php"
click node_authenticator "https://github.com/semah-soudeni/web-project/blob/symfony/src/Security/LoginFormAuthenticator.php"
click node_membership "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/AjouterController.php"
click node_membership_repo "https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/MembershipRepository.php"
click node_events "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/EventsController.php"
click node_admin "https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/AdminController.php"
click node_admin_templates "https://github.com/semah-soudeni/web-project/tree/symfony/templates/admin"
click node_event_templates "https://github.com/semah-soudeni/web-project/tree/symfony/templates/events"
click node_clubs_repo "https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/ClubsRepository.php"
click node_events_repo "https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/EventsRepository.php"
click node_register_repo "https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/RegisterRepository.php"
click node_entities "https://github.com/semah-soudeni/web-project/tree/symfony/src/Entity"
click node_database "https://github.com/semah-soudeni/web-project/blob/symfony/config/packages/doctrine.yaml"

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_home,node_club_pages,node_club_templates,node_map,node_shared_templates toneBlue
class node_signup,node_signin,node_authenticator,node_membership,node_membership_repo toneAmber
class node_events,node_admin,node_admin_templates,node_event_templates,node_mailer toneMint
class node_clubs_repo,node_events_repo,node_register_repo,node_entities,node_database toneRose
class node_visitor,node_staff_actor toneIndigo
```

## Components

### Portal experience

- [Home page](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/HomeController.php): `src/Controller/HomeController.php`
- [Club pages](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/ClubsController.php): `src/Controller/ClubsController.php`
- [Club templates](https://github.com/semah-soudeni/web-project/tree/symfony/templates/clubs): `templates/clubs`
- [Campus map](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/MapController.php): `src/Controller/MapController.php`
- [Portal templates](https://github.com/semah-soudeni/web-project/tree/symfony/templates): `templates`

### Accounts and membership

- [Account signup](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/SignupController.php): `src/Controller/SignupController.php`
- [Account sign-in](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/SigninController.php): `src/Controller/SigninController.php`
- [Login authenticator](https://github.com/semah-soudeni/web-project/blob/symfony/src/Security/LoginFormAuthenticator.php): `src/Security/LoginFormAuthenticator.php`
- [Join a club](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/AjouterController.php): `src/Controller/AjouterController.php`
- [Membership queries](https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/MembershipRepository.php): `src/Repository/MembershipRepository.php`

### Events and administration

- [Event listing](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/EventsController.php): `src/Controller/EventsController.php`
- [Event administration](https://github.com/semah-soudeni/web-project/blob/symfony/src/Controller/AdminController.php): `src/Controller/AdminController.php`
- [Admin pages](https://github.com/semah-soudeni/web-project/tree/symfony/templates/admin): `templates/admin`
- [Event pages](https://github.com/semah-soudeni/web-project/tree/symfony/templates/events): `templates/events`
- **Email service**

### Domain and persistence

- [Club queries](https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/ClubsRepository.php): `src/Repository/ClubsRepository.php`
- [Event queries](https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/EventsRepository.php): `src/Repository/EventsRepository.php`
- [Registration queries](https://github.com/semah-soudeni/web-project/blob/symfony/src/Repository/RegisterRepository.php): `src/Repository/RegisterRepository.php`
- [Domain entities](https://github.com/semah-soudeni/web-project/tree/symfony/src/Entity): `src/Entity`
- [Application database](https://github.com/semah-soudeni/web-project/blob/symfony/config/packages/doctrine.yaml): `config/packages/doctrine.yaml`

### Other components

- **Visitor or member**
- **Club administrator**

## Connections

- Visitor or member → Home page: requests page
- Visitor or member → Club pages: browses clubs
- Club pages → Club templates: renders
- Visitor or member → Campus map: requests map
- Visitor or member → Account signup: creates account
- Account signup → Domain entities: persists student
- Account signup → Login authenticator: authenticates user
- Visitor or member → Account sign-in: signs in
- Account sign-in → Login authenticator: authenticates
- Visitor or member → Join a club: joins club
- Join a club → Club queries: looks up club
- Join a club → Domain entities: persists membership
- Visitor or member → Event listing: browses events
- Event listing → Event queries: queries events
- Event listing → Registration queries: checks registrations
- Event listing → Domain entities: persists registration
- Event listing → Event pages: renders
- Club administrator → Event administration: manages events
- Event administration → Event queries: reads and updates events
- Event administration → Club queries: queries clubs
- Event administration → Membership queries: finds club membership
- Event administration → Domain entities: persists event changes
- Event administration → Admin pages: renders
- Event administration → Email service: sends club email
- Domain entities → Application database: maps domain data
- Event queries → Application database: queries event data
- Registration queries → Application database: queries registrations
- Club queries → Application database: queries club data
- Membership queries → Application database: queries memberships
