Esettanulmány · Zárt közösségi platform
ECO Közösségi Portál
Hogyan lett egy 16 szintű képzési ranglétrát követő, 1000+ fős magyar önfejlesztési egyesületből tíz hét alatt egy auditálható, GDPR-kompatibilis, AI-asszisztáltan épített digitális otthon.
I. Vezetői összefoglaló
Egy fokozatrendszer, egyetlen digitális térben
Az ECO Közösségi Portál egy zárt, meghívásos community-platform, amely a Göd székhelyű ECO – Tudatosság Energiája Egyesület tagjainak fokozat-nyilvántartását, belső hírfolyamát, zárt csoportjait, szakértő-keresőjét és képzési naptárát integrálja egyetlen, auditálható rendszerbe.
A szervezet működésének gerince egy 16+ lépcsős, egymásra épülő modulrendszer (ECO 1–16, Karma, Formázás modulok és workshopok) — ez korábban nyilvánvalóan táblázatokban és privát csatornákon élt. A portál ezt egy szerepkör-alapú, naplózott, GDPR-megfelelő digitális rendszerbe konszolidálta.
A projekt technikai szempontból is figyelemre méltó: a 260 commit 97,7%-át AI-eszközök jegyzik — egy no-code AI platform építette fel a gyors prototípust, majd a Claude Code vitte végig a biztonsági hardening, a Backend-for-Frontend architektúra és a produkciós minőségbiztosítás munkáját. Az eredmény tíz hét alatt egy 39 táblás adatbázis, 29 szerveroldali endpoint és 40+ oldal — nem prototípus, hanem éles, karbantartott rendszer.
Első benyomás
A felület
Nyilvános regisztráció nincs — a portál kizárólag meghívásos, adminisztrátori jóváhagyáshoz kötött hozzáférés-igénylési folyamaton (AccessRequestPage) keresztül nyílik meg, amely már a belépés előtt rákérdez a jelölt meglévő ECO-fokozataira.




