MEHDI/SNOUSSI
REV 2026.08 MAHDIA --:-- GMT+1 Open for projects
Book a call
Mobile engineering · Mahdia, Tunisia

I take mobile apps from an empty repo to a signed release.

Flutter and React Native, plus the backend behind them. You get one engineer who does the architecture, the code, the icon, the store listing and the release build — not a handoff chain between four freelancers.

Free 30 minutes. You leave knowing what I’d cut from v1 and roughly what it costs — the written scope and fixed price follow within 2–3 days, whether or not you hire me.

Mehdi Snoussi
MEHDI SNOUSSIMAHDIA, TN
Live on Google PlayApps builtExperienceLocalised
6shipped solo, start to store 16apps in the portfolio 4 yrsmobile + full-stack 8languages, incl. RTL
SHEET 01 What you can hire me for

Three ways this usually starts.

Fixed scope, fixed quote, one person accountable. If your project isn't one of these, say so on the call and I'll tell you honestly whether I'm the right fit.

SVC-01

Ship a new app

You have an idea and no app. I take it to a real release on Google Play and the App Store.

  • Architecture, UI and the whole codebase
  • Backend and API where you need one
  • Icon, screenshots and store listing
  • Signed release build and submission
  • Analytics, ads or in-app purchases wired in
First release scoped to 6–10 weeks
SVC-02

Rescue an app you already have

Someone built it and left. It crashes, it's slow, or nobody can release it any more.

  • Audit of the codebase and build pipeline
  • Crash and performance triage, root cause first
  • Dependency and platform-policy catch-up
  • Get it building, signed and shippable again
  • Handover docs so you're not stuck twice
Audit first · 1 week, fixed price
SVC-03

App plus the platform behind it

The app is half the product. The other half is the dashboard, the back-office and the API.

  • Mobile app in Flutter or React Native
  • Web dashboard in Angular
  • API in NestJS, Symfony or Spring Boot
  • PostgreSQL, auth, roles and permissions
  • Real-time updates and offline-first sync
Scoped per project · from 10 weeks
SHEET 02 Proof — apps I shipped alone

This is what one person shipping alone looks like.

Every screen, icon, store listing and signed release below is mine — no designer, no team. Pick one and read exactly what is in it.

Lifestyle / Religion

Dhikr

Tasbih, Azkar, Salah & Quran

A companion for daily Muslim practice — tasbih, azkar, prayer times, Qibla and the full Quran. Prayer times are computed on the device and Quran search accepts spoken Arabic through a bundled Whisper ONNX model, so everything but recitation audio and mosque search works with no connection.

  • Full Quran reader: 114 surahs, 6,236 ayahs in Uthmani script with EN/FR translation
  • On-device Arabic voice search — bundled Whisper tiny + Silero VAD ONNX models
  • Offline prayer times, 7 calculation methods, per-prayer offsets, Athan alarm channel
  • Real-time Qibla compass and nearby-mosque search over the OpenStreetMap Overpass API
  • Tasbih counter with 7 presets, streaks and weekly / monthly charts, plus 9 app-wide badges
  • Four curated azkar sets — morning, evening, after-prayer, sleep — plus 25 prophet stories in 83 trilingual chapters

Flutter · BLoC · get_it · GoRouter · Hive · adhan_dart · sherpa_onnx (Whisper + Silero VAD) · flutter_map · AdMob + UMP · in_app_purchase

com.carthage.dhikrv1.1.0AndroidArabic · English · French Get it on Google Play ↗ Privacy ↗ Terms ↗
Dhikr — Arabic home dashboard Dhikr — Uthmani Quran reader Dhikr — Qibla compass Dhikr — Azkar collections Dhikr — Surah browser
Arabic home dashboard
Game / Puzzle

SortFlow

Color sort puzzle, solver-verified

