(no title)
taehun | 27 days ago
After years of building web services on AWS, I got tired of setting up the same image optimization stack over and over: CloudFront + Lambda@Edge + S3, IAM policies, cache invalidation — 2-3 hours of config per project, every single time.
All I wanted was: upload an image, get a URL, add ?w=800 to resize it. Why did that require stitching together 3 AWS services?
So I built img-src (https://img-src.io).
Upload an image, get a global CDN URL. Transform on the fly with query params:
- https://img-src.io/i/user/photo.jpg ← original - https://img-src.io/i/user/photo.jpg?w=800 ← resize - https://img-src.io/i/user/photo.webp?q=85 ← format + quality - https://img-src.io/i/user/photo.avif?w=400&h=400&fit=cover
No CloudFront. No Lambda. No S3 bucket config.
How it works: - Upload via dashboard or REST API - Images stored on Cloudflare R2 (zero egress fees = unlimited bandwidth) - CDN Worker serves from 200+ edge locations - Rust/libvips container handles transcoding (WebP, AVIF, JPEG, PNG)
Tech stack: - Frontend: React 19 + Vite + TailwindCSS - Backend: TypeScript + Hono on Cloudflare Workers - CDN: Cloudflare Workers + R2 + KV - Transcoder: Rust + Axum + libvips (Docker container) - Auth: Clerk (JWT/JWKS) - Docs: Mintlify (https://docs.img-src.io)
Pricing: - Free: 10GB storage, 1K transforms/month, unlimited bandwidth - Pro: $5/month — 50GB, 10K transforms, unlimited bandwidth
The unlimited bandwidth is possible because R2 has zero egress costs. Pro plan infrastructure cost is ~$0.85/user/month.
I built this solo, pair-programming with Claude Code ~3 hours/day. My role was mostly testing and providing feedback on the generated code.
API docs: https://docs.img-src.io OpenAPI spec available for SDK generation (TypeScript SDK in progress).
Would love feedback from HN, especially on: - Pricing — is $5/month the right price point vs Cloudinary ($99+), ImageKit ($49)? - Missing features — what would make you switch from your current setup? - API design — anything you'd change? - Agent workflows — if your AI agent needed to handle images, what would the ideal integration look like?
No comments yet.