# ASTRAIN

ASTRAIN is a dark-mode, mobile-first workout logbook. It runs a Blazor WebAssembly frontend and an ASP.NET Core minimal API backend (both on .NET 10) in a single container. The API is served under `/api`, while the UI is served at `/`.

## Features
- Exercises and routines management
- Routine runs with last-run weights
- User identification via 8-character key in the URL
- SQLite storage via Entity Framework Core

## Local development

### Run API (serves UI when published)

1. Restore/build:
   - `dotnet restore`
2. Run the API:
   - `dotnet run --project src/ASTRAIN.Api/ASTRAIN.Api.csproj`

### Run Client (for UI-only development)

- `dotnet run --project src/ASTRAIN.Client/ASTRAIN.Client.csproj`

## Docker

Build and run the single-container setup:

- `docker compose -f docker/docker-compose.yml up --build`

The app will be available at http://localhost:8080

## URLs

- `/exercises` or `/{userId}/exercises`
- `/routines` or `/{userId}/routines`

Opening a URL without a user id will generate a new user and redirect to `/{userId}/routines`.

## Data

SQLite database file is stored in `src/ASTRAIN.Api/Data/astrain.db` (or `/app/Data/astrain.db` in Docker).