A color-sort puzzle with no authored level list. Every board is scrambled out of a solved state and then re-proved by a breadth-first solver, and that same search supplies the hints and sets the three-star threshold — so every shipped board is solvable by construction, with a par that is proven reachable.

  • No authored level list — every board is generated on the fly and re-proved by a BFS solver
  • Generation and hints run on a background isolate, so a level load never blocks the UI
  • Star thresholds derive from the board's own BFS optimum plus a small fairness pad
  • 6 star-gated worlds, 12 claimable achievements and a date-seeded daily challenge
  • 8 tube skins and 6 backgrounds drawn in code with CustomPainter — no image assets
  • 8 languages including Arabic RTL, JSON progress export / import, and no backend at all

Flutter (no game engine) · CustomPainter + AnimationController · BLoC · get_it · GoRouter · Hive · easy_localization · AdMob · in_app_purchase

com.sortflow.sortflowv1.1.0Android8 languages, Arabic RTL Get it on Google Play ↗ Privacy ↗ Terms ↗
SortFlow — Pour and sort SortFlow — Home and progress SortFlow — Star-gated worlds SortFlow — Daily challenge streak SortFlow — Power-up shop
Pour and sort
Lifestyle / Astrology

AI Mystic

AI tarot & astrology readings

A tarot and astrology app that writes its readings with Google Gemini in a fixed Oracle voice. The interesting part is the failure path: a content-keyed cache and hand-written fallback text mean the app always returns a reading, even with the model unreachable.

  • Full 78-card deck with hand-written upright and reversed meanings, drawn in CustomPainter
  • Gemini 2.0 Flash readings with a hand-written offline fallback and a content-keyed cache
  • Four question spreads plus the daily card, a 3-reading free cap, 2 more by rewarded video
  • Daily card seeded by the calendar date, so a given day always yields the same draw
  • 1080×1920 share card whose Play link encodes the card id for deferred deep linking
  • Streak milestones at 7 / 30 / 100 / 365 days, a 78-card collection and a journal

Flutter · BLoC · get_it · go_router · Hive · google_generative_ai (Gemini) · AdMob · Play Billing 8

com.carthage.aimysticv1.1.0AndroidEnglish Get it on Google Play ↗ Privacy ↗ Terms ↗
AI Mystic — Daily card orb AI Mystic — Card revelation AI Mystic — Zodiac wheel AI Mystic — Ask your question AI Mystic — Streaks and collection
Daily card orb
Game / Puzzle

Cascade

Drop & merge physics puzzle

A drop-and-merge puzzle built on Flame and Forge2D, where merges resolve through real rigid-body contacts rather than a grid. The rewarded continue clears a band roughly two rows deep off the bottom and wakes the sleeping bodies above it, so the stack actually collapses into the gap.

  • Forge2D rigid-body board where same-tier orbs merge on contact — 11 tiers, Spark to Nova
  • Chain-merge combo window with up to 4× multiplier and triangular per-tier scoring
  • Date-seeded daily challenge giving every player the same board, plus a day streak
  • Three coin-priced power-ups (swap, undo, targeted bomb) and one ad-earned bomb per run
  • 19 claim-to-collect achievements, 5 orb skins and a 7-day escalating login reward
  • 8 languages with Arabic RTL, an in-app language switcher and a reduced-motion mode

Flutter · Flame 1.37 · flame_forge2d physics · easy_localization · shared_preferences · audioplayers · AdMob + UMP · in_app_purchase

com.carthage.cascadev1.1.0Android8 languages, Arabic RTL Get it on Google Play ↗ Privacy ↗ Terms ↗
Cascade — Home menu Cascade — Physics board Cascade — Achievements and claims Cascade — Orb skin shop Cascade — 7-day reward ladder
Home menu
Game / Puzzle

Zellia

Cozy triple tile match

A triple-tile-match puzzle set in the zellige mosaics of Fez and Granada. Every board comes out of a constructive reverse-deal generator that lays the winning line down first, so no level can ever be dealt unsolvable.

  • Constructive reverse-deal generator proves every board solvable, unit-tested to level 150
  • Shuffle re-runs the deal on the live position, tray included, and is tested to stay winnable
  • Six girih motifs on a pre-rasterised 256 px sprite set — tiles separate by silhouette, not just colour
  • Palace restoration meta: 8 areas × 4 stages bought with tesserae earned per board
  • Daily board on a launch-stable seed, endless Zen mode and a freeze-forgiving streak
  • No banner ads: interstitials every 2nd board on an 80 s cooldown, plus opt-in rewarded

