나만의 운동 루틴 플래너 - 주간 운동 기록 & 진행률 추적 - 바이브코딩 레시피
입문 PHP + JavaScript Laravel + React

나만의 운동 루틴 플래너 - 주간 운동 기록 & 진행률 추적

리포지토리명 workout-routine-planner
조회수 7 1건 제출 14시간 전

문제 설명

나만의 운동 루틴 플래너

매일 운동 루틴을 기록하고 주간 진행률을 시각적으로 확인할 수 있는 풀스택 웹 애플리케이션입니다. 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에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
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 호출이 가능해집니다.

2
Step 2
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이 적용되어 잘못된 데이터는 에러 메시지와 함께 거부됩니다.

3
Step 3
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로 개발 서버를 실행하면 헤더가 표시됩니다.

4
Step 4
운동 등록 폼 컴포넌트를 만들고 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로 깔끔하게 스타일링됩니다.

5
Step 5
운동 목록 표시 및 완료/삭제 기능을 구현해주세요.

요구사항:
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 컴포넌트가 생성되어 운동 목록이 카드 형태로 표시됩니다. 체크박스를 클릭하면 완료 상태가 토글되고, 삭제 버튼을 클릭하면 운동이 삭제됩니다. 상단에 진행률 프로그레스 바가 표시되어 이번 주 운동 달성률을 시각적으로 확인할 수 있습니다. 완료된 운동은 시각적으로 구분됩니다.

제출된 작품 (1)

로그인 후 제출

나만의 운동 루틴 플래너

리자
리자
12시간 전 · Claude Code

주간 운동 기록과 진행률을 추적할 수 있는 개인 맞춤형 운동 루틴 관리 애플리케이션

조회수 15 댓글수 0 추천수 0

댓글 (0)

로그인 후 댓글을 남길 수 있습니다.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!