11# Commute Bike Tracker
22
3- Scaffolded starter structure for a local -first Bike Tracking application.
3+ Local -first Bike Tracking application built with .NET Aspire orchestration, .NET 10 Minimal API, F# domain modules, and a React frontend .
44
5- ## What exists now
5+ ## Current Feature Slice
66
7- - .NET 10 Aspire AppHost orchestration
8- - .NET 10 Minimal API backend with hello endpoints
9- - F# domain project placeholder
10- - React frontend (Vite) with a simple hello screen
11- - No business logic implemented yet
12- - No database schema created yet
7+ - Local user signup with name and PIN
8+ - PIN protection through salted, non-reversible hashing (PBKDF2)
9+ - Duplicate-name rejection using trimmed, case-insensitive normalization
10+ - User identification with progressive retry delay (up to 30 seconds)
11+ - User registration outbox with background retry until successful publication
1312
14- ## Project structure
13+ ## Project Structure
1514
1615- src/BikeTracking.AppHost - Aspire orchestration host
1716- src/BikeTracking.Api - Minimal API service
18- - src/BikeTracking.ServiceDefaults - Shared Aspire defaults/ telemetry wiring
19- - src/BikeTracking.Domain.FSharp - Domain layer starter project (F#)
20- - src/BikeTracking.Frontend - React frontend app
17+ - src/BikeTracking.ServiceDefaults - Shared Aspire defaults and telemetry wiring
18+ - src/BikeTracking.Domain.FSharp - Domain event and type modules (F#)
19+ - src/BikeTracking.Frontend - React + Vite frontend app
2120
2221## Prerequisites
2322
2423- .NET SDK 10.x
2524- Node.js 20+ and npm
25+ - CSharpier global tool (required for formatting checks):
2626
27- ## Quick start
27+ ``` powershell
28+ dotnet tool install csharpier -g
29+ ```
30+
31+ run it with ` csharpier format . ` from the repo root to format all C# code.
32+
33+ - Helpful editor integration: VS Code CSharpier extension (` csharpier.csharpier-vscode ` )
34+
35+ ## Quick Start
2836
29371 . Install frontend dependencies:
3038
@@ -40,15 +48,34 @@ cd ../..
4048dotnet run --project src/BikeTracking.AppHost
4149```
4250
43- 3 . Open Aspire dashboard and launch services:
44- - ` frontend ` for the React hello screen
45- - ` api ` for the Minimal API
51+ 3 . Open Aspire dashboard and launch:
52+ - frontend service for the signup and identify screen
53+ - api service for local identity endpoints
54+
55+ ## Local Identity Endpoints
56+
57+ - GET / - API status
58+ - POST /api/users/signup - create local user record and queue UserRegistered event
59+ - POST /api/users/identify - authorize user by normalized name and PIN
60+
61+ ## Local Scope Boundaries
62+
63+ - This slice is local-only and intentionally excludes OAuth and Azure hosting.
64+ - Name and PIN are validated on client and server.
65+ - PIN plaintext is never stored or emitted in events.
66+ - Future cloud and OAuth expansion will be delivered in a separate feature.
67+
68+ ## Local User-Machine Install Approach
4669
47- ## API starter endpoints
70+ For local-first deployment to end-user machines, the default persistence model is a local SQLite file.
4871
49- - ` / ` returns API running message
50- - ` /hello ` returns hello message
72+ - No separate database installation or database service is required.
73+ - The API currently defaults to a local SQLite file named biketracking.local.db.
74+ - Startup applies EF Core migrations automatically to create or update schema.
75+ - For packaged installs, place the SQLite file in a user-writable application-data folder rather than the application install directory.
76+ - Before schema upgrades, create a safety backup copy of the SQLite file.
77+ - Use SQL Server LocalDB or SQL Server Express only when local multi-user requirements exceed the single-user SQLite profile.
5178
52- ## Next step
79+ ## Next Step
5380
54- Use SpecKit to define the first vertical slice before implementing features .
81+ Continue with task execution and verification using specs/001-user-signup-pin/tasks.md .
0 commit comments