A Teletype Games nyilvános platformja: egyetlen monorepó (
services/teletypegames) a katalógus-backenddel (Catalog API) és a retró stílusú frontenddel, Docker Compose-zal futtatva.
apps/
frontend/ # Vue 3 + Vite + TypeScript + Tailwind
api/ # Rails 8 API + ActiveAdmin
A docker compose up -d elindítja a fejlesztői környezetet. Mindkét alkalmazás egy domain alatt van:
| Útvonal | Mit szolgál ki |
|---|---|
/ |
frontend |
/api |
Catalog API |
/admin |
ActiveAdmin |
/api/swagger |
API-dokumentáció |
Lintelés: RuboCop (rubocop-rails-omakase) a backendhez, ESLint 9 (flat config, Vue + TypeScript) a frontendhez.
Rails 8 + MySQL. ActiveAdmin felület (blaze téma, Devise-hitelesítés), Blueprinter-szerializálók, apipie-rails dokumentáció böngészhető Swagger UI-jal. Ez az egyetlen igazságforrás a szoftver-metaadatokhoz, kiadásokhoz, tagokhoz, eseményekhez és letöltési naplókhoz, és ez szolgálja ki a képeket és binárisokat.
A Software (name, title, author, desc, story, license, platform, status, highlighted; soft delete) sok Release és ExternalLink elemhez tartozik, valamint képekhez a SoftwareImage táblán keresztül (alapértelmezett jelző + sorrend). Egy Release tárolja a verziót, valamint a kazetta / forrás / HTML-mappa / dokumentációs mappa útvonalait. Minden letöltés egy Download sor (IP, user agent, referer, kiadás), ami downloadCount / totalDownloads néven jelenik meg az API-válaszokban.
| Végpont | Mire való |
|---|---|
GET /api/software |
Katalóguslista: szoftver + rendezett kiadások + latestRelease (a dev- kihagyásával) + webPlayableRelease + totalDownloads |
GET /api/software/highlighted |
Kiemelt szoftverek |
GET /api/events |
Közösségi események |
GET /api/members |
Csapattagok |
GET /api/stores |
Áruház-nyilvántartás (lásd lentebb) |
GET /api/image/:id |
Képkiszolgálás |
GET /api/wiki/pages?tag=blog\|howto[&limit][&body=1][&lang=en\|hu] |
Wiki-proxy: a Grav custom/pages.json végpontját kéri le a WIKI_GRAV_URL alapján, így a frontend soha nem beszél közvetlenül a wikivel |
GET /api/rss/blog |
RSS a blog címkéjű wikioldalakról |
GET /api/rss/releases |
RSS a legfrissebb kiadásokról |
GET /api/download?path=… |
Naplózott letöltés (rögzíti az IP / UA / referer adatokat, majd kiszolgál) |
GET /api/swagger |
apipie-dokumentáció |
GET /file/*path |
Közvetlen fájlletöltés; az API-válaszok kiadásútvonalai ide mutatnak |
POST /build/upload |
Artifact-feltöltés, kérésenként egy fájl; alkalmazástoken upload jogosultsággal |
POST /build/publish |
Kiadás publikálása; alkalmazástoken update jogosultsággal, a CI hívja feltöltés után |
A tokeneket a WarpEngine cikk írja le.
Az áruház-nyilvántartás (GET /api/stores) megmondja, mely katalógusokból telepíthet egy kliens, és hol van az egyes áruházak konfigurációja. Nyilvános, mert az asztali kliens első indításkor olvassa, és nincs kinek belépnie. Egy sor három mező (name, catalog_url, store_repository_url), az ActiveAdmin ▸ 🛒 Stores alatt szerkeszthető. A hosztalkalmazásban él, nem a WarpEngine-ben: a motor egyetlen katalógust szolgál ki, és nem tudja, ki szállít hozzá áruházakat.
A /build/publish platform szerint továbbít egy Platforms szolgáltatásnak (tic80, love, ebitengine, c64, godot, bevy, phaser). Mindegyik felveszi a feltöltött artifactokat (C64 esetén <név>-<verzió>.prg + <név>-<verzió>.metadata.json), a metaadatból upserteli a Software rekordot, a site mezőből hozzáad egy Source Code külső linket, és létrehozza a Release rekordot. A Gitea + Woodpecker oldal az Üzembe helyezés cikkben van.
Vue 3 SPA, Vitével építve, TypeScriptben: vue-router (oldalanként egy modul), Pinia-store-ok domainenként (software, events, members, git, blog, howtos, youtube, ui), vue-i18n, valamint Tailwind CSS + TuiCSS a retró terminál-kinézethez. A Traefik ugyanazon az alapdomainen proxyzza, mint az API-t.
Oldalak: home, catalog (lista + részletek), blog, code, howtos, team, contact. A katalógus részletoldalán képnagyító, kiadáslista, letöltésszámlálók és böngészőben játszható kiadások vannak.
Forrásonként egy kliensmodul a src/api/ alatt:
| Modul | Forrás |
|---|---|
software.api.ts, event.api.ts, member.api.ts |
Catalog API |
wiki.api.ts |
A Catalog API wiki-proxyja (blog / howto címkék), a felület nyelvét lang paraméterként átadva. A VITE_WIKI_BASE csak a Gravra mutató külső linkek felépítéséhez kell |
git.api.ts |
Gitea REST API v1 (WEBAPP_GITEA_TOKEN token) a Code oldalhoz |
youtube.api.ts |
YouTube Data API: a csatorna legutóbbi videója és megtekintésszáma |