diff --git a/.gitignore b/.gitignore
index 94d2883..e9fd4fc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -429,3 +429,43 @@ FodyWeavers.xsd
# JetBrains IDEs
.idea/
+
+# ── Node.js / Vue.js / TypeScript ────────────────────────────────────────────
+
+# Webpack / Vite build output
+dist/
+dist-ssr/
+
+# TypeScript incremental build cache
+*.tsbuildinfo
+
+# Jest test coverage reports
+coverage/
+.nyc_output/
+
+# Local environment variable overrides (may contain secrets)
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# Package manager debug logs
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+# Optional: Yarn v2+ cache (not committed by default)
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
+
+# macOS metadata
+.DS_Store
+
+# Windows thumbnail cache
+Thumbs.db
+ehthumbs.db
diff --git a/CLAUDE.md b/CLAUDE.md
index a6f1b93..46ccce2 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -8,7 +8,8 @@ MicCheck is an open source project written in asp.net, c#, typescript and VueJS
## Planned Structure
-- `src/admin/` — administrative components
+- `src/admin/` — administrative components in VueJS
+- `src/api/` - api and restful endpoints in .NET
- `tests/` — test suite
- `docs/` — documentation
@@ -22,15 +23,18 @@ MicCheck is an open source project written in asp.net, c#, typescript and VueJS
# Coding
- Use descriptive names for all classes and method created. Avoid generic names like Provider, Manager, Helper
+- Coding should match formating and style rules in the .editorconfig file
## Testing
- Write unit tests in a BDD style, testing as much code end-to-end as possible without without touching external resources like databases or file systems (e.g. WhenAUserDoesSomething_ThenAThingAppears)
- Mock any external dependencies using Moq.
-- Do not name any mocked objects with the work Mock in them
+- Do not name any mocked objects with the word Mock in them
- Do not include any Arrange / Act / Assert comments in the code
## Claude
+- Create all plans as .md file located in the `docs/` folder. Admin in `docs/admin/` and API in `docs/api/`
+- Divide up large plans into discrete chucks of functionality so each can be built and committed independently.
- When generating a plan from a .md file in /docs/ save the plan in the same folder with the same filename minus the .md extention, but with a _plan.md at the end
- When implementing a plan from a .md file in /docs/ save the summary of the plan in the same folder with the same filename minus the .md extention, but with a _output.md at the end
diff --git a/docker-compose.yml b/docker-compose.yml
index aa34d22..f55ec41 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,8 @@
services:
+
+ # ── PostgreSQL ───────────────────────────────────────────────────────────────
db:
- image: postgres:15-alpine
+ image: postgres:16-alpine
environment:
POSTGRES_DB: miccheck
POSTGRES_USER: miccheck
@@ -10,11 +12,12 @@ services:
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
- test: ["CMD-SHELL", "pg_isready -U miccheck"]
+ test: ["CMD-SHELL", "pg_isready -U miccheck -d miccheck"]
interval: 5s
timeout: 5s
- retries: 5
+ retries: 10
+ # ── .NET API ─────────────────────────────────────────────────────────────────
api:
build:
context: .
@@ -22,14 +25,32 @@ services:
ports:
- "8080:8080"
environment:
- - ASPNETCORE_ENVIRONMENT=Development
- - ConnectionStrings__DefaultConnection=Host=db;Database=miccheck;Username=miccheck;Password=password
- - Jwt__SecretKey=change-this-secret-key-in-production-must-be-32-chars
- - Jwt__Issuer=MicCheck
- - Jwt__Audience=MicCheck
+ ASPNETCORE_ENVIRONMENT: Development
+ ASPNETCORE_URLS: http://+:8080
+ ConnectionStrings__DefaultConnection: "Host=db;Database=miccheck;Username=miccheck;Password=password"
+ Jwt__SecretKey: "miccheck-dev-secret-key-change-in-production!!"
+ Jwt__Issuer: MicCheck
+ Jwt__Audience: MicCheck
depends_on:
db:
condition: service_healthy
+ healthcheck:
+ test: ["CMD-SHELL", "wget -qO- http://localhost:8080/api/v1/health 2>/dev/null || exit 0"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ start_period: 20s
+
+ # ── Vue Admin Site (nginx) ───────────────────────────────────────────────────
+ admin:
+ build:
+ context: src/admin
+ dockerfile: Dockerfile
+ ports:
+ - "3000:80"
+ depends_on:
+ api:
+ condition: service_started
volumes:
postgres_data:
diff --git a/docs/admin/01-admin-site_plan.md b/docs/admin/01-admin-site_plan.md
new file mode 100644
index 0000000..a30b789
--- /dev/null
+++ b/docs/admin/01-admin-site_plan.md
@@ -0,0 +1,483 @@
+# MicCheck Admin Site Plan
+
+## Overview
+
+Build a fully functional VueJS 3 + Vuetify 3 + TypeScript single-page admin application for the MicCheck feature flag platform. The site manages the complete lifecycle of feature flags across the Organization → Project → Environment hierarchy exposed by the MicCheck API.
+
+---
+
+## Architecture Decisions
+
+- **State Management**: Pinia (replaces Vuex; first-class Vue 3 support)
+- **HTTP Client**: Axios with request/response interceptors for auth token injection and 401 refresh handling
+- **Component Library**: Vuetify 3 (already configured)
+- **Router**: Vue Router 4 (already configured)
+- **Testing**: Jest + Vue Test Utils (already configured)
+- **Code Style**: Composition API (`