Skip to content

Latest commit

ย 

History

History
84 lines (66 loc) ยท 3.6 KB

File metadata and controls

84 lines (66 loc) ยท 3.6 KB

๐Ÿงฌ PrimeFlow: Frontend Visualization Engine

Next.js TypeScript Canvas API Vercel

High-Performance PCR Primer Design & Visualization Platform

๋Œ€์šฉ๋Ÿ‰ ์œ ์ „์ž ์„œ์—ด(10,000bp+)์„ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์—ฐ ์—†์ด ๋ถ„์„ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ“– ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

PrimeFlow๋Š” ์ƒ๋ช…๊ณผํ•™ ์—ฐ๊ตฌ์›๋“ค์ด PCR ํ”„๋ผ์ด๋จธ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๊ฒช๋Š” ๋น„ํšจ์œจ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์›น ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๋ณธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Frontend)๋Š” ๋ฐฑ์—”๋“œ์—์„œ ๋ถ„์„๋œ ์œ ์ „์ž ๋ฐ์ดํ„ฐ์™€ ํ”„๋ผ์ด๋จธ ํ›„๋ณด๊ตฐ์„ HTML5 Canvas๋ฅผ ํ™œ์šฉํ•ด ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ์ˆ  (Key Features)

  • Custom Rendering Engine: DOM ์กฐ์ž‘ ๋ฐฉ์‹์ด ์•„๋‹Œ, Canvas API ๊ธฐ๋ฐ˜์˜ ์ž์ฒด ๋ Œ๋”๋ง ์—”์ง„์„ ๊ตฌํ˜„ํ•˜์—ฌ 10,000bp ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ 60fps๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
  • Optimization Algorithms:
    • View Culling: ์ด๋ถ„ ํƒ์ƒ‰(Binary Search)์„ ํ™œ์šฉํ•˜์—ฌ ํ™”๋ฉด ๋ฐ–์˜ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
    • Auto Layout: ๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‘์šฉํ•˜์—ฌ ๊ฒน์น˜๋Š” ํ”„๋ผ์ด๋จธ ๊ตฌ๊ฐ„์„ ์ž๋™์œผ๋กœ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • Interactive UX: ํ–‰๋ ฌ ๋ณ€ํ™˜(Matrix Transformation)์„ ์ ์šฉํ•œ ์ •๋ฐ€ํ•œ Zoom-In/Out ๋ฐ Panning ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ (Tech Stack)

  • Core: Next.js 16 (App Router), TypeScript
  • Graphics: HTML5 Canvas API (2D Context)
  • Styling: Tailwind CSS
  • State Management: Zustand
  • Data Fetching: SWR / TanStack Query
  • Deployment: Vercel

๐Ÿ—๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (Project Architecture)

PrimerFlow-FE/
โ”œโ”€โ”€ app/                  # ๐ŸŒ [Main] ํŽ˜์ด์ง€ ๋ฐ ๋ผ์šฐํŒ… (Next.js App Router)
โ”‚   โ”œโ”€โ”€ page.tsx          # ๋ฉ”์ธ ๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด
โ”‚   โ””โ”€โ”€ layout.tsx        # ์ „์—ญ ๋ ˆ์ด์•„์›ƒ (Header, Font ๋“ฑ)
โ”‚
โ”œโ”€โ”€ components/           # ๐Ÿงฉ UI ์ปดํฌ๋„ŒํŠธ ๋ชจ์Œ
โ”‚   โ”œโ”€โ”€ canvas/           # โœจ [Core] ์‹œ๊ฐํ™” ์—”์ง„ (GenomeCanvas, Controls ๋“ฑ)
โ”‚   โ””โ”€โ”€ ui/               # ๊ณตํ†ต UI (Button, Input, Card ๋“ฑ)
โ”‚
โ”œโ”€โ”€ lib/                  # ๐Ÿงฎ ์ˆœ์ˆ˜ ํ•จ์ˆ˜ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜
โ”‚   โ”œโ”€โ”€ algorithms/       # [Optimization] ์ด๋ถ„ ํƒ์ƒ‰, ๋ ˆ์ด์•„์›ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜
โ”‚   โ”œโ”€โ”€ math/             # [Math] ์ขŒํ‘œ ๋ณ€ํ™˜(World <-> Screen), ํ–‰๋ ฌ ์—ฐ์‚ฐ
โ”‚   โ””โ”€โ”€ parsers/          # [Data] FASTA ํŒŒ์‹ฑ ๋ฐ API ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
โ”‚
โ”œโ”€โ”€ store/                # ๐Ÿ’พ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (Zustand)
โ”‚   โ””โ”€โ”€ useViewStore.ts   # ์คŒ ๋ ˆ๋ฒจ, ๋ทฐํฌํŠธ ์œ„์น˜ ๋“ฑ ๊ด€๋ฆฌ
โ”‚
โ”œโ”€โ”€ docs/                 # ๐Ÿ“„ ๋ฌธ์„œ ๋ฐ ํ”„๋กฌํ”„ํŠธ ์•„์นด์ด๋ธŒ
โ”‚   โ””โ”€โ”€ prompts/          # AI ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ ๋ช…์„ธ์„œ(Spec) ๋ชจ์Œ
โ”‚
โ””โ”€โ”€ public/               # ๐Ÿ–ผ๏ธ ์ •์  ํŒŒ์ผ (์ด๋ฏธ์ง€, ์•„์ด์ฝ˜)

๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ (Getting Started)

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js 20.9.0 ์ด์ƒ
  • npm ๋˜๋Š” yarn

์„ค์น˜ ๋ฐ ์‹คํ–‰

# 1. ์ €์žฅ์†Œ ํด๋ก 
git clone [https://github.com/Seq-Lab/PrimerFlow-FE.git](https://github.com/Seq-Lab/PrimerFlow-FE.git)

# 2. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™
cd PrimerFlow-FE

# 3. ํŒจํ‚ค์ง€ ์„ค์น˜
npm install

# 4. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (.env.local ์ƒ์„ฑ)
# (๋ฐฑ์—”๋“œ API ์ฃผ์†Œ ์„ค์ • ์˜ˆ์‹œ)
# echo "NEXT_PUBLIC_API_URL=http://localhost:8000" > .env.local

# 5. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev