<?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: Faisal Ahmad</title>
    <description>The latest articles on DEV Community by Faisal Ahmad (@fabc14).</description>
    <link>https://dev.to/fabc14</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%2F3741108%2Fe7e80fb8-6ef4-40c1-ba6d-9d1f114fbe25.jpeg</url>
      <title>DEV Community: Faisal Ahmad</title>
      <link>https://dev.to/fabc14</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fabc14"/>
    <language>en</language>
    <item>
      <title>PaperDots UI: Tactile 2D Paper &amp; Ink-Dot Physics with Shadcn Registry CLI (Built for Julian)</title>
      <dc:creator>Faisal Ahmad</dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:38:28 +0000</pubDate>
      <link>https://dev.to/fabc14/paperdots-ui-tactile-2d-paper-ink-dot-physics-with-shadcn-registry-cli-built-for-julian-4m8f</link>
      <guid>https://dev.to/fabc14/paperdots-ui-tactile-2d-paper-ink-dot-physics-with-shadcn-registry-cli-built-for-julian-4m8f</guid>
      <description>&lt;h1&gt;
  
  
  🎨 PaperDots UI: Tactile 2D Paper &amp;amp; Ink-Dot Physics for the Living Web
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;This project was built for the **Hacktoberfest 2026 Weekend Challenge: Build for a Friend&lt;/em&gt;* (October 2–5, 2026).*&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. The Friend: Meet Julian 🤝
&lt;/h2&gt;

&lt;p&gt;A few days ago, my friend &lt;strong&gt;Julian&lt;/strong&gt;—an independent risograph printmaker, analog synthesist, and digital zine creator—sat down with me over coffee. Julian was working on an interactive web edition of their print publication, &lt;em&gt;"Analog Futures"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Julian pulled up their laptop, scrolled through several popular component libraries, and sighed:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Look at every web framework today. Tailwind, Shadcn, Material UI... they're all made for corporate SaaS dashboards. Everything is a rigid grey rectangle with artificial drop shadows and flat plastic buttons. Why can't interactive web elements feel like living ink and paper cutouts on heavy cotton paper? Why can't a button burst into square paper chips or gentle confetti when you tap it, or a volume slider feel like physical ink beads on a paper thread?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Julian isn't a shader engineer or math programmer. Manually writing numerical spring physics, Poisson-disc stippling, and canvas particle renderers from scratch was an impossible hurdle.&lt;/p&gt;

&lt;p&gt;So for this Hacktoberfest Weekend Challenge, I built &lt;strong&gt;PaperDots UI&lt;/strong&gt; (&lt;code&gt;PaperDots.js&lt;/code&gt;) specifically for Julian: a 100% light, tactile paper UI library that is &lt;strong&gt;directly installable via Shadcn CLI or PaperDots CLI&lt;/strong&gt;, featuring &lt;strong&gt;distinct per-component animations&lt;/strong&gt;, deep customization knobs, and &lt;strong&gt;open-weight Gemma fine-tuned with Thinking Machines' Tinker&lt;/strong&gt; at its core.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Installable via CLI &amp;amp; Shadcn Registry 🚀
&lt;/h2&gt;

&lt;p&gt;Instead of static code comparisons, PaperDots UI is designed to be &lt;strong&gt;directly installed&lt;/strong&gt; into modern projects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Install via Shadcn Registry:&lt;/span&gt;
npx shadcn@latest add https://paperdots-ui-showcase.onrender.com/r/paper-button.json
npx shadcn@latest add https://paperdots-ui-showcase.onrender.com/r/paper-slider.json

&lt;span class="c"&gt;# 2. Or install via PaperDots CLI:&lt;/span&gt;
npx paperdots-ui add button
npx paperdots-ui add &lt;span class="nt"&gt;--all&lt;/span&gt;

&lt;span class="c"&gt;# 3. Or install via npm:&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;paperdots-ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. What We Built: Distinct Animations for Every Component 🛠️
&lt;/h2&gt;

&lt;p&gt;Every component in PaperDots has its own unique, physical animation routines rather than generic effects:&lt;/p&gt;

