<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aytin</title>
    <description>The latest articles on DEV Community by Aytin (@aytin).</description>
    <link>https://dev.to/aytin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1836227%2Fc34e476a-b517-46e4-aacc-20a3ab83159e.png</url>
      <title>DEV Community: Aytin</title>
      <link>https://dev.to/aytin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aytin"/>
    <language>en</language>
    <item>
      <title>Folio-Reading is a Lonely Act. It Doesn't Have to Be</title>
      <dc:creator>Aytin</dc:creator>
      <pubDate>Mon, 02 Mar 2026 07:43:07 +0000</pubDate>
      <link>https://dev.to/aytin/folio-reading-is-a-lonely-act-it-doesnt-have-to-be-1hc3</link>
      <guid>https://dev.to/aytin/folio-reading-is-a-lonely-act-it-doesnt-have-to-be-1hc3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;There is a group chat I open before I open anything else in the morning.&lt;br&gt;


&lt;/p&gt;
&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/CtLg-ZiM-71/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;




&lt;p&gt;It is called Broadening Sensibilities — a book club that began in Pakistan and, somewhere along the way, quietly crossed a border into India. It is made up almost entirely of women. We have argued about Dostoevsky and shared granola recipes in the same breath. We have held each other through heartbreaks and career pivots and the particular exhaustion of being a woman who thinks too much. We have done all of this over WhatsApp threads and voice notes and the occasional chaotic Zoom call where everyone talks at once and nobody minds.&lt;/p&gt;

&lt;p&gt;What we did not have was a place that was ours. A place that understood that we were not just chatting — we were reading together, thinking together, building something together. In a year when the news between our two countries has been loud and unkind, we have been quietly, defiantly, on the same page.&lt;/p&gt;

&lt;p&gt;I built Folio for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Folio is a real-time collaborative reading platform for book clubs. Members join a private club, read the same PDF together in-browser, and leave their marks on it — highlights, quotes, questions, private whispers — right on the page, exactly where the feeling hit.&lt;/p&gt;

&lt;p&gt;They can see each other reading in real time. They can discuss in a Discord-style forum without ever leaving the book. And when the book is done, an AI generates a personalised capsule — a keepsake of everything the club thought, felt, and argued about together.&lt;/p&gt;

