<?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: Anudhyan</title>
    <description>The latest articles on DEV Community by Anudhyan (@anudhyan).</description>
    <link>https://dev.to/anudhyan</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%2F1168354%2Fe623c76e-ee88-46e8-9aea-641f7be4d42a.png</url>
      <title>DEV Community: Anudhyan</title>
      <link>https://dev.to/anudhyan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anudhyan"/>
    <language>en</language>
    <item>
      <title>I Forgot the Words, Not the Memory: Building Ghostlight</title>
      <dc:creator>Anudhyan</dc:creator>
      <pubDate>Sun, 01 Nov 2026 06:20:15 +0000</pubDate>
      <link>https://dev.to/anudhyan/i-forgot-the-words-not-the-memory-building-ghostlight-15fc</link>
      <guid>https://dev.to/anudhyan/i-forgot-the-words-not-the-memory-building-ghostlight-15fc</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I typed &lt;strong&gt;“music during a power cut.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The note I wanted used neither “music” nor “power cut.” It described a monsoon blackout, a little red radio with dead batteries, and Grandma humming songs on the kitchen floor.&lt;/p&gt;

&lt;p&gt;Ghostlight found it.&lt;/p&gt;

&lt;p&gt;That small connection is the project: &lt;strong&gt;a memory archive you can search when you remember the moment but have forgotten its words.&lt;/strong&gt; An open-source embedding model runs in your browser and retrieves the passages you saved.&lt;/p&gt;

&lt;p&gt;For &lt;em&gt;Ghost in the Machine&lt;/em&gt;, I imagined the ghost as a trace left in an archive: a recipe, a familiar song, someone waiting on a railway platform. The machine’s job is to make that trace reachable again. Every result shows the original text.&lt;/p&gt;

&lt;p&gt;The six example memories, including the radio story, are fictional. They let anyone try the idea without contributing a private family story. You can then add short memories of your own or import an archive.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://ghostlight-memory-lantern-2026.coatedaspen1.chatgpt.site" rel="noopener noreferrer"&gt;Try Ghostlight in your browser&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Light the lantern&lt;/strong&gt;, then try these searches. In a Chromium browser test on 1 November 2026, the actual WebAssembly model returned these results:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Search&lt;/th&gt;
&lt;th&gt;First result or notice&lt;/th&gt;
&lt;th&gt;Top similarity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;music during a power cut&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Radio in the rain&lt;/td&gt;
&lt;td&gt;0.395&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;how someone taught me to ride&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The blue bicycle&lt;/td&gt;
&lt;td&gt;0.405&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;quantum processors on Mars&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;“No close connection found”&lt;/td&gt;
&lt;td&gt;0.057&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are three checks against six fictional notes, not an accuracy benchmark. The unrelated query still displays the nearest original passages, clearly labelled as weak matches. The 0.25 notice threshold is a simple interface heuristic; it is not a calibrated confidence boundary.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz9rrhve5sry34t36qs4e.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz9rrhve5sry34t36qs4e.jpg" alt="A real Ghostlight search retrieves the original radio story from an approximate recollection" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, add a fictional memory and export the archive as JSON. You can import that file to bring the words back. Saving in the browser is optional; the default is session only.&lt;/p&gt;

&lt;p&gt;The first visit downloads roughly 23 MB of model weights plus runtime files. An internet connection is needed for that download. Subsequent inference processes the notes and query on the device. Browser caching varies, so complete offline operation is not a guarantee.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Anudhyan/ghostlight-hf26" rel="noopener noreferrer"&gt;Browse the Ghostlight source code&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application code is MIT licensed. The README credits the model and dependencies under their own licenses. OpenAI Codex assisted with implementation, documentation, and validation, including the browser checks described here.&lt;/p&gt;

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

&lt;p&gt;Ghostlight uses plain HTML, CSS, and JavaScript, served as static files.&lt;/p&gt;

&lt;p&gt;The central component is &lt;a href="https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2" rel="noopener noreferrer"&gt;all-MiniLM-L6-v2&lt;/a&gt;, used through &lt;a href="https://huggingface.co/Xenova/all-MiniLM-L6-v2" rel="noopener noreferrer"&gt;Xenova’s ONNX conversion&lt;/a&gt;. &lt;a href="https://github.com/huggingface/transformers.js" rel="noopener noreferrer"&gt;Transformers.js&lt;/a&gt;, pinned to version 3.8.1, runs the quantized model with WebAssembly inside a Web Worker.&lt;/p&gt;

&lt;p&gt;The retrieval flow is small enough to inspect:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Convert each saved passage into an embedding, using mean pooling and normalization.&lt;/li&gt;
&lt;li&gt;Convert the search phrase into an embedding with the same model.&lt;/li&gt;
&lt;li&gt;Compare those vectors with cosine similarity and rank the passages.&lt;/li&gt;
&lt;li&gt;Show the retrieved text exactly as it was stored.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The worker keeps model loading and inference away from the interface thread. It caches embeddings for unchanged notes and evicts entries when their source text changes. Model and library versions are pinned so the implementation is easier to reproduce.&lt;/p&gt;

&lt;p&gt;The model earns its place in the app. “Hummed songs” and “music” can be close in its embedding space; exact string matching alone cannot make that connection. The final display still comes directly from the archive.&lt;/p&gt;

