<?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: Chima</title>
    <description>The latest articles on DEV Community by Chima (@therichworth).</description>
    <link>https://dev.to/therichworth</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%2F4231036%2Ffb886f2b-ef16-48ef-a43b-fc47788ee0f8.jpg</url>
      <title>DEV Community: Chima</title>
      <link>https://dev.to/therichworth</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/therichworth"/>
    <language>en</language>
    <item>
      <title>SOVA — A Focus and Recovery App That Notices Your Breathing Before You Do</title>
      <dc:creator>Chima</dc:creator>
      <pubDate>Sat, 14 Nov 2026 00:33:53 +0000</pubDate>
      <link>https://dev.to/therichworth/sova-a-focus-and-recovery-app-that-notices-your-breathing-before-you-do-1a0b</link>
      <guid>https://dev.to/therichworth/sova-a-focus-and-recovery-app-that-notices-your-breathing-before-you-do-1a0b</guid>
      <description>&lt;p&gt;&lt;em&gt;This is my submission for the &lt;a href="https://dev.to/challenges/presage-2026-11-04"&gt;Presage SmartSpectra SDK Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I spend a lot of time on my laptop. Some days I'm studying, writing code, working on projects or trying to finish something before a deadline.&lt;/p&gt;

&lt;p&gt;When I'm really focused, I tend to forget everything else, I'll sit for hours without taking a proper break, sometimes my breathing becomes faster, I barely blink, and I don't even notice how tired I am until I finally stop working&lt;/p&gt;

&lt;p&gt;I wanted to do something about that&lt;/p&gt;

&lt;p&gt;A regular focus timer can remind me that 25 minutes have passed, but it doesn't know what's happening while I'm working. Breathing apps can help me slow down, but I still have to remember to open them&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;SOVA&lt;/strong&gt;, a desktop application that combines a focus timer with live breathing and cardiovascular measurements.&lt;/p&gt;

&lt;p&gt;SOVA uses the &lt;strong&gt;Presage SmartSpectra SDK&lt;/strong&gt; to measure breathing rate, pulse and heart rate variability (HRV) through an ordinary webcam. No smartwatch or additional sensor is required.&lt;/p&gt;

&lt;p&gt;It learns your personal baseline, looks for sustained changes during a focus session, and can suggest a short breathing reset or an eye rest when appropriate.&lt;/p&gt;

&lt;p&gt;It doesn't tell you that you're stressed, unhealthy or unproductive. It simply helps you notice what has changed and gives you the choice to take a break.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdo7ndbhf5cns4osvvta7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdo7ndbhf5cns4osvvta7.gif" alt="A live SOVA focus session" width="600" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live measurements from the Presage SmartSpectra SDK. The heart responds to the measured pulse, while the breathing line follows the live breathing signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  The moment I designed SOVA for
&lt;/h3&gt;

&lt;p&gt;Imagine you're 40 minutes into a difficult task.&lt;/p&gt;

&lt;p&gt;You've been concentrating on the same problem for a while. Your breathing has gradually become faster, but you haven't noticed because you're busy working.&lt;/p&gt;

&lt;p&gt;SOVA has already learned your usual breathing rate during the first part of the session.&lt;/p&gt;

&lt;p&gt;When your breathing stays noticeably above that baseline for several minutes, SOVA doesn't immediately interrupt you. It waits for a suitable moment, such as a pause in your typing, before suggesting a 60-second breathing reset.&lt;/p&gt;

&lt;p&gt;You can accept it, postpone it or continue working.&lt;/p&gt;

&lt;p&gt;If you choose the reset, SOVA guides you through the breathing exercise. Afterwards, it compares reliable measurements from before and after the break.&lt;/p&gt;

&lt;p&gt;You can see what changed without being given a stress score or a medical interpretation.&lt;/p&gt;

&lt;p&gt;That's the experience I wanted to build: something that works alongside me, rather than another application demanding my attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Using SOVA Looks Like
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Starting with consent
&lt;/h3&gt;

&lt;p&gt;When SOVA opens for the first time, it explains why it needs your camera, what information is stored and how the SmartSpectra SDK handles measurements.&lt;/p&gt;

