← Vissza a Portal Hub-ra
GongAkadémia Rendszerspecifikáció (PRD v1.3.0)
Hivatalos Műszaki és Fejlesztési Alapdokumentum
Verzió: 1.3.0
# GongAkadémia Platform & GEO JSON-LD Dashboard & Management System
*A dokumentum a GongAkadémia Digitális Ökoszisztéma és a GEO Dashboard fejlesztési projektjének hivatalos műszaki specifikációja (PRD). Bármilyen architektúrális módosítás a dokumentum verziószámának frissítésével lép életbe.*
---
## Rendszerspecifikáció és Fejlesztési Alapdokumentáció (System Architecture & PRD)
**Verzió:** 1.3.0
**Dátum:** 2026. július 30.
**Státusz:** Jóváhagyott fejlesztési alapdokumentum – Főportál Ökoszisztéma ("Portal Hub"), Adatbázis Névtér Prefixek (`ga_platform_` & `ga_geo_`), GEO Scraper v1.1.0 és Régi Script Riasztási Rendszer
**Szerző:** AI Rendszerarchitekt & GongAkadémia Fejlesztői Csapat
---
## 1. Bevezetés és Projekt Vízió
A **GongAkadémia Digital Ecosystem** egy központi, mikroszolgáltatás-alapú vállalati platform. A platform belépési pontjaként egy **Fő Ökoszisztéma Portál (Portal Hub)** szolgál, amelyről a felhasználók bejelentkezés után elérik a különálló alrendszereket (pl. GEO JSON-LD Dashboard, Kurzus/Esemény Menedzser, Kliens & Hangfürdő Adminisztráció, AI Tartalomgeneráló stb.).
Ennek az ökoszisztémának az **elsőként megvalósuló modulja** a **GEO JSON-LD Dashboard & Management System**. Ennek célja, hogy a GongAkadémia és egyéb kezelt weboldalak strukturált adatait (Yoast SEO JSON-LD vs. Egyedi GEO Schema.org entitások) valós időben nyomon kövesse, automatizáltan kaparja, érvényesítse, megjelölje a frissítendő régi scripteket, és mesterséges intelligencia segítségével folyamatosan optimálja a keresőmotorok és AI ágens-keresők (ChatGPT Search, Perplexity, Gemini, Google Search Generative Experience) számára.
---
### 1.1 Fő üzleti és technológiai célok
1. **Ökoszisztéma-szintű Belépési Portál (Portal Hub):** Belépés utáni központi modulválasztó felület, amely "foglalatként" szolgál a jövőbeli alrendszereknek, így elkerülhető a meglévő kód utólagos átalakítása.
2. **Szigorú Adatbázis Névtér Izoláció (Database Prefix Standard):** Egyetlen közös Supabase PostgreSQL adatbázis használata esetén a táblák, procedúrák, nézetek és RLS szabályok egyértelmű elhatárolása modul-prefixekkel (`ga_platform_` és `ga_geo_`).
3. **Párhuzamos validáció és vizualizáció:** A beépített Yoast és az egyedi fejlesztésű GEO JSON-LD-k hibatűrő, szintaxis-kiemelt, pontos oldalméretezésű összehasonlítása.
4. **Automata monitoring és Régi Script Riasztás:** Időzített adatkinyerés (scraper), explicit HTML markerek (`class="geo-custom-schema"`) keresése, a régi/frissítendő scriptek automatikus megjelölése (`needs_update: true`) és vizuális riasztása a Dashboard-on.
5. **Időbeliség és verziókezelés:** Fagyasztott mérföldkövek ("Freeze & Archive") kezelése tetszőleges visszamenőleges olvasási lehetőséggel.
6. **AI-vezérelt schema-generálás:** GPT- és Gemini-modellek dinamikus használata strukturált kimenettel (Zod schema validation), interaktív chates szerkesztővel.
7. **Entitás-konzisztencia (`@id` registry):** Globális törzsadat-kezelés az oktatók, helyszínek, szervezet és kurzusok egyértelmű azonosítására a teljes entitás-hálózatban (`ga_geo_entity_registry`).
8. **Multi-site skálázhatóság:** Korlátlan domain és aloldal hierarchikus kezelése egyetlen központi felületen.
9. **Egységes, reprodukálható felhasználói élmény:** A jóváhagyott sötét dashboard UX alapértelmezett témaként működik.
10. **Biztonságos belépés:** Supabase Auth (E-mail/jelszó + Google OAuth); minden belépett felhasználó azonos, szerepkörök nélküli jogosultsággal dolgozik.
11. **Nulla infrastruktúra-költségre optimalizálás:** Vercel Free, Supabase Free, GitHub és Vercel AI SDK integráció.
---
## 2. Rendszerarchitektúra és Technológiai Stakk
### 2.1 Technológiai elemek és szerepük
- **Frontend:** Next.js (App Router), TypeScript, Tailwind CSS, Lucide React ikonok, Prism.js / Shiki szintaxiskiemeléshez.
- **Design rendszer:** CSS-változókon / Tailwind tokeneken alapuló téma- és skinrendszer.
- **Hosting & CI/CD:** Vercel Free Tier, automatikus deployment GitHub push-ra.
- **Adatbázis és backend:** Supabase Free PostgreSQL adatbázis (RLS védelemmel, Auth felülettel, `pg_cron` ütemezéssel).
- **Adatbázis elnevezési konvenciók:**
- **`ga_platform_*`**: Az egész GongAkadémia Ökoszisztémára vonatkozó törzsadatok, profilok, modul-jegyzék és rendszerszintű naplók.
- **`ga_geo_*`**: Kifejezetten a GEO JSON-LD Dashboard modulhoz tartozó weboldalak, URL-ek, kaparási auditok, schemák és entitás-regiszter.
- **Jövőbeli modulok (foglalatok):** `ga_events_*` (Kurzus & Esemény), `ga_clients_*` (Kliens & Hangfürdő), `ga_ai_*` (AI Content Studio).
- **Scraper Engine:** JSDOM / Fetch alapú Node.js kaparó modul explicit marker felismeréssel (`geo-custom-schema`) és legacy fallback logikával.
- **AI infrastruktúra:** Vercel AI SDK (OpenAI GPT-4o-mini & Gemini 2.0 Flash).
```text
┌─────────────────────────────────────────────────────────────────────────────────┐
│ GONGAKADÉMIA PORTAL HUB │
│ (Ökoszisztéma Belépő & Modulválasztó) │
└───────────────────────────────────────┬─────────────────────────────────────────┘
│
┌───────────────────┴───────────────────┐
▼ ▼
┌───────────────────────────────────────┐ ┌──────────────────────────────────────┐
│ GEO JSON-LD DASHBOARD │ │ JÖVŐBELI ALRENDSZEREK │
│ - Yoast vs Custom Schema Párhuzam │ │ - Kurzus & Esemény Menedzser │
│ - Régi Script Alert & Marker Check │ │ - Hangfürdő & Kliens Admin │
│ - AI Schema Generátor (GPT/Gemini) │ │ - AI Content & Marketing Studio │
└───────────────────┬───────────────────┘ └──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│ SUPABASE BACKEND & VERCEL API │
│ - Supabase Auth (E-mail / Google OAuth) │
│ - PostgreSQL + JSONB elhatárolt névtérben: │
│ * Platform törzsek: ga_platform_profiles, ga_platform_modules │
│ * GEO Modul táblák: ga_geo_websites, ga_geo_urls, │
│ ga_geo_scrape_audits, ga_geo_custom_schemas │
│ - Cron Jobs (Automatizált Scraper Audit) │
└─────────────────────────────────────────────────────────────────────────────────┘
```
---
## 3. Modulok és Funkcionális Követelmények
### 3.0 Ökoszisztéma Belépő Portál (Portal Hub Module)
- **Útvonal:** `/portal` vagy `/dashboard` (Gyökér átirányítás bejelentkezés után).
- **Funkció:** Kártya-alapú modulválasztó felület.
- **Aktív Modul:** **GEO JSON-LD Dashboard** (Kattintható, átirányít a `/geo-dashboard` modulra).
- **Inaktív / "Hamarosan" Kártyák (Foglalatok):**
- *Kurzus & Esemény Menedzser* (`ga_events_*`)
- *Kliens & Hangfürdő Nyilvántartó* (`ga_clients_*`)
- *AI Content & Marketing Studio* (`ga_ai_*`)
- **Navigáció:** A GEO Dashboard fejlécében mindig elérhető egy "Ökoszisztéma Portál" vissza-gomb/menüpont.
---
### 3.1 Scraper Engine & Régi Script Riasztási Modul (GEO Scraper CLI & API v1.1.0)
- **Scraper logikája:**
1. **Yoast SEO azonosítás:** A `<script>` tag tartalmazza a `yoast-schema-graph` azonosítót.
2. **Explicit Custom Schema azonosítás (Elsődleges):** Keresi a `class="geo-custom-schema"`, `id="geo-custom-schema"`, `data-geo-source="dashboard"` attribútumokat. Ha megtalálja: `detection_method: "explicit_marker"`, `needs_update: false`.
3. **Legacy Fallback azonosítás (Másodlagos):** Ha sem Yoast, sem GEO marker nem található, de van egyéb JSON-LD: `detection_method: "legacy_fallback"`, `needs_update: true`.
- **Riasztási Adatstruktúra (Audit Result):**
A scraper kimenetében és az adatbázisban (`ga_geo_scrape_audits`) eltárolásra kerül a `detection_summary`:
```json
"custom_detection_summary": {
"total_custom_found": 1,
"explicit_marker_count": 0,
"legacy_fallback_count": 1,
"needs_update": true
}
```
- **Szabványos beillesztendő HTML kód (a felhasználó által beszúrandó):**
```html
<script type="application/ld+json" class="geo-custom-schema" data-geo-source="dashboard">
{
"@context": "https://schema.org",
"@graph": [ ... ]
}
</script>
```
---
### 3.2 Dashboard & Összehasonlító UI Modul
- **Oldalsáv (Sidebar):** Domain- (`ga_geo_websites`) és URL-fa (`ga_geo_urls`). Ha egy oldalon `needs_update: true` áll fenn, az URL mellett megjelenik egy **sárga figyelmeztető badge** (`Régi Script`).
- **Nézetfülek:**
1. **Teljes JSON-LD:** Nyomtatási/egyesített nézet.
2. **Yoast vs. Egyedi GEO:** Kétpaneles összehasonlító kódablak.
3. **GEO / AI Haszon:** Entitás elemzés és SEO állapot.
- **Régi Script Figyelmeztető Banner & Akció:**
Ha az aktív oldalon régi típusú kód fut, a munkaterület tetején megjelenik egy sárga értesítő sáv:
> **FIGYELMEZTETÉS:** Ez az oldal régi típusú, hiányzó jelölővel ellátott JSON-LD kódot használ.
> **[Új Jelölős Kód Másolása]** *(Gombra kattintva a frissített `class="geo-custom-schema"` kódot másolja vágólapra).*
---
### 3.3 Adatbázis Séma & Prefixált Elnevezési Konvenciók (Supabase PostgreSQL)
Az adatbázisban minden tábla, nézet, függvény és RLS szabály az alábbi prefixálást követi a tiszta elkülönítés érdekében:
#### 1. Platform / Ökoszisztéma Törzsadatok (`ga_platform_*`)
```sql
-- 1.1 Felhasználói Profilok & Szerepkörök
CREATE TABLE ga_platform_profiles (
id UUID PRIMARY KEY REFERENCES auth.users(id) ON DELETE CASCADE,
email TEXT NOT NULL,
full_name TEXT,
avatar_url TEXT,
role TEXT NOT NULL DEFAULT 'admin' CHECK (role IN ('admin', 'editor', 'viewer')),
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- 1.2 Ökoszisztéma Modul Regiszter
CREATE TABLE ga_platform_modules (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
module_key TEXT NOT NULL UNIQUE, -- pl. 'geo_dashboard', 'events_admin', 'clients_admin', 'ai_studio'
name TEXT NOT NULL,
description TEXT,
route_path TEXT NOT NULL,
icon_name TEXT NOT NULL,
is_active BOOLEAN DEFAULT true,
display_order INT DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now()
);
-- Kezdeti modulok feltöltése
INSERT INTO ga_platform_modules (module_key, name, description, route_path, icon_name, is_active, display_order)
VALUES
('geo_dashboard', 'GEO JSON-LD Dashboard', 'Strukturált adatok, Yoast vs GEO schema, AI generálás', '/geo-dashboard', 'Globe', true, 1),
('events_admin', 'Kurzus & Esemény Admin', 'Naptár, jelentkezők és képzések kezelése', '/events-admin', 'Calendar', false, 2),
('clients_admin', 'Kliens & Hangfürdő Admin', 'Vendégek, egyéni kezelések és visszajelzések', '/clients-admin', 'Users', false, 3),
('ai_studio', 'AI Content Studio', 'SEO cikkek, blogbejegyzések és marketing szövegek', '/ai-studio', 'Sparkles', false, 4);
```
#### 2. GEO JSON-LD Dashboard Modul Adatok (`ga_geo_*`)
```sql
-- 2.1 GEO Webhelyek / Domainek
CREATE TABLE ga_geo_websites (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
domain_url TEXT NOT NULL UNIQUE,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- 2.2 GEO Aloldalak / URL-ek
CREATE TABLE ga_geo_urls (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
website_id UUID REFERENCES ga_geo_websites(id) ON DELETE CASCADE,
url_path TEXT NOT NULL,
full_url TEXT NOT NULL,
title TEXT,
needs_update BOOLEAN DEFAULT false, -- Gyors vizuális jelzéshez (sárga badge)
last_scraped_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(website_id, url_path)
);
-- 2.3 GEO Scrape Audits (Kapart állapotok és riasztások)
CREATE TABLE ga_geo_scrape_audits (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
url_id UUID REFERENCES ga_geo_urls(id) ON DELETE CASCADE,
executed_at TIMESTAMPTZ DEFAULT now(),
http_status INT NOT NULL,
response_time_ms INT,
yoast_json_ld JSONB,
custom_json_ld JSONB,
detection_summary JSONB, -- { total_custom_found, explicit_marker_count, legacy_fallback_count, needs_update }
needs_update BOOLEAN DEFAULT false,
raw_scripts_found INT DEFAULT 0
);
-- 2.4 GEO Draft & Published Custom Schemas (Verziózott szerkesztés)
CREATE TABLE ga_geo_custom_schemas (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
url_id UUID REFERENCES ga_geo_urls(id) ON DELETE CASCADE,
version INT NOT NULL DEFAULT 1,
schema_data JSONB NOT NULL,
status TEXT CHECK (status IN ('draft', 'published', 'archived')) DEFAULT 'draft',
created_by UUID REFERENCES ga_platform_profiles(id),
created_at TIMESTAMPTZ DEFAULT now()
);
-- 2.5 GEO Entitás Törzsadat Regiszter (@id Registry)
CREATE TABLE ga_geo_entity_registry (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
entity_id_uri TEXT NOT NULL UNIQUE, -- pl. 'https://gongakademia.hu/#organization'
entity_type TEXT NOT NULL, -- pl. 'Organization', 'Person', 'Course', 'Place'
name TEXT NOT NULL,
payload_jsonb JSONB NOT NULL,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
```
#### 3. Row Level Security (RLS) Szabályok Mintája
```sql
-- Platform Profilok RLS
ALTER TABLE ga_platform_profiles ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Hitelesített felhasználók olvashatják a profilokat"
ON ga_platform_profiles FOR SELECT
TO authenticated USING (true);
-- GEO Weboldalak RLS
ALTER TABLE ga_geo_websites ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Hitelesített felhasználók mindent kezelhetnek a ga_geo_websites táblában"
ON ga_geo_websites FOR ALL
TO authenticated USING (true) WITH CHECK (true);
-- GEO URL-ek RLS
ALTER TABLE ga_geo_urls ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Hitelesített felhasználók mindent kezelhetnek a ga_geo_urls táblában"
ON ga_geo_urls FOR ALL
TO authenticated USING (true) WITH CHECK (true);
-- GEO Scrape Audits RLS
ALTER TABLE ga_geo_scrape_audits ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Hitelesített felhasználók mindent kezelhetnek a ga_geo_scrape_audits táblában"
ON ga_geo_scrape_audits FOR ALL
TO authenticated USING (true) WITH CHECK (true);
```
---
## 4. UX/UI Rendszerspecifikáció
### 4.1 Fő Ökoszisztéma Portál (Portal Hub) Képernyőterv
```text
┌─────────────────────────────────────────────────────────────────────────────────┐
│ GONGAKADÉMIA DIGITÁLIS ÖKOSZISZTÉMA [Sötét Téma] [Felhasználó] │
├─────────────────────────────────────────────────────────────────────────────────┤
│ Üdvözöljük a GongAkadémia Központi Irányítópultján! │
│ Válassza ki a használni kívánt alrendszert: │
│ │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │
│ │ 🟢 GEO JSON-LD Dashboard │ │ ⚪ Kurzus & Esemény Admin │ │
│ │ Strukturált adatok, Yoast │ │ Naptár, jelentkezők és │ │
│ │ vs GEO schema, AI generálás │ │ képzések kezelése. │ │
│ │ [ MEGNYITÁS -> ] │ │ [ HAMAROSAN ] │ │
│ └─────────────────────────────┘ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ ┌─────────────────────────────┐ │
│ │ ⚪ Kliens & Hangfürdő Admin │ │ ⚪ AI Content Studio │ │
│ │ Vendégek, egyéni kezelések │ │ SEO cikkek, blogbejegyzések │ │
│ │ és visszajelzések. │ │ és marketing szövegek. │ │
│ │ [ HAMAROSAN ] │ │ [ HAMAROSAN ] │ │
│ └─────────────────────────────┘ └─────────────────────────────┘ │
---
## 4.2 Dinamikus Táblázat Rendszer és Interaktivitási Szabvány (Universal Dynamic Data Tables)
Az Adatbázis Karbantartó (`/admin`) és a kapcsolódó táblázatos felületek egy egységes, magasan konfigurálható táblázat-architektúrát használnak. Az alábbi funkciók és működési elvek újrahasznosítható szabványként szolgálnak a teljes GongAkadémia ökoszisztémában:
### 1. Dinamikus Oszlopszélesség Állítás (`Column Resizing`)
- **Működés:** Minden `<th>` fejléc jobb szélén egy láthatatlan átméretező sáv található (`cursor-col-resize`). Egérkattintás és húzás hatására az oszlop szélessége pixelben dinamikusan követi az egérmozgást.
- **Korlátok:** Biztonsági minimális oszlopszélesség: `70px` (megakadályozza az oszlopok láthatatlanná válását).
### 2. Oszlopsorrend Átrendezése Húzással (`Drag & Drop Column Reordering`)
- **Működés:** A táblázat oszlopfejlécei megfoghatók (`draggable={true}`). Bármelyik oszlop áthúzható egy másik pozícióba (`onDragStart`, `onDragOver`, `onDrop`). Húzás közben vizuális sárga célvonal jelez.
- **Elhatárolás:** Az átméretező sávon leáll a drag esemény propagatingja (`stopPropagation`), így a szélességállítás és a sorrendezés nem zavarja egymást.
### 3. Böngészőoldali Helyi Perzisztencia (`localStorage`)
- **Tárolt kulcsok:**
- `geodashboard_col_widths_v1`: Táblázatonkénti és oszloponkénti szélességek pixelben.
- `geodashboard_col_orders_v1`: Táblázatonkénti oszlopkulcs-sorrend tömbként.
- **Viselkedés:** Az elrendezés frissítés és oldalváltás után is megmarad, szerveroldali vagy adatbázis terhelés nélkül.
### 4. `↔️` Alaphelyzetbe Állítás (Layout Reset)
- A táblázat feletti gombsorban található ikonos **`↔️`** gombra kattintva az aktív táblázat elmentett szélességei és sorrendje azonnal törlődnek, visszaállítva a gyári alapértelmezett elrendezést.
### 5. Idegen Kulcsok (`FK`) és ID Oszlopok Intelligens Rejtése
- Az idegen kulcsok (`website_id`, `url_id`) az `id` oszlop elé, a táblázat legvégére vannak pozicionálva.
- Alapértelmezetten rejtve vannak. A **`🔑 ID Mutatása / ID Elrejtése`** gomb kapcsolja be/ki láthatóságukat.
### 6. Egységes Dátum és Idő Formátum
- Minden dátum típusú mező (`col.type === 'date'`) a felhasználóbarát, magyar formátumú **`YYYY.MM.DD HH:mm`** szerkezetben jelenik meg (pl. `2026.07.31 12:05`).
### 7. Dinamikus Dropdown (Select) Szerepkör és FK Választók
- Új rekord felvételekor vagy szerkesztésekor az idegen kulcsos mezők és státusz/szerepkör mezők (`role`, `status`) automatikusan legördülő `select` menüként jelennek meg, a Supabase törzsadatokból dinamikusan feltöltve.
---
## 4.3 Vizuális Vezérlőelemek és a "Slate Control" Gombcsalád Szabványa
A felületek vizuális zajának csökkentése és a csúcskategóriás (premium dark UI) élmény érdekében a műveleti és navigációs elemek egy egységesített dizájnszabványt követnek.
### 1. Slate Control Gombcsalád (`Slate Control Buttons`)
A műveleti és navigációs sávokban lévő gombok a harsány alapszínek (sárga, kék) helyett egy egységes, sötét pala / grafit árnyalatú visual rendszert használó gombcsaládot alkotnak:
- **Hivatalos Megnevezés:** `Slate Control` (vagy `Slate Glass UI Controls`)
- **Stílusjegyek:**
- **Inaktív / Alapértelmezett állapot:** `bg-[#111827] text-gray-300 border border-white/10 hover:text-white hover:bg-white/5` (lekerekítés: `rounded-xl`, szövegméret: `text-xs font-bold`).
- **Aktív / Kiválasztott állapot:** `bg-[#1e293b] text-white border border-slate-600 shadow-md` (kiemelt keret és sötét pala háttér).
- **Vizuális Jelvények (Badge):** Az állapotjelző elemek (pl. `[Bontott]`, `[Közös]`) kis méretű monospaced jelvényként (`bg-blue-500/20 text-blue-300 border border-blue-500/40` vagy `bg-emerald-500/20...`) jelennek meg a gonton belül.
### 2. "Bontott/Közös JSON-LD" Állapot-kapcsoló Gomb (`Toggle Switch Button`)
- A korábbi különálló nézetválasztó tabok helyett egyetlen `Slate Control` állapotkapcsoló gomb szolgál:
- **Működés:** Kattintásra vált a **Bontott** (Yoast SEO vs. Egyedi GEO kétoszlopos panel) és a **Közös** (Teljes egyesített JSON-LD script blokk) nézet között.
### 3. Felirat Nélküli Kódmásoló Akciók (`Icon-Only Code Copy`)
- A kódmegjelenítő kártyák jobb felső sarkában lévő szöveges gombok helyett egyetlen ikonos **`⧉`** gomb (`p-2 rounded-lg bg-white/5 hover:bg-white/15 text-gray-300 hover:text-amber-400 border border-white/10`) végzi a vágólapra másolást.
---
## 5. Fejlesztési Roadmap és Mérföldkövek
### Phase 1: Ökoszisztéma Alapok & Supabase Setup
- [ ] Next.js (App Router) projekt inicializálása TypeScript + Tailwind CSS alapon.
- [ ] Supabase Auth (E-mail/jelszó + Google OAuth) integráció.
- [ ] Fő Ökoszisztéma Portál (Portal Hub) `/portal` felület és modul-navigáció megépítése.
- [ ] Supabase PostgreSQL adatbázis séma felállítása `ga_platform_*` és `ga_geo_*` prefixált táblákkal és RLS szabályokkal.
### Phase 2: GEO Dashboard UI & Scraper Integráció
- [ ] GEO Dashboard `/geo-dashboard` felület megépítése (Gong Dark téma).
- [ ] GEO Scraper v1.1.0 API Route integrálása (`/api/scrape`).
- [ ] **Régi Script Riasztó Rendszer:** Sárga badge az oldalsávban és Értesítő Banner a kódpanel felett explicit kódmásoló akcióval.
- [ ] Yoast vs Custom JSON-LD párhuzamos szerkesztő és kódmegjelenítő.
### Phase 3: AI Schema Engine & Entitás Registry
- [ ] Vercel AI SDK integráció (`OPENAI_API_KEY`, `GEMINI_API_KEY`).
- [ ] AI Schema generátor panel Zod validációval.
- [ ] Entitás Törzsadat-tár (`ga_geo_entity_registry`).
---
## 6. Elfogadási Kritériumok
1. Belépés után a felhasználó a **Portal Hub** felületre érkezik, ahol látható a GEO Dashboard és a jövőbeli alrendszerek "foglalatai".
2. Hitelesítés nélkül sem a Portal Hub, sem a GEO Dashboard nem érhető el.
3. Az adatbázisban minden tábla, nézet és RLS szabály követi a prefixálási konvenciót (`ga_platform_*` és `ga_geo_*`).
4. A scraper automatikusan megkülönbözteti az explicit `class="geo-custom-schema"` jelölővel ellátott scripteket a régi típusúaktól.
5. Ha a scraper régi típusú scriptet talál, a `ga_geo_urls` és `ga_geo_scrape_audits` táblákban a `needs_update` flag `true` értéket kap, a UI-on sárga figyelmeztetés jelenik meg.
6. A felhasználó egyetlen kattintással kimásolhatja az új, jelölővel ellátott JSON-LD HTML kódblokkot.