← 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.