&lt;p&gt;Nothing is measured until you give permission.&lt;/p&gt;

&lt;p&gt;If you don't want to use the camera, you can still use SOVA as a normal focus timer.&lt;/p&gt;

&lt;p&gt;On the Home screen, you can also describe how you're feeling before starting work. You might choose Calm, Focused, Tense, Tired or Scattered.&lt;/p&gt;

&lt;p&gt;These are your own reflections. SOVA doesn't attempt to guess your emotions from your pulse.&lt;/p&gt;

&lt;p&gt;The dashboard shows your focus time, breaks, resets and eye rests. There are no productivity scores or streaks to maintain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checking your signals in 60 seconds
&lt;/h3&gt;

&lt;p&gt;I wanted people to experience the SmartSpectra integration without having to start a full focus session.&lt;/p&gt;

&lt;p&gt;That's why I added &lt;strong&gt;Check your signals&lt;/strong&gt; to the Home screen.&lt;/p&gt;

&lt;p&gt;It's a quick check-in that measures available physiological signals through your webcam.&lt;/p&gt;

&lt;p&gt;SOVA displays breathing rate, pulse and HRV when the readings are reliable. It also shows which signals are still being collected or aren't reliable enough to display.&lt;/p&gt;

&lt;p&gt;HRV needs a longer measurement window, so the check-in can allow up to 30 additional seconds when necessary. If the reading still isn't ready, SOVA explains that instead of inventing a value.&lt;/p&gt;

&lt;p&gt;The results are saved in History.&lt;/p&gt;

&lt;p&gt;After you've completed enough check-ins, SOVA can also show your personal usual range, based on your previous reliable measurements.&lt;/p&gt;

&lt;p&gt;For example, you might see:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your usual breathing: 12–15 breaths/min&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today's reading: 17 breaths/min&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are personal comparisons, not medical reference ranges.&lt;/p&gt;

&lt;p&gt;You can also compare a check-in with your previous one and optionally record how you're feeling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Starting a focus session
&lt;/h3&gt;

&lt;p&gt;SOVA includes presets for Deep Work, Studying, Reading, Creative Work and General Work.&lt;/p&gt;

&lt;p&gt;Before a session starts, it checks your camera setup and gives simple instructions.&lt;/p&gt;

&lt;p&gt;For more reliable measurements, it recommends keeping your laptop steady, using even lighting and making sure your face and upper body are visible.&lt;/p&gt;

&lt;p&gt;During the first two minutes of a regular session, SOVA gathers reliable readings to establish your baseline.&lt;/p&gt;

&lt;p&gt;That reference is used to evaluate changes during the session.&lt;/p&gt;

&lt;h3&gt;
  
  
  Watching your readings live
&lt;/h3&gt;

&lt;p&gt;I didn't want SOVA to feel like a medical dashboard full of numbers.&lt;/p&gt;

&lt;p&gt;I wanted the information to be understandable at a glance.&lt;/p&gt;

&lt;p&gt;A 3D heart in the session screen responds to your measured pulse.&lt;/p&gt;

&lt;p&gt;When the SDK hasn't provided a reliable pulse reading, the heart remains grey and still.&lt;/p&gt;

&lt;p&gt;Once a reliable reading becomes available, the heart turns red and starts beating at the measured rate.&lt;/p&gt;

&lt;p&gt;Your breathing is represented by an orange waveform that responds to the breathing signal provided by the SDK.&lt;/p&gt;

&lt;p&gt;Other cards show available breathing, pulse, HRV and inhale-to-exhale information.&lt;/p&gt;

&lt;p&gt;One rule I followed throughout development was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If the SDK cannot provide a reliable reading, SOVA should not pretend that it can.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead, it displays messages like "Waiting for a reading" or "Signal too weak to show."&lt;/p&gt;

&lt;h3&gt;
  
  
  Taking a break when it makes sense
&lt;/h3&gt;

&lt;p&gt;SOVA compares live readings against the personal baseline established earlier in the session.&lt;/p&gt;

&lt;p&gt;For its standard sensitivity setting, it looks for sustained changes such as faster breathing, a higher pulse or lower HRV relative to that baseline.&lt;/p&gt;

