Back to portfolio
Case Study

Building Waraq

A full-stack reading and document management platform built to make long-term reading easier to organize and track.

Next.jsTypeScriptSupabasePostgreSQL

The Problem

Long-form reading material — PDFs, papers, articles — tends to pile up across devices and folders with no consistent way to track what's been read, who wrote it, or where you left off. Waraq exists to give that material a proper home.

The Idea

Instead of another generic file manager, Waraq is built specifically around reading: documents are linked to their authors, access is controlled per user, and progress is tracked as you go — so the platform understands documents as things to be read, not just files to be stored.

Architecture

Waraq is a Next.js application with Supabase handling authentication and file storage, and PostgreSQL as the underlying database.

1
Next.js
2
Supabase Auth
3
PostgreSQL
4
Supabase Storage
5
Application features

What I Built

Authentication & role-based access

Access control built on Supabase Auth, so who can see or edit what is enforced close to the data.

Document management

PDF upload, storage, and automatic cover extraction for uploaded documents.

Multi-author linking

A document can be linked to more than one author without duplicating records.

Reading progress tracking

Keeps track of where a reader left off across their documents.

Engineering Challenges

  • Modeling roles and permissions with Supabase Auth and Row Level Security, so access control lives close to the data instead of being scattered across the app.
  • Handling PDF uploads reliably and generating cover previews from uploaded files.
  • Designing a schema that lets a single document link to multiple authors without duplicating data.
  • Tracking reading progress per user, per document, without adding friction to the reading experience.

What I Learned

  • How much of a full-stack product gets decided in the data model, long before a single UI component gets built.
  • The value of getting authentication and permissions right early, since almost every other feature ends up building on top of it.
  • That file handling — uploads, storage, previews — has more edge cases than it looks like from the outside.

What I'd Improve

  • Add more automated test coverage around the upload and permissions logic.
  • Document the schema and Row Level Security policies more thoroughly, for my own future reference.
  • Revisit the reading-progress data model as the feature set grows.

I built this, I learned from it, and I know what I'd improve — that's the point.