<?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: Habeeb Babasulaiman</title>
    <description>The latest articles on DEV Community by Habeeb Babasulaiman (@habeeb_babasulaiman_fdf9c).</description>
    <link>https://dev.to/habeeb_babasulaiman_fdf9c</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%2F1708707%2Fb1343a5c-b0d4-445d-b9d2-60f9b60eeaf3.png</url>
      <title>DEV Community: Habeeb Babasulaiman</title>
      <link>https://dev.to/habeeb_babasulaiman_fdf9c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/habeeb_babasulaiman_fdf9c"/>
    <language>en</language>
    <item>
      <title>week4 challenge</title>
      <dc:creator>Habeeb Babasulaiman</dc:creator>
      <pubDate>Wed, 28 Oct 2026 00:19:17 +0000</pubDate>
      <link>https://dev.to/habeeb_babasulaiman_fdf9c/week4-challenge-1225</link>
      <guid>https://dev.to/habeeb_babasulaiman_fdf9c/week4-challenge-1225</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;h2&gt;
  
  
  Demo
&lt;/h2&gt;

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

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

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

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

&lt;h2&gt;
  
  
  The Spirit of It
&lt;/h2&gt;

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

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Bayān: Touch Grass with open-source AI and local Arabic reflection</title>
      <dc:creator>Habeeb Babasulaiman</dc:creator>
      <pubDate>Wed, 28 Oct 2026 00:16:43 +0000</pubDate>
      <link>https://dev.to/habeeb_babasulaiman_fdf9c/bayan-touch-grass-with-open-source-ai-and-local-arabic-reflection-3nkd</link>
      <guid>https://dev.to/habeeb_babasulaiman_fdf9c/bayan-touch-grass-with-open-source-ai-and-local-arabic-reflection-3nkd</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Bayān is a local-first Arabic rhetoric companion that gets people off the screen and back into the world.&lt;/p&gt;

&lt;p&gt;It turns a short outdoor walk into a focused reflective writing task. The user picks a rhetorical exercise — simile, metaphor, or sensory description — then steps away from the screen, notices a detail in the environment, and returns to turn that observation into a stronger Arabic phrase.&lt;/p&gt;

&lt;p&gt;The experience is intentionally minimal. The app does not try to keep the user glued to a dashboard. It creates a brief, calm moment of attention, then gets out of the way.&lt;/p&gt;

&lt;p&gt;The project is built for anyone who wants a low-friction way to practice Arabic imagery, sensory language, and thoughtful observation without needing a cloud AI service or an overly complicated interface.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;GitHub repo: &lt;a href="https://github.com/FreemanBoss/bayaan" rel="noopener noreferrer"&gt;https://github.com/FreemanBoss/bayaan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video recording: &lt;a href="https://drive.google.com/file/d/1QdPSHCgWFfTDRqlc9B1euY6LShVFdhp9/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1QdPSHCgWFfTDRqlc9B1euY6LShVFdhp9/view?usp=sharing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Local demo: &lt;a href="http://127.0.0.1:8000" rel="noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Project repository and usage details: &lt;a href="https://github.com/FreemanBoss/bayaan" rel="noopener noreferrer"&gt;https://github.com/FreemanBoss/bayaan&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is designed to work as a real local experience: choose a prompt, step outside, notice something, come back, and write. The experience is meant to feel grounded, not like a synthetic AI showcase.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/FreemanBoss/bayaan" rel="noopener noreferrer"&gt;https://github.com/FreemanBoss/bayaan&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codebase includes the backend, frontend, local model integration, validation logic, fallback behavior, and optional local speech/transcription support. Everything is open and easy to inspect in the public repository.&lt;/p&gt;

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

&lt;p&gt;I built Bayān around open-weight local AI, not closed cloud APIs.&lt;/p&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama with Gemma 3 4B for mission generation, translation, and chat&lt;/li&gt;
&lt;li&gt;FastAPI for the backend service layer&lt;/li&gt;
&lt;li&gt;a lightweight static web frontend for the game flow&lt;/li&gt;
&lt;li&gt;browser-local storage for lightweight game state&lt;/li&gt;
&lt;li&gt;optional local Piper speech synthesis for Arabic playback&lt;/li&gt;
&lt;li&gt;optional local Whisper transcription for voice-note input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important design choice was that the app stays local-first. The user experience is built around the assumption that the walk happens outside the app, not inside it. The model is there to support reflection and language, not to dominate the interaction.&lt;/p&gt;

