Recallr — turn photos and PDFs into compact study sheets and AI-generated quizzes to practise active recall.
- What is Recallr?
- Screenshots
- Key Implemented Features
- Planned / Upcoming Features
- Architecture & Tech Stack
- Setup / Build
- Running the App / Quick Usage
- Contributing
- Changelog
- License
Recallr converts user-uploaded photos and PDFs into structured learn sheets using an OpenAI-powered pipeline and can generate interactive AI quizzes (chat-style) from that content so users can test and reinforce their knowledge.
Typical workflow:
- Upload photos / PDFs of notes or slides
- Generate a learn sheet (AI summarizes and formats content)
- Start an AI-powered chat/quiz to test knowledge based on the learn sheet
| Learn Sheet | Learn Sheet View |
|---|---|
![]() |
![]() |
| Learn Sheet Chat | Settings View |
|---|---|
![]() |
![]() |
- 📚 Course & Learn Sheet Management – organize your subjects and generated study sheets
- 📄 File Import – import images (PNG, JPG, WEBP) and PDFs as source material
- 🤖 AI-Powered Summaries – automatically generate learn sheets from your uploaded files
- 💬 Interactive AI Chat & Quizzes – ask questions and get quizzed on your material with streaming responses
- 🕘 Chat History – previous conversations are saved per learn sheet
- 🎨 Light/Dark Theme – Fluent UI-based theming
- 🌐 Multi-Language Support – German & English
- ⚙️ Customizable AI Behavior – choose OpenAI model, summary style, difficulty, and question type
- 🔒 Encrypted API Key Storage – your OpenAI key is encrypted at rest via
Microsoft.AspNetCore.DataProtection
Notes from code:
- Settings and courses are stored as plain JSON files in the user's ApplicationData folder (the OpenAI key itself is encrypted before being written; everything else is stored as-is).
Planned items (not yet implemented in code):
- Knowledge status view for learn sheets (tracking how well the user knows each topic)
- Adjustable font size for the learn sheet view (UI control to change font rendering)
- Interactive multiple-choice picker for quiz questions in the AI chat
- Error handling with custom error overlay
- UI: Avalonia (MVVM pattern)
- Language / Runtime: C# / .NET 10
- MVVM: CommunityToolkit.Mvvm
- AI: OpenAI .NET SDK (OpenAI.Chat integration)
- Markdown rendering: Markdown.Avalonia
- PDF handling: PDFsharp
- Charts: LiveChartsCore
- DI: Microsoft.Extensions.DependencyInjection (basic service registration)
Code layout highlights:
- App startup:
Program.cs(creates%APPDATA%/Recallr/Configfiles if missing) - Views:
/Views(CourseView, LearningsheetView, LearningsheetDetailedView, SettingsView) - ViewModels:
/ViewModels(MainViewModel, CourseViewModel, LearningsheetDetailedViewModel, SettingsViewModel) - Services:
/Models/Services(AIService, SettingsService, CoursesService, ChatStorageService, FilePickerService, PdfService) - Models:
/Models/Configurationand/Models/Models
Prerequisites:
- .NET 10 SDK (or newer)
Supported platforms: Windows and Linux are actively tested. macOS is not currently tested and may not work out of the box (untested, not officially supported yet).
Restore and run locally:
# from repository root
dotnet restore
dotnet build
dotnet run --project Recallr.csprojNotes:
- The project references packages in the .csproj (Avalonia 12.1.0, OpenAI 2.12.0, Markdown.Avalonia, LiveChartsCore, PDFsharp, CommunityToolkit.Mvvm).
- No extra database required — the app stores JSON files under the OS ApplicationData folder (see
FileSystemPathsin source).
- Launch the app (
dotnet runor your platform-specific build). - Open settings and paste your OpenAI API key into the key field, set profile name/email and preferred theme.
- The key is encrypted before being saved to
%APPDATA%/Recallr/Config/ClientSettings.json.
- The key is encrypted before being saved to
- Create a course and open it.
- Create a learn sheet and use the file picker to add files.
- Click "Create study sheet" to generate the summary. The generated text is saved as
learnsheet.mdin the learn sheet folder. - Open the learn sheet chat to start AI-powered quizzes / active-recall practice. Chat is streamed and saved to per-learn-sheet JSON logs.
Paths used by the app (OS-dependent):
- Settings:
%APPDATA%/Recallr/Config/ClientSettings.json - Courses:
%APPDATA%/Recallr/Config/ClientCourses.json - Course files:
%APPDATA%/Recallr/Courses/{courseId}/{learnsheetId}/ - Chat logs:
%APPDATA%/Recallr/ChatLogs/{courseId}/{learnsheetId}.json
This project is in early, active development (v0.2.0). Contributions, bug reports and feedback are welcome — open an issue or submit a pull request. Prefer small, focused PRs and describe breaking changes clearly.
Before contributing:
- Run
dotnet restoreand ensure the app builds locally. - If changing settings storage or secrets handling, include migration notes.
See CHANGELOG.md for the full version history.
This repository includes a LICENSE file: MIT License. See LICENSE for details.
If anything in this README is unclear or you'd like it adjusted (language, example screenshots, additional sections), say which parts to expand and a preferred tone (concise, tutorial, or marketing).



