| Hey HN, 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? |