Admin Panel (Oa-admin-panel)
Internal tool at admin.bme-konza.org/dashboard for managing content, users, and moderation.
Stack
- Vue 3 + Vite SPA, Pinia state, vue-router, Tailwind 3, Flowbite.
- Firebase (client), plus
firebase-adminandgoogleapisin the dependency set. read-excel-filefor spreadsheet import;vue-toast-notification,moment.- Node 24. Build → Docker → nginx (see below).
Layout
src/
main.js, App.vue
router/ # routes
views/ # pages
components/
services/ # API client calls
store/ # Pinia stores
firebase/, firebase-admin-msg.js, firebaseConfig.js
utils/, assets/, style.css
conf/nginx.conf # SPA fallback (try_files → /index.html)
Dockerfile # node build → nginx:alpine
Makefile # local docker build/run
Configuration
.env with VITE_BASE_URL (the API base URL) — see
.env.example. FILL: full prod env including Firebase
web config keys; record in the vault per [01 *(private handover docs)*.]
Build & run
npm install
npm run dev # local dev (Vite)
npm run build # production build → dist/
npm run lint # eslint
npm run test:unit # vitest
# Docker (mirrors prod), via Makefile:
make oa-build # docker build -t oa-admin .
make oa-run # docker run -d -p 3481:80 oa-admin
The Dockerfile builds with Node 24 then serves dist/ from nginx:alpine on port 80.
nginx.conf does SPA history fallback.
Deploy
Tag staging-v* / v* → CI lints + test-builds the Docker image → Coolify webhook
rebuilds and serves at admin.bme-konza.org. See 03-deploy-and-releases.md.
What it manages
[TODO: enumerate the admin sections — equipment/brands/models, resources, questions
moderation, users/roles, announcements, banners, requests, reports/analytics — and any
admin-only API endpoints or roles required.]