&lt;p&gt;The app also includes validation and fallback behavior so that if the local model is unavailable or returns weak output, the user still receives a coherent experience instead of a broken UI.&lt;/p&gt;

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

&lt;p&gt;Open innovation matters here because the app is meant to work in the real world, not just in a cloud lab.&lt;/p&gt;

&lt;p&gt;A closed API would not fit the spirit of the project. The app is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;offline or low-connectivity outdoor use&lt;/li&gt;
&lt;li&gt;privacy by default&lt;/li&gt;
&lt;li&gt;local model control&lt;/li&gt;
&lt;li&gt;transparent behavior and editable prompts&lt;/li&gt;
&lt;li&gt;a system that can be understood, run, and improved without vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project is especially relevant to the challenge because it uses open models to create a useful, grounded experience in a real-world setting. The model does not replace the user’s attention; it supports their attention. That is the meaningful difference.&lt;/p&gt;

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

&lt;p&gt;This project was built with a local AI-assisted workflow grounded in real runtime checks, not a fake “it works” claim.&lt;/p&gt;

&lt;p&gt;I validated the app by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;running the backend locally&lt;/li&gt;
&lt;li&gt;checking the live frontend&lt;/li&gt;
&lt;li&gt;testing the API routes&lt;/li&gt;
&lt;li&gt;validating the local speech and transcription flow&lt;/li&gt;
&lt;li&gt;confirming the fallback behavior under real runtime conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The build process emphasized verification over hype: if the app did not run, it was not treated as finished.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Touch Grass&lt;/li&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project fits the core Touch Grass theme directly: it is a local-first, real-world, attention-returning app built around stepping away from the screen and noticing the world.&lt;/p&gt;

&lt;p&gt;It also uses Gemma as a core part of the product, which makes Best Use of Gemma a natural fit.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built Riwaya to Make Arabic Oral-History Recordings Easier to Preserve and Search</title>
      <dc:creator>Habeeb Babasulaiman</dc:creator>
      <pubDate>Wed, 28 Oct 2026 00:12:56 +0000</pubDate>
      <link>https://dev.to/habeeb_babasulaiman_fdf9c/i-built-riwaya-to-make-arabic-oral-history-recordings-easier-to-preserve-and-search-1dea</link>
      <guid>https://dev.to/habeeb_babasulaiman_fdf9c/i-built-riwaya-to-make-arabic-oral-history-recordings-easier-to-preserve-and-search-1dea</guid>
      <description>&lt;p&gt;published: true&lt;br&gt;
tags: devchallenge, hf26challenge, arabic, opensource&lt;br&gt;
ai_disclosure_level: some_ai&lt;/p&gt;



&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 built &lt;strong&gt;Riwaya (رِواية)&lt;/strong&gt;, a local-first oral-history workbench that helps a researcher or community archivist turn a short Arabic recording into a time-coded, searchable, human-reviewable record.&lt;/p&gt;

&lt;p&gt;The repetitive part of oral-history work is easy to underestimate. A custodian may listen to the same recording several times to type a first transcript, add timestamps, find a phrase later, identify topics, and prepare notes for review. Riwaya is designed to make that first pass less laborious without treating a person's voice as disposable input or presenting a model's guess as a verified historical record.&lt;/p&gt;

&lt;p&gt;For this demonstration, I used &lt;strong&gt;[TODO: identify the actual recording source, such as “a short recording of my own voice”]&lt;/strong&gt;. After importing it, Riwaya &lt;strong&gt;[TODO: describe only the workflow that actually works: e.g., generated timestamped transcript segments with the local ASR model, let me correct them, then produced a source-linked finding aid]&lt;/strong&gt;. I could review a segment against the original audio, correct the wording, mark an unclear span, and export &lt;strong&gt;[TODO: actual export format]&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project is deliberately careful about what “Arabic” means in a recording. It keeps the raw model transcript separate from the corrected transcript and any optional translation or normalization. The speaker's variety is &lt;strong&gt;[TODO: state how the app records this; use “speaker-described” or “unknown” if appropriate]&lt;/strong&gt; rather than something an AI system silently decides on the speaker's behalf.&lt;/p&gt;
&lt;h3&gt;
  
  
  Demo
&lt;/h3&gt;

&lt;p&gt;**Working demo or video:&lt;/p&gt;

