Islam Soliman Get in touch

Software engineer · Cairo · Remote

I build every layer myself.

The product

Hekta

Pre-submission · v1.0.0

A money app for Egypt and the Gulf. You write what you spent in plain language, or photograph the receipt, and it fills in the form. Nothing saves until you confirm it. It counts gold by gram and karat, which is how gold is actually bought there and what no off-the-shelf library does.

Nine screens. Pick one, or follow the arrows on Home.

Postgres tables
33 RLS on every one
Edge Functions
14 every sensitive call
Migrations
83 hand-written, reversible
Tests
1700+ client and edge, green
  • Expo SDK 56
  • React Native
  • TypeScript strict
  • Supabase
  • PostgreSQL
  • Deno
  • Claude API

Three products in one app: daily tracking, net worth, and shared expenses. Speech and receipt capture both feed the same confirm step. Privacy and terms, live

Hekta home: total balance EGP 50,560.00, this month against a projected figure, budget health at 73% for Food and Drink and 67% overall, and an instalment for an iPhone 17 Pro due in four days.
Home — balance, budget health, the next instalment due

Work

Hekta is at the top of this page. Three more below, and most of that code is private because it holds client data and pricing.

Muhrah

A brand I own

A handmade bukhoor brand in Madinaty. I built the storefront, the design system, and a WhatsApp bot that answers customers and closes the order inside Shopify. The whole project carries one external dependency. Everything else is the Node standard library.

The Muhrah emblem, a gold filigree crest.
  • #06244A
  • #BFA46B
  • #F5F1E9
  • Shopify Liquid
  • Admin API
  • WhatsApp Cloud API
  • node:sqlite
  • Claude API
  • Railway

The storefront is built and deployed. It stays behind a password page until the catalogue is finished, so that second link opens a lock screen on purpose.

Horus Transfer

Built, not deployed

A tourist landing in Luxor has no idea what the ride into town should cost, so the price gets negotiated at the curb. Horus quotes it before you book. Confirmation goes to WhatsApp. There is no email field anywhere in the product.

  1. Front endNext.js App Router, server components
  2. DataPostgreSQL, a fare matrix from the operator's own prices
  3. AbuseCloudflare Turnstile on every booking
  4. DeliveryTelegram notifications to the operator
  5. ShipDocker image, one command
  • Next.js App Router
  • PostgreSQL
  • Turnstile
  • Docker

Search only ever offers a destination the operator has actually priced, so no estimated fare reaches the screen. The repo is private and the site is not deployed.

NOOR

Live

A landing page for an Egyptian finishing contractor. The building in the hero is drawn rather than photographed, a gold wireframe that assembles itself line by line. Four moments of motion in the whole page, counted and budgeted.

  • Static HTML
  • CSS
  • Caddy
  • Docker
  • Railway

Static files on Caddy with no backend behind them, deploying on every push.

Every layer

The claim at the top of the page, itemised.

  1. App Expo SDK 56 · React Native · TypeScript strict
  2. Web Next.js App Router · static HTML and CSS
  3. Edge 14 Edge Functions on Deno · every sensitive call
  4. Data 33 Postgres tables · 83 migrations · RLS on every one
  5. Infra Docker · Caddy · Railway · Cloudflare

Approach

The app, the web front end, the schema, the functions that run on the edge, and the container the whole thing ships in. Four products, no team.

I audit my own work before anyone else gets to

A pre-launch pass over Hekta turned up five problems the documentation already claimed were finished. Deleting an account never revoked the Apple token. Free quota counters never reset. All five are closed, and that pass is the reason the app is still pre-submission instead of on the store.

The whole stack is mine, so nothing waits on anyone

The app, the web front end, the schema, the migrations, the Edge Functions, the DNS, and the container it ships in. When the database needs a column, I add it in the same afternoon the screen needs it.

Secrets never reach a client bundle

Every sensitive call runs server side from an Edge Function. The anonymous key that ships in the app has never had access to anything a stranger could spend.

Stack

Everything here is running in something above.

Mobile
  • Expo SDK 56
  • React Native
  • TypeScript strict
  • Expo Router
  • Reanimated
  • EAS Build
  • Maestro
Web
  • Next.js App Router
  • React
  • Static HTML and CSS
Backend and data
  • Supabase
  • PostgreSQL
  • PLpgSQL
  • Row-Level Security
  • Edge Functions
  • Deno
  • node:sqlite
AI in the product
  • Claude API
  • Tool use
  • Speech to text
Infrastructure
  • Railway
  • Cloudflare
  • Docker
  • Caddy
  • Shopify
  • GitHub Actions
  • Sentry