κ°μΈ κΈ°μ λΈλ‘κ·Έμ λλ€.
- React 18 + TypeScript
- Vite β λΉλ λꡬ
- Tailwind CSS β μ€νμΌλ§
- react-router-dom v6 β HashRouter κΈ°λ° λΌμ°ν
- unified / remark / rehype β λ§ν¬λ€μ΄ β HTML λ³ν
- Shiki β μ½λ μ νμ€ νμ΄λΌμ΄ν (aurora-x ν λ§, λΉλ νμ)
- Supabase β μ‘°νμ Β· μ’μμ μ μ₯ (PostgreSQL + RPC)
- GitHub Actions β main νΈμ μ μλ λ°°ν¬
blog/
βββ src/
β βββ components/
β β βββ Header.tsx # μλ¨ λ€λΉκ²μ΄μ
(Blog / About)
β β βββ BlogList.tsx # ν¬μ€νΈ λͺ©λ‘ + νκ·Έ νν°λ§
β β βββ BlogPost.tsx # κ°λ³ ν¬μ€νΈ λ·°
β β βββ About.tsx # μκ° νμ΄μ§
β βββ hooks/
β β βββ useTyping.ts # νμ΄ν μ λλ©μ΄μ
ν
β β βββ usePostStats.ts # μ‘°νμ Β· μ’μμ μν ν
(Supabase)
β βββ lib/
β β βββ supabase.ts # Supabase ν΄λΌμ΄μΈνΈ
β βββ posts/ # λ§ν¬λ€μ΄ ν¬μ€νΈ νμΌ (.md)
β βββ types/
β β βββ post.ts # Post / PostMeta νμ
μ μ
β βββ utils/
β βββ markdown.ts # ν¬μ€νΈ λ‘λ© μ νΈ (import.meta.glob)
βββ vite.config.ts
βββ tailwind.config.cjs
blog/src/posts/ ν΄λμ λ§ν¬λ€μ΄ νμΌμ μΆκ°ν©λλ€.
νμΌλͺ
νμ: YYYY-MM-DD-slug.md
---
title: ν¬μ€νΈ μ λͺ©
date: 2025-06-26
tags: [typescript, react]
description: ν¬μ€νΈ ν μ€ μ€λͺ
---
λ³Έλ¬Έ λ΄μ©...λΉλ μ import.meta.globμΌλ‘ μλ μμ§λλ―λ‘ λ³λ λ±λ‘ μμ΄ λͺ©λ‘μ λ°μλ©λλ€.
mainβ κ°λ° λ° μμ€ κ΄λ¦¬gh-pagesβ GitHub Actionsλ‘ μλ λ°°ν¬λλ λΈλμΉ
λ‘컬 κ°λ° μ blog/.env νμΌμ μμ±νκ³ μλ κ°μ μ±μλλ€.
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-keyGitHub λ°°ν¬ μμλ Repository Settings β Secretsμ λμΌν ν€λ₯Ό λ±λ‘ν©λλ€.
# κ°λ° μλ²
npm run dev
# λΉλ
npm run build