&lt;p&gt;In the demo, show one complete short workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Import the permitted audio sample.&lt;/li&gt;
&lt;li&gt;Run the actual local transcription model and show its name/version.&lt;/li&gt;
&lt;li&gt;Play a segment while viewing its timestamp and draft transcript.&lt;/li&gt;
&lt;li&gt;Correct or mark one transcript segment as unclear.&lt;/li&gt;
&lt;li&gt;Generate a finding-aid suggestion and show the linked source segment.&lt;/li&gt;
&lt;li&gt;Accept or reject the suggestion and export the record.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;**Recording note:&lt;/p&gt;
&lt;h3&gt;
  
  
  Code
&lt;/h3&gt;

&lt;p&gt;**Public repository:&lt;/p&gt;

&lt;p&gt;The repository should include the runnable source, dependency/model setup, tests, a license, and a sample workflow that does not expose a private recording. Do not commit audio, model weights, API keys, credentials, or other private material unless you have the necessary rights and a clear reason.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Riwaya separates model proposals from the archival record so that a human can inspect and correct each step.&lt;/p&gt;

&lt;p&gt;**Audio transcription:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human review:&lt;/strong&gt; Each segment keeps its time range, raw ASR text, corrected text, review state, and language-variety label. The person reviewing the recording can preserve the speaker's wording, identify an uncertain span, and decide whether a proposed correction is acceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding aid:&lt;/strong&gt; [TODO: describe actual local open-weight model and runtime]. Given the reviewed transcript, the model proposes a short summary, a few topic labels, and candidate names or terms to verify. Each suggestion must identify the transcript segment it came from. Application code validates that the cited segment exists; a valid citation is not treated as proof that the interpretation is correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Export and search:&lt;/strong&gt; [TODO: state the actual storage and export format]. The export keeps the audio reference, transcript variants, timestamps, review state, and accepted finding-aid fields together so another person can see what was machine-generated and what a human changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actual stack:&lt;/strong&gt; Python, FastAPI/Streamlit, faster-whisper, Ollama/Gemma, SQLite/JSON&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Permitted audio recording] --&amp;gt; B[Local speech recognition]
    B --&amp;gt; C[Timestamped draft transcript]
    C --&amp;gt; D[Human edits and uncertainty markers]
    D --&amp;gt; E[Local open-weight language model]
    E --&amp;gt; F[Candidate finding aid with source segment IDs]
    F --&amp;gt; G[Application validates IDs and schema]
    G --&amp;gt; H[Human accepts or rejects suggestions]
    H --&amp;gt; I[Portable reviewed archive record]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;Tests and evaluation:&lt;/strong&gt; [TODO: list the tests that actually pass]. I evaluated the prototype on &lt;strong&gt;[TODO: duration and description of the permitted test clip]&lt;/strong&gt;. Local inference took &lt;strong&gt;[TODO: measured time or “not measured”]&lt;/strong&gt;; human review took &lt;strong&gt;[TODO: measured time or “not measured”]&lt;/strong&gt;. The main errors I observed were &lt;strong&gt;[TODO: honest examples, or state that no quality evaluation beyond this demo was conducted]&lt;/strong&gt;. This is a small prototype test, not a claim about performance across Arabic dialects or oral-history archives generally.&lt;/p&gt;

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

&lt;p&gt;A voice recording can contain personal, family, community, or culturally restricted material. For that reason, I wanted the core inference in this prototype to run on the custodian's own machine rather than requiring them to upload a recording to a hosted AI service.&lt;/p&gt;

&lt;p&gt;Using an open-weight model locally gives the builder and custodian more control over where inference runs, which model is selected, and how the workflow is inspected or adapted. It also makes it possible to design the product around preservation choices: keep the original audio, retain the first model transcript, record human corrections separately, and make AI-generated descriptions traceable to source segments.&lt;/p&gt;

&lt;p&gt;That does not make the tool automatically ethical or accurate. A local model can still mishear dialect, normalize a speaker's wording, miss a name, or invent an interpretation. Local inference is not a replacement for informed consent, careful access decisions, or human listening. Riwaya therefore treats model output as a proposal for a human archivist to review, not as an authoritative transcript or a substitute for oral-history practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy implementation:&lt;/strong&gt; [TODO: state what you verified. For example, whether the app binds to localhost, whether any remote requests occur, and whether the recording is saved or deleted]. Do not say “offline” unless you tested the complete workflow after model downloads with the network disconnected. If you only verified local inference, say “local inference.”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Slow and Steady Payoff
&lt;/h2&gt;

