Repository structure
BraDypUS v5 is split into two separate repositories that are deployed together.
bdus-api — PHP backend
bdus-api/
├── controllers/ ← API controllers (Bdus\Controllers\*)
├── lib/ ← Framework: DB, SQL, Record, Config, Auth, JWT, …
├── projects/ ← Runtime: one subdirectory per application (not committed)
│ └── myapp/
│ ├── config.json
│ ├── .jwt_secret
│ ├── backups/
│ ├── db/
│ ├── files/
│ └── …
├── tests/
│ ├── Integration/ ← PHPUnit controller tests
│ ├── Unit/ ← PHPUnit unit tests
│ ├── Support/ ← BdusTestCase base class + fixtures
│ └── api/ ← Hurl E2E tests + run.sh
├── vendor/ ← Composer dependencies
├── index.php ← Entry point
├── composer.json
├── Dockerfile
├── docker-compose.yml
└── test.sh ← Unified test runner (PHPUnit + Hurl)bdus-app — Vue 3 frontend
bdus-app/
├── src/
│ ├── views/ ← Route-level components (*View.vue)
│ ├── components/ ← Reusable components (record/, config/, users/, …)
│ ├── stores/ ← Pinia stores (auth, …)
│ ├── composables/ ← Reusable composition functions
│ ├── api/ ← API client (fetch-based, JWT injected)
│ ├── locale/ ← i18n files (en.json, it.json)
│ └── router/ ← Vue Router (hash mode)
├── public/
├── dist/ ← Built output (not committed)
├── package.json
├── vite.config.js
├── Dockerfile
└── nginx.conf.template ← Production Nginx configRuntime layout
The Vue SPA is served statically. All /api/* traffic is proxied to the PHP backend (by Vite in dev, by Nginx in production).
Browser
├── GET / → index.html (SPA)
└── /api/* → PHP backend (FastRoute dispatcher)