.NET Core 3.1 clean architecture — 20 controllers, Stripe, EF Core MySQL, JWT + Google OAuth, S3, SendGrid.
Before the Next.js rewrite, DWUL ran on a .NET Core 3.1 monolith — carts, subscriptions, childcare programs, messaging threads, notifications, and provider payouts all flowed through one Stripe integration and a shared MySQL schema.
Four-layer ASP.NET Core Web API — controllers, services, Unit of Work repositories, entities — JWT + Google OAuth with six RBAC policies, Stripe cart services, S3 uploads, SendGrid mail, Swagger + NLog hardened for production operations.
PaymentIntent flows had to be idempotent under webhook retries; program and experience payloads needed JSON flexibility inside relational tables; and specialized repositories had to call stored procedures via Dapper without fighting EF Core change tracking.
Controllers thin; services own orchestration; repositories isolate SQL.
JWT bearer + Google ID token validation with six authorization policies.
PaymentIntent creation, customer lookup by email, client secret handoff to frontends.
EF Core for most CRUD; Dapper for stored procedures and reporting paths.
AWS SDK for S3 objects; SendGrid for transactional templates.
Swagger for integrators; NLog sinks; deployment configs for Misty’s environments.
Twenty controllers spanning accounts, programs, carts, subscriptions, messaging, reviews, and payouts — enough coverage that the mobile and web clients could share one API while Stripe and MySQL invariants stayed centralized in services.
Twenty controllers spanning accounts, programs, carts, subscriptions, messaging, reviews, and payouts — enough coverage that the mobile and web clients could share one API while Stripe and MySQL invariants stayed centralized in services.
Transactional boundaries around multi-table childcare writes.
Dapper escape hatches avoided EF migrations for vendor stored procedures.
Client-side confirmation with server-side idempotency keys on webhook replay.
JSON columns let programs evolve faster than weekly schema releases.
We take on a small number of projects at a time. If the problem is hard, we're interested.