StudyFlow is a study planner I built to keep all my coursework in one place instead of spreading it across sticky notes and a few different apps. You add your courses, drop in your assignments with due dates, run a focus timer while you study, keep track of your grades, and drill flashcards. Everything is saved on your own computer and the whole thing works offline, so no internet is needed once it is open.
I wrote it in Flutter (Dart) and it stores everything in a local SQLite database through the drift package. There is a small account system so more than one person can use the same machine and keep their data separate.
- Accounts. Create a local account and sign in. Each account keeps its own study data on the device. More on how that is handled in the security section below.
- Dashboard. A friendly greeting, your classes today, the assignments coming up soonest, how much you have studied this week, a heads up for anything due within 48 hours, and a button that jumps straight into a focus session.
- Courses. Add, edit and delete courses, each with an instructor and a colour. Every course shows its total study time and how many assignments are still open.
- Assignments. Add, edit, delete and tick them off. Set a priority, a due date and a rough estimate of how long it will take. Search them and filter by course, status or priority.
- Focus timer. A Pomodoro style timer that you can adjust. Pick the course, then start, pause or reset. Finished study blocks are saved on their own. You can leave a note on a session and tap a button whenever you get distracted. A little plant in the corner grows the more you study, and you get a longer break every few rounds.
- Weekly schedule. Add your recurring class times for each day. These also feed the classes today list on the dashboard.
- Flashcards. Build decks per course and review them with spaced repetition, the same idea Anki uses. If you have a local AI model running you can paste your notes and it drafts cards for you.
- Notes. Keep free form notes per course, and turn any note into flashcards with one tap when the AI is available.
- Study plan. Give your assignments a rough time estimate and it spreads the work across the days before each one is due, soonest deadlines first, capped by how much you want to study per day. It warns you when something will not fit in time.
- Grades. Break a course into weighted pieces like a midterm and a final, see your current grade, letter and GPA point, and work out what you still need on the rest to hit a target.
- Insights. A bar chart of study time per course, an activity heatmap over the last twelve weeks, your daily streak, achievement badges, and how much of your studying happens at the last minute.
- Export and backup. Save a weekly PDF report, send your assignments and classes to a calendar file for Google or Outlook, and back up or restore everything as a JSON file that you can optionally lock with a passphrase.
- Themes and settings. Light, dark or system mode, ten accent colours that recolour the whole app, and a text size option. You can also set your default timer lengths, your daily study goal, and which AI model to use.
- Small touches. Press Ctrl+K anywhere for a quick jump menu, watch an XP level climb as you study, read a study tip of the day, and get a little confetti when you finish a session. The timer also responds to the spacebar.
The flashcard maker and the plain English quick add for assignments talk to a local model through Ollama, so nothing ever leaves your computer. These bits only show up when Ollama is running with a model pulled, and the rest of the app is completely happy without it. I tested with the small qwen2.5:0.5b model and a bigger one writes noticeably better cards. The launcher passes the requests through to Ollama so the browser never has to.
I wanted to handle passwords properly, so here is what actually happens:
- Passwords are never saved. Only a salted Argon2id hash is kept (Argon2id is a memory hard function and the current recommendation), and signing in re derives it and compares in constant time. Accounts created under the older PBKDF2 scheme still work and are upgraded to Argon2id automatically the next time they sign in.
- After a few wrong guesses in a row an account locks for a short cooldown that grows with each further failure, so even local guessing is slow.
- The live database is encrypted at rest. When you sign in, a second key is derived from your password (Argon2id, with its own salt) and held only in memory for that session. The app runs on an in memory database and saves everything as a single AES 256 GCM encrypted snapshot after each change. Nothing readable is ever written to disk, and the key is never stored anywhere. On the next login it is derived again from your password and used to decrypt the snapshot.
- Backups can be encrypted with AES 256 GCM the same way, so a backup file is useless to anyone without the passphrase. A wrong passphrase fails cleanly and never half writes your data.
Because the encryption key comes only from your password and is never stored, there is no way to recover your data if you forget your password. That is the honest trade off of real encryption: no backdoor, for anyone.
Being straight about the rest: StudyFlow is a local, offline app with no server, so it cannot offer the guarantees a proper backend with server side auth would. The one thing stored on the device that is derived from your password is the Argon2id login hash, never the password itself, and the study data itself now sits encrypted. If you created accounts in an older build (before at rest encryption), that earlier data is not migrated automatically; export an encrypted backup first and restore it into the new build. Sharing the source code is fine, since no passwords or secrets are kept in the repo.
If you just want to use it, double click Open StudyFlow.exe in the project folder. It opens in its own window, there is nothing to install, and the first time you will create a local account. Because I am on a locked down laptop with no admin rights, I could not install the Visual Studio C++ tools that a full native Windows build needs, so the launcher is a small program I compiled with dart compile exe that serves the app locally and opens it using the browser that already ships with Windows. It still runs offline and keeps your data on the device.
If you have the Flutter SDK and want to run it from source:
flutter pub get
flutter run -d chromelib/data/holds the drift database, the tables and the queries.lib/security/has the password hashing, the encryption helpers and the account logic.lib/logic/is the plain Dart I could test on its own: the spaced repetition scheduler, the grade maths, the study planner and the insight helpers.lib/screens/is one file per screen.lib/ai/talks to the local model, andlib/export/builds the PDF, calendar and backup files.launcher/is the source for the Open StudyFlow.exe launcher.test/covers the database, the logic and the small helpers.
- Windows only for now, since that is the only platform I have actually built and tested.
- The live database is encrypted with a key derived from your password, so if you forget your password the data cannot be recovered (see the security note above).
- No cloud sync, so your data stays on one machine. The backup file is there if you want to move it.
- No pop up reminders while the app is closed. Deadlines show inside the app instead.
- The AI features need Ollama running, otherwise they simply stay hidden. Study notes in scripts other than Latin may show as question marks in the PDF report, since it uses a built in Latin font.
- A proper native Windows build once I am on a machine where I can install the C++ tools.
- Desktop reminders for deadlines.
- Letting the study planner work around my real class times, not just a daily cap.
- Maybe cloud sync much later so my phone and laptop share the same data.