&lt;p&gt;Riwaya aims to replace a blank page and repeated manual timestamping with a draft that a person can check against the original audio. The human still does the important work: listening, correcting, deciding what is uncertain, and choosing what belongs in the archive. The model handles a repetitive first pass; the person retains editorial control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consent, Preservation, and Limits
&lt;/h2&gt;

&lt;p&gt;Riwaya is a prototype, not a certified archival system. The first version is intentionally narrow: &lt;strong&gt;[TODO: name supported audio format, tested language variety, maximum clip length, and any hardware requirements]&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before recording or processing another person's voice, I explain what the prototype does and obtain permission for the specific use. Permission to process a recording is not automatically permission to publish it. The speaker should be able to choose attribution, pseudonym, or no public attribution, and should know whether audio, transcript, or summaries may be shared.&lt;/p&gt;




&lt;p&gt;AI disclosure: This article was drafted with meaningful AI assistance. I reviewed it and remain responsible for the accuracy of its claims.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I Built Riwaya to Make Arabic Oral-History Recordings Easier to Preserve and Search</title>
      <dc:creator>Habeeb Babasulaiman</dc:creator>
      <pubDate>Wed, 28 Oct 2026 00:04:03 +0000</pubDate>
      <link>https://dev.to/habeeb_babasulaiman_fdf9c/i-built-riwaya-to-make-arabic-oral-history-recordings-easier-to-preserve-and-search-2f1h</link>
      <guid>https://dev.to/habeeb_babasulaiman_fdf9c/i-built-riwaya-to-make-arabic-oral-history-recordings-easier-to-preserve-and-search-2f1h</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Riwaya (رِواية)&lt;/strong&gt;, a local-first oral-history workbench that helps a researcher or community archivist turn a short Arabic recording into a time-coded, searchable, human-reviewable record.&lt;/p&gt;

&lt;p&gt;The repetitive part of oral-history work is easy to underestimate. A custodian may listen to the same recording several times to type a first transcript, add timestamps, find a phrase later, identify topics, and prepare notes for review. Riwaya is designed to make that first pass less laborious without treating a person's voice as disposable input or presenting a model's guess as a verified historical record.&lt;/p&gt;

&lt;p&gt;For this demonstration, I used &lt;strong&gt;[TODO: identify the actual recording source, such as “a short recording of my own voice”]&lt;/strong&gt;. After importing it, Riwaya &lt;strong&gt;[TODO: describe only the workflow that actually works: e.g., generated timestamped transcript segments with the local ASR model, let me correct them, then produced a source-linked finding aid]&lt;/strong&gt;. I could review a segment against the original audio, correct the wording, mark an unclear span, and export &lt;strong&gt;[TODO: actual export format]&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project is deliberately careful about what “Arabic” means in a recording. It keeps the raw model transcript separate from the corrected transcript and any optional translation or normalization. The speaker's variety is &lt;strong&gt;[TODO: state how the app records this; use “speaker-described” or “unknown” if appropriate]&lt;/strong&gt; rather than something an AI system silently decides on the speaker's behalf.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demo
&lt;/h3&gt;

&lt;p&gt;**Working demo or video:&lt;/p&gt;

&lt;p&gt;In the demo, show one complete short workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Import the permitted audio sample.&lt;/li&gt;
&lt;li&gt;Run the actual local transcription model and show its name/version.&lt;/li&gt;
&lt;li&gt;Play a segment while viewing its timestamp and draft transcript.&lt;/li&gt;
&lt;li&gt;Correct or mark one transcript segment as unclear.&lt;/li&gt;
&lt;li&gt;Generate a finding-aid suggestion and show the linked source segment.&lt;/li&gt;
&lt;li&gt;Accept or reject the suggestion and export the record.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;**Recording note:&lt;/p&gt;

&lt;h3&gt;
  
  
  Code
&lt;/h3&gt;

&lt;p&gt;**Public repository:&lt;/p&gt;

&lt;p&gt;The repository should include the runnable source, dependency/model setup, tests, a license, and a sample workflow that does not expose a private recording. Do not commit audio, model weights, API keys, credentials, or other private material unless you have the necessary rights and a clear reason.&lt;/p&gt;

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

&lt;p&gt;Riwaya separates model proposals from the archival record so that a human can inspect and correct each step.&lt;/p&gt;

