Got everything ready to shippppp, added a readme, made a logo, took screenshots, and organized my code
Got everything ready to shippppp, added a readme, made a logo, took screenshots, and organized my code
i made a Slack bot that gives you a cool daily update with a Word of the Day, a random fun fact, historical events, and an inspiring quote. i combined everything into just one command called /almanac-today. I ran into like 1000000000000000000 different bugs. First, my code kept crashing because I made some variables inside the wrong code blocks, so the rest of the bot couldn’t read them. After I fixed that, some of the APIs were breaking, so i just removed them. It made my code sooooo much simpler and now it works perfectly.
so signups were just breaking with “email rate limit exceeded” and i couldn’t figure out why for a bit. turns out supabase sends a confirmation email every single time someone signs up, and the free email thing only lets you send like2 an hour. so once a couple people tried it, it was dead for everyone else lol. for now i just turned off the email confirmation so accounts get made right away with no email, and made it drop you straight into the course after. gonna hookup a real SMTP (probably resend) later so i can turn verification back on without it blowing up again.
just figured out why “create account” wasn’t working….turns out we needed a proper signup page instead of jamming everything into login. built a new dedicated page and made sure that the demo goes to the signUP page
Spent this session getting everything ready to ship. Turns out “it works on my machine” and “a random person can actually try it” are super different things lol.
Biggest problem was the whole site was locked behind a login. If someone clicked the link they just hit a sign in wall, which is basically the fastest way to make people leave. So I made the first two lessons (Unit 1 lesson 1 and 1.2) totally free, no account needed.
Now if your signed out:
Best part is running code and the quizzes already worked without an account, so the free preview actually feels real and not just a teaser. Pretty happy with how that turned out.
Added some logic so signed out people see a lock on the lessons they cant open yet, plus a “Free preview, sign in to unlock all lessons” message at the top. The free ones keep the normal arrow so its obvious which ones you can actually click.
My old README was kinda lying at this point lol. It said “no server needed” and “all your data stays locally” which used to be true but isnt anymore now that I got Supabase doing accounts, progress syncing, and AI grading. So I rewrote the whole thing to actually match what the project does, threw the live demo link right at the top, and explained how the free preview works.
Feeling really good about where its at now. Basically just doing one last check over everything before I actually ship it!!!
I kept killing plants.
Not from neglect exactly. More from guessing wrong. Water too much, the roots rot. Water too little, the leaves curl. The problem isn’t that I don’t care. It’s that I have no idea what’s actually happening underground.
That’s what GardenBuddy is. A Raspberry Pi that watches your soil, temperature, humidity, and light in real time and tells you specifically what to do about it.
Most plant monitors give you raw numbers. 48% soil moisture. 72°F.
Okay. Is that good? Should I water now or in three hours?
I wanted the system to answer that question directly.
Not just “your soil is at 48%” but “your plant is stable, humidity is the primary stressor right now, here’s what to do.”
That meant building two models, not one.
The core is a double-model AI pipeline.
Model 1 is an LSTM classifier. It trains on your own sensor history. Looks at the last 30 readings (5 minutes of data) and classifies plant health as thriving, stable, stressed, or critical. Because it trains on your garden’s data specifically, it learns the dynamics of your setup rather than thresholds someone else picked.
Model 2 is a local LLM (Ollama, llama3.2:3b). It takes the LSTM’s structured output, the health class, the primary stressor, the confidence score, and writes two actionable sentences in plain English. It runs in a background thread every 30 seconds so it never blocks sensor polling.
The whole thing runs on your local network. No cloud. No API keys. No internet required.
Current features:
After the AI pipeline landed, sensor_reader.py was 454 lines.
About 200 of those were fallback paths and stubs I had written “just in case the model wasn’t loaded” or “just in case Ollama timed out.” They made sense while I was building. They made the code unreadable once the system was stable.
Spent an entire session deleting them. Thirteen files touched, 219 lines removed, zero new functionality.
That cleanup felt like the project actually becoming real.
The physical setup is a Raspberry Pi 3B+ wired to a DHT22 for temperature and humidity, a capacitive soil moisture probe through an ADS1115 ADC over I2C, a photoresistor for light level, and an RGB LED that reflects the health score in real time.
Soil calibration is two constants you measure once: ADC reading in dry air and ADC reading fully submerged. Everything else derives from those.
The hardest part was making the LLM feel useful rather than generic.
Early versions of the Ollama prompt just got handed raw sensor numbers. The responses came back vague. “Ensure adequate watering.” The model was reasoning about numbers without context for what they meant.
The fix was making the LSTM go first. Now Ollama receives structured signals: health class, primary stressor, confidence. The responses got specific immediately. The model has something to anchor to.
The foundation is working. Sensors are reading, the LSTM is classifying, Ollama is advising, the LED is changing color.
What’s missing is a trained model that has seen more than a few days of data, and a real test of the alerts under actual stress conditions. Planning to intentionally underwater and watch the score drop.
Apparently it’s doing fine.
Big update.
Since last time, the site went from 27 copy-pasted lesson pages to one dynamic page, got a real Python editor that runs in the browser, and now has an AI that checks your practice answers and gives you hints.
Every lesson used to be its own 907-line HTML file. 27 of them. All basically identical.
Changing one button meant changing it 27 times, which I was obviously never going to do.
So I merged them into one lesson.html that reads ?unit=2&lesson=3 from the URL and imports that lesson’s data.js dynamically.
29 files changed, 25 insertions(+), 24498 deletions(-)
Deleted 24,498 lines! Best commit ever.
Next, I replaced the static code examples with an actual editor (CodeMirror) plus Python running in the browser through Pyodide.
No server, because the code runs on your own machine.
Then I added it to the practice questions too: every question gets its own mini IDE with Run + Save, and saves go to Supabase so your code is still there when you come back.
This took way more bug fixing than expected. There was a cursed '\n' error, the editor kept breaking when switching themes, and long lines ran off the screen until I added line wrapping.
Like 5 commits of just fixing the editor (help me).
The big one. There is now a Check button next to Run that has gpt-4o-mini grade your code:
✗ Almost! Your scoreboard only prints one player.
Hint: you need a second print() line for the second player.
The site is fully static, so I couldn’t just put an API key in the frontend (the whole internet would spend my credits).
Instead, the code and its output get sent to a Supabase Edge Function, which hides the key, checks that you’re logged in, and asks OpenAI for a strict JSON verdict: passed, feedback, hint.
I compared Gemini and Ollama first, but went with OpenAI because I have $5 of credits left from a previous grant.
And since I don’t want to overuse my credits: 5 checks per minute and 500 per day per user, 1,400 per day for the whole app.
Next up: grading notes per question so the AI knows exactly what each task wants, and maybe an admin dashboard to watch usage.
Progress now saves to the cloud!!!
Ripped out localStorage and replaced it with Supabase so lesson completions are now tied to your account, not your browser. You can now sign in on any device and your progress is tracked there too.
I had to change 30 DIFFERENT FILES JUST TO ADD THIS, but hey its working properly now and its another BIG step towards making a full learning platform…you guys can now try it!!!!!!!
finally understanding what a schematic actually is
spent the last few hours in KiCad building my macropad
Finished the schematic and started placing the components on the PCB (takes wayyyy to long to align everything properly)
The hardest part at least till now was realizing MX switch footprints have Edge.Cuts built INTO THEM….AND IT KEPT ON THROWING DRC Errors.
next up: routing all the traces together (going to take wayyy to long)
PULSEFLOW AI IS FINALLY LIVE
Just deployed the full stack today (backend is on Render and frontend is on Vercel).
The backend was so easy to get running, only took 10ish mins. MIGHT have forgot that Optional wasn’t imported in the config.py.
The frontend was SO MUCH HARDER OMG! first, Vercel blocked the deploy three times because of Next.js 15.0.3 had security vulnerabilities. i just updated to 15.3.3 (this didnt work because it had its own CVE). after that i tried using next@lastest, but then i needed ESLint 9, which broke the entire dependency tree.
I used ^15 so npm resolves the latest patched 15.x without jumping major versions. Four deploys, two CVEs, one peer dependency conflict. ahhh this was painful
BUT, IT FINALLY WORKS SO IT WAS WORTH IT!!!!
(image shows it running on vercel)
JUST ADDED UNITS 4, 5, 6, AND 7!!!!!!!!!
The course is officially 27 lessons in total. I also made an actual home page that lists every unit and lesson so it’s easier to use the course without having to open tons of random files.
My favorite part of everything was adding the lesson completion tracking. Basically each lesson has a “Mark as complete” button which then saves everything to a localStorage. No backend needed (thank god).. Also the homepage now shows all the finished lessons in green, and also has an overall progress bar showing how far someone is through all 27 lessons.
I MAY have spent way too much time trying to figure out why it kept showing an Error 404 when clicking through different lessons. I checked the JS, checked all the paths, and then rewrote all the href logic. Turns out a browser can’t handle spaces in folder names over file://. I just wrapped the path in encodeURI(). MAY have spent an hour tryna debug this but it works so yayyaya!!!
Gonna deploy to GitHub Pages so it’s a real URL, add a quiz score tracker so students can see how they’re doing across the whole course, and maybe create an account system so people can track everything, but its not fixed yet so keep looking
JUST FINISHED UNIT 3 AND MADE A PROPER README!!!!!!!!!
Just finished all 4 lessons for unit 3 today:
Each one is fully complete with a goal, explanation, an example code, practice questions, a quiz, and a project. the projects are actually pretty fun (BMI calculator, theme park entry checker, and even more…you should check the repo out frfr)
Also just added a full README to show the entire course, what it covers, what each lesson has, how the file system works, and a full breakdown of every single unit, every lesson, and every project.
Right now the course is sitting at 7 units, 27 lessons, 27 projects and 54 practice tasks total. Just finished unit 3, FOUR MORE TO GO!!!
JUST FINISHED UNIT TWO!!! also organized the files into a data.js file and a lesson.html file for each lesson. check my github for the latest updatesssssss
JUST CREATED UNIT ONE!!!!!! just some basic print(), input(), different variables, and casting
Just created the entire lesson plan for my course and JUST LEARNED HOW TO USE FIGMA!!!! I’m lowk just used Figma for the website design
Added a README.md and got the MY FIRST PROJECT READY TO SHIP
updated tons of info and revised website looks