<?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: Sayem Rahman</title>
    <description>The latest articles on DEV Community by Sayem Rahman (@rahmansayem163).</description>
    <link>https://dev.to/rahmansayem163</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%2F4160393%2Fb75203f0-7b2b-4285-9b17-f1db935025c8.png</url>
      <title>DEV Community: Sayem Rahman</title>
      <link>https://dev.to/rahmansayem163</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rahmansayem163"/>
    <language>en</language>
    <item>
      <title>Dadur Ranna (দাদুর রান্না) — Preserving Grandma's Handwritten Recipes with Open-Weight Gemma</title>
      <dc:creator>Sayem Rahman</dc:creator>
      <pubDate>Sun, 04 Oct 2026 16:31:00 +0000</pubDate>
      <link>https://dev.to/rahmansayem163/dadur-ranna-daadur-raannaa-preserving-grandmas-handwritten-recipes-with-open-weight-gemma-1f5h</link>
      <guid>https://dev.to/rahmansayem163/dadur-ranna-daadur-raannaa-preserving-grandmas-handwritten-recipes-with-open-weight-gemma-1f5h</guid>
      <description>&lt;h1&gt;
  
  
  Dadur Ranna (দাদুর রান্না) — Preserving Grandma's Handwritten Recipes with Open-Weight Gemma
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
Targeting the &lt;strong&gt;Best Use of Gemma&lt;/strong&gt; and &lt;strong&gt;Best Use of Render&lt;/strong&gt; featured prize categories.&lt;/p&gt;


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

&lt;p&gt;Every family has a keeper of culinary memory. For my friend &lt;strong&gt;Farzana&lt;/strong&gt;, that person is her grandmother (&lt;strong&gt;দাদু / Dadu&lt;/strong&gt;). For over fifty years, her signature dishes only existed as brittle, yellowing diary pages filled with hurried Bengali cursive, faded ink, and colloquial shorthand like &lt;em&gt;"অন্দাজমতো এক বাটি"&lt;/em&gt; (&lt;em&gt;"an approximate small bowl"&lt;/em&gt;) or &lt;em&gt;"এক চিমটি"&lt;/em&gt; (&lt;em&gt;"a pinch"&lt;/em&gt;). &lt;/p&gt;

