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-admin and googleapis in the dependency set.
  • read-excel-file for 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.]