A multi-tenant product catalog and inventory API built on ASP.NET Core (.NET 10) and MongoDB. Portfolio skill-demo focused on .NET + NoSQL: genuinely different attribute shapes per product category, structural tenant isolation, faceted search via a MongoDB aggregation pipeline, and (fed by a real NATS domain-event stream) an independent MongoDB projection service plus a dedicated Meilisearch full-text search index.
See docs/project-memory/brief.md for
what this is and why, and
docs/project-memory/decisions/ for the
architecture decision records (multi-tenant isolation, schema/indexing,
auth, faceted search).
export FLEXCATALOG_JWT_SECRET=$(openssl rand -base64 48)
export FLEXCATALOG_MEILI_MASTER_KEY=$(openssl rand -base64 24)
docker compose up --buildAPI at http://localhost:8080. Interactive docs at /scalar (in
Development, which is docker-compose's default). Demo data (two tenants,
three users, six products) is seeded automatically on first startup --
see docs/project-memory/ops.md for
credentials and details.
curl -X POST http://localhost:8080/api/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin@acme.test","password":"Passw0rd!"}'dotnet test tests/FlexCatalog.UnitTests/FlexCatalog.UnitTests.csproj
dotnet test tests/FlexCatalog.IntegrationTests/FlexCatalog.IntegrationTests.csproj # needs Dockersrc/FlexCatalog.Api/ The API (see architecture.md for layering)
src/FlexCatalog.Contracts/ Shared event/search-document contracts
src/FlexCatalog.InventoryProjector/ Independent NATS consumer -> MongoDB read-model
src/FlexCatalog.SearchIndexer/ Independent NATS consumer -> Meilisearch index
tests/FlexCatalog.UnitTests/ No external dependencies
tests/FlexCatalog.IntegrationTests/ Testcontainers + real MongoDB/NATS/Meilisearch
docs/project-memory/ Brief, requirements, architecture, security,
testing, ops, ADRs, risk, backlog, handoff