&lt;p&gt;It is not a chat app with a reading list attached. It is the first time reading together has actually felt like reading together.&lt;br&gt;
&lt;strong&gt;Features&lt;/strong&gt;&lt;br&gt;
📖 In-Browser PDF Reader&lt;br&gt;
The admin uploads a PDF — the club's book for the month. It renders instantly in the browser using PDF.js with a full text layer, meaning the text is real, selectable, and annotatable. No downloads. No switching apps. You open Folio and the book is already there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr81nmbnxt0ow2ypnea87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr81nmbnxt0ow2ypnea87.png" alt="In-browser PDF Reader"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✍️ Collaborative Annotation System&lt;/strong&gt;&lt;br&gt;
Select any passage and a tooltip appears with five choices: Highlight, Quote, Question, Note, or Whisper. The first four are shared with the entire club — they appear in the annotation panel in real time as other members add them. The fifth — Whisper — is private. Only you can see it. It is for the thoughts you are not ready to share yet, the half-formed feelings you want to sit with before they become a discussion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👥 Live Reading Presence&lt;/strong&gt;&lt;br&gt;
A floating rail on the left side of the reader shows you who else is reading right now, and where. A green pulsing ring around an avatar means they are on the exact same page as you. Numbers like "+3p" or "−7p" show you who is ahead and who is behind. At the bottom, a progress strip maps every member's position across the full length of the book. It is a small thing that changes everything — suddenly you are not reading alone at midnight. Someone else is there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 Annotation Heatmap&lt;/strong&gt;&lt;br&gt;
A vertical strip on the right edge of the reader glows amber and red where annotations cluster. The hotter the page, the more the club had feelings about it. Click any segment to jump there. Before the meeting, this is how you know where the real conversation will be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💬 Discord-Style Forum&lt;/strong&gt;&lt;br&gt;
Five default channels — #general, #chapter-notes, #hot-takes, #spoilers, #next-book — with real-time messaging, emoji reactions, reply threading, and grouped messages. Admins can add channels. Everything updates live via Supabase Realtime subscriptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ AI Discussion Guide&lt;/strong&gt;&lt;br&gt;
Before the monthly meeting, any member can generate a discussion guide. Claude reads every annotation the club has made, every hot take posted in the forum, and every question left on the pages — and synthesises them into a guide built around your club's actual conversations. It surfaces disagreements you did not know you had. It quotes members by name. It builds a meeting agenda with time splits. It is not a generic list of questions from the internet. It is a mirror held up to your club's collective mind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🕸️ Character Relationship Graph&lt;/strong&gt;&lt;br&gt;
An interactive D3 force-directed graph maps the characters in the book — who they are, how they relate to each other, and which ones your club has been talking about most. Nodes glow when a character is central to your annotations. Click a node to filter the annotation panel to only the passages mentioning them. Drag, zoom, and pan freely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📊 AI Pace Coach&lt;/strong&gt;&lt;br&gt;
The admin sets a meeting date. Folio calculates each member's reading pace, compares it to what they need to finish in time, and generates a gentle, warm nudge — the kind a friend would send, not an algorithm. The overview shows who is furthest ahead, who needs a push, and how many days are left. Accountability without shame.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤫 Whisper Mode&lt;/strong&gt;&lt;br&gt;
A private annotation layer woven into the main reading experience. Your whispers appear on the page in a softer, muted colour only you can see. When you are ready to share, one click makes them public. It exists because sometimes you need to think before you speak — and that is true in literature as in life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📜 End-of-Book Capsule&lt;/strong&gt;&lt;br&gt;
When the admin marks a book complete, Claude generates a personalised newspaper-style recap of the club's entire experience with it — each member's most memorable annotation, the most debated passage, the collective verdict, a list of stats (total annotations, most active page, most-used reaction). It is exportable as a PDF. It is the thing you keep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📚 Library &amp;amp; Book Nominations&lt;/strong&gt;&lt;br&gt;
A democratic voting system for the next book — nominate with a title, author, and reason, upvote your favourites. Completed books live in the archive with their capsules intact, readable forever.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;



&lt;p&gt;Link to the project - &lt;a href="https://folio-azure-zeta.vercel.app/" rel="noopener noreferrer"&gt;https://folio-azure-zeta.vercel.app/&lt;/a&gt;&lt;br&gt;
Creds to join a preset bookclub -&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8uhrc9tevtzrlqn4lce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8uhrc9tevtzrlqn4lce.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
ps, the password and the name of the book club are case-sensitive, so look out for that.&lt;/p&gt;

