Skip to content

Repository files navigation

chuangcaleb.com

Personal site: portfolio + blog/digital garden. Built with Astro, React, TypeScript.

Getting Started

pnpm install          # Install deps
pnpm dev              # Sync content + start dev server
pnpm dev:nosetup      # Dev server only
pnpm build            # Sync, check, build + pagefind
pnpm build:nosetup    # Check + build only (no B2 sync/pagefind)
pnpm preview          # Full build + wrangler preview
pnpm lint             # Lint with XO (report)
pnpm format           # Auto-fix with XO
pnpm typecheck        # astro check
pnpm test             # Vitest unit suite
pnpm test:watch       # Vitest in watch mode
pnpm b2:download      # Download Obsidian md notes from B2

Tech Stack

Layer Choice
Framework Astro 7
UI Library React 19
CSS Preprocessor Sass/SCSS
Fluid Type & Space utopia-core-scss
Content source Obsidian β†’ Backblaze B2
Search Pagefind
Deployment Cloudflare Pages
Lint/Format XO
Unit Tests Vitest
Git Hooks Lefthook

Design

Warm, editorial, paper-like. A full spec is at DESIGN.md β€” tokens, typography scale, color, components.

Layout uses composable CUBE CSS-inspired primitives (flow, cluster, grid-auto, wrapper, sidebar, switcher, repel) instead of media queries. Each primitive is one file with CSS custom properties for tuning. See docs/design/layout-primitives.md for the catalogue.

Design specs split into modular docs under docs/design/.

Content Pipeline

Notes written in Obsidian, synced via Backblaze B2 at build time. Custom remark plugins handle wiki links ([[note]]), strip Obsidian-specific syntax, and manage frontmatter-driven bidirectional linking. Three content collections: obsidian-note, project, experience.

Project Structure

.
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ b2/               # B2 download
β”‚   β”œβ”€β”€ chuangcaleb/      # Redirect gen
β”‚   β”œβ”€β”€ google/           # Sheets API (guestbook)
β”‚   β”œβ”€β”€ remark/           # Custom remark plugins
β”‚   └── rehype/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ layout/       # Page structure
β”‚   β”‚   β”œβ”€β”€ note/         # Notes-related
β”‚   β”‚   └── emphasis/     # Text styling
β”‚   β”œβ”€β”€ content/          # Content collection .md files
β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   └── _components/  # Page-scoped sections
β”‚   └── styles/
β”‚       β”œβ”€β”€ tokens/       # design-tokens.scss + fluid.scss
β”‚       β”œβ”€β”€ global/       # Reset + base typography
β”‚       β”œβ”€β”€ compositions/ # layout primitives
β”‚       β”œβ”€β”€ utilities/    # Single-purpose helpers
β”‚       β”œβ”€β”€ blocks/       # Blocks
β”‚       └── index.css     # Entry point
β”œβ”€β”€ DESIGN.md             # Visual identity spec
β”œβ”€β”€ AGENTS.md             # AI agent context
└── docs/design/          # Modular design specs

Pages use co-located section components under src/pages/_components/ β€” no distant imports for page-scoped code.

main currently points to v3 rewrite of the site. v2 branch holds that version's source and implementation docs (I wrote a lot there too).

About

My personal site (v3) with portfolio and digital garden. Modern & lean, with zero media width queries, through layout primitives and fluid scale 😎.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages