# jose-lameiras/felixbus architecture

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

- Interactive diagram: https://gitdiagram.com/jose-lameiras/felixbus
- Repository: https://github.com/jose-lameiras/felixbus

## Overview

Felixbus is a PHP bus-reservation application supporting public route searches, registration and role-based customer, staff, and administrator management. The main customer path searches city pairs, displays available schedules, then supports ticket purchase and cancellation with wallet and seat updates. The tree also documents profile, wallet, route, user, and ticket administration. Source excerpts show direct MySQL access from page handlers; unsampled modules are represented by their exact paths, but their internal links are omitted where the wiring is not evidenced.

Main entry points: [`basedados/basedados.h`](https://github.com/jose-lameiras/felixbus/blob/main/basedados/basedados.h) (MySQL database), [`paginas/PagIniAdmin.php`](https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniAdmin.php) (Admin home), [`paginas/PagIniFuncionario.php`](https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniFuncionario.php) (Staff home), [`paginas/PagIniCliente.php`](https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniCliente.php) (Customer home)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public access"]
  node_public_search["Route search<br/>[index.php]"]
  node_schedule_results["Schedule results<br/>[MostrarRotas.php]"]
  node_login["Login<br/>[login.php]"]
  node_registration["Registration<br/>[registo.php]"]
  node_pending["Unvalidated account"]
end

subgraph group_customer["Customer services"]
  node_customer_home["Customer home<br/>[PagIniCliente.php]"]
  node_tickets["Ticket management"]
  node_wallet["Customer wallet"]
  node_profile["Customer profile"]
  node_profile_edit["Edit profile"]
end

subgraph group_operations["Staff operations"]
  node_staff_home["Staff home"]
  node_staff_tickets["Staff tickets"]
  node_staff_routes["Staff routes"]
  node_staff_wallets["Staff wallets"]
  node_staff_wallet_edit["Edit wallet"]
  node_staff_profile["Staff profile"]
end

subgraph group_admin["Administration"]
  node_admin_home["Admin home<br/>[PagIniAdmin.php]"]
  node_admin_routes["Manage routes"]
  node_admin_route_add["Add route"]
  node_admin_route_edit["Edit route"]
  node_admin_users["Manage users"]
  node_admin_user_edit["Edit user"]
  node_admin_wallets["Manage wallets"]
  node_admin_profile["Manage profiles"]
  node_admin_balance["Felixbus balance"]
end

subgraph group_data["Database"]
  node_mysql[("MySQL database<br/>[basedados.h]")]
end

node_visitor(("Visitor"))

node_visitor -->|"chooses cities"| node_public_search
node_public_search -->|"queries schedules"| node_mysql
node_public_search -->|"redirects"| node_schedule_results
node_visitor -->|"signs in"| node_login
node_visitor -->|"registers"| node_registration
node_registration -->|"stores account"| node_mysql
node_login -->|"checks credentials"| node_mysql
node_registration -->|"shows status"| node_pending
node_login -->|"routes customer"| node_customer_home
node_customer_home -->|"opens tickets"| node_tickets
node_customer_home -->|"opens wallet"| node_wallet
node_customer_home -->|"opens profile"| node_profile
node_tickets -->|"reads and updates"| node_mysql
node_wallet -->|"reads and updates"| node_mysql
node_profile -->|"reads profile"| node_mysql
node_profile -->|"opens editor"| node_profile_edit
node_profile_edit -->|"updates profile"| node_mysql
node_staff_home -->|"opens tickets"| node_staff_tickets
node_staff_home -->|"opens routes"| node_staff_routes
node_staff_home -->|"opens wallets"| node_staff_wallets
node_staff_home -->|"opens profile"| node_staff_profile
node_staff_tickets -->|"reads and updates"| node_mysql
node_staff_wallets -->|"reads and updates"| node_mysql
node_staff_wallets -->|"opens editor"| node_staff_wallet_edit
node_staff_routes -->|"manages schedules"| node_mysql
node_staff_profile -->|"accesses data"| node_mysql
node_admin_home -->|"opens routes"| node_admin_routes
node_admin_home -->|"opens users"| node_admin_users
node_admin_home -->|"opens wallets"| node_admin_wallets
node_admin_home -->|"opens profiles"| node_admin_profile
node_admin_home -->|"opens balance"| node_admin_balance
node_admin_routes -->|"adds route"| node_admin_route_add
node_admin_routes -->|"edits route"| node_admin_route_edit
node_admin_route_edit -->|"updates route"| node_mysql
node_admin_users -->|"opens editor"| node_admin_user_edit
node_admin_users -->|"manages users"| node_mysql
node_admin_user_edit -->|"updates user"| node_mysql
node_admin_wallets -->|"manages wallets"| node_mysql
node_admin_profile -->|"accesses data"| node_mysql
node_admin_balance -->|"accesses balance"| node_mysql

click node_public_search "https://github.com/jose-lameiras/felixbus/blob/main/paginas/index.php"
click node_schedule_results "https://github.com/jose-lameiras/felixbus/blob/main/paginas/MostrarRotas.php"
click node_login "https://github.com/jose-lameiras/felixbus/blob/main/paginas/login.php"
click node_registration "https://github.com/jose-lameiras/felixbus/blob/main/paginas/registo.php"
click node_pending "https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniClienteNaoValidado.php"
click node_customer_home "https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniCliente.php"
click node_tickets "https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteBilhetes.php"
click node_wallet "https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteGerirCarteira.php"
click node_profile "https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteGerirPerfil.php"
click node_profile_edit "https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteEditarPerfil.php"
click node_staff_home "https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniFuncionario.php"
click node_staff_tickets "https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioGerirBilhetes.php"
click node_staff_routes "https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioAdicionarRotas.php"
click node_staff_wallets "https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioGerirCarteiras.php"
click node_staff_wallet_edit "https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioEditarCarteira.php"
click node_staff_profile "https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioGerirPerfil.php"
click node_admin_home "https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniAdmin.php"
click node_admin_routes "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirRotas.php"
click node_admin_route_add "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminAdicionarRota.php"
click node_admin_route_edit "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminEditarRota.php"
click node_admin_users "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirUtilizadores.php"
click node_admin_user_edit "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminEditarUtilizador.php"
click node_admin_wallets "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirCarteiras.php"
click node_admin_profile "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirPerfil.php"
click node_admin_balance "https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirSaldoFelixbus.php"
click node_mysql "https://github.com/jose-lameiras/felixbus/blob/main/basedados/basedados.h"

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_public_search,node_schedule_results,node_login,node_registration,node_pending toneBlue
class node_customer_home,node_tickets,node_wallet,node_profile,node_profile_edit toneAmber
class node_staff_home,node_staff_tickets,node_staff_routes,node_staff_wallets,node_staff_wallet_edit,node_staff_profile toneMint
class node_admin_home,node_admin_routes,node_admin_route_add,node_admin_route_edit,node_admin_users,node_admin_user_edit,node_admin_wallets,node_admin_profile,node_admin_balance toneRose
class node_mysql,node_visitor toneIndigo
```

## Components

### Public access

- [Route search](https://github.com/jose-lameiras/felixbus/blob/main/paginas/index.php): `paginas/index.php`
- [Schedule results](https://github.com/jose-lameiras/felixbus/blob/main/paginas/MostrarRotas.php): `paginas/MostrarRotas.php`
- [Login](https://github.com/jose-lameiras/felixbus/blob/main/paginas/login.php): `paginas/login.php`
- [Registration](https://github.com/jose-lameiras/felixbus/blob/main/paginas/registo.php): `paginas/registo.php`
- [Unvalidated account](https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniClienteNaoValidado.php): `paginas/PagIniClienteNaoValidado.php`

### Customer services

- [Customer home](https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniCliente.php): `paginas/PagIniCliente.php`
- [Ticket management](https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteBilhetes.php): `paginas/ClienteBilhetes.php`
- [Customer wallet](https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteGerirCarteira.php): `paginas/ClienteGerirCarteira.php`
- [Customer profile](https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteGerirPerfil.php): `paginas/ClienteGerirPerfil.php`
- [Edit profile](https://github.com/jose-lameiras/felixbus/blob/main/paginas/ClienteEditarPerfil.php): `paginas/ClienteEditarPerfil.php`

### Staff operations

- [Staff home](https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniFuncionario.php): `paginas/PagIniFuncionario.php`
- [Staff tickets](https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioGerirBilhetes.php): `paginas/FuncionarioGerirBilhetes.php`
- [Staff routes](https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioAdicionarRotas.php): `paginas/FuncionarioAdicionarRotas.php`
- [Staff wallets](https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioGerirCarteiras.php): `paginas/FuncionarioGerirCarteiras.php`
- [Edit wallet](https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioEditarCarteira.php): `paginas/FuncionarioEditarCarteira.php`
- [Staff profile](https://github.com/jose-lameiras/felixbus/blob/main/paginas/FuncionarioGerirPerfil.php): `paginas/FuncionarioGerirPerfil.php`

### Administration

- [Admin home](https://github.com/jose-lameiras/felixbus/blob/main/paginas/PagIniAdmin.php): `paginas/PagIniAdmin.php`
- [Manage routes](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirRotas.php): `paginas/AdminGerirRotas.php`
- [Add route](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminAdicionarRota.php): `paginas/AdminAdicionarRota.php`
- [Edit route](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminEditarRota.php): `paginas/AdminEditarRota.php`
- [Manage users](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirUtilizadores.php): `paginas/AdminGerirUtilizadores.php`
- [Edit user](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminEditarUtilizador.php): `paginas/AdminEditarUtilizador.php`
- [Manage wallets](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirCarteiras.php): `paginas/AdminGerirCarteiras.php`
- [Manage profiles](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirPerfil.php): `paginas/AdminGerirPerfil.php`
- [Felixbus balance](https://github.com/jose-lameiras/felixbus/blob/main/paginas/AdminGerirSaldoFelixbus.php): `paginas/AdminGerirSaldoFelixbus.php`

### Database

- [MySQL database](https://github.com/jose-lameiras/felixbus/blob/main/basedados/basedados.h): `basedados/basedados.h`

### Other components

- **Visitor**

## Connections

- Visitor → Route search: chooses cities
- Route search → MySQL database: queries schedules
- Route search → Schedule results: redirects
- Visitor → Login: signs in
- Visitor → Registration: registers
- Registration → MySQL database: stores account
- Login → MySQL database: checks credentials
- Registration → Unvalidated account: shows status
- Login → Customer home: routes customer
- Customer home → Ticket management: opens tickets
- Customer home → Customer wallet: opens wallet
- Customer home → Customer profile: opens profile
- Ticket management → MySQL database: reads and updates
- Customer wallet → MySQL database: reads and updates
- Customer profile → MySQL database: reads profile
- Customer profile → Edit profile: opens editor
- Edit profile → MySQL database: updates profile
- Staff home → Staff tickets: opens tickets
- Staff home → Staff routes: opens routes
- Staff home → Staff wallets: opens wallets
- Staff home → Staff profile: opens profile
- Staff tickets → MySQL database: reads and updates
- Staff wallets → MySQL database: reads and updates
- Staff wallets → Edit wallet: opens editor
- Staff routes → MySQL database: manages schedules
- Staff profile → MySQL database: accesses data
- Admin home → Manage routes: opens routes
- Admin home → Manage users: opens users
- Admin home → Manage wallets: opens wallets
- Admin home → Manage profiles: opens profiles
- Admin home → Felixbus balance: opens balance
- Manage routes → Add route: adds route
- Manage routes → Edit route: edits route
- Edit route → MySQL database: updates route
- Manage users → Edit user: opens editor
- Manage users → MySQL database: manages users
- Edit user → MySQL database: updates user
- Manage wallets → MySQL database: manages wallets
- Manage profiles → MySQL database: accesses data
- Felixbus balance → MySQL database: accesses balance
