Dr. Claw
아이디어부터 논문까지 AI 에이전트와 함께하는 풀스택 연구 작업공간
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기SaaS schema planner for Danish friskoler and private/independent schools. Schools build, manage, and print their weekly class schedules — with real-time conflict detection for teachers, rooms, and aides.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗SaaS schema planner for Danish friskoler and private/independent schools. Schools build, manage, and print their weekly class schedules — with real-time conflict detection for teachers, rooms, and aides.
| Layer | Choice |
|---|---|
| API | ASP.NET Core Web API, C# / .NET 10 |
| ORM | Entity Framework Core |
| Database | PostgreSQL (Docker Compose, self-hosted on OVH VPS) |
| Frontend | React + Vite + TypeScript + Tailwind CSS |
| Auth | Keycloak (Docker Compose) |
| API client | Generated from OpenAPI spec (openapi-typescript) |
| Scaleway TEM via SMTP (MailKit) | |
| Object storage | OVHCloud Object Storage (S3-compatible, EU) |
| Reverse proxy | Traefik (managed by Dokploy) |
| Hosting | OVHCloud VPS + Dokploy + Docker Compose |
/api ASP.NET Core Web API
/web React + Vite frontend
/infrastructure/aspire .NET Aspire local orchestration
/infrastructure/docker Production docker-compose + Caddyfile
/infrastructure/keycloak Keycloak realm export
/scripts Developer scripts
/docs PRD, pricing, decisions, and other documentation
/tasks Phase-by-phase implementation tasks
Multi-tenancy: every query that touches school, staff, class, course, schema, or file data must be scoped to a tenant via EF Core global query filters. Never bypass them. Never trust a URL slug as an authorization signal — always resolve to a TenantId at the middleware boundary.
Responsive UI: admin UI (schema builder) is laptop-first. Staff schedule views must work on phones and tablets.
Simplicity first: the primary admin user is a school secretary with limited time. Every feature must be operable without training.
| Tier | Storage | Monthly |
|---|---|---|
| Basis | 100 GB | 499 kr |
| Skole+ (future) | 1000 GB | 499 kr |
30-day free trial with full access. No per-student pricing.
See docs/PRICING.md for full details.
Run the setup script (Windows) to install prerequisites automatically:
.\scripts\setup.ps1
The local dev environment runs via .NET Aspire, which orchestrates all containers (PostgreSQL, Keycloak, Silo, API, web).
aspire run
This starts:
| Service | URL |
|---|---|
| Web app | http://localhost:5173 |
| API | http://localhost:5000 |
| Swagger UI | http://localhost:5000/api/v1/openapi |
| Keycloak | http://localhost:8080 |
| PgAdmin | http://localhost:5050 |
| Silo (S3) | http://localhost:9000 |
| Silo console | http://localhost:9001 |
The Keycloak realm (Skoleoverblikket) is imported automatically from infrastructure/keycloak/realms/Skoleoverblikket-realm.json on first startup.
Aspire uses parameter secrets for local dev. On first run, set:
# PostgreSQL password
dotnet user-secrets set "Parameters:postgres-password" "your-dev-password" --project infrastructure/aspire/Skoleoverblikket.AppHost
# Keycloak admin password
dotnet user-secrets set "Parameters:keycloak-admin-password" "your-dev-password" --project infrastructure/aspire/Skoleoverblikket.AppHost
# Scaleway TEM (Email)
dotnet user-secrets set "Smtp:Username" "your-scaleway-username" --project api/Skoleoverblikket.Api
dotnet user-secrets set "Smtp:Password" "your-scaleway-api-key" --project api/Skoleoverblikket.Api
# OVHcloud S3
dotnet user-secrets set "ObjectStorage:AccessKey" "your-s3-accesskey" --project api/Skoleoverblikket.Api
dotnet user-secrets set "ObjectStorage:SecretKey" "your-s3-secretkey" --project api/Skoleoverblikket.Api
A test school and admin user are seeded automatically in development:
| Field | Value |
|---|---|
| URL | http://localhost:5173 |
| Username | [email protected] |
| Password | test1234 |
| School | Debugskolen (debugskolen) |
The Keycloak user is imported from the realm JSON. The school row is seeded by the API on startup.
First run only: Keycloak imports the realm only when its database is empty. If Keycloak was already running before these credentials were added, delete the
keycloak-dbDocker volume and restart the stack so the realm is re-imported.
Add a new EF Core migration from the repo root:
.\scripts\add-migration.ps1 -MigrationName YourMigrationName
Migrations live in api/Skoleoverblikket.Api/Data/Migrations/. Never edit an existing migration file — always add a new one.
When the API has changed, regenerate the typed TypeScript client:
# Builds the API (emits openapi/Skoleoverblikket.Api.json), then generates web/src/api/generated
cd web && npm run codegen
The API build goes to bin/codegen/, so it works while the Aspire stack is running.
media/CONTACTS.md, gitignored, local only) — discovery interview contacts