<?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: Lamani</title>
    <description>The latest articles on DEV Community by Lamani (@lamanitoure).</description>
    <link>https://dev.to/lamanitoure</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%2F4145818%2F3695395f-2183-46eb-9ea1-a1e067362b7f.png</url>
      <title>DEV Community: Lamani</title>
      <link>https://dev.to/lamanitoure</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lamanitoure"/>
    <language>en</language>
    <item>
      <title>Tiens Bon: I built a local-first, privacy-focused AI companion to help my cousin quit smoking</title>
      <dc:creator>Lamani</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:41:15 +0000</pubDate>
      <link>https://dev.to/lamanitoure/tiens-bon-i-built-a-local-first-privacy-focused-ai-companion-to-help-my-cousin-quit-smoking-1p9n</link>
      <guid>https://dev.to/lamanitoure/tiens-bon-i-built-a-local-first-privacy-focused-ai-companion-to-help-my-cousin-quit-smoking-1p9n</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;Tiens Bon&lt;/strong&gt; for my cousin, who wants to quit smoking.&lt;/p&gt;

&lt;p&gt;"Tiens Bon" means &lt;strong&gt;"hold on"&lt;/strong&gt; in French.&lt;/p&gt;

&lt;p&gt;I wanted to build something that could help him during the difficult moments, not just another app that gives general advice about quitting smoking.&lt;/p&gt;

&lt;p&gt;A craving can last only a few minutes, but those few minutes can be enough to start smoking again.&lt;/p&gt;

&lt;p&gt;So the main idea behind Tiens Bon is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;prepare the help before the craving happens.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The app knows the person's own reasons for quitting, their usual risk moments, their alternatives, their personal phrases and their own resources.&lt;/p&gt;

&lt;p&gt;Before a known risk moment, Tiens Bon can prepare a personal reminder.&lt;/p&gt;

&lt;p&gt;When a craving starts, one tap opens a 3-minute experience with a personal message, a personal photo, a breathing exercise, a grounding challenge and a &lt;strong&gt;10x10 puzzle game&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The game is not just there to make the app fun. It gives the person something simple to focus on while getting through the difficult moment.&lt;/p&gt;

&lt;h3&gt;
  
  
  The AI makes the experience personal
&lt;/h3&gt;

&lt;p&gt;This is where &lt;strong&gt;Gemma&lt;/strong&gt; is important.&lt;/p&gt;

&lt;p&gt;Tiens Bon uses the open-weight &lt;strong&gt;Gemma 2 2B&lt;/strong&gt; model locally through Ollama.&lt;/p&gt;

&lt;p&gt;The model can adapt the messages to the person instead of giving the same text to everybody.&lt;/p&gt;

&lt;p&gt;It can work with things the person has written themselves: their reasons for quitting, their phrases, their triggers, their emotions and what usually helps them.&lt;/p&gt;

&lt;p&gt;For example, after an evening check-in, Gemma can help identify the trigger, emotion and outcome from the person's own words.&lt;/p&gt;

&lt;p&gt;It can also prepare short challenges and encouraging messages in the person's voice.&lt;/p&gt;

&lt;p&gt;So the app is not trying to sound like a doctor or a generic motivational app.&lt;/p&gt;

&lt;p&gt;It tries to sound more like &lt;strong&gt;the person talking to themselves&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That is one of the main reasons I wanted AI in this project.&lt;/p&gt;

&lt;h3&gt;
  
  
  The AI is not in control of everything
&lt;/h3&gt;

&lt;p&gt;I also made an important choice: I did not let the AI decide everything.&lt;/p&gt;

&lt;p&gt;Gemma handles language and personalization.&lt;/p&gt;

&lt;p&gt;Normal application code handles things that need to be reliable, such as streaks, dates, money saved, statistics and learned risk windows.&lt;/p&gt;

&lt;p&gt;The model has no tools and cannot perform actions.&lt;/p&gt;

