Full Stack
Oylkka Graphics
Oylkka Graphics grew out of a need to give designers a simple way to sell their work online. I built the entire platform: a creator dashboard for uploading and managing assets, a browsing experience with search and category filtering, and a checkout flow. The trickiest part was handling large image files efficiently — most designers upload 4000px+ photos that need to be served fast without losing quality.

Project Goals
- Give designers a dead-simple upload flow — drag, drop, add title/description, publish.
- Build fast search that works across thousands of assets with category and tag filtering.
- Optimize images on upload so the site loads fast even with high-res originals.
- Create a creator dashboard showing earnings, download counts, and asset performance.
My Process
Built this alongside Oylkka (the e-commerce platform), reusing the auth and payment infrastructure. The main new challenge was the image pipeline — I needed to generate thumbnails, WebP variants, and responsive sizes on upload. Deployed on Vercel with MongoDB Atlas.
Challenges & Solutions
Challenge:
Uploading 10MB+ source files was timing out on Vercel's 4.5s serverless limit.
Solution:
Moved uploads to a presigned URL flow — client uploads directly to cloud storage, then triggers a processing job via webhook.
Challenge:
The search was too slow once the library hit 2000+ assets — MongoDB text search couldn't keep up.
Solution:
Added Atlas Search (Lucene-based) with faceted search for categories, price ranges, and popularity scoring.
Challenge:
Creators wanted to see real-time earnings, but the payment webhook processing was asynchronous.
Solution:
Built a webhook handler that updates creator earnings immediately on payment confirmation, with a push notification via Server-Sent Events.
Key Learnings
- Presigned upload URLs are the only way to handle large files in serverless — don't try to proxy through your API.
- Atlas Search is basically free Elasticsearch if you're already on MongoDB — worth the switch from text indexes.
- SSE (Server-Sent Events) is underrated for real-time updates when you don't need bidirectional communication.
Gallery



