This is a modern portfolio website built with SolidJS and SolidStart, featuring a dark/light theme system, dynamic blog content, and creative terminal UI components.
- Framework: SolidJS with SolidStart (SSR/SSG)
- Runtime: Bun (package manager and runtime)
- Styling: TailwindCSS with custom animations and dark mode
- Routing: File-based routing with SolidJS Router
- Build Tool: Vinxi (Vite-based)
- Deployment: Vercel (configured preset)
- Type Safety: TypeScript
- Content: Markdown with DOMPurify sanitization
- 🌓 Dark/Light Theme: Persistent theme switching with localStorage
- 📱 Responsive Design: Mobile-first approach with TailwindCSS
- 🎨 Custom Components: Modular component architecture
- 🔍 SEO Optimized: Meta tags and proper routing
- 🖥️ Terminal UI: Interactive terminal window components with commands
- 🎭 Animations: TailwindCSS animations and transitions
- 📝 Blog System: Markdown-based blog with secure rendering
- 🛡️ Security: XSS protection with DOMPurify sanitization
src/
├── routes/ # File-based routing
│ ├── index.tsx # Home page
│ ├── blog/ # Blog section
│ │ ├── index.tsx # Blog listing page
│ │ └── [slug].tsx # Individual blog posts
│ └── [...404].tsx # 404 handler with terminal UI
├── components/ # Reusable components
│ ├── blog/ # Blog-specific components
│ │ ├── card.tsx # Blog post cards
│ │ ├── grid.tsx # Blog post grid layout
│ │ └── header.tsx # Blog post headers
│ ├── core/ # Base UI components
│ ├── markdown/ # Markdown rendering
│ │ └── renderer.tsx # Secure markdown renderer
│ ├── sections/ # Page sections
│ ├── terminal/ # Terminal UI components
│ │ ├── window.tsx # Draggable terminal window
│ │ └── error.tsx # Interactive terminal errors
│ └── home/ # Home page components
├── context/ # SolidJS context providers
├── utils/ # Utility functions
│ └── blog.ts # Blog post metadata and utilities
└── constants/ # App constants/- Home page with portfolio showcase/blog- Blog listing page/blog/[slug]- Individual blog posts
# Development server
bun dev
# Build for production
bun build
# Start production server
bun start
# Run tests
bun test
# Linting
bun lint
bun lint:fix- Nav: Main navigation with smooth transitions
- ThemeButton: Dark/light mode toggle
- LazyImage: Optimized image loading
- Loading: Loading states
- BlogCard: Individual blog post cards with metadata
- BlogGrid: Responsive grid layout for blog posts
- BlogPostHeader: Blog post title, date, and tags display
- MarkdownRenderer: Secure markdown rendering with DOMPurify
- TerminalWindow: Draggable, resizable terminal UI with viewport centering
- TerminalError: Interactive terminal with commands (cd .., clear, help)
- HomeSection: Landing section
- AboutSection: About information with enhanced bio
- ProjectsSection: Portfolio projects
- CasesSection: Case studies
- ContactSection: Contact information
The app uses a context-based theme system with:
- Persistent storage in localStorage
- CSS class-based dark mode (
dark:prefixes) - Smooth transitions between themes
- System preference detection
- TailwindCSS: Primary styling framework
- Custom colors: Corvu design system integration
- Typography plugin: Enhanced text styling
- Animations: Custom cursor and pulse animations
- Dark mode: Class-based implementation
solid-js: Reactive UI library@solidjs/start: Full-stack SolidJS framework@solidjs/router: Client-side routing@solidjs/meta: SEO and meta tags
@corvu/dialog: Modal/dialog components@corvu/tailwind: Corvu design system integrationsolid-icons: Icon library
marked: Markdown parsing and renderingdompurify: XSS protection for HTML sanitization@types/dompurify: TypeScript definitions for DOMPurify
typescript: Type safetyeslint: Code linting with SolidJS pluginvitest: Testing framework@solidjs/testing-library: SolidJS testing utilities
vinxi: Build tool and dev server- Vercel preset for deployment
- Node.js 18+ requirement
- TypeScript and SolidJS plugins
- Custom rules for component patterns
- Disabled overly strict rules where appropriate
- Dark mode support
- Custom color palette
- Typography and animation plugins
- Corvu design system integration
- Vite 5.4.10 pinned for stability
- SSR/SSG with Vinxi
- Vercel deployment optimization
The blog uses a hybrid approach combining hardcoded metadata with dynamic content fetching:
- Metadata Management: Blog post metadata (title, date, tags, etc.) stored in
src/utils/blog.ts - Content Fetching: Markdown files stored in
/public/blog/posts/and fetched at runtime - Secure Rendering: All markdown content sanitized with DOMPurify to prevent XSS attacks
- Creative Error Handling: 404 and error pages use interactive terminal UI instead of generic error messages
- Responsive Design: Blog components adapt to mobile, tablet, and desktop layouts
- ✅ Secure markdown rendering with DOMPurify sanitization
- ✅ Responsive blog cards with hover animations
- ✅ Creative terminal error handling with interactive commands
- ✅ SEO-friendly with proper meta tags and semantic HTML
- ✅ Loading states and error boundaries for graceful UX
- 🚧 MDX support for rich interactive content
- 🚧 Static site generation for improved performance and SEO
- 🚧 Advanced features like search, tags filtering, and reading time
- 🚧 Performance optimizations including caching and lazy loading
- Context Providers: Theme and global state management
- Resource Loading: SolidJS createResource for async data fetching
- Error Boundaries: Graceful error handling with creative UX
- File-based Routing: Automatic route generation with dynamic parameters
- Component Composition: Modular, reusable components with clear separation of concerns
- Security First: All user content sanitized to prevent XSS vulnerabilities
- Hydration Safe: Client-side only rendering for complex components to prevent hydration mismatches
- Package Manager: Bun (not npm/yarn)
- Runtime: Node.js 18+
- Build Target: Modern browsers with ES modules
- Deployment: Vercel with SSG prerendering