Client systems I shipped and kept running.
These are platforms I joined and owned the parts that fail quietly: billing, identity, APIs, mobile, and AI on real data. Most client names are under NDA. ClickTech Hub is the exception.
Names under NDA use a generic industry title instead of the real product name.
ClickTech Hub
ClickTech Hub is a membership ecosystem for marketers, freelancers, and operators. Three products sit under one subscription so members learn, create, and run ads without juggling a pile of separate tools.
Hub
The learning and community product: courses, challenges, playbooks, and the members area where accounts, billing, and progress actually live.
Omni AI
An in-product workspace across many AI models for research, writing, design, and video, included with membership instead of a separate login for each tool.
Adzooma
Paid-ads tooling for Google, Microsoft, and Meta, so campaign work happens in the same ecosystem as the courses and AI workspace.
I owned the subscription lifecycle across Recurly, Stripe, and Chargebee: reactivation after declined payments, cancellation, Free Plan access, and the invoicing edge cases that recover failed payments instead of leaving members on the wrong plan. When production billing broke, I traced it through CloudWatch logs and webhooks and coordinated fixes across teams.
I reviewed high-risk PRs before they shipped, including a billing-reconciliation engine, looking for authorization holes, unsafe migrations, and Redis-lock mistakes. Security work on NestJS authorization, GDPR deletion requests, and fail-closed sessions landed as part of shipping product, not as a side project. Login moved to WorkOS passwordless Magic Auth.
I designed push notifications from scratch: token registry, Expo Push with receipt polling and dead-token cleanup, and Redis locks so scheduled jobs stayed safe across replicas. That sat next to the company's first React Native / Expo app for iOS and Android, with EAS builds, GitHub Packages, and shared TypeScript contracts so billing and engagement logic lived once.
I built a product-analytics path where purchase events fire once, only for real conversions, and a failed emit never breaks checkout. PostHog and Sentry showed whether features moved engagement, not only whether they deployed. I also took the members area from legacy React to Next.js 16 / React 19 at production parity, and kept releases safer with idempotent MySQL migrations, guarded backfills, and deploy runbooks across a four-app TypeScript monorepo.
Stack: TypeScript, NestJS, Next.js, React, React Native / Expo, TypeORM, MySQL, Redis, WorkOS, Recurly / Stripe / Chargebee, Docker, Kubernetes, GitHub Actions, AWS / CloudWatch, PostHog, Sentry, shadcn/ui
CTV advertising platform (name under NDA)
A connected-TV advertising product for teams that already have Instagram and phone footage but need 16:9 spots publishers will actually run. Creative Library holds finished videos. Creative Studio is the in-product editor that gets that footage onto TV lengths without an agency.
After I shipped Creative Studio, the client ran a successful demo. Investors responded to the editor, and the company closed further funding to keep building.
I owned the editor end to end: a Vue timeline and 1920×1080 canvas, a NestJS draft and export API, and an FFmpeg worker. Advertisers can trim and split clips, letterbox vertical social video with a brand fill, and place text, logos, and QR codes (destination URL and UTM). Preview in the browser is approximate; publish is the mastered file.
Footage reaches the library from upload, from an Instagram URL, or from Studio publish. Publish writes a new library creative and waits until encode finishes, then shows publisher checks on duration and connected-TV encode rules so a 15, 30, or 60 second spot is what campaigns actually use.
The hard path was production, not a mock editor: optimistic concurrency on drafts, tenant-scoped image assets, and an FFmpeg pipeline that pads short compositions to 15, 30, or 60 seconds and encodes for TV instead of a phone feed. I built Studio on their existing identity, blob storage, job queue, and library. I did not replace that platform.
Stack: TypeScript, Vue 3, Vuetify, NestJS, TypeORM, SQL Server, BullMQ, FFmpeg, Azure Blob, Redis, Auth0, Docker
Agentic marketing platform (name under NDA)
A platform for marketing teams to create, configure, and run modular AI agents: chat, scheduled and event triggers, and knowledge pulled from Google Drive, Sheets, and site crawlers.
I migrated a legacy .NET API to a modular NestJS backend so multi-agent orchestration could grow without carrying the old architecture forward. Agent creation, configurable tools, and trigger execution were the path to less manual campaign setup per client.
I added citation generation on agent answers so users could see where retrieved context came from, and wired OAuth 2.0 plus ingestion pipelines so the knowledge base stayed fresh. On the Vue side I shipped agent-configuration features and fixed the usability issues that blocked clients from running the product themselves.
I set up GitHub Actions for deploy reliability, fixed stability issues across the stack, and recorded staging demos so stakeholders could react before production.
Stack: TypeScript, NestJS, Node.js, Cosmos DB, SQL Server, Azure, Vue.js, OpenAI Agents SDK, Google APIs, GitHub Actions
Fitness influencer platform (name under NDA)
Two linked products: a social-management console for fitness influencers, and a mobile app for their audiences. The console classifies and clears junk comments, reports on posts, and keeps operations off the influencer's plate.
I designed and built the social-management features that mattered under load: AI comment classification, video transcription and summarization, and downloadable reporting with actionable insights.
I put the heavy AI work on AWS queues and serverless workers so high volumes of posts and comments did not stall the product path, and kept the backend honest as data grew.
Stack: TypeScript, NestJS, Prisma, PostgreSQL, AWS (CDK, ECR, Lambda, SQS, EventBridge, S3, Cognito, CloudFront), Azure, Docker, OpenAI, LangChain, React, Next.js, React Native (Expo), Turborepo, Sentry, Swagger
Financial advisory platform (name under NDA)
A B2B system for asset brokers and financial advisors: household portfolios, buys, sells, transfers, and fund movements. Advisor actions become tickets; brokers fulfill them through external financial platforms, with audit trails and notifications across many event types.
I shipped features across the broker and advisor portals on a shared NestJS backend, including email via AWS SES and the workflows that keep ticketed financial work moving.
The platform is multi-tenant: stable broker tenants manage firm tenants that each get isolated web clients, APIs, databases, and secrets. I worked inside that isolation model and tightened the code so the next change was safer to ship.
Stack: React, Next.js, NestJS, Material UI, Apollo, GraphQL, AWS SDK, TypeORM, PostgreSQL, Redis, React Email, Docker, Turborepo, TypeScript
AI chatbot platform (name under NDA)
A chatbot platform for businesses that need bookings, orders, and customer help around the clock, plus a personal-assistant mode that can summarize conversations and cut repetitive work.
I took a high-level brief and built the application architecture from scratch: NestJS and Next.js with LangChain / OpenAI, realtime over WebSocket, and the auth and storage pieces on Google Cloud.
I kept scope tied to business outcomes (bookings, orders, support) and stayed in direct contact with stakeholders so the product moved instead of stalling on vague requirements.
Stack: LangChain, OpenAI, TypeScript, NestJS, PostgreSQL, TypeORM, Redis, Next.js, React, Tamagui, Turborepo, Apollo, GraphQL, WebSocket, GitHub Actions, Zustand, Firebase Authentication, Google Cloud, Jest
AI mental healthcare app (name under NDA)
A mobile app that takes how a user is feeling, runs it through AI, and returns advice and exercises. The engagement included a redesign, new features, and a move from a monolith toward services that could scale separately.
I worked across client and server: new features, refactors, and a shared UI kit published for reuse across services, plus an analytics package so the team could see what users actually did.
I integrated Stripe for payments and covered the paths that break with tests, so the redesign could ship without leaving billing or reliability as an afterthought.
Stack: React, React Native, NestJS, Node.js, Express.js, GraphQL, Apollo, Storybook, Next.js, Jest, Docker, AWS (S3, Lambda), Firebase Dynamic Links, GraphCMS, Stripe
Wellness platform (name under NDA)
An Australian marketplace that connects beauty and cosmetics practitioners with clients. Practitioners get verified and list services; clients search, book, earn rewards, leave reviews, and post job requests in an Upwork-like flow.
I worked directly with stakeholders to turn marketplace requirements into shippable changes on top of Sharetribe, including UI and UX improvements clients could feel.
I implemented maps and advanced search with Algolia so finding the right practitioner was not a dead end in a long directory.
Stack: TypeScript, React, Sharetribe, CSS Modules, MUI v4/v5, Algolia, Redux
Hotel management system (name under NDA)
A management system for a European hotel chain: advance bookings against real availability, check-in/out, and employee scheduling including automatic adjustments when shifts swap.
I designed the REST API and the booking and allocation logic that picks a suitable room from guest details instead of leaving admins to do it by hand.
I built the employee schedule tools and the swap logic that updates everyone involved, then took the stack through testing and deployment.
Stack: Java, Spring Boot, Spring Data JPA, Spring Web, Thymeleaf, PostgreSQL, Docker, HTML, CSS, JavaScript, Tailwind CSS
Ticket booking API (name under NDA)
A bus ticket booking product needed a new REST API to replace an error-prone, low-uptime predecessor used by web and mobile clients.
I designed and built the booking and payment API for maintenance, scale, and future providers, with async work where load demanded it.
Performance and reliability work on the replacement path contributed to a 17% increase in monthly revenue. Unit and end-to-end tests covered the paths that used to fail silently.
Stack: Java, Spring Boot, Spring Data JPA, Spring HATEOAS, Spring Web, MySQL, H2, JUnit, Docker
If you want this kind of ownership on your product, see how I like to collaborate.
Work with meClients and colleagues have said the same things in writing.
Read the reviews