&lt;p&gt;This makes the AI useful without making the whole application depend on an LLM response.&lt;/p&gt;

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

&lt;p&gt;I recorded a YouTube video showing Tiens Bon and the main user flow.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/QqBx1eo14ek" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The video shows the personalized experience, the craving flow and the 10x10 game.&lt;/p&gt;

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

&lt;p&gt;The complete project is open source on GitHub:&lt;/p&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/Lamanitoure" rel="noopener noreferrer"&gt;
        Lamanitoure
      &lt;/a&gt; / &lt;a href="https://github.com/Lamanitoure/tiens-bon" rel="noopener noreferrer"&gt;
        tiens-bon
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A local-first, privacy-focused anti-craving app built for a friend to quit smoking, powered by open-weight on-device AI and a customizable 10x10 puzzle game.
    &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;Tiens Bon&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Tiens Bon&lt;/strong&gt; (&lt;em&gt;French for "hold on"&lt;/em&gt;) is a local-first, open-weight AI companion for one person who wants to quit smoking at home. It prepares messages in his own voice ahead of time, warns his before his risk moments, shows his own photos and words, and never judges his. Anyone can fork it and make it theirs.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;1. Core Principles &amp;amp; Product Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Before the craving (main value)&lt;/strong&gt;: A reminder arrives &lt;code&gt;10 minutes&lt;/code&gt; (&lt;code&gt;reminderLeadTimeMinutes&lt;/code&gt; in &lt;code&gt;config/app.config.json&lt;/code&gt;) before each personal risk window, written in his voice and pointing to an alternative she chose. &lt;strong&gt;Discreet mode is ON by default&lt;/strong&gt; so lock-screen notifications show neutral text only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;During the craving (instant, &amp;lt;100 ms, 100% offline)&lt;/strong&gt;: One tap (in-app button, PWA home-screen shortcut &lt;code&gt;/?craving=1&lt;/code&gt;, or smartwatch webhook) opens an instant screen with a 3-minute grounding challenge, a message in his voice, one of his personal…&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/Lamanitoure/tiens-bon" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The application is released under the &lt;strong&gt;GPL-3.0&lt;/strong&gt; license.&lt;/p&gt;

&lt;p&gt;Anyone can fork it and customize it for another person.&lt;/p&gt;

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

&lt;p&gt;Tiens Bon is a local-first web application.&lt;/p&gt;

&lt;p&gt;The open-weight model used by the application is &lt;strong&gt;Gemma 2 2B&lt;/strong&gt;, running locally with &lt;strong&gt;Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I use Gemma for four main things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;preparing daily messages and 3-minute challenges&lt;/li&gt;
&lt;li&gt;extracting triggers, emotions and outcomes from check-ins&lt;/li&gt;
&lt;li&gt;turning weekly statistics into a short personal message&lt;/li&gt;
&lt;li&gt;helping organize the person's own phrases and context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model does not generate health facts. The health facts in the app are written and sourced from official health organizations.&lt;/p&gt;

&lt;p&gt;I also did not want the user to wait for an AI call when a craving is happening.&lt;/p&gt;

&lt;p&gt;The craving screen is designed to open immediately and work offline. Pre-generated content and fallback messages are available when the model is not reachable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security was part of the design from the beginning
&lt;/h3&gt;

&lt;p&gt;This app stores very personal information.&lt;/p&gt;

&lt;p&gt;Someone can write about cravings, emotions, habits, difficult moments and personal reasons for quitting.&lt;/p&gt;

&lt;p&gt;I did not want all of that to be sent to a remote AI API.&lt;/p&gt;

&lt;p&gt;Personal data is stored locally in &lt;strong&gt;IndexedDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Backups can be encrypted using &lt;strong&gt;AES-GCM 256-bit&lt;/strong&gt;, with &lt;strong&gt;PBKDF2&lt;/strong&gt; and &lt;strong&gt;HMAC-SHA256&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There is also an optional PIN lock.&lt;/p&gt;

