WEB LLM : Local Run Models on your hardware
tetrac.xyz runs a version via SDK for free inference tool calling
Run your own for rainy days when wifi goes dark
- Open Source: Download the Models
- mlc-ai/web-llm
- 20k Stars
- Small models are getting impressive.
34 views
Ghostlight: a ghost that refuses to lie
<!--
PUBLISHING CHECKLIST (this comment will not render on DEV)
1. Cover image: upload public/og.png, or paste this URL if the field accepts one:
cdn.jsdelivr.net
2. Title: "Ghostlight: a ghost that refuses to lie"
3. Tags (DEV allows 4): #devchallenge #hf26challenge #opensource #webgpu
(the first two are required by the challenge template)
4. The inline images already use public, absolute CDN URLs — no upload needed. Cover: see step 1.
5. Fill the two bracketed spots:
- Demo section: your Render URL (deploy first, see README) or your screen recording link
- "The Spirit of It": one true sentence about the person you thought of, if you want it
6. Prize Categories: delete the Render and .tech bullets if you did not deploy/claim them.
7. Optional: save this session with DevRelay and embed it in My Agent Session.
8. Everything else is factual and verified (see docs/VERIFICATION.md).
-->
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine
Ghostlight: a ghost that refuses to lie
!The finished ofrenda: six candles, a portrait, marigolds, water, and the offerings from the answers
What I Built
Ghostlight is a remembrance studio that runs entirely in your browser. You answer six small questions about someone you carry — the kitchen, the song, the place, the saying, the small thing, the unfinished thing — and it turns your words into three things:
1. A remembrance. A short, concrete portrait written from your answers.
2. An ofrenda. A tiered altar of six candles, marigolds, water, cut paper and the offerings hiding in your answers, inspired by Día de Muertos. Click a lit candle or an offering to read the memory behind it.
3. A keepsake. A single HTML file with the portrait, the remembrance and every memory inside. It opens offline, needs no app, and contains no scripts.
Everything runs on your own machine. An open-weight Gemma 2 model writes the remembrance through WebGPU, and the archive lives in IndexedDB. There is no backend, no account, no analytics, and no cloud inference. Uploaded: zero bytes.
I read "Ghost in the Machine" two ways, and both are in the build.
The first is the traditional one: this is a tool for the dead, built on the nights when the veil is supposed to be thin. Día de Muertos is not a séance; it is a table set for the people who can't come to dinner. I borrowed the shape of that table — tiers, candles, cempasúchil, a glass of water for the journey — with as much respect as I could, and I explain every element in plain language on the page so nobody has to already know the tradition to understand the room.
The second reading is the one that decided the architecture: the ghost is not the model. It is the archive. The model is just the candle that makes it visible. Most "AI memory" projects put the model in the middle, so when the company changes the model, the price, or the policy, the memory goes with it. Ghostlight inverts that. The archive is the source of truth, the model is small and replaceable, and there is a mode that keeps your words exactly as you wrote them, with no model at all.
That last part matters more than any feature list, so the tagline became a rule:
> The ghost is not the model. The model is the candle. The ghost is what you remember.
The demo archive in these screenshots is fictional. Ruma Das is not a real person: the portrait was generated for the project, the six memories were written by me, and the finished demo remembrance is a hand-written target rather than a model output. Your archive never leaves your browser.
Demo
Run it locally by following the below information.
git clone https://github.com/soumwadeep/ghostlight.git
cd ghostlight
npm install
npm run dev
Then open <localhost> and choose one of two honest options on the weave screen:
- Summon Gemma 2 · ~1.4 GB. Runs in the tab through WebGPU, downloaded once, then cached. After that the room works with the Wi-Fi off.
- Candle mode. No download, no model, instant. It arranges your own sentences into the remembrance and never rewrites them.
There is also a 60-second video demo you can record yourself if you prefer (four shots are enough): walk through the finished demo ofrenda, click a candle to read a memory, ask a question it can answer, then ask one it can't — and watch the flame refuse.
Code
{% embed soumwadeep/ghostlight %}
The parts worth reading:
- src/lib/ai/prompts.ts — every instruction sent to the model, including the grounding rules. No hidden prompt.
- src/lib/ai/retrieval.ts — the archive's own memory search and the refusal logic.
- src/lib/keepsake.ts — the self-contained HTML keepsake, with every user string escaped.
- docs/VERIFICATION.md — the environment, timings, and the raw model output from a real run.
MIT licensed. React 19, Vite 8, TypeScript, motion, idb-keyval, vite-plugin-pwa, and no backend of any kind.
How I Built It
The open-source AI is not decoration here. It is the only way the project's promise can be true.
The stack:
| Piece | What it does |
| --- | --- |
| Gemma 2 · 2B IT (open weights, Google DeepMind) | Writes the remembrance and rephrases grounded answers |
| WebLLM (Apache-2.0, MLC AI) | Runs the model in the browser via WebGPU |
| Local inference | The model, the archive, the photograph, and your questions never leave the device |
| IndexedDB | The archive. No database service, no auth provider, no API key |
| My own pipeline | No agent framework: a small, auditable, hand-written path from answers to a remembrance |
The data flow is deliberately boring, because boring is what you want when the data is someone's grief:
your six answers
→ the archive (IndexedDB, on this device)
→ memory search (the archive decides what is true)
→ Gemma 2 · 2B (WebLLM + WebGPU, in the tab)
→ a remembrance (150–200 words, three paragraphs)
→ the ofrenda + a keepsake
There are two AI jobs, with different rules, and the difference is the whole point.
Weaving is creative but constrained. The prompt forbids first person, forbids inventing an instrument, person, place, object or food, and assigns each paragraph to specific memories so none get dropped:
- Third person only. Never use "I", "me", "my", "we" or "our".
- Every sentence must be supported by the memories above.
- Write exactly 3 short paragraphs, separated by a blank line.
Paragraph 1: only THE KITCHEN and THE SMALL THING.
Paragraph 2: only THE SONG and THE PLACE.
Paragraph 3: only THE SAYING and THE UNFINISHED THING.
- Do not repeat a phrase, an idea or an image from one paragraph in another.
Answering is strict, and it refuses before the model is ever called:
// The archive decides what is true. The model only says it gently.
const hit = retrieveFromArchive(question, ofrenda)
if (!hit) return { answer: 'The flame has no memory of that.', grounded: false }
// If something matched, the model may only rephrase it —
// and the app attaches the citation. The model does not choose its sources.
Ask "What was her mother's name?" and you get "The flame has no memory of that." No hallucination, no polite invention, no guess dressed up as memory. That single behavior changed how I designed everything else, because it let me be honest in the interface: the six memories are always shown next to the remembrance, and the reading says out loud that the archive is the source of truth.
Two more decisions I'd keep:
- No microphone, on purpose. Browser speech APIs often send audio to a vendor. A local-first grief tool that quietly uploads your voice is not local-first, so I shipped typing only.
- Candle mode is not a fallback. It is the guarantee. If the model disappears, changes, or refuses to load, the room still works and your words stay exactly as you wrote them.
And then there was the honest bug. I started with the newer, smaller Gemma 3 1B. Its prebuilt WebLLM record cannot load — it throws Only one of context_window_size and sliding_window_size can be positive — and the suggested config fix loads the model but produces garbage, because Gemma 3 interleaves global layers with 512-token sliding-window layers (mlc-ai/web-llm#873). So I ship Gemma 2 2B, which runs correctly, and left the model id as a single line in src/lib/ai/webllm.ts for the day that build is fixed. That is what "you can swap models" actually looks like in practice.
Verified, not claimed. On a desktop Chrome with WebGPU: the model downloaded 1.4 GB in about two minutes, wrote a three-paragraph remembrance from six memories in 13.6 seconds on-device, and answered a grounded question in 1.9 seconds with a citation attached. The app is a PWA, so after the first run the shell and the model are cached and it works offline. The keepsake export is a 321 KB HTML file with zero <script> tags. 21 unit tests cover parsing, candle-mode weaving, retrieval refusals, and keepsake escaping.
!A remembrance written on-device by Gemma 2, with the honesty note and the header badge reading "Gemma · lit"
!A grounded answer with its citation, answered by the model in 1.9s
Why Does Open Innovation Matter?
This is the part I cared about most, because "private AI" should not be a settings toggle.
Grief is not a dataset. If the remembrance is written by a cloud API, then the thing I said about my grandmother's kitchen is now a request that crossed someone's servers, sat under someone's retention policy, and may have shaped someone's future model. Local inference changes the shape of the promise: the story never becomes someone's request, so it can never become someone's training data. That is structural, not a checkbox.
Permanence. A closed model can be improved, repriced, restricted, or shut down. A 1.4 GB file on my disk cannot be deprecated. And because the archive exports as plain JSON, as a self-contained HTML keepsake, and as my own words, nothing here depends on a service staying alive. The keepsake will open in twenty years on a machine that has never heard of Gemma.
It costs nothing to run. No tokens, no meter, no bill. The cost is one download and the electricity already in the machine.
Control, all the way down. Every prompt is readable in the app and in the repo. I can change the tone, swap the model, or fork the whole room under MIT. The people in an archive should not need permission to keep it.
| | A closed API | Ghostlight |
| --- | --- | --- |
| Model quality | Frontier scale | Small, on purpose |
| Works offline | No | Yes, after one download |
| Your answers leave the device | Usually | Never |
| Cost per remembrance | Metered | Zero |
| You can read the prompt | Rarely | Yes, everything is public or in the app |
| Survives the service | Until it changes | The archive and the file are yours |
There is a real tradeoff in that table, and I'll name it: a frontier model writes more beautifully. A 2B model is plainer, and once it reached for a detail that wasn't in the memories. So I did three things instead of pretending: I show the six memories next to the remembrance, I ship candle mode as the strict option, and the reading says out loud "small models can reach; the memories you kept are the source of truth." Honesty in the interface is a feature, not a disclaimer.
Open innovation wins here not by beating the biggest model, but by making a promise the biggest model can't: the door stays closed, and the light stays on after the company that made the model is gone.
My Agent Session
Ghostlight was built in an AI coding agent session, end to end: design, the six-rite flow, the ofrenda, the grounding pipeline, the keepsake, and the test suite. That is part of why the write-up includes a verification file with raw output instead of vibes.
[Optional: save this session with DevRelay and embed it here with the agent_session tag, or link the session. If you don't publish the session, replace this paragraph with a link to the build log in the repo, or delete this section — it's optional.]
The Spirit of It
The moment it landed wasn't when the model wrote something beautiful. It was when I asked it something cruel.
I had just finished the refusal logic, and I typed a question the archive couldn't answer: "What was her mother's name?" The flame answered:
> "The flame has no memory of that."
I sat with that for a while. Every chatbot I've used is trained, at some level, to be helpful — to smooth over the gap, to offer a plausible guess, to keep the conversation going. This one refused. Not because it was broken, but because that is the only honest thing a memorial tool can say when the record is silent. If it had invented a name, the invention would have lived in my archive forever, wearing the costume of a memory.
So the feature I'm proudest of is a hole: an AI that can say I don't know about the person you loved. The ghostlight stays lit, and it stays truthful.
[Optional, and worth it: add one true sentence about the person you thought of while building this. A specific detail — a smell, a phrase, a small object — will do more for this section than anything else I can write.]
The demo remembrance in the screenshots is the target I was aiming at: "Ruma Das kept her kingdom small and exact: a kitchen, a terrace, and a blue tin of buttons." Hand-written, by me, for a fictional person. The whole project is an attempt to make a machine capable of getting closer to that without ever lying about it.
Prize Categories
- Best Use of Gemma — Gemma 2 2B IT (open weights, Google DeepMind) runs locally in the browser through WebLLM and WebGPU. It is the core of both the weave and the grounded answers; the model id is a single line in the source.
Built solo, with an AI agent as the pair programmer. The demo archive is fictional; everything else is yours.
<!-- Team Submissions: single author, no teammates to credit. -->
1 reaction
🦥 SlothSummarize: Let AI Read It So You Don't Have To
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady.
🦥 What I Built
Meet SlothSummarize — an AI-powered summarizer that does the reading so you don't have to!
!Home Page
We all deal with lengthy emails, meeting notes, chat conversations, and articles that take forever to read. I wanted to build something that makes understanding long text effortless.
SlothSummarize lets you paste any text and instantly get a 2–3 sentence TL;DR and up to five actionable next steps.
What makes it special?
- 📝 Instant TL;DR: Get straight to the important points.
- ✅ Action Items: Extract concrete next steps from lengthy text.
- 🎭 Three Summary Styles: Lazy (casual), Formal (professional), and Brutal (no-fluff).
- 🔒 Privacy First: AI inference happens locally in your browser.
- 💸 No API Keys or Subscription Costs: Run open-weight models on your own device.
- 🦥 Simple and Fun: A sloth-themed interface that makes summarization less boring.
Whether you're a developer catching up on documentation, a student reviewing notes, or a professional dealing with endless meeting transcripts, SlothSummarize helps you spend less time reading and more time doing.
The idea is simple: Less reading. More doing. Maximum laziness.
🎬 Demo
Live Demo: [slothsummarize.onrender.com]
Here's how it works:
1. Open SlothSummarize in a compatible browser.
2. Select your preferred AI model.
3. Paste your text and choose a summary style.
4. Click summarize and let the sloth do the work!
5. Get your TL;DR and action items in seconds, depending on the model and your device.
!Waiting for model to install
!Summarized result
💻 Code
GitHub Repository: [anshika361/SlothSummarize]
The project is built with a simple, lightweight structure:
SlothSummarize/
├── index.html
├── style.css
├── app.js
├── llm-worker.js
├── sloth_mascot.png
└── README.md
No complicated setup, no backend infrastructure, and no API keys required for inference.
⚙️ How I Built It
The biggest question I wanted to explore was:
Can we build a useful AI application that runs entirely in the browser without sending user data to an external AI service?
The answer is SlothSummarize!
🧠 Open-Source AI with WebLLM
I used WebLLM, an open-source inference engine that runs language models directly in the browser using WebGPU.
The application supports these open-weight models:
- Phi-3.5 Mini Instruct: The default model for high-quality summaries.
- Llama 3.2 1B Instruct: A smaller model for lightweight use.
- Llama 3.2 3B Instruct: An alternative balancing model size and output quality.
Users can choose a model depending on their device capabilities and preferences.
🏗️ Technology Stack
- Frontend: HTML, CSS, and vanilla JavaScript
- AI Runtime: WebLLM
- Models: Phi-3.5 Mini Instruct and Llama 3.2 1B/3B Instruct
- Inference: Local browser execution using WebGPU
- Design: Sloth-themed UI, glassmorphism, and Hacktoberfest-inspired colors
🔄 How It Works
1. The user pastes text into the application.
2. JavaScript prepares the summarization prompt based on the selected style.
3. WebLLM passes the prompt to the selected local language model.
4. The model generates a concise summary and relevant action items.
5. The results are displayed directly in the browser.
There is no application backend involved in the inference process.
The model files are downloaded when required and cached for subsequent use. After the initial setup, the application is designed to support offline use, provided the necessary assets and model files are available locally.
🌍 Why Does Open Innovation Matter?
Open innovation makes AI more accessible, customizable, and privacy-conscious.
Many AI applications rely on external APIs, which can introduce recurring costs, network dependencies, and concerns about sharing sensitive information.
I wanted SlothSummarize to take a different approach.
🔒 Privacy Without Compromise
People often summarize private emails, internal discussions, and meeting notes. Processing their text locally means it doesn't need to be sent to a third-party inference service.
💸 AI Without Per-Request Costs
There are no paid inference API calls or token-based charges. Users can run supported models on their own hardware.
🔧 Freedom to Experiment
Open-weight models allow experimentation with different model sizes and summarization styles without being tied to a single proprietary AI provider.
🌱 Innovation Without Heavy Infrastructure
A useful AI tool doesn't always need a complex backend, cloud deployment, or expensive infrastructure.
With WebLLM and open-weight models, SlothSummarize demonstrates how a simple web application can provide AI-powered functionality directly on a user's device.
Open innovation made it possible to build a tool that is lightweight, customizable, and designed with privacy in mind.
🦥 The Lazy Payoff
Imagine receiving a long meeting transcript with several decisions, deadlines, and action items.
Instead of reading every line and manually identifying what matters, you paste it into SlothSummarize and get a concise overview.
| Before | After |
|---|---|
| Read lengthy email threads | Scan the key points |
| Review entire meeting notes | Get a short TL;DR |
| Manually find follow-up tasks | Extract suggested action items |
| Rewrite summaries for different audiences | Switch between three styles |
| Send private text to a cloud AI API | Process text locally |
The actual time saved depends on the text length, model, and device performance. Larger models may take time to download and generate results, especially on less powerful hardware.
The best part? Once the model is cached, you can reuse it without downloading it again every time.
It's a small productivity improvement, but those little saved moments add up.
Less time reading. More time building. That's the sloth philosophy. 🦥
🏆 Prize Categories
Hacktoberfest Open-Source AI Challenge — Week 3: Slow and Steady
SlothSummarize aligns with the challenge by combining open-weight AI, open-source inference technology, and practical automation to reduce everyday effort.
Add any specific partner prize categories you are entering after confirming the current challenge rules.
---
Thanks for checking out SlothSummarize!
If you like the idea, explore the code, share feedback, or contribute to making the sloth even smarter.
Let AI handle the reading while you enjoy the slow and steady life. 🦥💚
#Hacktoberfest #OpenSource #AI #WebLLM #WebGPU #JavaScript #PrivacyFirst
2 reactions · 1 comment
Haggle: rehearse your freelance rate against a lowballing client who lives in your browser tab
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
Built by @mrmaran and @vettri_vel_f6a5c117c95b00.
What I Built
A client reads your quote and writes back: "$4,000 is a bit steep for me right now. Could we try a trial project for $1,800?"
Most freelancers answer a message like that for the first time when the money is real. In a 2018 survey of 267 freelance science writers by The Open Notebook, 14% said they never ask for more, and 45% of those who did ask said they often got it.
Haggle lets you practise that conversation first. You quote a price and get up to eight turns against one of three difficult clients:
- Marcus, the lowballer, offers less than half and asks for a free trial.
- Dana, the scope creeper, keeps slipping in "just one more page".
- Viktor, the late payer, wants to pay in 90 days.
At the end you get a receipt with your score, the client's real limit, and the exact line where you gave money away. In our own play-test that line was "Okay, I could do $3,800." It dropped the price by $200 and asked for nothing back. Marcus didn't budge, and his real limit turned out to be $3,400.
The client is played by Gemma 2 2B, running inside your browser tab. There's no server, no API key and no account, and nothing you type leaves your computer.
The people who'd pay for this are freelancers who know they undercharge. A two-day negotiation seminar costs $1,489, and practice apps charge $10 to $19 a month. Our plan is one free client and a $9 pack for the rest. We have exactly one paying user so far, and he's family (more on him below), so treat the $9 as a plan, not a proven price.
Demo
Play it here: haggle.mrmaran.workers.dev
{% embed youtube.com %}
Start negotiating downloads the model once, about 1.4 GB, and your browser caches it after that. You need a WebGPU browser such as a current Chrome or Edge, and a computer with a graphics card.
Play without the AI skips the download and works in any modern browser. Simple rules read your moves and the client answers with fixed lines.
If you're curious how the model reads you, add ?debug to the address. After every turn it shows the model's label for your line and whether code overruled it.
!Haggle receipt: the line "Okay, I could do $3,800." boxed in red, score 58 out of 100
A receipt from a round against Marcus. One $200 concession for nothing, quoted back in red.
Code
{% embed Mramaran/haggle %}
It's MIT licensed, written in TypeScript with Vite, and has 38 unit tests and 6 Playwright end-to-end tests.
How I Built It
Code decides every number
Give a 2B model a negotiation about money and sooner or later it will invent a price. So we split the work:
| Part | Done by |
|---|---|
| Opening offer, each concession step, the real limit, when the game ends | Code |
| The client's lines, in character | Gemma 2 2B, checked by code |
| Reading your move: holding firm, discounting, trading, walking away, accepting | Gemma 2 2B, with code rules for its known blind spots |
| The score | Code only |
On each turn, code picks the client's move: raise, hold, press, or give a final number. Gemma is told the move and the one dollar amount it may say, and it writes the line. Code checks the reply. If Gemma invents a number, breaks character or agrees when it shouldn't, it gets one retry, and if that fails too the player gets a plain fixed line instead.
Scoring is code as well. You get up to 60 points for how close you land to the client's real limit and up to 40 for never giving ground without getting something back, minus 12 for every concession you gave away for nothing.
Picking the model
We tested models on day one, before writing any of the game. Gemma 3 1B looped, invented amounts and read 0 of 12 player moves correctly. Qwen 2.5 1.5B kept losing track of who was speaking and read 11 of 16. Gemma 2 2B held the role across 15 scripted games and wrote 126 replies without a single invented amount or character break, so we went with it.
Running in the browser
WebLLM runs Gemma 2 2B on WebGPU. The half-precision build needs about 1.9 GB of GPU memory, and there's a fallback build for GPUs that can't do half precision. The model library only loads when you start the AI client, so the page itself is about 9 KB compressed. On a laptop with an RTX 40-series GPU, a turn takes 2.3 to 3.3 seconds.
The share link on the scorecard carries the score and the quoted line in the URL, so a shared receipt opens on any device without loading the model.
What testing caught
A four-round play-test on the real model got the money right. Offers matched the rules on 19 of 19 turns. Gemma wrote 21 of 23 replies on its first try. Its reading of the player's move held on 15 of 19 turns, and code corrected the other four.
It also turned up three bugs that unit tests would never have found.
The first: asking "What's your real budget?" got read as a trade, so the client raised his offer for a question. Questions are now settled before trades.
The second was funnier. Mashing the keyboard got labelled "holding firm", and random letters walked Marcus all the way up to his limit. A line with no price and no ordinary English word now counts as off-topic, and the client steers you back to the project.
The third only showed up after deploying. The AI worked on localhost and failed with "Failed to fetch" on the live site. Hugging Face, which hosts the model files, rejected downloads whose Referer was a workers.dev page. Adding <meta name="referrer" content="no-referrer"> fixed it.
Two faults are still there. The model sometimes uses the wrong direction word ("bump it down" while raising his offer), and now and then it repeats the player's figure as if it were its own.
Why Does Open Innovation Matter?
For Haggle, open weights are what make the business work.
The player's own GPU runs the model, so our running cost per game is zero and the hosting bill stays flat however many people play. A $9 practice pack only works as a side hustle if each game costs us nothing.
People type real rates and real client situations into a tool like this. Here none of it leaves the device, because there's no server to send it to.
Nobody has to sign up or paste a key. The closest thing we found, an AI negotiation simulator on itch.io, asks players for their own Gemini or Mistral API key, and I think most freelancers would close the tab at that point.
No vendor can change the price, retire the model or cut off access. Anyone can fork the repo and add a client of their own, say a landlord or a recruiter.
A hosted closed model would write better lines, faster, for about half a cent a session, so we don't claim Haggle is cheaper per game. What open weights buy us is free hosting and privacy, and for a game about getting braver with money, we think that's the right trade.
My First User
Our first paying customer is my brother. He's a freelancer, so he quotes clients for a living. He played Haggle and paid me ₹1,500 (about $17), which is more than the $9 we planned to charge.
One sale to family proves very little about the market. Still, he's the kind of person Haggle is for and he chose to pay, and it told us what to do next: put it in front of freelancers who aren't related to us.
Prize Categories
- Best Use of Gemma: Gemma 2 2B plays every client, running locally in the player's browser through WebLLM and WebGPU.
1 reaction
OutThere: meet new people, make real friends and practice languages outdoors, with Gemma running in your browser
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
We built OutThere around one idea: the best reasons to go outside are other people.
Most of us have hundreds of online contacts and still struggle to meet someone new face to face. We wanted an app that helps you:
- Make new friends and real connections. Not followers: people you actually meet, laugh with, and see again.
- Practice the social side of life. Introducing yourself, starting a conversation, working in a group, presenting your ideas to people you just met. These skills only grow by doing them in person.
- Practice languages for real. A language-exchange walk in the park teaches you more than another week of flashcards, because you have to understand and be understood on the spot.
- Just have fun together. Games, walks, and small challenges in public parks that cost little or nothing.
Cairo has beautiful public spaces: Al-Azhar Park, the Nile corniche, the gardens of Heliopolis. The hard part isn't going out; it's having someone to go with and something to do once you're there.
OutThere is a small web app for finding and hosting low-cost group activities in public outdoor spaces: chess in the park, language-exchange walks, photo scavenger hunts. You can browse activities, filter by area, category and date, and join with one tap. Every card explains why it matches you.
If you want to host but don't know what to run, the AI Idea Lab uses Gemma to plan an activity for your group size, time, area, budget and interests: steps, conversation prompts that help strangers open up, accessibility notes, safety checks, a closing reflection, and one sentence on why it fits you.
Then the app gets out of the way. Every plan asks people to keep their phones in their pockets and talk to each other.
Who it's for: people new to a city, students, language learners, and anyone who wants more friends but doesn't know where to start.
Demo
Live app: mennatullah122.github.io
Try it: create an account, host an activity, then sign in as a second user and join it. Open the AI Idea Lab to let Gemma plan one for you. On desktop Chrome or Edge it runs on your own device; on other browsers it uses hosted Gemma 4.
Code
{% github Mennatullah122/Hacktoberfest26-OutThere %}
How I Built It
Open-weight AI, three ways, always labelled. Every plan shows exactly which model produced it:
1. On-device Gemma (default). If your browser supports WebGPU, Gemma 2 2B runs inside your browser via WebLLM. After a one-time ~1.5 GB download (cached), your interests and neighborhood never leave your device. No server, no API key, no cost per user.
2. Hosted Gemma 4 (fallback). Phones and browsers without WebGPU call a Supabase Edge Function that runs gemma-4-26b-a4b-it (falling back to gemma-4-31b-it) on Google AI Studio. The app says plainly that this mode sends your answers to Google's servers.
3. Bring your own. Point the app at your own Ollama or any OpenAI-compatible server running Gemma.
If no model is available, you get a curated template, clearly labelled "not AI-generated." We never wanted the app to pass off a template as AI.
Each plan includes conversation prompts and a closing reflection, because the goal isn't the game itself; it's the connection people make while playing it.
Guardrails we cared about:
- No invented places. The prompt forbids making up venue names, opening hours, fees or crowd levels. Venues are marked unverified and link to an OpenStreetMap search instead of claiming coordinates.
- Validated output. Model output is parsed defensively and normalized. Fixed safety rules (public areas only, no climbing, don't disturb wildlife) are always appended, whatever the model says.
- A locked-down endpoint. The hosted function builds the prompt itself from validated form fields, so it can't be used as a free general-purpose chatbot on our key. It also only accepts requests from the app's own site and rate-limits per IP.
- Fair joining rules. No duplicate joins, capacity limits, and no joining cancelled or finished activities.
- Community safety. Clear participation guidelines and a report button on every activity.
What bit us: Gemma 4 "thinks" before answering, and on the API those thinking tokens count against the output limit. Our first hosted calls came back completely empty because the model spent its whole budget thinking. The fix was thinkingLevel: "minimal", which turns thinking off; a short activity plan doesn't need it, and responses got much faster.
Stack: vanilla HTML/CSS/JS · WebLLM · Gemma 2 & Gemma 4 · Supabase Edge Functions (Deno) · GitHub Pages. A Supabase schema with Row Level Security and an atomic, row-locked join function is included for the next step: a shared multi-user version.
Why Does Open Innovation Matter?
Because the weights are open, Gemma can run inside the user's browser. You can't download a closed model into a browser tab. That made three things possible that a closed API wouldn't:
- Privacy by default. What you're interested in and which neighborhood you hang out in is personal. With on-device Gemma, it never leaves your phone or laptop.
- Free at any scale. There's no per-request bill, so the app can stay free for students and newcomers, the people who need new connections most.
- No lock-in. The same plan generator works on-device, on Google's hosted Gemma, or on anyone's own Ollama server. If a provider changes its terms, we switch with one setting.
Prize Categories
Best Use of Gemma: the AI Idea Lab runs Gemma 2 2B entirely in the browser via WebLLM, with Gemma 4 on Google AI Studio as a clearly labelled fallback for devices without WebGPU.
Team
Built by @This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
We built OutThere around one idea: the best reasons to go outside are other people.
Most of us have hundreds of online contacts and still struggle to meet someone new face to face. We wanted an app that helps you:
- Make new friends and real connections. Not followers: people you actually meet, laugh with, and see again.
- Practice the social side of life. Introducing yourself, starting a conversation, working in a group, presenting your ideas to people you just met. These skills only grow by doing them in person.
- Practice languages for real. A language-exchange walk in the park teaches you more than another week of flashcards, because you have to understand and be understood on the spot.
- Just have fun together. Games, walks, and small challenges in public parks that cost little or nothing.
Cairo has beautiful public spaces: Al-Azhar Park, the Nile corniche, the gardens of Heliopolis. The hard part isn't going out; it's having someone to go with and something to do once you're there.
OutThere is a small web app for finding and hosting low-cost group activities in public outdoor spaces: chess in the park, language-exchange walks, photo scavenger hunts. You can browse activities, filter by area, category and date, and join with one tap. Every card explains why it matches you.
If you want to host but don't know what to run, the AI Idea Lab uses Gemma to plan an activity for your group size, time, area, budget and interests: steps, conversation prompts that help strangers open up, accessibility notes, safety checks, a closing reflection, and one sentence on why it fits you.
Then the app gets out of the way. Every plan asks people to keep their phones in their pockets and talk to each other.
Who it's for: people new to a city, students, language learners, and anyone who wants more friends but doesn't know where to start.
Demo
Live app: mennatullah122.github.io
Try it: create an account, host an activity, then sign in as a second user and join it. Open the AI Idea Lab to let Gemma plan one for you. On desktop Chrome or Edge it runs on your own device; on other browsers it uses hosted Gemma 4.
Code
{% github Mennatullah122/Hacktoberfest26-OutThere %}
How I Built It
Open-weight AI, three ways, always labelled. Every plan shows exactly which model produced it:
1. On-device Gemma (default). If your browser supports WebGPU, Gemma 2 2B runs inside your browser via WebLLM. After a one-time ~1.5 GB download (cached), your interests and neighborhood never leave your device. No server, no API key, no cost per user.
2. Hosted Gemma 4 (fallback). Phones and browsers without WebGPU call a Supabase Edge Function that runs gemma-4-26b-a4b-it (falling back to gemma-4-31b-it) on Google AI Studio. The app says plainly that this mode sends your answers to Google's servers.
3. Bring your own. Point the app at your own Ollama or any OpenAI-compatible server running Gemma.
If no model is available, you get a curated template, clearly labelled "not AI-generated." We never wanted the app to pass off a template as AI.
Each plan includes conversation prompts and a closing reflection, because the goal isn't the game itself; it's the connection people make while playing it.
Guardrails we cared about:
- No invented places. The prompt forbids making up venue names, opening hours, fees or crowd levels. Venues are marked unverified and link to an OpenStreetMap search instead of claiming coordinates.
- Validated output. Model output is parsed defensively and normalized. Fixed safety rules (public areas only, no climbing, don't disturb wildlife) are always appended, whatever the model says.
- A locked-down endpoint. The hosted function builds the prompt itself from validated form fields, so it can't be used as a free general-purpose chatbot on our key. It also only accepts requests from the app's own site and rate-limits per IP.
- Fair joining rules. No duplicate joins, capacity limits, and no joining cancelled or finished activities.
- Community safety. Clear participation guidelines and a report button on every activity.
What bit us: Gemma 4 "thinks" before answering, and on the API those thinking tokens count against the output limit. Our first hosted calls came back completely empty because the model spent its whole budget thinking. The fix was thinkingLevel: "minimal", which turns thinking off; a short activity plan doesn't need it, and responses got much faster.
Stack: vanilla HTML/CSS/JS · WebLLM · Gemma 2 & Gemma 4 · Supabase Edge Functions (Deno) · GitHub Pages. A Supabase schema with Row Level Security and an atomic, row-locked join function is included for the next step: a shared multi-user version.
Why Does Open Innovation Matter?
Because the weights are open, Gemma can run inside the user's browser. You can't download a closed model into a browser tab. That made three things possible that a closed API wouldn't:
- Privacy by default. What you're interested in and which neighborhood you hang out in is personal. With on-device Gemma, it never leaves your phone or laptop.
- Free at any scale. There's no per-request bill, so the app can stay free for students and newcomers, the people who need new connections most.
- No lock-in. The same plan generator works on-device, on Google's hosted Gemma, or on anyone's own Ollama server. If a provider changes its terms, we switch with one setting.
Prize Categories
Best Use of Gemma: the AI Idea Lab runs Gemma 2 2B entirely in the browser via WebLLM, with Gemma 4 on Google AI Studio as a clearly labelled fallback for devices without WebGPU.
Team
Built by @This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
We built OutThere around one idea: the best reasons to go outside are other people.
Most of us have hundreds of online contacts and still struggle to meet someone new face to face. We wanted an app that helps you:
- Make new friends and real connections. Not followers: people you actually meet, laugh with, and see again.
- Practice the social side of life. Introducing yourself, starting a conversation, working in a group, presenting your ideas to people you just met. These skills only grow by doing them in person.
- Practice languages for real. A language-exchange walk in the park teaches you more than another week of flashcards, because you have to understand and be understood on the spot.
- Just have fun together. Games, walks, and small challenges in public parks that cost little or nothing.
Cairo has beautiful public spaces: Al-Azhar Park, the Nile corniche, the gardens of Heliopolis. The hard part isn't going out; it's having someone to go with and something to do once you're there.
OutThere is a small web app for finding and hosting low-cost group activities in public outdoor spaces: chess in the park, language-exchange walks, photo scavenger hunts. You can browse activities, filter by area, category and date, and join with one tap. Every card explains why it matches you.
If you want to host but don't know what to run, the AI Idea Lab uses Gemma to plan an activity for your group size, time, area, budget and interests: steps, conversation prompts that help strangers open up, accessibility notes, safety checks, a closing reflection, and one sentence on why it fits you.
Then the app gets out of the way. Every plan asks people to keep their phones in their pockets and talk to each other.
Who it's for: people new to a city, students, language learners, and anyone who wants more friends but doesn't know where to start.
Demo
Live app: mennatullah122.github.io
Try it: create an account, host an activity, then sign in as a second user and join it. Open the AI Idea Lab to let Gemma plan one for you. On desktop Chrome or Edge it runs on your own device; on other browsers it uses hosted Gemma 4.
Code
{% github Mennatullah122/Hacktoberfest26-OutThere %}
How I Built It
Open-weight AI, three ways, always labelled. Every plan shows exactly which model produced it:
1. On-device Gemma (default). If your browser supports WebGPU, Gemma 2 2B runs inside your browser via WebLLM. After a one-time ~1.5 GB download (cached), your interests and neighborhood never leave your device. No server, no API key, no cost per user.
2. Hosted Gemma 4 (fallback). Phones and browsers without WebGPU call a Supabase Edge Function that runs gemma-4-26b-a4b-it (falling back to gemma-4-31b-it) on Google AI Studio. The app says plainly that this mode sends your answers to Google's servers.
3. Bring your own. Point the app at your own Ollama or any OpenAI-compatible server running Gemma.
If no model is available, you get a curated template, clearly labelled "not AI-generated." We never wanted the app to pass off a template as AI.
Each plan includes conversation prompts and a closing reflection, because the goal isn't the game itself; it's the connection people make while playing it.
Guardrails we cared about:
- No invented places. The prompt forbids making up venue names, opening hours, fees or crowd levels. Venues are marked unverified and link to an OpenStreetMap search instead of claiming coordinates.
- Validated output. Model output is parsed defensively and normalized. Fixed safety rules (public areas only, no climbing, don't disturb wildlife) are always appended, whatever the model says.
- A locked-down endpoint. The hosted function builds the prompt itself from validated form fields, so it can't be used as a free general-purpose chatbot on our key. It also only accepts requests from the app's own site and rate-limits per IP.
- Fair joining rules. No duplicate joins, capacity limits, and no joining cancelled or finished activities.
- Community safety. Clear participation guidelines and a report button on every activity.
What bit us: Gemma 4 "thinks" before answering, and on the API those thinking tokens count against the output limit. Our first hosted calls came back completely empty because the model spent its whole budget thinking. The fix was thinkingLevel: "minimal", which turns thinking off; a short activity plan doesn't need it, and responses got much faster.
Stack: vanilla HTML/CSS/JS · WebLLM · Gemma 2 & Gemma 4 · Supabase Edge Functions (Deno) · GitHub Pages. A Supabase schema with Row Level Security and an atomic, row-locked join function is included for the next step: a shared multi-user version.
Why Does Open Innovation Matter?
Because the weights are open, Gemma can run inside the user's browser. You can't download a closed model into a browser tab. That made three things possible that a closed API wouldn't:
- Privacy by default. What you're interested in and which neighborhood you hang out in is personal. With on-device Gemma, it never leaves your phone or laptop.
- Free at any scale. There's no per-request bill, so the app can stay free for students and newcomers, the people who need new connections most.
- No lock-in. The same plan generator works on-device, on Google's hosted Gemma, or on anyone's own Ollama server. If a provider changes its terms, we switch with one setting.
Prize Categories
Best Use of Gemma: the AI Idea Lab runs Gemma 2 2B entirely in the browser via WebLLM, with Gemma 4 on Google AI Studio as a clearly labelled fallback for devices without WebGPU.
Team
Built by @mennaabdelaziz580
#devchallenge #hf26challenge
2 reactions
GrassRoute: The Zero-Signal Outdoor Companion & Trail Naturalist
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
Most outdoor mobile apps suffer from a tragic irony: they claim to help you connect with nature, yet they keep your eyes glued to a glowing 6-inch rectangle of glass. You end up staring at turn-by-turn navigation arrows, scrolling through social feed leaderboards, or squinting at push notifications while walking past blazing red sugar maples and listening to chickadees calling in the canopy.
GrassRoute flips this dynamic entirely. Its foundational design philosophy is simple: spend 30 seconds on your screen, and the next 60 minutes in the woods.
GrassRoute is an offline-first, open-source AI trail companion and naturalist built around three core pillars:
1. Sensory Micro-Quest Generator: Instead of generic GPS tracks, GrassRoute prompts you for your activity (forest hike, fall foliage jog, backyard gardening, birding stroll, or mindful grounding), your time budget (15 to 60+ minutes), and your companions (solo, dog walk, kids exploration, or run club). An on-device open-weight model synthesizes a 3-part sensory mission: one distinct foliage or bark observation, one acoustic or olfactory cue to listen/smell for, and one grounding challenge.
2. Pocket Mode & Audio Pacer (Screen Minimizer): The moment you tap "Touch Grass", the app enters a dimmed, battery-saving Pocket Sleep Mode. Synthesized Web Audio nature chimes (and optional offline voice cues) sound at milestone intervals—halfway mark, 5 minutes remaining, and completion. You put your phone deep inside your backpack or pocket and do not look at it while outdoors. It calculates your Grass-to-Screen Ratio (e.g. 96% Green Time), incentivizing minimum screen interaction.
3. Zero-Signal Offline Field Naturalist & Frost Planner:
- Autumn Foliage Pigment Radar: Explains the science of fall colors (anthocyanins trapped by cooling nights vs carotenoids revealed by chlorophyll breakdown), bark textures, and critical safety lookalikes (harmless Staghorn Sumac with upright velvet berries vs hazardous Poison Sumac/Poison Ivy with drooping white berries).
- Trail Bird Call Identifier: Teaches bird identification using phonetic mnemonics ("fee-bee", "chick-a-dee-dee", "Who cooks for you?") without needing mega-byte audio downloads.
- October Frost Date & Planting Radar: Calculates weeks until the first seasonal frost by climate zone and provides a concrete checklist for what to plant this week—from hardneck garlic cloves and cover crops to spring-flowering bulbs.
- Local AI Naturalist Q&A: When you're 5 miles deep into a canyon or wooded ridgeline with zero cellular bars, you can consult an on-device open-weight LLM running in GPU memory with zero network requests.
GrassRoute is built for hikers, runners, gardeners, dog walkers, and anyone experiencing digital burnout who needs a nudge to step outside and breathe crisp autumn air.
Demo
- Live Deployed App: divyansh2102t-dev.github.io
- Render Live Service: Ready for 1-click deployment via the included render.yaml Blueprint.
Try the Zero-Signal Offline Test:
1. Open GrassRoute in Chrome, Edge, or Android Chrome.
2. Click Load Local AI to load Qwen 2.5 (1.5B) into your browser's WebGPU cache.
3. Turn on Airplane Mode (disconnect Wi-Fi and mobile data).
4. Generate an outdoor quest, ask the field naturalist questions, search the foliage catalog, or start Pocket Mode. It runs with zero network packets!
Code
The complete source code is open source under the MIT License:
👉 GitHub Repository: divyansh2102t-dev/grassroute
grassroute/
├── index.html # Responsive UI, Pocket Mode overlay, multi-tab layout
├── app.js # WebLLM engine, quest generation, audio synthesizer, timer
├── fieldguide.js # Zero-signal botanical, bird call, and frost database
├── style.css # Sunlight-readable outdoor theme with breathing animations
├── render.yaml # Render Blueprint specification (Static Site & Node Service)
├── server.js # Zero-dependency Node.js HTTP server for Render runtime
├── package.json # Project scripts and metadata
├── CONTRIBUTING.md # Hacktoberfest contributor guide
└── README.md # Comprehensive documentation and local run instructions
How I Built It
GrassRoute was intentionally engineered as an offline-first hybrid architecture:
1. In-Browser Local Inference via WebLLM & WebGPU
Rather than relying on remote cloud APIs that fail in the wild, GrassRoute uses @mlc-ai/web-llm to run open-weight models directly in client-side WebGPU memory:
- Models Supported: Qwen2.5-0.5B-Instruct, Qwen2.5-1.5B-Instruct, Llama-3.2-1B-Instruct, and SmolLM-360M-Instruct.
- Zero Cloud Latency: The model is compiled to WebAssembly (WASM) and runs shader execution on the user's native GPU. Once cached by the browser's CacheStorage API, inference works completely offline with zero server roundtrips.
2. Deterministic Fallback & Knowledge Base (fieldguide.js)
Real outdoor utility requires instant reliability. If a user is on an older mobile device without WebGPU support, or needs an instant answer in 0 milliseconds, the app includes a deterministic JavaScript knowledge engine:
- Instant multi-field keyword matcher indexing Latin binomials, leaf serration types, pigment chemistry, and safety warnings.
- USDA climate zone frost date estimator calculating exact days until the first hard frost.
- Curated sensory trail missions for hiking, running, gardening, birding, and mindfulness.
3. Screen-Free Web Audio & Speech Synthesis
To solve the "screen addiction" dilemma, GrassRoute implements a pure Web Audio API synthesizer. Without downloading external audio files, it mathematically generates pure sine-wave harmonic pentatonic chimes (528 Hz, 660 Hz, 792 Hz) to gently signal milestones while the phone is tucked in a jacket pocket. When enabled, the browser's native SpeechSynthesis speaks the mission prompts aloud before you step out the door.
Why Does Open Innovation Matter?
Building for the outdoors brings the reality of proprietary cloud AI into sharp focus. Here is why open innovation and open-weight models were essential to make GrassRoute work:
1. Canyons and Ridge Trails Have No 5G:
Closed APIs (OpenAI, Anthropic, Google Cloud) presuppose high-bandwidth, continuous connectivity. But nature doesn't have Wi-Fi. 5 miles into a national forest or valley trail, a closed AI app turns into an unresponsive error screen. Open-weight models (Qwen, Llama, SmolLM) running locally via WebGPU work in deep wilderness, airplane mode, and basement mudrooms.
2. Absolute Privacy of Location and Health Habits:
Closed fitness and outdoor platforms collect GPS coordinates, trail timestamps, routines, and biometric patterns to build commercial advertising profiles. GrassRoute sends zero bytes to any cloud server. Your field journal, frost zone, and walking habits live exclusively in your local localStorage.
3. Zero Marginal Operating Cost:
With open weights, running an outdoor assistant for thousands of hikers costs exactly $0.00 in API inference bills. The computation happens on the device already in the hiker's pocket. Anyone in the open-source community can fork, self-host, and customize the tool without entering a credit card.
4. Community Extensibility for Regional Nature:
Closed models often suffer from geographical bias. An open-source codebase allows contributors from across the globe to PR regional native plant guides, indigenous botanical names, and local bird mnemonics directly into fieldguide.js during Hacktoberfest.
Prize Categories
Best Use of Render
GrassRoute is built and configured for deployment on Render:
- Includes a complete render.yaml Blueprint specification defining both a global Static Site (with custom security headers for WebGPU SharedArrayBuffer support) and a Node.js Web Service runtime.
- Includes a containerized server.js ready to spin up on Render's global application runtime with 1-click blueprint synchronization.
5 reactions
Mentions
WEB LLM : Local Run Models on your hardware tetrac.xyz runs a version via SDK for free inference tool calling Run your own for rainy days when wifi goes dark - Open Source: Download the Models - mlc-ai/web-llm - 20k Stars - Small models are getting impressive.
Ghostlight: a ghost that refuses to lie <!-- PUBLISHING CHECKLIST (this comment will not render on DEV) 1. Cover image: upload public/og.png, or paste this URL if the field accepts one: cdn.jsdelivr.net 2. Title: "Ghostlight: a ghost that refuses to lie" 3. Tags (DEV allows 4): #devchallenge #hf26challenge #opensource #webgpu (the first two are required by the challenge template) 4. The inline images already use public, absolute CDN URLs — no upload needed. Cover: see step 1. 5. Fill the two bracketed spots: - Demo section: your Render URL (deploy first, see README) or your screen recording link - "The Spirit of It": one true sentence about the person you thought of, if you want it 6. Prize Categories: delete the Render and .tech bullets if you did not deploy/claim them. 7. Optional: save this session with DevRelay and embed it in My Agent Session. 8. Everything else is factual and verified (see docs/VERIFICATION.md). --> This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine Ghostlight: a ghost that refuses to lie !The finished ofrenda: six candles, a portrait, marigolds, water, and the offerings from the answers What I Built Ghostlight is a remembrance studio that runs entirely in your browser. You answer six small questions about someone you carry — the kitchen, the song, the place, the saying, the small thing, the unfinished thing — and it turns your words into three things: 1. A remembrance. A short, concrete portrait written from your answers. 2. An ofrenda. A tiered altar of six candles, marigolds, water, cut paper and the offerings hiding in your answers, inspired by Día de Muertos. Click a lit candle or an offering to read the memory behind it. 3. A keepsake. A single HTML file with the portrait, the remembrance and every memory inside. It opens offline, needs no app, and contains no scripts. Everything runs on your own machine. An open-weight Gemma 2 model writes the remembrance through WebGPU, and the archive lives in IndexedDB. There is no backend, no account, no analytics, and no cloud inference. Uploaded: zero bytes. I read "Ghost in the Machine" two ways, and both are in the build. The first is the traditional one: this is a tool for the dead, built on the nights when the veil is supposed to be thin. Día de Muertos is not a séance; it is a table set for the people who can't come to dinner. I borrowed the shape of that table — tiers, candles, cempasúchil, a glass of water for the journey — with as much respect as I could, and I explain every element in plain language on the page so nobody has to already know the tradition to understand the room. The second reading is the one that decided the architecture: the ghost is not the model. It is the archive. The model is just the candle that makes it visible. Most "AI memory" projects put the model in the middle, so when the company changes the model, the price, or the policy, the memory goes with it. Ghostlight inverts that. The archive is the source of truth, the model is small and replaceable, and there is a mode that keeps your words exactly as you wrote them, with no model at all. That last part matters more than any feature list, so the tagline became a rule: > The ghost is not the model. The model is the candle. The ghost is what you remember. The demo archive in these screenshots is fictional. Ruma Das is not a real person: the portrait was generated for the project, the six memories were written by me, and the finished demo remembrance is a hand-written target rather than a model output. Your archive never leaves your browser. Demo Run it locally by following the below information. git clone https://github.com/soumwadeep/ghostlight.git cd ghostlight npm install npm run dev Then open <localhost> and choose one of two honest options on the weave screen: - Summon Gemma 2 · ~1.4 GB. Runs in the tab through WebGPU, downloaded once, then cached. After that the room works with the Wi-Fi off. - Candle mode. No download, no model, instant. It arranges your own sentences into the remembrance and never rewrites them. There is also a 60-second video demo you can record yourself if you prefer (four shots are enough): walk through the finished demo ofrenda, click a candle to read a memory, ask a question it can answer, then ask one it can't — and watch the flame refuse. Code {% embed soumwadeep/ghostlight %} The parts worth reading: - src/lib/ai/prompts.ts — every instruction sent to the model, including the grounding rules. No hidden prompt. - src/lib/ai/retrieval.ts — the archive's own memory search and the refusal logic. - src/lib/keepsake.ts — the self-contained HTML keepsake, with every user string escaped. - docs/VERIFICATION.md — the environment, timings, and the raw model output from a real run. MIT licensed. React 19, Vite 8, TypeScript, motion, idb-keyval, vite-plugin-pwa, and no backend of any kind. How I Built It The open-source AI is not decoration here. It is the only way the project's promise can be true. The stack: | Piece | What it does | | --- | --- | | Gemma 2 · 2B IT (open weights, Google DeepMind) | Writes the remembrance and rephrases grounded answers | | WebLLM (Apache-2.0, MLC AI) | Runs the model in the browser via WebGPU | | Local inference | The model, the archive, the photograph, and your questions never leave the device | | IndexedDB | The archive. No database service, no auth provider, no API key | | My own pipeline | No agent framework: a small, auditable, hand-written path from answers to a remembrance | The data flow is deliberately boring, because boring is what you want when the data is someone's grief: your six answers → the archive (IndexedDB, on this device) → memory search (the archive decides what is true) → Gemma 2 · 2B (WebLLM + WebGPU, in the tab) → a remembrance (150–200 words, three paragraphs) → the ofrenda + a keepsake There are two AI jobs, with different rules, and the difference is the whole point. Weaving is creative but constrained. The prompt forbids first person, forbids inventing an instrument, person, place, object or food, and assigns each paragraph to specific memories so none get dropped: - Third person only. Never use "I", "me", "my", "we" or "our". - Every sentence must be supported by the memories above. - Write exactly 3 short paragraphs, separated by a blank line. Paragraph 1: only THE KITCHEN and THE SMALL THING. Paragraph 2: only THE SONG and THE PLACE. Paragraph 3: only THE SAYING and THE UNFINISHED THING. - Do not repeat a phrase, an idea or an image from one paragraph in another. Answering is strict, and it refuses before the model is ever called: // The archive decides what is true. The model only says it gently. const hit = retrieveFromArchive(question, ofrenda) if (!hit) return { answer: 'The flame has no memory of that.', grounded: false } // If something matched, the model may only rephrase it — // and the app attaches the citation. The model does not choose its sources. Ask "What was her mother's name?" and you get "The flame has no memory of that." No hallucination, no polite invention, no guess dressed up as memory. That single behavior changed how I designed everything else, because it let me be honest in the interface: the six memories are always shown next to the remembrance, and the reading says out loud that the archive is the source of truth. Two more decisions I'd keep: - No microphone, on purpose. Browser speech APIs often send audio to a vendor. A local-first grief tool that quietly uploads your voice is not local-first, so I shipped typing only. - Candle mode is not a fallback. It is the guarantee. If the model disappears, changes, or refuses to load, the room still works and your words stay exactly as you wrote them. And then there was the honest bug. I started with the newer, smaller Gemma 3 1B. Its prebuilt WebLLM record cannot load — it throws Only one of context_window_size and sliding_window_size can be positive — and the suggested config fix loads the model but produces garbage, because Gemma 3 interleaves global layers with 512-token sliding-window layers (mlc-ai/web-llm#873). So I ship Gemma 2 2B, which runs correctly, and left the model id as a single line in src/lib/ai/webllm.ts for the day that build is fixed. That is what "you can swap models" actually looks like in practice. Verified, not claimed. On a desktop Chrome with WebGPU: the model downloaded 1.4 GB in about two minutes, wrote a three-paragraph remembrance from six memories in 13.6 seconds on-device, and answered a grounded question in 1.9 seconds with a citation attached. The app is a PWA, so after the first run the shell and the model are cached and it works offline. The keepsake export is a 321 KB HTML file with zero <script> tags. 21 unit tests cover parsing, candle-mode weaving, retrieval refusals, and keepsake escaping. !A remembrance written on-device by Gemma 2, with the honesty note and the header badge reading "Gemma · lit" !A grounded answer with its citation, answered by the model in 1.9s Why Does Open Innovation Matter? This is the part I cared about most, because "private AI" should not be a settings toggle. Grief is not a dataset. If the remembrance is written by a cloud API, then the thing I said about my grandmother's kitchen is now a request that crossed someone's servers, sat under someone's retention policy, and may have shaped someone's future model. Local inference changes the shape of the promise: the story never becomes someone's request, so it can never become someone's training data. That is structural, not a checkbox. Permanence. A closed model can be improved, repriced, restricted, or shut down. A 1.4 GB file on my disk cannot be deprecated. And because the archive exports as plain JSON, as a self-contained HTML keepsake, and as my own words, nothing here depends on a service staying alive. The keepsake will open in twenty years on a machine that has never heard of Gemma. It costs nothing to run. No tokens, no meter, no bill. The cost is one download and the electricity already in the machine. Control, all the way down. Every prompt is readable in the app and in the repo. I can change the tone, swap the model, or fork the whole room under MIT. The people in an archive should not need permission to keep it. | | A closed API | Ghostlight | | --- | --- | --- | | Model quality | Frontier scale | Small, on purpose | | Works offline | No | Yes, after one download | | Your answers leave the device | Usually | Never | | Cost per remembrance | Metered | Zero | | You can read the prompt | Rarely | Yes, everything is public or in the app | | Survives the service | Until it changes | The archive and the file are yours | There is a real tradeoff in that table, and I'll name it: a frontier model writes more beautifully. A 2B model is plainer, and once it reached for a detail that wasn't in the memories. So I did three things instead of pretending: I show the six memories next to the remembrance, I ship candle mode as the strict option, and the reading says out loud "small models can reach; the memories you kept are the source of truth." Honesty in the interface is a feature, not a disclaimer. Open innovation wins here not by beating the biggest model, but by making a promise the biggest model can't: the door stays closed, and the light stays on after the company that made the model is gone. My Agent Session Ghostlight was built in an AI coding agent session, end to end: design, the six-rite flow, the ofrenda, the grounding pipeline, the keepsake, and the test suite. That is part of why the write-up includes a verification file with raw output instead of vibes. [Optional: save this session with DevRelay and embed it here with the agent_session tag, or link the session. If you don't publish the session, replace this paragraph with a link to the build log in the repo, or delete this section — it's optional.] The Spirit of It The moment it landed wasn't when the model wrote something beautiful. It was when I asked it something cruel. I had just finished the refusal logic, and I typed a question the archive couldn't answer: "What was her mother's name?" The flame answered: > "The flame has no memory of that." I sat with that for a while. Every chatbot I've used is trained, at some level, to be helpful — to smooth over the gap, to offer a plausible guess, to keep the conversation going. This one refused. Not because it was broken, but because that is the only honest thing a memorial tool can say when the record is silent. If it had invented a name, the invention would have lived in my archive forever, wearing the costume of a memory. So the feature I'm proudest of is a hole: an AI that can say I don't know about the person you loved. The ghostlight stays lit, and it stays truthful. [Optional, and worth it: add one true sentence about the person you thought of while building this. A specific detail — a smell, a phrase, a small object — will do more for this section than anything else I can write.] The demo remembrance in the screenshots is the target I was aiming at: "Ruma Das kept her kingdom small and exact: a kitchen, a terrace, and a blue tin of buttons." Hand-written, by me, for a fictional person. The whole project is an attempt to make a machine capable of getting closer to that without ever lying about it. Prize Categories - Best Use of Gemma — Gemma 2 2B IT (open weights, Google DeepMind) runs locally in the browser through WebLLM and WebGPU. It is the core of both the weave and the grounded answers; the model id is a single line in the source. Built solo, with an AI agent as the pair programmer. The demo archive is fictional; everything else is yours. <!-- Team Submissions: single author, no teammates to credit. -->
🦥 SlothSummarize: Let AI Read It So You Don't Have To This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady. 🦥 What I Built Meet SlothSummarize — an AI-powered summarizer that does the reading so you don't have to! !Home Page We all deal with lengthy emails, meeting notes, chat conversations, and articles that take forever to read. I wanted to build something that makes understanding long text effortless. SlothSummarize lets you paste any text and instantly get a 2–3 sentence TL;DR and up to five actionable next steps. What makes it special? - 📝 Instant TL;DR: Get straight to the important points. - ✅ Action Items: Extract concrete next steps from lengthy text. - 🎭 Three Summary Styles: Lazy (casual), Formal (professional), and Brutal (no-fluff). - 🔒 Privacy First: AI inference happens locally in your browser. - 💸 No API Keys or Subscription Costs: Run open-weight models on your own device. - 🦥 Simple and Fun: A sloth-themed interface that makes summarization less boring. Whether you're a developer catching up on documentation, a student reviewing notes, or a professional dealing with endless meeting transcripts, SlothSummarize helps you spend less time reading and more time doing. The idea is simple: Less reading. More doing. Maximum laziness. 🎬 Demo Live Demo: [slothsummarize.onrender.com] Here's how it works: 1. Open SlothSummarize in a compatible browser. 2. Select your preferred AI model. 3. Paste your text and choose a summary style. 4. Click summarize and let the sloth do the work! 5. Get your TL;DR and action items in seconds, depending on the model and your device. !Waiting for model to install !Summarized result 💻 Code GitHub Repository: [anshika361/SlothSummarize] The project is built with a simple, lightweight structure: SlothSummarize/ ├── index.html ├── style.css ├── app.js ├── llm-worker.js ├── sloth_mascot.png └── README.md No complicated setup, no backend infrastructure, and no API keys required for inference. ⚙️ How I Built It The biggest question I wanted to explore was: Can we build a useful AI application that runs entirely in the browser without sending user data to an external AI service? The answer is SlothSummarize! 🧠 Open-Source AI with WebLLM I used WebLLM, an open-source inference engine that runs language models directly in the browser using WebGPU. The application supports these open-weight models: - Phi-3.5 Mini Instruct: The default model for high-quality summaries. - Llama 3.2 1B Instruct: A smaller model for lightweight use. - Llama 3.2 3B Instruct: An alternative balancing model size and output quality. Users can choose a model depending on their device capabilities and preferences. 🏗️ Technology Stack - Frontend: HTML, CSS, and vanilla JavaScript - AI Runtime: WebLLM - Models: Phi-3.5 Mini Instruct and Llama 3.2 1B/3B Instruct - Inference: Local browser execution using WebGPU - Design: Sloth-themed UI, glassmorphism, and Hacktoberfest-inspired colors 🔄 How It Works 1. The user pastes text into the application. 2. JavaScript prepares the summarization prompt based on the selected style. 3. WebLLM passes the prompt to the selected local language model. 4. The model generates a concise summary and relevant action items. 5. The results are displayed directly in the browser. There is no application backend involved in the inference process. The model files are downloaded when required and cached for subsequent use. After the initial setup, the application is designed to support offline use, provided the necessary assets and model files are available locally. 🌍 Why Does Open Innovation Matter? Open innovation makes AI more accessible, customizable, and privacy-conscious. Many AI applications rely on external APIs, which can introduce recurring costs, network dependencies, and concerns about sharing sensitive information. I wanted SlothSummarize to take a different approach. 🔒 Privacy Without Compromise People often summarize private emails, internal discussions, and meeting notes. Processing their text locally means it doesn't need to be sent to a third-party inference service. 💸 AI Without Per-Request Costs There are no paid inference API calls or token-based charges. Users can run supported models on their own hardware. 🔧 Freedom to Experiment Open-weight models allow experimentation with different model sizes and summarization styles without being tied to a single proprietary AI provider. 🌱 Innovation Without Heavy Infrastructure A useful AI tool doesn't always need a complex backend, cloud deployment, or expensive infrastructure. With WebLLM and open-weight models, SlothSummarize demonstrates how a simple web application can provide AI-powered functionality directly on a user's device. Open innovation made it possible to build a tool that is lightweight, customizable, and designed with privacy in mind. 🦥 The Lazy Payoff Imagine receiving a long meeting transcript with several decisions, deadlines, and action items. Instead of reading every line and manually identifying what matters, you paste it into SlothSummarize and get a concise overview. | Before | After | |---|---| | Read lengthy email threads | Scan the key points | | Review entire meeting notes | Get a short TL;DR | | Manually find follow-up tasks | Extract suggested action items | | Rewrite summaries for different audiences | Switch between three styles | | Send private text to a cloud AI API | Process text locally | The actual time saved depends on the text length, model, and device performance. Larger models may take time to download and generate results, especially on less powerful hardware. The best part? Once the model is cached, you can reuse it without downloading it again every time. It's a small productivity improvement, but those little saved moments add up. Less time reading. More time building. That's the sloth philosophy. 🦥 🏆 Prize Categories Hacktoberfest Open-Source AI Challenge — Week 3: Slow and Steady SlothSummarize aligns with the challenge by combining open-weight AI, open-source inference technology, and practical automation to reduce everyday effort. Add any specific partner prize categories you are entering after confirming the current challenge rules. --- Thanks for checking out SlothSummarize! If you like the idea, explore the code, share feedback, or contribute to making the sloth even smarter. Let AI handle the reading while you enjoy the slow and steady life. 🦥💚 #Hacktoberfest #OpenSource #AI #WebLLM #WebGPU #JavaScript #PrivacyFirst
Haggle: rehearse your freelance rate against a lowballing client who lives in your browser tab This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Built by @mrmaran and @vettri_vel_f6a5c117c95b00. What I Built A client reads your quote and writes back: "$4,000 is a bit steep for me right now. Could we try a trial project for $1,800?" Most freelancers answer a message like that for the first time when the money is real. In a 2018 survey of 267 freelance science writers by The Open Notebook, 14% said they never ask for more, and 45% of those who did ask said they often got it. Haggle lets you practise that conversation first. You quote a price and get up to eight turns against one of three difficult clients: - Marcus, the lowballer, offers less than half and asks for a free trial. - Dana, the scope creeper, keeps slipping in "just one more page". - Viktor, the late payer, wants to pay in 90 days. At the end you get a receipt with your score, the client's real limit, and the exact line where you gave money away. In our own play-test that line was "Okay, I could do $3,800." It dropped the price by $200 and asked for nothing back. Marcus didn't budge, and his real limit turned out to be $3,400. The client is played by Gemma 2 2B, running inside your browser tab. There's no server, no API key and no account, and nothing you type leaves your computer. The people who'd pay for this are freelancers who know they undercharge. A two-day negotiation seminar costs $1,489, and practice apps charge $10 to $19 a month. Our plan is one free client and a $9 pack for the rest. We have exactly one paying user so far, and he's family (more on him below), so treat the $9 as a plan, not a proven price. Demo Play it here: haggle.mrmaran.workers.dev {% embed youtube.com %} Start negotiating downloads the model once, about 1.4 GB, and your browser caches it after that. You need a WebGPU browser such as a current Chrome or Edge, and a computer with a graphics card. Play without the AI skips the download and works in any modern browser. Simple rules read your moves and the client answers with fixed lines. If you're curious how the model reads you, add ?debug to the address. After every turn it shows the model's label for your line and whether code overruled it. !Haggle receipt: the line "Okay, I could do $3,800." boxed in red, score 58 out of 100 A receipt from a round against Marcus. One $200 concession for nothing, quoted back in red. Code {% embed Mramaran/haggle %} It's MIT licensed, written in TypeScript with Vite, and has 38 unit tests and 6 Playwright end-to-end tests. How I Built It Code decides every number Give a 2B model a negotiation about money and sooner or later it will invent a price. So we split the work: | Part | Done by | |---|---| | Opening offer, each concession step, the real limit, when the game ends | Code | | The client's lines, in character | Gemma 2 2B, checked by code | | Reading your move: holding firm, discounting, trading, walking away, accepting | Gemma 2 2B, with code rules for its known blind spots | | The score | Code only | On each turn, code picks the client's move: raise, hold, press, or give a final number. Gemma is told the move and the one dollar amount it may say, and it writes the line. Code checks the reply. If Gemma invents a number, breaks character or agrees when it shouldn't, it gets one retry, and if that fails too the player gets a plain fixed line instead. Scoring is code as well. You get up to 60 points for how close you land to the client's real limit and up to 40 for never giving ground without getting something back, minus 12 for every concession you gave away for nothing. Picking the model We tested models on day one, before writing any of the game. Gemma 3 1B looped, invented amounts and read 0 of 12 player moves correctly. Qwen 2.5 1.5B kept losing track of who was speaking and read 11 of 16. Gemma 2 2B held the role across 15 scripted games and wrote 126 replies without a single invented amount or character break, so we went with it. Running in the browser WebLLM runs Gemma 2 2B on WebGPU. The half-precision build needs about 1.9 GB of GPU memory, and there's a fallback build for GPUs that can't do half precision. The model library only loads when you start the AI client, so the page itself is about 9 KB compressed. On a laptop with an RTX 40-series GPU, a turn takes 2.3 to 3.3 seconds. The share link on the scorecard carries the score and the quoted line in the URL, so a shared receipt opens on any device without loading the model. What testing caught A four-round play-test on the real model got the money right. Offers matched the rules on 19 of 19 turns. Gemma wrote 21 of 23 replies on its first try. Its reading of the player's move held on 15 of 19 turns, and code corrected the other four. It also turned up three bugs that unit tests would never have found. The first: asking "What's your real budget?" got read as a trade, so the client raised his offer for a question. Questions are now settled before trades. The second was funnier. Mashing the keyboard got labelled "holding firm", and random letters walked Marcus all the way up to his limit. A line with no price and no ordinary English word now counts as off-topic, and the client steers you back to the project. The third only showed up after deploying. The AI worked on localhost and failed with "Failed to fetch" on the live site. Hugging Face, which hosts the model files, rejected downloads whose Referer was a workers.dev page. Adding <meta name="referrer" content="no-referrer"> fixed it. Two faults are still there. The model sometimes uses the wrong direction word ("bump it down" while raising his offer), and now and then it repeats the player's figure as if it were its own. Why Does Open Innovation Matter? For Haggle, open weights are what make the business work. The player's own GPU runs the model, so our running cost per game is zero and the hosting bill stays flat however many people play. A $9 practice pack only works as a side hustle if each game costs us nothing. People type real rates and real client situations into a tool like this. Here none of it leaves the device, because there's no server to send it to. Nobody has to sign up or paste a key. The closest thing we found, an AI negotiation simulator on itch.io, asks players for their own Gemini or Mistral API key, and I think most freelancers would close the tab at that point. No vendor can change the price, retire the model or cut off access. Anyone can fork the repo and add a client of their own, say a landlord or a recruiter. A hosted closed model would write better lines, faster, for about half a cent a session, so we don't claim Haggle is cheaper per game. What open weights buy us is free hosting and privacy, and for a game about getting braver with money, we think that's the right trade. My First User Our first paying customer is my brother. He's a freelancer, so he quotes clients for a living. He played Haggle and paid me ₹1,500 (about $17), which is more than the $9 we planned to charge. One sale to family proves very little about the market. Still, he's the kind of person Haggle is for and he chose to pay, and it told us what to do next: put it in front of freelancers who aren't related to us. Prize Categories - Best Use of Gemma: Gemma 2 2B plays every client, running locally in the player's browser through WebLLM and WebGPU.
OutThere: meet new people, make real friends and practice languages outdoors, with Gemma running in your browser This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass What I Built We built OutThere around one idea: the best reasons to go outside are other people. Most of us have hundreds of online contacts and still struggle to meet someone new face to face. We wanted an app that helps you: - Make new friends and real connections. Not followers: people you actually meet, laugh with, and see again. - Practice the social side of life. Introducing yourself, starting a conversation, working in a group, presenting your ideas to people you just met. These skills only grow by doing them in person. - Practice languages for real. A language-exchange walk in the park teaches you more than another week of flashcards, because you have to understand and be understood on the spot. - Just have fun together. Games, walks, and small challenges in public parks that cost little or nothing. Cairo has beautiful public spaces: Al-Azhar Park, the Nile corniche, the gardens of Heliopolis. The hard part isn't going out; it's having someone to go with and something to do once you're there. OutThere is a small web app for finding and hosting low-cost group activities in public outdoor spaces: chess in the park, language-exchange walks, photo scavenger hunts. You can browse activities, filter by area, category and date, and join with one tap. Every card explains why it matches you. If you want to host but don't know what to run, the AI Idea Lab uses Gemma to plan an activity for your group size, time, area, budget and interests: steps, conversation prompts that help strangers open up, accessibility notes, safety checks, a closing reflection, and one sentence on why it fits you. Then the app gets out of the way. Every plan asks people to keep their phones in their pockets and talk to each other. Who it's for: people new to a city, students, language learners, and anyone who wants more friends but doesn't know where to start. Demo Live app: mennatullah122.github.io Try it: create an account, host an activity, then sign in as a second user and join it. Open the AI Idea Lab to let Gemma plan one for you. On desktop Chrome or Edge it runs on your own device; on other browsers it uses hosted Gemma 4. Code {% github Mennatullah122/Hacktoberfest26-OutThere %} How I Built It Open-weight AI, three ways, always labelled. Every plan shows exactly which model produced it: 1. On-device Gemma (default). If your browser supports WebGPU, Gemma 2 2B runs inside your browser via WebLLM. After a one-time ~1.5 GB download (cached), your interests and neighborhood never leave your device. No server, no API key, no cost per user. 2. Hosted Gemma 4 (fallback). Phones and browsers without WebGPU call a Supabase Edge Function that runs gemma-4-26b-a4b-it (falling back to gemma-4-31b-it) on Google AI Studio. The app says plainly that this mode sends your answers to Google's servers. 3. Bring your own. Point the app at your own Ollama or any OpenAI-compatible server running Gemma. If no model is available, you get a curated template, clearly labelled "not AI-generated." We never wanted the app to pass off a template as AI. Each plan includes conversation prompts and a closing reflection, because the goal isn't the game itself; it's the connection people make while playing it. Guardrails we cared about: - No invented places. The prompt forbids making up venue names, opening hours, fees or crowd levels. Venues are marked unverified and link to an OpenStreetMap search instead of claiming coordinates. - Validated output. Model output is parsed defensively and normalized. Fixed safety rules (public areas only, no climbing, don't disturb wildlife) are always appended, whatever the model says. - A locked-down endpoint. The hosted function builds the prompt itself from validated form fields, so it can't be used as a free general-purpose chatbot on our key. It also only accepts requests from the app's own site and rate-limits per IP. - Fair joining rules. No duplicate joins, capacity limits, and no joining cancelled or finished activities. - Community safety. Clear participation guidelines and a report button on every activity. What bit us: Gemma 4 "thinks" before answering, and on the API those thinking tokens count against the output limit. Our first hosted calls came back completely empty because the model spent its whole budget thinking. The fix was thinkingLevel: "minimal", which turns thinking off; a short activity plan doesn't need it, and responses got much faster. Stack: vanilla HTML/CSS/JS · WebLLM · Gemma 2 & Gemma 4 · Supabase Edge Functions (Deno) · GitHub Pages. A Supabase schema with Row Level Security and an atomic, row-locked join function is included for the next step: a shared multi-user version. Why Does Open Innovation Matter? Because the weights are open, Gemma can run inside the user's browser. You can't download a closed model into a browser tab. That made three things possible that a closed API wouldn't: - Privacy by default. What you're interested in and which neighborhood you hang out in is personal. With on-device Gemma, it never leaves your phone or laptop. - Free at any scale. There's no per-request bill, so the app can stay free for students and newcomers, the people who need new connections most. - No lock-in. The same plan generator works on-device, on Google's hosted Gemma, or on anyone's own Ollama server. If a provider changes its terms, we switch with one setting. Prize Categories Best Use of Gemma: the AI Idea Lab runs Gemma 2 2B entirely in the browser via WebLLM, with Gemma 4 on Google AI Studio as a clearly labelled fallback for devices without WebGPU. Team Built by @This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass What I Built We built OutThere around one idea: the best reasons to go outside are other people. Most of us have hundreds of online contacts and still struggle to meet someone new face to face. We wanted an app that helps you: - Make new friends and real connections. Not followers: people you actually meet, laugh with, and see again. - Practice the social side of life. Introducing yourself, starting a conversation, working in a group, presenting your ideas to people you just met. These skills only grow by doing them in person. - Practice languages for real. A language-exchange walk in the park teaches you more than another week of flashcards, because you have to understand and be understood on the spot. - Just have fun together. Games, walks, and small challenges in public parks that cost little or nothing. Cairo has beautiful public spaces: Al-Azhar Park, the Nile corniche, the gardens of Heliopolis. The hard part isn't going out; it's having someone to go with and something to do once you're there. OutThere is a small web app for finding and hosting low-cost group activities in public outdoor spaces: chess in the park, language-exchange walks, photo scavenger hunts. You can browse activities, filter by area, category and date, and join with one tap. Every card explains why it matches you. If you want to host but don't know what to run, the AI Idea Lab uses Gemma to plan an activity for your group size, time, area, budget and interests: steps, conversation prompts that help strangers open up, accessibility notes, safety checks, a closing reflection, and one sentence on why it fits you. Then the app gets out of the way. Every plan asks people to keep their phones in their pockets and talk to each other. Who it's for: people new to a city, students, language learners, and anyone who wants more friends but doesn't know where to start. Demo Live app: mennatullah122.github.io Try it: create an account, host an activity, then sign in as a second user and join it. Open the AI Idea Lab to let Gemma plan one for you. On desktop Chrome or Edge it runs on your own device; on other browsers it uses hosted Gemma 4. Code {% github Mennatullah122/Hacktoberfest26-OutThere %} How I Built It Open-weight AI, three ways, always labelled. Every plan shows exactly which model produced it: 1. On-device Gemma (default). If your browser supports WebGPU, Gemma 2 2B runs inside your browser via WebLLM. After a one-time ~1.5 GB download (cached), your interests and neighborhood never leave your device. No server, no API key, no cost per user. 2. Hosted Gemma 4 (fallback). Phones and browsers without WebGPU call a Supabase Edge Function that runs gemma-4-26b-a4b-it (falling back to gemma-4-31b-it) on Google AI Studio. The app says plainly that this mode sends your answers to Google's servers. 3. Bring your own. Point the app at your own Ollama or any OpenAI-compatible server running Gemma. If no model is available, you get a curated template, clearly labelled "not AI-generated." We never wanted the app to pass off a template as AI. Each plan includes conversation prompts and a closing reflection, because the goal isn't the game itself; it's the connection people make while playing it. Guardrails we cared about: - No invented places. The prompt forbids making up venue names, opening hours, fees or crowd levels. Venues are marked unverified and link to an OpenStreetMap search instead of claiming coordinates. - Validated output. Model output is parsed defensively and normalized. Fixed safety rules (public areas only, no climbing, don't disturb wildlife) are always appended, whatever the model says. - A locked-down endpoint. The hosted function builds the prompt itself from validated form fields, so it can't be used as a free general-purpose chatbot on our key. It also only accepts requests from the app's own site and rate-limits per IP. - Fair joining rules. No duplicate joins, capacity limits, and no joining cancelled or finished activities. - Community safety. Clear participation guidelines and a report button on every activity. What bit us: Gemma 4 "thinks" before answering, and on the API those thinking tokens count against the output limit. Our first hosted calls came back completely empty because the model spent its whole budget thinking. The fix was thinkingLevel: "minimal", which turns thinking off; a short activity plan doesn't need it, and responses got much faster. Stack: vanilla HTML/CSS/JS · WebLLM · Gemma 2 & Gemma 4 · Supabase Edge Functions (Deno) · GitHub Pages. A Supabase schema with Row Level Security and an atomic, row-locked join function is included for the next step: a shared multi-user version. Why Does Open Innovation Matter? Because the weights are open, Gemma can run inside the user's browser. You can't download a closed model into a browser tab. That made three things possible that a closed API wouldn't: - Privacy by default. What you're interested in and which neighborhood you hang out in is personal. With on-device Gemma, it never leaves your phone or laptop. - Free at any scale. There's no per-request bill, so the app can stay free for students and newcomers, the people who need new connections most. - No lock-in. The same plan generator works on-device, on Google's hosted Gemma, or on anyone's own Ollama server. If a provider changes its terms, we switch with one setting. Prize Categories Best Use of Gemma: the AI Idea Lab runs Gemma 2 2B entirely in the browser via WebLLM, with Gemma 4 on Google AI Studio as a clearly labelled fallback for devices without WebGPU. Team Built by @This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass What I Built We built OutThere around one idea: the best reasons to go outside are other people. Most of us have hundreds of online contacts and still struggle to meet someone new face to face. We wanted an app that helps you: - Make new friends and real connections. Not followers: people you actually meet, laugh with, and see again. - Practice the social side of life. Introducing yourself, starting a conversation, working in a group, presenting your ideas to people you just met. These skills only grow by doing them in person. - Practice languages for real. A language-exchange walk in the park teaches you more than another week of flashcards, because you have to understand and be understood on the spot. - Just have fun together. Games, walks, and small challenges in public parks that cost little or nothing. Cairo has beautiful public spaces: Al-Azhar Park, the Nile corniche, the gardens of Heliopolis. The hard part isn't going out; it's having someone to go with and something to do once you're there. OutThere is a small web app for finding and hosting low-cost group activities in public outdoor spaces: chess in the park, language-exchange walks, photo scavenger hunts. You can browse activities, filter by area, category and date, and join with one tap. Every card explains why it matches you. If you want to host but don't know what to run, the AI Idea Lab uses Gemma to plan an activity for your group size, time, area, budget and interests: steps, conversation prompts that help strangers open up, accessibility notes, safety checks, a closing reflection, and one sentence on why it fits you. Then the app gets out of the way. Every plan asks people to keep their phones in their pockets and talk to each other. Who it's for: people new to a city, students, language learners, and anyone who wants more friends but doesn't know where to start. Demo Live app: mennatullah122.github.io Try it: create an account, host an activity, then sign in as a second user and join it. Open the AI Idea Lab to let Gemma plan one for you. On desktop Chrome or Edge it runs on your own device; on other browsers it uses hosted Gemma 4. Code {% github Mennatullah122/Hacktoberfest26-OutThere %} How I Built It Open-weight AI, three ways, always labelled. Every plan shows exactly which model produced it: 1. On-device Gemma (default). If your browser supports WebGPU, Gemma 2 2B runs inside your browser via WebLLM. After a one-time ~1.5 GB download (cached), your interests and neighborhood never leave your device. No server, no API key, no cost per user. 2. Hosted Gemma 4 (fallback). Phones and browsers without WebGPU call a Supabase Edge Function that runs gemma-4-26b-a4b-it (falling back to gemma-4-31b-it) on Google AI Studio. The app says plainly that this mode sends your answers to Google's servers. 3. Bring your own. Point the app at your own Ollama or any OpenAI-compatible server running Gemma. If no model is available, you get a curated template, clearly labelled "not AI-generated." We never wanted the app to pass off a template as AI. Each plan includes conversation prompts and a closing reflection, because the goal isn't the game itself; it's the connection people make while playing it. Guardrails we cared about: - No invented places. The prompt forbids making up venue names, opening hours, fees or crowd levels. Venues are marked unverified and link to an OpenStreetMap search instead of claiming coordinates. - Validated output. Model output is parsed defensively and normalized. Fixed safety rules (public areas only, no climbing, don't disturb wildlife) are always appended, whatever the model says. - A locked-down endpoint. The hosted function builds the prompt itself from validated form fields, so it can't be used as a free general-purpose chatbot on our key. It also only accepts requests from the app's own site and rate-limits per IP. - Fair joining rules. No duplicate joins, capacity limits, and no joining cancelled or finished activities. - Community safety. Clear participation guidelines and a report button on every activity. What bit us: Gemma 4 "thinks" before answering, and on the API those thinking tokens count against the output limit. Our first hosted calls came back completely empty because the model spent its whole budget thinking. The fix was thinkingLevel: "minimal", which turns thinking off; a short activity plan doesn't need it, and responses got much faster. Stack: vanilla HTML/CSS/JS · WebLLM · Gemma 2 & Gemma 4 · Supabase Edge Functions (Deno) · GitHub Pages. A Supabase schema with Row Level Security and an atomic, row-locked join function is included for the next step: a shared multi-user version. Why Does Open Innovation Matter? Because the weights are open, Gemma can run inside the user's browser. You can't download a closed model into a browser tab. That made three things possible that a closed API wouldn't: - Privacy by default. What you're interested in and which neighborhood you hang out in is personal. With on-device Gemma, it never leaves your phone or laptop. - Free at any scale. There's no per-request bill, so the app can stay free for students and newcomers, the people who need new connections most. - No lock-in. The same plan generator works on-device, on Google's hosted Gemma, or on anyone's own Ollama server. If a provider changes its terms, we switch with one setting. Prize Categories Best Use of Gemma: the AI Idea Lab runs Gemma 2 2B entirely in the browser via WebLLM, with Gemma 4 on Google AI Studio as a clearly labelled fallback for devices without WebGPU. Team Built by @mennaabdelaziz580 #devchallenge #hf26challenge
GrassRoute: The Zero-Signal Outdoor Companion & Trail Naturalist This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass What I Built Most outdoor mobile apps suffer from a tragic irony: they claim to help you connect with nature, yet they keep your eyes glued to a glowing 6-inch rectangle of glass. You end up staring at turn-by-turn navigation arrows, scrolling through social feed leaderboards, or squinting at push notifications while walking past blazing red sugar maples and listening to chickadees calling in the canopy. GrassRoute flips this dynamic entirely. Its foundational design philosophy is simple: spend 30 seconds on your screen, and the next 60 minutes in the woods. GrassRoute is an offline-first, open-source AI trail companion and naturalist built around three core pillars: 1. Sensory Micro-Quest Generator: Instead of generic GPS tracks, GrassRoute prompts you for your activity (forest hike, fall foliage jog, backyard gardening, birding stroll, or mindful grounding), your time budget (15 to 60+ minutes), and your companions (solo, dog walk, kids exploration, or run club). An on-device open-weight model synthesizes a 3-part sensory mission: one distinct foliage or bark observation, one acoustic or olfactory cue to listen/smell for, and one grounding challenge. 2. Pocket Mode & Audio Pacer (Screen Minimizer): The moment you tap "Touch Grass", the app enters a dimmed, battery-saving Pocket Sleep Mode. Synthesized Web Audio nature chimes (and optional offline voice cues) sound at milestone intervals—halfway mark, 5 minutes remaining, and completion. You put your phone deep inside your backpack or pocket and do not look at it while outdoors. It calculates your Grass-to-Screen Ratio (e.g. 96% Green Time), incentivizing minimum screen interaction. 3. Zero-Signal Offline Field Naturalist & Frost Planner: - Autumn Foliage Pigment Radar: Explains the science of fall colors (anthocyanins trapped by cooling nights vs carotenoids revealed by chlorophyll breakdown), bark textures, and critical safety lookalikes (harmless Staghorn Sumac with upright velvet berries vs hazardous Poison Sumac/Poison Ivy with drooping white berries). - Trail Bird Call Identifier: Teaches bird identification using phonetic mnemonics ("fee-bee", "chick-a-dee-dee", "Who cooks for you?") without needing mega-byte audio downloads. - October Frost Date & Planting Radar: Calculates weeks until the first seasonal frost by climate zone and provides a concrete checklist for what to plant this week—from hardneck garlic cloves and cover crops to spring-flowering bulbs. - Local AI Naturalist Q&A: When you're 5 miles deep into a canyon or wooded ridgeline with zero cellular bars, you can consult an on-device open-weight LLM running in GPU memory with zero network requests. GrassRoute is built for hikers, runners, gardeners, dog walkers, and anyone experiencing digital burnout who needs a nudge to step outside and breathe crisp autumn air. Demo - Live Deployed App: divyansh2102t-dev.github.io - Render Live Service: Ready for 1-click deployment via the included render.yaml Blueprint. Try the Zero-Signal Offline Test: 1. Open GrassRoute in Chrome, Edge, or Android Chrome. 2. Click Load Local AI to load Qwen 2.5 (1.5B) into your browser's WebGPU cache. 3. Turn on Airplane Mode (disconnect Wi-Fi and mobile data). 4. Generate an outdoor quest, ask the field naturalist questions, search the foliage catalog, or start Pocket Mode. It runs with zero network packets! Code The complete source code is open source under the MIT License: 👉 GitHub Repository: divyansh2102t-dev/grassroute grassroute/ ├── index.html # Responsive UI, Pocket Mode overlay, multi-tab layout ├── app.js # WebLLM engine, quest generation, audio synthesizer, timer ├── fieldguide.js # Zero-signal botanical, bird call, and frost database ├── style.css # Sunlight-readable outdoor theme with breathing animations ├── render.yaml # Render Blueprint specification (Static Site & Node Service) ├── server.js # Zero-dependency Node.js HTTP server for Render runtime ├── package.json # Project scripts and metadata ├── CONTRIBUTING.md # Hacktoberfest contributor guide └── README.md # Comprehensive documentation and local run instructions How I Built It GrassRoute was intentionally engineered as an offline-first hybrid architecture: 1. In-Browser Local Inference via WebLLM & WebGPU Rather than relying on remote cloud APIs that fail in the wild, GrassRoute uses @mlc-ai/web-llm to run open-weight models directly in client-side WebGPU memory: - Models Supported: Qwen2.5-0.5B-Instruct, Qwen2.5-1.5B-Instruct, Llama-3.2-1B-Instruct, and SmolLM-360M-Instruct. - Zero Cloud Latency: The model is compiled to WebAssembly (WASM) and runs shader execution on the user's native GPU. Once cached by the browser's CacheStorage API, inference works completely offline with zero server roundtrips. 2. Deterministic Fallback & Knowledge Base (fieldguide.js) Real outdoor utility requires instant reliability. If a user is on an older mobile device without WebGPU support, or needs an instant answer in 0 milliseconds, the app includes a deterministic JavaScript knowledge engine: - Instant multi-field keyword matcher indexing Latin binomials, leaf serration types, pigment chemistry, and safety warnings. - USDA climate zone frost date estimator calculating exact days until the first hard frost. - Curated sensory trail missions for hiking, running, gardening, birding, and mindfulness. 3. Screen-Free Web Audio & Speech Synthesis To solve the "screen addiction" dilemma, GrassRoute implements a pure Web Audio API synthesizer. Without downloading external audio files, it mathematically generates pure sine-wave harmonic pentatonic chimes (528 Hz, 660 Hz, 792 Hz) to gently signal milestones while the phone is tucked in a jacket pocket. When enabled, the browser's native SpeechSynthesis speaks the mission prompts aloud before you step out the door. Why Does Open Innovation Matter? Building for the outdoors brings the reality of proprietary cloud AI into sharp focus. Here is why open innovation and open-weight models were essential to make GrassRoute work: 1. Canyons and Ridge Trails Have No 5G: Closed APIs (OpenAI, Anthropic, Google Cloud) presuppose high-bandwidth, continuous connectivity. But nature doesn't have Wi-Fi. 5 miles into a national forest or valley trail, a closed AI app turns into an unresponsive error screen. Open-weight models (Qwen, Llama, SmolLM) running locally via WebGPU work in deep wilderness, airplane mode, and basement mudrooms. 2. Absolute Privacy of Location and Health Habits: Closed fitness and outdoor platforms collect GPS coordinates, trail timestamps, routines, and biometric patterns to build commercial advertising profiles. GrassRoute sends zero bytes to any cloud server. Your field journal, frost zone, and walking habits live exclusively in your local localStorage. 3. Zero Marginal Operating Cost: With open weights, running an outdoor assistant for thousands of hikers costs exactly $0.00 in API inference bills. The computation happens on the device already in the hiker's pocket. Anyone in the open-source community can fork, self-host, and customize the tool without entering a credit card. 4. Community Extensibility for Regional Nature: Closed models often suffer from geographical bias. An open-source codebase allows contributors from across the globe to PR regional native plant guides, indigenous botanical names, and local bird mnemonics directly into fieldguide.js during Hacktoberfest. Prize Categories Best Use of Render GrassRoute is built and configured for deployment on Render: - Includes a complete render.yaml Blueprint specification defining both a global Static Site (with custom security headers for WebGPU SharedArrayBuffer support) and a Node.js Web Service runtime. - Includes a containerized server.js ready to spin up on Render's global application runtime with 1-click blueprint synchronization.