This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
For the past three months, my mother has been learning 10 English words every day.
Telugu is our native language, and she wants to become more comfortable understanding and speaking English. Her consistency wasn't the problem โ retention was.
She could learn ten words today, but weeks later, when I used one of those words in conversation, she would sometimes struggle to remember what it meant or how it was used.
That gave me the idea for FriendForge โ a Personal AI Study Companion.
I didn't want to build another chatbot that simply answers questions. I wanted something that could help her:
- learn words through simple explanations and examples
- quiz herself
- revise what she struggled with
- learn from uploaded notes
- listen to explanations
- continue learning even when internet connectivity isn't available
That last requirement became one of the most important parts of FriendForge.
My mother sometimes travels to villages and places where internet connectivity can be unreliable. So FriendForge has two different ways to learn:
๐ Online Study โ Llama through Backboard, with RAG, study memory, quizzes, revision, and ElevenLabs voice.
๐ป Local AI โ Gemma 3 4B running locally through Ollama, allowing general study conversations without an internet connection once the model is installed.
The idea behind FriendForge became:
RAG remembers the material. Memory remembers the learner.
Demo
๐ฅ Video Demo
๐ Live Application
https://friendforge-gbqq.onrender.com
๐ Demo access: HACKTOBERFEST2026!
The hosted version demonstrates FriendForge's Online Study experience. Local AI runs through Ollama on the user's own computer, so I demonstrate that separately in the video.
Code
The complete project is available on GitHub:
shettysaikumar20
/
FriendForge
AI study companion with RAG, learner memory, local Gemma inference, and voice explanations.
โก FriendForge
An AI Learning Companion โ Learn. Practice. Remember. Revise.
RAG remembers the material. Memory remembers the learner.
Online Study โ๏ธ ยท Document RAG ๐ ยท Study Memory ๐ง ยท Quizzes ๐ ยท Voice ๐ ยท Local AI ๐ป
โจ What is FriendForge?
FriendForge is a personal AI learning companion built for the Hacktoberfest 2026 โ Build for a Friend Challenge.
Instead of acting as just another chatbot, FriendForge combines learning material, contextual explanations, active recall, quizzes, revision, learner memory, voice accessibility, and optional local AI.
A learner can upload study material, ask questions about it, simplify difficult concepts, test understanding, revisit weak areas, and switch to a locally running open-weight model when hosted AI is not appropriate or internet connectivity is unavailable.
The goal isn't only to answer a question. It's to help the learner understand it, test it, and come back to what they haven't masteredโฆ
FriendForge uses a React/Vite frontend with a Node.js/Express backend.
How I Built It
FriendForge has two intentionally separate AI paths.
๐ Online Study
The online workflow is approximately:
React โ Express โ Backboard โ Llama
Backboard provides the infrastructure for the online AI experience, including document retrieval and learner memory.
Users can upload PDF or TXT study material and ask questions based on those documents.
FriendForge also provides Quiz Me and Revise workflows so learning doesn't stop after receiving an explanation.
For voice learning, I integrated ElevenLabs text-to-speech. Voice generation happens only when the learner explicitly presses Listen.
๐ป Local AI
The local workflow is:
React โ Express โ Ollama โ Gemma 3 4B
This was particularly important to me.
Once Ollama and Gemma are installed, the model inference happens directly on the laptop. FriendForge doesn't silently fall back to a cloud model when Local AI is selected.
Local mode deliberately has a smaller feature set. It doesn't pretend to have Backboard document RAG, persistent cloud memory, or ElevenLabs voice.
It is simply a local study companion.
Building for an 8 GB Laptop
I didn't develop the offline feature on a powerful AI workstation.
I tested Gemma 3 4B on my 8 GB RAM laptop using CPU inference.
That exposed a very real trade-off.
The hosted model responds quickly. Local Gemma can take considerably longer โ sometimes tens of seconds depending on model loading and the prompt.
But it works without internet access.
For this project, that trade-off was worth making visible instead of hiding it.
Things Broke Along the Way
One of my favorite parts of this project was discovering that making an AI feature work is different from making it reliable.
During RAG testing, I found a case where the model correctly recognized that information wasn't present in the uploaded notes, but then continued by supplying outside knowledge anyway.
That wasn't the behavior I wanted for a question explicitly asking about uploaded material.
I tightened the retrieval boundaries and added tests around that behavior.
I found a similar problem with local Gemma. Initially, it could imply that it had access to uploaded notes even though Local AI intentionally doesn't have access to Backboard RAG.
So I strengthened the Local AI capability boundaries and tested them as well.
Even production deployment gave me another surprise.
ElevenLabs successfully generated audio, but the browser refused to play it because my Content Security Policy didn't permit the generated Blob URL.
The fix was intentionally narrow:
media-src 'self' blob:;
Then I added a regression test instead of weakening the rest of the CSP.
These failures ended up teaching me as much as implementing the original features.
Why Does Open Innovation Matter?
For FriendForge, open innovation isn't an abstract argument.
It's the reason part of this application can continue working when the internet disappears.
Running Gemma 3 4B locally through Ollama means the core local study conversation doesn't require sending every question to a hosted AI service.
It also gives me freedom to experiment with the model and local inference architecture rather than making the entire learning experience dependent on one remote API.
There is a cost.
On my hardware, local inference is significantly slower than the hosted experience.
But when I disconnected Wi-Fi and watched FriendForge continue generating an answer, the advantage became very clear to me.
Speed wasn't the advantage. Independence was.
Open-weight models make it possible to build experiences where cloud AI and local AI don't have to compete. They can solve different parts of the same problem.
FriendForge uses the cloud when connectivity and richer features are available, and provides a smaller local experience when independence matters more.
The Most Important Test
Eventually, I gave FriendForge to the person I actually built it for.
My mother tried it.
The difference between the two modes was immediately noticeable. Online Llama was fast, while local Gemma took more time to respond on my laptop.
But the part that surprised her was that the local AI could still answer when there was no internet connection.
She told me she was proud of me and that the project would be useful to her.
That mattered more to me than another benchmark.
FriendForge isn't something I built by imagining what a hypothetical user might want.
It came from watching someone I love consistently try to learn something, noticing where technology could help, and then letting her actually use what I built.
What FriendForge Can't Do Yet
I also want to be transparent about its limitations.
Local AI currently provides general study conversations. It doesn't have the document RAG, persistent Backboard study memory, or ElevenLabs voice available in Online Study.
Local inference is also considerably slower on my CPU-only 8 GB laptop.
And the hosted Render deployment cannot access Ollama running on somebody's laptop. Local AI is therefore used through the locally launched FriendForge application.
Those aren't features I want to disguise. They're boundaries that make the two modes understandable and predictable.
๐ค My Agent Sessions
I used an AI-assisted development workflow throughout FriendForge and preserved the development process with DevRelay.
1. Building FriendForge & the RAG Foundation
This session covers the initial architecture, React/Vite frontend, Express backend, Backboard integration, and the development of the document-based RAG workflow.
2. Reliability, Local AI & Final Refinement
This session captures the later engineering and reliability work as FriendForge evolved into the final application.
Technology
- Gemma 3 4B โ open-weight local model
- Ollama โ local inference
- Backboard โ online AI, RAG, and memory
- Llama โ online language model
- ElevenLabs โ text-to-speech
- React + Vite โ frontend
- Node.js + Express โ backend
- Render โ deployment
Prize Categories
I'm submitting FriendForge for:
- Overall Challenge
- Gemma
- Backboard
- ElevenLabs
- Render
I started FriendForge because my mother was learning ten English words every day.
I finished it after watching her use something I had built specifically for the way she learns โ including seeing her surprise when the AI continued responding without an internet connection.
Speed wasn't the advantage. Independence was.
And for me, building something genuinely useful for someone I love is exactly what Build for a Friend meant.
Top comments (0)