Available for work

Systems designed,
deployed, and
measured in ms

Nine years building production web applications. Currently shipping AI features — conversational agents, RAG pipelines, and the interfaces that make model output feel trustworthy.

I am Ahmed — a full-stack engineer in Giza, Egypt, who leads with the frontend. I build the React, Next.js and Angular frontends people actually use, and I own the system behind them: the architecture and data model, the APIs and payment flows, and the containers and pipelines that ship it all.

  • System design

    Service boundaries, data models and integration contracts — payment gateways, GDS booking engines, micro-frontends — designed around the failure cases, not just the happy path.

    • Architecture
    • Payments
    • Caching strategy
    • Micro-frontends
  • DevOps & cloud

    I ship what I build. Dockerised stacks, CI/CD pipelines that deploy on merge, and production running on AWS, Azure, Vercel and bare hosting.

    • Docker
    • CI/CD
    • GitHub Actions
    • AWS
    • Nginx
  • Frontend

    Nine years deep in React, Next.js and Angular — fast, accessible, bilingual RTL/LTR interfaces with the Core Web Vitals to prove it.

    • React
    • Next.js
    • Angular
    • Core Web Vitals
9 yrs
Designing and shipping production systems Travel, B2G, EdTech, fintech
40+
Apps deployed through CI/CD pipelines AWS, Azure, Vercel, Docker
< 1.2s
LCP, down from 4s+ Safa Soft travel platform

Verified

Not my numbers.
Google's.

A live client landing page, audited on mobile. Perfect accessibility, best-practices and SEO, and zero layout shift — the CLS work above, measured.

  • 95

    Performance

  • 100

    Accessibility

  • 100

    Best Practices

  • 100

    SEO

First Contentful Paint
1.8 s
Largest Contentful Paint
2.6 s
Total Blocking Time
120 ms
Cumulative Layout Shift
0
Speed Index
1.8 s
PageSpeed Insights report for zadadevelopments.com/landing/lakeyard: Performance 95, Accessibility 100, Best Practices 100, SEO 100, and Cumulative Layout Shift 0.
PageSpeed Insights · Mobile · Sep 18, 2026

AI engineering · in production

AI features users
can actually trust.

Two LLM features I took from concept to production. Getting a model to answer is the easy part; the work is making the answer legible, recoverable when it fails, and honest about what the system is doing. Each panel below is an illustration with sample data. The real systems live inside client platforms, and I am happy to walk through them on a call.

  • LangChain
  • OpenAI SDK
  • Pinecone
  • RAG
  • Python
  • Node.js
  • React
  • TypeScript
  • Streaming UI

Under NDA Safa Soft · Supplier and client support

Conversational AI Agents

LLM agents that replace manual navigation with a chat interface

Role Senior Frontend Engineer — end-to-end feature ownership

Supplier assistant Illustration · sample data

Which of my bookings were cancelled last month? Send me the report.

14 bookings were cancelled in September, 9 of them within 48 hours of check-in. The report below lists each one with the guest, the dates and the refund status.

cancellations-september.xlsx 14 rows · ready to download

What the agent is doing

  1. Finding cancelled bookings search_bookings(status: "cancelled", month: "2026-09") 0.9 s
  2. Building the report export_report(format: "xlsx") 1.1 s

If the model fails. A timeout or a bad answer opens the normal report screen with the filters already applied, so the user is never left with nothing.

An illustration with sample data: a supplier asks the assistant for a report, the agent calls two tools, and the answer streams in with the file attached.

Suppliers and clients were spending significant time navigating a large enterprise platform to find information or pull a report. Most of what they needed existed — it was just buried behind several screens of navigation.

Users stopped searching the platform for information they could simply ask for. Routine questions are answered without a human in the loop, and reports arrive on request rather than on a schedule.

Agents that use the platform's own tools
A conversational interface where users ask a question in plain language and get an answer, or request a report and receive it on demand. Behind it, LangChain agents interpret the request, decide which tools to call, and compose the response.
Reliable rather than unpredictable
On the frontend I handled the parts that make an AI feature feel reliable rather than unpredictable: streaming responses so the user sees progress instead of a spinner, clear loading and error states, graceful degradation when the model fails or times out, and visible signals about what the agent is doing on the user's behalf.
The API contract, agreed first
I worked directly with backend engineers on the API contract for the feature — agreeing request shape, error semantics and response structure before implementation started, rather than discovering mismatches during integration.
  • React
  • TypeScript
  • LangChain
  • OpenAI SDK
  • Python
  • Node.js

Under NDA Safa Soft · Travel

RAG Recommendation Engine

Retrieval-augmented personalisation for an accommodation platform

Role Senior Frontend Engineer — retrieval design, prompt structure and UI

Stays in Old Town Illustration · sample data

  • 2 adults, 2 children
  • Under $150 a night
  • Near the old city
  • Pool
  1. Your context
  2. Embed
  3. Pinecone · top 20
  4. Prompt
  5. OpenAI
  6. Ranked, with reasons

Suggested for you

Riverside Family Suites $128/night

Why this

  • Within your budget
  • Family rooms for four
  • Like places you booked before

Old Town Garden Hotel $142/night

Why this

  • Pool on site
  • 12 minutes' walk to the old city

All 312 results Sorted by your filters

  • Harbour View Inn $96
  • Cedar Court Apartments $134
  • Grand Plaza Hotel $210
  • Palm Terrace Residence $118