&lt;p&gt;The application validates stored data and AI output, and it has safety checks before showing model-generated content.&lt;/p&gt;

&lt;p&gt;There is even a distress check that happens in normal application code &lt;strong&gt;before an AI call&lt;/strong&gt;. If a distress keyword is detected, the app does not send that text to Gemma and shows the configured support information instead.&lt;/p&gt;

&lt;p&gt;I wanted the AI to be helpful, but I did not want to make it the final authority.&lt;/p&gt;

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

&lt;p&gt;For Tiens Bon, using an open-weight model is not just about the technology.&lt;/p&gt;

&lt;p&gt;It changes what I can build.&lt;/p&gt;

&lt;p&gt;This application deals with personal information. With a closed AI API, I would have to send this information to a service every time I wanted an AI-generated response.&lt;/p&gt;

&lt;p&gt;With Gemma running locally through Ollama, the model can run much closer to the person and their data.&lt;/p&gt;

&lt;p&gt;That makes much more sense for this type of application.&lt;/p&gt;

&lt;p&gt;It also makes the project easier to change.&lt;/p&gt;

&lt;p&gt;Someone can fork Tiens Bon, change the prompts, change the model, change the personal configuration or build a version for another person.&lt;/p&gt;

&lt;p&gt;The project is not locked to one AI provider.&lt;/p&gt;

&lt;p&gt;For me, that is the real value of open innovation here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I can build a personal AI tool without giving up control of the personal data behind it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And because the application is designed around one real person, that control matters.&lt;/p&gt;

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

&lt;p&gt;While I didn't use a single autonomous coding agent session, my development workflow was highly augmented by various AI assistants. &lt;/p&gt;

&lt;p&gt;I combined &lt;strong&gt;GitHub Copilot&lt;/strong&gt; for real-time code completion and boilerplate generation, while utilizing other LLMs (like &lt;strong&gt;ChatGPT and Gemini&lt;/strong&gt;) to brainstorm the app's local architecture, refine prompts for Gemma 2 2B, and help structure the data privacy workflow. This collaborative approach allowed me to build the entire local-first experience efficiently.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;Tiens Bon uses the open-weight &lt;strong&gt;Gemma 2 2B&lt;/strong&gt; model as a core part of the personalized experience.&lt;/p&gt;

&lt;p&gt;Gemma is not just used for a chatbot. It helps prepare the person's messages and challenges, understand their check-ins and adapt the language to their own context.&lt;/p&gt;

&lt;p&gt;The model runs locally through Ollama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Medical Disclaimer:&lt;/strong&gt; This application is for educational and support purposes only and is not a medical device. It does not provide medical advice, diagnosis, or professional treatment. Always consult a physician or qualified healthcare provider for any questions regarding smoking cessation or medical conditions. This application is not designed for managing withdrawal from substances where abrupt cessation can be medically dangerous (e.g., alcohol or benzodiazepines) without strict medical supervision.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Hello DEV! A quick intro from a French-speaking dev</title>
      <dc:creator>Lamani</dc:creator>
      <pubDate>Sun, 27 Sep 2026 18:08:58 +0000</pubDate>
      <link>https://dev.to/lamanitoure/hello-dev-a-quick-intro-from-a-french-speaking-dev-3op5</link>
      <guid>https://dev.to/lamanitoure/hello-dev-a-quick-intro-from-a-french-speaking-dev-3op5</guid>
      <description>&lt;p&gt;Hi everyone! &lt;br&gt;
My name is Lamani. I am a female developer and I am really excited to join the DEV community today! &lt;br&gt;
As French is my native language, my English is still a work in progress (very basic for now!), but I am here to learn, share, and connect with other developers around the world.&lt;br&gt;
Looking forward to reading your posts and sharing my tech journey with you all. &lt;br&gt;
Have a great day!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>community</category>
      <category>developer</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
