My first month of hackathons: 4 local AI projects, 4 lessons
October 2026 was my first month of hackathons. I wanted a few real projects on GitHub, something outside my work projects, and to learn new things by doing them. I joined Hacktoberfest: two small exercises in MLH Global Hack Week and three weekly DEV challenges. The AI in every project is an open Gemma model running on my own computer with Ollama. No paid API. Here is what each project does, what went wrong, and what it taught me. 1. Search by meaning (Global Hack Week) What it does. Ten short customer-support notes from a small online shop, saved in Postgres with pgvector on Tiger Cloud. EmbeddingGemma turns each note into a list of numbers that represents its meaning, so a search finds notes that mean the same thing, even with no words in common. "Voglio i soldi indietro" ("I want my money back") finds the note about a refund. What went wrong. My query always returned 3 notes, even when none of them had anything to do with the search. LIMIT 3 means "give me 3 rows", not "give me the 3 that match". What I learned. Search by meaning needs a minimum score. Relevant notes scored about 0.67–0.70 and unrelated ones about 0.50, so I keep only results above 0.6. Now "no results" is a possible answer. It isn't perfect: the refund note scored only 0.51 for "voglio i soldi indietro", so the minimum score hides it too. 2. Support Copilot (DEV week 2) What it does. Picture a one-person shop that sells handmade ceramics. Every evening the owner answers the same emails: "my mug arrived cracked", "my parcel is late". Support Copilot finds how she solved similar cases before and writes a draft reply that follows her own policies. She reviews it and sends it. What went wrong. For "My vase arrived broken, I want my money back", the search found two past cases: a broken item and a customer who changed their mind. Gemma sometimes picked the wrong policy: returns accepted if unused, customer pays shipping. Not what you tell someone holding a broken vase. And with a low minimum score, a question about teapots pulled in unrelated cases, and Gemma confidently said the shop had no teapots, something it couldn't know. What I learned. What helped: telling the model to follow the most similar case, lowering the temperature to 0.2 so replies stay consistent, and raising the minimum score to 0.6. Now, when nothing relevant is found, the draft says the owner will check. And a person still reads every draft before it is sent. 3. Lazy Screenshot Namer (DEV week 3) What it does. After week 2 I had a folder of files called "Screenshot 2026-10-11 173802.png". Renaming 7 of them by hand took me 10 to 15 minutes. Lazy Screenshot Namer asks Gemma 4 to look at each screenshot, describe it and suggest a short name, like sql-show-chunks.png. It also flags screenshots that seem to contain a password. I tested it with a fake password made for the test, and it caught it. What went wrong. In my first version the model often got stuck in a loop, repeating words inside the file name. One name was 13,706 characters long. It took about 4 minutes per image, and no name was usable. What I learned. Small models need limits and simple steps. Capping the output at 40 tokens (num_predict in Ollama) brought it down to about 9 seconds per image. Removing the example from my prompt stopped the model from copying it: three different screenshots had all been given the example name. And asking it to first describe the image, then name it in a separate step, took useful names from 2 out of 7 to 7 out of 7. 4. Tell the Tree (DEV week 4) What it does. I used to keep my family tree on a genealogy website. The site shut down, and everything I had put there turned into a 404. Tell the Tree is a family tree that lives on my computer. You fill it in with sentences, in Italian or English, like "Allegra è figlia di Claire e di Lord Byron" ("Allegra is the daughter of Claire and Lord Byron"). Gemma copies the names and family words, my code decides what they mean and checks them, and the change appears as a preview. Nothing is saved until I confirm. What went wrong. I wrote 15 test sentences to build with, and on those Gemma got 14 right. But I had also written 6 secret sentences before the engine existed, in everyday spoken Italian, and I ran them only once. Gemma got 1 out of 6. For example, it kept the title in "Nonna Lucia" (Grandma Lucia) and created a person called "papà" (dad). The secret sentences also found a real bug in my code. What I learned. Test with sentences you didn't build on, and publish the result as it is. And keep a person in the loop: those wrong names would show up in the preview, where I can discard them before they are saved. What's next Right now I'm using Tell the Tree with my own family, on my computer only, and writing down every sentence it gets wrong. That list will decide what I fix next. If you did Hacktoberfest this year too, what did you build?
This is a summary aggregated from Dev.to. Read the complete article on the original site:
Read full article at Dev.to