Suggestions sit alongside the full result set, never in place of it.

An illustration with sample data: a stay search runs through retrieval and the model, and two suggestions with their reasons appear above the full list of results.

An accommodation booking platform returned large result sets that users had to filter manually. The data to make a good recommendation existed — budget signals, location preferences, past behaviour — but nothing connected it to the user's actual intent.

Users reached a booking decision faster, without scrolling through hundreds of unfiltered results. The retrieval layer stays separate from the presentation layer, so either can be tuned on its own.

Retrieval shaped around intent
A retrieval-augmented generation pipeline: structured travel data embedded into Pinecone, a retrieval strategy that pulls the most relevant candidates for a given user context, and prompt structure that turns those candidates into personalised suggestions through the OpenAI SDK.
Output users can read and disagree with
The interface work mattered as much as the pipeline. Model output needs to be legible — users should understand why something was recommended, and be able to disagree with it. I designed the result presentation so suggestions sit alongside the full result set rather than replacing it, keeping the user in control.
  • React
  • TypeScript
  • Pinecone
  • OpenAI SDK
  • Python
  • Node.js

Data-heavy dashboards

Heavy data,
light main thread.

Role-based analytics dashboards on ECharts and D3. Drawing the chart is the easy part; the real work is keeping hundreds of thousands of points, several roles and a live feed feeling instant. The panel below is a working demo of how I build them, not a screenshot.

Role Senior Frontend Engineer — architecture and performance

  • React
  • TypeScript
  • ECharts
  • D3.js
  • Canvas
  • Web Workers
  • LTTB downsampling
  • Virtualized lists
  • Role-based access

Operations analytics Static preview

Summaries only. No raw events and no customer data reach this role.

Revenue · 90d
$1.14M
+8.4%
Orders
18,240
+5.1%
Conversion
3.42%
+0.3 pt
Avg. order
$62.70
−1.2%

Revenue · last 90 days

Preview

ECharts loads only now: this page shipped 0 KB of chart code.

Revenue by region

  • GCC 42%
  • Egypt 27%
  • Europe 19%
  • North America 12%
Chart code
0 KB shipped with the page
Data
Not requested yet
Rendering
Server-rendered SVG preview
Cache
Empty

Demo data, generated in your browser. The techniques are the ones I use on production dashboards.

  • Load on demand

    Chart libraries, heavy widgets and per-role modules are split out and fetched on intent, and rendering below the first view is deferred, so a dashboard's first paint never pays for charts nobody has opened yet.

  • Roles shape the product

    Permissions decide the layout, the queries and the bundle. A view a role cannot see is never fetched, and the server enforces what the client only mirrors.

  • Volume under control

    Aggregate on the server, downsample with LTTB and virtualize long tables, so 200,000 points or 50,000 rows stay responsive to every zoom and scroll. Derived data is memoised, so changing a filter does not recompute everything.

  • Smooth under load

    Heavy work runs in Web Workers and moves back as transferable buffers. Updates are batched to animation frames, and live feeds pause off-screen or in a background tab.

  • Caching in layers

    HTTP caching, stale-while-revalidate query caches and memoised selectors. Switching back to a view is instant, and refreshing it never flashes a spinner.

  • Right tool per chart

    ECharts for dense, interactive time series, D3 for bespoke visuals, and plain HTML when a bar list is all the data needs. Canvas takes over once SVG node counts start to hurt.

Automation · n8n

Workflows that run
while you sleep.

I design, build and self-host n8n automations that connect your website, WhatsApp, email, CRM and AI agents. Leads get answered in seconds, orders confirm themselves, and your team only touches what needs a human.

  • n8n
  • AI agents
  • WhatsApp
  • Email
  • CRM
  • Webhooks
  • Self-hosted on Docker

lead-to-deal

Runs on every new lead Active

  1. New lead Website form or WhatsApp message
  2. AI agent Replies and qualifies from your own data
  3. Qualified? Routes on budget, timing and intent
  4. Create deal Yes: the lead lands in your CRM
  5. Alert sales Yes: WhatsApp ping with the summary
  6. Nurture Not yet: a follow-up email sequence
  • Order placed WhatsApp confirmation

    Customers get their order confirmation and updates on WhatsApp the moment they pay. Fewer calls, fewer cancellations.

  • Cart abandoned Email + WhatsApp alert

    The team hears about every abandoned cart and high-value order instantly, while the sale can still be saved.

  • Question received AI agent reply

    An agent answers on your website around the clock and hands over only the conversations that need a person.

  • Every morning KPI digest

    Sales, sign-ups and failed payments collected from every system and sent as one short report.

About

Nine years of
owning the whole system

I have spent nine years building production systems across SaaS and enterprise, travel, B2G and government, EdTech, fintech and e-commerce. I started on the frontend and never stopped at it: today I design the whole shape of a product — how services split, where data lives, what gets cached and what must be checked live, and what happens when a third party times out halfway through.

Payments are where that matters most. I have built a payment gateway for Saudi merchants on Moyasar — cards, mada, Apple Pay and Google Pay — and I treat money flows the way they deserve: server-side verification, webhooks reconciled against redirects, duplicate callbacks made harmless, and no state where a customer is charged but the system does not know it.

