
Central Deploy Manager
2026
The deployment plumbing behind this site and its smaller siblings: signed webhooks, health-checked Docker rollouts, and Caddy routing on one VPS.

Aquarium
2026
A small 3D aquarium for the browser, built with React and Three.js and deployed like a real app because apparently I cannot leave anything simple.

Bird of the Day
2026
A tiny daily bird site powered by recent eBird observations, a small Express API, and an unreasonable amount of affection for birds.
CentraID
2026
A six-person capstone connecting a NestJS/PostgreSQL backend, an Expo mobile app, and a classroom reader service for verified check-ins.
React Native Cloud Prototypes
2025
Two Expo/Firebase prototypes: one for vehicle access approvals and one for QR-based classroom attendance.
Wurmkickflip
2026
An extremely serious physics experiment about teaching a worm to ride a skateboard. The physics works; the worm remains a work in progress.
2026
Aquarium
A small 3D aquarium for the browser, built with React and Three.js and deployed like a real app because apparently I cannot leave anything simple.

My notes
This started as “what if I put a little fish tank on a subdomain?” and then immediately became a lesson in 3D assets, camera behavior, lighting, performance, and how much personality a low-poly fish can have.
It is one of my favorite kinds of project: technically useful, completely unnecessary, and pleasant to leave open in a tab. It also gave me a good excuse to run the whole delivery path for a static app instead of stopping at a local demo.
Aquarium is a browser-based 3D scene built with React, Three.js, and Vite. It focuses on a quiet interactive fish-tank experience: animated fish, underwater atmosphere, species selection, camera controls, and responsive UI around the scene.
The app builds into static assets served by an nginx Docker image. On the VPS it runs behind Caddy at fish.alirezaafshan.com, with deploys handled by the central deploy manager and GitHub Actions.
This project was a useful frontend exercise because it combines visual design, real-time rendering, asset preparation, performance tradeoffs, and deployment details. The app itself is playful, but the delivery path is the same shape I want for future small web experiments: a focused repo, a Dockerfile, health-checked rollout, and a stable subdomain.