&lt;p&gt;These are application-defined rules for offering a break, not medical thresholds.&lt;/p&gt;

&lt;p&gt;A single unusual reading doesn't trigger a suggestion. The change needs to persist over a period of time.&lt;/p&gt;

&lt;p&gt;I also made sure SOVA considers whether a reminder would be inconvenient.&lt;/p&gt;

&lt;p&gt;For example, it can hold reminders back when you're talking, when you've marked yourself as "in flow", or when you've stepped away.&lt;/p&gt;

&lt;p&gt;On desktop, it can wait for a pause in typing before showing a suggestion.&lt;/p&gt;

&lt;p&gt;There are adjustable sensitivity settings and cooldowns between reminders.&lt;/p&gt;

&lt;p&gt;I wanted users to have control over the experience rather than feel constantly monitored by their own focus application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Guided breathing and recovery
&lt;/h3&gt;

&lt;p&gt;The Recovery section includes several breathing patterns, such as slower paced breathing, box breathing and 4-7-8 breathing.&lt;/p&gt;

&lt;p&gt;You can choose a short reset or a longer breathing session.&lt;/p&gt;

&lt;p&gt;SOVA displays a breathing guide alongside your live breathing waveform when reliable data is available.&lt;/p&gt;

&lt;p&gt;There are also quick resets for moments when you need a short pause between tasks or meetings.&lt;/p&gt;

&lt;p&gt;An optional microphone feature can listen for audible breathing during a reset, after separate permission.&lt;/p&gt;

&lt;p&gt;It uses the sound to estimate breath timing and exhale length without recording or saving the audio.&lt;/p&gt;

&lt;p&gt;Once a reset is complete, SOVA can compare reliable readings taken before and after.&lt;/p&gt;

&lt;p&gt;If it doesn't have enough information for a meaningful comparison, it tells you.&lt;/p&gt;

&lt;h3&gt;
  
  
  History, insights and personal patterns
&lt;/h3&gt;

&lt;p&gt;At the end of a session, SOVA gives you the option to describe how the session felt.&lt;/p&gt;

&lt;p&gt;You can then review a summary of your focus time, breaks, resets and available before-and-after measurements.&lt;/p&gt;

&lt;p&gt;The session timeline shows when important events happened.&lt;/p&gt;

&lt;p&gt;History keeps your focus sessions, breathing exercises and signal check-ins together.&lt;/p&gt;

&lt;p&gt;The Insights section looks for patterns in your own recorded sessions, including how your readings and focus habits change over time.&lt;/p&gt;

&lt;p&gt;SOVA only introduces personal ranges and pattern observations when enough reliable history has been collected.&lt;/p&gt;

&lt;p&gt;You can also save or copy a session card that includes your focus information and breathing visualization.&lt;/p&gt;

&lt;p&gt;The point isn't to turn every session into a score. It's to help you understand your own habits a little better.&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Watch the demo:&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=zsqQYHev2NM" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=zsqQYHev2NM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video shows SOVA using real measurements from the Presage SmartSpectra SDK.&lt;/p&gt;

&lt;p&gt;I intentionally included moments where the SDK couldn't produce a reliable measurement because I think those moments are just as important as successful readings.&lt;/p&gt;

&lt;p&gt;At the beginning of the live session, the heart remains grey while SOVA waits for a usable signal.&lt;/p&gt;

&lt;p&gt;When the SDK reports a reliable pulse of 92 beats per minute, the heart turns red and begins beating at the measured rate.&lt;/p&gt;

&lt;p&gt;Later, the camera conditions become less suitable. The SDK reports a quality problem, and SOVA stops displaying the unreliable pulse reading.&lt;/p&gt;

&lt;p&gt;Once the signal improves, the breathing rate becomes available at around 18 breaths per minute, with the breathing line updating on screen.&lt;/p&gt;

&lt;p&gt;The demo also shows a pulse reading of 83 bpm compared with a personal session baseline of 73 bpm.&lt;/p&gt;

&lt;p&gt;At the same moment, HRV is too weak to display.&lt;/p&gt;

