A modern, performant portfolio website built with Astro and React, featuring a dark theme design and comprehensive content management.
- Framework: Astro 4.x with React integration
- Styling: Tailwind CSS with custom dark theme
- Content: Astro Content Collections for projects
- Blog: Hashnode API integration with local rendering
- Analytics: Supabase integration
- Deployment: Vercel
- Static site generation with selective hydration (Astro Islands)
- Blog posts fetched from Hashnode with full markdown rendering
- Code syntax highlighting with highlight.js
- LaTeX math rendering with KaTeX
- Comprehensive timeline with 40+ events
- 10 project showcases with Content Collections
- Journey posts with image carousels and embeds
- SEO optimized with sitemap and structured data
- Responsive design with dark theme
- Node.js 18+ and npm
npm installRun the development server:
npm run devOpen http://localhost:4321 in your browser.
Create a production build:
npm run buildPreview the production build locally:
npm run previewCreate a .env file in the root directory with the following variables:
PUBLIC_SUPABASE_URL=your_supabase_url
PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
PUBLIC_HASHNODE_USERNAME=your_hashnode_username/
├── public/ # Static assets
├── src/
│ ├── components/ # React and Astro components
│ ├── content/ # Content Collections (projects)
│ ├── data/ # Timeline and journey data
│ ├── layouts/ # Page layouts
│ ├── lib/ # Utility functions and API clients
│ ├── pages/ # File-based routing
│ └── styles/ # Global styles
├── astro.config.mjs # Astro configuration
└── tailwind.config.ts # Tailwind configuration
Projects are managed through Astro Content Collections in src/content/projects/. Each project is a markdown file with frontmatter:
---
title: "Project Name"
description: "Project description"
tech_stack: ["React", "TypeScript"]
features: ["Feature 1", "Feature 2"]
github_url: "https://github.com/..."
live_url: "https://..."
category: "web"
is_featured: true
created_at: 2024-01-01
---Timeline events are defined in src/data/timeline.ts as TypeScript objects.
Journey posts with rich content (carousels, embeds) are defined in src/data/journey.ts.
This project is configured for deployment on Vercel:
- Connect your repository to Vercel
- Set environment variables in Vercel dashboard
- Deploy
Build settings:
- Framework Preset: Astro
- Build Command:
npm run build - Output Directory:
dist
See DEPLOYMENT.md for detailed deployment instructions.
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production build locallynpm run astro- Run Astro CLI commands
MIT