DEV Community

JUKUN MAN WITH SME POWER
JUKUN MAN WITH SME POWER

Posted on

Built Blade, an app to get you off your screen, one walk proved it wrong about the rain.

Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass Submission 🌿

`

https://github.com/AliFikan94/touchGrass
`
This is Blade's landing pageThis is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass

Your phone will still be there when you get back!

What I Built

It's called Blade. You tell it how long you've got and where you are, and it gives you one small daily task: a walk, plus a couple of things to notice. Then it tells you to put the phone away. That last line is the whole product. The screen exists to hand you a card and get out of your way.

There's a streak, but a gentle one. Skip a day and it says "No streak pressure. Just step outside when you can." I did think about a leaderboard for about ten minutes and then dropped it. Ranking people on how much they went outside felt like the fastest way to make going outside miserable, and it would need a server holding everyone's data, which is the opposite of why I picked open models.

Demo

You won't find walk photos in this post, and that's deliberate. The card said to put the phone away, so I did. The only camera I used was my eyes.

Here's what you get instead. This is a real card from my own machine:
A card where you give a comprehensive note of all that happened

Move.
  Walk for 15 minutes without stopping.

Notice.
  - Find evidence of an animal: a feather, a nest, tracks, chewed leaves.
  - See or hear three different birds.

Phone away. The grass is waiting.
Enter fullscreen mode Exit fullscreen mode

The flow in the browser: pick how long you've got and what you feel like noticing, set your place (your browser can find it, or you type the coordinates), and press one button. A card appears with tick boxes. You close the laptop and go. When you're back, you press "Blade complete", and a small box asks what you noticed.

Blade runs on your own machine, so there's no hosted link. That's on purpose. To try it: install Ollama, then ollama pull gemma3:1b and python main.py.
https://github.com/AliFikan94/touchGrass

Code

How I Built It

The open piece is Gemma, running locally through Ollama. It writes the card. The rest is plain Python and one HTML page, with no framework, no keys and no accounts.

One rule shaped everything: the model never gets to decide a fact. Season, daylight left and climate are worked out in ordinary code from your latitude and the date. Gemma gets a task and a short menu of real observations, and its only job is to phrase them nicely. A small model will confidently tell you about a bird that doesn't exist, so I just don't give it the chance.

Here's how the day went.

I typed python main.py and there was no main.py. Fair. It was a package. I added one so nobody else does the same.

The app said [fallback] and wouldn't tell me why. Blade is built to serve a preset card when the model isn't available, so it never breaks. The catch is that it did this silently, so on my first real run I got a perfectly nice card and no idea whether Gemma had written it. I made it admit the reason, and the reason was this:

model requires more system memory (4.0 GiB) than is available (2.5 GiB)

My machine couldn't load the 4B model. I switched to the 1B model with one setting, and it worked. I'll come back to why that matters.

Then it just spun. "Listening to the grass..." for minutes, with nothing else happening. A small machine can take a long time to load a model on the first request, and I'd given it three minutes and no feedback. The fix was boring and effective: warm the model up when the server starts, cap how much it's allowed to write, give up after 60 seconds with the reason shown, and put a seconds counter on the screen so you know it's alive.

Then I broke git. I'd committed Python's cache files to the repo by accident, and the next git pull refused to run. Very much the deadline-day energy.

Then I fixed the seasons. Lagos doesn't do autumn. Neither does anywhere near the equator, and a naive "it's October, so leaves are turning" gets that completely wrong. So Blade works out a climate band from your latitude and knows the tropics are a different deal.

I also added an opt-in switch that looks up the real local weather and what other people have recorded nearby on iNaturalist, so a task can say "look for a Northern Cardinal, someone saw one near here this week". It's off by default, it rounds your location to about a kilometre before sending anything, and with no network it quietly gives you the offline card. Those species names come from real records, never from the model.

Forty-one tests later, I finally went outside.

I went out from 4:01 to 4:28 pm in Lagos, Nigeria. Twenty-seven minutes. I followed the rules on the card: I did the tasks, and the phone stayed away. The card said:

  • Walk to the nearest park.
  • Watch rain on leaves. Listen to it.
  • See or hear different birds.

There was no rain.

Not a drop. The app had cheerfully told me to go and listen to rain that wasn't happening. Without the weather lookup on, Blade has no idea what the sky is doing, and I'd never told it that rain tasks should wait for actual rain. I'd tested the logic. I had not tested the world. A real walk found in 27 minutes what a pile of tests didn't. Rain tasks now only appear when the weather says rain, there's a test for a dry day in Lagos, and while I was in there I stopped it from suggesting frost patterns in warm places too.

What I actually noticed had nothing to do with the card: a dove, a pelican and a mango tree.

I came home, pressed "Blade complete", and the app said... "Blade complete." That's it. I'd just seen a pelican and my app had the emotional range of a vending machine.

So I added one more thing. After you finish, there's now a small box: What did you notice? You type a few words and Gemma answers in a line or two. It only ever sees what you wrote, it can't add animals you didn't mention, and if its answer rambles or turns into a question it gets thrown out for a plain fixed line.

I typed in "a dove, a pelican, a mango tree". It said:

Why Does Open Innovation Matter?

This isn't a slogan for me, because the day gave me real examples.

When my laptop couldn't load the 4B model, I changed one setting and used a smaller one. With a closed API there's no smaller one to fall back to. You pay, or you don't.

Most of the app works with no signal, because the sun maths and the climate logic are just code on your machine and the model runs locally. A park with no coverage is exactly where this should work.

And my location stays on my laptop. The one optional feature that does phone out says so in plain words, and rounds the location first. There's no key, no account and nothing to pay for.

Where a closed model would have won: Gemma 1B writes plainer than a big frontier model. That's why I fenced it in so hard, with a menu of real tasks, validated output and a fallback. For a card you read in ten seconds before you leave the house, I'd make that trade again.

Prize Categories

Best Use of Gemma: Gemma, run locally through Ollama, writes every card and every reply.

Step outside. Touch a blade. Notice the world.

Top comments (0)