&lt;p&gt;Instead of filling the card with a guessed value, SOVA reports that the signal isn't reliable enough.&lt;/p&gt;

&lt;p&gt;The video also shows &lt;strong&gt;"What SOVA sees,"&lt;/strong&gt; a section where the user can inspect the actual SDK fields, confidence information and decisions made by SOVA.&lt;/p&gt;

&lt;p&gt;This is one of the parts I'm most pleased with because it makes the integration visible rather than hiding everything behind the interface.&lt;/p&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/Chima30" rel="noopener noreferrer"&gt;
        Chima30
      &lt;/a&gt; / &lt;a href="https://github.com/Chima30/sova" rel="noopener noreferrer"&gt;
        sova
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A focus and recovery app that uses webcam-based breathing and pulse measurements to suggest timely breaks and show what changes after a reset. Built with the Presage SmartSpectra SDK.
    &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;SOVA&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;When I spend hours studying or coding, I often don't notice my breathing getting faster or how long I've gone without a break until I'm already tired.&lt;/p&gt;
&lt;p&gt;I built &lt;strong&gt;SOVA&lt;/strong&gt; to help with that. It's a desktop focus app that uses your webcam and &lt;a href="https://smartspectra.presagetech.com/docs" rel="nofollow noopener noreferrer"&gt;Presage's SmartSpectra SDK&lt;/a&gt; to measure breathing, pulse and heart rate variability (HRV) while you work. It learns your baseline, suggests a short reset when reliable readings show a lasting change, and compares your measurements before and after.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Chima30/sova/docs/media/sova-live.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2FChima30%2Fsova%2FHEAD%2Fdocs%2Fmedia%2Fsova-live.gif" alt="A live SOVA focus session, showing the breathing waveform and pulse-driven heart"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Live camera measurements from SmartSpectra. The heart beats at the measured pulse, and the orange line follows the breathing signal. Recorded with &lt;code&gt;npm run demo&lt;/code&gt;, which shortens waiting periods without faking readings.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=zsqQYHev2NM" rel="nofollow noopener noreferrer"&gt;Watch the demo&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/Chima30/sova/releases/latest" rel="noopener noreferrer"&gt;Get SOVA&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Inspiration&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;A regular timer tells me when to stop, but it can't tell whether I've been breathing faster than usual or missing breaks. Breathing apps can help, but I…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Chima30/sova" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/Chima30/sova" rel="noopener noreferrer"&gt;https://github.com/Chima30/sova&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SOVA's application code is open source under the MIT License. The SmartSpectra SDK itself remains under Presage's own license and terms.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to run SOVA
&lt;/h3&gt;

&lt;p&gt;You can download a desktop installer from the &lt;a href="https://github.com/Chima30/sova/releases/latest" rel="noopener noreferrer"&gt;GitHub Releases page&lt;/a&gt;, or run the application directly from the source code.&lt;/p&gt;

&lt;p&gt;You'll need a webcam, Node.js 20 or later if running from source, and a free Presage API key.&lt;/p&gt;

&lt;p&gt;To get an API key, visit the &lt;a href="https://physiology.presagetech.com/auth/register" rel="noopener noreferrer"&gt;Presage developer portal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Clone the repository and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Chima30/sova.git
&lt;span class="nb"&gt;cd&lt;/span&gt; sova
npm install
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the application opens, review the consent screen and enter your Presage API key in Settings.&lt;/p&gt;

&lt;p&gt;No SOVA account is required.&lt;/p&gt;

&lt;p&gt;If you want to test the experience more quickly, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Demo mode shortens the waiting periods used for baseline collection and reminders, but it still uses real SDK readings.&lt;/p&gt;

&lt;p&gt;The project also includes automated checks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt;
npm run smoke
npm run smoke:checkin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These cover core application rules and Electron interface flows.&lt;/p&gt;

&lt;h3&gt;
  
  
  The quickest way to try the SDK integration
&lt;/h3&gt;

&lt;p&gt;After setting up your API key, open Home and select &lt;strong&gt;Start 60-second check-in&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;SOVA will begin collecting available signals and show their status as measurements become ready.&lt;/p&gt;

