<?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: Kholofelo Robyn Rababalela</title>
    <description>The latest articles on DEV Community by Kholofelo Robyn Rababalela (@robynawesome).</description>
    <link>https://dev.to/robynawesome</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%2F3838318%2Fafcf3069-e66c-4f05-9bcd-1df919d78778.png</url>
      <title>DEV Community: Kholofelo Robyn Rababalela</title>
      <link>https://dev.to/robynawesome</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robynawesome"/>
    <language>en</language>
    <item>
      <title>KasiMargin—From Sales to Growth</title>
      <dc:creator>Kholofelo Robyn Rababalela</dc:creator>
      <pubDate>Sun, 18 Oct 2026 21:40:54 +0000</pubDate>
      <link>https://dev.to/robynawesome/kasimargin-2h3j</link>
      <guid>https://dev.to/robynawesome/kasimargin-2h3j</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Three haircuts can make for a busy day. But a busy day does not automatically tell a barber how much money is available to spend tomorrow.&lt;/p&gt;

&lt;p&gt;Imagine two customers pay R50 each in cash, a third pays R50 by card, and the barber spends R20 on supplies.&lt;/p&gt;

&lt;p&gt;That is &lt;strong&gt;R150 in recorded sales&lt;/strong&gt;, but it isn't necessarily R150 in available cash. The card payment might not have settled. Rent may still be due. Other business expenses might be missing.&lt;/p&gt;

&lt;p&gt;That distinction inspired &lt;strong&gt;KasiMargin&lt;/strong&gt;, a local-first financial-clarity prototype for South African owner-operated microbusinesses.&lt;/p&gt;

&lt;p&gt;The idea grows out of a broader question I've been exploring through KasiLink and Kopano Labs: how can small businesses turn the information they already have into better-informed decisions, without needing complicated accounting software?&lt;/p&gt;

&lt;p&gt;KasiMargin currently offers two connected experiences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Record today:&lt;/strong&gt; Enter paid cash or card sales, record cash spending, view daily totals and correct mistakes without erasing the original record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check my money:&lt;/strong&gt; Review counted cash or cleared balances, outstanding obligations, committed spending and money that needs to remain protected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application distinguishes estimated operating margin from conditional cash headroom. When important evidence is missing, the result remains &lt;strong&gt;UNKNOWN/HOLD&lt;/strong&gt;, rather than quietly treating an unknown amount as zero.&lt;/p&gt;

&lt;p&gt;Our latest interface improvement also makes the decision explanation visible, connects the two workflows through simple navigation, and displays previously recorded daily totals as a &lt;strong&gt;read-only reference&lt;/strong&gt;. Recorded sales are never automatically promoted into independently verified cash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who might pay for this?&lt;/strong&gt; An owner-operated barber shop, spaza shop, car wash or food business that finds daily financial clarity useful enough to return to. That is our proposed customer, not a proven commercial result. We have not yet completed a real operator trial or demonstrated willingness to pay.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/RobynAwesome/KasiMargin/blob/main/docs/demo/KasiMargin-synthetic-demo.mp4" rel="noopener noreferrer"&gt;Watch the 97-second synthetic KasiMargin demonstration&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://raw.githubusercontent.com/RobynAwesome/KasiMargin/main/docs/demo/KasiMargin-synthetic-demo.mp4" rel="noopener noreferrer"&gt;Direct video file&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The recording demonstrates actual local browser interaction with fictional barber records: entering sales, recording spending, correcting an amount and inspecting the separate financial-check workflow.&lt;/p&gt;

&lt;p&gt;Correcting one R50 cash haircut to R60 changes recorded sales from R150 to R160 while retaining the earlier entry's history.&lt;/p&gt;

&lt;p&gt;The video has captions and no audio. It was recorded before the latest interface improvement and demonstrates the earlier deterministic explanation experience. &lt;strong&gt;It is not a recording of new live Gemma inference.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/RobynAwesome/KasiMargin" rel="noopener noreferrer"&gt;Explore KasiMargin on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project was created during the October 12–18 challenge window.&lt;/p&gt;

