This is a personal website and blog built with modern web technologies, deployed to GitHub Pages at rrmistry.github.io.
- Framework: Svelte 5 with SvelteKit
- Styling: Tailwind CSS with typography plugin
- UI Components: shadcn/ui for Svelte
- Markdown Processing: mdsvex
- Syntax Highlighting: Shiki
- Build Tool: Vite
- Package Manager: npm
- Development Environment: Devbox
- Testing: Vitest (unit) + Playwright (e2e)
- Deployment: GitHub Actions → GitHub Pages
rrmistry.github.io/
├── src/
│ ├── app.css # Global styles
│ ├── app.html # HTML template
│ ├── content/ # Blog posts in markdown
│ ├── lib/ # Shared components and utilities
│ │ ├── components/ # Reusable UI components
│ │ │ └── ui/ # shadcn/ui components
│ │ ├── hooks/ # Svelte hooks
│ │ └── *.svelte # Feature components
│ ├── routes/ # SvelteKit routes
│ │ ├── +layout.svelte # Root layout
│ │ ├── +page.svelte # Home page
│ │ ├── blogs/ # Blog listing and individual posts
│ │ └── resume/ # Resume page
│ └── stores/ # Svelte stores
├── static/ # Static assets
├── e2e/ # Playwright tests
├── build/ # Build output (gitignored)
└── Configuration files
# Install dependencies
npm install
# Start development server (port 5173)
npm run dev
# Start with debugging
npm run dev:debug
# Run devbox shell (includes all tools)
devbox shell
# Start tmux session with multiple panes
devbox run tmux# Run all tests
npm test
# Run unit tests only
npm run test:unit
# Run e2e tests only
npm run test:e2e
# Type checking
npm run check
# Watch mode for type checking
npm run check:watch# Build for production
npm run build
# Preview production build
npm run preview
# Linting and formatting
npm run lint
npm run format# Test GitHub Actions locally with act
devbox run ci:local
# or simpler version
devbox run ci:local-simpleThe project uses Devbox for consistent development environments. Key packages:
- Node.js 20
- Bash, Git, Neovim, Tmux
- Tailwind CSS CLI
- Playwright
- Act (for local GitHub Actions testing)
A tmuxinator configuration is provided for a multi-pane development environment:
- claude: Claude CLI session
- lazygit: Git interface
- nvim: Neovim editor
- htop: System monitoring
- terminal: General purpose terminal
Start with: devbox run tmux
- Location:
src/content/*.md - Format: Markdown with YAML frontmatter
- Required frontmatter:
--- title: 'Post Title' date: 2023-10-01 tags: ['tag1', 'tag2'] description: Brief description ---
- Syntax highlighting (JavaScript, TypeScript, Bash, YAML, JSON, HTML, CSS, Svelte)
- Mermaid diagrams (automatically rendered)
- External links (open in new tab)
- Embedded videos and images
- Custom Svelte components
- Triggered on push to
mainbranch - Runs in Playwright container for consistency
- Steps:
- Install dependencies
- Run unit tests
- Build site
- Run e2e tests
- Deploy to GitHub Pages
- Adapter:
@sveltejs/adapter-static - Output:
build/directory - 404 fallback:
404.html - All routes are pre-rendered
- Configures mdsvex for markdown processing
- Sets up static adapter for GitHub Pages
- Configures syntax highlighting with light/dark themes
- Port configuration (5173)
- Path alias:
@→src/ - Test configuration for Vitest
- Custom color scheme with CSS variables
- shadcn/ui theme integration
- Typography and form plugins
- Framework: Vitest
- Location:
src/**/*.{test,spec}.{js,ts} - Example:
src/lib/components/TagBadge-simple.test.ts
- Framework: Playwright
- Location:
e2e/ - Tests:
- Basic functionality (
demo.test.ts) - Mermaid diagram rendering (
diagram-rendering.test.ts)
- Basic functionality (
- Timeout: 5 minutes (configurable)
The project uses shadcn/ui components that are copied into the codebase rather than installed as dependencies. Key components:
- Button, Badge, Input, Label
- Sidebar (app navigation)
- Data tables
- Dropdown menus
- Sheets and tooltips
Components are in src/lib/components/ui/ and can be customized as needed.
- Implemented using
mode-watcher - CSS class-based dark mode
- Syntax highlighting supports both light and dark themes
- Theme toggle available in the UI
- All routes are pre-rendered at build time
- Images should be optimized before adding
- Code splitting handled by SvelteKit
- Minimal JavaScript bundle size due to Svelte compilation
- Create a new
.mdfile insrc/content/ - Add required frontmatter
- Write content using markdown
- Build and test locally
- Commit and push to trigger deployment
- Components are in
src/lib/components/ui/ - These are owned copies, not npm packages
- Modify directly to suit needs
- Ensure dark mode compatibility
- Edit
src/lib/resume.markdown - The resume route renders this markdown file
- Use
npm run dev:debugfor Node.js debugging - Check browser console for client-side errors
- Playwright reports are generated in
playwright-report/ - Build artifacts are in
build/directory
- Main branch:
main - Feature branches recommended
- Git hooks configured via devbox init
- Use conventional commit messages
- The site is statically generated - no server-side rendering in production
- All external links automatically open in new tabs
- The project uses Svelte 5 (latest version)
- TypeScript is used throughout with strict checking
- The CI/CD pipeline must pass before deployment