You are browsing as a guest. Sign up (or log in) to start making projects!

Sprout: Your personal Desktop Daemon that makes sure you take breaks!

  • 2 Devlogs
  • 4 Total hours

Sprout is your best friend who lives right on your desktop! When you forget to take breaks, he gets sad and begins to droop, but whenever you remember, he sprouts back up! Sprout is a Desktop Daemon, meaning that he is always running in the background!

Ship #1 Changes requested

I created a plant pot style desktop daemon that manages and tracks your posture and the amount of time you stay behind your desk without breaks. The lightweight user interface handles the visual rendering, native Windows system tray lifecycle, and Pomodoro timing variables, while silently spawning the local Python virtual environment to monitor your posture via an integrated webcam feed.

Try project → See source code →
Open comments for this post

2h 33m 41s logged

It’s been a few weeks since I last worked on sprout. Honestly, SAT prep has been taking up the majority of my time. I spent around an hour of unrecorded time just reading through my code and a bunch of notes I left for myself. After getting myself caught up, I shifted my sight to my goals.

I immediately realized I hated the bulky, standard application window. It felt too clunky for a focus app. I decided to completely pivot the design: instead of a full app, I wanted a tiny, transparent, aesthetic widget that just floats quietly on the desktop. It’s been a while since I last programmed a widget, so it took me a while to catch up. The second I tried to make the window transparent, my entire CSS layout completely collapsed. The background started tiling infinitely, my assets disappeared, and the drag-handle completely broke. The Tauri v2 migration also messed me up. Tauri completely overhauled how they handle security permissions, system tray icons, and background shell processes. I spent way too long staring at my screen just trying to figure out why my Python AI backend wouldn’t launch. But after rewriting the main.js file from scratch and working on the Rust config files, I made some progress.

Here is what is actually working in V1.0.0:

  1. UI: It’s a tiny, frosted-glass widget with a shimmering pastel title bar.
  2. AI core: The Python computer vision script now boots up invisibly in the background the second you open the app. No more messing with terminals.
  3. System Tray: It minimizes straight to the Windows tray, keeping your taskbar clean.
  4. My favorite part, the pomodoro timer: A fully functional, click-to-start Pomodoro timer that hooks directly into native Windows notifications to tell you to take a break.

I packaged the whole thing into a distributable .msi installer and added it onto GitHub Releases. It is completely open-source and officially out.

It was a bit annoying, but seeing my little plant sitting on my desktop, actually tracking my posture without crashing, makes it totally worth it.

0
0
1
Open comments for this post

1h 22m 6s logged

I felt really productive after today!
I started “Sprout”, which is a wellness daemon that perks up when you take breaks and droops down when you stay seated for too long. Here’s what I did today:

  1. I busted my “ghost chair” bug
    My camera kept thinking that my empty chair is a person, so when I got up to take breaks, it would keep a skeletal frame on my chair. I fixed it by implementing a visibility heuristic filter. I essentially told my webcam that unless it is 60% that it detects a human nose, it shouldn’t recognize the object infront of it as human.
  2. Headless
    Originally, to test-run the project, I had 2 windows up: my actual project and my webcam with a skeletal structure pasted over me. I just stripped out the GUI code from my vision_sensor webcam code so that it would stop appearing.
  3. Notifications
    I had to install a native Rust plugin to bypass the browser security so that my code could communicate directly with Windows OS. When my JS gave me an import error (since I’m using Vanilla JS without a bundler), I just edited tauri.conf.json to recognize Tauri’s tools globally. Native desktop achieved! :d:
  4. I created my assets!
    Using LibreSprite, I drew my Sprout (cat themed plant pot) and background, and enabled some simple asynchronous JS loops to animate them!
- Goals for tomorrow:
I need to remove the ugly text and glassmorphic box I implemented earlier for testing, and create my own text-based assets.

(P.S. I dropped my finished assets below for anyone interested. They're really low quality since they're meant for a small window)

0
0
4

Followers

Loading…