&lt;p&gt;**Audio transcription:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human review:&lt;/strong&gt; Each segment keeps its time range, raw ASR text, corrected text, review state, and language-variety label. The person reviewing the recording can preserve the speaker's wording, identify an uncertain span, and decide whether a proposed correction is acceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding aid:&lt;/strong&gt; [TODO: describe actual local open-weight model and runtime]. Given the reviewed transcript, the model proposes a short summary, a few topic labels, and candidate names or terms to verify. Each suggestion must identify the transcript segment it came from. Application code validates that the cited segment exists; a valid citation is not treated as proof that the interpretation is correct.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Export and search:&lt;/strong&gt; [TODO: state the actual storage and export format]. The export keeps the audio reference, transcript variants, timestamps, review state, and accepted finding-aid fields together so another person can see what was machine-generated and what a human changed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actual stack:&lt;/strong&gt; Python, FastAPI/Streamlit, faster-whisper, Ollama/Gemma, SQLite/JSON&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Permitted audio recording] --&amp;gt; B[Local speech recognition]
    B --&amp;gt; C[Timestamped draft transcript]
    C --&amp;gt; D[Human edits and uncertainty markers]
    D --&amp;gt; E[Local open-weight language model]
    E --&amp;gt; F[Candidate finding aid with source segment IDs]
    F --&amp;gt; G[Application validates IDs and schema]
    G --&amp;gt; H[Human accepts or rejects suggestions]
    H --&amp;gt; I[Portable reviewed archive record]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;Tests and evaluation:&lt;/strong&gt; [TODO: list the tests that actually pass]. I evaluated the prototype on &lt;strong&gt;[TODO: duration and description of the permitted test clip]&lt;/strong&gt;. Local inference took &lt;strong&gt;[TODO: measured time or “not measured”]&lt;/strong&gt;; human review took &lt;strong&gt;[TODO: measured time or “not measured”]&lt;/strong&gt;. The main errors I observed were &lt;strong&gt;[TODO: honest examples, or state that no quality evaluation beyond this demo was conducted]&lt;/strong&gt;. This is a small prototype test, not a claim about performance across Arabic dialects or oral-history archives generally.&lt;/p&gt;

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

&lt;p&gt;A voice recording can contain personal, family, community, or culturally restricted material. For that reason, I wanted the core inference in this prototype to run on the custodian's own machine rather than requiring them to upload a recording to a hosted AI service.&lt;/p&gt;

&lt;p&gt;Using an open-weight model locally gives the builder and custodian more control over where inference runs, which model is selected, and how the workflow is inspected or adapted. It also makes it possible to design the product around preservation choices: keep the original audio, retain the first model transcript, record human corrections separately, and make AI-generated descriptions traceable to source segments.&lt;/p&gt;

&lt;p&gt;That does not make the tool automatically ethical or accurate. A local model can still mishear dialect, normalize a speaker's wording, miss a name, or invent an interpretation. Local inference is not a replacement for informed consent, careful access decisions, or human listening. Riwaya therefore treats model output as a proposal for a human archivist to review, not as an authoritative transcript or a substitute for oral-history practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy implementation:&lt;/strong&gt; [TODO: state what you verified. For example, whether the app binds to localhost, whether any remote requests occur, and whether the recording is saved or deleted]. Do not say “offline” unless you tested the complete workflow after model downloads with the network disconnected. If you only verified local inference, say “local inference.”&lt;/p&gt;

&lt;h2&gt;
  
  
  The Slow and Steady Payoff
&lt;/h2&gt;

&lt;p&gt;Riwaya aims to replace a blank page and repeated manual timestamping with a draft that a person can check against the original audio. The human still does the important work: listening, correcting, deciding what is uncertain, and choosing what belongs in the archive. The model handles a repetitive first pass; the person retains editorial control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consent, Preservation, and Limits
&lt;/h2&gt;

&lt;p&gt;Riwaya is a prototype, not a certified archival system. The first version is intentionally narrow: &lt;strong&gt;[TODO: name supported audio format, tested language variety, maximum clip length, and any hardware requirements]&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before recording or processing another person's voice, I explain what the prototype does and obtain permission for the specific use. Permission to process a recording is not automatically permission to publish it. The speaker should be able to choose attribution, pseudonym, or no public attribution, and should know whether audio, transcript, or summaries may be shared.&lt;/p&gt;




