나만의 운동 루틴 플래너 - 주간 운동 기록 & 진행률 추적
workout-routine-planner
문제 설명
나만의 운동 루틴 플래너
매일 운동 루틴을 기록하고 주간 진행률을 시각적으로 확인할 수 있는 풀스택 웹 애플리케이션입니다. Laravel 12.x로 RESTful API를 구축하고, React 19로 직관적인 사용자 인터페이스를 만듭니다.
필수 기능
- 운동 루틴 등록: 운동 이름, 세트/횟수, 완료 여부를 입력
- 주간 목록 보기: 오늘/이번 주 운동 기록을 카드 형태로 표시
- 완료 체크: 각 운동을 완료하면 체크 표시 (토글 기능)
- 진행률 표시: 이번 주 완료한 운동 비율을 프로그레스 바로 시각화
- 삭제 기능: 불필요한 운동 기록 삭제
기술 스택
- 백엔드: Laravel 12.x (API 모드, SQLite 데이터베이스)
- 프론트엔드: React 19 (Vite, Tailwind CSS)
- API 통신: Fetch API
- 상태 관리: React useState 훅
보너스 기능 (선택)
- 운동 카테고리 필터링 (유산소/근력/스트레칭)
- 달력 뷰로 월간 운동 기록 보기
- 운동 시간 기록 및 총 운동 시간 통계
- 다크 모드 지원
제약 조건
- • Laravel 12.x 사용 (구버전 금지)
- • React 19 사용 (Vite 기반)
- • SQLite 데이터베이스 사용
- • RESTful API 설계 원칙 준수
- • Tailwind CSS로 스타일링
- • 복잡한 상태관리 라이브러리 사용 금지 (useState만 사용)
- • CORS 설정 필수
- • API 응답은 JSON 형식
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
Laravel 12.x 백엔드 API 프로젝트를 생성하고 기본 설정을 해주세요.
요구사항:
1. Laravel 12.x 프로젝트 생성 (프로젝트명: workout-api)
2. SQLite 데이터베이스 설정 (.env 파일 수정)
3. workouts 테이블 마이그레이션 생성:
- id (primary key)
- name (운동 이름, string)
- sets (세트 수, integer, nullable)
- reps (횟수, integer, nullable)
- is_completed (완료 여부, boolean, default false)
- workout_date (운동 날짜, date)
- timestamps
4. 마이그레이션 실행
5. CORS 설정 (모든 origin 허용, api.php 라우트에 적용)
6. API 라우트 구조 설계:
- GET /api/workouts - 모든 운동 목록
- POST /api/workouts - 새 운동 등록
- PUT /api/workouts/{id} - 운동 완료 토글
- DELETE /api/workouts/{id} - 운동 삭제
.env 파일에서 DB_CONNECTION=sqlite로 설정하고, database/database.sqlite 파일을 생성해주세요.
기대 결과: Laravel 12.x 프로젝트가 생성되고, SQLite 데이터베이스 설정이 완료됩니다. workouts 테이블 마이그레이션이 생성되고 실행되어 데이터베이스에 테이블이 생성됩니다. CORS 미들웨어가 설정되어 React 앱에서 API 호출이 가능해집니다.
Workout 모델과 컨트롤러를 생성하고 RESTful API를 구현해주세요.
요구사항:
1. Workout 모델 생성 (app/Models/Workout.php):
- fillable 속성: ['name', 'sets', 'reps', 'is_completed', 'workout_date']
- casts: is_completed를 boolean으로, workout_date를 date로 캐스팅
2. WorkoutController 생성 (app/Http/Controllers/Api/WorkoutController.php):
- index(): 최근 7일 이내 운동 목록 반환 (최신순 정렬)
- store(): 새 운동 등록 (validation 포함: name 필수, sets/reps 숫자, workout_date 날짜)
- update(): is_completed 토글 기능
- destroy(): 운동 삭제
3. api.php에 라우트 등록:
- Route::apiResource('workouts', WorkoutController::class);
4. 각 API 응답에 성공 메시지와 데이터 포함
모든 API는 JSON 형식으로 응답하고, 에러 처리도 포함해주세요.
기대 결과: Workout 모델과 WorkoutController가 생성되어 CRUD API가 완성됩니다. Postman이나 curl로 테스트하면 운동 데이터를 생성, 조회, 수정, 삭제할 수 있습니다. validation이 적용되어 잘못된 데이터는 에러 메시지와 함께 거부됩니다.
React 19 프론트엔드 프로젝트를 생성하고 기본 구조를 설정해주세요.
요구사항:
1. Vite + React 19 프로젝트 생성 (프로젝트명: workout-frontend)
2. Tailwind CSS 설치 및 설정
3. 기본 폴더 구조:
- src/components (컴포넌트)
- src/services (API 호출 함수)
4. src/services/api.js 생성:
- BASE_URL 상수 (http://localhost:8000/api)
- fetchWorkouts(): GET /workouts
- createWorkout(data): POST /workouts
- toggleWorkout(id): PUT /workouts/{id}
- deleteWorkout(id): DELETE /workouts/{id}
5. App.jsx 기본 레이아웃:
- 헤더 (제목: "나만의 운동 루틴 플래너")
- 메인 컨테이너 (중앙 정렬, 최대 너비 1200px)
- Tailwind CSS로 깔끔한 디자인
API 함수는 fetch를 사용하고, 에러 처리를 포함해주세요.
기대 결과: React 19 + Vite 프로젝트가 생성되고 Tailwind CSS가 설정됩니다. API 통신을 위한 service 함수들이 준비되고, App.jsx에 기본 레이아웃이 구성됩니다. npm run dev로 개발 서버를 실행하면 헤더가 표시됩니다.
운동 등록 폼 컴포넌트를 만들고 API와 연동해주세요. 요구사항: 1. src/components/WorkoutForm.jsx 생성: - 입력 필드: 운동 이름, 세트 수, 횟수, 운동 날짜 - 운동 날짜는 기본값을 오늘 날짜로 설정 - "운동 추가" 버튼 - useState로 폼 데이터 관리 2. 폼 제출 시: - createWorkout API 호출 - 성공 시 폼 초기화 및 부모 컴포넌트에 알림 (onWorkoutAdded 콜백) - 에러 시 alert로 에러 메시지 표시 3. Tailwind CSS로 스타일링: - 입력 필드는 border, padding, rounded 적용 - 버튼은 파란색 배경, hover 효과 - 반응형 디자인 (모바일 친화적) 4. App.jsx에서 WorkoutForm 컴포넌트 사용 모든 입력 필드에 적절한 placeholder와 label을 추가해주세요.
기대 결과: WorkoutForm 컴포넌트가 생성되어 사용자가 운동 정보를 입력하고 제출할 수 있습니다. 폼 제출 시 Laravel API로 데이터가 전송되고, 성공하면 폼이 초기화됩니다. 입력 필드와 버튼이 Tailwind CSS로 깔끔하게 스타일링됩니다.
운동 목록 표시 및 완료/삭제 기능을 구현해주세요. 요구사항: 1. src/components/WorkoutList.jsx 생성: - workouts 배열을 props로 받음 - 각 운동을 카드 형태로 표시 (운동 이름, 세트/횟수, 날짜) - 완료 체크박스: 클릭 시 toggleWorkout API 호출 및 onToggle 콜백 - 삭제 버튼: 클릭 시 deleteWorkout API 호출 및 onDelete 콜백 - 완료된 운동은 회색 배경 + 취소선 스타일 2. App.jsx 수정: - useState로 workouts 상태 관리 - useEffect로 컴포넌트 마운트 시 fetchWorkouts 호출 - WorkoutList에 workouts, onToggle, onDelete props 전달 - 운동 추가/토글/삭제 후 목록 새로고침 3. 진행률 표시: - 완료된 운동 수 / 전체 운동 수 계산 - 프로그레스 바로 시각화 (Tailwind CSS) - "이번 주 진행률: X%" 텍스트 표시 4. 빈 상태 처리: - 운동이 없을 때 "아직 등록된 운동이 없습니다" 메시지 표시 Tailwind CSS로 카드 디자인, 그림자, 호버 효과를 적용해주세요.
기대 결과: WorkoutList 컴포넌트가 생성되어 운동 목록이 카드 형태로 표시됩니다. 체크박스를 클릭하면 완료 상태가 토글되고, 삭제 버튼을 클릭하면 운동이 삭제됩니다. 상단에 진행률 프로그레스 바가 표시되어 이번 주 운동 달성률을 시각적으로 확인할 수 있습니다. 완료된 운동은 시각적으로 구분됩니다.