Skip to content

Backend systems that feel effortless

Node.js · TypeScript · NestJS · PostgreSQL · Redis · Socket.io

Most of my time goes into building the stuff users never see but always feel — auth flows, data models, APIs, caching layers, and the glue that keeps real-time features from falling apart. Lately I've been deep in a CRM/ERP codebase where one wrong abstraction breaks three modules, so I focus heavily on domain modeling, event-driven patterns, and writing code that the next person can actually follow.

role
Backend Engineer
base
Egypt · Cairo
focus
APIs · Realtime · Auth · AI
built
7 projects · 6 live
open source
WordyMe · sigstop
PATCH/api/documents/:id20028ms
span0ms28msdur
  1. auth.getSession4ms
  2. zod.parse1ms
  3. docs.update9ms
  4. revisions6ms
  5. io.to(space).emit3ms

↳ session → validate → write doc + revision → broadcast to peers in the space

trace c21d0e8a77f1 · sample, not measuredauthcachedbaieventrealtimecompute
01/selected work

What I've built.

Seven projects, each with a different shape — collaborative workspaces, multi-branch and showroom commerce systems, an offline-ready PWA, and a native macOS app.

wordymeosslive
WordyMe OSS logo

WordyMe OSS

Open-source educational platform

Self-hostable education workspace with hierarchical documents, real-time sync, and a rich editor.

I jumped in to tackle the most complex backend features—specifically figuring out how to efficiently store nested document hierarchies and getting real-time collaboration to stay perfectly in sync.

Monorepo setup
Turborepo splits the SDK, types, UI, and editor into their own packages — so nothing bleeds where it shouldn't.
Live collaboration
Socket.io handles the syncing so two people can edit the same doc without stepping on each other.
Nested documents
Spaces, notes inside notes, favorites, version history — basically the hierarchy you'd expect from a real workspace.
Built to self-host
Fully self-hostable so teams can deploy it on their own infrastructure and keep complete control over their internal documents.
PATCH/api/documents/:id
20028ms
span0ms28msdur
  1. auth.getSession4ms
  2. zod.parse1ms
  3. docs.update9ms
  4. revisions6ms
  5. io.to(space).emit3ms

illustrative · not measured

Express.jsBetter AuthDrizzle ORMlibSQLSocket.ioZodOpenAPITurborepo
reactsuite · currentwip (in development)
ReactSuite logo

ReactSuite

Next-gen ERP/CRM platform

An ERP/CRM platform I'm building for teams that outgrow spreadsheets — focused on clean domain models, fully typed APIs, and live dashboards.

I'm focusing on building an architecture that won't turn into a mess later. That means organizing code by domain, keeping modules decoupled, and enforcing strict type safety.

DDD structure
Structuring the logic so each module owns its own domain. This helps keep complex business rules organized and readable.
Event bus
Modules talk through events, not direct imports. So when Orders changes, Invoices reacts without either knowing the other's internals.
Typed APIs (oRPC)
Using oRPC to share types between the frontend and backend, catching schema changes at build time instead of in production.
Live dashboards
SSE pushes updates to the UI as things happen — no polling, no stale data sitting on someone's screen.
POST/rpc/orders.create
20041ms
span0ms41msdur
  1. auth.session3ms
  2. orpc.validate1ms
  3. orders.create (tx)18ms
  4. bus.emit1ms
  5. invoices12ms
  6. inventory8ms
  7. sse.push2ms

illustrative · not measured

NestJSTypeScriptoRPCDrizzle ORMPostgreSQLBetter AuthAmazon S3ZodSSESentryDocker
algendylive
AlGendy Bakery logo

AlGendy Bakery

Multi-branch commerce & live stock platform

Bilingual e-commerce storefront and branch operations dashboard for an industrial bakery running one factory and five retail shops across Damietta.

I built it full-stack in Nuxt 4 and Nitro around a single inventory service: atomic per-branch stock reservations, an append-only movement ledger, live SSE alerts for branch staff, and an adapter layer ready for the bakery's internal POS.

Atomic branch reservations
Orders reserve stock with a conditional UPDATE (on_hand − reserved − safety_buffer ≥ qty) inside one transaction — so concurrent checkouts never oversell a branch's last loaf.
Append-only stock ledger
Every quantity change — web orders, staff edits, Excel/CSV imports, and expired holds — writes a before/after row to stock_movements with who made it and why.
Live branch dashboard
Postgres LISTEN/NOTIFY streams new WhatsApp orders and stock changes over SSE to branch screens instantly, while unconfirmed holds auto-expire on a 5-minute schedule.
Pluggable POS adapter
Stock sits behind a StockSourceAdapter contract (manual, HTTP JSON, or CSV drop) keyed by factory SKUs and branch codes, so wiring the bakery's ERP touches zero UI code.
POST/api/orders
20134ms
span0ms34msdur
  1. zod.parse1ms
  2. pendingCap4ms
  3. orders.create (tx)8ms
  4. reserveStock11ms
  5. movements6ms
  6. wa.message1ms
  7. pg.notify3ms