II. Projekt áttekintés
Háttér, célcsoport, célok
Háttér
Az egyesület minősítési rendszere tagokat ECO 1-től ECO 16-ig terjedő alapmodulokon vezet végig, kereszthivatkozásokkal kapcsolódó Karma- és Formázás-modulokkal, illetve workshopokkal (WS0–WS4), szigorú előfeltétel-láncolattal. A projekt első commitja 2026. május 30-án egy zöldmezős, AI-asszisztált projektként indult, és gyorsan egy teljes körű, védett belső portállá nőtte ki magát.
Célcsoport és szerepkörök
A rendszer kettős tengelyen szervezi a jogosultságokat: közösségi hierarchia (a tag képzési/felelősségi szintje) és technikai szerepkör (rendszeradminisztráció) — a kettő szándékosan elválik egymástól.
Célok és sikerkritériumok
- A táblázatalapú fokozat-nyilvántartás kiváltása auditálható, workflow-alapú digitális rendszerrel
- Zárt, biztonságos közösségi tér — nyilvános internetes jelenlét nélkül, meghívásos hozzáféréssel
- GDPR-megfelelőség beépítése tervezési szinten, nem utólagos ráépítésként
- Moduláris backend, amely admin-eszközökkel (CSV-import, tömeges jelvényadás, vészhelyzeti jogvisszavonás) bővíthető külső fejlesztői beavatkozás nélkül
Idővonal
2026.05.30
Első commit — AI-asszisztált projektindítás
2026. június
Alapfunkciók: hírfolyam, csoportok, profil, admin panel váza
2026. július
Fokozat-rendszer, jelvények, szakértő-kereső, recepttár
2026.08.03–07
Intenzív biztonsági hardening: BFF-migráció, rate limiting, admin-recovery, jelszó-erősség riasztás
2026.08.10
Éles, karbantartott rendszer, folyamatos finomítás alatt
III. Technikai architektúra
Rétegek: SPA → BFF → Supabase
A rendszer klasszikus háromrétegű felépítést követ, azzal a tudatos megszorítással, hogy a kliens soha nem éri el közvetlenül az adatbázist — minden kérés egy dedikált Backend-for-Frontend rétegen megy keresztül.
┌──────────────────────────────────────────────────────────────┐
│ FRONTEND (SPA) │
│ React 18 + TypeScript + Vite 5 + React Router 6 │
│ Tailwind CSS + shadcn/ui (Radix) · TanStack Query │
│ react-hook-form + Zod · next-themes (light / dark) │
└─────────────────────────────┬────────────────────────────────┘
│ supabase.functions.invoke()
│ — SOHA nincs közvetlen DB hívás
▼
┌──────────────────────────────────────────────────────────────┐
│ BACKEND-FOR-FRONTEND · 29 Edge Function │
│ api-profiles · api-groups · api-recipes · api-notifications │
│ api-grades · api-training · api-storage · api-admin (+21) │
└─────────────────────────────┬────────────────────────────────┘
│ service_role kliens
▼
┌──────────────────────────────────────────────────────────────┐
│ SUPABASE · Postgres + Auth + Storage │
│ 39 tábla · Row-Level Security · pg_cron ütemezett feladatok │
│ JWT auth (getClaims) · Storage (signed URL) │
└──────────────────────────────────────────────────────────────┘A BFF-döntés
Minden kérés egységes biztonsági csővezetéken fut végig, dokumentálva a projekt belső architektúra-dokumentációjában:
Request → CORS (origin allowlist) → Zod séma-validáció → JWT auth
→ Rate limiting (user + function) → Szerepkör-ellenőrzés
→ Üzleti logika (service_role kliens)Ez a minta tudatos elmozdulás a „kliens közvetlenül hívja a Supabase RLS-t” alapértelmezéstől egy központosított API-réteg felé — a Row-Level Security itt csak másodlagos védelmi vonal.
Adatbázis-séma (kivonat, 39 táblából)
┌───────────────┐ ┌────────────────────┐ ┌──────────────┐
│ profiles │──1:1───│ user_roles │ │ user_grades │
├───────────────┤ ├────────────────────┤ ├──────────────┤
│ id (PK, auth) │ │ user_id (FK) │ │ user_id (FK) │
│ full_name │ │ role (enum) │ │ modul/system │
│ theme, badges │ └────────────────────┘ │ level, status│
└───────┬───────┘ └──────┬───────┘
│ │
│ ┌────────────────────┐ ┌──────▼───────┐
├──1:N─────────│ group_memberships │ │ grade_audit_ │
│ └─────────┬──────────┘ │ log │
│ │ └──────────────┘
┌───────▼──────┐ ┌──────▼──────┐ ┌───────────────┐
│ group_posts │──1:N─────│ groups │ │ expert_reviews │
├──────────────┤ └─────────────┘ ├───────────────┤
│ post_comments│ │ professional_ │
│ post_reactions│ │ profiles │
└──────────────┘ └───────────────┘
+ access_requests · audit_log · security_events · bug_reports
+ recipes / recipe_ratings / recipe_favorites · training_events
+ notifications · user_badges · gdpr_requests · file_scan_results …A szerepkörök szándékosan külön táblában (user_roles) élnek, nem a szerkeszthető profiles táblán belül — privilege-escalation elleni védelem.
Fejlesztői eszközök
| Kategória | Eszközök |
|---|---|
| Nyelv | TypeScript (frontend + Deno edge functions) |
| Build | Vite 5 (SWC plugin), Bun (CI), npm (lokálisan) |
| Tesztelés | Vitest + Testing Library (unit), Playwright (E2E) |
| Lint / Format | ESLint 9 (flat config) + typescript-eslint |
| CI | GitHub Actions — advisory bundle-size riport minden PR-en |
| Deployment | Felhőalapú menedzselt hosting (Supabase-backend), preview + production domain |
IV. Funkció-leltár
Amit a portál valóban tud
Frontend
- Hitelesítés: e-mail/jelszó login, kötelező e-mail-megerősítés, 60 perces inaktivitás utáni automatikus kijelentkezés, session-szinkronizáció böngészőfülek között, kényszerített onboarding (jelszóváltás + témaválasztás)
- Hírfolyam: posztolás, reakciók, kommentek, említés-rendszer, poszt-rögzítés moderátoroknak
- Zárt csoportok: csoport-specifikus hírfolyam, tananyag-feltöltés, meghívásos tagság
- Fokozat- és modulrendszer: 16 ECO alapmodul + Karma/Formázás kereszt-modulok + workshopok, előfeltétel-validáció, valós idejű szinkronizáció
- Jelvény- / gamifikációs rendszer: automatikus és manuális jelvények (pl. 5 szintű „Szakember” csoport, DB-trigger vezérelt), jelvény-katalógus
- Szakértő-kereső: AI-indexelt profilok (Gemini-alapú indexelés), értékelési rendszer és ranglista
- Recepttár: CRUD, kedvencek, értékelés, napi megtekintés-számláló, ranglista
- Képzési naptár: jogosultság-alapú részvétel
- Admin központ: 15 alpanel — felhasználók, kérelmek, fokozatok, receptek, szakemberek, jelvények, csoportok, események, hibajegyek, értesítések, audit, GDPR, riportok, biztonság
- Teljesítmény: minden route lazy-loaded, cache-elt szerver-state, bundle-size riport minden PR-en
Backend / API
- Action-alapú BFF API 29 Edge Function-ön, 6 kategóriában: BFF (8), admin-only (7), speciális/IT-admin (3), publikus/webhook (4), cron/belső (5), előnézeti/dev (2)
- Rate limiting: in-memory fixed-window, felhasználó + function szerint, külön olvasási/írási limittel
- Fájlfeltöltés + víruskeresés: signed URL, VirusTotal-integráció, aszinkron scan-eredmény
- E-mail alrendszer: tranzakciós sablonok, sor-feldolgozás, heti összefoglaló, leiratkozás- és suppression-kezelés
- Audit & biztonsági napló: minden érzékeny művelet nyomon követhető
- GDPR workflow: kérelem-tábla, hozzájárulás-napló, admin GDPR-panel
V. Biztonsági architektúra
„Nem díszdokumentum”
A projekthez tartozó 21 KB-os biztonsági inventory explicit módon így jellemzi önmagát — ez a hozzáállás a kódban is tetten érhető.
requireAuth() / requireAdmin() shared guard = elsődleges, megbízható enforcement (24/29 function lefedve).Kiemelt hardening-intézkedések
- Session
sessionStorage-ban (nem perzisztens), 60 perces inaktivitási timeout - CORS: nincs wildcard origin, dinamikus allowlist-ellenőrzés minden function-ben
emergency-revoke— vészhelyzeti jogosultság-visszavonás admin vészgombbaladmin-recovery— JWT nélküli, de IP-allowlistával és per-e-mail/per-IP rate limittel védett admin-helyreállítási csatorna- Sikeres bejelentkezések szerveroldali logolása (
security_events) - 90 napos biztonsági esemény-megőrzés, napi automatizált pg_cron takarítással
- Jelszó-erősség riasztás — az egyik legutóbbi módosítás a rendszerben
VI. AI-asszisztált fejlesztés
Ki írta a kódot?
A git-előzmények önmagukban is esettanulmány-témát adnának: a 260 commitból 254 (97,7%) Claude Code-dal készült, mindössze 6 származik közvetlenül emberi fejlesztőtől.
Ez a munkamegosztás a modern AI-asszisztált fejlesztés két fázisát tükrözi:
- Gyors, prompt-alapú prototípusépítés: UI-komponensek, oldalstruktúra, Supabase-integráció és CRUD-funkciók gyors, iteratív, természetes nyelvi utasításokból történő felépítése
- Mélységi hardening: a projekt belső architektúra- és biztonsági dokumentációjának tanúsága szerint a BFF-migráció, a rate limiting és az auth-guard központosítás már célzott, dokumentált mérnöki munka — nem generatív „vibe coding”, hanem tudatos refaktorálási hullám
Ez a kétfázisú modell — gyors AI-generált MVP, majd emberi felügyelet alatt álló biztonsági hardening, mindkettő Claude Code-dal — reális mintát ad arra, hogyan lehet éles, érzékeny adatokat kezelő rendszert felelősségteljesen, mégis rendkívül rövid idő alatt piacra vinni.
VII. Kihívások és megoldások
Amivel meg kellett küzdeni
| Kihívás | Megoldás |
|---|---|
| A „gyors AI-prototípus → éles rendszer” átmenet biztonsági kockázatai | Teljes BFF-migráció — minden adatelérés Edge Function mögé kerül |
| 16+ szintű, kereszthivatkozásokkal teli képzési modulrendszer digitalizálása | Központosított modul-konfiguráció + előfeltétel-validációs logika, külön audit-napló fokozatváltásra |
| Privilege escalation kockázata | Szerepkörök külön táblában, nem a szerkeszthető profil-táblán |
| Admin-fiók helyreállítás JWT-mentes forgatókönyvben | IP-allowlist + technikai szerepkör-ellenőrzés + perzisztens rate limit |
| Fájlfeltöltések biztonsága | Signed URL + aszinkron VirusTotal-integráció |
| Dokumentáció hiánya egy gyorsan induló, AI-generált projektben | Utólagos, de szisztematikus dokumentáció: function- és biztonsági inventory, 300+ soros manuális teszt-lista |
VIII. Eredmények és tanulságok
Mi jött ki belőle
- Teljes funkcionális lefedettség egy komplex, valós szervezeti igényre — tagfelvétel → fokozat-nyilvántartás → közösségi interakció → adminisztráció, egyetlen zárt rendszerben
- Auditálhatóság: minden érzékeny művelet naplózva és admin felületen visszakereshető
- GDPR-megfelelőség tervezési szinten, nem utólagos ráépítésként
Tanulságok
- Az AI-asszisztált fejlesztés legnagyobb üzleti értéke nem a prototípusnál, hanem az azt követő, célzott biztonsági és architekturális refaktorálásban keletkezett
- A BFF-minta jól skálázódik AI-generált kódbázisokon is — egy explicit, dokumentált architekturális szabály könnyen betartatható és auditálható marad gyors iteráció mellett is
- A „nem díszdokumentum” hozzáállás valós, karbantartott referenciává teszi a biztonsági dokumentációt
- A kettős szerepkör-tengely (közösségi hierarchia vs. technikai jogosultság) jó minta olyan szervezeteknek, ahol a képzési rang és a rendszeradminisztrációs jog elvileg és gyakorlatilag is elválik
Az esettanulmány a repository statikus elemzése, a git-előzmények, a docs/ alatti és a projekt belső architektúra-dokumentációja, valamint a helyi fejlesztői szerveren renderelt éles UI screenshotok alapján készült · 2026.08.10
// Kezdjük el
Kérj visszahívást — beszéljük át, mit építsünk neked
Írd meg az elérhetőségeidet, mi visszahívunk, és átbeszéljük, milyen modulokra van szükséged — weboldal, foglalás, fizetés, ügyfél-CRM vagy zárt közösségi felület. AI-val gyorsított fejlesztéssel, a piaci árak töredékéért.