<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Predrag Mitrovic </title>
    <description>The latest articles on DEV Community by Predrag Mitrovic  (@predragmitrovic).</description>
    <link>https://dev.to/predragmitrovic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3888589%2Fb22d3927-0324-44f7-bf7e-00edd173086d.png</url>
      <title>DEV Community: Predrag Mitrovic </title>
      <link>https://dev.to/predragmitrovic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/predragmitrovic"/>
    <language>en</language>
    <item>
      <title>How I Built a Game-Agnostic Platform With 11 Modules Using Next.js 15 and FastAPI</title>
      <dc:creator>Predrag Mitrovic </dc:creator>
      <pubDate>Mon, 20 Apr 2026 09:33:41 +0000</pubDate>
      <link>https://dev.to/predragmitrovic/how-i-built-a-game-agnostic-platform-with-11-modules-using-nextjs-15-and-fastapi-3laj</link>
      <guid>https://dev.to/predragmitrovic/how-i-built-a-game-agnostic-platform-with-11-modules-using-nextjs-15-and-fastapi-3laj</guid>
      <description>&lt;p&gt;Last year I had a simple question: why does every game community rely on 5-10 disconnected tools? Reddit for discussion, Canva for thumbnails, OBS for clips, Google Maps knockoffs for locations, Discord for squads. None of it built for a specific game.&lt;/p&gt;