&lt;p&gt;You can also open "What SOVA sees" to inspect the actual SDK values and see why individual readings are accepted or held back.&lt;/p&gt;

&lt;p&gt;If you'd rather test the full focus experience, open Focus, choose a preset and start a session.&lt;/p&gt;

&lt;p&gt;Let SOVA establish your baseline, then try a guided reset and review the comparison afterwards.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Responds to Human Signals
&lt;/h2&gt;

&lt;p&gt;The SmartSpectra SDK is the foundation of SOVA's live measurement features.&lt;/p&gt;

&lt;p&gt;I built SOVA with Electron and use &lt;code&gt;@smartspectra/node-sdk&lt;/code&gt; version 3.4.0.&lt;/p&gt;

&lt;p&gt;The SDK runs in Electron's main process, where it handles camera measurement and produces physiological signals.&lt;/p&gt;

&lt;p&gt;Those results pass through SOVA's own processing rules before being displayed or used for reminders.&lt;/p&gt;

&lt;h3&gt;
  
  
  Signals used in SOVA
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SmartSpectra signal&lt;/th&gt;
&lt;th&gt;How SOVA responds&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Breathing rate&lt;/td&gt;
&lt;td&gt;Builds a personal baseline, checks for sustained changes and supports recovery comparisons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breathing waveform&lt;/td&gt;
&lt;td&gt;Draws the live breathing visualization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pulse&lt;/td&gt;
&lt;td&gt;Controls the animated heart and contributes to baseline comparisons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heart rate variability (HRV)&lt;/td&gt;
&lt;td&gt;Provides another personal comparison when the measurement is reliable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blink detection&lt;/td&gt;
&lt;td&gt;Supports eye-rest suggestions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Talking detection&lt;/td&gt;
&lt;td&gt;Helps delay reminders during conversations or meetings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation and signal quality&lt;/td&gt;
&lt;td&gt;Explains when lighting, movement or camera conditions affect measurement quality&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How the measurements reach the interface
&lt;/h3&gt;

&lt;p&gt;The main integration is in &lt;a href="https://github.com/Chima30/sova/blob/main/src/main/nativeMeasurement.js" rel="noopener noreferrer"&gt;&lt;code&gt;src/main/nativeMeasurement.js&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This module initializes the SDK, requests the required metric groups, starts camera measurement and handles incoming SDK events.&lt;/p&gt;

&lt;p&gt;The renderer receives the measurement results through Electron's application bridge.&lt;/p&gt;

&lt;p&gt;SOVA then applies its own rules for deciding whether readings are reliable enough to display.&lt;/p&gt;

&lt;p&gt;Those rules live in &lt;a href="https://github.com/Chima30/sova/blob/main/shared/core/signals.js" rel="noopener noreferrer"&gt;&lt;code&gt;shared/core/signals.js&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For example, SOVA considers whether a reading has completed its measurement window, whether the SDK marks it as stable, whether its confidence meets the configured threshold and whether it is recent enough to use.&lt;/p&gt;

&lt;p&gt;If any of those checks fail, the reading is held back.&lt;/p&gt;

&lt;p&gt;I deliberately separated these checks from the user interface so I could test the behaviour independently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using personal baselines instead of population ranges
&lt;/h3&gt;

&lt;p&gt;One of the main design choices was to compare users with their own readings.&lt;/p&gt;

&lt;p&gt;During the beginning of a session, SOVA builds a personal baseline using reliable measurements.&lt;/p&gt;

&lt;p&gt;The cue engine then looks for sustained changes relative to that baseline.&lt;/p&gt;

&lt;p&gt;Under the standard configuration, these include breathing more than 20% above baseline, pulse more than 8 bpm above baseline, or HRV more than 25% below baseline.&lt;/p&gt;

&lt;p&gt;The engine considers readings across a three-minute window rather than reacting to a single measurement.&lt;/p&gt;

&lt;p&gt;Users can also change sensitivity and reminder timing in Settings.&lt;/p&gt;

&lt;p&gt;The relevant logic is implemented in &lt;a href="https://github.com/Chima30/sova/blob/main/shared/core/cueEngine.js" rel="noopener noreferrer"&gt;&lt;code&gt;shared/core/cueEngine.js&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These thresholds are not meant to identify medical problems. They simply determine when SOVA may offer an optional recovery break.&lt;/p&gt;

