Skip to content
<k/>
0%
Loading assets · 0s
<k/>
Loading...

Project

Learning Journal App

An offline-first Flutter app for building a daily learning habit by writing down what you learned, one entry at a time.

WIP2026Featured
Stack
flutterdartriverpodgo-routerdriftfreezed
L

I'm building the Learning Journal App to help you build a daily learning habit: write down what you learned, one entry at a time. It's still a work in progress, but the core architecture is done before any feature code starts.

My goal is different from most note-taking tools: it's not about capturing everything you see. It's a learning journal. The point is to understand and remember what you studied, then reflect on it later.

🏗️ Architecture and Design

Before writing any code, I spent a long time designing the system on paper. I write docs and Architecture Decision Records (ADRs) first, so every design choice is settled before implementation starts.

  • Offline-First: The app must work fully offline. A journal you reach for daily can't depend on a flaky connection.
  • Layered Architecture: I'm separating core (pure domain + infrastructure), features (modules scoped to each feature), and presentation so business logic never leaks into widgets.
  • Drift Database: A typed, reactive SQLite layer so my domain model maps to real relational integrity without an ORM.
  • Riverpod for State: Compile-safe, testable state management with no service locator surprises at runtime.
  • go_router for Navigation: Declarative routing with deep link support.
  • Dependency Injection: A single ProviderScope acts as the composition root, so every layer is swapped and tested in isolation.

Every decision is documented, from the domain model down to serialization and logging strategy. When I start typing code, I'm implementing a spec, not making it up as I go.

🚀 Core Features

Once the foundation is done, the app will take you through the full learning loop:

  1. Workspaces: organizing learning into long-term goals (like "Learning Web Dev" or "IELTS Prep") so every entry has a direction.
  2. Daily Learning Sessions: a lightweight daily flow for writing down what you studied, keeping it as low-friction as possible.
  3. Categories and Tags: flexible classification so older entries stay findable as the journal grows.
  4. Media Evidence: attaching images or videos as proof of what you learned, not just text notes.
  5. Fully Offline: your data lives on your device, always, with no server in the middle.
  6. Optional Google Drive Sync: keeping the journal available across devices without ever giving up local ownership of your data.

🔒 Privacy and Offline

Privacy is the main reason the app is offline-first. Your journal never leaves your device unless you turn on sync. Google Drive sync is opt-in and runs against your own account, so no third-party server has your data.

🧭 Current Status (WIP)

I'm currently working on Sprint 00 (Foundation): bootstrapping the Flutter project with the locked-in dependency set (Riverpod, go_router, Drift, freezed, google_fonts, logging), the AppDatabase skeleton, theme and typography integration, localization (English + Bahasa Indonesia), and a router with Splash, Home, and Settings placeholder screens. No feature code exists yet. This sprint is infrastructure only, so every later sprint gets a stable base.

The repository isn't published yet and there are no screenshots to show. I'll update this page as the app takes shape.

Comments