Backend (already committed):
- Migration 007: focus_areas, training_styles, training_characters, skill_categories tables
- routers/catalogs.py: 20 CRUD endpoints for all catalogs
- routers/exercises.py: Updated to support new FK fields
- Trainer focus area assignment for role-based filtering
Frontend (new):
- AdminCatalogsPage: Comprehensive admin UI with 5 tabs
- Focus Areas (with color + icon)
- Training Styles (hierarchical with parent_style_id)
- Training Characters
- Skill Categories (hierarchical)
- Trainer Assignments (trainer → focus area mapping)
- ExercisesPage: Updated to use catalog dropdowns
- Focus area dropdown now loads from API
- Added missing Training Style dropdown
- Training character dropdown now loads from API
- Uses IDs instead of hard-coded text values
- App.jsx: Added /admin/catalogs route
- api.js: Added all catalog endpoints
All form fields standardized: labels on top, full width, left-aligned
Ready for testing via /admin/catalogs
Backend:
- Created migration 006_training_planning.sql
- training_units table (planned vs actual, status, notes)
- training_unit_exercises M:N (order, duration, modifications)
- Created routers/training_planning.py with full CRUD
- List with filters (group, date range, status)
- Get detail with exercises
- Create/Update/Delete with access control
- Quick create endpoint (auto-fills from group defaults)
- Permission: trainer for own groups, admin for all
- Registered training_planning router in main.py
Frontend:
- Complete TrainingPlanningPage with full planning workflow
- Group selector + date range picker
- List view with status badges (planned/completed/cancelled)
- Create/Edit modal with exercise management
- Drag to reorder exercises (▲▼)
- Quick create button (one-click with group defaults)
- Durchführung section (actual date/time, attendance, status)
- Public notes + trainer-only notes
- Updated api.js with deleteTrainingUnit and quickCreateTrainingUnit
- Added /planning route to App.jsx
- Navigation already configured (Calendar icon)
This is the CORE feature - trainers can now plan and document training sessions.
Next: Admin routes, role system refinement, testing
CRITICAL FIX: Build was failing because lucide-react was not in package.json
- Added lucide-react ^0.344.0 to dependencies
- Required for appNav.js and DesktopSidebar.jsx icon imports
- Build should now succeed
Apologies for missing this in initial design foundation commit!
Design System:
- app.css already exists with full design tokens, dark mode, responsive breakpoints
- CSS variables for colors, spacing, typography
- Mobile-first layout with safe-area support (iOS notch)
Navigation System:
- config/appNav.js: Single source of truth for navigation items
- Bottom-Nav for mobile (<1024px) with horizontal scrolling
- DesktopSidebar for desktop (≥1024px) with fixed left sidebar
- Role-based navigation (isAdmin adds Admin link)
App.jsx Restructure:
- Responsive layout: Bottom-Nav (mobile) + DesktopSidebar (desktop)
- Protected/Public routes with loading states
- Logout handler with confirmation
PWA Setup:
- viewport-fit=cover for notch support
- apple-mobile-web-app meta tags
- Icon links prepared (icons pending)
Architecture:
- Follows Mitai design patterns
- Responsive breakpoint at 1024px
- Single source of truth for navigation config
Next: Icons, Exercise CRUD, Clubs/Groups Management
- AuthContext was using fetch() directly with relative URLs
- Relative URLs went to nginx port (3098) instead of backend (8098)
- Now uses api.getCurrentProfile() which has correct API_URL
- Session persistence should work after browser refresh
- AuthContext checks /profiles/me on mount to restore session
- Without this endpoint, users had to re-login on every refresh
- Returns current user's profile based on auth token
Issue: Session persistence broken
- Created test-login.js to automate testing of the Shinkan login page, including waiting for deployment, capturing page title, heading, and counting elements (buttons, forms, inputs).
- Implemented functionality to log button texts and input placeholders, and take a full-page screenshot.
- Created test-shinkan.js to streamline the login page testing process, removing the deployment wait and adding a preview of the page content.
Backend:
- Auth router (login, register, logout)
- Profiles router (get current profile)
- Registered in main.py
Frontend:
- LoginPage with login/register tabs
- Dashboard with welcome screen
- Simplified AuthContext for Shinkan
- Protected routes in App.jsx
- Public routes redirect when logged in
Ready for testing!
version: 0.1.0
- New run_migrations.py script
- Runs all SQL files in migrations/ on startup
- Tracks executed migrations in schema_migrations table
- Retries database connection (30 attempts)
- Separate Shinkan DB (shinkan_dev / shinkan)
This ensures a clean separation from Mitai database.