Skip to content

Seq-Lab/PrimerFlow-FE

Repository files navigation

PrimerFlow-FE

Next.js React TypeScript Tailwind CSS License

PCR 프라이머 섀계 μ›Œν¬ν”Œλ‘œμš°λ₯Ό μœ„ν•œ Next.js ν”„λ‘ νŠΈμ—”λ“œμž…λ‹ˆλ‹€.
4단계 Wizard UI, λ°±μ—”λ“œ 연동, κ²°κ³Ό μΊ”λ²„μŠ€ μ‹œκ°ν™”λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ κ°œμš”

  • Next.js App Router 기반 단일 νŽ˜μ΄μ§€ Wizard(app/page.tsx)
  • ν…œν”Œλ¦Ώ μ‹œν€€μŠ€ μž…λ ₯(FASTA/Raw) μ •κ·œν™” 및 μœ νš¨μ„± 검사
  • /api/design API 호좜 ν›„ κ²°κ³Όλ₯Ό μƒˆ νƒ­(/result)으둜 ν‘œμ‹œ
  • κ²°κ³Όλ₯Ό localStorage에 μ €μž₯/볡원해 νƒ­ κ°„ 데이터 전달
  • Canvas 기반 genome track λ Œλ”λ§(쀌/νŒ¨λ‹ 포함)

ν˜„μž¬ λ™μž‘ μƒνƒœ (2026-03-09 κΈ°μ€€)

1) Step 1

  • FASTA 헀더 제거, 곡백 제거, ATGC 이외 문자 필터링/λŒ€λ¬Έμžν™”
  • 파일 μ—…λ‘œλ“œ, ν΄λ¦½λ³΄λ“œ λΆ™μ—¬λ„£κΈ°, 큰 μž…λ ₯(30,000자 초과) 프리뷰 λͺ¨λ“œ 지원

2) Step 2~4 μž…λ ₯ μ—°κ²° μƒνƒœ

  • Step 2/Step 4 λŒ€λΆ€λΆ„ ν•„λ“œλŠ” UI κΈ°λ³Έκ°’ ν‘œμ‹œ λ‹¨κ³„μž…λ‹ˆλ‹€.
  • Step 3μ—μ„œλŠ” restriction_enzymes μž…λ ₯만 μ‹€μ œ μš”μ²­ payload에 λ°˜μ˜λ©λ‹ˆλ‹€.
  • ν…œν”Œλ¦Ώ μ‹œν€€μŠ€(target_sequence)λŠ” μ‹€μ œ API μš”μ²­μ— λ°˜μ˜λ©λ‹ˆλ‹€.

3) Generate λ™μž‘

  • Generate Primers 클릭 μ‹œ μƒˆ νƒ­(/result)을 λ¨Όμ € μ—΄κ³  API μš”μ²­ μ‹€ν–‰
  • 성곡 μ‹œ κ²°κ³Ό ν‚€(resultKey)λ₯Ό 쿼리슀트링으둜 전달해 κ²°κ³Ό νŽ˜μ΄μ§€ λ Œλ”λ§
  • μ‹€νŒ¨ μ‹œ μ—λŸ¬ λ©”μ‹œμ§€ ν‘œμ‹œ 및 μž„μ‹œ νƒ­ 정리

4) κ²°κ³Ό νŽ˜μ΄μ§€(/result)

  • resultKey둜 localStorage 데이터 볡원
  • Primer/Template focus 기반 초기 쀌 μƒνƒœ μžλ™ 계산
  • Canvasμ—μ„œ κ²°κ³Ό track μ‹œκ°ν™” 및 쀌/리셋 μ‘°μž‘ 지원

기술 μŠ€νƒ

  • Framework: Next.js 16 (App Router)
  • Language: TypeScript (strict)
  • UI: React 19, Tailwind CSS 4, lucide-react
  • State: Zustand
  • Data: Axios, TanStack Query
  • Test: Vitest

폴더 ꡬ쑰