&lt;p&gt;Testing found an unglamorous bug: adding a note relied on &lt;code&gt;crypto.randomUUID&lt;/code&gt;, which was unavailable on the HTTP preview origin. A &lt;code&gt;getRandomValues&lt;/code&gt; fallback fixed it. The subsequent browser checks verified adding a fictional note, saving it across a reload, exporting it, and importing it again.&lt;/p&gt;

&lt;p&gt;The automated archive and vector checks pass too. The repository includes the browser observations and a separate reproducible CPU-inference test; scores can vary between the CPU and browser backends.&lt;/p&gt;

&lt;p&gt;This version intentionally handles a small archive: up to 100 notes, with 1,000 characters per note. English paraphrases are its tested use case. Long family histories and multilingual retrieval deserve more evaluation before making bigger claims.&lt;/p&gt;

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

&lt;p&gt;For this archive, open innovation changes where the useful work happens. Downloadable model weights and an open runtime let the browser compute embeddings itself. Ghostlight sends no note or query text to an inference service, and local inference has no per-query API charge.&lt;/p&gt;

&lt;p&gt;The reader can inspect the retrieval code, replace the model, or serve their own copy. JSON export keeps the words portable even if the interface changes later. Those choices matter for something intended to hold personal memories.&lt;/p&gt;

&lt;p&gt;Local processing has limits. Hosting, CDN, and model providers receive ordinary asset-download requests. Optional &lt;code&gt;localStorage&lt;/code&gt; is unencrypted and accessible to other people using the same browser profile. A small model can rank the wrong story, which is why the source passage and similarity label stay visible.&lt;/p&gt;

&lt;p&gt;The detail I keep returning to is the radio with dead batteries. The saved words are already there; the useful thing the machine does is help someone find them again.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>FriendFocus AI: I Built a Tiny Local Planning Buddy for a Friend</title>
      <dc:creator>Anudhyan</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:16:39 +0000</pubDate>
      <link>https://dev.to/anudhyan/friendfocus-ai-i-built-a-tiny-local-planning-buddy-for-a-friend-2da9</link>
      <guid>https://dev.to/anudhyan/friendfocus-ai-i-built-a-tiny-local-planning-buddy-for-a-friend-2da9</guid>
      <description>&lt;p&gt;I built FriendFocus AI for a friend who often gets overwhelmed when multiple study tasks and deadlines pile up at once.&lt;/p&gt;

&lt;p&gt;FriendFocus takes a goal, a task list, available time, and constraints, then uses Qwen2.5-0.5B-Instruct with Hugging Face Transformers to create a simple priority order, schedule, and fallback plan.&lt;/p&gt;

&lt;p&gt;The project is intentionally small. Instead of another complicated productivity dashboard, it focuses on one question:&lt;/p&gt;

&lt;p&gt;“What should I do next?”&lt;/p&gt;

&lt;p&gt;How it works&lt;/p&gt;

&lt;p&gt;Goal + Tasks + Constraints&lt;br&gt;
          ↓&lt;br&gt;
       Gradio UI&lt;br&gt;
          ↓&lt;br&gt;
Qwen2.5-0.5B-Instruct&lt;br&gt;
          ↓&lt;br&gt;
    Actionable Plan&lt;/p&gt;

&lt;p&gt;Why open innovation matters&lt;/p&gt;

&lt;p&gt;I chose an open-weight model because it gives me the freedom to experiment, replace the model, and move toward local/private inference without depending entirely on a proprietary AI API.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://github.com/Anudhyan/friendfocus-ai" rel="noopener noreferrer"&gt;https://github.com/Anudhyan/friendfocus-ai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Anudhyan</dc:creator>
      <pubDate>Wed, 18 Dec 2024 04:11:57 +0000</pubDate>
      <link>https://dev.to/anudhyan/-5hih</link>
      <guid>https://dev.to/anudhyan/-5hih</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/taipy" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&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%2Forganization%2Fprofile_image%2F7841%2F193ba08c-c58c-490c-881d-ab6ab35b3219.png" alt="Taipy" width="800" height="714"&gt;
      &lt;div class="ltag__link__user__pic"&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%2Fuser%2Fprofile_image%2F1181604%2F4df44572-723e-48a6-9da0-24607d4a50c5.jpeg" alt="" width="460" height="460"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/taipy/goodbye-power-bi-in-2025-build-aiml-dashboards-entirely-within-python-4l22" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;👋🏻Goodbye Power BI! 📊 In 2025 Build AI/ML Dashboards Entirely Within Python 🤖&lt;/h2&gt;
      &lt;h3&gt;Rym for Taipy ・ Dec 17&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#datascience&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#data&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#machinelearning&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#python&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Anudhyan</dc:creator>
      <pubDate>Thu, 05 Dec 2024 12:34:38 +0000</pubDate>
      <link>https://dev.to/anudhyan/-4dg7</link>
      <guid>https://dev.to/anudhyan/-4dg7</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/taipy" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&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%2Forganization%2Fprofile_image%2F7841%2F193ba08c-c58c-490c-881d-ab6ab35b3219.png" alt="Taipy" width="800" height="714"&gt;
      &lt;div class="ltag__link__user__pic"&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%2Fuser%2Fprofile_image%2F1181604%2F4df44572-723e-48a6-9da0-24607d4a50c5.jpeg" alt="" width="460" height="460"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/taipy/build-a-stock-dashboard-in-less-than-40-lines-of-python-code-3b78" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Build a 2025 Stock Dashboard in less than 40 lines of Python code!🤓&lt;/h2&gt;
      &lt;h3&gt;Rym for Taipy ・ Dec 5&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#python&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devjournal&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