I also run what I build. Dockerised stacks, CI/CD pipelines on GitHub Actions and Azure DevOps, deployments to AWS, Azure, Vercel and plain hosting, and the nginx, PHP-FPM and Node.js services behind them. On top sits Node.js, PHP, PostgreSQL and MongoDB, and lately AI in production — RAG pipelines on Pinecone and OpenAI, and LangChain agents answering real user questions.

The frontend is still where I go deepest: React, Next.js and Angular v14 through v22, bilingual RTL/LTR built in from the first component, and performance I profile before I optimise — with the before-and-after numbers to show for it.

The part I enjoy most is raising the floor for a team: reusable component libraries, design systems, code-review standards, and testing that actually catches things before release.

Most of my work lives where complexity meets the interface — booking platforms handling hundreds of results per query, role-based dashboards with heavy data, and enterprise portals where security and accessibility are not optional.

More recently that has extended into AI. I have taken LLM capabilities from concept to production: conversational agents that resolve user queries, a retrieval-augmented recommendation engine, and the UI patterns that make model output legible and trustworthy rather than magical and opaque. I use Claude Code and AI coding assistants as part of how I build every day — not as an experiment.

I also work across the stack. Python, Django, Node.js and PostgreSQL are part of my toolkit, which means I can shape an API contract with backend engineers instead of just consuming whatever ships.

How I work

Four habits behind
everything above

  • AI as a daily practice

    I start most work by describing intent to Claude Code — exploring approaches before committing to one — then use it to scaffold, write test cases and refactor. Where it helps most is the mechanical work. Where I do not delegate is anything involving a trade-off: architecture, security-sensitive code, or anything a user's trust depends on.

  • Measure before optimising

    Performance work starts with the Performance panel and the bundle analyser, not with a checklist of optimisations. On one platform that meant finding the render-blocking resources behind a four-second Largest Contentful Paint and bringing it under 1.2 seconds.

  • The frontend is never the security boundary

    Client-side authorization is UX. Tokens belong in HttpOnly cookies, not browser storage. The UI reflects permissions; the backend enforces them.

  • Craft is the last ten percent

    Getting something working is the easy part. The states a design file does not show — loading, empty, error, focus — are what separate a product that works from one that feels finished.

Services

Solutions that
move your numbers

Frontend architecture

React, Next.js and Angular frontends built to stay fast as they grow: component systems, state architecture, micro-frontends and bilingual RTL/LTR interfaces.

  • React
  • Next.js
  • Angular
  • Design systems
AI agents & n8n automation

n8n workflows and AI agents that connect your website, WhatsApp, email and CRM. Customers get answers in seconds, orders confirm themselves and hot leads reach your sales team automatically.

  • n8n
  • AI agents
  • WhatsApp
  • Email
  • CRM
SaaS platforms & system design

Multi-tenant SaaS products, CRMs and internal platforms, designed around the failure cases: service boundaries, data models, caching and integration contracts.

  • Architecture
  • Multi-tenant SaaS
  • APIs
  • Caching
Data-heavy dashboards

Role-based analytics dashboards on ECharts and D3 that stay smooth with hundreds of thousands of points, live feeds and several user roles.

  • ECharts
  • D3.js
  • Web Workers
  • Role-based access
Payment gateway integration

Card, mada, Apple Pay and Google Pay flows on Moyasar, with server-side verification, reconciled webhooks and duplicate callbacks made harmless.

  • Moyasar
  • Apple Pay
  • Google Pay
  • Webhooks
DevOps, cloud & CI/CD

Dockerised stacks and pipelines that deploy on merge, running on AWS, Azure, Vercel or your own servers, with n8n self-hosted alongside.

  • Docker
  • GitHub Actions
  • AWS
  • Azure
Performance & Core Web Vitals

Audits and rescues that take real pages from red to green: LCP from 4s+ to under 1.2s and zero layout shift on live traffic.

  • LCP
  • CLS
  • INP
  • Bundle analysis

Skills

The toolkit,
grouped honestly

Only what I use in production today. Each group links to the part of this page that shows it, so nothing here has to be taken on trust.

  • Frontend

    • React.js
    • Next.js (SSR/SSG)
    • Angular v14–v22
    • TypeScript
    • Nuxt.js
    • Redux Toolkit
    • RxJS
    Seen in Selected work
  • AI & LLM engineering

    • OpenAI SDK
    • Anthropic Claude
    • LangChain
    • RAG pipelines
    • Pinecone
    • Streaming UI
    • Claude Code
    Seen in AI engineering
  • Architecture & design systems

    • Design systems
    • Storybook
    • Micro-frontends
    • Nx monorepo
    • API design
    • Caching strategy
    Seen in Component library case
  • Backend & data

    • Node.js
    • Express
    • Python
    • Django
    • PostgreSQL
    • MongoDB
    • GraphQL
    Seen in Experience
  • Dashboards & data viz

    • ECharts
    • D3.js
    • Web Workers
    • Virtualized tables
    • Role-based dashboards
    Seen in Dashboard demo
  • Performance & accessibility

    • Core Web Vitals
    • Code splitting
    • Bundle analysis
    • WCAG 2.1 AA
    • Keyboard navigation
    • RTL/LTR bilingual
    Seen in PageSpeed proof
  • Security & identity

    • Single sign-on
    • Keycloak
    • Microsoft Entra ID
    • HttpOnly cookie sessions
    • Role-based access control
    Seen in SSO case
  • Integrations & payments

    • Sabre GDS
    • HotelBeds
    • Moyasar
    • Apple Pay
    • Shopify
    • n8n
    Seen in Sabre & OSJ Pay
  • Testing & delivery

    • Jest
    • Playwright
    • Cypress
    • Docker
    • GitHub Actions
    • AWS
    • Azure
    • Vercel
    Seen in Experience

