VibeVox — Béta Launch Stratégia

Zárt Béta (2026-05-01 – 2026-05-14) → Nyilvános Launch (2026-05-15)

Kapcsolódó: 18_TASK_CALENDAR.md · 15_Launch_Playbook.md · ROADMAP.md Státusz: Tervezés — implementálandó (béta fázis: 2026-05-01) Utolsó frissítés: 2026-04-19


Tartalomjegyzék

  1. Béta fázis célja és korlátai
  2. Store submission timing — platform-onként
  3. Mikor válik láthatóvá az app a nyilvánosság számára?
  4. Béta hozzáférés vezérlése — Supabase email allowlist
  5. Melyik platformon ki mit kap a béta fázisban?
  6. Launch Day (2026-05-15) — szimultán élesítés
  7. Supabase séma és RPC implementáció
  8. BETA_MODE config flip — launch nap teendők

1. Béta fázis célja és korlátai

Béta fázis (Máj. 1–14.) Launch (Máj. 15+)
Ki használhatja Meghívott béta tesztelők + barátok Bárki (nyilvános regisztráció)
Hozzáférés módja Supabase email allowlist Nincs korlátozás
Platform láthatóság Private/belső csatornák Publikus store listázás
Fizetős funkciók Tesztelők ingyenesen kapnak hozzáférést Stripe checkout él
Cél Bug hunting, UX visszajelzés, onboarding tesztelés Bevételszerzés indul
⚡ IMPORTANT

Kulcspont: Ha valaki megszerzi az APK fájlt vagy a privát download linket, attól még nem tudja használni az appot — a Google OAuth bejelentkezés után a Supabase email allowlist ellenőrzés blokkolja. A védelmi réteg az auth layer, nem a fájl titkossága.


2. Store submission timing — platform-onként

Hard Submission Deadlines (visszaszámlálva 2026-05-15-től)

Platform Terjesztési forma Review idő (piaci átlag) Hard Deadline Ha csúszik → Fallback
Windows Direkt .exe Velopack Nincs review Máj. 14. (build) N/A
Linux AppImage Direkt letöltés Nincs review Máj. 14. (build) N/A
Linux Flatpak Flathub (önkéntes review) 2–6 hét (indeterminate!) 🚨 Ápr. 21. AppImage direkt → Flathub post-launch
Android Google Play Closed Testing → Production 3–14 munkanap 🚨 Máj. 1–3. Direkt APK link a landing page-en
iOS Apple App Store Fejlesztés nem kész Fázis 2, szept. 2026+ „Coming to iOS" waitlist

3. Mikor válik láthatóvá az app a nyilvánosság számára?

Flathub (Linux)

  • A Flathub review GitHub PR-on keresztül zajlik — önkéntesek nézik át a csomagolást (manifest helyessége, sandbox jogok), nem a funkcionalitást
  • Reviewmegjegyzések: reviewer jóváhagyja, de nem merge-eli automatikusan
  • Amikor a PR approved státuszba kerül → te irányítod mikor lesz merged
  • Béta alatt: PR approved de nem merged → a nyilvánosság nem látja
  • Launch napján (Máj. 15.): Merge parancs kiadása → 24 órán belül élő a Flathub-on
  • Fontos: Flathub frissítések (initial merge után) review nélkül mennek ki — logó, dizájn, funkciók szabadon frissíthetők

Google Play (Android)

  • Closed Testing Track: csak meghívott email-ek tölthetik le, a Play Store keresőben nem jelenik meg
  • Béta alatt: Closed Testing-ben futtatjuk, béta tesztelők emailt kapnak a meghívóhoz
  • Production submission: Máj. 1–3-án beadjuk production-ba → review → Managed Publishing mód
  • Managed Publishing = te döntöd el mikor lesz élő — a review átmegy, de az app „Pending Developer Release" állapotban vár, amíg te nem nyomasz egy gombot
  • Launch napján (Máj. 15.): Play Console → Publish → azonnal élő

Windows + Linux AppImage

  • Direkt letöltés — nincs store review
  • Béta alatt: Landing page „Coming Soon" módban van, download gomb nem aktív
  • Béta tesztelőknek: privát GitHub Release link (private asset) vagy közvetlen fájlmegosztás
  • Launch napján: Landing page aktiválás → gomb él

4. Béta hozzáférés vezérlése — Supabase email allowlist

Az architektúra lényege

Az app Google OAuth-ot használ bejelentkezésre. A token exchange után — mielőtt az app ténylegesen „bejelentkezettnek" tekintené a felhasználót — egy Supabase RPC hívás ellenőrzi, hogy az email cím szerepel-e az allowliston.

Felhasználó → Google OAuth → token exchange sikeres
                                    ↓
                        Supabase RPC: is_beta_allowed(email)
                                    ↓
                    ┌──── TRUE ────┤├──── FALSE ────┐
                    ↓                               ↓
              ✅ Belépés sikeres            ❌ Auth törölve
              App normálisan indul          "Zárt béta — értesítünk Máj. 15-én"

Miért Supabase-ből?

  • Nincs új build egy tesztelő hozzáadásához — admin panelből kezelhető
  • Azonnal érvényes — a következő loginnál már érvényes az új tesztelő
  • Naplózható — ki mikor lépett be béta tesztelőként
  • Flip egy env változóvalBETA_MODE=false → launch napján mindenki beléphet

5. Melyik platformon ki mit kap a béta fázisban?

Tesztelő kap Windows Linux AppImage Linux Flatpak Android
Privát letöltési link ❌ (manifest teszt)
Google Play Closed Testing invite N/A N/A N/A ✅ (email alapján)
Email allowlist (Supabase) ✅ kötelező ✅ kötelező ✅ kötelező ✅ kötelező
Ingyenes Pro hozzáférés béta alatt
ℹ️ NOTE