&lt;p&gt;AI disclosure: This article was drafted with meaningful AI assistance. I reviewed it and remain responsible for the accuracy of its claims.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>arabic</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Bayān: Touch Grass with open-source AI and local Arabic reflection</title>
      <dc:creator>Habeeb Babasulaiman</dc:creator>
      <pubDate>Mon, 12 Oct 2026 07:27:14 +0000</pubDate>
      <link>https://dev.to/habeeb_babasulaiman_fdf9c/bayan-touch-grass-with-open-source-ai-and-local-arabic-reflection-5h34</link>
      <guid>https://dev.to/habeeb_babasulaiman_fdf9c/bayan-touch-grass-with-open-source-ai-and-local-arabic-reflection-5h34</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Bayān is a local-first Arabic rhetoric companion that gets people off the screen and back into the world.&lt;/p&gt;

&lt;p&gt;It turns a short outdoor walk into a focused reflective writing task. The user picks a rhetorical exercise — simile, metaphor, or sensory description — then steps away from the screen, notices a detail in the environment, and returns to turn that observation into a stronger Arabic phrase.&lt;/p&gt;

&lt;p&gt;The experience is intentionally minimal. The app does not try to keep the user glued to a dashboard. It creates a brief, calm moment of attention, then gets out of the way.&lt;/p&gt;

&lt;p&gt;The project is built for anyone who wants a low-friction way to practice Arabic imagery, sensory language, and thoughtful observation without needing a cloud AI service or an overly complicated interface.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;GitHub repo: &lt;a href="https://github.com/FreemanBoss/bayaan" rel="noopener noreferrer"&gt;https://github.com/FreemanBoss/bayaan&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Video recording: &lt;a href="https://drive.google.com/file/d/1QdPSHCgWFfTDRqlc9B1euY6LShVFdhp9/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1QdPSHCgWFfTDRqlc9B1euY6LShVFdhp9/view?usp=sharing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Local demo: &lt;a href="http://127.0.0.1:8000" rel="noopener noreferrer"&gt;http://127.0.0.1:8000&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Project repository and usage details: &lt;a href="https://github.com/FreemanBoss/bayaan" rel="noopener noreferrer"&gt;https://github.com/FreemanBoss/bayaan&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is designed to work as a real local experience: choose a prompt, step outside, notice something, come back, and write. The experience is meant to feel grounded, not like a synthetic AI showcase.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Repository: &lt;a href="https://github.com/FreemanBoss/bayaan" rel="noopener noreferrer"&gt;https://github.com/FreemanBoss/bayaan&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codebase includes the backend, frontend, local model integration, validation logic, fallback behavior, and optional local speech/transcription support. Everything is open and easy to inspect in the public repository.&lt;/p&gt;

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

&lt;p&gt;I built Bayān around open-weight local AI, not closed cloud APIs.&lt;/p&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama with Gemma 3 4B for mission generation, translation, and chat&lt;/li&gt;
&lt;li&gt;FastAPI for the backend service layer&lt;/li&gt;
&lt;li&gt;a lightweight static web frontend for the game flow&lt;/li&gt;
&lt;li&gt;browser-local storage for lightweight game state&lt;/li&gt;
&lt;li&gt;optional local Piper speech synthesis for Arabic playback&lt;/li&gt;
&lt;li&gt;optional local Whisper transcription for voice-note input&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important design choice was that the app stays local-first. The user experience is built around the assumption that the walk happens outside the app, not inside it. The model is there to support reflection and language, not to dominate the interaction.&lt;/p&gt;

&lt;p&gt;The app also includes validation and fallback behavior so that if the local model is unavailable or returns weak output, the user still receives a coherent experience instead of a broken UI.&lt;/p&gt;

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

&lt;p&gt;Open innovation matters here because the app is meant to work in the real world, not just in a cloud lab.&lt;/p&gt;

&lt;p&gt;A closed API would not fit the spirit of the project. The app is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;offline or low-connectivity outdoor use&lt;/li&gt;
&lt;li&gt;privacy by default&lt;/li&gt;
&lt;li&gt;local model control&lt;/li&gt;
&lt;li&gt;transparent behavior and editable prompts&lt;/li&gt;
&lt;li&gt;a system that can be understood, run, and improved without vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project is especially relevant to the challenge because it uses open models to create a useful, grounded experience in a real-world setting. The model does not replace the user’s attention; it supports their attention. That is the meaningful difference.&lt;/p&gt;

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

&lt;p&gt;This project was built with a local AI-assisted workflow grounded in real runtime checks, not a fake “it works” claim.&lt;/p&gt;

