Architecture Overview
How it all fits together; each component then has its own deep-dive page.
Components and how they talk
┌───────────────┐ ┌────────────────┐ ┌──────────────────┐
│ Mobile app │ │ Web app │ │ Admin panel │
│ (Flutter) │ │ (Nuxt SPA) │ │ (Vue SPA) │
│ org.bmekonza │ │ [domain TBD] │ │ admin.bme-konza │
└──────┬─────────┘ └──────┬─────────┘ └────────┬─────────┘
│ HTTPS/JSON │ HTTPS/JSON │ HTTPS/JSON
│ │ │
└───────────────┬─────────┴───────────────┬───────────┘
▼ │
┌────────────────────┐ │
│ API (Go/Fiber) │ │
│ api.bme-konza.org │ │
│ /api/v1, /api/v2 │ │
└───┬───────┬────────┘ │
│ │ │
┌──────▼──┐ ┌──▼──────────────┐ ┌─────▼──────────────────┐
│Postgres │ │ Firebase │ │ Firebase (client SDK) │
│(Coolify)│ │ Admin SDK: │ │ Auth, Storage, FCM, │
└─────────┘ │ - Auth │ │ Analytics, Crashlytics│
│ - Cloud Storage│ └────────────────────────┘
│ - FCM push │
└─────────────────┘
- Clients (app, web, admin) authenticate users with Firebase Auth, then call the Go API over HTTPS for all domain data.
- Two more surfaces sit outside this request path: the static marketing/legal site
(
bme-konza.org, see 09-website.md) and the developer-docs site (hq.bme-konza.org, MkDocs, see 18-dev-docs-hq.md). - ⚠️ The Nuxt web app's public domain is currently unconfirmed (it is not
hq., which is the dev-docs site) — see 08-web-platform.md. - The API owns the relational data in Postgres and uses the Firebase Admin SDK for push notifications (FCM), and to delete files from Firebase Cloud Storage.
- File uploads (resource PDFs, response/question images, profile photos) go to Firebase Cloud Storage; the API stores the resulting URLs/paths in Postgres. See 12-file-storage.md.
- The marketing site is static and also hosts the legal pages and the Android
assetlinks.jsonfor deep linking.
Core domain (what the platform does)
A knowledge base + Q&A + document exchange for biomedical equipment:
- Equipment → Brands → Models taxonomy; Resources (manuals, videos, webinars)
are linked to models via
resource_references. - Questions & Responses (Q&A), with upvotes, tags, anonymous posting, and acceptance.
- Reputation/points & tiers/leaderboard — users earn points (configurable per action) and are ranked into tiers.
- Requests — users request manuals/resources that don't exist yet.
- Notifications (in-app + FCM push), announcements, banners, feedback, find-an-expert / social link-up, and analytics/reporting.
- Full-text & trigram search over resources and questions (Postgres
tsvector+pg_trgm).
See 06-database.md for the data model and 05-api-backend.md for the API surface that exposes all of this.
API versions
The API exposes both /api/v1 (legacy) and /api/v2 (current) route groups. v2 uses
Firebase Auth with role-based authorization and adds banners, reports, and a moderation
admin/ group. The system is mid-migration from v1 to v2; new work should target v2. See
api-backend.md. [TODO: which clients still call v1.]
Background processing
The API runs background workers (monthly reports, reputation-point processing, Q&A reminders, question notifications, search logging, user-interaction reports). See 05-api-backend.md and 13-monitoring-logging.md.