diff --git a/apps/frontend/src/i18n/locales/en.ts b/apps/frontend/src/i18n/locales/en.ts index 22f984e..f8294da 100644 --- a/apps/frontend/src/i18n/locales/en.ts +++ b/apps/frontend/src/i18n/locales/en.ts @@ -197,6 +197,22 @@ export default { title: 'Build Matrix', subtitle: 'Which engines build for which platforms.', }, + batocera: { + title: 'Batocera Store', + subtitle: 'Our catalog, straight on your retro box.', + lead: 'ttg-store is a small catalog client for Batocera, the plug-and-play retro gaming distribution. It pulls our games into the box\'s ROM folders together with box art and EmulationStation metadata, and can be re-run any time from the Ports menu to pick up new releases. Python 3 standard library only — nothing to install alongside it.', + repo: 'Git repository', + docs: 'Documentation', + batoceraProject: 'Batocera project', + installTitle: 'Install', + installDesc: 'Run this over SSH on the Batocera box. It installs the client, writes a default config, creates the Ports entry and runs the first sync.', + installNote: 'Then restart EmulationStation so the games show up:', + useTitle: 'Use it', + useDesc: 'On the device: Ports ▸ "Teletype Games Store". Over SSH the client has a small CLI:', + platformsTitle: 'What it installs', + platformsDesc: 'A catalog platform is installable when its release asset boots directly on a Batocera system. Other platforms ship web and desktop builds instead — see the build matrix.', + copy: 'Copy', + }, code: { title: 'Codebase', subtitle: 'Explore our collection of open-source projects, study our source code, and contribute to our independent game development tools.', diff --git a/apps/frontend/src/i18n/locales/hu.ts b/apps/frontend/src/i18n/locales/hu.ts index 58c9334..4a76c2c 100644 --- a/apps/frontend/src/i18n/locales/hu.ts +++ b/apps/frontend/src/i18n/locales/hu.ts @@ -197,6 +197,22 @@ export default { title: 'Build mátrix', subtitle: 'Melyik engine melyik platformra fordít.', }, + batocera: { + title: 'Batocera Store', + subtitle: 'A katalógusunk közvetlenül a retró gépeden.', + lead: 'A ttg-store egy kicsi katalógus-kliens a Batocerához, a plug-and-play retró gamer disztribúcióhoz. A játékainkat a gép ROM mappáiba tölti le, borítóképpel és EmulationStation metaadatokkal együtt, és a Ports menüből bármikor újrafuttatható az új kiadásokért. Csak a Python 3 alapkönyvtárát használja — nem kell mellé semmit telepíteni.', + repo: 'Git tároló', + docs: 'Dokumentáció', + batoceraProject: 'Batocera projekt', + installTitle: 'Telepítés', + installDesc: 'Futtasd ezt SSH-n a Batocera gépen. Telepíti a klienst, kiírja az alapértelmezett konfigurációt, létrehozza a Ports bejegyzést és lefuttatja az első szinkront.', + installNote: 'Utána indítsd újra az EmulationStationt, hogy megjelenjenek a játékok:', + useTitle: 'Használat', + useDesc: 'A gépen: Ports ▸ „Teletype Games Store”. SSH-n keresztül egy egyszerű CLI áll rendelkezésre:', + platformsTitle: 'Mit telepít', + platformsDesc: 'Egy katalógus-platform akkor telepíthető, ha a kiadás fájlja közvetlenül elindul egy Batocera rendszeren. A többi platform webes és asztali buildeket ad — lásd a build mátrixot.', + copy: 'Másolás', + }, code: { title: 'Kódbázis', subtitle: 'Fedezd fel nyílt forráskódú projektek gyűjteményét, tanulmányozd forráskódunkat, és járulj hozzá független játékfejlesztő eszközeinkhez.', diff --git a/apps/frontend/src/page/batocera/BatoceraIndexPage.vue b/apps/frontend/src/page/batocera/BatoceraIndexPage.vue new file mode 100644 index 0000000..2cbc71d --- /dev/null +++ b/apps/frontend/src/page/batocera/BatoceraIndexPage.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/apps/frontend/src/page/catalog/CatalogIndexPage.vue b/apps/frontend/src/page/catalog/CatalogIndexPage.vue index 7cef96f..1813d42 100644 --- a/apps/frontend/src/page/catalog/CatalogIndexPage.vue +++ b/apps/frontend/src/page/catalog/CatalogIndexPage.vue @@ -66,6 +66,10 @@ {{ t('builds.title') }} + | + + {{ t('batocera.title') }} + @@ -162,9 +166,12 @@ onMounted(() => store.fetch()) @apply text-xs text-gray-400 font-medium ml-1; } .builds-link-row { - @apply text-center mt-10; + @apply flex flex-wrap items-center justify-center gap-3 mt-10; } .builds-link { @apply text-sm text-gray-400 hover:text-purple-600 font-medium transition-colors; } +.builds-link-sep { + @apply text-gray-200 text-sm; +} diff --git a/apps/frontend/src/router/batocera.router.ts b/apps/frontend/src/router/batocera.router.ts new file mode 100644 index 0000000..6e3477f --- /dev/null +++ b/apps/frontend/src/router/batocera.router.ts @@ -0,0 +1,5 @@ +import type { RouteRecordRaw } from 'vue-router' + +export const batoceraRouter: RouteRecordRaw[] = [ + { path: '/batocera', name: 'batoceraIndex', component: () => import('../page/batocera/BatoceraIndexPage.vue') }, +] diff --git a/apps/frontend/src/router/index.router.ts b/apps/frontend/src/router/index.router.ts index 5d2a99a..1292c22 100644 --- a/apps/frontend/src/router/index.router.ts +++ b/apps/frontend/src/router/index.router.ts @@ -8,6 +8,7 @@ import { enginesRouter } from './engines.router' import { howtosRouter } from './howtos.router' import { teamRouter } from './team.router' import { buildsRouter } from './builds.router' +import { batoceraRouter } from './batocera.router' export const router = createRouter({ history: createWebHistory(), @@ -21,6 +22,7 @@ export const router = createRouter({ ...howtosRouter, ...teamRouter, ...buildsRouter, + ...batoceraRouter, ], scrollBehavior() { return { top: 0 }