&lt;p&gt;So I built ViceForge (&lt;a href="https://viceforge.app" rel="noopener noreferrer"&gt;https://viceforge.app&lt;/a&gt;) — a single platform with 11 modules that can be deployed for any game from one config file. Here's the technical deep-dive into how it works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frontend: Next.js 15 + React 19 (App Router, Server Components) Backend: FastAPI + Python 3.12 (async, type-safe API) Database: PostgreSQL 16 + pgvector Storage: Cloudflare R2 (zero egress costs) AI Pipeline: GPT-4o, Whisper, FFmpeg on Modal GPU infrastructure&lt;/p&gt;

&lt;p&gt;The Game-Agnostic Trick&lt;br&gt;
This was the hardest architectural decision. I wanted to deploy the same codebase for GTA 6 and Red Dead Redemption without writing new code.&lt;/p&gt;

&lt;p&gt;The solution: a template system in the admin backoffice. One JSON config controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Color palette and branding&lt;/li&gt;
&lt;li&gt;Game name and metadata&lt;/li&gt;
&lt;li&gt;Module visibility (enable/disable per game)&lt;/li&gt;
&lt;li&gt;Map tiles and coordinate system&lt;/li&gt;
&lt;li&gt;AI companion personality and knowledge base&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;he result? Two live instances running right now:&lt;/p&gt;

&lt;p&gt;GTA 6: &lt;a href="https://viceforge.app" rel="noopener noreferrer"&gt;https://viceforge.app&lt;/a&gt; Red Dead: &lt;a href="https://rddm.viceforge.app" rel="noopener noreferrer"&gt;https://rddm.viceforge.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same Docker container. Different config. Zero new engineering.&lt;/p&gt;

&lt;p&gt;ViceForge for Red Dead - live at rddm.viceforge.app:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1llvngst9waduf69n1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1llvngst9waduf69n1l.png" alt="ViceForge for Red Dead - live at rddm.viceforge.app:" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same codebase, different game — FrontierForge for GTA6 at viceforge.app:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14bg9z53gnzv1yqato6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14bg9z53gnzv1yqato6v.png" alt="Same codebase, different game — FrontierForge for GTA6 at viceforge.app:" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI Clip Pipeline (The Hard Part)&lt;/strong&gt;&lt;br&gt;
This is the module I'm most proud of. Upload raw gameplay, get 5 TikTok-ready clips in under 3 minutes.&lt;/p&gt;

&lt;p&gt;Here's the actual pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload — Video goes to Cloudflare R2. We chose R2 over S3 for zero egress costs — critical when you're processing HD/4K video. &lt;/li&gt;
&lt;li&gt;AI Scene Analysis — GPT-4o Vision analyzes the gameplay and identifies the most engaging moments. It looks for action sequences, funny moments, impressive plays.&lt;/li&gt;
&lt;li&gt;FFmpeg Processing — Modal GPU spins up an FFmpeg container. Cuts the highlights, renders in the selected format (horizontal, vertical, or both), applies watermark.&lt;/li&gt;
&lt;li&gt;Whisper Captions — OpenAI Whisper generates accurate captions. We offer 6 caption styles: Bold, Classic, Neon, Minimal, Shadow, Outline.&lt;/li&gt;
&lt;li&gt;Publish — Clips land on ViceForge TV with AI-generated titles, tags, and virality scores.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cost per clip: ~$0.05 (processing + AI moderation). We charge €0.50. That's 90% margin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 11 Modules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's nothing fancy about any individual module. The power is in having them all connected in one platform with shared auth, shared data, and a unified UX.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI Clips — GPT-4o, FFmpeg, Whisper, Modal GPU&lt;/li&gt;
&lt;li&gt;ViceForge TV — Content feed with YouTube + TikTok layout, HLS streaming&lt;/li&gt;
&lt;li&gt;Trend Radar — Scrapes YouTube/TikTok/Reddit/Twitter every 4 hours&lt;/li&gt;
&lt;li&gt;Interactive Map — Leaflet.js, PostGIS, custom tiles, community-submitted locations&lt;/li&gt;
&lt;li&gt;AI Companion — In-character NPC chatbot with RAG, pgvector embeddings&lt;/li&gt;
&lt;li&gt;Predictions — Community voting with leaderboards&lt;/li&gt;
&lt;li&gt;Academy — Wiki-style guides with rich text editor&lt;/li&gt;
&lt;li&gt;Squad Finder — Matchmaking by skill, platform, playstyle&lt;/li&gt;
&lt;li&gt;RP Servers — Server management dashboard with Discord bot integration&lt;/li&gt;
&lt;li&gt;Developer API — FastAPI auto-docs, rate limiting, 4 pricing tiers&lt;/li&gt;
&lt;li&gt;Backoffice — Multi-game CMS with template system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*&lt;em&gt;Database Design: PostgreSQL for Everything&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
We considered MongoDB but went all-in on PostgreSQL:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pgvector for AI Companion embeddings (RAG search)&lt;/li&gt;
&lt;li&gt;PostGIS for map coordinates and spatial queries&lt;/li&gt;
&lt;li&gt;tsvector for full-text search across all modules&lt;/li&gt;
&lt;li&gt;JSONB for flexible game config storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One database engine. No extra infrastructure. It handles everything.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Deployment: Docker + Modal GPU&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We run a containerized Docker stack with Nginx reverse proxy, SSL termination, and Redis for background job processing with Celery.&lt;br&gt;
AI processing runs on Modal — serverless GPU infrastructure. We only pay for actual clip processing, which keeps our unit economics strong while maintaining the ability to scale horizontally when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't over-engineer early. A €12 VPS handles more than you think. We'll move to cloud when we need to, not before.&lt;/li&gt;
&lt;li&gt;PostgreSQL can do everything. Vector search, geospatial queries, full-text search, JSON storage — all in one engine.&lt;/li&gt;
&lt;li&gt;Game-agnostic from day one was worth it. The template system took 2 extra sprints to build but means every new game is a config change, not a rewrite.&lt;/li&gt;
&lt;li&gt;AI costs are dropping fast. When we started, clip processing cost $0.30. Now it's $0.05. By launch it'll be even less.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try It&lt;/strong&gt;&lt;br&gt;
Both instances are live:&lt;/p&gt;

&lt;p&gt;GTA 6: &lt;a href="https://viceforge.app" rel="noopener noreferrer"&gt;viceforge.app&lt;/a&gt; Red Dead: &lt;a href="https://rddm.viceforge.app" rel="noopener noreferrer"&gt;Red Dead&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're 4 founders, self-funded, applying for YC Summer 2026. GTA 6 launches November 19, 2026 — we're building the infrastructure before 40 million players show up.&lt;/p&gt;

&lt;p&gt;Questions? Drop a comment. Happy to go deeper on any part of the stack.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>nextjs</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
