Personal blog with a terminal-style interface, built with SvelteKit.
- Interactive CLI experience (ls, cd, cat, grep, etc.)
- Fuzzy search with Ctrl+P/K
- Bilingual support (English/Korean)
- RSS feeds per language
- Static site generation (SSG)
| Component | Choice |
|---|---|
| Framework | SvelteKit + adapter-static |
| Styling | Tailwind CSS |
| i18n | Paraglide-JS |
| Markdown | mdsvex + Shiki |
| Search | Fuse.js |
| Hosting | Cloudflare Pages |
# Install dependencies
npm install
# Start dev server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewEnglish posts are synced from the 3B knowledge base:
npm run sync# Check what needs translation
npm run translation:status
# Create Korean translation template
npm run translation:create -- --slug=<post-slug>
# Edit the generated file in src/content/posts/ko/
# Set draft: false when readySee docs/TRANSLATION.md for translation guidelines.
| Route | Description |
|---|---|
/ |
English home (terminal) |
/posts |
English posts list |
/posts/{slug} |
English post |
/ko |
Korean home |
/ko/posts |
Korean posts list |
/ko/posts/{slug} |
Korean post (falls back to English if not translated) |
/rss.xml |
English RSS feed |
/ko/rss.xml |
Korean RSS feed |
src/
├── content/posts/
│ ├── en/ # English posts
│ └── ko/ # Korean translations
├── lib/
│ ├── commands/ # Terminal commands
│ ├── components/ # Svelte components
│ └── paraglide/ # Generated i18n runtime
├── routes/
│ ├── posts/ # English routes
│ └── ko/ # Korean routes
messages/
├── en.json # English UI strings
└── ko.json # Korean UI strings
scripts/
├── sync-from-3b.ts # Content sync script
├── translation-status.ts
└── translation-create.ts
MIT