All projects
Portfolio ProjectPublic

PixelQueue

A single-host image-processing service with a separate Fastify API and BullMQ worker. It accepts JPG, PNG, and WebP uploads up to 20 MiB and produces bounded WebP output.

PixelQueue application screenshot

Problem

Image processing needs validation, bounded resource usage, reliable retries, and safe output handling without blocking the API request.

Solution

The API validates and stores uploads, queues jobs in Redis/BullMQ, and returns an immediate 202 response. A separate Sharp worker processes jobs with retries and atomic output publication.

My Role

Full Stack Developer responsible for the React web app, Fastify API, BullMQ worker, security controls, tests, CI, Docker deployment, and operations documentation.

Technical Architecture

Nginx serves the React web app and proxies the Fastify API. The API stores uploads and queues BullMQ jobs in Redis; a separate Sharp worker writes output to shared storage.

Result

Demonstrates a documented, production-hardened single-host processing flow with separate API and worker responsibilities.

Status

Source Code Available — Run locally with Docker Compose

Key Features

  • JPG, PNG, and WebP upload
  • 202 job acknowledgement
  • Job status polling
  • EXIF rotation
  • WebP output
  • Retries with exponential backoff
  • Rate limiting
  • Health and readiness checks

Engineering Challenges

  • Bounding upload, pixel, dimension, and page limits
  • Publishing output atomically while preserving retry safety
  • Keeping cleanup singleton with a Redis lock

Technical Decisions

  • Nginx serves the React web app and proxies the Fastify API. The API stores uploads and queues BullMQ jobs in Redis; a separate Sharp worker writes output to shared storage.

Tech Stack

  • React
  • TypeScript
  • Fastify
  • BullMQ
  • Redis
  • Sharp
  • Nginx
  • Docker