스터디 타이머 & 집중 시간 분석 대시보드 - 바이브코딩 레시피
중급 PHP Laravel

스터디 타이머 & 집중 시간 분석 대시보드

리포지토리명 study-timer-analytics-dashboard
조회수 32 1건 제출 1주 전

문제 설명

프로젝트 개요

포모도로 기법을 활용한 스터디 타이머와 학습 통계를 시각화하는 웹 애플리케이션입니다. 사용자는 과목별로 학습 시간을 기록하고, 일별/주별/월별 집중 시간을 그래프로 확인할 수 있습니다.

필수 기능

  1. 사용자 인증: 회원가입, 로그인, 로그아웃 (Laravel Breeze 사용)
  2. 과목 관리: 과목 생성, 수정, 삭제 (색상 라벨 지정 가능)
  3. 타이머 기능:
    • 25분 집중 / 5분 휴식 기본 설정
    • 사용자 정의 시간 설정 가능
    • 타이머 시작/일시정지/중단
    • 타이머 종료 시 학습 세션 자동 저장
  4. 학습 세션 기록: 과목, 시작/종료 시간, 집중 시간 저장
  5. 통계 대시보드:
    • 오늘/이번 주/이번 달 총 학습 시간
    • 과목별 학습 시간 파이 차트
    • 최근 7일간 일별 학습 시간 막대 그래프
  6. 학습 기록 목록: 날짜별 세션 목록 조회 및 삭제

보너스 기능

  • 타이머 종료 시 브라우저 알림
  • 학습 목표 설정 (일일 목표 시간)
  • 연속 학습 일수 뱃지
  • CSV 내보내기
  • 다크 모드

제약 조건

  • Laravel 12.x 사용 (최신 버전)
  • Laravel Breeze로 인증 구현
  • MySQL 또는 SQLite 데이터베이스 사용
  • Chart.js 또는 ApexCharts로 그래프 시각화
  • Tailwind CSS로 스타일링
  • RESTful API 설계 원칙 준수
  • JavaScript로 타이머 기능 구현 (Alpine.js 또는 Vanilla JS)
  • 반응형 디자인 (모바일/태블릿/데스크톱)

프롬프트 레시피

아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
Laravel 12.x로 새 프로젝트를 생성하고 초기 설정을 해주세요.

요구사항:
1. 프로젝트명: study-timer-analytics-dashboard
2. Laravel Breeze 설치 및 Blade 스택으로 인증 설정
3. Tailwind CSS 설정 완료
4. 데이터베이스는 SQLite 사용 (.env 파일 설정 포함)
5. 다음 마이그레이션 파일 생성:
   - subjects 테이블: id, user_id, name, color(hex 색상 코드), created_at, updated_at
   - study_sessions 테이블: id, user_id, subject_id, started_at(datetime), ended_at(datetime), duration_minutes(integer), created_at, updated_at
6. Subject와 StudySession 모델 생성 (User와의 관계 설정 포함)
7. 기본 레이아웃에 네비게이션 추가 (대시보드, 타이머, 과목 관리, 학습 기록)

마이그레이션을 실행하고 프로젝트가 정상 작동하는지 확인해주세요.

기대 결과: Laravel 12.x 프로젝트 생성, Breeze 인증 설치, 데이터베이스 마이그레이션 완료, 기본 모델과 관계 설정 완료. 회원가입/로그인 페이지 정상 작동.

2
Step 2
과목 관리 기능을 구현해주세요.

요구사항:
1. SubjectController 생성 (resource controller)
2. 라우트 설정: Route::resource('subjects', SubjectController::class)->middleware('auth')
3. 과목 목록 페이지 (subjects/index.blade.php):
   - 카드 형태로 과목 표시 (과목명, 색상 라벨)
   - "새 과목 추가" 버튼
   - 각 과목에 수정/삭제 버튼
4. 과목 생성/수정 폼 (subjects/create.blade.php, subjects/edit.blade.php):
   - 과목명 입력 필드 (필수, 최대 50자)
   - 색상 선택 (color picker 또는 미리 정의된 8가지 색상 팔레트)
   - 저장/취소 버튼
5. 폼 유효성 검사: FormRequest 클래스 생성 (StoreSubjectRequest, UpdateSubjectRequest)
6. 삭제 기능: 해당 과목의 학습 세션이 있으면 경고 메시지 표시 후 확인 시 함께 삭제
7. Tailwind CSS로 깔끔하게 스타일링

모든 CRUD 기능이 정상 작동하는지 확인해주세요.

기대 결과: 과목 CRUD 기능 완성. 사용자가 과목을 생성/수정/삭제할 수 있고, 색상 라벨이 표시됨. 폼 유효성 검사 작동.

3
Step 3
타이머 페이지와 기본 타이머 기능을 구현해주세요.

요구사항:
1. TimerController 생성 및 라우트 설정
2. 타이머 페이지 (timer/index.blade.php):
   - 중앙에 큰 원형 타이머 표시 (남은 시간 mm:ss 형식)
   - 과목 선택 드롭다운 (사용자의 과목 목록)
   - 집중 시간 설정 (기본 25분, 15/25/45/60분 프리셋 버튼)
   - 휴식 시간 설정 (기본 5분, 비활성화 가능)
   - 시작/일시정지/중단 버튼
