Projects
23Every platform, product and store shipped so far. Government document verification, logistics and transport, safety compliance, learning platforms, retail systems and the brands run alongside them.
The largest system in this portfolio. One multi tenant suite carrying HRM, CRM, project delivery and finance, with an AI layer over the top.
49Controllers330Endpoints70Prisma modelsHRM covers employee records, attendance with break tracking, leave requests, payroll, tax slabs, payslips and timesheets. CRM covers lead sources, pipeline stages and client and contact management. Delivery covers projects, tasks, comments and tickets with threaded replies. Finance covers invoices, payments, expenses, purchase orders, suppliers and stock movements.
The AI layer is not decoration. Smart view, team pulse, cash flow forecasting and retention scoring all read the same operational tables the rest of the suite writes to.
Built multi tenant from the first migration: organisations, subscriptions, plan limits, API keys and webhooks. Access is dynamic RBAC through role, permission and role permission tables rather than a fixed enum, so a tenant can define its own roles.
A Flutter companion app carries dual database sync for offline field use, GPS backed attendance and voice note transcription.
NestJSPrismaNext.js 15PostgreSQLTypeScriptFlutterFleet, shipment and invoicing for a working logistics operator, in production at tms.induslogistics.pk.
20Modules135Endpoints29Models35PagesOperations covers shipments, routes, sites and container types. Fleet covers vehicles, drivers, dedicated vehicles and vehicle logs. Finance covers invoices, payments and invoice notes.
The data layer is where the real work sits: client imports read arbitrary customer spreadsheets through a saved column mapping, and Elasticsearch backs search across the whole record set.
Shipments move DRAFT to DISPATCHED to IN TRANSIT to DELIVERED to INVOICED, with proof of delivery tracked separately through its own states. Invoices carry thirteen expense types drawn from how the business actually bills, including toll tax, bhatta, detention and adda charges.
Vehicles are modelled as owned or outsourced because the cost maths differs. Aging dashboards sit over receivables, and five role tiers separate super user, admin, finance, operations and viewer.
NestJSPrismaPostgreSQL 15ElasticsearchNext.jsRadix UIDockerCaddyGovernment document verification. An operator scans a physical document, fits it to a page size, and prints a signed QR onto the original sheet.
13Controllers66Endpoints16ModelsThe server copy and the paper stay geometrically identical because a shared geometry package owns every millimetre calculation. The preview and the printed PDF cannot disagree, because neither is allowed its own coordinate maths.
The monorepo is split along a security boundary rather than a convenience one. The API is the sole holder of the QR signing key and the storage encryption key. The imaging sidecar is Python with OpenCV and NumPy, running non root on a read only filesystem, and PDF rasterisation happens there rather than anywhere near the API.
Anyone can verify a document at a public token URL without logging in. Everyone who issues one goes through forced two factor onboarding with TOTP and recovery codes, and Argon2 for passwords.
Access is region scoped across five tiers, from super admin down to auditor. Documents move DRAFT to PENDING APPROVAL to ACTIVE, with REVOKED and ARCHIVED as terminal states. Printer calibration profiles are stored per device, because no two office printers agree on where the page starts.
NestJSNext.js 15Python FastAPIOpenCVPostgreSQLRedisMinIOA multi tenant e learning marketplace split across six repositories, with live video classrooms and two payment rails.
6Repositories300+Endpoints58Models95PagesSix services: the core NestJS backend, a separate auth service, a Socket.IO gateway, a cron scheduler, the Next.js frontend and the Terraform infrastructure that runs all of it.
Learning covers courses, enrolments, progress, quizzes and certificates. Live covers Agora RTC video rooms with a lobby, host controls, spotlight and raise hand. Corporate covers departments, bulk enrolment, subscriptions and leaderboards. Commerce runs Stripe and PayPal side by side, plus wallets and trainer payouts. Social covers real time chat, group messaging, discussions and announcements.
Four separate role dashboards: student, trainer, corporate leader and admin. Sign in through Google or Apple, with the interface localised.
Infrastructure is Terraform on AWS: EC2, VPC, CloudFront, S3, ECR, SSM and IAM wired to GitHub OIDC, so deployments authenticate without a stored key.
NestJSTypeORMPostgreSQLSocket.IOgRPCNext.jsTanStack QueryTerraformA multi tenant intelligence hub that reads a company's email, documents and portal KPIs, then answers questions about them in plain language.
14tRPC routers18ModelsIngests company email through Gmail and Outlook, documents as PDF, DOCX, CSV and XLSX, and scrapes KPIs out of web portals using autonomous Playwright agents where no API exists.
The API is Express with tRPC across fourteen routers: auth, user, admin, billing, KPI, source, email, document, chat, agent, alert, briefing and settings.
Daily briefings, configurable alert rules and a full audit log sit on top. RPA connectors ship for Shopify, QuickBooks and Google Analytics, with Temporal orchestrating the long running workflows so a half finished scrape is never left in limbo.
Stripe handles billing. Documents rest in S3 under KMS encryption. Four roles: owner, admin, analyst and viewer.
ExpresstRPCPlaywrightTemporalMongoDBRedisStripeAWS KMSOffline first safety compliance for construction. Foremen work a full site with no connectivity and sync when they get it back.
20Controllers28Collections6WorkersOffline first is the architecture, not a feature flag. The web app is a PWA that holds inspections, tool checks and toolbox deliveries locally, with an outbox the foreman can see, and a sync module on the API that reconciles on reconnect.
Five workspaces in one monorepo. Six background workers carry the slow work: PDF generation, Excel import, compliance reconciliation, reminder dispatch, email delivery and credential sweeps.
Sensitive incident and claim data lives in separate encrypted collections from the records that reference them, with field level encryption in the database package rather than scattered through controllers.
Bilingual English and Spanish throughout, because the field crews are. Five role tiers run foreman, superintendent, safety, division manager and executive.
Next.js 15 PWANestJSMongoDBRedisBullMQMinIOA separate application sharing SCTMP's database read only, running training sessions and issuing the certificates that come out of them.
13Controllers49Endpoints14CollectionsThe interesting constraint is the shared database. TCMS reads employee and organisation data from SCTMP without write access, and writes only its own prefixed collections. Two applications, one source of truth, no sync job between them.
Sessions run on QR check in with digital signatures captured at the door. Attendance sheets and certificates generate automatically from what the session recorded.
Verification handles two kinds of item: certificates TCMS issued itself, and training records that belong to SCTMP. Both resolve from the same public QR endpoint with no login.
Four roles: admin, instructor, manager and employee.
NestJSMongoDBRedisBullMQAWS S3TurborepoCohort based corporate training. Companies move through phases together, with content a trainer can override per company.
19Pages40API routes14ModelsCompanies are organised into groups with assigned trainers and a primary trainer. Content is templated once and overridden per company, so a cohort sees the shared curriculum plus whatever its own trainer replaced.
Delivery is phase based. Each phase carries its own data and submission state, tracked from in progress to submitted, with a participant portal separate from the trainer and admin surfaces.
Access is two tier by design. Platform roles are super admin and trainer. Company roles are owner, admin, manager and member, so a company can run its own hierarchy without touching platform permissions.
Sign in is OTP based with invite tokens. A leaderboard and live workspace presence sit over the top.
Next.js 16React 19TypeScriptPrisma 6PostgreSQLDockerUpload a request for quote spreadsheet, and get back a priced comparison across up to nine vendor sites.
The pipeline takes an RFQ spreadsheet, detects categories, searches up to nine vendor websites through Playwright, and exports a comparison workbook with the best price per line.
Matching is the hard part in procurement, so it is not left to a single pass. A normalisation dictionary holds confirmed product names with a human confirm loop, and inventory imports run fuzzy matching with feedback captured for later runs.
Vendor sessions are handled explicitly: authentication, cookie upload and per vendor health checks, so a silently expired login shows up as a health failure rather than an empty result.
Every run is kept in history with saved results and metrics.
Next.jsMongoDBClaude SDKPlaywrightBullMQDockerA self owned MCP server that replaces a paid analytics connector, wiring Search Console, GA4 and Google Ads directly into Claude.
17ToolsSeventeen tools across three Google services. Search Console covers query, quick wins, low CTR, cannibalisation, content decay, brand split, period comparison, URL inspection and sitemap listing. GA4 covers property listing and report runs. Google Ads covers customer listing and querying. Two cross source tools handle page performance and paid versus organic overlap.
It runs on Cloudflare Workers behind Google OAuth, so the credentials stay with whoever owns the data and nothing routes through a third party vendor.
Ships with a bundled SEO analyst skill, so the tools arrive with the judgement to use them rather than as a bare API surface.
Deployed by GitHub Actions and currently in daily use.
Cloudflare WorkersHonoMCP SDKGoogle OAuthGitHub ActionsA full retail system: counter, stockroom and storefront, running off one inventory ledger.
200Routes34Models40+TablesThe counter runs barcode scanning and a cash register. The storefront runs customer accounts and checkout. Both write to the same sales tables, distinguished by origin rather than duplicated.
Stock is tracked properly rather than as a number on a product: inventory per warehouse, a stock ledger for movement, transfers between locations and adjustments with a reason.
Buying and selling both carry returns. Sales, sales returns, quotations, purchases and purchase returns all settle against payments, with discount rules and coupon codes applied at the till.
Multi branch and multi warehouse from the schema up. Five roles: admin, manager, accountant, cashier and inventory.
LaravelMySQLBladeREST APIA school ERP with four separate portals, covering the academic year from timetable to report card.
213Routes19ModelsAcademic structure covers classes, subjects, class subject mapping, timetables and class teacher assignment.
Day to day covers attendance, homework with submission tracking, and examinations with schedules, a marks register and configurable grade bands.
Around the edges: fee collection, a notice board, in app chat with last seen, and a calendar.
Four portals against one dataset: admin, teacher, student and parent, each with its own dashboard and route middleware.
LaravelMySQLBladeThe sales pipeline The Tech IO runs on: enquiry in, estimate out, stages configurable rather than hardcoded.
33Routes7ModelsPipeline stages are data, not an enum, so the sequence from new lead through contacted, estimate sent and negotiation to won or lost can be reshaped without a migration.
Enquiries carry expected revenue and win probability, which is what makes the pipeline forecastable rather than just a list.
Estimates generate with line items and a stated objective, against customers that hold more than one contact number because that is how the business actually reaches them.
LaravelMySQLBladeTracks every software licence an organisation holds, who is using it, what it costs a year and when it lapses.
50Routes14ModelsThe catalogue carries approval state, annual cost and renewal date, with renewals recorded against a full history rather than overwriting the previous term.
Licences assign to employees through their own table, so a seat can move without losing the record of who held it.
The organisation is modelled as city, then department, then division, then employee, restructured across several migrations as the real hierarchy became clear.
Managers are scoped to cities, so a regional manager sees a region. Three roles: admin, manager and staff. Vendor records and budget reporting close the loop.
LaravelMySQLBladeTruck and driver booking on a Laravel backend, feeding native Android and iOS apps that stay in step.
Customers request a vehicle, the system processes the request, and both sides track the job to completion.
The hard part was never the booking form. It was request processing that holds under load, and one backend contract two native apps could both trust.
One REST surface serves Kotlin on Android and Swift on iOS, so neither platform drifts. Real time updates come from the same booking engine that owns the data rather than a side channel.
Led the backend architecture and coordinated the two developer native mobile team.
LaravelMySQLREST APIsKotlinSwiftAssigns jobs to field employees and keeps the office and the van looking at the same record.
Owned end to end, from the entity relationship design through to deployment.
The problem is field to office data sync: work is recorded away from a desk and has to arrive complete, in order, without overwriting what the office changed meanwhile.
Laravel over SQL Server, with REST endpoints carrying the field side.
LaravelSQL ServerBladeREST APIsWeb based warehouse management with inventory tracking, stock control and reporting that lands in an inbox rather than a dashboard nobody opens.
Inventory tracking and stock management over SQL Server.
Reporting generates PDF and Excel on a schedule, because warehouse reporting is consumed as an attachment, not a screen.
Deployed through Azure CI/CD.
LaravelSQL ServerAzureA long running enterprise platform for a Japanese corporation, still receiving features.
React front end over an Express and PostgreSQL backend.
The engagement is continuous delivery rather than a fixed scope build: features ship against a live platform on an ongoing basis.
Serves traders working on accident damaged vehicles.
ReactExpress.jsPostgreSQLA five page responsive corporate site with a secure PHP backend behind its forms.
Five pages, responsive across breakpoints.
The backend carries CSRF protection on form handling rather than accepting whatever posts to it.
HTML5CSS3JavaScriptPHPFour plugins written to fill the gaps between what WooCommerce ships and what a store actually sells with.
4PluginsCustom discount rules beyond the built in coupon model.
Woo Zee, a storefront extension.
Lead download, for exporting captured leads out of WordPress.
A testimonials carousel built for a design client.
PHPWordPressWooCommerceA full storefront for an imported supplement brand, plus the marketing that drives it.
WooCommerce storefront built and maintained.
Ran the demand side as well as the build: digital marketing, paid ad campaigns and WhatsApp conversion funnels.
WordPressWooCommerceAn e commerce brand built for the Pakistani market, sales funnel and positioning included.
Storefront build paired with sales funnels.
Brand strategy for a premium product in a price sensitive market.
WordPressWooCommerceOwned and operated end to end, from sourcing through delivery. The one where the system answers to revenue directly.
Built the store, then ran it: sourcing, listing, fulfilment and delivery.
Social media marketing run as the primary acquisition channel.
Operating what you build changes how you build it. This is where that came from.
WordPressWooCommerce