Short summary
Top-level layout and where to find key code.
Repository layout (high level)
service/Api/— main backend projects:Api(host),Module(8 business modules),Shared(infrastructure),Migrations.infra/Aspire/— AppHost orchestration projects (Aspire AppHost + service defaults).service/Embedding/— Python FastAPI embedding sidecar.app/— front-end applications: activeAdmin(pnpm), legacyReSys.Admin(npm), andStore.ApiTests/— HTTP test files for manual API testing.
Projects & entry points
- Solution:
ReSys.Shop.slnxreferences AppHost and backend projects underservice/Api/src/. - Backend entry:
service/Api/src/Api/Program.cs. - Aspire entry:
infra/Aspire/src/ReSys.AppHost/AppHost.cs. - Frontend dev entry:
app/Admin/index.htmlandapp/Store/index.htmlwith Vite configs. - Python entry:
service/Embedding/src/main.py.
Evidence
ReSys.Shop.slnxservice/Api/src/Api/Program.csinfra/Aspire/src/ReSys.AppHost/AppHost.csapp/Admin/index.html,app/Store/index.htmlservice/Embedding/src/main.pyApiTests/README.md
[ASK USER]
app/ReSys.Admin/is a legacy npm-based admin SPA. Is it still needed, or can it be removed now thatapp/Admin/is the active pnpm-based SPA?
| Path | Purpose | Evidence |
|---|---|---|
service/Api/src/Api/ |
.NET API host — Program.cs, middleware pipeline, config | service/Api/src/Api/Program.cs |
service/Api/src/Module/ |
Business logic — 8 modules: Catalog, Identity, Inventory, Location, Ordering, Payment, Profile, Shipping | service/Api/src/Module/Module.csproj |
service/Api/src/Shared/ |
Shared infrastructure — persistence, auth, storage, caching, notifications, jobs | service/Api/src/Shared/Shared.csproj |
service/Api/src/Migrations/ |
EF Core migrations and database schema snapshots | service/Api/src/Migrations/Api.Migrations.csproj |
service/Api/tests/ |
.NET test projects — Api.Tests (integration), Module.UnitTests, Shared.UnitTests |
service/Api/tests/Api.Tests/Api.Tests.csproj |
service/Embedding/ |
Python FastAPI ML sidecar (Fashion-CLIP embeddings, uvicorn) | service/Embedding/pyproject.toml |
infra/Aspire/src/ReSys.AppHost/ |
Aspire orchestration — wires PostgreSQL, Redis, API, Embedding, SPAs | infra/Aspire/src/ReSys.AppHost/AppHost.cs |
infra/Aspire/src/ReSys.ServiceDefaults/ |
Aspire shared defaults — OpenTelemetry, health checks, resilience | infra/Aspire/src/ReSys.ServiceDefaults/Extensions.cs |
app/Admin/ |
Vue 3 Admin SPA — PrimeVue + Tailwind CSS (scaffold/WIP) | app/Admin/package.json |
app/Store/ |
Vue 3 Storefront SPA — Nuxt UI + Tailwind CSS | app/Store/package.json |
ApiTests/ |
HTTP test files (.http) for REST Client — manual API testing | ApiTests/README.md |
docs/codebase/ |
Codebase documentation (STACK, ARCHITECTURE, CONVENTIONS, etc.) | docs/codebase/STACK.md |
docs/superpowers/ |
Implementation plans and specs for recent features | docs/superpowers/plans/, docs/superpowers/specs/ |
guide/code-commenting/ |
Code commenting conventions and rules | guide/code-commenting/CommentingRules.xml |
.editorconfig |
Root code style rules for .NET, JSON, XML | .editorconfig |
Directory.Build.props |
Build-wide MSBuild properties (TFM, analysis, InternalsVisibleTo) | Directory.Build.props |
Directory.Build.targets |
Architecture validation targets (layer dependency checks) | Directory.Build.targets |
Directory.Packages.props |
Central Package Management version definitions | Directory.Packages.props |
- Main runtime entry:
service/Api/src/Api/Program.cs— .NET 10 WebApplication bootstrapper - Secondary entry points:
infra/Aspire/src/ReSys.AppHost/AppHost.cs— Aspire orchestration startup (all-in-one)service/Embedding/src/main.py— Python FastAPI uvicorn appapp/Admin/src/main.ts— Vue 3 Admin SPA bootstrapapp/Store/src/main.ts— Vue 3 Storefront SPA bootstrap
- How entry is selected:
dotnet run --project infra/Aspire/src/ReSys.AppHoststarts everything via Aspiredotnet run --project service/Api/src/Apistarts API alonepnpm run devinapp/Adminorapp/Storestarts SPA dev server aloneuv run uvicorn embedding.main:appstarts embedding service alone
| Boundary | What belongs here | What must not be here |
|---|---|---|
service/Api/src/Api/ |
Program.cs, appsettings, launchSettings, DesignTimeDbContextFactory | Business logic, persistence models, domain types |
service/Api/src/Shared/ |
Cross-cutting infrastructure: persistence (EF Core setup, specs, interceptors), auth (JWT, Identity, OAuth, guest sessions), authorization (feature metadata, permission registry), storage (IStorageProvider, Local/S3 abstractions), caching (HybridCache wrapper), notifications (email/SMS providers), background jobs (Hangfire), observability (OTel, correlation, health checks), governance (OpenAPI, validation conventions, enum/case converters), error handling (Result types, exception mapping) | Business-specific domain logic or module-to-module imports |
service/Api/src/Module/Catalog/ |
Products, variants, variant images, product options, taxonomies, taxons, taxon rules, option types, classifications, product search/filter, image embeddings, price history | Identity management, location data, user profiles, payment processing |
service/Api/src/Module/Identity/ |
Users, roles, permissions, auth (login/register/logout/sessions), email confirmation, password management, external OAuth, role-permission assignments | Product data, location data, user profiles/addresses |
service/Api/src/Module/Inventory/ |
Stock items, stock locations, stock reservations, stock transfers, stock movements | Product catalog data, user profiles, payment processing |
service/Api/src/Module/Location/ |
Countries, states/provinces, ISO code lookups, country calling codes | User data, product data |
service/Api/src/Module/Ordering/ |
Cart management, checkout, order lifecycle (create/list/view/status), cart expiry background jobs, order events | Payment processing, shipping calculation |
service/Api/src/Module/Payment/ |
Payment intents, payment method management, refund processing, webhook handlers, BogusGateway (dev/testing) | Order fulfillment, shipping |
service/Api/src/Module/Profile/ |
User profiles, addresses, wishlists, notification preferences | Authentication/authorization logic, product data |
service/Api/src/Module/Shipping/ |
Shipping method CRUD, shipping rate management, rate calculation, address estimation | Payment processing, order fulfillment |
service/Api/src/Migrations/ |
EF Core migration files (.cs), schema snapshots | Application logic, domain models |
service/Embedding/ |
Python ML inference (CLIP/Fashion-CLIP models), embedding generation API, image preprocessing, embedding caching | Business logic, database access, user management |
app/Admin/ |
Admin UI components, admin-specific views and stores | Storefront UI components, backend business logic |
app/Store/ |
Storefront UI components, customer-facing views, cart/catalog stores, checkout flow | Admin UI components, admin auth logic |
- File naming pattern (C#): PascalCase — e.g.,
Country.Extensions.cs,GetProductDetail.cs,Catalog.Extension.cs - File naming pattern (Vue/TS): PascalCase for components — e.g.,
App.vue,HomeView.vue; kebab-case for .http tests — e.g.,products.http - Directory organization pattern: feature-first vertical slices —
Features/{Admin|Storefront}/{FeatureName}/{Action}/(e.g.,Features/Admin/Products/Variants/Images/Upload/,Features/Storefront/Cart/Checkout/) - Domain layer separated:
Domain/{EntityName}/with partial class files (e.g.,Domain/Products/Variants/Variant.cs,Variant.Extension.cs,Variant.Validation.cs) - C# module entry: each module has
{Module}.Extension.cswithIServiceCollectionextension methods (e.g.,Catalog.Extension.cs,Identity.Extensions.cs) - Import aliasing (frontend):
@alias maps to./srcin both Admin and Store SPAs —app/Admin/vite.config.ts:13,app/Store/vite.config.ts:12
.codebase-scan.txt— Directory tree scan outputReSys.Shop.slnx— Solution project referencesservice/Api/src/Api/Program.cs— API entry point and DI wiringinfra/Aspire/src/ReSys.AppHost/AppHost.cs— Aspire service wiringservice/Embedding/src/main.py— Python entry pointapp/Admin/vite.config.ts— Admin Vite config with@aliasapp/Store/vite.config.ts— Store Vite config with@aliasDirectory.Build.targets— Layer dependency validation rules