DEV Community

Akash Goyal
Akash Goyal

Posted on

Why I Built PaperFlakes (And How Zerops Saved the Stack)

Late one night while preparing slides for an upcoming talk, I ran three dense research papers through a standard OCR tool.

The OCR worked, but left me with 40 pages of raw, unformatted text. The real problem wasn't extracting the text; it was finding the insight buried inside it.

I wanted something that could turn dense PDFs into small, visual insights - bite-sized cards ready for slides, developer notes, or Twitter.

That was the spark for PaperFlakes.


PaperFlakes takes PDFs - pick from a curated list of classic ML papers or upload your own - OCRs them, and turns the extracted text into shareable "sticky note" insight cards across four categories, which you can filter, download as images, or share straight to X /Twitter.


Features for Users

I set out to build a platform that turns dense academic reading into a fast, visual experience:

  1. Batch Processing: Drop up to 25 multi-page PDFs.
  2. Real-Time Progress: Watch live updates as the engine parses document queues, tracking statuses, page counts, and extracted word tallies.
  3. "Did You Know?" Fact Cards: Color-coded visual cards highlighting key facts, formulas, and takeaways.
  4. Instant Export & Sharing: Download cards or share them straight to social media.


How to use it

  1. Open the live app.
  2. Check one or more papers under "Try it on papers" and click Process batch.
  3. Watch the Processing status table update as each document is OCR'd.
  4. Insight cards appear in the Insights panel as soon as each category finishes — no need to wait for the whole batch.
  5. Use the category chips and paper dropdown above the panel to filter what's shown.
  6. On any card: Save downloads it as a PNG
  7. On any card: 𝕏 Share opens a pre-filled tweet.
  8. Download all (top right) exports every currently-visible card as one combined image.

The UI view:
The product view

The social media share view: Link to generated tweet
Share card on X


Product Walkthrough :

How it works

The application follows a simple three-stage flow:

  1. Upload & Queue (left) - Users select multiple PDFs or upload their own documents and start a batch.
  2. Process & Track (center) - Each document is processed asynchronously, with its status, page count, and processing details visible in real time.
  3. Generate Insights (right) - As soon as a document finishes processing, AI-generated facts and insights appear as shareable sticky-note cards.

The Engineering & Zerops ZCP

Behind the UI, the backend handles the pipeline:
PDF ingestion → metadata storage → chunking & OCR → AI-powered insight extraction → result storage → fact-card generation.

This keeps the user experience simple while the heavy document processing happens asynchronously in the backend.

Zerops hosting flow

Project architecture

The zerops.yaml is shared here .

When a user submits a batch, the Express API registers the job inside PostgreSQL with a queued status and returns an instant job token to the React UI. As workers process pages through Gemma (Together AI) asynchronously, the database updates in real time, and the UI streams progress smoothly without dropping connections.


This whole project is heavily reliant on Zerops infra & built using the ZCP.

  1. Runtime service
  2. Managed PostgreSQL
  3. Public HTTPS — zerops.app subdomain after deployment.
  4. Secrets — TOGETHER_API_KEY is stored as a Zerops service secret.
  5. Health checks
  6. Git-based deployment — deploys the latest commit to Zerops using zcli.
  7. ZCP with Claude Code

Running your own copy

The repository is self-contained: zerops.yaml defines the deployment configuration, while migrate.py initializes the database schema idempotently on each deploy.

  1. Create a Zerops project with a Python runtime service and a PostgreSQL service named db.
  2. Create a Together AI API key and add it as the TOGETHER_API_KEY secret on the runtime service.
  3. Configure ZEROPS_TOKEN and ZEROPS_SERVICE_ID as GitHub repository secrets.
  4. Push to main. The included GitHub Actions workflow builds and deploys the application automatically.

You can also deploy manually using zcli push or the Zerops MCP tools.


You can see the zerops-services in action & associated cost with them (left-bottom)


By offloading setup headaches to Zerops, I was able to go from an initial draft idea to a production-ready, multi-service application in a single hackathon build window.

Demo Video : https://youtu.be/5ra5lgwRpeQ
Github : https://github.com/akashgoyal/paperflakes-zerops
Live App : https://app-2c11-8000.prg1.zerops.app/
Built For : https://www.wemakedevs.org/hackathons/zerops


Written by : Akash Goyal

Top comments (0)