&lt;p&gt;The submitted source baseline is &lt;a href="https://github.com/RobynAwesome/KasiMargin/tree/85d3cc9398701c451734eafe62aa1d15770fc6d1" rel="noopener noreferrer"&gt;&lt;code&gt;main@85d3cc9&lt;/code&gt;&lt;/a&gt;, with a &lt;a href="https://github.com/RobynAwesome/KasiMargin/actions/runs/39166865463" rel="noopener noreferrer"&gt;successful GitHub Actions run&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The latest operator-experience improvements were introduced through &lt;a href="https://github.com/RobynAwesome/KasiMargin/pull/8" rel="noopener noreferrer"&gt;PR #8&lt;/a&gt;, followed by documentation alignment in &lt;a href="https://github.com/RobynAwesome/KasiMargin/pull/9" rel="noopener noreferrer"&gt;PR #9&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The project code is MIT-licensed. Gemma model weights remain subject to their own terms. Development involved AI-assisted coding, and this is a solo project submission.&lt;/p&gt;

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

&lt;p&gt;KasiMargin combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python and Flask&lt;/strong&gt; for the local service and deterministic financial calculations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; for revisioned, operator-reported transaction history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; for the browser experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemma 4 E2B&lt;/strong&gt;, accessed through local Ollama, as an optional constrained explanation selector.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An important design decision is that &lt;strong&gt;Gemma does not perform the financial arithmetic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The financial engine computes values using exact integer cents, handles incomplete evidence and produces required warnings. Gemma receives a permitted catalogue of facts, warnings and possible actions, then selects identifiers within that catalogue.&lt;/p&gt;

&lt;p&gt;Its selections undergo validation before a trusted renderer produces the final explanation. The model cannot invent new amounts, change ledger entries or authorise purchases. If inference fails, the system uses a clearly labelled deterministic fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  What did Gemma actually contribute?
&lt;/h3&gt;

&lt;p&gt;We completed a recorded local evaluation across seven synthetic financial scenarios, with three model calls per scenario.&lt;/p&gt;

&lt;p&gt;The results were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;21/21 model selections admitted&lt;/strong&gt; under the output contract.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;18/21 selections identical&lt;/strong&gt; to the deterministic baseline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3/21 selections different&lt;/strong&gt;, all involving an uncollected-credit scenario.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In that scenario, Gemma selected &lt;code&gt;preserve_headroom&lt;/code&gt; but omitted another permitted action, &lt;code&gt;compare_restock_quote&lt;/code&gt;. Required financial amounts and warnings remained unchanged.&lt;/p&gt;

&lt;p&gt;These results demonstrate bounded local inference, not proven improvements in financial understanding.&lt;/p&gt;

&lt;p&gt;The recorded warm median inference time was approximately five seconds, while the cold median was approximately 89 seconds. This exposes a real hardware and responsiveness trade-off.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RobynAwesome/KasiMargin/blob/main/docs/GEMMA-TECHNICAL-EVALUATION.md" rel="noopener noreferrer"&gt;Read the complete Gemma technical evaluation&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;A financial-clarity application for a small business should be inspectable, reproducible and careful about the information it is trusted with.&lt;/p&gt;

&lt;p&gt;Running an open-weight model locally gives us a way to experiment with explanations without sending the inference payload to a hosted model API. It also lets us compare model behavior against deterministic output, identify failures and question whether the AI genuinely adds value.&lt;/p&gt;

&lt;p&gt;There are trade-offs. Local model weights require storage and memory, cold inference can be slow, and an open model does not automatically produce better financial guidance.&lt;/p&gt;

&lt;p&gt;For KasiMargin, open innovation matters because it allows us to investigate personalized intelligence while keeping financial calculations, provenance and human decision authority separate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned and What Comes Next
&lt;/h2&gt;

&lt;p&gt;The first interface was too technical. It displayed financial terminology and implementation details before answering what the business operator actually needed to understand.&lt;/p&gt;

&lt;p&gt;The later design moved toward everyday tasks, visible financial explanations and a more direct connection between recording activity and reviewing money.&lt;/p&gt;

&lt;p&gt;But I want to take the product further.&lt;/p&gt;

&lt;p&gt;South African microbusinesses operate across different languages, sectors and working conditions. My longer-term direction is to investigate &lt;strong&gt;visual-first, accessible and context-aware financial intelligence&lt;/strong&gt;, with optional language and voice support where those capabilities genuinely help.&lt;/p&gt;

&lt;p&gt;That direction is not implemented functionality today.&lt;/p&gt;

&lt;p&gt;The next important experiment is a consented operator walkthrough. Can a barber record a sale, correct a mistake and explain the difference between recorded sales and available money without coaching? Does the experience fit their working routine? Does Gemma's explanation improve understanding compared with the deterministic version?&lt;/p&gt;

&lt;p&gt;Those are questions for real users, not assumptions we can settle with synthetic tests.&lt;/p&gt;