&lt;p&gt;Because paper deteriorates and handwriting fades, I built &lt;strong&gt;Dadur Ranna (দাদুর রান্না)&lt;/strong&gt;: an intimate, bilingual family cookbook maker designed to preserve heirloom handwritten recipes before they are lost to time.&lt;/p&gt;
&lt;h3&gt;
  
  
  🌟 Key Highlights &amp;amp; Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;📸 Handwritten Photo &amp;amp; Messy Note Transcription&lt;/strong&gt;: Snap phone photos of handwritten pages or paste rambling mixed Bangla/English notes. Images are compressed and resized client-side via HTML5 Canvas before uploading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚠️ Human-in-the-Loop "Uncertainty" Flags&lt;/strong&gt;: Cooking is chemistry and heritage. If ink is smudged, torn, or colloquial (e.g., &lt;em&gt;"রাধুনি নাকি কালো জিরে স্পষ্ট নয়"&lt;/em&gt;), Gemma never silently guesses. Ambiguous quantities and terms are flagged in &lt;strong&gt;warning yellow&lt;/strong&gt; so family cooks can confirm them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚖️ Fraction-Aware Serving Scaler&lt;/strong&gt;: Real recipes use fractions, not awkward decimals. Dadur Ranna dynamically scales quantities up or down with culinary fractions (&lt;code&gt;½&lt;/code&gt;, &lt;code&gt;¼&lt;/code&gt;, &lt;code&gt;¾&lt;/code&gt;, &lt;code&gt;1½&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌐 Bilingual Toggle&lt;/strong&gt;: Instant toggle between &lt;strong&gt;উভয় (Both / Bilingual)&lt;/strong&gt;, &lt;strong&gt;বাংলা (Bangla)&lt;/strong&gt;, and &lt;strong&gt;English&lt;/strong&gt; for titles, ingredients, and steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📖 Keepsake Print-to-PDF Book&lt;/strong&gt;: Formats a printable family book with &lt;code&gt;@media print&lt;/code&gt;, complete with traditional &lt;strong&gt;Alpana (আলপনা)&lt;/strong&gt; decorative frames, an editable family dedication (&lt;em&gt;"For Dadu, with love"&lt;/em&gt;), a Table of Contents, and one recipe per printed page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔒 100% Client-Side Privacy&lt;/strong&gt;: Zero database required. Recipes live safely in browser &lt;code&gt;localStorage&lt;/code&gt;, with full JSON Export and Import capabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎁 Handing It Over to Farzana
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recipient&lt;/strong&gt;: Built for &lt;strong&gt;Farzana&lt;/strong&gt; and her family to preserve her grandmother's (&lt;strong&gt;Dadu&lt;/strong&gt;) culinary legacy.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Her Reaction&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"This is incredible. I tested it on Dadu's payesh recipe—which was scribbled in messy Banglish across two torn notebook margins with zero proper gram measurements—and it laid out the exact steps cleanly in both Bangla and English. Ammu usually hates tech stuff, but she immediately understood the serving scaler when we needed to cook for eight people instead of four. Having this as a clean, printable PDF dedication to Dadu is priceless."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
— &lt;strong&gt;Farzana (via WhatsApp)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web Application&lt;/strong&gt;: &lt;a href="https://dadurranna.onrender.com/" rel="noopener noreferrer"&gt;https://dadurranna.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Zero-Key Offline Exploration&lt;/strong&gt;: Click &lt;strong&gt;"⚡ ডেমো লোড করুন (Demo)"&lt;/strong&gt; on the live site to load 6 authentic heirloom Bengali recipes (Shorshe Ilish, Aloo Posto, Bhoger Khichuri, Chingri Malai Curry, Notun Gurer Payesh, and Begun Bhaja) with custom vector food art—no API key required!&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&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/SayemR0018" rel="noopener noreferrer"&gt;
        SayemR0018
      &lt;/a&gt; / &lt;a href="https://github.com/SayemR0018/dadurRanna" rel="noopener noreferrer"&gt;
        dadurRanna
      &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;দাদুর রান্না (Dadur Ranna) — Family Cookbook Maker&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/SayemR0018/dadurRanna/main/public/assets/cover.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FSayemR0018%2FdadurRanna%2Fmain%2Fpublic%2Fassets%2Fcover.png" alt="Dadur Ranna Cover"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Dadur Ranna" (দাদুর রান্না)&lt;/strong&gt; is an intimate culinary preservation web app built for one real person: my friend's grandmother, whose irreplaceable culinary legacy exists only as brittle handwritten diary pages, faded envelope scribbles, and rambling, colloquial notes in mixed Bangla and English.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Powered by Google's open-weight &lt;strong&gt;Gemma&lt;/strong&gt; (&lt;code&gt;gemma-3-27b-it&lt;/code&gt; or local Ollama), Dadur Ranna deciphers cursive handwriting and colloquial cooking jargon, extracts structured bilingual recipes, highlights uncertain or faded measurements in yellow for human confirmation, recalculates serving sizes with fractional math (½, ¼), and renders an archival, print-ready keepsake PDF book complete with traditional Alpana decorative borders and a custom family dedication.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌟 Key Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;📸 Photo &amp;amp; Messy Text Transcription&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Upload phone photos of handwritten cookbook pages or paste rambling voice notes / Banglish text. Compressed client-side using HTML5 Canvas before uploading.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;⚠️ Never Silently Guess (Uncertainty Badges)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;If&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SayemR0018/dadurRanna" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/SayemR0018/dadurRanna" rel="noopener noreferrer"&gt;https://github.com/SayemR0018/dadurRanna&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt;: Open Source under the MIT License&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  Architecture &amp;amp; Stack (Featuring Render)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Vanilla HTML5, modern CSS3, and JavaScript with zero heavy build steps. Mobile-first kitchen aesthetic with cream paper textures, warm turmeric/terracotta tones, and Bengali typography via Google Fonts (&lt;code&gt;Noto Sans Bengali&lt;/code&gt; &amp;amp; &lt;code&gt;Noto Serif Bengali&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Node.js 20 + Express with &lt;code&gt;helmet&lt;/code&gt; CSP headers, &lt;code&gt;express-rate-limit&lt;/code&gt; (20 req/min/IP), &lt;code&gt;multer&lt;/code&gt; (in-memory buffer storage with strict 8MB limit), and &lt;code&gt;/healthz&lt;/code&gt; cloud health check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Processing&lt;/strong&gt;: Client-side &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt; compression ensures fast, lightweight uploads even on mobile networks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting on Render&lt;/strong&gt;: Deployed on &lt;strong&gt;Render&lt;/strong&gt; as a web service using an Infrastructure-as-Code Blueprint (&lt;code&gt;render.yaml&lt;/code&gt;) that specifies Node runtime, build/start commands, environment variable sync flags, and zero-downtime healthcheck monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Open-Weight AI Pipeline (Featuring Gemma)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Google AI Studio Gemma Integration&lt;/strong&gt;: Communicates with &lt;strong&gt;Gemma 3 27B&lt;/strong&gt; (&lt;code&gt;gemma-3-27b-it&lt;/code&gt;) via Google AI Studio's &lt;code&gt;generateContent&lt;/code&gt; API, passing images as &lt;code&gt;inline_data&lt;/code&gt; base64 payloads alongside a prompt engineered for Bengali culinary transcription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict Zod Validation &amp;amp; Repair Loop&lt;/strong&gt;: Because open models may occasionally wrap JSON in markdown fences or omit brackets, the backend runs an automated cleaning function (&lt;code&gt;extractAndCleanJson&lt;/code&gt;), validates schema conformance via &lt;strong&gt;Zod&lt;/strong&gt;, and executes an automatic repair-and-retry loop (up to 2 retries) if structure errors occur.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Ollama Abstraction (Zero Code Change)&lt;/strong&gt;: Setting &lt;code&gt;LLM_PROVIDER=openai_compat&lt;/code&gt; and &lt;code&gt;LLM_MODEL=gemma3:27b&lt;/code&gt; redirects the app to a local Ollama instance (&lt;code&gt;http://localhost:11434/v1&lt;/code&gt;), enabling 100% offline transcription.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;When we think about preserving cultural heritage, we often picture ancient manuscripts in museum vaults. But the most fragile heritage lives right on our kitchen shelves—a grandmother's notebook with mustard oil stains, loose envelope corners, and informal notes like &lt;em&gt;"এক চিমটি মিষ্টি"&lt;/em&gt; (&lt;em&gt;"a pinch of sugar"&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Building Dadur Ranna with open-weight Gemma demonstrates why open innovation is indispensable:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Absolute Privacy for Intimate Memories&lt;/strong&gt;: Handwritten notebooks frequently contain personal family names, private phone numbers in the margins, and intimate letters. With open-weight models running locally via Ollama, families never have to upload photos of their loved ones' personal handwriting to closed third-party corporate servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Freedom from Walled Gardens&lt;/strong&gt;: Family recipes belong to families, not to proprietary cloud vendors who might change pricing models, deprecate endpoints, or lock memories behind monthly subscriptions. Because Gemma is open-weight, this entire application can run on a laptop in an offline rural village with Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable Architecture&lt;/strong&gt;: Switching from cloud Gemma to an offline local model requires nothing more than changing an environment variable (&lt;code&gt;LLM_PROVIDER=openai_compat&lt;/code&gt;, &lt;code&gt;LLM_MODEL=gemma3:27b&lt;/code&gt;). No code rewrites or proprietary SDK locks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cost and Long-Term Longevity&lt;/strong&gt;: Open innovation guarantees that this digital cookbook archiver will still run 10, 20, or 50 years from now. As long as a family has a computer and open software, Dadu's culinary legacy will remain forever preserved.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I planned, built, tested, and verified Dadur Ranna collaboratively with Antigravity. You can explore the full interactive agent session transcript:&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Gemini CLI"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Building Dadur Ranna: Family Cookbook Maker with Open-Weight Gemma&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Build, test, and make deploy-ready on Render a complete web app called 'Dadur Ranna' (দাদুর রান্না): a family cookbook maker for one real person, my friend's grandmother, whose recipes exist as handwritten pages and rambling Bangla/English notes. Backend sends it to Gemma and gets back a structured recipe with uncertainty highlights, fraction-aware serving scaler, bilingual toggle, local storage, and print-to-PDF keepsake book.&lt;/p&gt;

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

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Architected and built Dadur Ranna with Node.js/Express, Gemma 3 27B via Google AI Studio API and local Ollama abstraction, Zod schema validation with repair/retry, client-side canvas image compression, fraction-aware scaler (½, ¼), and print-ready CSS layout with Alpana frames. Handcrafted SVG illustrations for 6 authentic Bengali heirloom dishes, generated social cover assets, and pushed cleanly to GitHub.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-runcommand"&gt;run_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;npm test&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ npm test&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;12/12 passing tests across schema validation, prompt parsing, offline mock fallback, and server endpoints.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Install DevRelay and verify the MCP gateway and agent skills for Hacktoberfest challenge preparation.&lt;/p&gt;

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

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Installed DevRelay 0.1.17, configured the devrelay-gateway MCP entry pointing to dev_mlh_mcp_server.exe with --stdio in Antigravity mcp_config.json, verified 9 agent skills, and connected MLH/DEV authentication.&lt;/p&gt;

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

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        4 of 4 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;🔗 &lt;strong&gt;Interactive Session Transcript&lt;/strong&gt;: &lt;a href="https://dev.to/agent_sessions/building-dadur-ranna-family-cookbook-maker-with-open-weight-gemma-pgt3h7"&gt;View on DEV&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Gemma 3 27B does the core work of reading handwritten Bangla/English recipes, flagging uncertain items, and keeping the grandmother's tips verbatim.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; Deployed as a Render Blueprint (&lt;code&gt;render.yaml&lt;/code&gt;) with a health check on the free plan.&lt;/li&gt;
&lt;/ul&gt;

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