A Budavári Schönherz Studió videóarchívum és szerkesztői rendszerének lokálisan futtatható V0 megvalósítása (TanStack Start + PostgreSQL + Authentik).
- V0 követelményspecifikáció
- Kártyákra bontott implementációs terv
- Implementációs állapot
- OOB bemenetek
- Példa OOB config
- Példa seed JSON
- Node 24+ és pnpm (
corepack enable) - Docker (PostgreSQL + Authentik)
A sorrend a specifikáció 17.2 fejezetét követi. Adatbázis-kézi módosítás nincs szükség egyik lépéshez sem.
# 1. Függőségek telepítése
pnpm install
# 2. Helyi titkok és Authentik blueprint generálása (idempotens)
pnpm infra:bootstrap
# 3. PostgreSQL és Authentik indítása
docker compose -f docker-compose.dev.yml up -d
export DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss
# 4. Migrációk futtatása tiszta adatbázison
pnpm db:migrate
# 5. OOB fájlok ellenőrzése (konkrét magyar hibaüzenet hiány esetén)
pnpm check:oob
# 6. Seed betöltése (opcionális; az oob/seed.json-t a scraper állítja elő,
# lásd docs/oob-inputs.md). Idempotens: újrafuttatás nem duplikál.
pnpm db:seed
# 7. Tagfrissítő webhook kliens (az első tokenhez, bejelentkezés nélkül)
pnpm webhook:client create "lokális push"
# 8. Alkalmazás indítása
pnpm dev # http://localhost:3000
# 9. Minőségi kapu
pnpm typecheck && pnpm lint && pnpm check
TEST_DATABASE_URL=postgres://bss:bss@127.0.0.1:5582/bss pnpm test
pnpm buildMegjegyzések:
- A
pnpm infra:bootstrapmeglévő titkokat nem ír felül; újraindítás nem duplikál. - A tagadatokat az alkalmazás birtokolja: a
POST /api/webhooks/membersvégpontra beküldött frissítések írják őket (lásddocs/member-webhook.md). Authentikből automatikus szinkron nincs — az Authentik már csak a bejelentkezést és a csoportokat adja. - A webhook OpenAPI 3.1 leírása generált:
docs/api/members-webhook.openapi.yaml. Kézzel ne szerkeszd —pnpm openapi:generateírja újra a szerver mezőspecifikációjából; eltérés esetén a unit teszt elbukik. - A seed stáblistája a bootstrap tesztprofiljaihoz kötődik (
tag-dev,vezetoseg-dev, …); ha a tagtábla még üres, az importer magyar hibaüzenettel kéri a tagok beküldését. - Az Authentik felülete: http://127.0.0.1:9000
Jelszavak: oob/local-secrets.json (gitignore-olt).
| Felhasználó | Szerep |
|---|---|
| (nincs bejelentkezés) | névtelen látogató — csak publikus videók |
| schonherz-dev | bejelentkezett schönherzes — publikus + schönherz videók, admin nincs |
| tag-dev | BSS-tag — minden láthatóság, adminjogok |
| vezetoseg-dev | vezetőség — kibővített adminjogok |
további -dev userek |
szintetikus tagprofilok minden tagsági státuszhoz |
- Nyisd meg http://localhost:3000 — homepage normál vagy kiemelt/live hero-val.
/videos: csak publikus videók jelennek meg; korlátozott tartalom metaadata sem szivárog (keresésben, eseményoldalakon és kapcsolódó videóknál sem).- Nyiss meg egy videót: player, kapcsolódó videók, címkére kattintva aktív szűrős videólista.
- A navbar Belépés gombja belépésre visz, megtartva a kért oldalt.
- Jelentkezz be; a
/videoslistában már a schönherz láthatóságú videók is megjelennek. /adminközvetlenül: magyar tiltóoldal (403), sidebar sem látszik.
- Jelentkezz be, menj
/admin-ra: Videók lista nyílik. - Hozz létre piszkozatot (Új videó), adj meg érvénytelen média-URL-t — piszkozatként menthető; a Publikálás magyar hibával elutasítja.
- Érvényes URL-lel (
https://v.bsstudio.hu/…) publikálás — a média hálózati ellenőrzése mockolható fejlesztésben, élesben HEAD-kéréssel fut. - Egynapos eseményhez rendelve a videó automatikusan dátumot kap; többnaposnál a hiányzó dátum publikálást blokkol, a tartományon kívüli figyelmeztet.
- Címkék és stáblista kezelése; archiválás és lomtárba helyezés.
- Lomtár (
/admin/trash): visszaállítás archivált állapotba, kapcsolatokkal. - Live és kiemelés (
/admin/homepage): YouTube URL ütemezése (átfedés kliensen és szerveren is tiltott), Indítás most / Lezárás most, kiemelt videó választása, Rólunk-videók rendezése. - Katalógusok: címke létrehozás/összevonás/törlés (használt címke csak név beírásával), stábszerepek sorrendezése.
- Tagok (
/admin/members): webhook végpont URL-je, webhook kliensek létrehozása/titokcseréje/visszavonása, beérkezési napló, csak olvasható profillista. - Auditnapló (
/admin/audit): minden előző lépés előtte-utána értékkel. - Homepage: a kiemelt videó hero-ként jelenik meg; live aktiválásakor a prioritás frissítés nélkül vált (percenkénti ellenőrzés).
- 30 napos törlés szimulációja: lomtárazz egy videót, majd az idő előretolásával (tesztóra) a napi feladat véglegesen törli — külső médiafájl érintetlen marad.
- Éles telepítés nem része a V0-nak; a célkörnyezet a dokumentált lokális futtatás.
- A külső MP4 URL-ek publikusak; a média tényleges hozzáférés-védelme külön feladat.
- Email és mobil mezők nem léteznek; a tagprofilok csak olvashatók (Authentik forrás).
- Audit export/visszaállítás és tömeges adminműveletek szándékosan nincsenek.
- Rating, komment, share/download gomb, tanfolyamkezelés nem része a V0-nak.
- A régi Drupal linkek (/video, /event, /user) átirányítása production feladat.
- A kereső popoverje csoportonként öt találtat mutat thumbnail nélkül.
Teljes régioldal-migráció; Drupal linkátirányítások; production telepítési pipeline; UptimeRobot; backup/visszaállítás; védett média; IP-alapú egyedi nézettség; tanfolyam- és felkéréskezelő integráció; tömeges adminműveletek; formális akadálymentességi audit.
| Parancs | Funkció |
|---|---|
pnpm dev |
fejlesztői szerver |
pnpm check |
formátumellenőrzés (Prettier) |
pnpm lint |
ESLint |
pnpm typecheck |
route-generálás + tsc --noEmit |
TEST_DATABASE_URL=… pnpm test |
unit + integrációs tesztek |
pnpm build |
produkciós build (Nitro) |
pnpm db:generate / pnpm db:migrate |
migráció generálása / futtatása |
pnpm db:seed |
idempotens seed import |
pnpm check:oob |
OOB config validáció |
pnpm infra:bootstrap |
lokális titkok + Authentik blueprint |
Az elfogadási bemutató (spec 20/17) a fenti „Telepítés és indítás” szakasz lépéseit követi adatbázis-kézi módosítás nélkül, majd a négy szereplő demoforgatókönyvét futtatja végig. Ellenőrzési pontok:
pnpm check:oobhiányzó OOB elemnél konkrét magyar hibát ad, az alkalmazás nem indul félkonfiguráltan;pnpm db:migratetiszta adatbázison hibátlanul lefut;pnpm db:seedújrafuttatva nem duplikál;- a tesztek determinisztikus mockokkal futnak (külső média, YouTube, Authentik hívások élő elérése nélkül);
- a kizárt V0 elemek (rating, komment, médiafeltöltés, tömeges műveletek stb.) sehol nem jelennek meg.