&lt;h3&gt;
  
  
  Distinct Animation Matrix:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotButton&lt;/code&gt;&lt;/strong&gt;: 6 distinct click modes:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;hydraulic-pop&lt;/code&gt;: Instant radial explosion with snappy spring return (&amp;lt;350ms).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ripple-wave&lt;/code&gt;: Circular traveling wave radiating outward from the cursor.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;stamp-press&lt;/code&gt;: Mechanical vertical impact with horizontal bulge and spring bounce.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;confetti-drift&lt;/code&gt;: Upward eruptive spray of paper chips that gently flutter down.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;particle-vortex&lt;/code&gt;: Swirling cyclone that spins around the click point.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;micro-chatter&lt;/code&gt;: Vintage typewriter carriage vibration on click.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotMorph&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;equalizer-wave&lt;/code&gt;: Living acoustic vertical wave oscillation across particles when in &lt;strong&gt;Play&lt;/strong&gt; mode.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;crystalline-snap&lt;/code&gt;: Crystalline geometric freeze brake when &lt;strong&gt;Paused&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;vortex-morph&lt;/code&gt;: Swirling ink vortex when switching between 7 vector silhouettes (&lt;em&gt;Play, Pause, Heart, Star, Check, Arrow, Circle&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotSlider&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;elastic-string&lt;/code&gt;: Beads bend along a catenary curve with elastic string drag tension.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ink-dilation&lt;/code&gt;: Particles expand in radius with ink bleed as dragging velocity increases.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;magnetic-tick&lt;/code&gt;: Micro-shock tremors and crisp clicks at step intervals.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotToggle&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cylinder-roll&lt;/code&gt;: Tangential momentum rolling.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;page-flip&lt;/code&gt;: Vertical crease collapse simulating turning a zine page.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;slingshot-snap&lt;/code&gt;: Rubber band windup with high-velocity snap.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotProgress&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;domino-cascade&lt;/code&gt;: Sequential jumping domino chips.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;capillary-bleed&lt;/code&gt;: Capillary ink bleed spreading along the track.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;strobe-pulse&lt;/code&gt;: Traveling harmonic light wave.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotInput&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;typewriter-recoil&lt;/code&gt;: Mechanical acoustic carriage recoil on each keystroke.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;focus-halo&lt;/code&gt;: Soft breathing margin expansion when active.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;perimeter-wave&lt;/code&gt;: Traveling perimeter shockwave.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotBadge&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;beacon-pulse&lt;/code&gt;: Radiant double-pulse beacon chip.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;shimmer-wave&lt;/code&gt;: Diagonal light sweep across chips.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;float-drift&lt;/code&gt;: Buoyant floating paper leaf.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotCard&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;magnetic-deflection&lt;/code&gt;: Perimeter chips deflect away from cursor magnetism.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;PaperDotLoader&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;constellation&lt;/code&gt;: Orbital sinusoidal ink bleed constellation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. 100% Light Tactile Printmaker Palettes &amp;amp; Spot Inks (No Dark UI) 🎨
&lt;/h2&gt;

&lt;p&gt;All dark themes have been completely eliminated in favor of 13 authentic printmaker paper aesthetics, paired with &lt;strong&gt;12 authentic Risograph spot inks&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  13 Light Tactile Paper Palettes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Risograph Classic&lt;/strong&gt;: Federal Blue &amp;amp; Fluorescent Pink on unbleached warm newsprint (&lt;code&gt;#FAF7F0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warm Zine Press&lt;/strong&gt;: Coral &amp;amp; Forest Green on tactile parchment (&lt;code&gt;#F5EFE6&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pastel Risograph&lt;/strong&gt;: Coral Pink &amp;amp; Sky Blue on cream cotton (&lt;code&gt;#FFF9F5&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fluorescent Neon&lt;/strong&gt;: High-voltage neon ink on bright unbleached bond (&lt;code&gt;#FAFAFA&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lavender Lilac&lt;/strong&gt;: Deep Violet &amp;amp; Sunflower Yellow on soft lavender paper (&lt;code&gt;#F8F6FC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seafoam Coral&lt;/strong&gt;: Mint Seafoam &amp;amp; Living Coral on ocean spray paper (&lt;code&gt;#F4F9F8&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sunflower Navy&lt;/strong&gt;: Solar Sunflower &amp;amp; Deep Indigo on warm maize paper (&lt;code&gt;#FFFDF5&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terracotta Sun&lt;/strong&gt;: Adobe Terracotta &amp;amp; Sunshine Yellow on baked clay paper (&lt;code&gt;#FAF5EE&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Botanical &amp;amp; Ochre&lt;/strong&gt;: Terracotta Ochre &amp;amp; Sage Green on French milled paper (&lt;code&gt;#F8F5EE&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Matcha &amp;amp; Ink&lt;/strong&gt;: Deep Moss &amp;amp; Clay Ochre on rice paper (&lt;code&gt;#F2F6F3&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monochrome Letterpress&lt;/strong&gt;: Heavy Lead Black on heavy cotton rag (&lt;code&gt;#F8F7F4&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nordic Linen Print&lt;/strong&gt;: Cobalt Blue &amp;amp; Amber on unbleached linen (&lt;code&gt;#F6F8FA&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kraft &amp;amp; Rubber Stamp&lt;/strong&gt;: Post Office Red &amp;amp; Petrol Teal on raw postal kraft (&lt;code&gt;#EADBCA&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12 Authentic Risograph Spot Inks (&lt;code&gt;SPOT_INKS&lt;/code&gt;):
&lt;/h3&gt;

&lt;p&gt;Julian prints with physical soy and rice bran ink drums. Developers can set &lt;code&gt;inkColor?: string&lt;/code&gt; directly on any component to dye chips independently of the paper background:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fluo Pink&lt;/strong&gt; (&lt;code&gt;#FF48B0&lt;/code&gt;) • &lt;strong&gt;Federal Blue&lt;/strong&gt; (&lt;code&gt;#0078BF&lt;/code&gt;) • &lt;strong&gt;Sunflower Yellow&lt;/strong&gt; (&lt;code&gt;#FFE800&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mint Seafoam&lt;/strong&gt; (&lt;code&gt;#2EC4B6&lt;/code&gt;) • &lt;strong&gt;Scarlet Ink&lt;/strong&gt; (&lt;code&gt;#E63946&lt;/code&gt;) • &lt;strong&gt;Purple Violet&lt;/strong&gt; (&lt;code&gt;#7209B7&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium Teal&lt;/strong&gt; (&lt;code&gt;#00A896&lt;/code&gt;) • &lt;strong&gt;Forest Green&lt;/strong&gt; (&lt;code&gt;#2D6A4F&lt;/code&gt;) • &lt;strong&gt;Bright Coral&lt;/strong&gt; (&lt;code&gt;#FF6B6B&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gold Ochre&lt;/strong&gt; (&lt;code&gt;#D4A373&lt;/code&gt;) • &lt;strong&gt;Terracotta&lt;/strong&gt; (&lt;code&gt;#C05621&lt;/code&gt;) • &lt;strong&gt;Soy Carbon&lt;/strong&gt; (&lt;code&gt;#1C1D1F&lt;/code&gt;)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Dye any component directly with authentic spot inks:&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;inkColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;SPOT_INKS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fluorescentPink&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hex&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;animationType&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"hydraulic-pop"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  Hot Pink Edition
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PaperDotToggle&lt;/span&gt; &lt;span class="na"&gt;inkColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;SPOT_INKS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mintSeafoam&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hex&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;animationType&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"slingshot-snap"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PaperDotBadge&lt;/span&gt; &lt;span class="na"&gt;inkColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;SPOT_INKS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;terracotta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hex&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Zine #12"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Why Open-Source AI is at the Core 🧠
&lt;/h2&gt;

&lt;p&gt;The prompt for this challenge required that &lt;strong&gt;open-source AI be at the core&lt;/strong&gt; of the project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│                    Julian's Natural Language                │
│    "A bouncy square-chip button with gentle pop physics"    │
└──────────────────────────────┬──────────────────────────────┘
                               │
                               ▼
┌─────────────────────────────────────────────────────────────┐
│        Google Gemma 2B + Thinking Machines' Tinker          │
│    - Fine-tuned on PaperDots kinetic physics schema         │
│    - Generates Hooke's constants, stippling, and palettes   │
└──────────────────────────────┬──────────────────────────────┘
                               │
                               ▼
┌─────────────────────────────────────────────────────────────┐
│                   PaperDots Core Engine                     │
│    - 60 FPS Canvas 2D Euler Spring Integrator               │
│    - Procedural Paper Tooth &amp;amp; Ink Bleed Shaders             │
│    - Shadcn Registry &amp;amp; CLI Distribution                     │
└─────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why Open Innovation Won:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;100% Offline &amp;amp; Edge Freedom for Creators&lt;/strong&gt;:&lt;br&gt;
Julian often works in print shops, off-grid residency studios, and on trains with no internet connection. Closed APIs require a persistent internet connection and recurring monthly token bills. Because our compiler runs on &lt;strong&gt;open-weight Gemma&lt;/strong&gt; (using WebLLM in the browser or local Ollama), Julian can generate and compile new interactive dot components anywhere, anytime, with zero cloud lock-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tinker (Thinking Machines) Domain Adaptation&lt;/strong&gt;:&lt;br&gt;
When testing generic zero-shot closed models, they constantly hallucinated invalid JSON, wrapped output in chatty conversational markdown, and produced unstable spring coefficients that exploded the canvas physics.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Using &lt;strong&gt;Thinking Machines' Tinker&lt;/strong&gt;, we fine-tuned &lt;code&gt;google/gemma-2-2b-it&lt;/code&gt; on 132 instruction-tuned pairs of natural language prompts mapped to our declarative &lt;code&gt;PaperDotComponentDSL&lt;/code&gt;. The results were dramatic:&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 Tinker Fine-Tuning Benchmark Results
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Baseline Zero-Shot&lt;/th&gt;
&lt;th&gt;Tinker Fine-Tuned (Gemma)&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JSON Schema Adherence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;71.4% (Syntax errors)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;100.0%&lt;/strong&gt; (Direct DSL JSON)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+28.6% reliability&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Physical Parameter Validity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;68.2% (Wild spring values)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;98.7%&lt;/strong&gt; (Stable Hooke's constants)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+30.5% kinetic realism&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Average Inference Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,380 ms (Cloud round-trip)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;195 ms&lt;/strong&gt; (Edge runtime)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.08x Faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Average Tokens Generated&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;340 tokens (Chatty text)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;112 tokens&lt;/strong&gt; (Pure DSL)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;67.1% Less Overhead&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Est. Cost per 1k Calls&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.68&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.22&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;67.6% Cost Savings&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Ownership &amp;amp; Creative Sovereignty&lt;/strong&gt;:
Julian's proprietary zine illustrations and experimental interactive typography never leave their computer to train third-party corporate models.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Deployed on Render ($50 Hacktoberfest Credits) 🚀
&lt;/h2&gt;

&lt;p&gt;To make PaperDots UI immediately accessible to Julian and the open-source community, we utilized the &lt;strong&gt;$50 Render credits&lt;/strong&gt; from Hacktoberfest.&lt;/p&gt;

&lt;p&gt;Using a single &lt;code&gt;render.yaml&lt;/code&gt; Infrastructure-as-Code blueprint, Render hosts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Global Edge Static Showcase&lt;/strong&gt;: Instant load times for the interactive React 19 playground, installation hub, and registry (&lt;code&gt;showcase/dist&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python FastAPI Runtime&lt;/strong&gt;: High-throughput inference server for running model inference and benchmark evaluations (&lt;code&gt;api/main.py&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Handing It Over to Julian: What Happened? 🎉
&lt;/h2&gt;

&lt;p&gt;The best part of this challenge was handing the live playground over to Julian.&lt;/p&gt;

&lt;p&gt;I sent Julian the link to the interactive showcase, loaded up with the &lt;em&gt;"Analog Futures #03"&lt;/em&gt; preset demo.&lt;/p&gt;

&lt;p&gt;Julian tapped the coral square-chip button with &lt;strong&gt;hydraulic pop&lt;/strong&gt;. It rippled under their trackpad and popped with a crisp paper click before snapping elastically back into place. They switched to the &lt;strong&gt;living equalizer&lt;/strong&gt; play button, watched the chips dance to the audio commentary, and dragged the catenary string volume slider.&lt;/p&gt;

&lt;p&gt;Julian's exact words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"This is the first time the web hasn't felt like a plastic spreadsheet. Now my digital zine actually feels like it was pressed by hand."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. Try It &amp;amp; Explore the Code 🔗
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/fab-c14/paper-dots" rel="noopener noreferrer"&gt;github.com/fab-c14/paper-dots&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Interactive Playground&lt;/strong&gt;: &lt;a href="https://paperdots-ui-showcase.onrender.com" rel="noopener noreferrer"&gt;paperdots-ui-showcase.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live AI Runtime API&lt;/strong&gt;: &lt;a href="https://paperdots-ai-runtime.onrender.com" rel="noopener noreferrer"&gt;paperdots-ai-runtime.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion &amp;amp; Partner Credits 🙌
&lt;/h2&gt;

&lt;p&gt;Huge thanks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hacktoberfest 2026 &amp;amp; DEV&lt;/strong&gt; for the inspiring &lt;em&gt;Build for a Friend&lt;/em&gt; prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thinking Machines&lt;/strong&gt; for the Tinker platform and fine-tuning credits that made domain-adapted open-model compilation 7x faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render&lt;/strong&gt; for the $50 hosting credits powering our live showcase and API runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemma&lt;/strong&gt; for providing open-weight foundation models that allow creators to build without corporate gatekeeping.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Built with tactile ink, square chips, spring dynamics, and open-source AI.&lt;/em&gt;&lt;/p&gt;

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