<?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: CyrilBaah</title>
    <description>The latest articles on DEV Community by CyrilBaah (@cyrilbaah).</description>
    <link>https://dev.to/cyrilbaah</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%2F2126995%2Fd92e181b-ab7b-47c9-b81b-6a008f8e98fa.jpeg</url>
      <title>DEV Community: CyrilBaah</title>
      <link>https://dev.to/cyrilbaah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cyrilbaah"/>
    <language>en</language>
    <item>
      <title>M-aso - hacktoberfest</title>
      <dc:creator>CyrilBaah</dc:creator>
      <pubDate>Sun, 04 Oct 2026 23:59:52 +0000</pubDate>
      <link>https://dev.to/cyrilbaah/m-aso-hacktoberfest-2ele</link>
      <guid>https://dev.to/cyrilbaah/m-aso-hacktoberfest-2ele</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;Some time back I worked with a team where two of the teammates couldn't hear. In meetings, they would use the captions. Well, after the meetings, what's next? We still had to communicate.&lt;br&gt;
When the rest of us wanted to tell them something, we typed and showed them the screen or the paper we wrote on.&lt;/p&gt;

&lt;p&gt;It worked. So in this hackathon I built &lt;strong&gt;M'aso&lt;/strong&gt;, which means &lt;strong&gt;my ear&lt;/strong&gt; in Akan, a Ghanaian language. Two people open a private room:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live captions.&lt;/strong&gt; What one person says appears on both screens about a second later, with their name on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typing for everyone.&lt;/strong&gt; Anyone can type, and a typed message shows just as large as speech.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Show on screen.&lt;/strong&gt; One button turns the laptop into a full-screen board of huge text: type it, turn the laptop around.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Both agree first.&lt;/strong&gt; Captions don't start until everyone in the room has agreed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A note of what was agreed.&lt;/strong&gt; At the end, Gemma writes a short summary of decisions, action items and dates that you can correct, save or delete.&lt;/li&gt;
&lt;/ul&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%2Fnrlexpyg5luimda6r1jc.png" 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%2Fnrlexpyg5luimda6r1jc.png" alt="The m'aso homepage: " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&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/CyrilBaah" rel="noopener noreferrer"&gt;
        CyrilBaah
      &lt;/a&gt; / &lt;a href="https://github.com/CyrilBaah/m-aso" rel="noopener noreferrer"&gt;
        m-aso
      &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;m’aso&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Make room for every voice.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I used to work on a team where one or two teammates couldn’t hear. In meetings they used captions. When the rest of us wanted to tell them something, we typed what we meant and showed them the screen. That’s where m’aso came from.&lt;/p&gt;
&lt;p&gt;Two people open a private room:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live captions.&lt;/strong&gt; What one person says appears on both screens about a second later, with their name on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typing for everyone.&lt;/strong&gt; Anyone can type a message, and it shows just as large as speech. &lt;strong&gt;Show on screen&lt;/strong&gt; turns the laptop into a full-screen board of huge, high-contrast text: type it, turn it around.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Both of you agree first.&lt;/strong&gt; Captions don’t start until everyone in the room has agreed on the consent screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A note of what was agreed.&lt;/strong&gt; At the end, Gemma writes a short summary — decisions, action items, dates — that…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/CyrilBaah/m-aso" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scripts/setup.sh   &lt;span class="c"&gt;# env files, dependencies, Gemma model (one time)&lt;/span&gt;
scripts/dev.sh     &lt;span class="c"&gt;# Ollama + AI service + web app → http://localhost:3000&lt;/span&gt;
https://m-aso.onrender.com/

&lt;span class="c"&gt;## How I Built It&lt;/span&gt;
Two parts: a Next.js 16 app &lt;span class="k"&gt;for &lt;/span&gt;the screens, and a small Python service &lt;span class="o"&gt;(&lt;/span&gt;FastAPI&lt;span class="o"&gt;)&lt;/span&gt; that holds the rooms and runs the models.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Browser (Next.js)                            AI service (FastAPI)&lt;br&gt;
  microphone → AudioWorklet → 16 kHz PCM ──▶  WebSocket /rooms/{code}/ws&lt;br&gt;
                                               ├─ segmenter: splits speech on pauses&lt;br&gt;
  captions, typed messages, presence ◀─────   ├─ faster-whisper (small.en, int8, CPU)&lt;br&gt;
                                               └─ room hub: broadcasts to everyone&lt;br&gt;
  end of conversation ── POST /summary ────▶  Gemma 3 4B via Ollama → decisions, actions, dates&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


## Why Does Open Innovation Matter?
For one teammate the transcript is how they take part, so faster-whisper and Gemma run on my own laptop instead of a paid third-party API that bills every minute and hears every word. Because the models are open, I could also shape them to the job Gemma always returns the same structured summary and typed lines count as much as speech.


## Prize Categories
**Best Use of Gemma**: Gemma 3 4B, served locally through Ollama, turns the conversation into structured decisions, action items, dates and open questions, with spoken and typed lines treated equally.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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