Selected work

Shipped to production,
most of it behind a login

Nearly all of this lives inside client platforms, government portals and booking engines — systems you need credentials to reach. So instead of a dead link or a screenshot I am not allowed to publish, each one is written up as problem, approach and outcome. I am happy to walk through any of it live, including the parts I cannot show here.

  • Under NDA Client-confidential. Written up in full below — and I can demo it on a call.
  • Private system Live in production, but behind a login. The front door is public; the rest I can walk you through.
  • Public Open to anyone. The link goes straight to the live thing.
  • Own product My own product, running on realistic sample data. I can demo every role in it live.

Case studies

Role Senior Frontend Engineer — architecture, implementation and documentation

A Ministry of Tourism platform needed a full set of UI primitives — inputs, selects, multi-selects, calendar, autocomplete, drawers, dialogs, toasts. The obvious move was to pull in a third-party component library.

A smaller bundle, no third-party supply-chain risk, and one consistent, WCAG-conformant UI across the platform that other teams could build on.

Why not a component library
For a government platform, two things ruled that out. Bundle size: most component libraries ship far more than you use, and tree-shaking rarely recovers it fully. And supply-chain exposure: every third-party dependency is a trust decision, and in a public-sector context that risk is harder to justify.
Every component, every state
So I built the whole set with no runtime dependencies, with design tokens driving colour, spacing and typography so theming does not require code changes. Every component carries its complete set of states — hover, focus, active, disabled, loading, error, empty — because a design file usually only shows the default one. Bilingual RTL/LTR was designed in from the first component rather than added as a later pass.
Accessible from the first component
Accessibility was built in rather than retrofitted: semantic markup, full keyboard navigation, focus management in dialogs and drawers, and WCAG-compliant contrast. Everything is documented as a reusable design system, so other developers can use it without reading the source.

This one belongs to the client, so there is nothing public to link. Ask me for a walkthrough

Role Senior Frontend Engineer — auth architecture and secure session handling

Several separate portals each had their own login. Users were authenticating repeatedly, and session handling was inconsistent across applications.

One login across the platform, with a security posture that holds up to scrutiny.

One login, the whole token lifecycle
Single sign-on across all portals using Keycloak, and Microsoft Entra ID integration for enterprise identity. That covered the full token lifecycle: silent refresh so expiry is invisible to the user, consistent session handling across applications, and clean logout propagation.
The frontend is never the security boundary
The security model follows one principle — the frontend is never the security boundary. Tokens live in HttpOnly, Secure, SameSite cookies rather than browser storage, which closes the XSS token-theft path entirely. That introduces CSRF as a trade-off, so state-changing requests carry CSRF protection. Client-side authorization is treated as UX only: the UI reflects permissions, the backend enforces them.

This one belongs to the client, so there is nothing public to link. Ask me for a walkthrough

Role Senior Frontend Engineer

Platforms serving both Arabic and English users, where right-to-left is usually bolted on at the end and breaks under real content.

An Arabic experience that feels native rather than translated.

Direction handled in the architecture
Bidirectional layout handled at the architecture level rather than patched per component — CSS logical properties instead of directional ones, so layout flips correctly without duplicated stylesheets. Arabic typography treated properly, not as a font substitution.
Content changes without code changes
A translation mapping layer so content changes do not require code changes, and direction switching that works without a page reload.

This one belongs to the client, so there is nothing public to link. Ask me for a walkthrough

Accommodation search needs to feel instant while browsing, but availability and pricing change — and showing a stale room at checkout is worse than being slightly slower.

Fast browsing without booking against stale inventory.

Cached aggressively for search and browsing, then verified live against HotelBeds at the point of booking — drawing the line deliberately rather than picking one strategy for the whole flow.

This one belongs to the client, so there is nothing public to link. Ask me for a walkthrough

Two separate codebases in two frameworks meant coupled releases — neither team could deploy without the other.

Teams deploy independently from a single repository.

Consolidated both into an Nx micro-frontend monorepo and decoupled their dependencies so each surface owns its own build and release.

This one belongs to the client, so there is nothing public to link. Ask me for a walkthrough

Property listings and product grids are almost entirely media. Images arriving without reserved space, late web fonts, and banners injected above the fold all push content down after the visitor has already started reading — and on a listing page that means tapping the wrong property or the wrong product.

Layout shift designed out rather than patched after the fact — the page you start reading is the page you finish reading, and the main thread stays free for interaction.

Every image, embed and media slot declares its aspect ratio up front, so the box exists before the bytes arrive. Nothing animates a property that triggers layout: transitions run on transform and opacity only, which keeps the work on the compositor thread instead of the main thread. Reads and writes are batched so no script forces a synchronous reflow mid-frame, and font fallbacks are metric-matched so the swap does not reflow text.

Largest Contentful Paint sat above 4 seconds — squarely in the "poor" band, on a platform whose users arrive from search.

LCP under 1.2 seconds — from the poor band to comfortably inside "good".

