서울대학교 학생들을 위한 졸업 요건 추적 시스템입니다. 학점 기반으로 졸업 요건을 쉽게 관리하고 추적할 수 있습니다.
- 전공: 62학점 (단일전공) / 48학점 (복수전공시)
- 전공필수/전공선택 세부 현황 표시
- 교양: 50학점
- 공대공통: 3학점
- 복수전공: 39학점 (복수전공 활성화시)
- 졸업: 130학점 (전체)
- 동적 학기 추가/삭제: 기본 8학기 외 추가 학기 생성 가능
- 과목별 상세 정보:
- 과목명 입력
- 전공 구분 (주전공/복수전공)
- 학점 입력 (0.5 단위, 기본값 3학점)
- 실시간 진행상황: 입력 즉시 요구사항 업데이트
- Google 로그인: Google OAuth 2.0을 통한 안전한 인증
- 클라우드 동기화: Supabase를 통한 기기 간 데이터 동기화
- 자동 저장: LocalStorage 및 클라우드 이중 백업
- 실시간 계산: 학점 입력시 즉각적인 요구사항 업데이트
- 상태 관리: Zustand를 활용한 효율적인 상태 관리
npm install --legacy-peer-depsnpm run devnpm run buildnpm run preview- Frontend: React 18 + TypeScript
- Build Tool: Vite
- State Management: Zustand with persist middleware
- Styling: Custom CSS with CSS Grid & Flexbox
- Backend: Supabase (PostgreSQL + Auth + API)
- Authentication: Google OAuth 2.0
- Deployment: Vercel
- Data Storage: LocalStorage + Cloud (Supabase)
src/
├── components/ # UI 컴포넌트
│ ├── Header.tsx # 앱 헤더 + 로그인 버튼
│ ├── AuthButton.tsx # Google 로그인/로그아웃 버튼
│ ├── RequirementCards.tsx # 요구사항 진행 카드
│ ├── SemesterGrid.tsx # 학기별 학점 입력 그리드
│ ├── SyncStatus.tsx # 클라우드 동기화 상태
│ └── BrowserGuide.tsx # 외부앱 브라우저 가이드
├── stores/
│ ├── creditStore.ts # Zustand 학점 상태 관리
│ └── authStore.ts # Google 인증 상태 관리
├── lib/
│ └── supabase.ts # Supabase 클라이언트 설정
├── types/
│ └── index.ts # TypeScript 타입 정의
├── utils/
│ └── calculations.ts # 학점 계산 로직
└── index.css # 글로벌 스타일
- 우측 상단의 "로그인" 버튼 클릭
- Google 계정으로 로그인
- 데이터가 클라우드에 자동 백업되어 다른 기기에서도 접근 가능
- 학기 카드에서 "+ 학점 추가" 버튼 클릭
- 학점 구분 선택 (전공필수, 전공선택, 교양, 공대공통, 복수전공필수, 복수전공선택)
- 전공 관련 과목의 경우 주전공/복수전공 구분 선택
- 과목명 입력 (선택사항)
- 학점 입력 (기본값: 3학점)
- "추가" 버튼으로 확정
- 좌측 하단의 "복수전공 활성화" 체크박스 클릭
- 전공 요구사항이 62학점 → 48학점으로 변경
- 복수전공 요구사항 카드가 추가로 표시 (39학점)
- 기본 8학기(1-1 ~ 4-2) 외 추가 학기 생성 가능
- 우측 끝의 "+ 학기 추가" 버튼으로 새 학기 추가
- 과목이 없는 학기는 삭제 가능 (기본 8학기는 삭제 불가)
- 직관적 인터페이스: 카드 기반의 깔끔한 디자인
- 실시간 피드백: 진행률 바와 퍼센티지로 즉각적인 상태 확인
- 반응형 디자인: 다양한 화면 크기 지원
- 빠른 응답: 학점 입력 → 업데이트 응답시간 < 150ms
- 효율적 상태 관리: Zustand를 통한 최적화된 리렌더링
- 자동 데이터 지속성: 페이지 새로고침시에도 데이터 유지
- 입력 검증: 0.5 단위 학점, 음수 방지
- 일관성 보장: 실시간 계산으로 항상 정확한 상태 유지
- 안전한 삭제: 과목이 있는 학기는 삭제 방지
useCreditStore: 학점 거래 및 계산 관리useProfileStore: 복수전공 설정 관리- 자동 persist를 통한 LocalStorage 동기화
- 완전한 TypeScript 지원
- 엄격한 타입 검사로 런타임 오류 방지
- 개발 시점 타입 안전성 보장
- Vite를 통한 빠른 개발 서버
- Tree shaking으로 최적화된 번들 크기
- 현대적 ES 모듈 지원
MIT License
SNU 졸업요건 추적기 - 졸업까지의 여정을 더 쉽게 🎓