Skip to content
← projects

shipped

Ferva : Learn the Craft

An Android learning app for studying Flutter and Dart in Kurdish or English, with structured courses, native video, progress tracking, quizzes, notes, Q&A, streaks and certificates.

Ferva : Learn the Craft

Screenshots

Ferva
Ferva
Ferva
Ferva
Ferva
Ferva
001

Stack

SupabaseFlutter FlavorsShared PreferencesFirebaseDioGoRouterFVMFreezedDartMocktailRiverpodJSON SerializationFCMFlutter
002

Problem

The course platform already worked on the web, but learners needed a focused mobile path for watching lessons, resuming study and tracking progress in Sorani Kurdish as well as English. A second client also had to preserve the same enrolment and content rules instead of duplicating authorization in the app.
003

Constraints

One Flutter client has to stay correct across English and right-to-left Sorani Kurdish, unreliable mobile networks and a live shared backend. Paid-course access, private notes, quiz results and certificates must never depend on a client-side check. The published product is Android-only and must not imply iOS availability.
004

Architecture

Feature-first Clean-lite with data, domain and presentation layers. Riverpod provides state and dependency injection, repositories isolate Supabase and Dio, and GoRouter uses a stateful shell so Learn, Dashboard and Account keep independent navigation stacks. Freezed and JSON Serialization define immutable wire models. Postgres RLS protects user and enrolment data; the router guard only controls navigation.
005

Stack notes

Flutter and Dart pinned with FVM; Riverpod 3; GoRouter; Freezed and JSON Serialization; Supabase Auth, Postgres and RPCs under RLS; Dio for server routes; native HLS playback; Firebase Cloud Messaging plus local notifications; secure session storage; Shared Preferences for locale, theme and playback settings; Shorebird for Android updates.
006

Decisions

Kept one backend contract for web and mobile instead of creating app-specific authorization. Every feature owns a repository boundary, while use cases exist only for flows that coordinate more than one repository. Responsive decisions use available window width rather than device labels, and localization is structural: all visible copy comes from ARB files and the full layout mirrors in Kurdish.
007

Trade-offs

Ferva does not download course video for offline playback; it is network-aware and preserves session, preferences and playback progress, but course content remains server-backed. The release is Android-only even though the Flutter codebase retains iOS support. Push depends on Firebase while course and identity data stay in Supabase.
008

Metrics

Platform

Android

Locales

en + ckb

Architecture

3 layers

009

Lessons

The hardest parts of a learning app are continuity and trust, not the catalogue screen: resume position must survive lifecycle changes, completion must be idempotent, and access must be enforced below the UI. Treating RLS as the security boundary and localization as a layout constraint kept those rules testable across two clients and two reading directions.
010

Case study

Ferva is the native student portal for fawzii.dev. A learner can browse the catalogue as a guest, sign in, open an enrolled course and resume at the lesson and playback position they last reached. Inside a course they can search the syllabus, stream native HLS video, keep private timestamped notes, take server-graded quizzes, bookmark lessons, join lesson Q&A and post a review. The dashboard turns that activity into course progress, weekly goals, streak levels, an activity heatmap and a leaderboard; completed courses produce shareable certificates.\n\nThe same production Supabase backend serves the web and mobile clients. Postgres row-level security remains the authorization boundary, while repositories keep Supabase out of presentation code. Firebase Cloud Messaging and local notifications handle course updates, replies and streak reminders. Every screen supports English and Sorani Kurdish, including RTL layout, Kurdish numeral/date formatting, bundled Arabic font fallbacks, light and dark themes, and deep links into courses and lessons.