High-Performance PCR Primer Design & Visualization Platform
๋์ฉ๋ ์ ์ ์ ์์ด(10,000bp+)์ ์น ๋ธ๋ผ์ฐ์ ์์ ์ง์ฐ ์์ด ๋ถ์ํ๊ณ ์๊ฐํํ๋ ํ๋ก ํธ์๋ ์์ง ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋๋ค.
PrimeFlow๋ ์๋ช ๊ณผํ ์ฐ๊ตฌ์๋ค์ด PCR ํ๋ผ์ด๋จธ๋ฅผ ์ค๊ณํ ๋ ๊ฒช๋ ๋นํจ์จ์ ํด๊ฒฐํ๊ธฐ ์ํ ์น ์๋ฃจ์ ์ ๋๋ค. ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ(Frontend)๋ ๋ฐฑ์๋์์ ๋ถ์๋ ์ ์ ์ ๋ฐ์ดํฐ์ ํ๋ผ์ด๋จธ ํ๋ณด๊ตฐ์ HTML5 Canvas๋ฅผ ํ์ฉํด ์๊ฐ์ ์ผ๋ก ํํํ๋ ๋ฐ ์ง์คํฉ๋๋ค.
- 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 ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- 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
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/ # ๐ผ๏ธ ์ ์ ํ์ผ (์ด๋ฏธ์ง, ์์ด์ฝ)
- 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