SO — Sherlyn Olalo

Sherlyn Olalo

SummaPDF

A local-first PDF summarization tool built with FastAPI and Hugging Face Transformers. Upload a PDF, select summary length, and get instant results with copy and download options. No accounts, no file uploads to servers—everything runs on your machine.

RoleFull Stack Developer
Year2025
ClientPersonal Project
Stack
FastAPI/HTMX/Jinja2/Tailwind CSS/pypdf/Hugging Face Transformers/PyTorch
01

The problem.

I kept opening long PDFs just to find one or two useful paragraphs. Most online summarizers ask for an account or want full access to your file, which felt like too much for a quick task. I wanted something I could run on my own laptop, point at any PDF, and get a clean summary back.

02

What I built.

A small web app that does one thing well. You drop in a PDF, pick a length (Brief, Balanced, or Detailed), and get a summary card with stats, plus copy and download buttons. FastAPI handles the upload, pypdf pulls out the text, and a Hugging Face model writes the summary. HTMX swaps the result into the page, so there's no reload and no blank screen while you wait. The button just shows a loading state, then the card appears.

Local-first PDF summarization — Brief / Balanced / Detailed lengths, with copy + download

I first built it in Streamlit because it was fastest. Once I knew the idea worked, I rebuilt it in FastAPI so it could feel like a real app instead of a dashboard.

Key decisions

HTMX for AI UX — Streaming results without page reloads feels snappier than traditional form submissions, and no React needed

Local-first design — Everything runs on your machine; no servers, no accounts, no privacy concerns

Progressive refinement — Started in Streamlit to validate the idea, then rebuilt in FastAPI once I knew it worked, turning a prototype into a polished tool

03

What I learned.

Two things stuck with me. First, HTMX is great for AI tools. Most of the flow is "send something, wait, show the result," and you don't need a full React setup for that. Skipping it saved me days. Second, the model was the easy part. The tricky bits were small ones—like chunking text without cutting sentences in odd places, handling scanned PDFs that have no real text, and tuning the lengths so "Brief" actually feels brief. The boring work is what makes tools feel polished.