&lt;p&gt;KasiMargin does not currently verify bank balances or card settlement, scan receipts, provide unrestricted financial advice or demonstrate measurable economic impact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The purpose of this first version is to build a trustworthy foundation for financial understanding, then allow the people who use it to help shape what comes next.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;KasiMargin includes a locally evaluated Gemma 4 E2B integration with constrained output selection, explicit validation and deterministic fallback. Its incremental benefit to operator comprehension remains unmeasured.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Paws &amp; Potjie — Comfort Food for the Whole Pack 🐾🫕</title>
      <dc:creator>Kholofelo Robyn Rababalela</dc:creator>
      <pubDate>Mon, 17 Aug 2026 07:00:11 +0000</pubDate>
      <link>https://dev.to/robynawesome/paws-potjie-comfort-food-for-the-whole-pack-35la</link>
      <guid>https://dev.to/robynawesome/paws-potjie-comfort-food-for-the-whole-pack-35la</guid>
      <description>&lt;p&gt;This is a submission for the DEV Weekend Challenge: Dog Days Edition.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Paws &amp;amp; Potjie&lt;/strong&gt;, a South African comfort-food experience designed around dogs and their humans sharing the same social ritual — while keeping their food, interaction logic, and needs deliberately separate.🇿🇦🎢💯 &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>Paws &amp; Potjie — A South African Comfort Kitchen for the Whole Pack 🐾🫕</title>
      <dc:creator>Kholofelo Robyn Rababalela</dc:creator>
      <pubDate>Mon, 17 Aug 2026 06:50:59 +0000</pubDate>
      <link>https://dev.to/robynawesome/paws-potjie-a-south-african-comfort-kitchen-for-the-whole-pack-i9f</link>
      <guid>https://dev.to/robynawesome/paws-potjie-a-south-african-comfort-kitchen-for-the-whole-pack-i9f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&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;Paws &amp;amp; Potjie&lt;/strong&gt;, a fictional South African comfort kitchen for dogs and their humans.&lt;/p&gt;

&lt;p&gt;The experience is built around the warmth of a potjie and the feeling of a long Sunday meal. Instead of making a static restaurant page, I wanted the landing page to feel alive.&lt;/p&gt;

&lt;p&gt;The main interaction is the &lt;strong&gt;Comfort Compass&lt;/strong&gt;: choose the human's mood and the dog's current energy, and the site deterministically pairs a human comfort dish with a separate dog-side bowl.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;React 19&lt;/li&gt;
&lt;li&gt;TypeScript 7&lt;/li&gt;
&lt;li&gt;Vite 8&lt;/li&gt;
&lt;li&gt;Three.js + React Three Fiber/Drei&lt;/li&gt;
&lt;li&gt;Framer Motion&lt;/li&gt;
&lt;li&gt;Adaptive PWA behaviour&lt;/li&gt;
&lt;li&gt;Offline support&lt;/li&gt;
&lt;li&gt;Reduced-motion, Save-Data and WebGL-aware fallbacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 3D potjie hero only loads on capable devices. Lower-resource devices receive a lightweight CSS version instead, so immersion does not come at the expense of usability.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live browser demo:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://stackblitz.com/github/RobynAwesome/paws-and-potjie?startScript=stackblitz" rel="noopener noreferrer"&gt;https://stackblitz.com/github/RobynAwesome/paws-and-potjie?startScript=stackblitz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/RobynAwesome/paws-and-potjie" rel="noopener noreferrer"&gt;https://github.com/RobynAwesome/paws-and-potjie&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;I wanted the project to feel distinctly South African rather than like another generic restaurant template.&lt;/p&gt;

&lt;p&gt;That led to a visual language built around potjie culture, warm maize yellow, veld green, tomato red, cream surfaces, shared meals and dogs being part of the table rather than an afterthought.&lt;/p&gt;

&lt;p&gt;The most important technical decision was making the immersive layer adaptive.&lt;/p&gt;

&lt;p&gt;The runtime classifies the experience as &lt;code&gt;lite&lt;/code&gt;, &lt;code&gt;balanced&lt;/code&gt;, or &lt;code&gt;full&lt;/code&gt;. A capable device gets the interactive Three.js potjie scene, while constrained devices, Save-Data users, reduced-motion users, or browsers without WebGL keep the lightweight experience.&lt;/p&gt;

&lt;p&gt;I'm especially proud that the 3D is not just decoration. Its rendering budget, motion, DPR and fallback behaviour are governed by the user's device and preferences.&lt;/p&gt;

&lt;p&gt;The project was built with AI-assisted engineering under my direction, while the concept, product decisions, constraints and final acceptance remained human-directed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built in Cape Town, South Africa 🇿🇦&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
