Ahmed Hinedy

Software gets complicated long before it gets big.

I design interfaces around constraints, tradeoffs, and the people who have to maintain them.

                                                                             ...........   ...                                                                                
                                                                      ............................    .                                                                        
                                                                  .......................................                                                                      
                                                                ..............................................                                                                 
                                                               ..................................................                                                              
                                                              ....................................................                                                             
                                                         ............................................................                                                          
                                                        ................................................................                                                       
                                                       .................................................................                                                       
                                                      ...................................................................                                                      
                                                     ......................................................................                                                    
                                                   ........................................................................                                                    
                                                  ..........................................................................                                                   
                                                 ............................................................................                                                  
                                                 .............................................................................                                                 
                                                 ..............................................................................                                                
                                                 ..............................................................................                                                
                                                 ..............................................................................                                                
                                                  ..............................................................................                                               
                                                  ..............................................................................                                               
                                                   .............................................................................                                               
                                                   ..............................................................................                                              
                                                   ..............................................................................                                              
                                                   ...............................................................................                                             
                                                   ...............................................................................                                             
                                                    ..............................................................................                                             
                                                    .............................................................................                                              
                                                    .............................................................................                                              
                                                     ............................................................................                                              
                                                     ............................................................................                                              
                                                      ..........................................................................                                               
                                                      ..........................................................................                                               
                                                      ..............................................................................                                           
                                                    .. .............................................................................                                           
                                                  ...................................................................................                                          
                                                  ...................................................................................                                          
                                                  ...................................................................................                                          
                                                  ...................................................................................                                          
                                                   ..................................................................................                                          
                                                   ..................................................................................                                          
                                                   ..................................................................................                                          
                                                   ..................................................................................                                          
                                                    ................................................................................                                           
                                                    ................................................................................                                           
                                                    ...............................................................................                                            
                                                     ..............................................................................                                            
                                                     ............................................................................                                              
                                                       ........................................................................                                                
                                                         ....................................................................                                                  
                                                              ..............................................................                                                   
                                                              ..............................................................                                                   
                                                               .............................................................                                                   
                                                               .............................................................                                                   
                                                                ...........................................................                                                    
                                                                ...........................................................                                                    
                                                                 .........................................................                                                     
                                                                  .......................................................                                                      
                                                                  ......................................................                                                       
                                                                    ....................................................                                                       
                                                                     ...................................................                                                       
                                                                     ...................................................                                                       
                                                                     .....................................................                                                     
                                                                     .......................................................                                                   
                                                                    ..........................................................                                                 
                                                                  ..............................................................                                               
                                                                 .................................................................                                             
                                                               ......................................................................                                          
                                                             ..........................................................................                                        
                                                         .................................................................................                                     
                                                    ..........................................................................................                                 
                                                ..................................................................................................                             
                                           ..........................................................................  ................................                        
                                      ...............................................................................  ......................................                  
                                 ...................................................................................  ............................................             
                             ........................................  ............................................  ..................................................        
                       ...............................................  ..........................................  .........................................................  
                 .....................................................   ........................................   ...........................................................
           ...........................................................   .......................................    ...........................................................
     ......................................................................   .................................    ............................................................
 .................................................................... .....  .. ..............................    .............................................................
..........................................................................     .. ......................... ..   ..............................................................
..........................................................................     ..... .........................   . ............................................................
...........................................................................     .. ..  ................. ...  ...    ..........................................................
..................................................................... ....               .................   ..     .. ........................................................
..................................................................... ....                 .................       .... .......................................................
..................................................................... ....                 ............. ...       .. .........................................................
..........................................................................                   ........... ..      ... ..........................................................
......................................................................  ..                      ........ .      ... ...........................................................
......................................................................  ...                        .....   .. .................................................................
....................................................................... ...                         ..      . .................................................................
....................................................................... ..      .                            ..................................................................
....................................................................... ..                                  ...................................................................
..........................................................................          ..                    .....................................................................
// rendered, not photographed
DOCUMENT
Portfolio Specification
SYSTEMS
Operational • Multi-tenant • Data-heavy
DOMAINS
Healthcare • Logistics • Marketplace
EVIDENCE
3 production case studies
AUTHOR
Ahmed Hinedy

How do you think?

manifesto

I care less about frameworks than the decisions behind them.

