# flamy101/project architecture

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

## Overview

ArvoAjo is a driving-school website for presenting courses, instructors, training and payment information, and helping visitors contact or register with the school. The app routes visitors to these page areas; the contacts page combines contact details, a map and a form, while the server exposes a registration-email endpoint. Source excerpts confirm the page routing and some component relationships, but not how the form submits or how the blog and training details are implemented, so those links are omitted.

Main entry points: [`client/src/App.tsx`](https://github.com/flamy101/project/blob/main/client/src/App.tsx) (Page router), [`client/src/pages/contacts/Contacts.tsx`](https://github.com/flamy101/project/blob/main/client/src/pages/contacts/Contacts.tsx) (Contacts page), [`client/src/main.tsx`](https://github.com/flamy101/project/blob/main/client/src/main.tsx) (React entry), [`client/src/pages/coursesAndPrices/CoursesAndPrices.tsx`](https://github.com/flamy101/project/blob/main/client/src/pages/coursesAndPrices/CoursesAndPrices.tsx) (Courses and prices)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application shell"]
  node_entry["React entry<br/>[main.tsx]"]
  node_language["Language context"]
  node_app_router["Page router<br/>[App.tsx]"]
  node_header["Header navigation<br/>[Header.tsx]"]
  node_footer["Footer links<br/>[Footer.tsx]"]
  node_translate_hook["Translation hook<br/>[UseTranslate.tsx]"]
end

subgraph group_learning["Courses and learning"]
  node_training["Training<br/>[Training.tsx]"]
  node_courses["Courses and prices"]
  node_course_data["Course catalog<br/>[CoursesData.tsx]"]
  node_payment["Payment information<br/>[Payment.tsx]"]
  node_payment_data["Payment details<br/>[PaymentData.tsx]"]
end

subgraph group_school["School information"]
  node_home["Home<br/>[Home.tsx]"]
  node_home_data["Home content<br/>[data.tsx]"]
  node_home_gallery["Home gallery<br/>[ImageGallery.tsx]"]
  node_instructors["Instructors<br/>[Instructors.tsx]"]
  node_instructor_data["Instructor profiles"]
end

subgraph group_contact["Contact and enrollment"]
  node_contacts["Contacts page<br/>[Contacts.tsx]"]
  node_contact_form["Contact form<br/>[Form.tsx]"]
  node_registration_submit["Registration submit"]
  node_map["Location map<br/>[Map.tsx]"]
  node_registration_api["Registration endpoint<br/>[index.js]"]
end

subgraph group_content["Site content"]
  node_blog["Blog<br/>[Blog.tsx]"]
  node_blog_gallery["Blog image gallery<br/>[BlogImgGallary.tsx]"]
  node_blog_redirects["Blog redirects<br/>[BlogRedirects.tsx]"]
  node_privacy["Privacy policy<br/>[PrivacyPolicy.tsx]"]
end

node_visitor(("Visitor"))
node_email_service["Ethereal SMTP"]
node_supabase[("Supabase storage")]

node_visitor -->|"opens site"| node_entry
node_entry -->|"wraps app"| node_language
node_entry -->|"renders"| node_app_router
node_app_router -->|"renders"| node_header
node_app_router -->|"renders"| node_footer
node_app_router -->|"routes to"| node_home
node_app_router -->|"routes to"| node_training
node_app_router -->|"routes to"| node_courses
node_app_router -->|"routes to"| node_instructors
node_app_router -->|"routes to"| node_payment
node_app_router -->|"routes to"| node_contacts
node_app_router -->|"routes to"| node_blog
node_app_router -->|"routes to"| node_privacy
node_home -->|"reads content"| node_home_data
node_home -->|"renders"| node_home_gallery
node_home_data -.->|"image URLs"| node_supabase
node_courses -->|"reads catalog"| node_course_data
node_courses -->|"translates"| node_translate_hook
node_instructors -->|"reads profiles"| node_instructor_data
node_instructors -->|"translates"| node_translate_hook
node_payment -->|"reads details"| node_payment_data
node_contacts -->|"renders form"| node_contact_form
node_contacts -->|"renders map"| node_map
node_contacts -->|"translates"| node_translate_hook
node_contact_form -->|"submits via"| node_registration_submit
node_registration_api -->|"sends email"| node_email_service
node_blog -->|"renders gallery"| node_blog_gallery
node_blog -->|"renders redirects"| node_blog_redirects

click node_entry "https://github.com/flamy101/project/blob/main/client/src/main.tsx"
click node_language "https://github.com/flamy101/project/blob/main/client/src/hooks/LanguageContext.tsx"
click node_app_router "https://github.com/flamy101/project/blob/main/client/src/App.tsx"
click node_header "https://github.com/flamy101/project/blob/main/client/src/components/Header.tsx"
click node_footer "https://github.com/flamy101/project/blob/main/client/src/components/footer/Footer.tsx"
click node_home "https://github.com/flamy101/project/blob/main/client/src/pages/home/Home.tsx"
click node_home_data "https://github.com/flamy101/project/blob/main/client/src/pages/home/data/data.tsx"
click node_home_gallery "https://github.com/flamy101/project/blob/main/client/src/pages/home/components/imageGallary/ImageGallery.tsx"
click node_training "https://github.com/flamy101/project/blob/main/client/src/pages/training/Training.tsx"
click node_courses "https://github.com/flamy101/project/blob/main/client/src/pages/coursesAndPrices/CoursesAndPrices.tsx"
click node_course_data "https://github.com/flamy101/project/blob/main/client/src/pages/coursesAndPrices/components/data/CoursesData.tsx"
click node_instructors "https://github.com/flamy101/project/blob/main/client/src/pages/instructors/Instructors.tsx"
click node_instructor_data "https://github.com/flamy101/project/blob/main/client/src/pages/instructors/components/data/Instructors_data.tsx"
click node_payment "https://github.com/flamy101/project/blob/main/client/src/pages/payment/Payment.tsx"
click node_payment_data "https://github.com/flamy101/project/blob/main/client/src/pages/payment/components/PaymentData.tsx"
click node_contacts "https://github.com/flamy101/project/blob/main/client/src/pages/contacts/Contacts.tsx"
click node_contact_form "https://github.com/flamy101/project/blob/main/client/src/pages/contacts/components/form/Form.tsx"
click node_registration_submit "https://github.com/flamy101/project/blob/main/client/src/pages/contacts/components/form/SubmitRegistration.tsx"
click node_map "https://github.com/flamy101/project/blob/main/client/src/pages/contacts/components/googleMap/Map.tsx"
click node_registration_api "https://github.com/flamy101/project/blob/main/server/index.js"
click node_blog "https://github.com/flamy101/project/blob/main/client/src/pages/blog/Blog.tsx"
click node_blog_gallery "https://github.com/flamy101/project/blob/main/client/src/pages/blog/components/BlogImgGallary/BlogImgGallary.tsx"
click node_blog_redirects "https://github.com/flamy101/project/blob/main/client/src/pages/blog/components/BlogRedirects/BlogRedirects.tsx"
click node_privacy "https://github.com/flamy101/project/blob/main/client/src/components/PrivacyPolicy/PrivacyPolicy.tsx"
click node_translate_hook "https://github.com/flamy101/project/blob/main/client/src/hooks/UseTranslate.tsx"

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_entry,node_language,node_app_router,node_header,node_footer,node_translate_hook toneBlue
class node_training,node_courses,node_course_data,node_payment,node_payment_data,node_supabase toneAmber
class node_home,node_home_data,node_home_gallery,node_instructors,node_instructor_data toneMint
class node_contacts,node_contact_form,node_registration_submit,node_map,node_registration_api toneRose
class node_blog,node_blog_gallery,node_blog_redirects,node_privacy,node_visitor,node_email_service toneIndigo
```

## Components

### Application shell

- [React entry](https://github.com/flamy101/project/blob/main/client/src/main.tsx): `client/src/main.tsx`
- [Language context](https://github.com/flamy101/project/blob/main/client/src/hooks/LanguageContext.tsx): `client/src/hooks/LanguageContext.tsx`
- [Page router](https://github.com/flamy101/project/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Header navigation](https://github.com/flamy101/project/blob/main/client/src/components/Header.tsx): `client/src/components/Header.tsx`
- [Footer links](https://github.com/flamy101/project/blob/main/client/src/components/footer/Footer.tsx): `client/src/components/footer/Footer.tsx`
- [Translation hook](https://github.com/flamy101/project/blob/main/client/src/hooks/UseTranslate.tsx): `client/src/hooks/UseTranslate.tsx`

### Courses and learning

- [Training](https://github.com/flamy101/project/blob/main/client/src/pages/training/Training.tsx): `client/src/pages/training/Training.tsx`
- [Courses and prices](https://github.com/flamy101/project/blob/main/client/src/pages/coursesAndPrices/CoursesAndPrices.tsx): `client/src/pages/coursesAndPrices/CoursesAndPrices.tsx`
- [Course catalog](https://github.com/flamy101/project/blob/main/client/src/pages/coursesAndPrices/components/data/CoursesData.tsx): `client/src/pages/coursesAndPrices/components/data/CoursesData.tsx`
- [Payment information](https://github.com/flamy101/project/blob/main/client/src/pages/payment/Payment.tsx): `client/src/pages/payment/Payment.tsx`
- [Payment details](https://github.com/flamy101/project/blob/main/client/src/pages/payment/components/PaymentData.tsx): `client/src/pages/payment/components/PaymentData.tsx`

### School information

- [Home](https://github.com/flamy101/project/blob/main/client/src/pages/home/Home.tsx): `client/src/pages/home/Home.tsx`
- [Home content](https://github.com/flamy101/project/blob/main/client/src/pages/home/data/data.tsx): `client/src/pages/home/data/data.tsx`
- [Home gallery](https://github.com/flamy101/project/blob/main/client/src/pages/home/components/imageGallary/ImageGallery.tsx): `client/src/pages/home/components/imageGallary/ImageGallery.tsx`
- [Instructors](https://github.com/flamy101/project/blob/main/client/src/pages/instructors/Instructors.tsx): `client/src/pages/instructors/Instructors.tsx`
- [Instructor profiles](https://github.com/flamy101/project/blob/main/client/src/pages/instructors/components/data/Instructors_data.tsx): `client/src/pages/instructors/components/data/Instructors_data.tsx`

### Contact and enrollment

- [Contacts page](https://github.com/flamy101/project/blob/main/client/src/pages/contacts/Contacts.tsx): `client/src/pages/contacts/Contacts.tsx`
- [Contact form](https://github.com/flamy101/project/blob/main/client/src/pages/contacts/components/form/Form.tsx): `client/src/pages/contacts/components/form/Form.tsx`
- [Registration submit](https://github.com/flamy101/project/blob/main/client/src/pages/contacts/components/form/SubmitRegistration.tsx): `client/src/pages/contacts/components/form/SubmitRegistration.tsx`
- [Location map](https://github.com/flamy101/project/blob/main/client/src/pages/contacts/components/googleMap/Map.tsx): `client/src/pages/contacts/components/googleMap/Map.tsx`
- [Registration endpoint](https://github.com/flamy101/project/blob/main/server/index.js): `server/index.js`

### Site content

- [Blog](https://github.com/flamy101/project/blob/main/client/src/pages/blog/Blog.tsx): `client/src/pages/blog/Blog.tsx`
- [Blog image gallery](https://github.com/flamy101/project/blob/main/client/src/pages/blog/components/BlogImgGallary/BlogImgGallary.tsx): `client/src/pages/blog/components/BlogImgGallary/BlogImgGallary.tsx`
- [Blog redirects](https://github.com/flamy101/project/blob/main/client/src/pages/blog/components/BlogRedirects/BlogRedirects.tsx): `client/src/pages/blog/components/BlogRedirects/BlogRedirects.tsx`
- [Privacy policy](https://github.com/flamy101/project/blob/main/client/src/components/PrivacyPolicy/PrivacyPolicy.tsx): `client/src/components/PrivacyPolicy/PrivacyPolicy.tsx`

### Other components

- **Visitor**
- **Ethereal SMTP**
- **Supabase storage**

## Connections

- Visitor → React entry: opens site
- React entry → Language context: wraps app
- React entry → Page router: renders
- Page router → Header navigation: renders
- Page router → Footer links: renders
- Page router → Home: routes to
- Page router → Training: routes to
- Page router → Courses and prices: routes to
- Page router → Instructors: routes to
- Page router → Payment information: routes to
- Page router → Contacts page: routes to
- Page router → Blog: routes to
- Page router → Privacy policy: routes to
- Home → Home content: reads content
- Home → Home gallery: renders
- Home content → Supabase storage: image URLs
- Courses and prices → Course catalog: reads catalog
- Courses and prices → Translation hook: translates
- Instructors → Instructor profiles: reads profiles
- Instructors → Translation hook: translates
- Payment information → Payment details: reads details
- Contacts page → Contact form: renders form
- Contacts page → Location map: renders map
- Contacts page → Translation hook: translates
- Contact form → Registration submit: submits via
- Registration endpoint → Ethereal SMTP: sends email
- Blog → Blog image gallery: renders gallery
- Blog → Blog redirects: renders redirects
