Khalid Alaoui in a black suit, standing with hands in pockets

Khalid Alaoui,

iOS Lead & Project Manager

Khalid Alaoui

iOS Lead at Zaytech, Morocco. I ship 288 live restaurant apps from one Swift codebase, and I own the platform end to end: the app, the release pipeline, Apple Pay and Clover payments, and the analytics that count every order.288 live restaurant apps, one Swift codebase.

288Live apps
4.94★App Store rating
99.9%Crash-free sessions
  • UIKit & SwiftUI
  • Fastlane CI/CD
  • Apple Pay & Clover
Roxy's Island Grill app launch screen
Roxy's Island Grill 4.9★
Goldbergs Fine Foods app launch screen
Goldbergs Fine Foods 4.9★
Bagel Boss app launch screen
Bagel Boss 4.9★
Recently shippedgit log
  1. Feat

    A new branded search page

    7a08eec
  2. Fix

    Pages no longer jump or reset as they open

    941d394
  3. Feat

    New theme for the rewards page

    3fe3641
  4. Feat

    Rewards activity now shows inline, no separate page

    2977a6f
branch: mainFrom the restaurant app's repository

Most developers ship an app. I ship the same Swift codebase to 288 restaurants, each one under its own name.

Roxy's Island Grill Bagel Boss Zanes Lebanese Grill HiroNori Craft Ramen Goldbergs Fine Foods Takitos Con Sabor Noodleholics The Burrito Express
4.94★

average App Store rating, across 12,868 ratings on 229 of the apps.

26.9k

orders placed through the apps in the last 30 days.

1,300

commits to the app repository, the most on the team.

Selected work

Four pieces of the same system. Open any of them for the screens, the numbers and how it was built.

Case / White-label apps
Roxy's Island GrillBagel BossGoldbergs Fine FoodsHiroNori Craft RamenZanes Lebanese Grill

One codebase, 288 restaurants

Each restaurant gets its own App Store app with its branding, menu, rewards and checkout. Adding a client means editing configuration, not writing a new app.

#iOS#Swift#UIKit#SwiftUI
Case / Release pipeline

Hundreds of apps, one command

There was no Fastlane or CI before this. I moved every merchant onto one branch and one target, then automated signing, builds and uploads.

#Fastlane#GitHubActions#ASC_API
Case / Analytics
Analytics dashboard showing 26,863 orders, $729.1k GMV and 17.4% conversion over 30 days

Then I built the scoreboard

An analytics server for the iOS and Android apps, with orders, revenue, funnel and checkout health for all 287 active apps.

#Node.js#SQLite#WorkerThreads
Case / Payments
Checkout with pickup or delivery, ordering time and payment method

Apple Pay in, Clover out

The full payment path, from the Apple Pay sheet to the order landing on the restaurant's Clover terminal. Firebase App Check keeps the API for genuine app clients only.

#ApplePay#Clover#AppCheck

Under the hood

Five real problems from the restaurant app, straight from my commits. The code below is the actual fix, trimmed to fit.

Exhibit A / commit 86b154aAug 2026

The tab that pointed at nothing

Symptom

Some merchants' apps crashed with an NSRangeException when switching tabs.

Root cause

The tab index came from one filtered menu list, while the real view controllers were built from another that silently dropped items. When the two drifted, the index pointed past the end.

Fix

Record the exact items that built the tabs, index against that same list, and bounds-check as a backstop.

// Index against the list that actually built viewControllers,
// not a freshly recomputed one that can drift.
let bottomItems = currentTabItems

guard let tabs = self.viewControllers, tabs.indices.contains(index) else {
    self.updateViewController()
    return
}

In their words

Real App Store reviews of apps I build and ship.

★★★★★
“Very easy to use, very easy to understand, and double checks with you to verify that you are ordering for the right place, time, and order!”
bamboosoopApp Store review, Roxy's Island Grill
★★★★★
“This place is legit! The app is dangerously convenient.”
MdudesApp Store review, Roxy's Island Grill
★★★★★
“Super easy to use and convenient and the rewards are a good incentive!”
ChelitaApp Store review, Takitos Con Sabor

Outside the restaurant apps

Automation / Python

Shorts pipeline

Turns a long video into YouTube Shorts on its own. Whisper transcribes it, Llama 3.3 70B picks the moments worth clipping, ffmpeg cuts vertical clips with burned-in captions, and the YouTube Data API uploads them on a daily queue.

PythonWhisperLLMffmpeg
iOS / Public sector

RSU app

Morocco's Registre Social Unifié score decides what social support a household gets, and it comes from a long official form. I led the iOS app that turns it into short steps with the scoring logic behind them, in light and dark.

SwiftStoryboardDark mode
iOS / AI

Gemini chatbot

A native iOS chatbot that handles conversations through the Google Gemini API.

SwiftGemini API
iOS / Events

Ticket scanner

Scans event tickets, with secure login and a custom API for authentication and ticket validation.

SwiftREST
Backend / API

The Foodies API

Profiles, posts and followers for a restaurant social app. MySQL model, auth and endpoints shaped for what the screens render.

LaravelMySQL
WordPress / PHP

Slider plugin

A configurable slider plugin used across several client sites, so editors change slides without filing a ticket.

PHPWordPress
Internship / Full stack

Movies and TV platform

A Laravel API with a React front end, built on my own in a one-month internship. It's the project that got me everything after it.

LaravelReact
The personal editionEst. 2023

The Alaoui Record

The personal record of an iOS developer

Developer ships 288 restaurant apps, still makes bad coffee at 2am

Khalid Alaoui has spent three years at Zaytech turning one Swift codebase into hundreds of branded ordering apps. He owns the iOS side from build to App Store, and he keeps what is already in the store working.

When shipping updates to hundreds of apps stopped scaling, he rebuilt how the platform is configured and wrote the Fastlane and GitHub Actions pipeline that ships it. Then he built the analytics that count every order.

He is now looking for a full-time iOS role, remote or with relocation. Sources describe him as "the reason it works", although that source is him.

Available Black and white portrait of Khalid, hand resting on his chin
Pictured: the subject, considering a constraint conflict.

The Lab Report

SubstanceFound inFinding
Swift, UIKitThe restaurant appsPrimary tool
SwiftUINewer app screensIn production
Fastlane, GitHub ActionsRelease pipelineBuilt it
FirebaseApp Check, CrashlyticsIn production
Apple Pay, Clover POSCheckoutBuilt it
Node.js, SQLiteAnalytics platformBuilt it
Laravel, MySQLThe Foodies APIComfortable
React, PythonSide projectsComfortable

The Career Ledger

  1. iOS Lead & Project ManagerZaytech Software. Runs the white-label platform, its pipeline and its analytics.
  2. Web Developer, InternZaytech Software. Built a movies and TV platform, then stayed.
  3. Digital Development DiplomaISTA Mohammedia.
  4. Economics, one yearFaculté des sciences juridiques, économiques et sociales de Mohammedia.
  5. Baccalaureate, Physics and ChemistryBeni Yakhlef High School.

Classifieds

PERSONAL. Loves the small details; they are the interesting part. Would rather skip the headache than win an argument. Skates, and lets the mood pick the music.

EARLY CAREER. Sold his book collection, ran a clothes resale with a partner, moved furniture for the neighbours and assisted a topographer. Then found Swift.

WANTED. A second monitor for the simulator. Non-negotiable.

LANGUAGES. Arabic native, English fluent, French intermediate, German losing.

NOTICE. The whiteboard behind his desk says discipline creates freedom. It is not ironic.

Khalid Alaoui in a navy suit, white shirt and dark green tie

Let's build your next app.

I'm looking for a full-time iOS role. If you have an app that needs building, or one that needs rescuing, write to me. I answer.

Case / White-label apps

One codebase, 288 restaurants

One Swift codebase ships each restaurant its own App Store app, with its own branding, menu and checkout. Every order goes through Zaytech's ordering platform. The apps include multi-location store finders, stories, featured items, articles, referrals, rewards, cart and checkout, in light and dark mode.

