all work
shipped[2023]8

ImgTwist

Image showcase platform. Django, async processing, social features.

Problem

Learning async task processing and image pipelines end-to-end with Django + Celery.

Built

Image showcase platform with upload, async resize and processing via Celery, S3 storage, and a social follow, like, and comment system.

async

image processing

social

features

S3

storage

The build

[Idea]

ImgTwist is one of my earlier projects, built to learn the full Django, Celery, S3, and Docker stack on a real product rather than a toy. The product shape is a generalized image hosting platform: upload, async resize, and social features, exposed via a custom domain under algocode.site.

[Framing]

The architecture is what you'd expect. Django REST API under /api/v1, Celery for async image processing, Redis as the broker, Postgres for relational data, AWS S3 for blob storage, all running on a single EC2 instance behind Nginx Proxy Manager with SSL. The rate limiter (Token Bucket in Django Middleware) is implemented, but honestly not yet enforced per-app. That's the standing improvement.

[Build]

The same algocode.site domain hosts both ImgTwist and Algocode as subdomains, a pattern I'd reuse for any portfolio-of-projects site. Subdomains are managed in Nginx Proxy Manager, exposed via Portainer for Docker orchestration, documented via auto-generated Swagger and Redoc. The most interesting thing about the deployment was getting Portainer, Nginx Proxy Manager, a Django app, a Celery worker, Redis, and Postgres into one docker-compose up workflow. That's the muscle memory I've relied on since.

[Deploy]

Improvements I'd prioritize. Enforce the rate limiter per-app per-IP. Add a CDN in front of S3 for the public read path. Swap the single EC2 for the Pulumi infra I built later. This project's infra was the prototype that Pulumi replaced.

Stack

4 techs · grouped by layer

Backend

  • Django
  • Celery

Data layer

  • PostgreSQL
  • Redis

Also used

PillowAWS S3

Links

Related stack

techs used in ImgTwist