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 layerBackend
- Django
- Celery
Data layer
- PostgreSQL
- Redis
Also used