Flutter · Flame · pure-Dart solvable-board generator · shared_preferences · easy_localization · AdMob + UMP · in_app_purchase · flutter_local_notifications

com.carthage.zelliav1.1.0Android8 languages, Arabic RTL Get it on Google Play ↗ Privacy ↗ Terms ↗
Zellia — Core match loop Zellia — Palace restoration Zellia — Daily board Zellia — Mode select Zellia — Zen mode
Core match loop
Game / Casual

Relic Revival

Antique restore & museum builder

A swipe-to-clean restoration game: wipe away the grime and a relic's hidden identity emerges. Every relic is composed from an integer id plus a per-install salt by a seeded FNV-1a / SplitMix64 pipeline, and drawn entirely in CustomPainter — the game itself ships with no bitmap art.

  • Swipe-to-wipe reveal driven by a GPU erase mask plus a 64×64 CPU coverage grid
  • Deterministic composer: FNV-1a-64 + SplitMix64 turns a relic id into vector art
  • Five rarity tiers at 60 / 25 / 10 / 4.5 / 0.5 drop weights — higher tiers resist the wipe
  • A museum of 8 themed sets across 61 pedestals, each completion adding permanent income
  • Offline idle income from a 4-restorer roster, capped at 6 h and proof against clock edits
  • 1080×1080 before / after share card rendered by the same painter, plus 8 UI languages

Flutter · CustomPainter-only art (no game engine) · shared_preferences · easy_localization · AdMob · in_app_purchase · audioplayers

com.carthage.relicrevivalv1.1.0Android8 languages, incl. Arabic Get it on Google Play ↗ Privacy ↗ Terms ↗
Relic Revival — Epic reveal and appraisal Relic Revival — Mid-wipe reveal Relic Revival — Museum collection sets Relic Revival — Restorer roster
Epic reveal and appraisal

All six are live on Google Play — install any of them and hold the work in your hand before you talk to me. I’ll also screen-share the codebase on the call. Privacy policy and terms for each one live at /legal.

SHEET 03 Production work for clients

Four years of production work, under NDA.

Client names and code stay private. The architecture doesn’t, and I’m glad to walk you through any of these decisions on a call.

JOB-01 · ERP

Multi-tenant financial platform

Sole front-end engineer in a 12-person Scrum team. Accounting, e-invoicing, payments and reporting, with per-user permissions, record-level locking and real-time updates.

Angular
Symfony · PostgreSQL
Mercure
JOB-02 · MOBILE

Cross-platform tourism app

Published to both the App Store and Google Play. Live geolocation guidance, a full offline mode, multi-language support and push notifications.

Flutter
iOS · Android
i18n
JOB-03 · FINTECH

Personal finance app, both stores

Taken to production on iOS and Android: offline-first sync, native permission handling, and the store submission process end to end.

React Native
iOS · Android
JOB-04 · HEALTHTECH

Clinical training platform

Learner progress tracking with automatic certificate generation, integrated with an external telephony API and the client's learning-management system.

Angular
Symfony · PostgreSQL
JOB-05 · PROPTECH

Real-estate & vehicle valuation

An instant-estimate quiz with photo and video submission, an admin back-office, and an automated ingestion pipeline that keeps live market comparables flowing in.

Angular · NgRx
NestJS
JOB-06 · INTERNAL

Rich-text editor component

Replaced a paid third-party library with a reusable in-house component, removing a recurring licence cost from the product.

Angular
TypeScript

Earlier: Software Engineering degree, EPI (2020–2023) · BSc Electronics, ISSAT Sousse (2017–2020)

SHEET 04 How a project runs

You always know what week you're in.

No black box, no invoice surprises. From the first week of building, an installable build lands in your hands every week.

01

Call

Thirty minutes. You describe the product, I ask the awkward questions and tell you what I'd cut from v1.

Free · same week
02

Scope & quote