illustrative · not measured

NuxtVueNitroTypeScriptDrizzle ORMPostgreSQLPGliteSSEnuxt-securityZodTailwind CSSVitestDocker
trueartlive
TrueArt logo

TrueArt

Furniture showroom commerce & payments ledger

Single-showroom furniture e-commerce site and staff dashboard handling in-stock vs. made-to-order pieces, transfer verification, and delivery across all 27 Egyptian governorates.

I designed the money and fulfilment workflows so nothing is trusted from the client: orders snapshot payment settings, InstaPay and Vodafone Cash transfers require staff attestation with unique references in an append-only ledger, and delivery fees are confirmed per address.

Verified transfer gate
InstaPay and Vodafone Cash orders stay gated until staff verify the screenshot, attest, and log a unique transfer reference into an append-only payments ledger protected by DB triggers.
Hybrid fulfilment & deposits
Handles in-stock reservations, made-to-order lead times, and stock-then-MTO fallbacks in one checkout — calculating pre-production deposits and remaining balances automatically.
Address-reviewed delivery fees
Covers 27 governorates with Egypt-bounded map pins. Delivery orders start with the fee pending until staff review the address and confirm it, pushing live updates to the invoice.
PDPL retention & 7,300+ tests
Scheduled tasks sweep overdue holds and anonymize old PII under Egyptian Law 151/2020, backed by ~6,200 unit and ~1,170 HTTP API tests on PGlite and PostgreSQL 17.
POST/api/dashboard/orders/:id/payments
20138ms
span0ms38msdur
  1. requireStaff4ms
  2. zod.parse1ms
  3. checkRef6ms
  4. orderPayments9ms
  5. transition8ms
  6. keepReserve5ms
  7. audit.log2ms
  8. pg.notify3ms

illustrative · not measured

NuxtVueNitroTypeScriptDrizzle ORMPostgreSQLPGliteSSEnuxt-securityZodTailwind CSSGSAPVitestVercel
papagendolive
PaPa Gendo logo

PaPa Gendo

Gelateria ordering PWA & custom builder

Installable bilingual PWA for an artisan gelateria in New Damietta, featuring a step-by-step custom gelato stick studio with live SVG previews and WhatsApp checkout.

I built a zero-backend commerce flow that still behaves like a strict system: canonical recipe keys merge identical custom sticks in the cart, Pinia stores re-validate localStorage through Zod on hydration, and service workers update safely without dropping form state.

Step-by-step stick builder
Customers pick a gelato base, chocolate dip, toppings, and drizzle with a live vector preview; deterministic stickKey hashes merge identical custom creations in the cart.
Schema-guarded persistence
Cart lines, saved orders, and favorites persist in localStorage via Pinia, re-parsed through Zod schemas on boot so stale or tampered state never breaks a session.
Arabic digit & phone normalizer
Converts Arabic-Indic (٠-٩) and Persian digits, normalizes Egyptian mobile formats (+20, 0020, 01x), and generates unambiguous PG-XXXXXX order codes before opening WhatsApp.
Safe PWA auto-update
Configured with @vite-pwa/nuxt to precache static assets while keeping HTML network-first, applying waiting service worker updates automatically unless the user is typing.
POST/cart · whatsapp checkout
PG-7K2M9Q620µs
span0µs620µsdur
  1. stick.stickKey55µs
  2. zod.safeParse95µs
  3. normalisePhone40µs
  4. createOrder75µs
  5. ordersStore.add140µs
  6. wa.buildMessage110µs
  7. open(wa.me)105µs

illustrative · not measured

NuxtVueTypeScriptPiniaPWAZodTailwind CSSVitestVercel
sigstoposslive
sigstop logo

sigstop

Open-source macOS menu bar app

Break reminders for developers that know what you're doing, and when not to interrupt. Free, open source, and private by design.

I built it end to end in Swift 6: a session model that counts real work instead of wall-clock time, a decision engine that waits for a defensible moment, and an activity classifier that never claims more than its signals support.

Counts real work
Continuous active work, not elapsed time. Short reading pauses still count; long idle gaps, sleep and time away don't.
Knows when to wait
Holds a break while your mic or camera is live or you're in a meeting, then escalates in four rungs named after Unix signals.
Private by design
Zero permissions required. It reads which app is in front, never what's in it, and nothing about you leaves your Mac.
Verified updates, tested core
Layered SwiftPM targets with one dependency, Sparkle, which checks every update against an EdDSA key. 587 tests run in CI.
break ladderfour prompts, each a little firmer
  1. L1
    SIGTSTP
    noticed you, no pressure
  2. L2
    SIGINT
    hm, still going?
  3. L3
    SIGTERM
    this is your warning, said flat
  4. L4
    SIGSTOP
    a bluff you're in on
