<?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: Dina</title>
    <description>The latest articles on DEV Community by Dina (@dynn_f).</description>
    <link>https://dev.to/dynn_f</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3758583%2F078916db-9a86-4daf-98ce-2d594f999059.png</url>
      <title>DEV Community: Dina</title>
      <link>https://dev.to/dynn_f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dynn_f"/>
    <language>en</language>
    <item>
      <title>My first weekend challenge</title>
      <dc:creator>Dina</dc:creator>
      <pubDate>Sun, 12 Jul 2026 20:44:49 +0000</pubDate>
      <link>https://dev.to/dynn_f/my-first-weekend-challenge-i7a</link>
      <guid>https://dev.to/dynn_f/my-first-weekend-challenge-i7a</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dynn_f/i-read-too-much-and-forgot-everything-so-i-built-a-tool-that-turns-my-highlights-into-something-2d5k" class="crayons-story__hidden-navigation-link"&gt;I Read Too Much and Forgot Everything So I Built a Tool That Turns My Annotations Into Something I'll Actually Reread.&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dynn_f" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3758583%2F078916db-9a86-4daf-98ce-2d594f999059.png" alt="dynn_f profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dynn_f" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dina
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dina
                
              
              &lt;div id="story-author-preview-content-4127854" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dynn_f" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3758583%2F078916db-9a86-4daf-98ce-2d594f999059.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dina&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dynn_f/i-read-too-much-and-forgot-everything-so-i-built-a-tool-that-turns-my-highlights-into-something-2d5k" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 12&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dynn_f/i-read-too-much-and-forgot-everything-so-i-built-a-tool-that-turns-my-highlights-into-something-2d5k" id="article-link-4127854"&gt;
          I Read Too Much and Forgot Everything So I Built a Tool That Turns My Annotations Into Something I'll Actually Reread.
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dynn_f/i-read-too-much-and-forgot-everything-so-i-built-a-tool-that-turns-my-highlights-into-something-2d5k" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dynn_f/i-read-too-much-and-forgot-everything-so-i-built-a-tool-that-turns-my-highlights-into-something-2d5k#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>learning</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Read Too Much and Forgot Everything So I Built a Tool That Turns My Annotations Into Something I'll Actually Reread.</title>
      <dc:creator>Dina</dc:creator>
      <pubDate>Sun, 12 Jul 2026 20:42:05 +0000</pubDate>
      <link>https://dev.to/dynn_f/i-read-too-much-and-forgot-everything-so-i-built-a-tool-that-turns-my-highlights-into-something-2d5k</link>
      <guid>https://dev.to/dynn_f/i-read-too-much-and-forgot-everything-so-i-built-a-tool-that-turns-my-highlights-into-something-2d5k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;When school let out for summer, I promised myself I'd finally read everything on my list. And I did — I read constantly, highlighting every sentence that hit me along the way. I'm a chronic highlighter.&lt;/p&gt;

&lt;p&gt;The problem showed up a few weeks in: I had dozens of highlighted documents and no way to use any of it. Highlights scattered across files, buried on pages I'd never revisit. I'd finish a book with fifty things I'd marked as important and a month later couldn't tell you five of them. All that reading, and I was still forgetting everything.&lt;/p&gt;

&lt;p&gt;So I built the tool I actually needed: an app that takes a highlighted PDF or DOCX and pulls every highlight, underline, strikeout, and comment into one clean, structured list — no more re-opening a 300-page file to copy-paste forty highlights by hand.&lt;/p&gt;

&lt;p&gt;From there, it does two things I actually wanted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Organizes by color and type&lt;/strong&gt;, since I already color-code as I read (yellow for definitions, pink for disagreements) — the tool respects that system instead of ignoring it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uses AI to turn scattered highlights into a real summary&lt;/strong&gt; — grouping them into themes and writing connected paragraphs, so a flat list of fragments reads like actual study notes.
It exports wherever that information needs to live next — Markdown, Word, PDF, Anki flashcards — and it's designed to feel like it's &lt;em&gt;about&lt;/em&gt; reading, not about processing files.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/05760ba5cf26425a883e219f43a712d3" rel="noopener noreferrer"&gt;Watch the demo&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/dayniia/Annotation-Extractor" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FGitHub-Annotation--Extractor-181717%3Fstyle%3Dflat%26logo%3Dgithub" alt="GitHub Repo" width="189" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The core challenge was that "highlight" isn't one standard thing — PDF and DOCX store annotations completely differently, so the first real decision was architecture: one shared data model (&lt;code&gt;page/location&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;annotation_type&lt;/code&gt;, &lt;code&gt;text&lt;/code&gt;, &lt;code&gt;note&lt;/code&gt;, &lt;code&gt;timestamp&lt;/code&gt;), with a separate extractor per format that all produce it. Adding a new annotation type or file format later means writing one new module, not touching existing code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Extraction:&lt;/strong&gt; PyMuPDF for PDF (highlights, underlines, strikeouts, and notes are all real annotation subtypes with quad points), &lt;code&gt;python-docx&lt;/code&gt; for DOCX (highlights and comments are unambiguous; underline/strikethrough are just text formatting there, so I made that an opt-in toggle, off by default, rather than silently capturing stylistic formatting as if it were intentional).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Color as a shared vocabulary, not raw RGB:&lt;/strong&gt; DOCX highlight colors are a fixed named enum, so I standardized on color &lt;em&gt;names&lt;/em&gt; across both formats — for PDF, I snap the extracted RGB to the nearest name in the same palette. That gave both formats one consistent color vocabulary I could actually reason about downstream (filtering, AI hints) instead of reconciling two representations later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend/frontend split:&lt;/strong&gt; FastAPI serves both the API and the static frontend from one process (&lt;code&gt;StaticFiles&lt;/code&gt; mount) — same origin, no CORS to configure, no dev/prod mismatch from opening the frontend as a raw file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google AI — Gemini:&lt;/strong&gt; the AI layer takes the extracted highlights and does two things in a single structured-JSON call: clusters them into themes, then writes a connective summary per cluster (not a per-highlight summary — a highlight is already a distillation, re-summarizing it individually just loses the exact wording someone chose to keep). I used &lt;strong&gt;Gemini Flash-Lite&lt;/strong&gt; specifically: it's on the no-cost tier, and clustering short text snippets doesn't need frontier-level reasoning, so it was the right-sized model rather than the biggest one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design:&lt;/strong&gt; I went with an editorial visual style on purpose — serif type for the actual highlighted passages, a colored rule instead of a colored block, everything else quiet — so the tool feels like it's about the &lt;em&gt;books&lt;/em&gt;, not about processing files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Google AI&lt;/strong&gt; — the "Organize with AI" feature uses the Gemini API (Flash-Lite) to cluster extracted highlights into themes and generate a synthesized summary per cluster, turning a flat, page-ordered list of annotations into something that actually reads like study notes. This is a core feature of the app, not an add-on — the whole reason I built the extraction pipeline was to feed it into this step.&lt;/p&gt;

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