Initial design doc covering architecture, data model, tech stack, and interactive documentary experience for the game preservation initiative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6.5 KiB
6.5 KiB
Project Afterlife — Design Document
Preservando juegos online que merecen una segunda vida
Date: 2026-02-21 Status: Approved Team: 4 programmers
1. Vision
Project Afterlife is an initiative dedicated to preserving discontinued online games by running private servers and documenting each game's history through interactive web documentaries with human-narrated audiobooks.
Monetization is 100% donation-based through external platforms (Patreon/Ko-fi).
2. Target Audience
- Multilingual (Spanish + English at launch)
- Former players of discontinued online games
- Gaming preservation community
- Gaming history enthusiasts
3. Web Structure
Public Pages
| Page | Description |
|---|---|
| Landing / Home | Initiative mission, latest games added, donation CTA |
| Game Catalog | Filterable grid/list of all documented games (by genre, year, status) |
| Game Page | Individual game card: basic info, screenshots, private server link, documentary link |
| Interactive Documentary | Per-game chapter-based experience (text, images, video, narrated audio player) |
| About Us | Team, mission, how to contribute |
| Donations | Patreon/Ko-fi links + fund allocation transparency |
CMS (Strapi Admin)
- Game CRUD management
- Documentary chapter editor (rich content)
- Media management (images, videos, audio files)
- Translation management (ES/EN)
- Team/collaborator management
4. Data Model
Game
title(localized)slugdescription(localized)genre(enum: MMORPG, FPS, Casual, Strategy, Sports, Other)releaseYearshutdownYeardeveloperpublisherscreenshots(media[])coverImage(media)serverStatus(enum: online, maintenance, coming_soon)serverLink(URL)documentary(relation → Documentary)
Documentary
game(relation → Game)title(localized)description(localized)chapters(relation → Chapter[], ordered)totalDuration(computed from chapters)publishedAt
Chapter
documentary(relation → Documentary)title(localized)content(localized, rich text with inline media)audioFile(media — narrated audio)audioDuration(seconds)order(integer)coverImage(media)
Translation Strategy
- Strapi i18n plugin for all content types
- Each content entry has locale variants (es, en)
- Frontend uses
next-intlfor UI strings
5. Interactive Documentary Experience
Structure
Each game's documentary is divided into navigable chapters. Example:
- "El Nacimiento" — How and why the game was created
- "La Era Dorada" — Peak popularity, the community
- "Así Se Jugaba" — Mechanics, classes, maps, gameplay
- "El Declive" — What went wrong, player loss
- "Luces Apagadas" — Server shutdown, community reactions
- "La Restauración" — How it was restored, current server state
Chapters are fully customizable per game from the CMS.
Chapter Components
- Persistent audio player — Fixed bottom bar (podcast/Spotify mini style)
- Play/pause, progress bar, playback speed
- Syncs with chapter navigation
- Can play full documentary or chapter-by-chapter
- Narrative text — Rich formatted content
- Image gallery — Screenshots, concept art, period photos
- Embedded videos — Trailers, gameplay, community moments
- Side navigation — Chapter index always visible for jumping between sections
- Reading progress — Bar indicating documentary completion
Audio Player (Howler.js)
- Fixed bottom bar, always visible during documentary
- Controls: play/pause, seek, speed (0.5x–2x), volume
- Chapter sync: switching chapters updates audio position
- Continuous mode: plays all chapters in sequence
- Chapter mode: plays one chapter at a time
6. Tech Stack
Frontend
| Technology | Purpose |
|---|---|
| Next.js 15 (App Router) | Main framework, SSR/ISR |
| TypeScript | Static typing |
| Tailwind CSS | Utility-first styles |
| Framer Motion | Documentary animations |
| next-intl | Internationalization (ES/EN) |
| Howler.js | Robust audio player |
Backend / CMS
| Technology | Purpose |
|---|---|
| Strapi 5 | Headless CMS, REST/GraphQL API |
| PostgreSQL | Database |
| MinIO | S3-compatible self-hosted object storage (audio, images, video) |
Infrastructure (100% Self-Hosted)
| Technology | Purpose |
|---|---|
| Nginx | Reverse proxy + static serving |
| Docker + Docker Compose | All services orchestration |
| VPS (own servers) | All hosting |
| Let's Encrypt / Certbot | Free SSL |
| GitHub Actions | CI/CD → automatic deploy to VPS |
7. Repository Structure
project-afterlife/
├── apps/
│ ├── web/ # Next.js frontend
│ │ ├── src/
│ │ │ ├── app/ # App Router pages
│ │ │ ├── components/ # React components
│ │ │ ├── lib/ # Utilities, API client
│ │ │ ├── messages/ # i18n translation files
│ │ │ └── styles/ # Global styles
│ │ ├── public/ # Static assets
│ │ └── package.json
│ └── cms/ # Strapi 5 CMS
│ ├── src/
│ │ ├── api/ # Content types
│ │ └── plugins/ # Custom plugins
│ └── package.json
├── packages/
│ └── shared/ # Shared TypeScript types
│ ├── src/
│ │ └── types/
│ └── package.json
├── docker/
│ ├── docker-compose.yml # All services
│ ├── nginx/
│ │ └── nginx.conf
│ └── certbot/
├── .github/
│ └── workflows/
│ └── deploy.yml
├── docs/
│ └── plans/
├── package.json # Monorepo root (workspaces)
├── turbo.json # Turborepo config
└── README.md
8. Monetization
- Patreon: Recurring donations with tiers (early access to documentaries, credits, etc.)
- Ko-fi: One-time donations
- Links prominently displayed on landing page and donation page
- Transparency: public breakdown of fund allocation
9. Non-Functional Requirements
- Performance: Static generation where possible, ISR for dynamic content
- Accessibility: Semantic HTML, ARIA labels, keyboard navigation, screen reader support
- SEO: Meta tags, Open Graph, structured data for games
- Mobile: Fully responsive, audio player adapts to mobile
- Security: HTTPS, CORS, rate limiting, CSP headers