All work
FDSaaS · Document ToolsFull-Stack PlatformsCase study

FilesMint — Document Conversion SaaS

Gives everyday PDF and image jobs a paid, quota-backed home where file bytes never touch the API.

A PDF and image toolkit — merge, split, convert, compress, watermark and protect — built as a job queue where file bytes never pass through the API, with Stripe billing, per-plan quotas and a statically-rendered page per tool for SEO.

Live siteSource private
FilesMint — Document Conversion SaaS interface
Industry
Consumer SaaS / Productivity
Role
Architect & Full-Stack Engineer
Type
SaaS Platform
Year
2025
Status
Delivered
13
Tools
21 passing
Backend Tests
Job queue
Architecture

Overview

FilesMint is a document-conversion SaaS with 13 tools across organize, convert, optimize and secure. The architecture follows one principle: file bytes never flow through the API. The browser gets presigned upload URLs, puts files directly into object storage, and the API only ever moves small JSON — enqueueing a Celery job that the worker picks up.

That constraint keeps the API cheap and horizontally scalable regardless of file size, and it is what makes the free tier viable. Anonymous users are rate-limited per IP through Redis; signed-in users get daily quotas per plan tracked in Postgres, with Stripe handling the Pro subscription and webhooks mirroring subscription state back into the database.

Compression is deliberately Ghostscript-free — pikepdf and Pillow instead — so the whole stack stays license-safe for commercial use.

The problem

Document-conversion sites either push every uploaded file through their API — which makes cost scale with file size and blocks the request thread — or they run conversions with Ghostscript, whose licensing is a problem for a commercial product.

The solution

A job queue with a web front end. The browser uploads straight to object storage via presigned URLs, the API enqueues a small JSON job, and Celery workers do the conversion. Compression is implemented on pikepdf and Pillow so no Ghostscript licence is involved.

Technical stack

Frontend

  • Next.js
  • Tailwind CSS

Backend

  • FastAPI
  • Python
  • Celery

Data

  • Redis
  • PostgreSQL

Infrastructure

  • pikepdf

Also used

  • Supabase
  • Stripe
  • Gotenberg

System architecture

  1. 1

    Next.js App Router front end with a statically-rendered page per tool for SEO

  2. 2

    FastAPI service issuing presigned upload URLs and enqueueing jobs — never handling file bytes

  3. 3

    Celery workers on a Redis broker running the conversion engines

  4. 4

    Supabase Postgres for users, jobs, billing and usage; Supabase Auth for magic-link sign-in

  5. 5

    Stripe checkout, customer portal and webhooks mirroring subscription state into the database

  6. 6

    Two-tier rate limiting — per-user daily quotas in Postgres, per-IP limits in Redis for anonymous users

Engineering challenges

Challenge

Letting anonymous users convert files for free invites abuse, but forcing sign-up before the first conversion kills the funnel.

How I solved it

Split rate limiting by identity: anonymous traffic is limited per IP through Redis, signed-in users get daily quotas per plan tracked in Postgres. The free tier stays genuinely usable without an account while the abuse ceiling stays low.

Challenge

PDF compression conventionally means Ghostscript, whose licence terms are unworkable for a commercial SaaS.

How I solved it

Rebuilt compression on pikepdf and Pillow — image downsampling plus object-stream optimization — keeping the entire toolchain license-safe at the cost of writing the size/quality trade-off logic directly.

Core features

  • 13 tools across organize, convert, optimize and secure
  • Presigned direct-to-storage uploads — no file bytes through the API
  • Celery job queue on a Redis broker
  • Supabase magic-link authentication
  • Stripe subscriptions with checkout, portal and webhook mirroring
  • Per-plan daily quotas in Postgres, per-IP limits in Redis for anonymous use
  • Account dashboard with usage bar and re-downloadable history
  • A statically-rendered landing page per tool for SEO
  • JSON-LD structured data, per-tool OG images, sitemap and manifest
  • License-safe compression — pikepdf and Pillow, no Ghostscript

Results & impact

A conversion SaaS where infrastructure cost is decoupled from file size, the free tier works without an account, and every tool has its own crawlable landing page with structured data — backed by 21 passing backend unit tests.

Screenshots

FilesMint — Document Conversion SaaS screenshot 1
FilesMint — Document Conversion SaaS screenshot 2
FilesMint — Document Conversion SaaS screenshot 3
FilesMint — Document Conversion SaaS screenshot 4

What I learned

  • Deciding early that "file bytes never touch the API" removes an entire class of scaling and timeout problems later.
  • Licence terms are an architectural constraint: checking them before picking an engine is cheaper than replacing it after launch.

Related work

All projects
Next step

Have a system like this to build?

I take projects from the first conversation through to production, and stay on for the support that follows.