Smart Movie Catalog is an early-stage movie catalog application with an ASP.NET Core backend and an Angular frontend.
- Backend: ASP.NET Core 10 / C# in
backend/src/SmartMovieCatalog.Api. - Frontend: Angular 21 / TypeScript in
frontend. - SPA integration: ASP.NET Core SpaProxy.
- Solution:
SmartMovieCatalog.slnx.
Persistence, local JWT authentication, Clean Architecture layers, and Wolverine-based in-process CQRS are implemented and documented. Do not assume external messaging, refresh tokens, registration, password recovery, or AI-provider integration until those choices are implemented or documented through an architecture decision.
.
├── AGENTS.md
├── CONTEXT.md
├── DESIGN.md
├── README.md
├── SmartMovieCatalog.slnx
├── docker-compose.yml
├── docker-compose.override.yml
├── eng/
│ ├── build/
│ ├── docs/
│ ├── scripts/
│ ├── docker/
│ └── .env.example
├── backend/
│ ├── src/
│ │ ├── SmartMovieCatalog.Api/
│ │ ├── SmartMovieCatalog.Application/
│ │ ├── SmartMovieCatalog.Contracts/
│ │ ├── SmartMovieCatalog.Domain/
│ │ └── SmartMovieCatalog.Infrastructure/
│ └── tests/
│ ├── SmartMovieCatalog.Api.Tests/
│ ├── SmartMovieCatalog.Application.Tests/
│ ├── SmartMovieCatalog.Domain.Tests/
│ └── SmartMovieCatalog.Infrastructure.Tests/
├── frontend/
- .NET SDK compatible with
net10.0. - Node.js and npm compatible with the Angular project.
- Installed frontend dependencies under
frontend. - Docker Desktop or another Docker Engine compatible with Docker Compose.
From the repository root:
dotnet run --project eng/build/_build.csproj -- Compile
dotnet run --project eng/build/_build.csproj -- Test
dotnet run --project eng/build/_build.csproj -- BuildFrontendNUKE targets:
.\eng\build.ps1 Compile
.\eng\build.ps1 Test
.\eng\build.ps1 Coverage
.\eng\build.ps1 Mutation --MutationScope both
.\eng\build.ps1 Clean
.\eng\build.ps1 RunLocalLegacy wrappers are available in eng/scripts/*.ps1.
Docker:
docker compose up --buildThis starts:
- ASP.NET Core API on
http://localhost:5048. - PostgreSQL on
localhost:5432.
The API container receives ConnectionStrings__DefaultConnection and JWT settings through environment variables. Set JWT_SIGNING_KEY in .env or your shell before starting the API; do not commit real signing keys or database credentials.
The backend auth endpoints are:
POST /api/auth/authenticateGET /api/auth/me
The Angular home page is available at the SPA root (/). The Angular login screen is available at /login. It calls POST /api/auth/authenticate, then GET /api/auth/me, through same-origin /api routes. In local frontend development, frontend/src/proxy.conf.js proxies /api to the backend.
Health check:
curl http://localhost:5048/healthFrom frontend:
npm run build
npm test -- --watch=false
npm startLocal environment:
cp eng/.env.example .envThe example values are for local development only. Do not commit real secrets in .env.
Useful PostgreSQL checks:
docker compose exec postgres pg_isready -U smartmovie -d smart_movie_catalog
docker compose exec postgres psql -U smartmovie -d smart_movie_catalog -c "select version();"Apply EF Core migrations after configuring the local connection string:
dotnet ef database update --project backend/src/SmartMovieCatalog.Infrastructure --startup-project backend/src/SmartMovieCatalog.ApiOn API startup, non-test environments apply EF Core migrations and can seed an optional admin user by supplying non-versioned configuration:
ADMIN_SEED_EMAILADMIN_SEED_PASSWORDADMIN_SEED_NAME
These .env keys are mapped by the local scripts and Docker Compose to AdminSeedUser:* configuration. Leave ADMIN_SEED_EMAIL and ADMIN_SEED_PASSWORD empty to disable the seed. Never commit real admin credentials.
Example local admin seed:
ADMIN_SEED_EMAIL=admin@example.com
ADMIN_SEED_PASSWORD=Password123!
ADMIN_SEED_NAME=AdminThe seed runs only during API startup. After changing .env, restart the API process or recreate the Docker Compose API container:
.\eng\scripts\run-local.ps1
docker compose up -d --force-recreate api- Backend entry point:
backend/src/SmartMovieCatalog.Api/Program.cs. - Backend HTTP endpoints: Minimal API feature slices under
backend/src/SmartMovieCatalog.Api/Features. - Auth endpoint mapping:
backend/src/SmartMovieCatalog.Api/Features/Auth. - Frontend application:
frontend/src/app. - Frontend auth module:
frontend/src/app/auth. - Frontend visual system:
frontend/DESIGN.md. - Root design policy:
DESIGN.md.
- Architecture:
eng/docs/ARCHITECTURE.md - Domain direction:
eng/docs/DOMAIN.md - API conventions:
eng/docs/API.md - Frontend conventions:
eng/docs/FRONTEND.md - Testing policy:
eng/docs/TESTING.md - Security rules:
eng/docs/SECURITY.md - Engineering conventions:
eng/docs/CONVENTIONS.md - Roadmap:
eng/docs/ROADMAP.md - Architecture decisions:
eng/docs/adr
- Do not commit secrets, credentials, certificates, connection strings, or private keys.
- Do not edit generated or vendor output such as
node_modules,bin,obj,dist,.vs, or.angular/cache. - Keep backend and frontend contracts synchronized when changing API behavior.