# astoriastudyabroad0-glitch/astoria architecture

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

- Interactive diagram: https://gitdiagram.com/astoriastudyabroad0-glitch/astoria
- Repository: https://github.com/astoriastudyabroad0-glitch/astoria

## Overview

Astoria is a study-abroad agency website: prospective students browse guidance and destinations, read articles, and submit contact or review forms; administrators manage that content and incoming submissions. App.jsx routes public and admin pages. Page components use service modules for Supabase-backed data, while shared components provide presentation. The README documents the agency’s admission, visa, scholarship, accommodation, and post-arrival offerings. Some page and admin implementations were not sampled, so their documented capabilities are shown without inferring unverified internal flows.

Main entry points: [`src/App.jsx`](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/App.jsx) (Route application), [`src/pages/Home.jsx`](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Home.jsx) (Home), [`src/pages/admin/Dashboard.jsx`](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/admin/Dashboard.jsx) (Admin dashboard), [`src/pages/Contact.jsx`](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Contact.jsx) (Contact form)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public website"]
  node_app["Route application<br/>[App.jsx]"]
  node_home["Home<br/>[Home.jsx]"]
  node_about["About<br/>[About.jsx]"]
  node_services_page["Study services<br/>[Services.jsx]"]
  node_countries_page["Destinations<br/>[Countries.jsx]"]
  node_contact["Contact form<br/>[Contact.jsx]"]
  node_blogs["Blog listing<br/>[Blogs.jsx]"]
  node_blog_detail["Blog article<br/>[BlogDetail.jsx]"]
end

subgraph group_admin["Admin workspace"]
  node_login["Admin login<br/>[Login.jsx]"]
  node_dashboard["Admin dashboard<br/>[Dashboard.jsx]"]
  node_word_editor["Word editor<br/>[WordEditor.jsx]"]
end

subgraph group_services["Data services"]
  node_blog_service["Blog service<br/>[BlogService.js]"]
  node_country_service["Country service<br/>[CountryService.js]"]
  node_message_service["Message service<br/>[MessageService.js]"]
  node_review_service["Review service<br/>[ReviewService.js]"]
  node_settings_service["Settings service<br/>[SettingsService.js]"]
  node_supabase_client["Supabase client<br/>[supabaseClient.js]"]
end

subgraph group_shared["Shared UI"]
  node_button["Button<br/>[Button.jsx]"]
  node_card["Card<br/>[Card.jsx]"]
  node_section["Section wrapper<br/>[SectionWrapper.jsx]"]
  node_footer["Footer<br/>[Footer.jsx]"]
end

node_visitor(("Prospective student"))
node_supabase[("Supabase")]

node_visitor -->|"opens site"| node_app
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_about
node_app -->|"routes to"| node_services_page
node_app -->|"routes to"| node_countries_page
node_app -->|"routes to"| node_contact
node_app -->|"routes to"| node_blogs
node_app -->|"routes to"| node_blog_detail
node_app -->|"routes to"| node_login
node_app -->|"routes to"| node_dashboard
node_home -->|"loads destinations"| node_country_service
node_home -->|"loads reviews"| node_review_service
node_home -->|"loads articles"| node_blog_service
node_countries_page -->|"loads destinations"| node_country_service
node_contact -->|"submits messages"| node_message_service
node_contact -->|"uses reviews"| node_review_service
node_contact -->|"loads settings"| node_settings_service
node_blogs -->|"loads articles"| node_blog_service
node_blog_detail -->|"loads article"| node_blog_service
node_dashboard -->|"manages articles"| node_blog_service
node_dashboard -->|"manages messages"| node_message_service
node_dashboard -->|"manages reviews"| node_review_service
node_dashboard -->|"manages destinations"| node_country_service
node_dashboard -->|"manages settings"| node_settings_service
node_dashboard -->|"edits article content"| node_word_editor
node_blog_service -->|"uses client"| node_supabase_client
node_country_service -->|"uses client"| node_supabase_client
node_message_service -->|"uses client"| node_supabase_client
node_review_service -->|"uses client"| node_supabase_client
node_settings_service -->|"uses client"| node_supabase_client
node_supabase_client -->|"connects to"| node_supabase
node_about -->|"renders"| node_section
node_about -->|"renders"| node_card
node_services_page -->|"renders"| node_section
node_services_page -->|"renders"| node_card
node_services_page -->|"renders"| node_button
node_countries_page -->|"renders"| node_section
node_countries_page -->|"renders"| node_card
node_countries_page -->|"renders"| node_button
node_contact -->|"renders"| node_section
node_contact -->|"renders"| node_button
node_home -->|"renders"| node_card
node_home -->|"renders"| node_button
node_home -->|"renders"| node_section
node_blogs -->|"renders"| node_section
node_blog_detail -->|"renders"| node_section
node_footer -->|"loads settings"| node_settings_service