Profiled first, then reworked the critical rendering path, removed render-blocking work, moved to OnPush change detection backed by immutable state, and fixed list tracking so re-renders stopped doing avoidable work.

This one belongs to the client, so there is nothing public to link. Ask me for a walkthrough

School payments · Saudi Arabia

OSJ Pay

Private system
  • Moyasar
  • Apple Pay
  • Google Pay
  • mada
  • 3-D Secure
  • Webhooks
  • Arabic RTL

A payment gateway for the Saudi market, integrated with Moyasar. School owners sign up as merchants, and guardians pay their children's tuition fees online with whatever they carry: Visa, Mastercard, mada, American Express, Apple Pay or Google Pay. It is the kind of system where "it works" is not the bar. Every path a payment can take, including the ones where the network drops halfway, has to end with the money and the records agreeing.

6
Ways to pay on one checkout: Visa, Mastercard, mada, Amex, Apple Pay, Google Pay
Live
In production, taking real fees from real guardians
AR / EN
Arabic-first and right-to-left, with an English switch

Screens

  1. The public landing page. Arabic-first, with the accepted networks named up front. Everything past the login button is private.

What I built

  1. Moyasar, integrated end to end

    Card payments with 3-D Secure, mada for the local debit network, and wallet payments, all through Moyasar. Each payment carries the invoice it settles in its metadata, so any charge can be traced back to one school, one guardian and one fee without guesswork.

  2. Apple Pay and Google Pay, done properly

    Domain verification, merchant validation and wallet buttons that only appear on devices that can actually use them. On a phone, a guardian settles a term's fees with Face ID in a couple of seconds, with no card number to type.

  3. The redirect is never the source of truth

    A customer returning from the payment page proves nothing. The status is fetched from Moyasar on the server with the secret key, and the amount and currency are checked against the invoice before anything is marked paid. A tampered callback URL cannot mark a fee as settled.

  4. Webhooks and redirects that race each other

    The webhook and the customer's redirect can arrive in either order, twice, or not at all. Status changes are idempotent and keyed on the payment ID, so whichever arrives first does the work and the rest are harmless. If neither arrives, reconciliation still catches the payment.

  5. The edge cases that cost real money

    Double-clicks and resubmitted forms that must not charge twice. 3-D Secure challenges that are abandoned halfway. A connection lost after the card was charged but before the page came back. Amounts handled in halalas, never floats. Partial refunds, and declines explained in plain Arabic rather than a raw gateway code.

  6. Many schools, many families, kept separate

    Each school is its own merchant with its own fees, invoices and payment history, and a guardian with several children pays each child's fees from one account. Tenancy is enforced where the data is read, not just hidden in the interface.

Visit the landing page (opens in a new tab) The landing page is public. The merchant and guardian system behind the login is private.

Global fashion brand · E-commerce

Happy Socks

Public
  • Nuxt
  • Vue
  • SSR
  • i18n
  • Technical SEO
  • Design system

The public storefront for an international fashion brand, built in Nuxt. It sells across fifteen storefronts in six languages from one codebase, runs campaign-specific versions of its homepage and collection pages, and has to hold a design-led brand to the pixel — all without letting a large catalogue, heavy imagery and a dense set of commercial rules slow it down.

34
Market and language variants served from one codebase
6
Languages, each with its own SEO signals
15
Storefronts, including separate .au and .jp domains

Screens

  1. A campaign version of the homepage. The hero, copy and product rail all swap with the season, so this surface exists in several concurrent forms.

What I built

  1. Performance under a real catalogue

    The challenge was never a lightweight page — it was thousands of product images, variant logic, promotions, stock rules and market-specific pricing, all on the critical path of a shopper who will leave if it stalls. The work was keeping the rendering path short and the payload disciplined while every one of those conditions stayed in play.

  2. Thirty-four locales, one codebase

    Six languages across fifteen storefronts, routed by market rather than duplicated per market. Currency, pricing, availability and copy resolve per locale, and the separate Australian and Japanese domains hang off the same build rather than being forks of it.

  3. Pixel-exact to a design-led brand

    Happy Socks is a brand people buy for how it looks, so the tolerance between the design file and the shipped page was zero. Type, spacing, colour and motion were built to match rather than approximated, and that fidelity had to survive every locale, where the same layout carries text of very different lengths.

  4. A homepage that exists in several versions

    Campaigns like the one in the screenshot replace the hero, the messaging and the featured rails. The page is composed from swappable sections rather than rebuilt per campaign, so marketing can run several versions without a code change for each one.

  5. Collection pages that stay fast under filters

    Category and collection surfaces carry the heaviest load — large grids, filtering, variant imagery — and they are also the pages search sends people to. They were built to render usefully on the server and stay responsive as a shopper narrows the set.

  6. Full SEO, multiplied by every market

    Every locale variant declares hreflang for the others plus an x-default, with canonicals and metadata resolved per market — a multilingual store gets this wrong far more often than it gets it right. Structured data, crawlable server-rendered markup and clean URL routing per storefront complete the picture.

Visit happysocks.com (opens in a new tab) Live and public — go and click around.

Zada Developments · Real estate

Lake Yard

Public
  • Arabic RTL
  • Core Web Vitals
  • Conversion UX
  • Landing page

A single-page launch site for a mixed-use commercial development in West Cairo — administrative, medical and retail units. Arabic and right-to-left as the primary direction rather than a mirrored afterthought, with the whole page shaped around one job: turn a visitor into a qualified enquiry.