PrimerFlow-FE/
β”œβ”€ app/
β”‚  β”œβ”€ page.tsx                  # 4-step wizard 메인 ν™”λ©΄
β”‚  β”œβ”€ result/
β”‚  β”‚  β”œβ”€ page.tsx               # κ²°κ³Ό 라우트(ν΄λΌμ΄μ–ΈνŠΈ 동적 import)
β”‚  β”‚  └─ ResultClientPage.tsx   # resultKey 기반 κ²°κ³Ό 볡원/ν‘œμ‹œ
β”‚  β”œβ”€ layout.tsx
β”‚  └─ providers.tsx             # QueryClientProvider
β”œβ”€ components/
β”‚  β”œβ”€ canvas/GenomeCanvas.tsx   # 곡용 μΊ”λ²„μŠ€ μΈν„°λž™μ…˜(νŒ¨λ‹/휠 쀌)
β”‚  β”œβ”€ steps/                    # Step1~Step4 UI
β”‚  β”œβ”€ ui/                       # 헀더/ν‘Έν„°/λ„€λΉ„κ²Œμ΄μ…˜
β”‚  └─ PrimerResultModal.tsx
β”œβ”€ src/
β”‚  β”œβ”€ lib/                      # μ•Œκ³ λ¦¬μ¦˜, API ν΄λΌμ΄μ–ΈνŠΈ, νŒŒμ„œ, storage
β”‚  β”œβ”€ services/analysisService.ts
β”‚  └─ types/
β”œβ”€ store/useViewStore.ts
β”œβ”€ hooks/
β”œβ”€ tests/
└─ docs/

μ‹œμž‘ν•˜κΈ°

