This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
My friend wants to learn new skills, but every time they search, they hit the same wall: hundreds of courses, playlists and books, and no way to tell which ones actually worked for real learners. Most "best course" lists are SEO spam or paid promotion.
So I built LearnPath. You type a skill, and it finds the resources people have genuinely recommended in real discussions, then shows them as clean cards you can filter by:
- Pricing: Free, Paid or Freemium
- Type: YouTube, Course, Book or Website
- Level: Beginner, Intermediate or Advanced
Every card has a "See proof" button that links straight to the original Hacker News, Reddit or YouTube posts behind the recommendation. You never have to take the AI's word for it.
There are no accounts and no login. You open it and search.
Demo
π Live app: https://learnpath-2.onrender.com/
(It's on a free tier, so the first load may take a few seconds to wake up.)
Code
LearnPath π―
LearnPath is an AI-powered, community-backed learning resource aggregator built with the MERN stack (MongoDB, Express, React, Node.js) and powered by Google's open-weight Gemma AI model (gemma-2-9b-it).
It solves a common problem: "I want to learn a skill, but I don't know which course, book, or video to trust."
LearnPath automatically scans Hacker News, Reddit, and YouTube for real developer discussions, extracts course and book recommendations, and validates them against an Anti-Hallucination rule Engine before presenting them on a modern, real-time dashboard.
π Key Features
- π« No User Accounts / Login Required: Public, open dashboard for immediate access.
- π€ Open-Weight Gemma AI Integration: Utilizes Gemma model via Google AI Studio (
GEMINI_API_KEY&GEMINI_MODEL). - π‘οΈ Strict Anti-Hallucination Design: The AI model is strictly prohibited from inventing URLs or drawing recommendations from memory. Recommendations are verified against raw fetchedβ¦
How I Built It
Stack: MongoDB Atlas + Mongoose, Express, React (Vite), Node.js, deployed on Render.
The AI: Gemma, Google's open-weight model, served through Google AI Studio.
How a search works:
- The skill is validated, then I check MongoDB for a cached result less than 7 days old.
- If there is none, the server fetches real discussions in parallel from the Hacker News Algolia API, Reddit's public search and the YouTube Data API.
- Everything is numbered into source snippets and sent to Gemma with a strict prompt: extract recommendations only from these snippets, never from memory.
- Gemma returns structured JSON with the name, link, price type, level, a one-line summary and how many sources mention it.
- The result is saved to MongoDB and shown on the dashboard.
The part I care about most is the anti-hallucination check. LLMs love to invent courses that sound real. So after Gemma answers, my server validates every resource. If its URL or name doesn't physically appear in the source text I fetched, it gets thrown away. Every recommendation also has to point to valid source IDs. This is why "See proof" works: each card is tied to real posts.
Other details:
- Rate limiting and Helmet on the API
- A seed script that pre-caches popular skills so the demo is instant
- Sources fetched with
Promise.allSettled, so if one source (like Reddit) blocks me, the others still work
Why Does Open Innovation Matter?
Using an open-weight model changed what I could build:
-
Swappable: Gemma is just a config value (
GEMINI_MODEL). I can test other open models for extraction quality without rewriting the app. - Self-hostable: Today it runs through an API, but because the weights are open, I can move it to my own machine or server later. A closed model locks you into one provider.
- Inspectable: Recommending learning resources affects what people spend time and money on. I want the model behind that to be something people can study and question.
- Cheap: A free-tier setup is enough for a student project, which means a tool like this can stay free for my friends.
Honest Limitations
- The model can still misread pricing, so it sometimes says "unknown" or gets Free vs Paid wrong. That's why every card links to its proof.
- Results depend on how much discussion exists. Very niche skills may return few or no resources.
- Some sources (like Reddit) can block requests, so results vary.
- It's a weekend build, so there's no ranking by recency yet and no user ratings.
Prize Categories
- Best Use of Gemma: Gemma does the extraction and summarization at the core of the app.
- Best Use of MongoDB Atlas: Atlas stores cached searches and the "recently searched" list.
- Best Use of Render: The app is deployed on Render.
Thanks for reading! If you try it, I'd love to know which skill you searched for. π
Top comments (0)