&lt;h3&gt;
  
  
  What SOVA sees
&lt;/h3&gt;

&lt;p&gt;I added this section because I wanted the measurements to be inspectable.&lt;/p&gt;

&lt;p&gt;The "What SOVA sees" table includes the SDK field name, its available value, confidence information and whether SOVA is using the reading.&lt;/p&gt;

&lt;p&gt;For someone reviewing the application, it provides a direct way to see the connection between the SmartSpectra SDK and the interface.&lt;/p&gt;

&lt;p&gt;For the user, it helps explain why a measurement might be missing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I learned from the SDK
&lt;/h3&gt;

&lt;p&gt;A few things became clear during development.&lt;/p&gt;

&lt;p&gt;First, camera conditions make a real difference.&lt;/p&gt;

&lt;p&gt;During testing, poor lighting caused unreliable readings and camera-quality warnings. I decided to show those warnings rather than hide them.&lt;/p&gt;

&lt;p&gt;Second, different physiological measurements become available at different times.&lt;/p&gt;

&lt;p&gt;Pulse generally becomes available sooner than breathing, while HRV needs a longer period of steady measurement.&lt;/p&gt;

&lt;p&gt;That meant the interface needed to handle individual signal readiness rather than assuming everything would appear together.&lt;/p&gt;

&lt;p&gt;Third, unreliable measurements are part of the experience.&lt;/p&gt;

&lt;p&gt;I spent time making sure SOVA could handle missing signals, interruptions and camera problems without pretending that measurements were still valid.&lt;/p&gt;

&lt;p&gt;Finally, I learned that local processing and offline operation aren't the same thing.&lt;/p&gt;

&lt;p&gt;SOVA stores its own session data locally, but live SmartSpectra measurements require an authenticated connection to Presage.&lt;/p&gt;

&lt;p&gt;The timer, previously saved history and other non-measurement features can still work without that connection.&lt;/p&gt;

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

&lt;p&gt;I'm entering both &lt;strong&gt;Best Thoughtful Real-World Use&lt;/strong&gt; and &lt;strong&gt;Most Creative or Delightful Use&lt;/strong&gt;, while also being considered for the overall challenge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Thoughtful Real-World Use
&lt;/h3&gt;

&lt;p&gt;I built SOVA around an everyday problem that I experience personally.&lt;/p&gt;

&lt;p&gt;People who study, develop software, work remotely or spend long hours in front of a screen can become absorbed in their work and forget to take breaks.&lt;/p&gt;

&lt;p&gt;SOVA uses camera-based measurements to help make those moments more noticeable.&lt;/p&gt;

&lt;p&gt;I put a lot of thought into making it practical.&lt;/p&gt;

&lt;p&gt;The application doesn't require an additional wearable device, and users can still use the timer without enabling the camera.&lt;/p&gt;

&lt;p&gt;It compares measurements against personal baselines rather than assigning a general stress score.&lt;/p&gt;

&lt;p&gt;It avoids interrupting people unnecessarily, with meeting detection, typing pauses, cooldowns and manual controls.&lt;/p&gt;

&lt;p&gt;It also explains when measurements aren't reliable.&lt;/p&gt;

&lt;p&gt;Consent, local data controls, reduced-motion support, keyboard access and accessible interface features were included because I wanted SOVA to be something people could actually use during their day.&lt;/p&gt;

&lt;h3&gt;
  
  
  Most Creative or Delightful Use
&lt;/h3&gt;

&lt;p&gt;I wanted physiological signals to feel understandable without making the application look clinical.&lt;/p&gt;

&lt;p&gt;The heart animation responds to your real pulse, while the orange breathing line follows your measured breath.&lt;/p&gt;

&lt;p&gt;When the SDK cannot provide a reliable reading, the visualization changes rather than continuing with made-up movement.&lt;/p&gt;

&lt;p&gt;That connection between live measurements and the interface is a big part of SOVA's personality.&lt;/p&gt;

