This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
I built Study Partner for my wife, to give her a more interactive way to study using her own notes and PDFs.
She can upload her materials, ask questions, get explanations, and test her understanding through practice quizzes. An “Explain It Back” mode lets her describe a concept in her own words and receive feedback grounded in her material.
I also built voice role-play with Classmate and Mock Examiner modes for practising aloud, though that integration is still being refined. Saved conversations and practice results let her return to previous sessions.
The goal is simple: help her move beyond rereading notes and actively check what she understands, with a study partner available when she needs one.
Demo
Code
Emibrown
/
study-partner
Hacktoberfest Weekend Challenge: Build for a Friend
Study Partner
A private study-material library with Google-only authentication, PostgreSQL-backed notes and preferences, and private Cloudflare R2 PDF storage. Built with Next.js, TypeScript, Tailwind CSS, Radix UI, and Lucide.
Run
npm install
npm run db:check
npm run db:migrate
npm run dev
Run commands from the project root. Configure root .env or .env.local using the placeholders in .env.example. Authentication setup is documented in AUTHENTICATION.md. The default origin is http://localhost:3000; changes to the port must also update Better Auth and Google's callback configuration.
Project Structure
-
src/: application routes, shared components, and server modules;@/*resolves here. -
public/: static assets and the generated PDF.js worker. -
tests/,scripts/, andmigrations/: automated checks, maintenance commands, and versioned database migrations. - Root configuration files define Next.js, TypeScript, Tailwind/PostCSS, ESLint, and Playwright behavior. Application type checking covers
src/, Next.js configuration, and generated route types. -
submission-review/: historical review evidence…
How I Built It
Study Partner uses Qwen3-30B-A3B-Instruct-2507, an open-weight language model, accessed through OpenRouter via Backboard. It powers explanations, conversational quizzes, “Explain It Back” feedback, and practice question generation. Inference is hosted rather than run locally.
After my wife explicitly enables AI for a material, the app sends it to Backboard for indexing. Each material has its own assistant context, separate conversation threads, and material scoped memory. Responses are instructed to stay grounded in her notes and acknowledge missing information. Every generation request specifies the same Qwen model, with no fallback.
I built the app with Next.js, TypeScript, and Tailwind CSS, using Better Auth for Google sign-in and private Cloudflare R2 storage for PDFs. Render hosts both the Next.js web service and the PostgreSQL database, which stores accounts, preferences, notes, conversations, and practice results.
Practice questions are validated server side, answer keys remain hidden until submission, and scores are calculated deterministically.
For voice role play, ElevenLabs Agents handles speech and turn-taking while a custom backend connects learner turns to the same Backboard/Qwen pipeline. That integration is still being refined.
Qwen is the open-weight AI at the centre of the experience; Backboard, OpenRouter, and ElevenLabs provide hosted services around it.
I used Codex to help implement, debug, and test the project, including automated checks for authentication, user-data isolation, accessibility, and mocked AI-provider workflows.
Why Does Open Innovation Matter?
Building Study Partner for my wife made flexibility important. I wanted the learning experience to grow around her needs, rather than depend entirely on one provider’s model.
Using Qwen’s open weights creates options that a closed-model API alone would not: I can inspect the model’s architecture and published research, evaluate it independently, and potentially self host or fine tune it for specific learning needs. Those possibilities matter for future control over privacy, cost, and availability.
The current app uses hosted inference through Backboard and OpenRouter, so I haven’t implemented local inference or eliminated provider dependencies. The value of open weights is having a path toward greater control, not claiming that the app is already fully independent.
Open-source frameworks also made it practical to build authentication, accessible interfaces, and persistent study tools without starting from scratch. Open innovation helped me turn an idea for someone I love into something she can use, while leaving room to improve it.
My Agent Session
This curated session documents Study Partner’s implementation,
key decisions, debugging, and verification.
Prize Categories
I’m entering the partner categories for:
- Render: Hosts the Next.js web service and PostgreSQL database.
- Backboard: Provides material indexing, conversation context, and memory for Qwen-powered study sessions.
- ElevenLabs: Powers speech and turn-taking for voice role-play with Classmate and Mock Examiner modes.
Hand it over
My wife was excited to try Study Partner. She told me it made studying feel easier, and that the role-play helped her understand a topic better and feel more confident discussing it. Hearing that was the most rewarding part of building it.
Top comments (0)