Skip to content

Soko Commerce

Headless commerce on .NET 9 with CQRS, its own identity server, search and durable workflows

Admin dashboard reading products from the .NET Admin API (demo catalogue, local identity stand-in)1 / 3

Soko is a multi-channel commerce platform with separate admin and storefront APIs, an identity server and a React admin dashboard. I contributed to the backend and the dashboard as part of a larger team.

The problem

Merchants needed one catalogue that could sell through several channels, with variants, facets, collections, promotions, auctions and stock across locations.

What I built

A clean architecture solution with Domain, Application, Infrastructure, Identity, Admin API and Storefront API projects. Application logic lives in MediatR handlers. Domain events project changes into Elasticsearch, Temporal runs asset and indexing workflows, and OpenIddict issues tokens with Google and Facebook sign-in.

Results

  • Three API hosts run on a staging server behind Traefik with Let's Encrypt, deployed by GitHub Actions on every push to develop.
  • Admin dashboard ships in several languages through Lingui.

Features

  • Products, variants, facets and collections
  • Orders, customers, suppliers and stock locations
  • Promotions, taxes, zones and shipping
  • Auctions
  • Runtime-configurable custom fields
  • Elasticsearch-backed search
  • Customer clustering experiments with ML.NET

How it's put together

About 170 MediatR handlers across feature folders, three API hosts and a supporting stack of PostgreSQL, Elasticsearch, Redis, Temporal and MinIO.

  • OpenIddict authorization server with external Google and Facebook providers
  • Hangfire for background jobs and Temporal for long-running workflows
  • React dashboard with TanStack Router, TanStack Query and Lingui
  • Swagger UI for the E.D.G.E School Management API with its description and the first endpoint groups
    Web apps2025

    E.D.G.E school management system

    Genesis AI Labs

    School platform covering registration, attendance, marks, fees and timetables, with a DDD backend and a React admin

    Led the buildNestJSMikroORMPostgreSQL+13
  • Telecom LBS operator dashboard in dark mode with service health cards for the service, ClickHouse, RabbitMQ and the SMS, voice and HLR gateways, all operational, and totals of 3,810 CDRs, 1,131 low-balance detections (29.69 %), 552 SMS and 276 flash calls today
    Backends & APIs2026

    Beep Call

    Telecom low-balance service

    Real-time call-record processing that turns failed low-balance calls into call-me-back SMS and flash calls

    Solo buildJavaSpring BootKafka+9
  • Team Pulse home page with the headline Teamwork Just Got Smarter with AI, download and sales buttons, and a preview of the chat app with team channels
    Web apps2025

    Team Pulse website

    Team Pulse

    Marketing, docs and pricing site for a team chat product, with two CMSs and push-to-deploy on Docker

    ContributorNext.jsReactTailwind CSS+8