A béta tesztelők mindig kötelezően szerepelnek a Supabase allowliston — akkor is, ha privát linket kaptak. Ez biztosítja, hogy ha valaki továbbadja a fájlt, az ismerős nem tud belépni.

Béta tesztelő felvételének folyamata

  1. Tesztelő szól / jelentkezik
  2. Admin (te) felveszi az emailt a Supabase beta_allowlist táblába
  3. Ha Android: Play Console → Closed Testing → tesztelők listájához email hozzáadása
  4. Tesztelőnek küldöd a letöltési linket / Play store meghívót
  5. Tesztelő letölti, Google-lel bejelentkezik → app beengedi

6. Launch Day (2026-05-15) — szimultán élesítés

A goal: minden platform egyszerre válik elérhetővé a nyilvánosság számára (±1 óra tolerancia).

Launch nap reggeli sorrend (Máj. 15., 05:00–07:00 CET)

Időpont (CET) Tennivaló Eredmény
05:00 BETA_MODE = False deploy (új build + GitHub Release) Windows + Linux: bárki bejelentkezhet
05:01 Product Hunt listing live PH upvote-ok elkezdődnek
05:05 Google Play Console → Managed Publishing → Publish Android: Play Store-ban élő (5-10 perc propagálás)
05:10 Flathub merge signal küldése a reviewernek Linux Flatpak: 1-24 óra múlva élő
05:15 Landing page aktiválás: download gombok bekapcsolása Direkt letöltés él
05:30 CEE social csatornák (Reddit, FB csoportok) aktiválása Organikus traffic indul
⚠️ WARNING

Flathub propagálás: A merge után a Flathub CDN-en 1-24 óra az élő megjelenés. Ez nem probléma — az AppImage direkt letöltéssel a Linux felhasználók azonnal hozzájutnak, a Flathub listing a nap folyamán aktiválódik.


7. Supabase séma és RPC implementáció

Tábla: beta_allowlist

CREATE TABLE beta_allowlist (
    email       TEXT PRIMARY KEY,
    name        TEXT,
    source      TEXT DEFAULT 'manual',  -- 'friend' | 'beta_signup' | 'manual'
    invited_at  TIMESTAMPTZ DEFAULT NOW(),
    notes       TEXT
);

-- RLS: direkt SELECT tiltva (anon key nem dumpolhatja a listát)
ALTER TABLE beta_allowlist ENABLE ROW LEVEL SECURITY;
CREATE POLICY "no_direct_access" ON beta_allowlist FOR SELECT USING (false);

-- SECURITY DEFINER RPC: csak a függvényen át érhető el
CREATE OR REPLACE FUNCTION is_beta_allowed(user_email TEXT)
RETURNS BOOLEAN
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
BEGIN
    RETURN EXISTS (
        SELECT 1 FROM beta_allowlist
        WHERE email = LOWER(TRIM(user_email))
    );
END;
$$;

Az RPC hívás az appból (app/auth.py)

# Supabase-en keresztül, a meglévő HTTP infrastruktúrát használva
import urllib.request, json

def _check_beta_allowlist(self, email: str) -> bool:
    """Check Supabase RPC — is this email on the beta allowlist?"""
    from app.config import SUPABASE_URL, SUPABASE_ANON_KEY, BETA_MODE
    if not BETA_MODE:
        return True  # launch után: mindenki beléphet
    try:
        url = f"{SUPABASE_URL}/rest/v1/rpc/is_beta_allowed"
        data = json.dumps({"user_email": email}).encode()
        req = urllib.request.Request(
            url, data=data, method="POST",
            headers={
                "Content-Type": "application/json",
                "apikey": SUPABASE_ANON_KEY,
                "Authorization": f"Bearer {SUPABASE_ANON_KEY}",
            }
        )
        with urllib.request.urlopen(req, timeout=10) as r:
            return json.loads(r.read()) is True
    except Exception as e:
        log.warning("Beta allowlist check failed: %s — allowing (fail-open)", e)
        return True  # hálózati hiba esetén fail-open (ne blokkolja a tesztelőt)
ℹ️ NOTE

Fail-open policy: Ha a Supabase nem elérhető (hálózati hiba), az app beengedi a felhasználót. Ez elfogadható a béta fázisban — fontosabb, hogy a tesztelők ne ragadjanak ki hálózati zavarok miatt.


8. BETA_MODE config flip — launch nap teendők

app/config/constants.py — konfigurálható értékek

# ── Beta Access Control ───────────────────────────────────────────────────────
# Flip to False on launch day (2026-05-15) — removes the email allowlist gate
BETA_MODE         = True          # False → anyone can log in
BETA_LAUNCH_DATE  = "2026-05-15"  # informational / UI display only

Launch napon (Máj. 15.) egyetlen változtatás kell:

BETA_MODE = False  # ← ez az egyetlen módosítás

Utána: új build + GitHub Release deploy → Windows/Linux automatikusan frissülnek (Velopack). Android-on: a BETA_MODE check csak az app-ban van — ha az APK már production-ban van (Play Store), az BETA_MODE=False buildből terjesztett APK automatikusan engedi be az új felhasználókat.


Appendix: Gyors referencia — béta tesztelő hozzáadása

  1. Supabase Dashboard → Table Editor → beta_allowlist → Insert Row
    email: tesztelő@gmail.com
    name: Teszt Péter
    source: friend
    notes: Android tesztelő, Pixel 8
    
  2. Android esetén: Play Console → Internal Testing / Closed Testing → Tesztelők → Email hozzáadása
  3. Link küldése: Privát GitHub Release URL (Windows/Linux) vagy Play invite link (Android)
  4. Semmi más nem szükséges — a következő bejelentkezési kísérletnél már beengedi az app