click node_app "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/App.jsx"
click node_home "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Home.jsx"
click node_about "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/About.jsx"
click node_services_page "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Services.jsx"
click node_countries_page "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Countries.jsx"
click node_contact "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Contact.jsx"
click node_blogs "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Blogs.jsx"
click node_blog_detail "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/BlogDetail.jsx"
click node_login "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/admin/Login.jsx"
click node_dashboard "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/admin/Dashboard.jsx"
click node_word_editor "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/admin/WordEditor.jsx"
click node_blog_service "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/BlogService.js"
click node_country_service "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/CountryService.js"
click node_message_service "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/MessageService.js"
click node_review_service "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/ReviewService.js"
click node_settings_service "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/SettingsService.js"
click node_supabase_client "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/lib/supabaseClient.js"
click node_button "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/Button.jsx"
click node_card "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/Card.jsx"
click node_section "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/SectionWrapper.jsx"
click node_footer "https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/Footer.jsx"

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_home,node_about,node_services_page,node_countries_page,node_contact,node_blogs,node_blog_detail toneBlue
class node_login,node_dashboard,node_word_editor,node_supabase toneAmber
class node_blog_service,node_country_service,node_message_service,node_review_service,node_settings_service,node_supabase_client toneMint
class node_button,node_card,node_section,node_footer toneRose
class node_visitor toneIndigo
```

## Components

### Public website

- [Route application](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/App.jsx): `src/App.jsx`
- [Home](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Home.jsx): `src/pages/Home.jsx`
- [About](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/About.jsx): `src/pages/About.jsx`
- [Study services](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Services.jsx): `src/pages/Services.jsx`
- [Destinations](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Countries.jsx): `src/pages/Countries.jsx`
- [Contact form](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Contact.jsx): `src/pages/Contact.jsx`
- [Blog listing](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/Blogs.jsx): `src/pages/Blogs.jsx`
- [Blog article](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/BlogDetail.jsx): `src/pages/BlogDetail.jsx`

### Admin workspace

- [Admin login](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/admin/Login.jsx): `src/pages/admin/Login.jsx`
- [Admin dashboard](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/pages/admin/Dashboard.jsx): `src/pages/admin/Dashboard.jsx`
- [Word editor](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/admin/WordEditor.jsx): `src/components/admin/WordEditor.jsx`

### Data services

- [Blog service](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/BlogService.js): `src/services/BlogService.js`
- [Country service](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/CountryService.js): `src/services/CountryService.js`
- [Message service](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/MessageService.js): `src/services/MessageService.js`
- [Review service](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/ReviewService.js): `src/services/ReviewService.js`
- [Settings service](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/services/SettingsService.js): `src/services/SettingsService.js`
- [Supabase client](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/lib/supabaseClient.js): `src/lib/supabaseClient.js`

### Shared UI

- [Button](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/Button.jsx): `src/components/Button.jsx`
- [Card](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/Card.jsx): `src/components/Card.jsx`
- [Section wrapper](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/SectionWrapper.jsx): `src/components/SectionWrapper.jsx`
- [Footer](https://github.com/astoriastudyabroad0-glitch/astoria/blob/main/src/components/Footer.jsx): `src/components/Footer.jsx`

### Other components

- **Prospective student**
- **Supabase**

## Connections

- Prospective student → Route application: opens site (evidence: `README.md`)
- Route application → Home: routes to (evidence: `src/App.jsx`)
- Route application → About: routes to (evidence: `src/App.jsx`)
- Route application → Study services: routes to (evidence: `src/App.jsx`)
- Route application → Destinations: routes to (evidence: `src/App.jsx`)
- Route application → Contact form: routes to (evidence: `src/App.jsx`)
- Route application → Blog listing: routes to (evidence: `src/App.jsx`)
- Route application → Blog article: routes to (evidence: `src/App.jsx`)
- Route application → Admin login: routes to (evidence: `src/App.jsx`)
- Route application → Admin dashboard: routes to (evidence: `src/App.jsx`)
- Home → Country service: loads destinations (evidence: `src/pages/Home.jsx`)
- Home → Review service: loads reviews (evidence: `src/pages/Home.jsx`)
- Home → Blog service: loads articles (evidence: `src/pages/Home.jsx`)
- Destinations → Country service: loads destinations (evidence: `src/pages/Countries.jsx`)
- Contact form → Message service: submits messages (evidence: `src/pages/Contact.jsx`)
- Contact form → Review service: uses reviews (evidence: `src/pages/Contact.jsx`)
- Contact form → Settings service: loads settings (evidence: `src/pages/Contact.jsx`)
- Blog listing → Blog service: loads articles (evidence: `src/pages/Blogs.jsx`)
- Blog article → Blog service: loads article (evidence: `src/pages/BlogDetail.jsx`)
- Admin dashboard → Blog service: manages articles (evidence: `src/pages/admin/Dashboard.jsx`)
- Admin dashboard → Message service: manages messages (evidence: `src/pages/admin/Dashboard.jsx`)
- Admin dashboard → Review service: manages reviews (evidence: `src/pages/admin/Dashboard.jsx`)
- Admin dashboard → Country service: manages destinations (evidence: `src/pages/admin/Dashboard.jsx`)
- Admin dashboard → Settings service: manages settings (evidence: `src/pages/admin/Dashboard.jsx`)
- Admin dashboard → Word editor: edits article content (evidence: `src/pages/admin/Dashboard.jsx`)
- Blog service → Supabase client: uses client (evidence: `src/services/BlogService.js`)
- Country service → Supabase client: uses client (evidence: `src/services/CountryService.js`)
- Message service → Supabase client: uses client (evidence: `src/services/MessageService.js`)
- Review service → Supabase client: uses client (evidence: `src/services/ReviewService.js`)
- Settings service → Supabase client: uses client (evidence: `src/services/SettingsService.js`)
- Supabase client → Supabase: connects to (evidence: `src/lib/supabaseClient.js`)
- About → Section wrapper: renders (evidence: `src/pages/About.jsx`)
- About → Card: renders (evidence: `src/pages/About.jsx`)
- Study services → Section wrapper: renders (evidence: `src/pages/Services.jsx`)
- Study services → Card: renders (evidence: `src/pages/Services.jsx`)
- Study services → Button: renders (evidence: `src/pages/Services.jsx`)
- Destinations → Section wrapper: renders (evidence: `src/pages/Countries.jsx`)
- Destinations → Card: renders (evidence: `src/pages/Countries.jsx`)
- Destinations → Button: renders (evidence: `src/pages/Countries.jsx`)
- Contact form → Section wrapper: renders (evidence: `src/pages/Contact.jsx`)
- Contact form → Button: renders (evidence: `src/pages/Contact.jsx`)
- Home → Card: renders (evidence: `src/pages/Home.jsx`)
- Home → Button: renders (evidence: `src/pages/Home.jsx`)
- Home → Section wrapper: renders (evidence: `src/pages/Home.jsx`)
- Blog listing → Section wrapper: renders (evidence: `src/pages/Blogs.jsx`)
- Blog article → Section wrapper: renders (evidence: `src/pages/BlogDetail.jsx`)
- Footer → Settings service: loads settings (evidence: `src/components/Footer.jsx`)