&lt;p&gt;I also wanted the recovery experience to feel calm and unhurried.&lt;/p&gt;

&lt;p&gt;Guided breathing patterns, ambient sounds, personal session timelines and the shareable session card all build on that idea.&lt;/p&gt;

&lt;p&gt;What makes SOVA different to me isn't simply that it displays camera-based measurements. It's that those measurements become part of a focus and recovery experience that responds to the person using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consent and Data Handling
&lt;/h2&gt;

&lt;p&gt;Privacy was an important consideration while building SOVA because the application uses a camera and handles personal physiological measurements.&lt;/p&gt;

&lt;p&gt;I wanted users to understand what is being measured, when the camera is active, what is saved and which information is handled by Presage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Camera consent
&lt;/h3&gt;

&lt;p&gt;SOVA asks for permission before starting camera-based measurements.&lt;/p&gt;

&lt;p&gt;The first-launch consent screen explains how the camera is used and how data is handled.&lt;/p&gt;

&lt;p&gt;If the user chooses not to enable the camera, SOVA remains available as a focus timer.&lt;/p&gt;

&lt;p&gt;During a measurement session, the interface shows a camera indicator and provides a way to pause camera access.&lt;/p&gt;

&lt;p&gt;SOVA does not secretly activate the camera or monitor people without their knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Video and local processing
&lt;/h3&gt;

&lt;p&gt;The SmartSpectra SDK processes camera measurements on the device.&lt;/p&gt;

&lt;p&gt;SOVA does not record or save raw camera video or images.&lt;/p&gt;

&lt;p&gt;The application uses the resulting physiological measurements to update its interface, establish personal baselines and run its recovery rules.&lt;/p&gt;

&lt;p&gt;Raw video is not part of SOVA's stored session history.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is shared with Presage
&lt;/h3&gt;

&lt;p&gt;Live measurements require a Presage API key and an authenticated connection to Presage's services.&lt;/p&gt;

&lt;p&gt;There is also an important distinction between diagnostic telemetry and the SDK's built-in AI Insights functionality.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://smartspectra.presagetech.com/docs/llm-insights/" rel="noopener noreferrer"&gt;Presage's LLM Insights documentation&lt;/a&gt;, the SDK automatically sends selected physiological measurements to Presage's AI analytics service while measurement sessions are running.&lt;/p&gt;

&lt;p&gt;These automatic requests can include derived breathing, pulse and HRV values, together with session information.&lt;/p&gt;

&lt;p&gt;The SDK uses these values to generate periodic vitals insights.&lt;/p&gt;

&lt;p&gt;SOVA does not display those automatic insights.&lt;/p&gt;

&lt;p&gt;This processing is separate from SOVA's optional AI reflections, and disabling diagnostic telemetry does not disable the SDK's automatic AI Insights requests.&lt;/p&gt;

&lt;p&gt;Presage's documentation states that raw video and camera images are not included in these AI Insights requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Information stored by SOVA
&lt;/h3&gt;

&lt;p&gt;SOVA stores application data locally on the user's computer.&lt;/p&gt;

&lt;p&gt;This includes session summaries, personal baselines, check-in results, session events, optional reflections, notes and settings.&lt;/p&gt;

&lt;p&gt;The Presage API key is protected using the operating system's secure storage.&lt;/p&gt;

&lt;p&gt;SOVA does not require a user account or use a cloud database to store personal session history.&lt;/p&gt;

&lt;p&gt;Users can export their local data in CSV or JSON format.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Delete all data&lt;/strong&gt; option removes locally stored sessions, check-ins, notes, settings, profile information and the saved API key.&lt;/p&gt;

&lt;p&gt;Local data is kept until the user chooses to delete it.&lt;/p&gt;

&lt;p&gt;Deleting SOVA's local data does not itself delete information that may have been processed or retained by Presage under its own policies.&lt;/p&gt;

&lt;h3&gt;
  
  
  SDK diagnostic telemetry
&lt;/h3&gt;

&lt;p&gt;SOVA configures the SDK's diagnostic telemetry to be disabled by default.&lt;/p&gt;

&lt;p&gt;Users can choose to enable anonymous SDK diagnostics in Settings.&lt;/p&gt;