3. JavaScript 타이머 로직 (Alpine.js 또는 Vanilla JS):
   - 카운트다운 기능
   - 일시정지/재개 기능
   - 타이머 종료 시 알림 표시
   - 타이머 상태 관리 (대기/진행중/일시정지/휴식)
4. 타이머 진행 중 시각적 피드백:
   - 원형 프로그레스 바 (SVG circle 또는 CSS conic-gradient)
   - 진행 상태에 따라 색상 변경
5. 반응형 디자인 (모바일에서도 사용 편리하게)

이 단계에서는 아직 데이터베이스에 저장하지 않고 타이머 UI와 기능만 구현합니다.

기대 결과: 타이머 페이지 완성. 과목 선택, 시간 설정, 타이머 시작/정지 기능 작동. 시각적 프로그레스 표시. 데이터 저장은 아직 미구현.

4
Step 4
학습 세션 저장 기능을 구현해주세요.

요구사항:
1. StudySessionController 생성
2. API 라우트 추가:
   - POST /api/study-sessions (세션 시작 기록)
   - PATCH /api/study-sessions/{id} (세션 종료 기록)
   - DELETE /api/study-sessions/{id} (세션 삭제)
3. 세션 저장 로직:
   - 타이머 시작 시: subject_id, started_at 저장, ended_at은 null
   - 타이머 정상 종료 시: ended_at 업데이트, duration_minutes 계산하여 저장
   - 타이머 중단 시: 해당 세션 삭제 또는 ended_at만 업데이트
4. 타이머 페이지의 JavaScript 수정:
   - 타이머 시작 시 AJAX로 세션 생성 API 호출
   - 타이머 종료 시 세션 업데이트 API 호출
   - 성공/실패 메시지 표시
5. 에러 처리: 과목 미선택, 네트워크 오류 등
6. CSRF 토큰 처리

타이머를 완료하면 데이터베이스에 학습 세션이 정상적으로 저장되는지 확인해주세요.

기대 결과: 타이머 완료 시 학습 세션이 데이터베이스에 저장됨. API 엔드포인트 작동. AJAX 통신 성공.

5
Step 5
대시보드 페이지와 통계 기능을 구현해주세요.

요구사항:
1. DashboardController 생성 및 라우트 설정 (기본 '/' 경로)
2. 대시보드 페이지 (dashboard.blade.php):
   - 상단 통계 카드 (3개):
     * 오늘 총 학습 시간
     * 이번 주 총 학습 시간
     * 이번 달 총 학습 시간
   - 과목별 학습 시간 파이 차트 (Chart.js 또는 ApexCharts 사용)
     * 이번 주 기준
     * 각 과목의 색상 사용
     * 범례 포함
   - 최근 7일간 일별 학습 시간 막대 그래프
     * X축: 날짜, Y축: 분 또는 시간
     * 툴팁에 정확한 시간 표시
3. Controller에서 통계 데이터 계산:
   - 오늘/이번 주/이번 달 학습 시간 합계
   - 과목별 학습 시간 그룹화
   - 최근 7일 일별 학습 시간
4. Chart.js CDN 추가 및 초기화 스크립트 작성
5. 데이터가 없을 때 안내 메시지 표시
6. 반응형 그래프 (모바일에서도 보기 좋게)

대시보드에 접속하면 학습 통계가 그래프로 시각화되어 표시되어야 합니다.

기대 결과: 대시보드 완성. 통계 카드와 2개의 차트(파이, 막대) 표시. 실제 학습 데이터 기반으로 시각화. 데이터 없을 때 안내 메시지.

6
Step 6
학습 기록 목록 페이지를 구현하고 프로젝트를 마무리해주세요.

요구사항:
1. 학습 기록 페이지 (study-sessions/index.blade.php):
   - 날짜 필터 (오늘/이번 주/이번 달/전체, 기본값: 이번 주)
   - 과목 필터 (전체/특정 과목)
   - 테이블 형태로 세션 목록 표시:
     * 과목명 (색상 라벨 포함)
     * 시작 시간 (날짜 + 시간)
     * 종료 시간
     * 학습 시간 (분 또는 "X시간 Y분" 형식)
     * 삭제 버튼
   - 페이지네이션 (페이지당 20개)
   - 총 학습 시간 표시 (필터 적용된 결과 기준)
2. 삭제 기능: 확인 모달 후 삭제
3. StudySessionController에 index, destroy 메서드 추가
4. 빈 상태 처리: 기록이 없을 때 "아직 학습 기록이 없습니다" 메시지와 타이머 시작 버튼
5. 전체 프로젝트 마무리:
   - README.md 작성 (설치 방법, 기능 설명, 스크린샷)
   - 코드 정리 및 주석 추가
   - 모든 페이지 반응형 확인
   - 브라우저 콘솔 에러 없는지 확인

모든 기능이 정상 작동하는지 최종 테스트해주세요.

기대 결과: 학습 기록 페이지 완성. 필터링, 페이지네이션, 삭제 기능 작동. 전체 프로젝트 완성 및 README 작성 완료. 모든 기능 통합 테스트 통과.

제출된 작품 (1)

로그인 후 제출

학습 타이머 분석 대시보드

리자
리자
1주 전 · Claude Code

학습 시간을 추적하고 분석하여 생산성을 시각화하는 대시보드 애플리케이션

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

댓글 (1)

로그인 후 댓글을 남길 수 있습니다.
리자

비프음을 약간 다르게 수정해 봤습니다