Skip to content

2026-KUSITMS-GLIT/2026-KUSITMS-GLIT-FRONT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

758 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GLIT Frontend

하루 5분 커리어 기록 서비스 GLIT의 프론트엔드 레포지토리입니다.
소셜 로그인 → 온보딩 → 스크럼·STAR 기록 → 캘린더 → AI 역량 리포트로 이어지는 사용자 경험을 제공합니다.

cover

목차

✨ 주요 기능

🔐 로그인 / 온보딩

  • 카카오·구글·네이버 소셜 로그인
  • 직무·관심 역량 설정 온보딩 플로우

📝 기록

  • 오늘의 할 일 — 데일리 스크럼 기반 업무 기록
  • 심화 기록 / STAR 기록 — 경험을 구조화된 형식으로 상세 기록
  • 역량 선택 & AI 태깅 — 기록에서 역량을 직접 선택하거나 AI가 자동 태깅

📅 캘린더

  • 월별 잔디 형태로 기록 현황 시각화
  • 날짜별 기록 상세 조회

📊 리포트

  • 미니 리포트 — 기록 기반 간단 역량 요약
  • 커리어 리포트 — AI가 분석한 역량 레이더 차트 및 성장 리포트
  • 리포트 생성 및 결과 조회

👤 마이페이지

  • 프로필 편집
  • 푸시 알림 시간 설정

🖥 기술 스택

Category Stack
Language TypeScript
Framework React Next.js
Styling Tailwind CSS clsx tailwind-merge
UI Components Swiper Lottie Recharts React DayPicker
State Management Zustand
Data Fetching / Caching TanStack Query ky
Compiler Optimization React Compiler
Infrastructure / Auth Firebase
Code Quality / Linting ESLint eslint-config-next simple-import-sort
Code Formatting Prettier prettier-plugin-tailwindcss
Git Hooks / Automation Husky lint-staged
Unit Testing Vitest Testing Library jsdom
E2E Testing Playwright
Visual Testing Storybook Chromatic
Package Manager pnpm
Collaboration GitHub Discord Jira Notion Figma

🏗 아키텍처 & 디렉토리 구조

Next.js App Router 기반의 페이지 구성을 따르며, UI 컴포넌트(components)와 페이지 비즈니스 로직(containers)을 분리해 관심사를 명확히 나눴습니다.

src/
├── app/                        # Next.js App Router (라우트·레이아웃·메타데이터)
│   ├── auth/                   # 소셜 로그인 페이지
│   │   └── callback/           # OAuth 콜백 처리
│   ├── onboarding/             # 온보딩 플로우
│   │   ├── (main)/             # 온보딩 메인 스텝
│   │   └── guide/              # 서비스 가이드
│   ├── record/                 # 기록 홈
│   │   ├── today-task/         # 오늘의 할 일 (스크럼)
│   │   ├── deep-log/           # 심화 기록
│   │   ├── star-log/           # STAR 기록
│   │   ├── select-skills/      # 역량 선택
│   │   └── skill-tagging/      # AI 역량 태깅
│   ├── calendar/               # 캘린더(잔디) 조회
│   │   └── [date]/             # 날짜별 기록 상세
│   ├── report/                 # 리포트 홈
│   │   ├── create/             # 리포트 생성
│   │   ├── generate/           # 리포트 생성 중
│   │   ├── career/             # 커리어 리포트 상세
│   │   └── mini/               # 미니 리포트
│   ├── my/                     # 마이페이지
│   │   ├── profile/            # 프로필 편집
│   │   ├── alarm/              # 알림 설정
│   │   └── guide/              # 이용 가이드
│   ├── manifest.ts             # PWA 매니페스트
│   └── layout.tsx / globals.css / not-found.tsx
├── components/                 # 재사용 가능한 순수 UI 컴포넌트
├── containers/                 # 페이지별 비즈니스 로직 컨테이너 (데이터 페칭·상태 연결)
├── store/                      # Zustand 전역 클라이언트 상태 슬라이스
├── lib/                        # API 클라이언트·유틸 함수·훅
├── providers/                  # TanStack Query·Firebase 등 Provider 모음
├── types/                      # 전역 TypeScript 타입 정의
├── constants/                  # 라우트·코드 등 상수
├── assets/                     # SVG 아이콘·이미지
├── font/                       # 로컬 폰트 파일
├── data/                       # 정적 목업·seed 데이터
├── stories/                    # Storybook stories
├── __test__/unit/              # Vitest 단위 테스트
└── proxy.ts                    # Next.js Route Handler 기반 API 프록시 설정

