Personal portfolio and blog site built with Astro and React.
- Framework: Astro 5.9
- UI: React 19 with Astro integration
- Styling: TailwindCSS v4
- Content: Markdown/MDX with content collections
- Deployment: Vercel
Install dependencies:
npm installStart the development server:
npm run devOpen http://localhost:3000 to view the site.
npm run dev- Start Astro dev servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint on src/npm test- Run Vitest testsnpm run test:watch- Run tests in watch mode with UI
/
├── content/ # Content collections (blog, projects, journal)
│ ├── blog/ # Blog posts (Markdown/MDX)
│ ├── projects/ # Project pages
│ └── journal/ # Journal entries
├── public/ # Static assets (fonts, images, etc.)
├── src/
│ ├── components/ # Astro and React components
│ ├── data/ # Static data (timeline, etc.)
│ ├── layouts/ # Astro layouts
│ ├── pages/ # File-based routing
│ └── styles/ # Global styles
└── astro.config.mjs # Astro configuration
Content is managed through Astro content collections defined in src/content.config.js:
- blogPosts: Blog articles with date, title, slug
- projects: Portfolio projects with links and summaries
- journal: Personal journal entries
Add new content by creating Markdown/MDX files in the appropriate content/ directory.
The site is configured for automatic deployment to Vercel. Push to the dev branch to trigger a deployment.
Custom redirects are configured in vercel.json.