This site is an AI generated website that will temporarily act as a placeholder, until I finished my actual portfolio.

Full-stack developer, building real-time web apps

I design and build complete products end to end — schema to socket to screen. Currently deep in a real-time multiplayer chess platform: custom auth, live gameplay, and everything in between.

rooms.ts
// join a live game room
export function joinGameRoom(socket, gameId) {
  socket.join(`game:${gameId}`);
  socket.data.gameId = gameId;

  if (socket.rooms.has(`game:${gameId}`)) {
    io.to(`game:${gameId}`)
      .emit('player:joined', {
        playerId: socket.data.userId,
      });
  }
}

// cleanup on disconnect
socket.on('disconnect', () => {
  const { gameId } = socket.data;
  cleanupRoom(gameId, socket.id);
});

Selected work

01

Chess.dev — real-time multiplayer chess

A full-stack chess platform built from the ground up: live games over WebSockets, custom cookie-based JWT authentication, and a Postgres schema modeling users, games, chat, and followers.

The interesting problems weren't the UI — they were concurrency and state. Per-socket data instead of globals to avoid race conditions between simultaneous games. Room lifecycle management so disconnects clean up correctly. Cursor-based pagination for game history that actually holds up under load.

Next.js (App Router)TypeScriptSocket.IOPrisma + PostgreSQLTanStack QueryZodTailwind CSS

Live gameplay

Socket.IO rooms per game, broadcast vs. targeted emits, automatic cleanup on disconnect.

Custom auth

Cookie-based JWT via jose, no third-party auth library — full control over the session model.

Avatar cropper

Built a pinch-to-zoom circular image cropper from native touch events, exported through canvas to WebP.

Media pipeline

Supabase Storage integration via server actions with service-role uploads.

storage / server actions

Lightweight cache layer

In-memory store with scheduled cleanup, standing in for Redis during early development.

infra

Toolkit

02

frontend

  • Next.js (App Router)
  • TypeScript
  • Tailwind CSS
  • TanStack Query

backend & data

  • Node.js (custom server)
  • Prisma ORM
  • PostgreSQL / Supabase
  • Zod

realtime & infra

  • Socket.IO
  • JWT (jose)
  • Cloudflare DNS
  • Resend

Journey

03
~earlyLearned routing, layout, and cookie-based auth patterns from scratchNext.js fundamentals, Tailwind debugging, first Prisma schemasfoundations
~midWired a custom Node server to Socket.IO for real-time playSocket auth middleware, global io instance, typed socketsrealtime
~recentHardened concurrency and cleaned up room lifecycle handlingPer-socket state, disconnect cleanup, TanStack Query cache patternsrefinement
nowShipping the app to a real domain — hosting, DNS, and transactional emailCustom domain, Resend for email, production deployin progress

Building something real-time? I'd like to hear about it.