Skip to content
View ritikkumar27's full-sized avatar

Highlights

  • Pro

Block or report ritikkumar27

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
ritikkumar27/README.md

Ritik Kumar · CS undergrad

Backend Developer  •  DevOps Enthusiast  •  Homelab Builder

 

"learning by actually building things and then figuring out why they break"

 

I build backends and the infrastructure they run on — not just the code that serves an API, but the queues, caches, proxies, DNS and CI/CD pipelines that keep it alive at 3am.

 

GitHub profile Email me GitHub repositories


⚡ Stack

Core backend stack: TypeScript, Node.js, NestJS, PostgreSQL, Redis, Prisma

Infrastructure stack: Linux, Ubuntu, Docker, GitHub Actions, Cloudflare, AWS

   TypeORM   Caddy   Turborepo

day to day: NestJS · PostgreSQL · Redis + BullMQ · Docker Compose · GitHub Actions
operating: Linux servers · reverse proxies · DNS / HTTPS · Cloudflare Tunnel · self-hosted runners · container networking


🚀 Featured Projects

🎬 MediaForce

Async media processing platform · ↗ repo

Work doesn't happen inside the request. Every upload lands as a job in a queue, and a fleet of workers picks it up.

POST /upload
   └─▶ BullMQ queue ──▶ worker ──▶ object store
              │
              ├─▶ Postgres  (job state)
              └─▶ Redis     (cache + retries)

TypeScript · NestJS · PostgreSQL + TypeORM · Redis + BullMQ · Turborepo monorepo · multi-stage Docker · GitHub Actions → GHCR → self-hosted runner · Caddy + Cloudflare Tunnel

Runs on my own Linux server — where I learn backend architecture and distributed systems.

🏠 Homelab

The home datacenter · ↗ dotfiles

An old PC that teaches me what happens underneath services — the parts tutorials skip.

 Intel i5 (3rd gen) · 8 GB DDR4
 SSD 256 GB  +  HDD 500 GB
 Ubuntu Server · always on

Ubuntu Server · Docker + Compose · Caddy reverse proxy · Cloudflare Tunnel · Tailscale mesh · GitHub Actions self-hosted runner · storage + networking experiments

🔗 URL Shortener

System design practice, not CRUD · ↗ repo

Used it to explore what happens at scale — where a 300-line tutorial project starts to hurt.

 click → Caddy → NestJS
   ├─▶ Redis hit?  →  301 redirect  (~1 ms)
   └─▶ miss  →  Postgres indexed lookup
              →  background analytics job

NestJS · PostgreSQL + Prisma · Redis · rate limiting · DB indexing · background processing

🎮 Modded Minecraft Server

Stateful services on a budget

146 mods, one CPU, 8 GB RAM — a masterclass in resource constraints.

 146 mods · Fabric 1.21.1
 JVM tuned · Lithium + FerriteCore
 cron backup → off-box
 RCON autosave · ssh + tmux

Docker · JVM memory tuning · Lithium + FerriteCore · automated bash + cron backups · RCON · SSH + tmux

Lessons that transfer to real infra: stateful services, resource limits, backups, reliability.


🛠️ Homelab Architecture

how a request reaches my homelab — with no open inbound ports on my router

        ┌───────────────┐
        │ INTERNET      │
        │ public DNS    │
        │ client → :443 │
        └───────────────┘
        ╎
        ▼
        ┌────────────────────┐
        │ CLOUDFLARE         │
        │ outbound tunnel    │
        │ zero inbound ports │
        └────────────────────┘
        ╎
        ▼
        ┌──────────────────┐
        │ CADDY            │
        │ reverse proxy    │
        │ auto TLS + HTTPS │
        └──────────────────┘
        ╎
        ▼
┌────────────────────────────────────────────────────────┐
│          UBUNTU SERVER  ·  DOCKER  ·  HOMELAB          │
│                                                        │
│ ┌─────────────┐   ┌────────────────┐   ┌────────────┐  │
│ │ NestJS APIs │   │ Redis + BullMQ │   │ PostgreSQL │  │
│ └─────────────┘   └────────────────┘   └────────────┘  │
│                                                        │
└────────────────────────────────────────────────────────┘

The path, in one line: a request resolves to Cloudflare → rides an outbound tunnel (so my router opens zero inbound ports) → Caddy terminates TLS and proxies by hostname → lands in a container on the Ubuntu box.

Where the interesting parts live:

  • Cloudflare Tunnel — no port forwarding, no exposed IP; the tunnel is an outbound persistent connection.
  • Caddy — automatic TLS + reverse proxy by hostname, so adding a service means one block in a Caddyfile, not a port map.
  • Docker + Compose — each service in its own network namespace; cross-service traffic only where a port is published.
  • Tailscale — a second path in for admin (SSH) that doesn't touch the public route at all.

 

hardware

┌───────────────────────────┐
│ THE HOMELAB               │
│ Ubuntu Server · always on │
└───────────────────────────┘
     ╎
     ╎  zero inbound ports on the router
     ▼
┌────────────────────────────────┐
│ CPU    Intel i5 (3rd gen)      │
│ RAM    8 GB DDR4               │
│ DISK   SSD 256 GB + HDD 500 GB │
└────────────────────────────────┘

Pinned Loading

  1. pokecatch_cli_game pokecatch_cli_game Public

    🟢 V1 - A CLI game for Linux Users

    Python 7 1

  2. dotFiles dotFiles Public

    My HomeLab dotFiles

    Shell

  3. media-force media-force Public

    🟢 V0 - youtube video downloader saas deployed on my homelab

    TypeScript

  4. URL-shortener-production-ready URL-shortener-production-ready Public

    Production Ready URL Shortener deployed on my homelab

    TypeScript