<?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: Mackenzie</title>
    <description>The latest articles on DEV Community by Mackenzie (@mackenzie-techdocs).</description>
    <link>https://dev.to/mackenzie-techdocs</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%2F3644438%2F84cbba93-697a-4247-a8d4-bdd9da56bf8d.png</url>
      <title>DEV Community: Mackenzie</title>
      <link>https://dev.to/mackenzie-techdocs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mackenzie-techdocs"/>
    <language>en</language>
    <item>
      <title>Call Mac: Patient AI Tech Support for My Mom</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Mon, 05 Oct 2026 02:20:06 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/call-mac-patient-ai-tech-support-for-my-mom-2ccm</link>
      <guid>https://dev.to/mackenzie-techdocs/call-mac-patient-ai-tech-support-for-my-mom-2ccm</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;My mom regularly needs help with technology, and I can usually only help her over the phone.&lt;/p&gt;

&lt;p&gt;The hard part is figuring out what she sees. I’m describing a button while she’s looking at a different screen, or explaining a step that assumes something she hasn’t learned yet. A small technical problem becomes a long conversation.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Call Mac&lt;/strong&gt; to give her patient guidance when I can’t be beside her.&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%2Frzqn1v34gh9lgnfk1v8z.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%2Frzqn1v34gh9lgnfk1v8z.png" alt="Call Mac Home Screen" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;She describes a problem in her own words. Call Mac offers one manageable next step, then waits for her response: &lt;strong&gt;Fixed it&lt;/strong&gt;, &lt;strong&gt;Still broken&lt;/strong&gt;, or &lt;strong&gt;I don’t understand&lt;/strong&gt;. She can also describe what happened or what she sees.&lt;/p&gt;

&lt;p&gt;That feedback shapes the next response. The assistant can ask for missing context, explain an instruction, or change approach instead of continuing through a generic checklist.&lt;/p&gt;

&lt;p&gt;Saved profiles remember devices and technical comfort. Confirmed fixes stay in local memory, so future conversations can draw on what worked before. Guest mode lets someone try it without saving a profile.&lt;/p&gt;

&lt;p&gt;I wanted to build something around the way my mom needs help: clear instructions, room to ask questions, and patience when the first attempt doesn’t work.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://youtu.be/4DAJSamZxpw" rel="noopener noreferrer"&gt;Watch the Call Mac video demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://mso-docs.github.io/Call-Mac/" rel="noopener noreferrer"&gt;GitHub Pages demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The local application includes saved profiles and remembered fixes.&lt;/p&gt;

&lt;p&gt;The repository also includes a separate browser demo with a labeled fictional walkthrough and an option to connect directly to the visitor’s own Ollama installation. That version keeps conversations in the current tab and does not include persistent memory.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/mso-docs/Call-Mac" rel="noopener noreferrer"&gt;View Call Mac on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The repository includes installation guides, screenshots, automated tests, and fictional scenarios for evaluating model behavior.&lt;/p&gt;

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

&lt;p&gt;Call Mac uses &lt;strong&gt;Python, Streamlit, SQLite, Pydantic, and Gemma through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Gemma handles the contextual conversation. Each request includes the user’s problem, device profile, previous attempts, observations, and relevant remembered fixes. The model chooses whether to ask a question, give an instruction, explain an existing step, or change approach.&lt;/p&gt;

&lt;p&gt;I used &lt;strong&gt;&lt;code&gt;gemma2:9b&lt;/code&gt; for most of my experiments&lt;/strong&gt;. The application defaults to &lt;strong&gt;&lt;code&gt;gemma3:4b&lt;/code&gt;&lt;/strong&gt; as a smaller starting point for users, and supports selecting other installed Gemma models.&lt;/p&gt;

&lt;p&gt;I request structured responses through Ollama and validate them with Pydantic before displaying them. Invalid output gets one retry. The application also rejects exact and near-identical failed instructions, although it cannot reliably detect every semantic repetition.&lt;/p&gt;

&lt;p&gt;Successful fixes are stored in SQLite and retrieved through keyword overlap. They are presented to the model as previous experiences, not guaranteed solutions.&lt;/p&gt;

&lt;p&gt;Feedback is saved before the next inference request. If the model server fails, the user can retry without losing what they already reported.&lt;/p&gt;

&lt;p&gt;Recognized liquid-damage situations have explicit safety routing that takes priority over ordinary troubleshooting.&lt;/p&gt;

