npm run dev # astro dev --host (network exposed)
npm run build # astro check && astro build (typecheck + build)
npm run preview # astro preview- Astro v5 site with
@astrojs/react,@astrojs/mdx,@astrojs/sitemap - Desktop view is a faux OS (window management, dock, app bar) — rendered client-side via
client:media="(min-width: 769px)" - Mobile gets a separate
HeroDashboardcomponent - State: Zustand store (
src/stores/osStore.js), persisted to localStorage under keyportfolio-os-settings - Terminal: React component with custom commands in
src/terminal/commands.jsx; auto-opens on boot viaboot:completeevent - 3D wallpapers:
ParticleField,DigitalRain,HexField(Three.js / react-three-fiber) - Content: Astro collections in
src/content/—blog(title, date, description, tags?) andprojects(title, date, description, tags, optional url/repo/featured), schema atsrc/content/config.ts - Layouts in
src/layouts/, pages insrc/pages/, components insrc/components/(React/JSX or Astro)
- Push to
main→ GitHub Actions deploys to GitHub Pages (.github/workflows/deploy.yml) .nojekyllpresent for GH Pages compatibility- Build artifact:
dist/ - No auto-deploy preview for branches — merge to main first
- No test framework configured; no linter or formatter
- TypeScript via
astro/tsconfigs/strict—astro checkvalidates during build - JSX in
.jsxfiles (not.tsx), store is plain.js - CSS custom properties in
src/styles/themes.css— theming viadata-themeattribute on<html> - All icons live in
public/img/icons/ - Windows defined in osStore with explicit position/size/zIndex per app ID