Senior Full-Stack Software Engineer & Team Lead — backend and cloud architecture
I design and own production SaaS end to end: API design, data modelling, authentication, and the cloud infrastructure underneath it. Nine years, primarily in NestJS / Node / TypeScript with PostgreSQL, plus earlier ownership of enterprise .NET Core and Laravel platforms.
Almost all of my work has been client work under NDA at a software house, so this profile is light on code. The products below are live and public — better evidence than a repo list.
| Product | My role | Stack |
|---|---|---|
| CivPar | Architecture and full build, from an empty repo | NestJS 11 · PostgreSQL · AWS Cognito · React 19 · Terraform |
| Lillywait | ~90% of a 3.5-year enterprise platform; built the CI/CD from nothing | .NET Core · SQL Server · IdentityServer4 · React · Azure DevOps |
| Schulplus24 | Led and delivered almost single-handedly | NestJS · TypeORM · PostgreSQL · BullMQ · React |
| RTSS | Web dashboard, backend API, and Electron kiosk app | Express · Inversify · MongoDB · Next.js · Electron · AWS |
| BudgetMentor | Promoted to team lead ~4 months in; shipped on time | NestJS · MongoDB · Stripe · React |
| BoostyTube · NinjaSplitter | Backend lead / major contributor | NestJS · PostgreSQL · Stripe · React · Flutter |
Backend — NestJS, Node.js, TypeScript, Express, .NET Core / C#, Laravel / PHP, REST, GraphQL Data — PostgreSQL, MongoDB, SQL Server, TypeORM, Prisma, Sequelize, Entity Framework, Redis, BullMQ Cloud & DevOps — AWS (Cognito, ECS, RDS, S3, Lambda), Azure, Terraform, Docker, GitHub Actions, Azure DevOps Frontend — React 16→19, Next.js, Vite, React Native, Electron, TanStack Query
- Internationalisation done properly. Not just translated strings — timezone and DST correctness, which is where most systems quietly break. Instants, floating local times and dates are three different things, and storing one as another causes bugs that surface months later.
- Correctness belongs in the database. A unique index beats an application-level check-then-insert, every time.
- Boring infrastructure. ECS Fargate over Kubernetes when nobody's full-time job is the cluster. The right amount of machinery for the size of the team.
- Naming the tradeoff. Every architectural decision costs something. Saying what you rejected and why is the difference between a pattern you've read about and one you've chosen.
LinkedIn — anas-muhammad-51096 Email — anasm51096@gmail.com Based in Lahore, Pakistan (UTC+5) · open to remote — EU/UK, Gulf, US overlap