&lt;p&gt;The readiness review passed &lt;strong&gt;44 Python tests&lt;/strong&gt; and browser integration checks covering validation, retries, privacy behavior, and mobile layout. These checks use controlled responses: they verify application behavior, not the correctness of every model answer.&lt;/p&gt;

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

&lt;p&gt;Tech-support conversations can contain personal information: device details, filenames, and descriptions of what someone sees on their screen.&lt;/p&gt;

&lt;p&gt;Gemma’s open weights and Ollama make it possible to run inference on the same computer that stores those conversations. After downloading dependencies and model weights, that setup can work without a hosted AI service or per-request API payments.&lt;/p&gt;

&lt;p&gt;For a tool built for my mom, that control matters. I can inspect and change the prompts, adjust the response rules, and replace the model without rebuilding the application around a different provider.&lt;/p&gt;

&lt;p&gt;A closed API could power a similar interface, but it would introduce an external inference dependency. Local inference gives Call Mac a useful alternative.&lt;/p&gt;

&lt;p&gt;There are still boundaries: SQLite is unencrypted, and choosing a remote Ollama server sends conversation context to that server. Those details are documented.&lt;/p&gt;

&lt;p&gt;Call Mac is an MVP. It accepts text, cannot inspect the device, and can give incorrect advice. My next priority is trying it with my mom and discovering which instructions still assume too much.&lt;/p&gt;

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

&lt;p&gt;I used Codex to review the repository, run automated checks, investigate the browser-demo deployment, and help draft this submission.&lt;/p&gt;

&lt;p&gt;The session below contains curated excerpts from that final review. It does not include the earlier implementation history. Private machine paths and credentials were omitted.&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Codex"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Call Mac: challenge readiness review and submission writeup&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;is this repo ready to go? i also need a writeup for the challenge but it doesnt need to be commited here:&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I’ll check the repo’s setup, demo workflow, and validation, then draft a challenge writeup you can paste into DEV. I’ll use the DevRelay challenge and community skills to check the submission requirements and inform the review.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The main release blocker is that nearly all the app files are still untracked; the committed repo currently contains only the README and agent instructions. The project fits the open-weight AI requirement, but the writeup needs a true account of one specific person it’s for. The deadline is October 5 at 2:59 AM Eastern.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;My mom; she always needs help with technology and it is hard because I can only provide help over the phone&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python -m unittest discover -s tests -q&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python -m unittest discover -s tests -q&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Ran 44 tests in 8.169s
OK&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python tools/export_demo_contract.py --check&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python tools/export_demo_contract.py --check&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Demo prompt and schema match the Python app.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python -m pip check&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python -m pip check&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;No broken requirements found.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I see the app has now been committed and pushed, and the Pages deployment is running—that clears the missing-code blocker. The secret scan found no leaks in the publishable files. There’s no LICENSE file yet; I recommend choosing one so others have permission to reuse the code. The writeup will use the existing video link while Pages finishes deploying.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-execcommand"&gt;exec_command&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;python tests/browser_demo.py&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ python tests/browser_demo.py&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Browser demo checks passed: sample, live API flow, validation, retries, privacy, safety, and mobile layout.&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The repo is ready for a challenge submission using your video demo. The browser demo isn’t deployed yet. The Pages workflow passed its tests but failed because Pages isn’t enabled. In Settings → Pages → Source, select GitHub Actions, then rerun it. You can submit with the video without waiting for Pages. I also recommend adding a LICENSE. Live model quality wasn’t revalidated in this review.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        8 of 8 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://dev.to/agent_sessions/call-mac-challenge-readiness-review-and-submission-writeup-gvripc"&gt;View the review session&lt;/a&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;Gemma powers Call Mac’s contextual troubleshooting, follow-up questions, and explanations. Most of my experimentation used &lt;code&gt;gemma2:9b&lt;/code&gt;; the app ships with &lt;code&gt;gemma3:4b&lt;/code&gt; as its default.&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Hello World!</title>
      <dc:creator>Mackenzie</dc:creator>
      <pubDate>Tue, 16 Dec 2025 16:52:39 +0000</pubDate>
      <link>https://dev.to/mackenzie-techdocs/hello-world-2pnj</link>
      <guid>https://dev.to/mackenzie-techdocs/hello-world-2pnj</guid>
      <description>&lt;p&gt;Hope to build exciting things here! Looking forward to learning with everyone here!&lt;/p&gt;

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