Sold out
The development sold through in full
95 / 100
PageSpeed performance, mobile
CLS 0
No layout shift at all

Screens

  1. The hero puts the enquiry form beside the pitch rather than at the foot of the page — the primary action is available before any scrolling.
  2. Unit types with live areas, prices and payment terms, each carrying its own call to action so intent is captured where it forms.
  3. Sold units stay visible with the price struck through. Honest about what is gone, and the scarcity is real rather than manufactured.
  4. The investment case as six scannable reasons, for the visitor who reads nothing in full.
  5. Amenities in a plain grid — the section a buyer checks last and expects to skim.

What I built

  1. Right-to-left first, not mirrored later

    Arabic is the primary direction here, so the layout was built in logical properties from the start. Numerals, prices, the currency suffix and the Latin brand names all sit correctly inside RTL text, which is the part that usually breaks when a left-to-right design is flipped at the end.

  2. The shortest possible path to an enquiry

    The form sits in the hero beside the pitch, WhatsApp is offered next to it for anyone who would rather not fill anything in, and every unit card carries its own button. Nobody has to hunt for how to get in touch, and nobody has to scroll back up to do it.

  3. A form that asks for almost nothing

    Name, mobile, and an optional interest — three fields, one of them optional. The anti-spam check only appears once someone starts typing, so a genuine visitor never waits on a challenge before they have shown intent.

  4. Sold units left on the page

    Rather than removing what has gone, sold units stay listed with the price struck through and a sold badge. It answers "is this moving?" without a single line of persuasion, and it makes the remaining availability credible.

  5. Fast enough that speed never cost a lead

    Reserved space for every image, transitions on transform and opacity only so animation stays off the main thread, and a critical path kept short. The result is in the Proof section above: 95 performance, 100 accessibility, 100 best practices, 100 SEO, and a Cumulative Layout Shift of exactly zero.

  6. The outcome

    Enquiry volume rose and the development sold out. A landing page cannot sell a building on its own, but it can stop losing the people who were already interested — which is what this one was built to do.

Visit the live page (opens in a new tab) Live and public — go and click around.

Tour operator · Public site

Central Holidays

Public
  • Next.js
  • TypeScript
  • SSR/SSG
  • Maps
  • Design system

A travel catalogue site for a tour operator, built in Next.js and TypeScript. Content nests several levels deep — regions hold destinations, destinations hold packages — and each package carries its own gallery, pricing, day-by-day itinerary, hotels and cruise options.

Screens

  1. The homepage: featured experiences, top destinations and the catalogue entry points across the main navigation.

What I built

  1. A catalogue three levels deep

    Regions contain destinations, destinations contain packages. Every level is its own browsable surface with its own routing and metadata, so a visitor can enter at any depth from search and still land somewhere coherent.

  2. Packages with everything attached

    Each package carries an image gallery, pricing, a day-by-day itinerary, the hotels involved and any cruise legs — assembled from separate sources into one page that still has to load quickly and read clearly.

  3. An animated map of the route

    The path a package travels is drawn out on a map rather than listed, so the shape of the trip is obvious before reading a single itinerary line.

  4. Find an agent, on the map

    A geographic agent finder, so a visitor can go from browsing a package to a named human near them without dropping into a contact form first.

  5. The surrounding commerce surfaces

    Experiences and tours per destination, cruises, special offers, downloadable brochures and a request-a-quote flow — each one a distinct template sharing the same component layer.

  6. SEO at 100%, on-page and off-page

    Both sides audited and tracked in SEMrush. On-page that meant per-template metadata and structured data, canonical handling for content reachable through more than one route, and internal linking that keeps a catalogue this deep fully crawlable — alongside the off-page work on the same scorecard.

  7. Next.js used for what it is good at

    Rendering chosen per route rather than globally, typed data contracts end to end, and images, fonts and metadata handled by the framework so the catalogue stays fast as it grows.

Visit the live site (opens in a new tab) Live and public — go and click around.

Sherzal Technologies · Travel

Sabre GDS flight booking engine

Under NDA
  • Angular
  • Signals
  • RxJS
  • Sabre GDS
  • Bargain Finder Max
  • iframe messaging

A flight search and booking engine built on Sabre GDS for a tourism company. It runs as one Angular application embedded by iframe into several separate portals, each sharing the same booking surface with full two-way data communication back to its host.

Screens

  1. The search panel in its resting state — trip type, route, dates and traveller mix in a single row.
  2. The date-range calendar. Two months, one continuous from/to selection, written from scratch.
  3. Traveller and cabin selection: adults, children, infants with and without a seat, four cabin classes.
  4. Results with the filter rail — stops, departure windows, airlines and cabin, all applied client-side.
  5. An expanded itinerary: segments, on-board amenities, baggage allowance, fare breakdown and fare rules.