Most frontend problems are ownership, complexity, and changing requirements. The work is keeping a product understandable as it grows.

That's why I spend more time thinking about architecture, state boundaries, constraints, and tradeoffs than collecting libraries.

The taste in small details is part of the work. That's what keeps complex systems from looking complicated.

Can you prove it?

Building healthcare operations software means correctness matters more than elegance.

Context

MedX is a multi-role healthcare operations platform coordinating medical service orders between providers, patients, and administrators. It handles onboarding, scheduling, escrow-style payments, claims/remits, notifications, and real-time operational workflows in a fast-changing environment.

The Problem

The platform needed a configurable service builder letting healthcare practices define their own service types, pricing, intake forms, and conditional workflow logic at runtime, plus strict role-based access across every protected operational area, layered on top of a legacy frontend that had accumulated inconsistent patterns under rapidly changing requirements.

Requirements themselves were refined collaboratively with stakeholders rather than handed down as a fixed spec, which meant frontend decisions doubled as part of the requirements-definition process, not just its implementation.

Why This Was Difficult

The service builder needed real runtime "if-this-then-that" logic, so I built a custom formula and rules engine supporting variable bindings, nCalc-compatible operators, and live expression testing. The UI had to interpret configuration as behavior, not just render static forms. That had to work alongside RBAC-gated workflows, long-lived authenticated sessions, and live SignalR updates synchronized against Stripe-powered escrow payments, without disrupting a system already handling real financial and medical operations.

What We Changed

Organized the frontend around feature domains to isolate workflow-heavy business logic, implemented layered state management (Zustand, React Context, React Hook Form, React Query), and built a centralized auth/network layer handling token refresh, retry flows, and cross-tab synchronization.

The service configuration wizard (question types, conditions, rule actions, JSON schema migration) became the backbone the rest of the platform built on. Several workstreams branched off it in parallel. I planned and coordinated that workload across five developers by task type and dependency, so parallel branches stayed mergeable.

We improved performance with route-level code splitting and lazy loading. react-pdf, xlsx, and Microsoft's auth SDK now load only on the screens that use them: export/reporting, the spreadsheet tool, and sign-in. Main bundle dropped from 1.4 MB to 777 kB, about 49.5% off the original baseline. Unused-JS roughly halved on every page we measured, from about 2.4 MiB to 1.5 MiB. First Contentful Paint went from 0.7 s to 0.5 s, and Speed Index from 5.6 s to 3.0 s.

// tradeoff: one centralized network layer over per-feature handling

Invested in a single centralized auth/network layer rather than letting each feature handle its own token refresh and retry logic. More upfront architecture work in exchange for not duplicating fragile synchronization logic across a dozen different screens.

What I'd Do Differently

Push for the feature-domain organization earlier. Some of the legacy inconsistency I inherited could have been avoided if domain boundaries had been established before the codebase grew past a certain size.

Fast iteration only works when the architecture expects change.

Context

Revixir is a multi-tenant healthcare credentialing platform for organizations managing provider verification, onboarding, compliance, and administration, supporting three application contexts: a central admin portal, tenant-specific client environments, and impersonation sessions for support operations.

The Problem

The platform needed subdomain-based tenant isolation, JWT auth with middleware-level token rotation and impersonation handling, and a granular RBAC system (420+ permissions) governing what every user could see and do across three distinct application contexts.

Why This Was Difficult

Navigation, layouts, and permissions all needed to change at runtime depending on whether someone was in the admin portal, a tenant environment, or an impersonation session. Credentialing records carried large amounts of operational and compliance data that had to stay usable rather than overwhelming, and requirements kept evolving in parallel with backend contract changes.

What We Changed

Built the frontend on Next.js 14 App Router with middleware-level tenant resolution and auth, implemented the 420+ permission RBAC system, and built reusable infrastructure (form layouts, modal flows, toast notifications, loading skeletons, permission-aware rendering) used across onboarding, provider management, and entity administration instead of building each module in isolation.

Used Zod-based schema validation with React Hook Form so validation logic lived with the form, where users see errors before the API rejects them.

// tradeoff: shared infrastructure over shipping isolated pages

Spent time building reusable form, modal, and table infrastructure instead of shipping each workflow as its own isolated page. Slower to the first module, faster for every module after it, since onboarding, provider management, and entity administration all reused the same underlying patterns.