⚡ 핵심 설계 포인트

상태 관리

  • 레이어 분리 — TanStack Query(서버 데이터 캐싱·동기화) / Zustand(UI 전역 상태) / React useState(로컬 UI)로 역할을 명확히 나눠 불필요한 리렌더링 억제
  • 쿼리 캐시 persist@tanstack/react-query-persist-client로 캐시를 localStorage에 직렬화, 재방문 시 API 재요청 없이 즉시 렌더링

API 통신

  • 서버 — RSC에서 Next.js 네이티브 fetch로 직접 API 호출. server-only 패키지로 서버 전용 모듈의 클라이언트 유출을 컴파일 타임에 차단
  • 클라이언트ky 기반 HTTP 클라이언트로 인터셉터·재시도·타임아웃 처리. proxy.ts(Next.js Route Handler)를 중간 계층으로 두어 API Base URL·인증 헤더를 클라이언트에 노출하지 않고 CORS 정책을 서버 사이드에서 일괄 처리

성능 최적화

  • React Compiler 활성화 — 컴파일 타임 자동 메모이제이션으로 useMemo·useCallback 수동 작성 부담 제거
  • RSC 우선 원칙 — 데이터 페칭·정적 렌더링은 Server Component로 처리해 클라이언트 번들 절감
  • 이미지 최적화 — Next.js <Image> + qualities: [75, 95] 설정으로 WebP 자동 변환·크기 최적화
  • SVG 최적화 — 아이콘은 svgr로 React 컴포넌트화해 currentColor 동적 색상 적용 및 트리쉐이킹, 경로별 Turbopack 로더 규칙으로 번들 분리

코드 품질

  • ESLint zero-warning CI 게이트 — PR마다 lint:ci(--max-warnings 0) 강제, simple-import-sort로 import 순서 자동 정렬
  • Husky + lint-staged — 커밋 시 변경 파일에만 ESLint·Prettier를 적용해 빠른 피드백 유지
  • Prettier + prettier-plugin-tailwindcss — Tailwind 클래스 자동 정렬로 코드 리뷰 노이즈 제거

☁️ CI/CD

PR 생성 → Lint·Format + 단위·E2E 테스트 → Vercel Preview 자동 배포 → PR 코멘트로 URL 공유 Push to dev → Vercel 프로덕션 배포 (glit.today)

워크플로 트리거 주요 작업
test.yml PR → dev Vitest 단위 + Playwright E2E (Chromium·WebKit), 결과 Discord 알림
preview.yml PR → dev ESLint zero-warning + Prettier 검사 → Vercel Preview 빌드·배포 → PR 코멘트 URL 자동 게시
deploy.yml Push → dev Vercel 프로덕션 빌드 & 배포
  • 환경 변수: Vercel 프로젝트 환경 변수로 관리 — 이미지·레포에 평문 미탑재

💻 로컬 실행

요구사항: Node.js 20, pnpm 10

# 1. 의존성 설치
pnpm install

# 2. 환경 변수 설정
cp .env.example .env.local
# .env.local에 아래 값 입력

# 3. 개발 서버 실행
pnpm dev
# → http://localhost:3000

주요 명령어

pnpm test:unit          # Vitest 단위 테스트
pnpm test:e2e:run       # Playwright E2E 테스트
pnpm lint:ci            # ESLint zero-warning (CI용)
pnpm format:check       # Prettier 검사 (CI용)
pnpm storybook          # 로컬 Storybook 서버 (http://localhost:6006)

환경 변수 (.env.example 참고)

변수 설명
NEXT_PUBLIC_API_BASE_URL 백엔드 API 서버 URL
NEXT_PUBLIC_FIREBASE_* Firebase 프로젝트 설정 (FCM 푸시 알림)
NEXT_PUBLIC_GA_ID Google Analytics 측정 ID

🤝 협업 가이드

브랜치 전략·커밋 컨벤션·PR 규칙은 CONTRIBUTING.md를 참고해 주세요.

👥 팀원

김예원
@yewon20804
박유민
@waldls
임세윤
@seyun31
Frontend Lead Frontend Frontend

About

[KUSITMS 33rd 밋업프로젝트 우수상🏆] 기록할수록 선명해지는 나만의 커리어, 글릿✨ - Frontend

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages