HashCoreAI
← Blog
Game dev

Cum publici un joc HTML5 pe portaluri: CrazyGames, Poki și build-urile duale

Publishing an HTML5 Game on Portals: CrazyGames, Poki, and Dual Builds

Publicat 10 iulie 2026 · 7 min citire

Cel mai greu lucru la un joc în browser nu e să-l construiești — e să-l vadă cineva. Site-ul tău pornește de la zero trafic; portalurile de jocuri (CrazyGames, Poki, GameDistribution) au deja zeci de milioane de jucători și împart cu tine veniturile din reclame, de obicei în jur de 50%. Concluzia la care am ajuns cu Neon Arcade: site-ul propriu e platforma, portalurile sunt distribuția — și ai nevoie de amândouă. Articolul acesta descrie exact cum livrăm același joc în ambele lumi dintr-un singur codebase, fără două versiuni de întreținut.

De ce nu poți urca pur și simplu build-ul de pe site

Portalurile au reguli stricte, iar cele două care schimbă arhitectura sunt:

Deci ai nevoie de două build-uri cu comportamente diferite la fiecare punct de contact cu banii și cu identitatea — dar dintr-un singur cod, altfel îți dublezi costul de mentenanță pentru totdeauna.

Arhitectura build-ului dual

Soluția noastră, cu Vite și TypeScript, are trei piese:

1. Un flag de compilare

Build-ul de portal se face cu o variabilă de mediu (PORTAL=crazygames npx vite build) care setează un define global. Tot codul poate întreba IS_PORTAL la compile-time, iar bundlerul elimină ramurile moarte — build-ul de portal nici măcar nu conține codul de Stripe sau Firebase.

2. Module interschimbabile

Punctele de contact sensibile — portofelul de jetoane și navigarea către hub — trăiesc în module cu aceeași interfață publică, în două variante: wallet.ts / wallet-portal.ts, back-to-arcade.ts / back-to-arcade-portal.ts. Un plugin de Vite face schimbul la build. Restul jocului nu știe și nu-i pasă în ce lume rulează: cere „deblochează personajul", iar dedesubt asta înseamnă fie o tranzacție de jetoane pe server, fie o reclamă recompensată prin SDK-ul portalului.

3. Curățenia HTML-ului

Același plugin șterge din index.html al build-ului de portal linkurile de privacy/terms și orice navigare externă, și șterge fișierele aferente din output. Înainte de orice submisie rulăm un „purity check" simplu:

grep -c "firebase\|numele-domeniului-tau" dist-crazygames/assets/*.js
# trebuie să afișeze 0

Dacă grep-ul găsește ceva, build-ul nu pleacă. E un test de trei secunde care ne-a scutit de respingeri.

Adaptorul de SDK: o singură interfață pentru toate portalurile

Fiecare portal are SDK-ul lui, dar toate vor cam aceleași semnale. Le-am ascuns după o interfață unică — pe site toate funcțiile sunt no-op, în portal deleagă către SDK-ul real:

Detaliu util pentru testare: SDK-ul CrazyGames rulează în mediu „local" când jocul e servit de pe localhost și simulează reclamele — vezi fluxul complet fără să fii publicat. Poți valida integrarea înainte de submisie.

Submisia: cum arată procesul pe fiecare portal

Economia: ce câștigi de fapt

Pe site-ul propriu păstrezi ~97% din vânzările directe, dar aduci singur fiecare jucător. Pe portaluri primești ~50% din veniturile din reclame, plăți lunare cu praguri mici, dar jucătorii vin singuri. Nu e o alegere — e o secvență: portalurile îți aduc volumul și numele, site-ul tău monetizează fanii. Build-ul dual e prețul tehnic al acestei strategii, și e surprinzător de mic odată ce arhitectura e la locul ei.

Checklist înainte de prima submisie

Construiești un joc în browser și te gândești la distribuție? Jocurile noastre sunt pe games.hashcoreai.com, iar la contact@hashcoreai.com răspundem cu plăcere la întrebări despre proces.

Citește mai departe