&lt;p&gt;I validated the app by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;running the backend locally&lt;/li&gt;
&lt;li&gt;checking the live frontend&lt;/li&gt;
&lt;li&gt;testing the API routes&lt;/li&gt;
&lt;li&gt;validating the local speech and transcription flow&lt;/li&gt;
&lt;li&gt;confirming the fallback behavior under real runtime conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The build process emphasized verification over hype: if the app did not run, it was not treated as finished.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Touch Grass&lt;/li&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project fits the core Touch Grass theme directly: it is a local-first, real-world, attention-returning app built around stepping away from the screen and noticing the world.&lt;/p&gt;

&lt;p&gt;It also uses Gemma as a core part of the product, which makes Best Use of Gemma a natural fit.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Beyond Grammar: I Built Meydan to Help My Friends Use Arabic in Their Fields</title>
      <dc:creator>Habeeb Babasulaiman</dc:creator>
      <pubDate>Mon, 05 Oct 2026 07:01:33 +0000</pubDate>
      <link>https://dev.to/habeeb_babasulaiman_fdf9c/hacktoberfest-weekend-challenge-build-for-a-41c</link>
      <guid>https://dev.to/habeeb_babasulaiman_fdf9c/hacktoberfest-weekend-challenge-build-for-a-41c</guid>
      <description>&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;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;ميدان (Meydan)&lt;/strong&gt;, a bilingual Arabic and English writing and practice studio for people who know their field but struggle to express that knowledge in Arabic.&lt;/p&gt;

&lt;p&gt;I studied Arabic and Transnational Studies, and I also work across software engineering, DevOps, and cloud infrastructure. I could discuss much of my technical work in English, but found it difficult to explain the same ideas naturally in Arabic. Friends studying Arabic described a similar gap: they were learning grammar and conversation, yet still lacked practice using Arabic to discuss their studies, work, and interests.&lt;/p&gt;

&lt;p&gt;That gap became more concrete when I shared the early version of Meydan with friends. They tried it, responded positively, and asked when they could use it online instead of on my computer. Their response encouraged me, while also making the next challenge clear: before opening it up more widely, I need to improve speed, review the Arabic with qualified speakers, and make the experience reliable enough for regular use.&lt;/p&gt;

&lt;p&gt;Meydan starts with four fields: technology, health communication, travel, and international relations. A learner can ask it to write about a subject in Arabic and provide an English translation, build a bilingual field glossary with example sentences, or practise a realistic dialogue. They can switch the interface between Arabic and English, choose a light or dark theme, and save useful terms in a phrasebook on their device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1ZpLdC_UuxUTbUPsC48zPLZnT_CCSRoZA/view?usp=drive_link" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1ZpLdC_UuxUTbUPsC48zPLZnT_CCSRoZA/view?usp=drive_link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meydan gives them a practical bridge from knowledge to communication.&lt;/p&gt;

&lt;p&gt;A learner can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask Meydan to write about a topic in Arabic.&lt;/li&gt;
&lt;li&gt;Receive an English translation and useful Arabic terminology.&lt;/li&gt;
&lt;li&gt;Learn field-specific vocabulary for technology, health communication, travel, and international relations.&lt;/li&gt;
&lt;li&gt;Practise realistic professional conversations.&lt;/li&gt;
&lt;li&gt;Save useful expressions in a local phrasebook.&lt;/li&gt;
&lt;li&gt;Switch the interface between Arabic and English.&lt;/li&gt;
&lt;li&gt;Switch between light and dark themes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first use case I built around is this kind of request:&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1ZpLdC_UuxUTbUPsC48zPLZnT_CCSRoZA/view?usp=drive_link" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1ZpLdC_UuxUTbUPsC48zPLZnT_CCSRoZA/view?usp=drive_link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo shows the Arabic-first interface, the writing workflow, the bilingual response, the terminology cards, the English interface, dark mode, and the local model status.&lt;/p&gt;

&lt;p&gt;The model runs locally through Ollama, so the demo may take longer to respond than a hosted GPU service. The application streams the response as it is generated instead of waiting silently for the entire answer.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/FreemanBoss/meydan" rel="noopener noreferrer"&gt;View the Meydan repository on GitHub&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Meydan is a React, TypeScript, and Vite application with an Arabic-first RTL interface and an English LTR mode.&lt;/p&gt;

