class MohamedAbdelRahem extends FlutterDeveloper {
final String currentFocus = "Offline-First Architecture & Real-Time Sync";
final String philosophy = "Learning to build scalable systems, not just apps.";
final bool obsessedWith = Clean Code && Architectural Patterns && SOLID;
List<String> get coreBeliefs => [
"Every layer in a system must have a deliberate reason to exist.",
"The UI is the least important part of an application.",
"Complexity that serves no domain purpose is disguised technical debt.",
];
String get status => "Junior by title. Senior in discipline.";
}I am a self-taught Flutter engineer who built my expertise through deep, deliberate study of world-class resources — not tutorials, but real system design. My goal is not to build apps that work. My goal is to build apps that scale, maintain, and survive.
This is what separates me from a typical beginner.
| Competency | What I Actually Apply |
|---|---|
| 🧱 Clean Architecture | Strict 3-layer separation: Domain → Data → Presentation. Business logic never touches Flutter or Firebase directly. |
| 🔷 MVVM Pattern | ViewModels isolate state logic. UI layers are purely reactive — no business decisions in widgets. |
| 🔩 SOLID Principles | Applied at class and module level. Single responsibility, open extensions, injected dependencies. |
| ♻️ Repository Pattern | All data sources (remote, local, cache) are hidden behind domain-owned interfaces. |
| 📶 Offline-First Logic | Local SQLite is the source of truth. Network is a sync mechanism, not a hard dependency. |
| ⚡ Reactive Data Pipelines | Firestore snapshots() streams consumed through repository contracts, never directly in UI. |
| 🔐 Dependency Inversion | Constructor injection throughout. Zero hard dependencies on infrastructure from the domain layer. |
| 🧪 Testable by Design | Use-case isolation makes logic unit-testable without a running device or network. |
Not what I have built — but how I build.
[ Remote Sources ] [ Local Persistence ] [ UI Layer ]
Firebase Firestore ──► ──►
Supabase PostgreSQL ──► Repository Layer ──► ViewModel / Provider
REST Endpoints ──► (Unified Contract) ──►
SQLite Cache ──►
- Firebase Firestore handles real-time document synchronization through persistent stream listeners — the UI reacts to emissions, never polls.
- Supabase serves structured relational data needs (row-level security, PostgreSQL queries) via typed repository interfaces that the domain layer is never aware of directly.
- SQLite acts as the ground truth for offline-capable features. On reconnection, a reconciliation strategy compares local state against the remote source — conflict resolution is handled at the data layer, invisible to the UI.
- Caching discipline: TTL-based invalidation and stale-while-revalidate patterns ensure the user always sees data — even during network failure.
- All media assets (images, documents, thumbnails) are routed through Cloudinary's delivery pipeline rather than stored as raw blobs in the database.
- Transformation parameters (resize, format conversion, quality compression) are applied at the URL level — no client-side processing, no bloated storage.
- Lazy-loading and progressive rendering are coordinated with Flutter's
CachedNetworkImageto ensure fast perceived performance on slow connections. - This approach decouples media concerns from application logic — a dedicated
MediaRepositoryhandles all Cloudinary interactions, exposing clean typed methods to the domain.
| Layer | Tool | Responsibility |
|---|---|---|
| Global App State | Riverpod (Code Gen) | Auth session, user preferences, DI graph |
| Feature State | Riverpod AsyncNotifier |
Async data loading, error & loading states |
| Complex Event Flows | BLoC / Cubit | Multi-step forms, paginated lists, event queues |
| Lightweight Local State | Provider | Simple widget-scoped state without boilerplate |
| UI Contract | sealed classes |
Exhaustive state mapping: Loading / Success / Failure |
- Riverpod manages the application-wide dependency graph and all asynchronous data streams. Code generation (
@riverpod) eliminates runtime provider mismatches and produces compile-safe provider references. - BLoC is reserved for flows that benefit from strict event/state separation — where auditability and testability of every transition matters.
- Provider handles lightweight, widget-scoped state where Riverpod's full power would introduce unnecessary overhead.
- Every consumable state is modeled as a
sealedclass — the UI is forced to handle every possible outcome at compile time. No silent failures.
A national excellence program in Egypt selecting high-potential software engineers for advanced, industry-aligned development training.
"A codebase that a new engineer cannot navigate in under an hour is a liability disguised as a system."
┌─────────────────────────────────────────────────────────┐
│ MY THREE LAWS │
│ │
│ 1. ISOLATE → Business logic never touches the UI. │
│ 2. REACT → State is a stream, not a snapshot. │
│ 3. SURVIVE → Offline is the baseline, not the edge. │
└─────────────────────────────────────────────────────────┘
Open to junior-to-mid Flutter roles, architectural mentorship, and collaborative open-source work.
| Channel | Details |
|---|---|
| linkedin.com/in/mohamed-abdel-rahem-386125288 | |
| mohamedar2002mail@gmail.com | |
| +20 115 261 9144 | |
| 🐙 GitHub | github.com/Mohamed-Abdel-Rahem |