Files
project-afterlife/docs/plans/2026-02-21-project-afterlife-design.md
consultoria-as 168f443875 Add Project Afterlife design document
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>
2026-02-22 02:13:01 +00:00

197 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
- `slug`
- `description` (localized)
- `genre` (enum: MMORPG, FPS, Casual, Strategy, Sports, Other)
- `releaseYear`
- `shutdownYear`
- `developer`
- `publisher`
- `screenshots` (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-intl` for UI strings
## 5. Interactive Documentary Experience
### Structure
Each game's documentary is divided into navigable chapters. Example:
1. "El Nacimiento" — How and why the game was created
2. "La Era Dorada" — Peak popularity, the community
3. "Así Se Jugaba" — Mechanics, classes, maps, gameplay
4. "El Declive" — What went wrong, player loss
5. "Luces Apagadas" — Server shutdown, community reactions
6. "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.5x2x), 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