μš”κ΅¬ 사항

  • Node.js 20.x 이상
  • npm
  • 둜컬 λ°±μ—”λ“œ μ„œλ²„(http://127.0.0.1:8000)

μ„€μΉ˜ 및 μ‹€ν–‰

# 1) μ˜μ‘΄μ„± μ„€μΉ˜
npm ci

# 2) 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

λΈŒλΌμš°μ €μ—μ„œ http://localhost:3000을 μ—΄μ–΄ ν™•μΈν•©λ‹ˆλ‹€.

ν™˜κ²½ λ³€μˆ˜ 및 API ν”„λ‘μ‹œ

ν˜„μž¬ next.config.tsλŠ” μ•„λž˜ rewriteλ₯Ό κ³ μ •μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • /api/:path* -> http://127.0.0.1:8000/:path*

즉, ν”„λ‘ νŠΈμ—”λ“œλŠ” POST /api/design으둜 ν˜ΈμΆœν•˜κ³  μ‹€μ œ μš”μ²­μ€ 둜컬 λ°±μ—”λ“œλ‘œ ν”„λ‘μ‹œλ©λ‹ˆλ‹€.

.env.exampleλŠ” μ•ˆλ‚΄μš©μ΄λ©°, ν˜„μž¬ μ½”λ“œ κΈ°μ€€μœΌλ‘œ λ°±μ—”λ“œ λΌμš°νŒ…μ— ν•„μˆ˜ ν™˜κ²½ λ³€μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

슀크립트

npm run dev     # 개발 μ„œλ²„
npm run build   # ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run start   # ν”„λ‘œλ•μ…˜ μ„œλ²„ μ‹€ν–‰
npm run lint    # eslint .
npm test        # vitest run

ν…ŒμŠ€νŠΈ

ν˜„μž¬ ν¬ν•¨λœ 핡심 ν…ŒμŠ€νŠΈ:

  • tests/step1TemplateSequence.test.ts
    • FASTA/Raw μž…λ ₯ μ •κ·œν™”, invalid 문자 탐지/제거 검증
  • tests/visibleRange.test.ts
    • prefix sum 및 visible range 계산 검증

CI

GitHub Actionsμ—μ„œ PR κΈ°μ€€μœΌλ‘œ μ•„λž˜ 검증이 μ‹€ν–‰λ©λ‹ˆλ‹€.

  • Lint
  • Test
  • Build

λ˜ν•œ main 브랜치 λŒ€μƒ PR은 develop λΈŒλžœμΉ˜μ—μ„œλ§Œ ν—ˆμš©ν•˜λ„λ‘ 정책이 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μ£Όκ°„ μ§„ν–‰ 상황

Week 1 (25.12.22 - 25.12.28)

  • μž‘μ—… λ‚΄μ—­:
    • κΈ°μˆ μŠ€νƒ μ„ μ •
      • Next.js: 메인 νŽ˜μ΄μ§€(app/page.tsx)와 μ „μ—­ λ ˆμ΄μ•„μ›ƒμ„ ꡬ성, 정적 λ¦¬μ†ŒμŠ€ 관리 및 ν—€λ“œ μ„€μ •
      • TypeScript: μ»΄ν¬λ„ŒνŠΈ, μ „μ—­ μŠ€ν† μ–΄, μœ ν‹Έ νƒ€μž…μ„ λͺ…μ‹œ
      • Canvas API: μΊ”λ²„μŠ€ μ»¨ν…μŠ€νŠΈ 직접 처리, λŒ€μš©λŸ‰ μ„œμ—΄ λ Œλ”λ§, 쀌/νŒ¨λ‹ λ³€ν™˜, ν…μŠ€νŠΈ/λ°” λ„ν˜• 그리기
      • Zustand: μΊ”λ²„μŠ€ λ·° μƒνƒœ, 리셋/μ—…λ°μ΄νŠΈ μ•‘μ…˜μ˜ μ „μ—­ 관리
      • Vercel: Next.js μ•± 배포
    • ν”„λ‘œμ νŠΈ κΈ°λ³Έ μ•„ν‚€ν…μ²˜ 및 μŠ€μΌˆλ ˆν†€ μ½”λ“œ ꡬ성
  • AI ν™œμš©:
    • Gemini둜 상세 ν”„λ‘¬ν”„νŠΈ μž‘μ„±
    • Codex둜 ν”„λ‘œμ νŠΈ μ•„ν‚€ν…μ²˜ 및 μŠ€μΌˆλ ˆν†€ μ½”λ“œ μž‘μ„±
  • λ‹€μŒ μ£Ό κ³„νš:
    • page.tsx, layout.tsx κ΅¬ν˜„, λͺ© 데이터 좜λ ₯ 확인

Week 2 (25.12.29 - 26.01.04)

  • μž‘μ—… λ‚΄μ—­:
    • 더미 λ°μ΄ν„°λ‘œ νŽ˜μ΄μ§€ μ—°κ²°
    • λ·° μƒνƒœ(Zustand)와 쀌/νŒ¨λ‹ λ™μž‘ μ •λˆ
  • AI ν™œμš©:
    • Codex둜 layout.tsx, page.tsx μ„ΈλΆ€ κ΅¬ν˜„ 및 디버깅
  • μ™„λ£Œ κΈ°λŠ₯:
    • λͺ© 데이터 좜λ ₯ μƒνƒœ 확인
  • ν…ŒμŠ€νŠΈ κ²°κ³Ό:
    • week2_screenshot.png
  • λ‹€μŒ μ£Ό κ³„νš:
    • μŠ€νŽ™ 기반 초기 μž…λ ₯ 폼과 검증 둜직 착수

Week 3 (26.01.05 ~ 26.01.11)

  • μž‘μ—… λ‚΄μ—­:
    • PCR 프라이머 λ””μžμΈ μŠ€νŽ™ μž‘μ„±(1-based κ·œμΉ™, IUPAC μ œν•œ, μ„±λŠ₯ λͺ©ν‘œ 포함)
    • 메인 UI λ””μžμΈ κ²°μ • 및 닀크 톀 4단계 μŠ€ν… ν”Œλ‘œμš°λ‘œ λ¦¬μ›Œν¬
    • Genome νƒ€μž… 뢄리
  • AI ν™œμš©:
    • Stitch, Figma에 동일 ν”„λ‘¬ν”„νŠΈλ₯Ό λ„£μ–΄ λ””μžμΈ 비ꡐ ν›„ 채택
  • μ™„λ£Œ κΈ°λŠ₯:
    • 단계별 UI κ΅¬ν˜„ μ™„λ£Œ
    • 1단계: μ‹œν€€μŠ€ μž…λ ₯(FASTA/raw textarea)
    • 2단계: Primer Properties (GC% λ²”μœ„, μ΅œλŒ€ Tm 차이, GC Clamp, Poly-X μ œν•œ, 농도/μ—Ό 쑰건)
    • 3단계: Binding Location (검색 λ²”μœ„, Exon junction μ˜΅μ…˜, Intron 포함/λ²”μœ„, Restriction enzyme μž…λ ₯)
    • 4단계: κ²°κ³Όλ¬Ό 좜λ ₯
  • ν…ŒμŠ€νŠΈ κ²°κ³Ό:
    • 1단계: week3_screenshot#1.png
    • 2단계: week3_screenshot#2.png
    • 3단계: week3_screenshot#3.png
    • 4단계: week3_screenshot#4.png
  • λ‹€μŒ μ£Ό κ³„νš:
    • μ‹€μ œ 데이터 연동, GenomeCanvas 미리보기 및 컨트둀 마무리

Week 4 (26.01.12 ~ 26.01.18)

  • μž‘μ—… λ‚΄μ—­:
    • λ°±μ—”λ“œ λͺ¨ν‚Ή μ„œλΉ„μŠ€ κ΅¬ν˜„ 및 κ²°κ³Ό μ‹œκ°ν™”
    • Step 1 μ‹œν€€μŠ€ μž…λ ₯ νŽΈμ˜μ„± κ°œμ„ 
    • μ»΄ν¬λ„ŒνŠΈ μ•„ν‚€ν…μ²˜ κ°œμ„  및 UI μ—…λ°μ΄νŠΈ
  • AI ν™œμš©:
    • Codex둜 μΊ”λ²„μŠ€ ν‘œμ‹œ λͺ¨λ‹¬ κ΅¬ν˜„
    • Paste λ“± λ²„νŠΌ κΈ°λŠ₯ κ΅¬ν˜„
  • μ™„λ£Œ κΈ°λŠ₯:
    • λͺ© 데이터λ₯Ό λͺ¨λ‹¬λ‘œ ν‘œμ‹œ
    • Step 1μ—μ„œ DNA μ„œμ—΄ μž…λ ₯ μ‹œ FASTA μ—…λ‘œλ“œ, ν΄λ¦½λ³΄λ“œ λΆ™μ—¬λ„£κΈ° 지원
  • ν…ŒμŠ€νŠΈ κ²°κ³Ό:
    • λͺ© 데이터 ν‘œμ‹œ 확인: week4_screenshot#1.png
  • λ‹€μŒ μ£Ό κ³„νš:
    • μ™„μ„±λœ λ°±μ—”λ“œμ™€ μ—°λ™ν•˜μ—¬ κ²°κ³Ό ν‘œμ‹œ 및 디버깅

Week 5 (26.01.19 ~ 26.01.25)

  • μž‘μ—… λ‚΄μ—­:
    • ν”„λ‘ νŠΈμ—”λ“œ-λ°±μ—”λ“œ κ°„ API 톡신 규격(Spec) μ •μ˜ 및 연동 κ΅¬ν˜„
  • AI ν™œμš©:
    • Codex둜 Nested Objectλ₯Ό UI μ „μš© μƒνƒœ(Flat Object)둜 λ³€ν™˜ν•˜λŠ” μ–΄λŒ‘ν„° νŒ¨ν„΄ μ½”λ“œ 생성
  • μ™„λ£Œ κΈ°λŠ₯:
    • 프라이머 섀계 μš”μ²­ ν”„λ‘œμ„ΈμŠ€ κ΅¬ν˜„: μž…λ ₯κ°’ -> μ–΄λŒ‘ν„° -> API 호좜
    • κ²°κ³Ό λͺ¨λ‹¬ 데이터 바인딩: Mock 데이터 기반 μΊ”λ²„μŠ€/리슀트 λ Œλ”λ§
  • λ‹€μŒ μ£Ό κ³„νš:
    • μ‚¬μš©μž μž…λ ₯ DNA μ„œμ—΄ μ „μ²˜λ¦¬(Sanitization) 및 μœ νš¨μ„± 검증 둜직 κ΅¬ν˜„

Week 6 (26.01.26 ~ 26.02.01)

  • μž‘μ—… λ‚΄μ—­:
    • λŒ€μš©λŸ‰ 데이터(10,000bp+) λ Œλ”λ§ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•œ 뷰포트 탐색 둜직 κ°œμ„ 
    • μΊ”λ²„μŠ€ 슀크둀 μ‹œ 배경이 ν•¨κ»˜ λ°€λ¦¬λŠ” Jittering 버그 μˆ˜μ • 및 λ ˆμ΄μ–΄ κ³ μ • 처리
  • AI ν™œμš©:
    • Codex둜 binary search μ•Œκ³ λ¦¬μ¦˜ 둜직 검증 및 μ΅œμ ν™”
    • Gemini둜 문제 상황 μ„€λͺ… ν”„λ‘¬ν”„νŠΈ μž‘μ„±, Codex둜 μˆ˜μ • 적용
  • μ™„λ£Œ κΈ°λŠ₯:
    • Binary Search λ Œλ”λ§ μ΅œμ ν™”: O(N) -> O(log N) κ°œμ„ μœΌλ‘œ κ³ BP ꡬ간 ν”„λ ˆμž„ λ“œλž μ™„ν™”
    • Canvas λ°°κ²½ κ³ μ • λ Œλ”λ§ 처리
  • λ‹€μŒ μ£Ό κ³„νš:
    • μž…λ ₯ 데이터 validator κ΅¬ν˜„

Week 7 (26.02.02 ~ 26.02.08)

  • μž‘μ—… λ‚΄μ—­:
    • Step1 μ‹œν€€μŠ€ μž…λ ₯ μ •κ·œν™” 및 검증 UX κ°œμ„ 
    • ATGC λŒ€μ†Œλ¬Έμž 처리 및 비정상 문자(N, 숫자, 특수문자) 필터링 둜직 정립
    • λΆ™μ—¬λ„£κΈ°/파일 μ—…λ‘œλ“œ μ‹œ μ‚¬μš©μž λ™μ˜ UX 일관성 확보
  • AI ν™œμš©:
    • 4단계 ν”„λ‘¬ν”„νŠΈ(Phase 1~4) 기반 단계별 둜직 고도화 및 νŠΈλŸ¬λΈ”μŠˆνŒ…
    • Next.js Turbopack import 경둜 이슈 뢄석 및 ν•΄κ²°
    • λŒ€λŸ‰ λ¬Έμžμ—΄ λΆ™μ—¬λ„£κΈ° μ‹œ κ³Όλ„ν•œ μ‚­μ œ λ¬Έμ œμ— λŒ€ν•œ sanitize 방식 κ°œμ„ μ•ˆ 적용
  • μ™„λ£Œ κΈ°λŠ₯:
    • μ‹€μ‹œκ°„ μ •κ·œν™”: μž…λ ₯ μ¦‰μ‹œ λŒ€λ¬Έμž ATGC λ³€ν™˜ 및 μ‹€μ‹œκ°„ 필터링
    • μ˜ˆμ™Έ 처리: Upload/Paste/Ctrl+V μ‹œ 비정상 문자 감지 μ‹œ 확인 ν›„ 제거
    • chunk λ‹¨μœ„ sanitize μ „ν™˜μœΌλ‘œ μ„±λŠ₯ κ°œμ„  및 쀑볡 검증 제거
  • λ‹€μŒ μ£Ό κ³„νš:
    • λͺ© 데이터 제거 및 배포 λ°±μ—”λ“œ μ—°κ²°

Week 8 (26.02.09 ~ 26.02.15)

  • μž‘μ—… λ‚΄μ—­:
    • Mock Data 응닡 제거 및 μ‹€μ„œλ²„ 응닡 ꡬ쑰 κΈ°μ€€μœΌλ‘œ ν”„λ‘ νŠΈ 둜직 μ „ν™˜
    • μš”μ²­ νŒŒλΌλ―Έν„°λ₯Ό λ°±μ—”λ“œ μŠ€νŽ™μ— 맞좰 정리, μš”μ²­/응닡 λ§€ν•‘ 점검
    • API 호좜 μ‹€νŒ¨ 상황(λ„€νŠΈμ›Œν¬/μ„œλ²„ 였λ₯˜) λ©”μ‹œμ§€ 및 μƒνƒœ 처리 보강
    • λ””μžμΈ/UI 리뉴얼
      • Poppins 폰트 λ„μž…
      • 헀더 리뉴얼(PF ν…μŠ€νŠΈ -> 둜고 이미지, Primer Designer by SeqLab)
      • Step 1 μΉ΄λ“œ 헀더 νŒ¨λ”© μ‘°μ •(py-4 -> py-2)
      • Step 4 λΆˆν•„μš” μš”μ†Œ(Quality notes) 제거
      • λΆˆν•„μš” 빈 파일(tailwind.config.ts) μ‚­μ œ
    • μ½”λ“œ ν’ˆμ§ˆ μžλ™ 검증 PR 반영
      • GitHub Actions PR μ‹œ Lint/Test/Build μžλ™ μ‹€ν–‰
      • Vitest λ„μž… 및 npm test 슀크립트 μΆ”κ°€
      • 린트 슀크립트 eslint .둜 ν™•μž₯
      • visibleRange 기초 ν…ŒμŠ€νŠΈ μž‘μ„±
  • AI ν™œμš©:
    • Codex둜 API ν΄λΌμ΄μ–ΈνŠΈ 경둜(/api/design)와 μ„œλΉ„μŠ€ λ ˆμ΄μ–΄ λ§€ν•‘ 검증
    • 응닡 데이터 λ³€ν™˜ κ³Όμ •μ˜ νƒ€μž… μ•ˆμ •μ„± 점검 및 κ°œμ„ 
  • μ™„λ£Œ κΈ°λŠ₯:
    • 배포 λ°±μ—”λ“œ API 연동 μ™„λ£Œ
    • λ°±μ—”λ“œ 응닡을 Result Modal/Canvas λ Œλ”λ§ κ°€λŠ₯ν•œ ν˜•νƒœλ‘œ λ³€ν™˜ν•΄ ν‘œμ‹œ
    • Mock 의쑴 제거, 싀데이터 기반으둜 μ „ν™˜
    • PR ν’ˆμ§ˆ 게이트(Lint/Test/Build) μžλ™ 검증 체계 ꡬ좕
    • visibleRange 핡심 둜직 ν…ŒμŠ€νŠΈ 기반 확보

Week 9 (26.02.16 ~ 26.02.22)

  • μž‘μ—… λ‚΄μ—­:
    • 취약점 κ²½κ³  λŒ€μ‘
    • npm audit fix --force둜 μ˜μ‘΄μ„± 및 lockfile μ—…λ°μ΄νŠΈ
    • λ³΄μ•ˆ 패치 적용 ν›„ Lint/Test/Build κΈ°μ€€ λ™μž‘ 점검
  • AI ν™œμš©:
    • Codex둜 package.json/package-lock.json diff κ²€ν†  및 버전 상ν–₯ λ‚΄μ—­ 정리
    • μ—…λ°μ΄νŠΈ 이후 CI νšŒκ·€ μœ„ν—˜ 체크리슀트 점검
  • μ™„λ£Œ κΈ°λŠ₯:
    • Next.js: 16.1.1 -> 16.1.6
    • eslint: 9 -> 9.39.2
    • eslint-config-next: 16.1.1 -> 16.1.6
    • npm audit 취약점 λŒ€μ‘ μ˜μ‘΄μ„± μ—…λ°μ΄νŠΈ μ™„λ£Œ

Week 10 (26.02.23 ~ 26.03.01)

  • μž‘μ—… λ‚΄μ—­:

    • Step 3 μ œν•œνš¨μ†Œ(Restriction enzyme) μ„€μ • μž…λ ₯이 λ˜μ§€ μ•Šλ˜ 이슈 μˆ˜μ •
    • κ²°κ³Ό ν‘œμ‹œ 방식을 λͺ¨λ‹¬μ—μ„œ μƒˆ νƒ­ 기반으둜 μ „ν™˜
    • 도메인 μš©μ–΄ μ •λΉ„: amplicon -> template둜 톡일
  • AI ν™œμš©:

    • Github Copilot의 μ½”λ“œλ¦¬λ·°λ₯Ό 톡해 μ œν•œνš¨μ†Œ μž…λ ₯이 λ˜μ§€ μ•Šκ³  μžˆμŒμ„ 확인
    • ν˜„μƒμ„ Codexμ—κ²Œ μ„€λͺ… 및 ν•΄κ²° μš”μ²­
    • λͺ¨λ‹¬μ— ν‘œμ‹œλ˜λ˜ UIλ₯Ό μƒˆ 탭을 μ—΄μ–΄μ„œ ν‘œμ‹œν•˜λ„λ‘ Codexμ—κ²Œ μ§€μ‹œ
  • μ™„λ£Œ κΈ°λŠ₯:

    • Step 3 μ œν•œνš¨μ†Œ μž…λ ₯ 정상 λ™μž‘
    • κ²°κ³Ό ν™”λ©΄ μƒˆ νƒ­ ν‘œμ‹œ 적용(λͺ¨λ‹¬ 방식 제거)
    • UI/λ¬Έμ„œ μš©μ–΄λ₯Ό template κΈ°μ€€μœΌλ‘œ 톡일

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors