Head of Software Engineering · FutureGate Cairo · UTC+3 · —:— local
Adham
Eissa
I build the technical core of consumer products — ML systems, Go backends, production infra. Thirteen shipped; two run solo, end to end.
Selected work
Thirteen shipped products. The first two get full teardowns further down — the hard problem, the constraint, the architecture, and the number that proves it worked.
-
Short-form video and talent discovery. A two-tower PyTorch recommender served behind an 80 ms deadline, and a multi-modal moderation pipeline that resolves 95% of uploads on local models.
Go (Gin, GORM) · PyTorch · LightGBM · FastAPI · gRPC · PostgreSQL · Redis · Cloudflare R2 · MinIO · HLS · FFmpeg · BullMQ · Paymob · React Native/TS (Expo, EAS) · React · Docker · Nginx · systemd · Hetzner
-
A Pan-Arab multiplayer card game cloning the Jawaker experience, in a single self-contained HTML file. Correct 7–13 bid scoring, a three-tier strategic AI, a coin economy, tournament flows, and synthesised audio. Monetisation is layered: AdMob, coin packs on region-appropriate payment rails, and tournament rake.
HTML · CSS · JavaScript · Web Audio · localStorage — no build step
-
A car diagnostics app. It talks to an OBD-II/ELM adapter over the car's diagnostic port to read live engine telemetry and fault codes — a real-time protocol problem wearing a consumer app's clothes, since the adapter answers slowly and the UI cannot.
-
Food ordering e-commerce with an accounting system built in. Catalogue, cart and checkout on the customer side; on the other, the ledger that has to agree with every order placed — which is the part of an e-commerce build that actually has to be right.
Freelance client delivery · custom theming · payment gateway integration
-
A second storefront, built on what the first one taught me: catalogue, cart and checkout for a consumer electronics retailer.
-
A video game that runs in a browser tab. Heavily stylised neon visuals rendered in real time, with no engine, no plugin and no download between the player and the first frame — the frame budget is the whole design constraint.
JavaScript · WebGL · Web Audio · Cloudflare Pages
-
An educational blog for an international professor of human rights, publishing on human rights and on raising children. Editorial layout, long-form reading, and a publishing flow the author can run without me.
Freelance client delivery · custom theming · performance optimisation
-
Win 10 Times
In development
An app for beating procrastination. In progress — the interesting problem is that the product only works if it changes behaviour, which makes the measurement harder than the build.
Also shipped
- Lifestyle.bg Bulgarian lifestyle magazine — daily stories, celebrity news and trends. lifestyle.bg ↗
- Canoe Club Menswear e-commerce for a Boulder, Colorado retailer. shopcanoeclub.com ↗
- Orientation Real-estate video platform for developers, brokers and sales agents. orientationapps.com ↗
- Quantum Quiz An AI-powered physics challenge that runs entirely in the browser. quantamquiz.neocities.org ↗
- Superwash Car Care Site for a car-care and detailing business. superwash-car-care.weeblysite.com ↗
What I build
Three surfaces, one person. The systems work below is what makes the products on top of it hold up.
- Languages
- Go · Python · JavaScript · TypeScript · HTML · CSS
- Backend
- Gin · Node.js · FastAPI · gRPC · PostgreSQL · Redis
- Frontend
- Next.js · React · WebGL · Web Audio
- Mobile
- React Native · Flutter
- Cloud & infra
- AWS · Azure · Hetzner · Docker · Cloudflare R2
- Machine learning
- PyTorch · NudeNet · faster-whisper · Detoxify
Talentify
Short-form video and talent discovery — a recommender problem wearing a consumer app’s clothes.
Final pre-launch · submitted to both app stores
A discovery feed is the product. If the first thirty seconds are boring, nothing else in the app matters. But at launch there is no engagement history, no labelled data, and no traffic to learn from — the classic cold start, except the thing that needs bootstrapping is also the thing users judge you on immediately.
Running underneath it is a second problem with a much sharper edge. User-generated video is a trust-and-safety liability from the first upload: one unmoderated clip is not a bad metric, it is an app store removal — and a removal before launch is indistinguishable from never having launched at all.
- The submission date does not move. A neural ranker is not allowed on the critical path to shipping.
- The feed request has a latency budget that a Python model process cannot be trusted with unconditionally.
- No ML platform and no GPU serving budget. Everything runs on infrastructure I provision myself.
- One engineer owns the model, the API, the pipeline, the client, and the servers.
The ranking system had to be replaceable at runtime, not at deploy time. One person cannot ship a neural ranker and a launch on the same date — so a heuristic ranker carries the MVP while the two-tower model rolls in behind the same interface. Worst case is slightly worse ordering, never no feed.
Three pieces follow from that constraint: a serving path that can degrade inside a single request, a retrieval model cheap enough to train without traffic, and a moderation pipeline whose cost does not scale with upload volume. The whole surface it runs on is below.
Detail Hover, tap or focus any layer to read its note here.
The serving path
The Go service owns the request end to end. Ranking is an interface with two implementations: a heuristic ranker that runs in-process, and a neural ranker that calls the Python service over gRPC. The neural path gets an 80 ms deadline. Deadline exceeded, transport error, and malformed response all resolve the same way — fall back inside the same request, no retry, no queue. The user gets a feed.
Detail Hover, tap or focus any element to read its note here.
The retrieval model
Two towers, trained jointly. UserTower and VideoTower are
separate networks, but they read from the same category embedding table
— a user’s taste for a category and a video’s membership in it are literally the same
vectors. That is not a parameter-count optimisation; it removes an entire class of
alignment problem and behaves far better when the interaction data is sparse, which
pre-launch it always is.
Training uses in-batch InfoNCE: every other item in the batch acts as a negative, so a batch of N yields N−1 negatives per positive at no labelling cost. That is what makes the model trainable at the data volume a product actually has before it launches.
But InfoNCE alone gives you ranking — relative order — and nothing else. So there is a BCE auxiliary head on explicit interaction labels, which gives calibration: an absolute probability of engagement. You need both. Relative order tells you what to show first; a calibrated score tells you whether an item belongs in the feed at all.
The towers are the retrieval half. A LightGBM ranker sits behind them and does the ordering: retrieval narrows a corpus to a shortlist cheaply, and a gradient-boosted model — which handles heterogeneous tabular signals far better than an embedding dot product — decides what actually goes first. Both stages live inside the same 80 ms budget.
The heuristic that carries the cold start is not a placeholder either: it scores on quality, recency and affinity, then applies diversity re-ranking so a new user's first feed is varied rather than five clips from one creator.
Detail Hover, tap or focus any element to read its note here.
The moderation pipeline
Every upload fans out across three modalities before it can be published: sampled frames through NudeNet, audio through faster-whisper and then Detoxify on the transcript, and text — caption, title, description — through Detoxify directly. Those become a composite weighted score rather than three independent vetoes, because one channel at 0.6 is a genuinely different situation from three channels sitting at 0.5.
Then the part that matters: two thresholds, not one. A clear pass publishes, a clear fail rejects, and the band in between — roughly 5% of uploads — escalates to the Claude API for a judgement with context. A single threshold on a single model either over-blocks, which kills creator supply on a product that has none yet, or under-blocks, which gets you removed from a store. The band buys both, and it bounds cost by construction: the expensive call only ever sees the ambiguous tail.
Detail Hover, tap or focus any element to read its note here.
The feed is the part worth drawing, but it is not the part that took the most time. The same service also carries:
- A coin economy with real money in it. Paymob integration, atomic transactional writes, idempotency keys, a signed ledger, and KYC-gated creator withdrawals. A wallet that double-spends once is a wallet nobody trusts again.
- A user reporting system spanning the Go backend, the React Native client, and a Python LightGBM scoring service — automated triage, an admin review queue, and a reporter trust score that feeds back into how much weight a report gets.
- Dynamic video watermarking built on FFmpeg filtergraphs, orchestrated through BullMQ and Redis queue workers so encoding never blocks a request.
- Auth across three providers. Google OAuth 2.0 with PKCE, Apple Sign-In, and cross-provider account linking on a shared email — the case that quietly creates duplicate accounts if you do not handle it deliberately.
- Storage and streaming. Cloudflare R2 for zero-egress video, MinIO, PostgreSQL for metadata, Redis for hot caching, HLS for delivery.
- A React and TypeScript admin dashboard covering analytics, user management, video moderation, challenges and wallet operations — because a moderation pipeline with no review surface is only half a moderation pipeline.
- Store compliance. iOS EAS build and TestFlight upload, plus App Store and Google Play review covering Apple IAP, UGC moderation commitments, age gating and KYC withdrawal flows.
Tarneeb
A Pan-Arab multiplayer card game cloning the Jawaker experience — in one self-contained HTML file.
Shipped · one file · zero dependencies
Tarneeb is the trick-taking partnership game of the Gulf, the Levant and Egypt, and the interesting part is the bid: a commitment of 7 to 13 made under partial information, with scoring that punishes you for missing it. Cloning Jawaker means matching the scoring people already know — an audience that has played thousands of hands will find a rules discrepancy in minutes, and once they do, nothing else about the app gets the benefit of the doubt.
The harder problem is specific to partnership games: your partner is a bot. A weak opponent is a boring game. A weak partner is a broken game — the player loses hands they played correctly, blames the software, and is right to.
One self-contained HTML file. No server, no build step, no package manager, no external assets. That rules out audio files, sprite sheets and frameworks — and, most consequentially, it rules out learning anything from real players before shipping. There is no telemetry endpoint and no A/B infrastructure to lean on.
With no way to observe live play, correctness had to be established offline, before release. The deliverable was not just the game — it was a simulation harness credible enough to be the only evidence the AI works.
The game is a state machine — deal, bid, thirteen tricks, score the contract, settle the
economy — with all state in plain objects and no framework mediating anything. Rendering
is a function of state, persistence is localStorage, and every sound is
synthesised on demand through the Web Audio API, so the asset payload is exactly zero
bytes.
On top of the hand loop sit tournament flows and a layered monetisation model: AdMob, coin packs on region-appropriate payment rails, and tournament rake. The rails matter more than the model — a Gulf player and an Egyptian player do not reach for the same payment method, and a game that only takes one of them has quietly halved its own market.
The three difficulty levels differ in how much information the bot reasons over, not in how often it is told to play badly: hand strength for the bid, then suit and void tracking through play, then inference about what a partner’s plays imply about their hand. Randomised mistakes produce a bot that is weak and incoherent, which players read as broken rather than easy.
Detail Hover, tap or focus any element to read its note here.
40,000+ hands, bot against bot. Hard difficulty converges to a ≈54% win rate — and the interesting thing about that number is that 54 is the target, not a ceiling I failed to clear. In a partnership game dealt at random, the deal is most of the variance. A bot winning 90% of its hands is not strong, it is peeking. 54% against the tier below it means the difficulty ladder is real, the AI is genuinely applying skill, and the game is still a game — which is the actual product requirement.
Method
The two systems have almost nothing in common as products. They have a great deal in common as engineering, because both were built under the same condition: one person, no team to absorb a mistake, and no room for an architecture that needs supervision.
-
Put the seam where the risk is
The thing most likely to be late, wrong, or slow gets an interface around it before it is written. Ranking was the least certain part of Talentify, so ranking became the one component with two implementations and a runtime switch — which is why a launch date and a neural model stopped competing for the same calendar.
Evidence — Fig. 02 -
Give every remote call a deadline and a defined way to be wrong
A call across a process boundary has three outcomes, not two: right, wrong, and never. The 80 ms deadline exists so that “never” is bounded, and the in-process fallback exists so that “wrong” is survivable. Neither is a retry, because a retry spends the budget twice on a path that already failed once.
Evidence — Fig. 02 -
Spend the expensive resource only on the ambiguous tail
Cheap local models handle the clear cases; the costly judgement is reserved for the band between the thresholds. That is what keeps a per-upload LLM call from becoming a per-upload LLM bill, and it generalises well past moderation — most classification problems have a confident majority and an expensive minority.
Evidence — Fig. 04 · ≈5% of uploads -
When you cannot measure in production, build the instrument
Tarneeb had no players to learn from and Talentify had no traffic. In both cases the answer was to construct the measurement rather than wait for it: a headless harness for one, in-batch negatives standing in for a labelled corpus in the other. Shipping without evidence is a choice, and it is usually avoidable.
Evidence — Fig. 05 · 40,000+ hands -
Treat cost as a design input, not a post-mortem
Object storage picked on egress rates, ASR picked for CPU throughput because there is no GPU budget, frames sampled rather than scored exhaustively, servers provisioned rather than rented through a platform. None of these were optimisations made later; each one changed what got built.
Evidence — Fig. 01 · Fig. 04
Background
Six-plus years of production work. The systems above are the current end of a line that starts with client sites in 2019.
-
FutureGate
Head of Software Engineering · 2024 – present · remote
Lead engineering for a remote-first product studio delivering Talentify and Tarneeb. Direct architecture, backend, mobile and ML across both, and personally own the machine learning stack.
-
Freelance
Software engineer · 2019 – present · remote
Responsive websites and e-commerce stores for a range of clients — custom theming, performance optimisation, third-party integrations and payment gateway setup. Most of the “Also shipped” list above comes from this.
HTML · CSS · JavaScript · WordPress · Shopify
-
SBEGY Skateshop
Founder · 2019 – present · Cairo
Founded and operate Egypt’s first local skateboarding brand and retail shop, and launched the first fully Egyptian-manufactured complete skateboard. Product design, manufacturing coordination, brand strategy and community programming — the parts of shipping a product that have nothing to do with code.
-
Education
BSc · 2021
Bachelor of Business Information Systems, IAEMS — Cairo.
CS50 (Harvard) · Ethical Hacking Nanodegree (Udacity) · Cisco Networking Academy: Python, Data Science, Cybersecurity, Modern AI, Operating Systems · iOS Developer Professional (Apple, in progress) · UX Design Certificate (Google, in progress)
Languages
- ArabicNative.
- EnglishFluent — C1.
Hire me
Senior or staff. Fully remote. US or Europe.
FutureGate is a Cairo-based, remote-first studio. As Head of Software Engineering I lead technical development on Talentify and Tarneeb, and currently run engineering solo: architecture, implementation, deployment, and the calls about what does not get built — which, running two products with one engineer, is the decision made most often and the one that matters most.
The work I am best at is the part where a product’s hardest technical assumption has not been tested yet — recommenders and ranking, real-time backends, and the infrastructure underneath them. I am comfortable owning that, and I have done it without a team to fall back on.
- Phone
- +20 10 3242 2581
- Based
- Cairo, Egypt · UTC+3 — overlapping US and European hours
Colophon — Hand-written HTML, CSS and JavaScript. No framework, no build step, no
dependencies, no web fonts, no third-party requests. The five figures are inline SVG whose
line is drawn with stroke geometry on first view; there is no looping animation anywhere,
and all motion is disabled under prefers-reduced-motion.