IDG2001 · Full Stack · System Design

YAPPER 2.0 - Twitter clone from 1995

A retro-inspired social platform that recreates core Twitter behavior with modern backend engineering, multi-layer caching, and Docker-based deployment.

Project description

YAPPER 2.0 is a Twitter-style app concept, focused on rebuilding the core posting and feed experience with a strong backend architecture and better performance under load. This project was a part of the course IDG2001 Cloud Technologies.

The stack combines a Python FastAPI backend, React frontend, PostgreSQL database, and an Nginx caching and load-balancing layer. Everything is orchestrated with Docker Compose for reproducible local and deployment environments.

Core features

Authentication

Secure login and account flow for personal score history.

FastAPI service layer

Python API design with clear service boundaries and containerized runtime.

React frontend

Client-side interface for timeline interaction and user-driven actions.

PostgreSQL

Relational data model for user, content, and interaction data.

Three-layer caching

Request, query, and reverse-proxy caching for better response times.

Dockerized operations

One-command startup with isolated services and persistent data volume.

Architecture highlights

  • FastAPI middleware caches GET responses with short-lived expiration.
  • SQLAlchemy query caching reduces repeated database work on hot paths.
  • Nginx handles reverse-proxy caching and round-robin load balancing.
  • Debug endpoints expose cache statistics and manual cache clearing.
  • Service dependencies are staged so backend and frontend wait for readiness.

DevOps and runtime setup

  • Backend: Python 3.11 / FastAPI on port 8000.
  • Frontend: React on port 3000.
  • Database: PostgreSQL on port 5433 with Docker volume persistence.
  • Cache/Proxy: Nginx with API cache endpoint on port 8080.
  • Run command: docker compose up --build.

What I learned

This project pushed me from feature coding into infrastructure thinking. Instead of only making endpoints "work," I had to reason about latency, scaling behavior, cache invalidation tradeoffs, and operational clarity. Building a social app with a retro concept taught me how to combine fun product direction with practical backend engineering.

← Back to Projects