485

apps configured in one merchants.json

288

live on the App Store today

$39.8k

ordered through the top merchant's app in 30 days

Same code, four restaurants

Roxy's Island Grill launch screen
Roxy's Island GrillPortland, OR
App Store, 4.9 (641) ↗
Bagel Boss launch screen
Bagel BossNew York and Florida
App Store, 4.9 (425) ↗
Goldbergs Fine Foods launch screen
Goldbergs Fine FoodsAtlanta, GA
App Store, 4.9 (355) ↗
HiroNori Craft Ramen launch screen
HiroNori Craft RamenCalifornia
App Store, 4.9 (410) ↗
Bagel Boss home screen in light mode
Same build, lightFollows the system appearance

One order, start to finish

Store finder with map and filters
Find a storeMap, open-now and delivery filters
Category grid with prices
BrowseCategories from the POS menu
Item detail with a required choice
CustomiseRequired and optional modifiers
Cart with loyalty points preview
CartShows the points the order earns
Checkout screen
CheckoutPickup or delivery, time, payment
Articles feed
ArticlesThe restaurant's own news

Their colours, their menu

Roxy's location picker
Roxy'sLocation picker
Roxy's order tab
Roxy'sOrder tab
Roxy's specialty plates
Roxy'sSpecialty plates
Goldbergs order tab in light mode
GoldbergsOrder tab, light
Goldbergs limited-time menu
GoldbergsLimited-time menu
Case / Release pipeline, Feb to Aug 2026

Hundreds of apps, one command

The problem

Branding was injected into the project at build time by a git hook and a target-generator package, and there was no Fastlane or CI release pipeline. With hundreds of apps, every template update meant a lot of manual work.

What I did

  • Made merchants.json the single source of truth and generated one xcconfig per merchant from it.
  • Wrote switch.sh to stage icons, splash screens and Firebase config into gitignored paths, and removed the generator package.
  • Built Fastlane and GitHub Actions on a self-hosted Mac mini, with Match signing, build numbers read from App Store Connect and version-based detection of outdated apps.
  • Parallel builds, each in its own git worktree. A pre-commit hook blocks leaked keys and webhooks.

The result

0 → 333

merchant configurations on template 3.2.04 between 31 Jul and 31 Aug 2026

285 / 288

live apps now on the same release

716 / 718

commits since the pipeline landed are mine

What it looks like to use

# work on one restaurant locally
$ ./scripts/switch.sh bagel

# what would a release touch?
$ ./scripts/update_merchants.sh --dry-run

# ship every outdated app, four at a time
$ ./scripts/update_merchants.sh --concurrency 4

# a brand-new client, registered in App Store Connect
$ ./scripts/create_merchant.sh newslug
Case / Analytics

Then I built the scoreboard

The iOS and Android apps send events to an analytics server I wrote. The dashboard shows orders, revenue, conversion, the ordering funnel and checkout health for all 287 active apps, or for any single one, live.

Analytics dashboard with KPIs, daily charts and an anonymised app leaderboard
$729k

ordered in the last 30 days, $1.31M since the analytics went live

17.4%

of sessions end in an order

99.9%

crash-free sessions

How it's built

Order Pulse summary: 287 active apps, 26,858 orders, $729,020 GMV

Live production data for the 30 days ending 29 Sep 2026. Client names are anonymised.

Case / Payments

Apple Pay in, Clover out

Apple Pay

I built the whole path: the payment sheet, authorisation, the server side that confirms it, and the failure cases nobody thinks about until a customer is standing at the counter.

Clover POS

An order placed in the app syncs straight to the restaurant's Clover terminal. Staff don't need to watch a second screen, and orders don't get lost between two systems.

Firebase App Check

The API answers genuine app clients and nothing else. Locking it down was my job, including the 403s I earned along the way.

Last month's payment mix: roughly 6,500 Apple Pay orders, 6,000 card orders and a few dozen gift cards, all through the same checkout.

Cart
CartLoyalty points preview
Checkout
CheckoutOrder type, time, payment