SwiftSwiftUIAppKitSwiftPMSparkleGitHub Actions
turjumanlive
Turjuman logo

Turjuman

AI-powered translation platform

Translate text or speak into it — powered by Gemini and Deepgram, with saved history and a free/premium tier system.

I built out the backend pipeline, wiring up the external AI services and setting up caching and usage limits to keep everything fast and predictable.

User accounts
JWT-based auth — users can save translations, search their history, and bookmark favorites.
Usage limits
Free users get a cap, premium users get priority. The logic tracks it all per-account.
Voice input
You talk, Deepgram transcribes it, Gemini translates it. The whole chain runs in one request.
Cached reads
Translations sit in MongoDB, but hot data goes through Redis so repeated lookups are instant.
POST/api/v1/translate/voice
200731ms
span0ms731msdur
  1. auth.verifyJwt3ms
  2. usage.checkQuota2ms
  3. redis.get1ms
  4. deepgram268ms
  5. gemini.translate431ms
  6. redis.set1ms
  7. mongo.history12ms
  8. usage.increment2ms

illustrative · not measured

Node.jsExpress.jsMongoDBMongooseJWTRedisDeepgramGoogle GeminiVercel
02/how I work

Habits I bring to every codebase.

Not frameworks or methodologies — just the things I've learned to do by default because skipping them always costs more later.

  1. 01Architecture

    I start with the API contract

    I prefer to define the routes, validation, response shapes, and error cases before writing feature code. It helps save everyone time later — especially the frontend devs consuming the API.

    #route-design#zod-validation#error-contracts
  2. 02Reliability

    Data belongs somewhere specific

    I try to ensure every piece of data has a clear owner. I rely on domain-driven principles to keep the logic organized, adding indexing and caching only where queries actually need it.

    #aggregates#bounded-contexts#targeted-caching
  3. 03Trust

    Security ships with the feature

    Permission checks, input sanitization, and rate limits shouldn't be a follow-up ticket. I make sure they are baked in from the start to ensure the application is secure by default.

    #auth-checks#input-sanitization#rate-limits
  4. 04Maintainability

    I think about who's next

    I write code assuming someone else will maintain it. I prioritize clear boundaries, good logs, and obvious naming so the next engineer doesn't have to reverse-engineer my work.

    #clear-naming#good-logs#obvious-boundaries
03/technical stack

What I use, and where.

48 tools, grouped by where they sit in the stack.

API & runtime

10

Runtimes, server engines, typed contracts, validation.

  • Node.js
  • TypeScript
  • Express.js
  • NestJS
  • Nitro
  • Hono
  • oRPC
  • Zod
  • OpenAPI
  • nuxt-security

Auth

2

Sessions, JWTs, role-aware endpoints.

  • Better Auth
  • JWT

Data & cache

10

Relational and document databases, ORMs, state, caching.

  • PostgreSQL
  • PGlite
  • MongoDB
  • Mongoose
  • Drizzle ORM
  • libSQL
  • SQLite
  • Supabase
  • Redis
  • Pinia

Realtime

2

Socket rooms and server-sent events.

  • Socket.io
  • SSE

Infra & delivery

10

Monorepos, containers, CI/test suites, logs, error tracking, deploys.

  • Turborepo
  • Docker
  • Amazon S3
  • Vercel
  • GitHub Actions
  • Vitest
  • Sentry
  • Pino
  • Dokploy
  • Coolify

AI

2

LLM and speech-to-text pipelines behind caching and limits.

  • Google Gemini
  • Deepgram

Client & native

12

React and Nuxt/Vue to ship full-stack web apps and PWAs; Swift for native macOS apps.

  • Next.js
  • React
  • Nuxt
  • Vue
  • PWA
  • Tailwind CSS
  • shadcn/ui
  • TanStack Query
  • GSAP
  • Swift
  • SwiftUI
  • AppKit
04/contact
open to backend roles

Let's build a backend that makes the product feel instant.

Reach out for backend roles, API-heavy products, AI integrations, or systems that need reliable auth, data, and real-time workflows.

mohamedelshesheny62@gmail.com
contact.jsonjson
1{2  "linkedin": "mohamed-elshesheiny" on LinkedIn (opens in new tab),3  "github": "Mohamed-Elshesheny" on GitHub (opens in new tab),4  "location": "Egypt",5  "local_time": " Cairo",6  "open_to": ["backend", "product"]7}
✓