What I built

  1. No UI packages — the components are mine

    Nothing in this interface came from a component library. The date-range calendar, the airport picker, the traveller stepper, the filter rail and the itinerary cards were all written for this product, which kept the bundle small and left no third-party upgrade path to be blocked by.

  2. A from/to calendar built from scratch

    Two months in view, one continuous range selection across them, keyboard operable, and aware of the constraints a booking flow imposes — a return that cannot precede a departure, and disabled days that still read correctly to assistive tech.

  3. An airport picker that actually searches

    Matching on city, country, airport name and IATA code at once, so "new york", "JFK" and "Kennedy" all reach the same result. Debounced against the keystroke rate rather than firing a request per character.

  4. One shared portal, not a copy per system

    Rather than reimplementing Sabre search inside every portal, I built it once and embedded it. Each host system communicates with the same surface in both directions, so a fix or a fare-rule change ships to all of them at once instead of being merged four times.

  5. Hundreds of itineraries, filtered without re-querying

    A single flight search returns hundreds of itineraries — multiple segments, fare rules, airline combinations — and users expect to filter and sort all of it instantly. The full result set is fetched once into a normalised store, and the visible list is derived through memoised selectors as a pure transformation of raw results, active filters and sort order. Nothing mutates the source data, so components stay in sync and filtering feels instant without re-querying an expensive API.

  6. Tuned for the volume Sabre returns

    Debounced inputs and throttled scroll handlers to keep the main thread free, signals for fine-grained reactivity instead of broad change detection, lazy-loaded routes and panels, and infinite scroll so a result set of hundreds of itineraries renders progressively rather than all at once.

The system itself is client-owned, so these screens are as far as it can be shown. Ask me for a walkthrough

Own product · Healthcare

KeepUp clinic management

Own product
  • Angular 22
  • Nx monorepo
  • Signals
  • Tailwind CSS
  • Angular Material
  • Arabic RTL
  • GitHub Actions

My own system for clinics with several branches. Patients book online and hold the slot with a small deposit. The front desk and back office run the day from their own portal, and doctors and the owner work from a third one, with a chart for each specialty and the finances of every branch. It is three Angular applications in one Nx monorepo, in Arabic and English, light and dark. It runs entirely in the browser on a seeded clinic — three branches, eleven doctors and thousands of appointments around today's date — so a clinic can try every role before anything is connected to its own backend.

3 portals
Patients, front desk, and doctors with the owner, all on one shared domain library
5 charts
Dental, aesthetics, nutrition, pediatrics and lab, each loaded only when it is opened
AR / EN
Arabic and English, light and dark, with right-to-left built in rather than mirrored

Screens

  1. The owner's overview across all branches: revenue, expenses, no-show rate, the profit split and the 8 AM WhatsApp brief.
  2. The front desk's board for the day: who is arriving, waiting, in session or done, with a live timer on every card.
  3. The patient picks a day and a time. Each ring shows how full the day is, and the visit summary keeps the deposit in view.
  4. The dental chart: a 3D odontogram where the doctor marks conditions on each surface and keeps notes per tooth.
  5. The deposit check in Arabic and dark mode: each transfer receipt beside its booking, approved or rejected in one tap.

What I built

  1. Three apps, one domain library

    Booking, manager and doctor are separate Angular apps, so each portal ships only what its users need. Slots, deposits, cancellations, payroll, profit and loss, and role-based permissions are written once in a shared domain library, next to a UI library and a theme library. A rule changed there changes in every portal. A GitHub Actions workflow builds all three and deploys them under one domain on every push.

  2. A booking flow made for the phone

    Branch, specialty, doctor, then a day and a time. A ring on each day shows how much of it is still open, and the visit summary stays beside the slots. Reserving holds the slot and asks for a small deposit by InstaPay or Vodafone Cash, with the receipt uploaded on the spot. A hold that is never paid expires on its own, so nobody blocks a slot by changing their mind.

  3. The front desk's day on one board

    Arriving, checked in, in session, done and no-show, with each patient a card carrying a live timer. Deposit receipts sit beside their bookings and are approved or rejected in one tap, with keyboard shortcuts for a busy morning. The day's numbers, from waiting time to expected revenue, move with the cards.

  4. Cancellation as one policy

    What a patient may change or cancel online, and what happens to the deposit, comes from a single policy module that the booking site, the front desk and the doctor's schedule all read. When a slot frees up, the desk offers it to that day's waiting list on WhatsApp. Notifying never reserves anything, so the first person to book gets it.

  5. A chart per specialty, loaded only when opened

    A 3D odontogram for dentists, an injection map with signed consent for aesthetics, meal plans and weight against target for nutrition, growth curves and vaccines for pediatrics, and a results desk for the lab. Each specialty is a deferred view with its own translations, so a dentist's browser never downloads the lab. Prescriptions warn about allergies and carry a QR code that a pharmacist can verify on a public page.

  6. Every branch's numbers, every morning

    The owner sees revenue, expenses, no-show rate and profit across all branches or for one, with payroll and petty cash behind them. A short summary goes out on WhatsApp at 8 AM, before the first patient arrives.

  7. Bilingual and themed from the first screen

    Arabic and English, with right-to-left handled in the layout rather than patched per page, and light and dark themes driven by design tokens. The charts are plain SVG components rather than a charting library, so they follow the theme tokens with nothing extra to load.

It runs in the browser on sample data, so I can take you through every role live: patient, front desk, doctor and owner. Ask me for a walkthrough

And beyond this page

These are the ones
that fit on a page

