Two things I do. Pick the one you came for — the page rewrites itself, right down to the demo below.

I connect the systems your business already runs on — and make them behave like one product.

I build fast websites that rank — and keep ranking after launch.

Most businesses don't have a code problem. They have six tools, three spreadsheets, and a person copying data between them at 11pm. I design the layer that removes that person — login, data, workflows, alerts — and then I keep it running.

Free, no pitch. If I'm not the right person, I'll say so on the call.

Don't take my word for it — run one of my systems

A real booking, moving through a system I built. Press the second button too — that one is the reason a client can stop checking whether it worked.

CLINIKO → GOHIGHLEVEL

Press one.

idle

CLINIKOMY LAYERCRMPATIENT Clinikotwo accounts Sync layermatch · plan · decideone patient, never two GoHighLevelcontact + appointment ReminderSMS + email What should be sent, right nowrecalculated every run — a stale plan is retired, not sent picked upwebhooksequencethe plan
Clinikotwo accounts · booking created Sync layer match · plan · decide one patient, never two What should be sent, right now recalculated every run a stale plan is retired, not sent GoHighLevel contact + appointment pipeline moves ReminderSMS + email picked up the plan webhook sequence

Nothing traced yet. Press a button.

The second button is the one that matters. Most reminder systems fail exactly there — the appointment moves and yesterday’s promise still goes out. In this system that has been caught 1,816 times.

What that has been worth

Measured, not claimed

6,385

messages delivered out of one clinic's system — and not one failed delivery in the log

COUNTED IN THE DATABASE

1,816

reminders retired before they could send, because the appointment had already moved

WRONG MESSAGES PREVENTED

5 brands

restaurant storefronts running on one codebase, one deploy, five real kitchens

GROWKU · MULTI-TENANT

~80%

of one team's manual admin removed by putting five separate tools on one database

GROWKU · REPORTED BY THE TEAM

What actually changes

The clinic you just traced, in plain terms — before I touched it, and after.

CLINIKO → GOHIGHLEVEL

Before

Reception was the integration

A patient books in Cliniko. Someone then opens the CRM and types the same details in again, so reminders and follow-ups can go out.

  • Every patient existed twice, kept in step by hand
  • "Where is this patient up to?" meant opening two systems
  • Two Cliniko accounts, so the same person could exist twice on the clinical side alone
  • Reminders ran through a third-party tool nobody could audit
Cliniko 1 Cliniko 2 someone types GHL CRM once a day, if there’s time

After

The booking is the trigger

A scheduled run reads both Cliniko accounts, resolves the patient to one timeline by email, and drives the CRM from what actually happened.

  • Bookings, arrivals, no-shows, notes and forms arrive on their own
  • 67 messaging rules live in a table the client owns, with a log of every send
  • Plans are recalculated every run, so a moved appointment cannot get yesterday’s reminder
  • Staff work in one system; the clinical record is never written to
Cliniko 1 Cliniko 2 one patientmatched on email GHL CRM 67 rules stale plan retired

6,385 SENT · 0 FAILED · 1,816 STOPPED

The shape of what I build

Every box is something I have actually built. Pick one.

Interactive

A system I'd build for you

← pick a box

sign insign inonly write path on changegeneratewrite back watches everything Website Astro · fast · found in search Your tools CRM · Cliniko · Telegram One login identity · permissions One database the single source of truth Automations n8n · rules · schedules AI, inside it OpenAI API · budgeted Alerts & monitoring a person hears about it first
sign in only write path on change generate Website Astro · found in search Your tools CRM · Cliniko · Telegram One login identity · permissions One database the single source of truth Automations n8n · rules · schedules AI, inside it OpenAI API · budgeted Alerts & monitoring watches everything · a person hears about it first

Three systems I manage end to end

Architecture, build, and the part nobody advertises — keeping them alive afterwards.

MY OWN CLIENTHEALTHCARE

Cliniko → GoHighLevel sync

The system traced at the top of this page

Clinic bookings become CRM contacts, appointments and message sequences on their own — matched on email across two Cliniko accounts so a returning patient is never a new one, and driven by 67 rules the client owns rather than a product they rent.

6,385 MESSAGES, NONE FAILED

EMPLOYED · GROWKULED THE TEAM

Creator platform with AI inside

Supabase, n8n, GoHighLevel, Telegram, OpenAI

Five tools behaving as one product. The first fix was identity — one account per person — because automation built on top of four unlinked records does the right thing to the wrong person, at scale.

~80% OF THE MANUAL WORK GONE

EMPLOYED · GROWKU5 TENANTS

Restaurant ordering, five brands

One codebase, five storefronts, real kitchens

Ordinary online shops finish at payment. This one isn't finished until a ticket prints in a kitchen — so every order is checked against five integrity rules before payment is taken, and anything suspect reaches a manager on Slack with the order attached.

5 BRANDS · ONE CODEBASE

What working with me is like

The part a diagram can't show, told through things that actually happened.

  1. I lead, not just build

    At Growku I lead the engineering team — splitting the work, reviewing it, and being the one accountable when it ships.

  2. I can run the client relationship

    TalentStream went from a first phone call to a delivered platform with no project manager in between. I scoped it, priced it and shipped it.

  3. I work with designers, not around them

    At Yalla Cooperative I built the shared component system with the design team, so the same button stopped being renegotiated every sprint.

  4. I explain trade-offs without jargon

    Across six client projects in Amsterdam, most of the job was making non-technical stakeholders comfortable with a technical decision.

  5. I hand over things people can use

    At uPet I built automations that let marketing run their own campaigns without an engineer. Fewer tickets for me, faster for them.

  6. I'm reachable and I write things down

    Documentation and a diagram come with the work, in Arabic or English, so the next person is not dependent on a call with me.

Stack

Used on production systems with real customers on them.

Websites
Astro, Next.js, React, TypeScript, Tailwind — SEO and performance as a build gate
Interfaces
React, Material UI, design systems on Bit.dev
Services
Node.js, NestJS, Express, Python, FastAPI
Data
PostgreSQL, Supabase, TypeORM
Connecting
n8n, webhooks, OpenAI API, GoHighLevel, Cliniko, Telegram, SSO
Running it
Jest, AWS S3 & Serverless, Docker, GitHub Actions, Netlify

Career history

Where this came from — five years, four companies, and work of my own
  1. 2024 → NOW GrowkuFull-stack engineer, then leading the team. AI products, systems integration, multi-tenant commerce, Astro content platforms. FULL-TIME
  2. ONGOING My own clientsThe Cliniko → GoHighLevel clinic sync, the TalentStream candidate-data platform, and Astro site builds. FREELANCE
  3. 2022–2024 uPetUS e-commerce. Testing from unit to end-to-end, shared UI library, automations for non-technical teams, gradual migration to React and NestJS. FULL-TIME
  4. 2023 Yalla CooperativeReact survey platform and its shared design system, built alongside product and design. PART-TIME
  5. 2021–2022 Kiitos Technologies, AmsterdamSix client projects, startup through enterprise. Server-side rendering with Next.js for discoverability. FULL-TIME
  6. 2020 Gaza Sky Geeks Code AcademyFull-stack programme: eight weeks intensive, then sixteen weeks building for real clients. Civil engineering degree before that. TRAINING

Tell me which two systems refuse to talk to each other.

Thirty minutes, free, and an honest answer about whether I am the right person for it.

Or just describe the problem

Two fields. I reply within a working day.

Ask me a question