Wenlan
Wenlan is a source-backed AI knowledge base and LLM wiki for AI work: organize documents and decisions into pages you can find, inspect, and review.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
일정 관리와 계획을 위한 플레너입니다.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
취업 준비생을 위한 플래너입니다. 일간 / 주간 / 월간 단위로 목표를 잡고 완료를 체크하며, 히트맵과 통계로 누적 기록을 볼 수 있습니다. 이하 내용은 언제든 수정될 수 있습니다.Read the full README ↗
취업 준비생을 위한 플래너입니다. 일간 / 주간 / 월간 단위로 목표를 잡고 완료를 체크하며, 히트맵과 통계로 누적 기록을 볼 수 있습니다.
이하 내용은 언제든 수정될 수 있습니다.
| 구분 | 사용 기술 |
|---|---|
| 프레임워크 | Next.js 16 (App Router, Turbopack 기본) |
| UI | React 19, Tailwind CSS v4 |
| 데이터 패칭 | TanStack Query v5 |
| HTTP | Axios |
| 인증·DB | Supabase (Auth + PostgreSQL, @supabase/ssr) |
| 날짜 | date-fns |
| 아이콘 | Lucide React |
/daily): 날짜 이동, 태스크 CRUD, 완료 체크(낙관적 업데이트), 카테고리·우선순위 필터, 진행률 표시/weekly): ISO 주 기준 목표, 주간 달성률/monthly): 월 목표, 일별 완료 건수 미니 캘린더, 월간 달성률/history): 통계 카드, 최근 12주 GitHub 스타일 히트맵, 기간·카테고리 필터, 완료 목록. 통계·히트맵 집계는 DB에서 전체 행에 대해 수행하고 목록만 40건씩 받아옵니다 (RPC completed_history)/jobs): 공고 CRUD, 상태 관리 (저장됨 → 지원 → 면접 → 합격/불합격/오퍼). 목록은 20건씩 그리고 "더 보기"로 늘립니다/quiz): 카테고리·난이도별 문제, 즐겨찾기(북마크) 기능/timer): 스톱워치 / 카운트다운 타이머, 완료 토스트 알림/login으로, 루트 /는 인증 여부에 따라 /daily 또는 /login으로 (src/proxy.ts)src/
├── app/
│ ├── (auth)/login/ # 로그인
│ ├── (dashboard)/ # daily, weekly, monthly, history, jobs, quiz, timer
│ ├── api/ # Route Handlers
│ │ ├── tasks/[id]/
│ │ ├── tasks/history/ # 완료 기록 집계 (RPC completed_history 호출)
│ │ ├── ddays/[id]/
│ │ ├── job-postings/[id]/
│ │ ├── quiz-histories/ # 퀴즈 즐겨찾기 toggle
│ │ ├── task-templates/[id]/ # 일간 태스크 템플릿 CRUD
│ │ ├── goal/ # 최종목표
│ │ └── profile/ # 하루 시작 시각 등 프로필
│ ├── auth/callback/ # OAuth 코드 교환
│ ├── layout.tsx, providers.tsx
│ └── page.tsx # 루트 분기의 폴백 (평소엔 프록시가 먼저 처리)
├── components/
│ ├── layout/ # Sidebar, Header, Footer, NavigationProgress
│ └── ui/ # Button, Modal, Badge, EmptyState, Skeleton, Toast, useToast
├── hooks/
│ ├── auth/useAuth.ts
│ └── theme/useTheme.tsx
├── lib/
│ ├── api/ # route-helpers(withAuth·parseBody·dbError), schemas(zod), rate-limit
│ ├── apply-daily-templates.ts # 템플릿 시딩 (RPC seed_daily_templates 호출)
│ ├── axios.ts # Axios 인스턴스 (baseURL=/api, Auth 인터셉터)
│ ├── query.ts # STABLE_QUERY_OPTIONS / DAILY_QUERY_OPTIONS
│ ├── supabase/ # client, server, update-session
│ ├── task-dates.ts
│ ├── themes.ts # ThemeId, THEMES, THEME_IDS, DEFAULT_THEME_ID
│ └── utils.ts
├── types/
│ ├── index.ts # Task, Profile, Dday, JobPosting 등 공통 타입
│ └── quiz.ts # QuizCategory, QuizQuestion, QuizHistory 등
└── proxy.ts # 세션 갱신 + 인증 리다이렉트
supabase/
├── schema.sql # DB 스키마·RLS·트리거·RPC (소스 오브 트루스)
└── migrations/ # 순번 마이그레이션 (0000~, `pnpm db:push`로 적용)
e2e/ # Playwright 시나리오 + 가이드(README.md)
scripts/
├── perf/ # Lighthouse 측정·진단 (run·diagnose·ledger·volume·auth·pages)
└── dev-login.mjs # 테스트 계정 세션을 브라우저에 주입
docs/
├── perf/
│ ├── README.md # 지표 해설·측정 방법
│ ├── history.md # 로컬 측정 원장 (pnpm perf 가 자동 기록)
│ ├── deploy-latency.md # 배포 URL TTFB 자동 원장
│ ├── archive/ # 현재 비교에서 제외한 legacy·오측정 기록
│ ├── incidents/ # 원장 오염 사건과 재발 방지 결정
│ └── function-region.md # Vercel 함수 리전 결정과 프록시 배치의 사각지대
├── security/ # API 남용 방어 목록·근거(README.md)·검증 절차(verification.md)
├── auth-redirects.md # 리다이렉트 상호작용·프록시의 낙관적 세션 검증
├── hydration.md # SSR 하이드레이션 불일치 사례·해결 패턴·회귀 감시
└── task-race-guards.md # 경합 가드 — 태스크 토글·삭제·편집, 템플릿 변경
일간·주간·월간 페이지는 공통 로직을
usePlannerPage훅으로 공유하며, 로드 실패 시_components/QueryErrorRetry로 재시도를, 뮤테이션 실패 시useToast로 에러를 안내합니다.
같은 대상을 건드리는 경로가 겹칠 때의 규칙은 문서로 남겨 두었습니다 — 태스크 토글·삭제·편집이 서로를 잠그는 기준과 템플릿 변경 시의 캐시 경합은 docs/task-race-guards.md, 로그인 상태에 따라 경로를 옮기는 세 지점이 서로를 먹지 않게 하는 방법은 docs/auth-redirects.md 참조.
패키지 매니저는 pnpm을 사용합니다 (npm 사용 금지).
pnpm install
NEXT_PUBLIC_SUPABASE_URL=https://<project-ref>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<supabase_anon_key>
# E2E 용 테스트 계정 (없으면 인증 E2E 는 skip 됩니다)
E2E_TEST_USER_EMAIL=<test_user_email>
E2E_TEST_USER_PASSWORD=<test_user_password>
# 성능 측정 전용 계정. E2E 가 건드리지 않아 데이터 볼륨이 고정됩니다.
# 없으면 E2E_TEST_USER_* 로 폴백하지만 원장의 세로 비교가 성립하지 않습니다
# (docs/perf/accounts.md). 계정 생성: node scripts/e2e/provision-account.mjs
PERF_TEST_USER_EMAIL=<perf_user_email>
PERF_TEST_USER_PASSWORD=<perf_user_password>
# 계정 프로비저닝에만 쓰는 서비스 롤 키. 커밋·CI 반입 금지, .env.local 에만 둡니다.
SUPABASE_SERVICE_ROLE_KEY=<supabase_service_role_key>
pnpm dev
브라우저에서 http://localhost:3000 — 로그인된 사용자는 /daily로, 비로그인 시 /login으로 흐름이 이어집니다.
This is the beginning of the README. Read the rest at the original. Read the full README ↗