Login

Public site

This article describes the Teletype Games public-facing platform, consisting of a catalog management backend (Catalog API) and a high-performance frontend application, all orchestrated via Docker.

Catalog (API)

The Catalog is the core backend service responsible for managing software metadata, releases, members, events, and automated updates for various gaming platforms and engines.

  • Functionality: Manages a database of software entries, handles file downloads and image serving, and provides dedicated update services for platforms like TIC-80, LÖVE, and Ebitengine. It serves as the single source of truth for the software library.
  • Tech Stack: A Ruby on Rails 8 application using MySQL for persistent storage. It ships an ActiveAdmin admin panel (authenticated with Devise) for editorial management, uses Blueprinter serializers for its JSON responses, and integrates with the file system for binary distribution.
  • REST API endpoints:
    • GET /api/software — software catalog listing.
    • GET /api/software/highlighted — highlighted/featured software.
    • GET /api/events — community events.
    • GET /api/members — team members.
    • GET /api/image/:id — image serving.
    • GET /file/*path — binary/file download.
    • GET /update — software update registration endpoint (secured by a shared UPDATE_SECRET), called by the CI pipeline after artifacts are uploaded.
  • External Communication: Integrates with Gitea and Woodpecker CI for automated software ingestion and deployment pipelines (see the Deployment article).

Frontend

The Frontend is the primary user-facing interface for the Teletype Games platform, designed for speed and a retro-styled browsing experience.

  • Functionality: Displays the software catalog, blog posts, code/repository activity, HowTo guides, team page, events, and a contact page. It dynamically pulls content from the Catalog API and several external sources.
  • Tech Stack: A Vue 3 single-page application built with Vite and written in TypeScript. It uses vue-router for routing, Pinia for state management, vue-i18n for internationalization, Tailwind CSS + TuiCSS for its retro terminal styling.
  • Pages: home, catalog, blog, code, howtos, team, contact.
  • External Communication (one client module per source under src/api/):
    • Catalog API — fetches software, highlighted software, events, and members.
    • Gitea (git.api.ts) — fetches public repositories and recent commits via the Gitea REST API (v1) to render the Code page.
    • Grav (wiki.api.ts) — fetches pages from the Grav wiki, filtered by the blog tag for the Blog page and the howto tag for the HowTos page.
    • YouTube (youtube.api.ts) — pulls channel videos via the YouTube Data API.
    • Routed through Traefik as a reverse proxy, sharing the same base domain as the backend API.