&lt;p&gt;Demo video - 

  &lt;iframe src="https://www.youtube.com/embed/R5qNzAPH7fk"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/nithya6875" rel="noopener noreferrer"&gt;
        nithya6875
      &lt;/a&gt; / &lt;a href="https://github.com/nithya6875/folio" rel="noopener noreferrer"&gt;
        folio
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Folio&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A collaborative book club web app. Read PDFs together, annotate, discuss in real-time, and get AI-powered insights.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Install dependencies&lt;/span&gt;
npm install

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Copy environment file and fill in your credentials&lt;/span&gt;
cp .env.example .env

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Start development server&lt;/span&gt;
npm run dev&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Environment Variables&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Create a &lt;code&gt;.env&lt;/code&gt; file with:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
VITE_ANTHROPIC_API_KEY=your-anthropic-api-key
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Supabase Setup&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Create a new Supabase project&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;schema.sql&lt;/code&gt; in the SQL Editor&lt;/li&gt;
&lt;li&gt;Create a storage bucket named &lt;code&gt;pdfs&lt;/code&gt; (private)&lt;/li&gt;
&lt;li&gt;Enable Realtime on &lt;code&gt;annotations&lt;/code&gt;, &lt;code&gt;messages&lt;/code&gt;, and &lt;code&gt;members&lt;/code&gt; tables&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PDF Reader&lt;/strong&gt;: Upload and read PDFs together with text selection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Annotations&lt;/strong&gt;: Highlight, quote, question, note, and whisper (private)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reading Presence&lt;/strong&gt;: See who's reading nearby pages in real-time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heatmap&lt;/strong&gt;: Visualize annotation density across pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forum&lt;/strong&gt;: Real-time chat with channels, replies, and reactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Library&lt;/strong&gt;: Nominate and vote on next books, view reading history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Insights&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Discussion Guide: AI-generated conversation starters…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/nithya6875/folio" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The honest answer is: I built it the way you build anything for people you love. Quickly, imperfectly, and with complete conviction that it needed to exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Stack&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;React 18 + Vite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Pure CSS — no component library, fully custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDF Rendering&lt;/td&gt;
&lt;td&gt;PDF.js (v3.11.174) with text layer for real selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Supabase (PostgreSQL + Realtime subscriptions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File Storage&lt;/td&gt;
&lt;td&gt;Supabase Storage (PDF uploads)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Anthropic Claude (&lt;code&gt;claude-sonnet-4-20250514&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data Visualisation&lt;/td&gt;
&lt;td&gt;D3.js (force-directed character graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Hard Parts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The annotation system was the first thing I built and the hardest thing to get right. PDFs render onto an HTML &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; element, which is just a bitmap — the text in it is not real text, it is pixels. You cannot select pixels. The solution is PDF.js's text layer: a transparent &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; that sits pixel-perfectly over the canvas, populated with invisible but real DOM text nodes that match the PDF's layout exactly. When you drag to select, you are selecting real text. When you let go, the tooltip appears. It sounds simple. It took longer than I will admit.&lt;/p&gt;

&lt;p&gt;The presence system was the most rewarding to build. Every ten seconds, each member's current page is written to Supabase. Every eight seconds, every other member's position is read back. The floating avatars, the pulsing rings, the proximity labels — all of it emerges from two small database writes happening on a loop. It is the feature that makes people go quiet when they see it working.&lt;/p&gt;

&lt;p&gt;The AI integration is the part I am most proud of. It would have been easy to bolt Claude on as a chatbot in the corner. Instead, every AI feature in Folio is built around the club's own data. The discussion guide quotes your members. The pace coach knows your meeting date. The capsule knows who annotated the most and which page broke everyone's heart. Claude is not a feature. It is the club's memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wanted Folio to feel like the inside of a very good independent bookshop — warm, considered, a little old-fashioned in the best way. Cream backgrounds. Forest green accents. Playfair Display for headings. EB Garamond for body text. No border-radius anywhere — everything is structured, editorial, intentional. No gradients, no glassmorphism, no purple. Just paper and ink and the feeling that something worth reading lives here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This, Why Now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Book clubs are one of the oldest forms of intentional community we have. Women have been gathering around books for centuries — not just to read, but to think out loud in a space that was theirs. Folio is built on the belief that that impulse is not old-fashioned. It is essential. It just needed the technology to catch up.&lt;/p&gt;

&lt;p&gt;Broadening Sensibilities showed me what was possible. A group of women in two countries that the news would have us believe cannot coexist — reading the same books, feeling the same things, finding each other on the same page. Literally.&lt;/p&gt;

&lt;p&gt;That is the community I built this for. That is the problem I wanted to solve. That is the thing I hope Folio holds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The centre of every poem is this: I have loved you. I have had to deal with that.&lt;/em&gt;&lt;br&gt;
— Salma Deera, Letters from Medea&lt;/p&gt;

&lt;p&gt;P.S, the comments are open for feedback&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
