GoalType module.| Day | Task | Start Date | Completion Date | Reference Material |
|---|---|---|---|---|
| 2 | - Implement GlobalExceptionHandler (@RestControllerAdvice) + Handle MethodArgumentNotValidException → field-level validation errors + Handle EntityNotFoundException, custom business exceptions + All errors returned in ApiResponse envelope with appropriate HTTP status |
01/20/2026 | 01/20/2026 | |
| 2 | - Configure CorsConfig globally + Allow origins for local dev and production frontend URLs + Allow headers: Authorization, Content-Type + Allow all HTTP methods |
01/20/2026 | 01/20/2026 | |
| 3 | - Build GoalType module + Entity: name (UNIQUE), description + Repository, Service, Controller + Endpoints (all public): POST /api/goal-types, GET /api/goal-types, GET /api/goal-types/{id}, GET /api/goal-types/by-name/{name} |
01/21/2026 | 01/21/2026 | |
| 4 | - Build Frontend RootNavigator + Reads Redux isAuthenticated + hasCompletedOnboarding from authSlice + Routes to AuthStack (unauthenticated) / OnboardingStack (pending) / MainTabs (ready) - Build AuthStack: WelcomeScreen + LoginScreen - Build MainTabs with CustomTabBar + 4 bottom tabs: Home, Workout, Diet, Health + Center floating Chat button splitting left/right tabs |
01/22/2026 | 01/22/2026 | https://reactnavigation.org/ |
| 5 | - Build OnboardingStack (5-step wizard) + Step 1: Gender + Date-of-birth (day/month/year sliders) + Height + Weight + Step 2: Activity level + Job type + Step 3: Main fitness goal + Target weight + Target body areas + Step 4: Diet preferences + Food allergies + Meals per day + Water intake + Step 5: Experience level + Workout location + Frequency + Session duration |
01/23/2026 | 01/23/2026 | |
| 6 | - Add CaloriesScreen and TrainingScreen to Onboarding preview + CaloriesScreen: animated calorie management demo UI + TrainingScreen: weekly workout plan by day preview - Wire onboarding completion: dispatch(completeOnboarding()) → sync user profile to backend via POST /user/sync |
01/24/2026 | 01/24/2026 |
GlobalExceptionHandler catches all standard and custom exceptions; returns consistent ApiResponse to clients.localhost:8081 can communicate with the API on localhost:8080.GoalType entity persisted to PostgreSQL; supports types like Weight Loss, Muscle Gain, Maintenance.RootNavigator correctly redirects based on auth + onboarding state — no logic in individual screens.MainTabs renders with CustomTabBar; tab bar splits left (Home, Workout) and right (Diet, Health) around a center Chat button.AuthStack, OnboardingStack, WorkoutStack, DietStack, HealthStack.completeOnboarding() and calls the backend sync endpoint.Lab 14 — Import On-Premise VM to AWS (https://000014.awsstudygroup.com/)
.vmdk format and uploaded it to an S3 bucket (tunbin-bucket-vm-import-2026).import-bucket-2021 which was already taken — had to use a custom name and replace all occurrences in the commands.aws ec2 import-image --description "VM Image" --disk-containers \
Format=vhdx,UserBucket="{S3Bucket=tunbin-bucket-vm-import-2026,S3Key=Ubuntu.vmdk}"
Key lesson: S3Key must match the exact filename of the .vmdk file uploaded to S3 (not .vhdx as the workshop shows).aws ec2 describe-import-image-tasks --import-task-ids import-ami-bb7...
Import takes a long time — need to be patient and keep checking status.ClientError: EFI partition detected.import-image as a long-running asynchronous workflow that requires status polling and patient verification.MuscleGroup, Exercise, WorkoutPlan, WorkoutPlanExercise entities with admin CRUD and public read endpoints.SuggestedPlanScreen (3-step plan selection wizard) and PlanExercisePicker.