Nine years produces more than six tiles. Behind these sit more production sites, more third-party integrations and more performance work than there is room to show — most of it inside client systems. If what you are building is close to any of it, ask, and I will walk you through the nearest match.

  • 20+ production applications and customer portals
  • 40+ sites and dashboards deployed through CI/CD to AWS, Vercel and Azure
  • Dockerised stacks with automated build-and-release pipelines
  • Payment gateways — Moyasar cards, mada, Apple Pay and Google Pay
  • Booking integrations — Sabre GDS, HotelBeds, Amadeus
  • REST and SOAP services, API contracts and data design
  • Headless commerce on Shopify
  • RAG pipelines and LangChain agents in production
  • Bilingual RTL/LTR builds to WCAG standards
  • Core Web Vitals rescues on live traffic
Tell me what you are building

Curriculum vitae

The same nine years on one page — roles, dates, stack and the numbers above, in the format most hiring processes still ask for.

Download my CV (opens in a new tab)

Experience

Where the
nine years went

  1. Senior Frontend Engineer & UX Consultant

    Current role: Safa Soft

    Cairo, Egypt · Remote

    Sep 2024 — Present

    • Own product surfaces end to end in React, Next.js, Angular and TypeScript for B2G, travel and EdTech platforms, applying SOLID and component-based architecture.
    • Built a dependency-free UI component library for a Ministry of Tourism platform — chosen over third-party packages for bundle size and supply-chain security, and documented as a reusable design system.
    • Shipped production AI: a RAG recommendation engine on Pinecone and the OpenAI SDK, and LangChain agents answering supplier and client queries and generating on-demand reports.
    • Cut Largest Contentful Paint from 4s+ to under 1.2s through profiling, OnPush change detection with immutable state, list tracking and critical-rendering-path rework.
    • Consolidated separate Angular and React codebases into a micro-frontend monorepo so teams could deploy independently.
    • Delivered bilingual RTL/LTR interfaces at the architecture level, meeting WCAG and W3C standards.
    • Integrated Amadeus travel APIs and ran UX audits translating Figma designs into responsive, accessible production UI.
  2. Senior Frontend Developer / Team Lead

    Sherzal Technologies

    San Francisco, USA · Remote

    Mar 2021 — Sep 2024

    • Led frontend development of 20+ production applications, customer portals and high-traffic booking platforms in React, Next.js, Angular SSR, Redux and GraphQL.
    • Architected flight and accommodation booking engines on Sabre GDS (Bargain Finder Max) and HotelBeds for US travel brands including Central Holidays and Aventura World, keeping hundreds of itineraries per search instant through a normalised store and memoised selectors.
    • Integrated HotelBeds for accommodation search, availability and checkout — caching for browsing while verifying live at the point of booking.
    • Integrated payment gateways and consumed Node.js and REST services backed by PostgreSQL and MongoDB, collaborating on API contracts and data shape.
    • Deployed and maintained these applications on AWS, with automated build and release pipelines feeding each environment.
    • Defined 12 reusable UI patterns and a shared design system, cutting feature-delivery time and enforcing consistency.
    • Established unit, integration and visual-regression testing wired into CI/CD.
    • Mentored 8 developers, set code-review standards and drove architecture decisions across cross-functional teams.
  3. Full-Stack JavaScript Engineer

    E3melbusiness Academy

    Maadi, Cairo

    Jan 2020 — Jan 2021

    • Built full-stack features end to end — React and Next.js front ends backed by Node.js and Express REST services.
    • Modelled and queried data with Prisma ORM and SQL across relational and MongoDB stores, including schema design, migrations and query optimization.
    • Shipped a paid sales and marketing product from 0 to 1, improving lead-to-opportunity conversion and user retention.
    • Converted high-fidelity designs into pixel-accurate responsive pages with semantic HTML5, on-page SEO, lazy loading and image optimization.
  4. Frontend Developer

    Proint Solutions

    Riyadh, Saudi Arabia · Remote

    Mar 2017 — Jan 2020

    • Delivered 40+ web applications and dashboards in React, Angular and Node.js, deployed to AWS, Vercel and Azure with automated build pipelines.
    • Improved REST and SOAP integration performance through request optimization, batching and response caching.
    • Built SEO-compliant sites and dashboards focused on site speed and conversion, with cross-browser compatibility and accessibility across diverse client projects.
    • Worked independently with direct client contact, owning projects from requirements through delivery.

Impact

The numbers
I can defend

  • 4s+ → <1.2s

    LCP, through critical-rendering-path engineering

  • CLS 0

    Zero layout shift, verified by PageSpeed Insights

  • 12

    Reusable UI patterns and a shared design system

  • 20+

    Production applications led at Sherzal

  • 40+

    Web applications and dashboards delivered early-career

  • 10+

    Developers mentored, with code-review standards set

  • 10+

    Production AI features shipped — RAG pipelines and agents

  • 100s

    Itineraries per query kept instant on Sabre GDS

  • 8+

    Cloud and hosting platforms deployed to

Education

Credentials,
briefly

  • B.Sc., Communication & Information Engineering

    Mansoura University

    2012 — 2017

  • Google AI Professional Certificate

    Coursera

    2025

  • React Development — Advanced Nanodegree

    Udacity

    2022

  • Open-Source Development Diploma

    Information Technology Institute (ITI), Cairo

    2019

Contact

Got something
worth building?

Tell me what you are working on. Name and phone are all I need to get back to you — everything else is optional.

Based in

Giza, Egypt

Only if it differs from your phone number.

Name and phone are required. Everything else helps but is optional.

© 2026 Ahmed Ali Mohamed

Giza, Egypt — available for remote work