A written scope, a fixed price and a delivery date. If it's out of your budget, you find out here, not later.

2–3 days
03

Weekly builds

An installable build every week, in your own repo from day one. You steer while steering is still cheap.

The bulk of the project
04

Release & handover

Signed builds, store listing, privacy policy and submission. Then docs, or a maintenance arrangement if you want one.

Final 1–2 weeks
SHEET 05 Questions people actually ask

The awkward ones, answered up front.

Q-01 What does an app cost?
I quote a fixed price after the scope call, never an open-ended hourly rate. The number depends almost entirely on how much you're willing to leave out of version one — which is the main thing we'll talk about on the call. You will not get an invoice you didn't agree to in writing first.
Q-02 How long until it's in the stores?
I scope first releases to a six-to-ten week window, and the exact date goes into the written scope before you pay anything. A rescue starts with a one-week fixed-price audit so neither of us is guessing. Store review adds a few days on Google Play, and can add longer on the App Store.
Q-03 Do you do the design as well?
There was no designer on any of the six apps above; I drew every screen, icon and store screenshot myself. If you already have a designer or a Figma file I’ll build to that instead, and if you don’t, you’re not blocked waiting for one.
Q-04 iOS as well as Android?
Flutter and React Native both build one codebase for both platforms, and I have taken client apps through submission on both stores. My own six apps are Android-first because that is where their audience is, not because of a platform limit.
Q-05 Who owns the code?
You do. The work happens in your repository, under your account, with your name on the store listing and your signing keys in your hands from day one. Full IP assignment is written into the contract and completes on final payment. No lock-in, nothing to buy back at the end.
Q-06 What happens after launch?
Your choice. Either a clean handover with documentation so any developer can pick it up, or a monthly arrangement for updates, platform-policy changes and new features. Both stores force breaking changes on you every year, so someone has to own that.
Q-07 You're in Tunisia — how does that work?
Mahdia, on the coast, GMT+1 — the same working day as all of Europe, and mornings with the US East Coast. I work in English, French and Arabic. On money: a written agreement, and payment in milestones tied to deliverables rather than one lump sum up front. You can pay by bank transfer, or through Upwork escrow if you would rather have a platform holding the funds. And because the code sits in your repository under your account from the first commit, you keep everything you have paid for even if we stop working together.
Q-08 Can I see the code before I commit?
On the call, yes. I’ll share a screen and walk you through the architecture of any app on this page, including the parts I would do differently now. It is the fastest way for a technical founder to work out whether I am any good.
SHEET 06 Who you'd be working with

Four years inside other people’s platforms taught me what to build on my own.

Angular and TypeScript on the front, Symfony, NestJS, Spring Boot and PostgreSQL behind them — enterprise systems where a bad release costs somebody real money. That's where I learned to care about release pipelines, permissions and the boring parts.

Alongside that I built sixteen apps of my own, six of them all the way to signed, release-ready builds: Flutter, clean architecture, BLoC, localisation into eight languages, AdMob and in-app purchases, store listings, privacy policies. Every part of that was me — which is why I know exactly how long each part takes.

So the person on the call is the person who writes the code. I’ve done every part of this job — architecture, UI, store submission — on my own, more than once.

Based
Mahdia, Tunisia · GMT+1
Languages
English · French · Arabic
Mobile
Flutter · React Native · Dart
Web
Angular · TypeScript · RxJS
Backend
NestJS · Symfony · Spring Boot
Data
PostgreSQL · Hive · SQLite
Ships with
GitLab CI · SonarQube
Contract
Direct or via Upwork escrow
SHEET 07 Start here

Tell me what you're building.

Answer these three and I’ll send you a couple of times that work. You’ll leave the call knowing what v1 should actually contain; the written scope, delivery date and fixed price follow within 2–3 days.

02 · Where is it now?
03 · Budget band
Send
I usually answer the same day, and never later than two business days.
Email
snoussimehdi0@gmail.com
Working hours
GMT+1 · overlaps EU all day, US mornings
Availability
Open for new projects
Elsewhere
GitHub · Upwork