منظومة مجوهرات السلطان الرقمية
تطبيقان إنتاجيان — لوحة عمليات داخلية وتطبيق تجارة إلكترونية للعملاء — أُعيد بناؤهما من شيفرة قديمة مع تحسين بالأداء بنسبة ٩٠٪.
- دوري
- المطوّر الأساسي للموبايل
- الفترة
- January 2026 – Present
- الخبرة المرتبطة
- مجوهرات السلطان
دراسة الحالة الكاملة متوفّرة حاليًا بالإنجليزية، والترجمة العربية في الطريق.
Al-Sultan Jewelry is a Türkiye-based company with a complex operational stack: gold buying/selling, accounting, supplier/customer relationships, and a consumer storefront. The existing app had accumulated enough technical debt to become too slow and unreliable to sustain. My engagement began as a “fix the performance” contract and grew into a full ecosystem rebuild.
The two apps
Internal operations dashboard (staff-facing). A powerful tool where accuracy beats aesthetics. Its hardest feature is the Gold Operations module — a multi-step workflow with branching paths, weights in grams and tolas, purity percentages, and spot-price conversions — implemented with Reactive Forms (typed FormControls, cross-field validators, FormArray steps) and a BLoC managing the step state machine. An accounting module handles ledgers, filtered history over thousands of records, and PDF export.
Consumer e-commerce app. Product browsing, cart, checkout, and order tracking, with offline-first ObjectBox caching (full sync on first launch, incremental sync after), Arabic/English localization with full RTL, and locally-persisted cart state.
The 90% performance turnaround
The legacy app’s problems were structural, not superficial:
- No caching layer — every screen triggered fresh API calls.
- Full-resolution image decoding — 4K product images decoded for thumbnails, causing OOM kills.
- A global ChangeNotifier everything subscribed to — every change rebuilt the tree.
- Synchronous JSON parsing on the main isolate froze the UI for seconds.
- No
constconstructors anywhere.
The rebuild addressed each: ObjectBox as a local source of truth, cached_network_image
with cacheWidth/cacheHeight, feature-scoped BLoCs with BlocSelector, compute()
isolates for JSON, and a mechanical const pass. Result: navigation on the most-used
screens went from ~3s to ~0.3s, memory dropped ~60%, and OOM-driven crashes fell to near
zero.
Why it matters
This is the portfolio’s clearest example of performance judgment and legacy-rebuild decision-making — recognizing when structural problems run deep enough that a targeted rebuild, not endless patching, is the responsible engineering choice.