# AI_CONTEXT.md

This repository is a Blazor sample that demonstrates a real-world “browser UI calls server API” architecture with PostgreSQL.

## Solution layout
- `Freman.Sample.Web` (Server / Host)
    - ASP.NET Core host
    - EF Core + PostgreSQL
    - Minimal API endpoints under `/api/*`
    - Applies migrations automatically in Development
- `Freman.Sample.Web.Client` (Client / Browser)
    - Blazor WebAssembly UI
    - Uses `HttpClient` to call server endpoints
    - `/notes` page is WASM interactive with `prerender: false`
    - Reusable UI components live under `Client/Components` (e.g., `ConfirmModal.razor`)
- `Freman.Sample.Web.Contracts` (Shared)
    - DTOs + request models shared between server and client
    - Examples: `NoteDto`, `CreateNoteRequest`

## Run modes (important)
This solution uses mixed render modes.

- Client pages that inject `HttpClient` should run in the browser:
    - `@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: false))`
- Server-only pages can use:
    - `@rendermode InteractiveServer`

Why `prerender: false`?
- Without it, the component may be instantiated on the server during prerender, where client-only DI services (like the WASM `HttpClient`) are not available.

## How to run (happy path)
- Create `.env` next to `compose.yaml`:
    - `POSTGRES_PASSWORD=...`
- Run:
    - `docker compose up --build`
- Navigate to:
    - `/notes`

## API
- `GET /api/notes`
- `POST /api/notes`
- `DELETE /api/notes/{id}`

## Data access
- EF Core DbContext: `AppDbContext` (server)
- Entities are server-only (do not share with Client)
- Contracts are shared via `Freman.Sample.Web.Contracts`

## Conventions
- Server endpoints live in `Freman.Sample.Web/Endpoints/*` and are mapped from `Program.cs`
- Prefer small, feature-scoped endpoint files (e.g., `NotesEndpoints.cs`)
- Avoid duplicating DTOs in Client; use `Freman.Sample.Web.Contracts` instead