&lt;p&gt;According to Presage's documentation, diagnostic telemetry concerns information such as SDK performance, session outcomes and measurement-quality warnings.&lt;/p&gt;

&lt;p&gt;It is separate from the physiological measurements sent through the SDK's AI Insights functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional AI reflections
&lt;/h3&gt;

&lt;p&gt;SOVA also provides user-controlled AI reflections through Presage's &lt;code&gt;requestInsight&lt;/code&gt; functionality.&lt;/p&gt;

&lt;p&gt;These are disabled by default.&lt;/p&gt;

&lt;p&gt;When the user enables the feature and requests an AI check-in, SOVA can send relevant session context and buffered physiological measurements to Presage for an AI-generated response.&lt;/p&gt;

&lt;p&gt;SOVA can also request a reflection at the end of an eligible session when the feature is enabled.&lt;/p&gt;

&lt;p&gt;These responses are labelled as AI-generated and may be inaccurate.&lt;/p&gt;

&lt;p&gt;They are intended for personal reflection, not medical interpretation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The difference is that SOVA's additional, user-facing AI reflections are optional, while the SDK's documented automatic vitals Insights processing is a separate behaviour.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I think it's important to explain this distinction rather than simply saying that all AI processing is disabled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional microphone access
&lt;/h3&gt;

&lt;p&gt;SOVA has an optional breath sound analysis feature.&lt;/p&gt;

&lt;p&gt;It requires separate permission and is used during breathing resets.&lt;/p&gt;

&lt;p&gt;The feature uses sound measurements to help estimate breath timing and exhale duration.&lt;/p&gt;

&lt;p&gt;SOVA does not record, save or upload microphone audio.&lt;/p&gt;

&lt;p&gt;Only the derived results needed for the experience are kept locally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retention, deletion and privacy limits
&lt;/h3&gt;

&lt;p&gt;SOVA stores its own history locally until the user deletes it.&lt;/p&gt;

&lt;p&gt;Presage's SDK and associated services have their own data-processing arrangements, described in the official &lt;a href="https://smartspectra.presagetech.com/docs/telemetry-and-privacy" rel="noopener noreferrer"&gt;SmartSpectra documentation&lt;/a&gt; and &lt;a href="https://api.physiology.presagetech.com/privacypolicy" rel="noopener noreferrer"&gt;Presage privacy policy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I wanted to be clear about that distinction because local storage in SOVA does not mean the SDK operates entirely without network communication.&lt;/p&gt;

&lt;h3&gt;
  
  
  Not a medical application
&lt;/h3&gt;

&lt;p&gt;SOVA is a personal focus and self-reflection tool.&lt;/p&gt;

&lt;p&gt;It is not a medical device and does not diagnose health conditions, provide treatment advice or determine whether someone is stressed.&lt;/p&gt;

&lt;p&gt;Camera-based measurements can be affected by lighting, movement, framing and other conditions.&lt;/p&gt;

&lt;p&gt;The application is designed to communicate uncertainty rather than present unreliable information as fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;When I started building SOVA, I wasn't trying to create another productivity tracker.&lt;/p&gt;

&lt;p&gt;I wanted something that could help me pay a little more attention to myself while I work.&lt;/p&gt;

&lt;p&gt;The Presage SmartSpectra SDK made it possible to measure breathing and cardiovascular signals using a webcam, without asking people to buy additional hardware.&lt;/p&gt;

&lt;p&gt;The bigger challenge was deciding what to do with those measurements.&lt;/p&gt;

&lt;p&gt;I spent time thinking about when SOVA should speak, when it should stay quiet, and how it should respond when the SDK doesn't have reliable information.&lt;/p&gt;

&lt;p&gt;I wanted the application to feel calm, useful and respectful of the person using it.&lt;/p&gt;

&lt;p&gt;There's still room to improve it, and I plan to explore an Android version using the same shared focus and recovery rules.&lt;/p&gt;

&lt;p&gt;For now, SOVA is my attempt at making long hours in front of a screen a little more manageable.&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>presagechallenge</category>
    </item>
  </channel>
</rss>