What I'd Do Differently

Document the tenant-resolution and impersonation-session logic earlier. It's the part of the system where getting it wrong is easy and expensive, and it deserved a written reference sooner than it got one.

Marketplace products become operational products faster than people expect.

Context

SupplyTech is a logistics and warehouse operations platform supporting warehouse discovery, onboarding, operational management, and future booking infrastructure for warehouse providers and clients.

The Problem

The platform needed multi-role dashboards, warehouse onboarding, and operational tooling built during the MVP and product-definition stage, as a freelance engagement with a three-person dev team and intersecting responsibilities, while product direction and stakeholder requirements were still actively changing.

Why This Was Difficult

Every architectural choice had to earn its complexity in a greenfield codebase with evolving requirements, balancing reusable component architecture against the risk of over-engineering before the product direction had settled, while still supporting role-based rendering, localization (Arabic and English), and data-heavy operational views across desktop and mobile.

What We Changed

Built on Next.js and TypeScript with Zustand for state, Radix UI and TanStack Table for the component layer, and React Hook Form for forms. Implemented JWT authentication with protected routes and persistent sessions, SSR for public-facing SEO pages, and reusable UI primitives shared across onboarding, warehouse management, and admin tooling.

// tradeoff: reusable primitives over one-off screens

Built shared component primitives (tables, forms, loading states) even at MVP stage rather than one-off screens per workflow. Slightly more setup cost early, but it meant new operational views could be assembled instead of rebuilt as requirements kept shifting.

What I'd Do Differently

Instrument usage earlier. We decided what to build on stakeholder intuition rather than discovery-flow data, because analytics weren't wired in from day one.

What principles repeat across projects?

epigraph

Every technical decision buys something, and taxes something else.

Performance
Measure, then change.

Performance work starts with evidence. Profile before you tune, and every change should move a metric.

Architecture
Architecture should absorb change.

I design for the next likely future, so the system can evolve without being rewritten.

Product
I'd rather validate the business case than build the feature that assumes it.

Shipping the wrong feature efficiently is still wasted effort. The constraint worth solving first is whether the problem actually exists.

Requirements
Ambiguous requirements are the design input.

Most product work begins with uncertainty. The job is to expose assumptions, reduce ambiguity, and turn vague requirements into decisions.

Teams
Map the dependencies before splitting the work.

Parallel development succeeds when ownership and system boundaries are clear. Good planning prevents merge conflicts long before Git ever sees them.

State
State belongs where it naturally changes.

Local interaction state and remote server state have different lifecycles. I separate them before introducing a larger abstraction.

Current preference: Zustand for client state, React Query for server state.

Code
Obvious beats clever.

Code should be easier to understand six months from now than it was to write today. Readability compounds in long-lived systems.

APIs
Cross-cutting concerns should have one home.

Authentication, retries, token refresh, and error handling belong in shared infrastructure.

Components
Design for change before reuse.

Reusable components are the result of recurring problems. I prefer small, adaptable building blocks over premature abstraction.

Forms
Validation belongs where users make mistakes.

The best validation prevents errors before they become requests. Backend validation remains the source of truth, but good UX catches problems earlier.

Did other people notice?

Quote 01
Ahmed was a critical member of a UI/UX design team for a major project being developed from the ground up in the healthcare space. His technical contributions were notable and his ability to work on a highly-dynamic and evolving project and team were even more noteworthy. Developers that produce good technical work and can function in a team environment with pressure from ever-changing client requirements are hard to find, and you will not go wrong with selecting Ahmed for any of your front end project needs. He produces timely and high quality work even in a higher pressure and time constrained environment.
Simon Dobretsov
MedX — CTO
Quote 02
Ahmed is extremely knowledgeable rising talent. He has very good communication as well as UI/UX knowledge. He went above and beyond to deliver the task on time. Would highly recommend him and hire him again for any upcoming projects. I wish him best of luck for his future endeavors.
Eliezer Valenzuela
SophyTech — software engineer
Quote 03
I had a very good experience working with Ahmed, overall very professional, great communicator and fast!
Jack Rayan
freelance client

Can you articulate your reasoning?

What are you exploring now?

Want to solve another hard problem?

If you're building something complex, I'd like to hear about it.

ahmedhinedy@gmail.com