ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
每天 10 分钟,养成 IT 专家习惯。
AI 翻译
하루 10분, IT 전문가로 성장하는 습관
正在加载完整 README。 以下为已保存的摘录。
TodayPick은 매일 IT 콘텐츠를 읽고 기록하며 학습 습관을 만드는 웹 애플리케이션입니다. 읽은 글을 다시 찾고, 하루 읽기 목표와 연속 학습일을 관리하고, 읽은 글을 인용해 글을 쓰고 공유할 수 있습니다.查看完整 README ↗
하루 10분, IT 전문가로 성장하는 습관
TodayPick은 매일 IT 콘텐츠를 읽고 기록하며 학습 습관을 만드는 웹 애플리케이션입니다. 읽은 글을 다시 찾고, 하루 읽기 목표와 연속 학습일을 관리하고, 읽은 글을 인용해 글을 쓰고 공유할 수 있습니다.
CS 복습 탭에서 다시 풀기icn1)에서 실행 (vercel.json)src/
├── app/ # Next.js App Router
│ ├── api/ # API 라우트
│ │ ├── cs-reviews/ # CS 지식 채점 기록, 복습 목록
│ │ ├── daily-activities/ # 일일 활동, 읽기 목표
│ │ ├── feed-reads/ # 읽은 글 히스토리
│ │ ├── feeds/ # RSS 피드, 스크랩
│ │ ├── profile/ # 프로필, 관심 분야
│ │ ├── quizzes/ # 오늘의 퀴즈, 답안
│ │ ├── quotes/ # 명언
│ │ ├── statistics/ # 학습 통계, 주간 리포트
│ │ ├── writing-bookmarks/ # 게시글 북마크
│ │ └── writing-drafts/ # 글 작성, 공개 게시글
│ ├── cs/ # CS 지식
│ ├── feeds/ # 피드 페이지
│ ├── glossary/ # IT 용어사전 (목록·검색, [id] 상세)
│ ├── login/ # 로그인
│ ├── posts/[id]/ # 게시글 상세
│ ├── privacy/ # 개인정보처리방침
│ ├── profile/ # 프로필
│ ├── signup/ # 회원가입
│ ├── sources/ # 출처 안내와 삭제 요청 방법
│ ├── terms/ # 이용약관
│ └── write/ # 글쓰기
├── components/ # 화면 컴포넌트
│ ├── auth/ cs/ feed/ glossary/ policy/ profile/ quote/ write/ ui/
├── config/ # 상수, 관심 분야, RSS 소스 설정
├── data/ # 정적 데이터 (퀴즈, 명언, CS 문항, IT 용어, 피드 소스)
├── hooks/ # 커스텀 훅
├── services/ # 서버 로직 (RSS 수집, 일일 활동 등)
├── stores/ # Zustand 스토어
├── test/ # 테스트 공용 헬퍼 (Supabase fake, 요청·렌더 헬퍼)
├── types/ # 타입 정의
└── utils/ # 유틸리티 (날짜, 통계, 피드, 글쓰기, API 응답 등)
scripts/
└── check-feeds.ts # RSS 소스 상태 점검 (npm run check:feeds)
# 저장소 클론 및 의존성 설치
git clone <repository-url>
cd todaypick
nvm use # .nvmrc 기준 Node.js 24
npm install
# 환경 변수 설정
cp .env.example .env.local
# 개발 서버 실행
npm run dev
필요한 환경 변수는 .env.example의 두 개입니다.
| 변수 | 설명 |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase 프로젝트 URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase anon key |
FEED_COLLECTOR_SECRET | RSS 예약 수집 API 호출용 비밀값. Supabase Vault의 feed_collector_secret과 같은 값 (docs/feed-collection.md) |
Supabase CLI로 로컬 프로젝트를 연결한 뒤 마이그레이션을 적용합니다.
npx supabase login
npx supabase link --project-ref <project-ref>
npx supabase migration list --linked # 로컬과 원격의 적용 상태 비교
npx supabase db push # 미적용 migration 반영
supabase/migrations는 테이블, 인덱스, 트리거, RLS 정책과 Storage 정책의 기준 소스입니다.
Dashboard에서 직접 스키마를 변경했다면 npx supabase db diff -f <migration-name>으로 변경 이력을 먼저 저장합니다.
원격 적용 확인과 릴리스 절차는 docs/release-operations.md를 따릅니다.
| 테이블 | 용도 |
|---|---|
users | 사용자 프로필, 관심 분야, 하루 읽기 목표, 가입 동의 기록 |
daily_activities | 날짜별 학습 활동과 읽기 목표 달성 상태 |
feed_reads | 읽은 글 히스토리(서울 날짜 기준, 재방문 횟수 포함) |
feed_items | 예약 수집한 RSS 글(카드 표시 범위만, 발행 후 1년 보관) |
scraped_feeds | 스크랩한 RSS 피드 |
scraped_quotes | 스크랩한 명언 |
quiz_results | 퀴즈 답안과 정답 여부 |
cs_reviews | CS 지식 채점 기록(점수, 언급한 키워드, 답변) |
writing_drafts | 작성한 글(공개·비공개) |
writing_bookmarks | 북마크한 공개 게시글 |
| 함수 | 용도 |
|---|---|
record_feed_read | 읽은 글 기록과 일일 목표 달성 상태 갱신 |
cleanup_feed_read_history | 30일·100개 보관 정책에 따른 기록 정리 (pg_cron) |
upsert_feed_items | 수집 API가 비밀값을 확인받고 RSS 글을 저장, 1년 지난 글 정리 (pg_cron collect-feeds가 3시간마다 수집 API 호출) |
get_public_writing_drafts | 공개 게시글 조회 |
handle_new_user | 가입 시 프로필 생성 |
delete_own_account | 로그인한 본인 계정 삭제 (기록은 cascade로 함께 삭제) |
npm run dev # 개발 서버 (Turbopack)
npm run build # 프로덕션 빌드
npm run start # 프로덕션 서버
npm run lint # ESLint
npm run type-check # tsc --noEmit
npm test # Vitest 단위 테스트
npm run check:feeds # RSS 소스 상태 점검
코드 변경 후에는 위 네 가지 검증(lint, type-check, test, build)을 모두 실행합니다.
GitHub Actions CI / verify가 같은 명령을 실행합니다.
check:feeds는 모든 RSS 소스를 실제로 요청해 실패, 리다이렉트, 365일 이상 미갱신, 허용 목록 밖 썸네일 호스트를 보여 줍니다.
외부 네트워크 상태에 따라 결과가 달라지므로 CI에서는 실행하지 않습니다. 소스를 추가하거나 정리할 때 직접 실행합니다.
| 경로 | 설명 |
|---|---|
/ | 오늘 읽어볼 콘텐츠, 오늘의 퀴즈, 오늘의 명언, 학습 체크리스트 |
/cs | CS 지식 문항과 분야 필터 |
/glossary | IT 용어사전 목록과 검색 |
/glossary/[id] | 용어 상세 |
/feeds | IT 뉴스·테크 블로그·게시글 탭과 관심 분야 필터 |
/posts/[id] | 공개 게시글 상세 |
/write | 글쓰기와 수정 |
/profile | 저장한 콘텐츠, 읽은 글, 내가 쓴 글, 퀴즈 기록, CS 복습, 명언, 학습 통계 |
/login, /signup | 인증 |
/sources | 외부 글 표시 범위, 수집 중인 출처, 삭제·수정 요청 방법 |
/privacy | 개인정보처리방침 |
/terms | 이용약관 |
max-width: 1080px과 동일한 좌우 시작선src/app/globals.css의 역할 기반 토큰 사용prefers-reduced-motion 존중