N. El-Amine

Nawal-Helga El-Amine

Senior Technical Project & Delivery Manager · PMP

18 years delivering client software from the vendor side: turnarounds, release governance, fixed-price and T&M engagements up to ~$800K. I also build production web apps with AI coding agents, under the same gates I install for clients. This page shows how.

Lakewood, CA U.S. permanent resident · no sponsorship PMP · PSM English · German
Résumé (PDF) LinkedIn

Approach

AI writes the code. I run the delivery.

Two personal products, built since July 2026 with Claude Code as the engineering team. I own scope, architecture decisions, acceptance and release. Every change follows the same path, and nothing reaches production on the strength of its own author's self-check.

197pull requests merged behind CI and independent review
1,000+automated test cases across both apps
643foods in a catalog traced row by row to its source
250recipes and 335 photos migrated from Notion, none lost

The delivery path for every change

MeScope & decide

Plan item, acceptance criteria, open decisions logged with their rationale.

Build sessionImplement

One AI session builds on its own branch and opens a pull request.

Gate 1 · CILint, types, tests, build

Automated. Red blocks the merge.

Gate 2 · ReviewIndependent review

A second session that did not write the change reads the diff, reruns the suite and reproduces the claims.

MeAccept & release

Squash-merge, auto-deploy, check on the real device.

Decision log

Every design decision with the reason and the alternative it beat. Reversals stay in the log as reversals, so nobody re-argues a settled point.

QA log

Append-only record of what was checked, how, and what is still unmeasured. "Verified" has to point at a run, a query or a recomputed number.

Rules as tests

A quality rule without an automated check is a request. Each check ships with a counter-test proving it can actually fail.

Case study 1

Ukon: a recipe app for iPhone and iPad

Oct 2026Next.js · TypeScript · Supabase · offline PWA25 pull requests
Release 1 feature-complete · device testing next

Problem

A personal collection of 250 recipes lived in Notion. Notion is slow to navigate in the kitchen, does not work offline, and has no cooking view. The goal: one user, two devices, portrait and landscape, every core task in three taps or fewer.

Approach

  • Scope, tap budget, design system and 42 screen mockups finished before any code. The prototype became the implementation source, so screens were translated, not reinvented.
  • Release 1 cut down to what replaces Notion: import, browse, search, read, offline. Editing and the cooking view were moved to later releases.
  • Built in nine planned steps over about 2.5 weeks, from first commit on Oct 6 to offline mode on Oct 21.

Governance

  • Every pull request passed CI and an independent review recorded on the PR, small fixes included.
  • Quality rules encoded as 10 guard test suites, among them text contrast of at least 4.5:1 in light and dark, 44 px touch targets on every control, no input below 16 px (it triggers iOS auto-zoom), every design token defined.
  • Before a measurement counts, the log states when it would go red and shows a counter-test that turns it red.

Outcome

  • All 250 recipes, 335 photos, 39 tags and 809 tag links imported, confirmed by query against the database.
  • Recipes and photos stored on the device, so the collection works in airplane mode.
  • Final release step is a device check on iPhone and iPad in both orientations, because desktop browsers do not reproduce iOS keyboard, zoom and safe-area behavior.

Migration: flag it, don't drop it

The Notion export runs through a rule-based converter that lists anything it cannot parse instead of silently skipping it. The first run reported 250 recipes, 250 photos and 12 items to review. Eleven of those had the same cause: step photos indented under a step. That was a structure the converter did not know, and a silent converter would have lost them without anyone noticing. After one fix the second run brought in 335 photos with nothing left to review.

Ukon collection screen with search, filter chips, recently cooked and an alphabetical recipe list
Collection: search, filters, recently cooked
Ukon recipe screen with portion stepper and ingredient list
Recipe with portion scaling
Ukon collection with an offline banner explaining that reading and cooking work and editing needs a connection
Offline mode says what still works
Ukon on iPad in landscape: collection on the left, recipe on the right
iPad landscape: list and recipe side by side

Screens from the design prototype with sample data. The app's interface is in German for its user.

Case study 2

NutriTally: nutrition tracking, now being redesigned as Ume

Jul 2026 – presentNext.js · TypeScript · Supabase (PostgreSQL, row-level security) · Vercel172 pull requests
Live · redesign as Ume in progress

Problem

Calorie counters treat 100 calories of lentils and 100 calories of candy alike. NutriTally weights each item's cost by nutritional quality, using the published Nutri-Score 2023 algorithm, inside a daily and weekly allowance. The domain is unforgiving: one misread rule or one blank treated as zero changes every number the user sees.

Approach

  • Implemented Nutri-Score 2023 from Santé publique France's primary specification after two secondary sources disagreed on the protein rule.
  • Missing data is never zero. Unknown nutrients are estimated from category medians, because reading blanks as zero once let a hastily entered salami score grade A.
  • Values are frozen when logged, so later edits to a food or a profile never rewrite past days.
  • Built a 643-item catalog from the Swiss Food Composition Database, plus Open Food Facts search, barcode scanning and CSV import and export.

Governance

  • 172 pull requests merged since Aug 3, 2026, behind CI and an independent review recorded on each pull request.
  • Authorization lives in the database (row-level security), not in application code. A class of policy gap that recurred twice became a fixed review checklist item.
  • A decision log that records reversals as reversals, and an append-only QA log for every manual and device check.

Outcome

  • Live, installable iPhone web app with about 850 automated test cases, auto-deployed from a branch that is always releasable.
  • Now being redesigned as Ume on a design system shared with Ukon, with recipe-to-meal integration planned.

When the review gate lapsed for a day

Under time pressure I let one session build, self-check and merge a day's work without independent review. It shipped a swipe-to-close gesture, carefully guarded against scroll conflicts. Nobody asked what that gesture throws away. Shortly after, a meal's worth of selected ingredients vanished with a swipe. A cold reviewer asks "what state does this discard?" first. The author does not. Since then the review gate binds every change, small polish items included, and if no reviewer is available the work stops at the open pull request.

Five fixes for the wrong problem

"The screen floats" took five rounds of fixes to page height. Each fix was real and each measurement correct, but none addressed the report. The cause was iOS Safari zooming into text fields smaller than 16 px and staying zoomed, which desktop browsers never show. It surfaced only when I, as the user, described the symptom again from scratch instead of answering "does it still happen?". Now a second round on the same symptom means re-checking the assumption first, and the 16 px rule is an automated test in both apps.

Ume week view with a bar chart of credits per day and a summary of credits used and left
Ume week view
Ume saved meals list with credits per serving
Saved meals with credits per serving
Ume new meal form with ingredients, servings and credits per serving
Building a meal from ingredients

Screens from the Ume redesign prototype with sample data. NutriTally is a personal learning project and does not provide medical, nutrition or health advice.

What carries over to client delivery

Lessons I'd bring to your team

Independence is the property, not the title

A review counts when the reviewer did not build the change and works from the branch, not from the author's summary. The same holds for human teams.

A check that cannot fail proves nothing

One day, a CI wait loop accepted an empty list of checks and two changes merged with no CI at all. Every gate now names the condition under which it goes red.

AI speeds up building, not judgment

Agents produce correct code for the problem they are given. Framing the problem, asking what a change throws away, and deciding when to stop are still the delivery manager's job.

Write it down when it's decided

Decision and QA logs kept during the work, not after it, let any new session or team member pick up the thread without re-asking settled questions.