&lt;p&gt;The core architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    Learner[Arabic learner] --&amp;gt; UI[React bilingual interface]
    UI --&amp;gt; Proxy[Vite local Ollama proxy]
    Proxy --&amp;gt; Ollama[Ollama on localhost]
    Ollama --&amp;gt; Gemma[Gemma 3 4B open-weight model]
    UI --&amp;gt; Phrasebook[Browser-local phrasebook]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The current local model is &lt;strong&gt;Gemma 3 4B&lt;/strong&gt;, served through Ollama. The app sends requests to the local Ollama service rather than to a hosted model API. Responses stream into the interface and are rendered as structured Markdown so longer Arabic writing, translations, lists, and terminology tables remain readable.&lt;/p&gt;

&lt;p&gt;I designed three focused workflows instead of one generic chatbot:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write an idea&lt;/strong&gt;: produce Arabic writing, English translation, and key vocabulary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn terminology&lt;/strong&gt;: create a focused bilingual glossary with examples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Practise a dialogue&lt;/strong&gt;: simulate a realistic conversation in a selected field.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application also includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arabic/English interface switching.&lt;/li&gt;
&lt;li&gt;Light/dark mode persistence.&lt;/li&gt;
&lt;li&gt;Field-specific starter terminology.&lt;/li&gt;
&lt;li&gt;A local phrasebook stored in browser storage.&lt;/li&gt;
&lt;li&gt;Health and other high-stakes safety boundaries.&lt;/li&gt;
&lt;li&gt;A clear local-model status indicator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tested the project on a machine with 12 CPU cores, 32 GB RAM, and integrated graphics. No hosted model API is required for the prototype.&lt;/p&gt;

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

&lt;p&gt;Open innovation matters because language practice can contain private, unfinished, and personal ideas. A learner should be able to practise describing their work without automatically sending every message to a remote service they do not control.&lt;/p&gt;

&lt;p&gt;With local inference, Meydan can run on the learner's own machine through Ollama. This makes several things possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The learner's practice messages can stay local.&lt;/li&gt;
&lt;li&gt;The model choice and runtime are visible and replaceable.&lt;/li&gt;
&lt;li&gt;The application can be inspected and modified.&lt;/li&gt;
&lt;li&gt;The project does not require a paid hosted AI API for its core workflow.&lt;/li&gt;
&lt;li&gt;The model can be evaluated against the actual Arabic tasks the learner cares about.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open AI also makes the limitations visible. On my CPU-only machine, Gemma 3 4B is not instant. A 371-token test took approximately 110 seconds end-to-end. The interface therefore streams output as it arrives and keeps responses bounded. The model can also produce fluent but imperfect Arabic, so the application clearly presents itself as a practice aid rather than an authority.&lt;/p&gt;

&lt;p&gt;That trade-off is part of the project: privacy and inspectability are valuable, but they do not remove the need for human language review.&lt;/p&gt;

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

&lt;p&gt;The most important lesson was that multilingual support cannot be evaluated by fluency alone.&lt;/p&gt;

&lt;p&gt;A model may produce beautiful Arabic while choosing the wrong technical term, adding an unintended metaphor, or translating a professional phrase too literally. I tested the same kind of task across models and found that a smaller model can be faster without automatically being more accurate.&lt;/p&gt;

&lt;p&gt;The practical solution is to evaluate the actual task:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can it preserve the learner's intended meaning?&lt;/li&gt;
&lt;li&gt;Does it produce natural Modern Standard Arabic?&lt;/li&gt;
&lt;li&gt;Are the field-specific terms correct?&lt;/li&gt;
&lt;li&gt;Does it handle English-Arabic code-switching?&lt;/li&gt;
&lt;li&gt;Does it avoid inventing facts?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still need a fluent Arabic reviewer to evaluate the terminology and my friend's real feedback before treating the output as polished language instruction.&lt;/p&gt;

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

&lt;p&gt;I am entering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma is used as the core local model for writing, terminology, and practice responses. It is not included as a decorative or incidental integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Status
&lt;/h2&gt;

&lt;p&gt;This is a new prototype built during the challenge window. The repository is public and licensed under MIT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/FreemanBoss/meydan" rel="noopener noreferrer"&gt;Meydan on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemma/docs/core" rel="noopener noreferrer"&gt;Gemma documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is intentionally honest about its limits: local CPU inference is slow, Arabic output needs review, and the health workflow is communication practice only, not medical advice.&lt;/p&gt;

&lt;p&gt;Thank you to the DEV and MLH teams for creating a challenge that encouraged me to build something personal and useful for someone I care about.&lt;/p&gt;

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