{"slug": "how-i-built-a-free-online-image-pdf-processing-platform-with-vue-3-fastapi", "title": "How I Built a Free Online Image & PDF Processing Platform with Vue 3 + FastAPI", "summary": "A developer built iamuu, a free online image and PDF processing platform using Vue 3, FastAPI, Celery, and MinIO, offering over 100 image format conversions, 40 PDF tools, AI background removal, OCR, and digital signatures without registration or watermarks. The platform handles large files up to 5GB via streaming, preserves CMYK color profiles, and supports HEIC/RAW conversion. It also implements PKCS#12-based digital signatures and 10-language internationalization with prerendering for fast load times.", "body_md": "I was tired of online file tools that watermarked my output, forced me to create an account, or secretly limited \"free\" to 2 files per day. So I spent 6 months building my own.\n\nThe result is [iamuu](https://www.iamuu.com) — a free platform with 100+ image format conversions, 40+ PDF tools, AI background removal, OCR, and digital signatures. No registration required for basic use, no watermarks, files auto-deleted after processing.\n\n| Layer | Choice | Why |\n|---|---|---|\n| Frontend | Vue 3 + TypeScript + Vite + Pinia | Composition API, great DX, small bundle |\n| Backend | Python 3.12 + FastAPI | Async by default, Pydantic validation, excellent performance |\n| Queue | Celery + Redis | Image/PDF processing is CPU-heavy — must be async |\n| Storage | MinIO (S3-compatible) | Self-hosted object storage, no vendor lock-in |\n| DB | PostgreSQL + SQLAlchemy 2.0 async | Battle-tested, full async support |\n| Deployment | Docker Compose + Nginx | Single server, cost-efficient for MVP stage |\n\n**CMYK color profiles.** Most online converters silently convert CMYK to RGB, destroying print-ready color information. Pillow can read CMYK, but saving to PNG/JPEG requires careful mode management. We preserve CMYK when converting between formats that support it (TIFF, PDF, JPEG), and only convert to RGB when the target format demands it. Getting this right took weeks of edge-case testing.\n\n**Large file streaming.** Users upload files up to 5GB. You cannot load a 5GB file into memory. The upload service streams chunks directly to MinIO via presigned URLs, and workers stream-process from there. Celery task chains handle preprocessing → main processing → postprocessing without keeping the full file in memory.\n\n**HEIC/RAW conversion without codecs.** HEIC is Apple's format based on HEVC compression. RAW files are proprietary camera formats. Both require native libraries (libheif, libraw) that are painful to install and version. We compile specific versions into our Docker image and wrap them behind a clean Python interface so the application code never touches native bindings directly.\n\n**PDF digital signatures.** A real PKCS#12 certificate-based digital signature is completely different from pasting a signature image onto a page. The signature must be cryptographically embedded in the PDF structure per ISO 32000. pyHanko handles the heavy lifting, but configuring certificate chains, timestamp authorities, and signature appearances (visible vs. invisible) was a deep rabbit hole.\n\n**10-language i18n without flash.** Vue i18n loads asynchronously. If you mount the app before the locale bundle arrives, users briefly see Chinese (the fallback) before switching to their language. The fix: resolve locale synchronously from the URL path before creating the i18n instance, preload the target locale, and only mount afterwards. Prerendered pages (830 routes × 10 languages) made this extra tricky — every page shares the same `localhost`\n\norigin during prerender, so localStorage and cookies cross-contaminate locale detection.\n\n**Prerendering is both a blessing and a curse.** Vite + vite-plugin-prerender generates static HTML for every route, giving near-instant TTFB (1ms from nginx). But it introduces problems you do not have in a pure SPA: locale detection cannot rely on cookies, flash-of-unstyled-content requires inline critical CSS, and a single prerender failure silently produces empty HTML without failing the build.\n\n**User trust matters more than features.** The most common question I get is \"what happens to my files?\" A clear privacy policy, a visible \"files auto-deleted\" notice, and TLS 1.3 everywhere matter more to users than having one more format option.\n\n**Online processing is genuinely useful infrastructure.** Most people cannot install desktop software on their work computer, and even fewer have the right codecs and tools. A reliable online tool that just works — with generous free limits and no dark patterns — actually helps people get work done.\n\nTry it: [https://www.iamuu.com](https://www.iamuu.com)\n\nSource: [GitHub](https://github.com/beenkevin25/xyzenith-xyz) (README only — the platform is not open source)\n\nHappy to answer questions about the stack, the file processing pipeline, or running a production online tool platform.", "url": "https://wpnews.pro/news/how-i-built-a-free-online-image-pdf-processing-platform-with-vue-3-fastapi", "canonical_source": "https://dev.to/iamuu/how-i-built-a-free-online-image-pdf-processing-platform-with-vue-3-fastapi-4p4o", "published_at": "2026-07-01 09:02:50+00:00", "updated_at": "2026-07-01 09:19:11.809745+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "computer-vision", "natural-language-processing", "ai-products"], "entities": ["iamuu", "Vue 3", "FastAPI", "Celery", "MinIO", "PostgreSQL", "Docker Compose", "Nginx"], "alternates": {"html": "https://wpnews.pro/news/how-i-built-a-free-online-image-pdf-processing-platform-with-vue-3-fastapi", "markdown": "https://wpnews.pro/news/how-i-built-a-free-online-image-pdf-processing-platform-with-vue-3-fastapi.md", "text": "https://wpnews.pro/news/how-i-built-a-free-online-image-pdf-processing-platform-with-vue-3-fastapi.txt", "jsonld": "https://wpnews.pro/news/how-i-built-a-free-online-image-pdf-processing-platform-with-vue-3-fastapi.jsonld"}}