A personal portfolio website showcasing my projects, experience, education, and resume. Built with Astro.js and Tailwind CSS, designed to highlight my work in ML/AI, agentic systems, and machine learning pipelines.
- Projects: View detailed project cards with descriptions and GitHub links.
- Experience & Education: Clean, structured display of internships, research, and degrees.
- Resume: Downloadable PDF in a new tab.
- Responsive Design: Mobile-friendly, optimized for different screen sizes.
- SEO Optimized: Meta tags and semantic HTML.
- Dark/Light Mode (optional): Easily extendable via Tailwind CSS.
All site-wide data and theme options are stored in src/data/site-config.ts. It provides a single configuration object used throughout the theme for navigation, branding, hero content, social links, and more.
You can update this file to customize:
- Site identity — title, description, avatar, subtitle, and default social share image
- Navigation — header and footer navigation links
- Social links — URLs for supported platforms
- Hero section — title, text, image, and action buttons
- Newsletter subscription — form settings suitable for Mailchimp, Formspree, ConvertKit, or other form-based providers. The form supports a custom action URL, configurable email and hidden fields, and an optional honeypot field for spam protection.
- Pagination — posts per page for blog and projects listings
Images can be referenced either as imports from src/assets/ (for optimized Astro images) or as string paths from the public/ directory.
The project is structured as follows:
├── public/
├── src/
│ ├── assets/
│ ├── components/
│ ├── content/
│ ├── data/
│ ├── icons/
│ ├── layouts/
│ ├── pages/
│ ├── styles/
│ ├── utils/
│ ├── content.config.ts
│ └── types.ts
├── astro.config.mjs
├── package.json
├── README.md
└── tsconfig.json
Astro looks for .astro or .md files in the src/pages/ directory. Each page is exposed as a route based on its file name.
There's nothing special about src/components/, but that's where we like to put any Astro (.astro) components.
The src/content/ directory contains "collections" of related Markdown and MDX documents. Use getCollection() to retrieve posts from src/content/blog/, and type-check your frontmatter using an optional schema. See Astro's Content Collections docs to learn more.
Any static assets, like images, can be placed in the public/ directory.
All commands are run from the root of the project, from a terminal:
| Command | Action |
|---|---|
npm install |
Installs dependencies |
npm run dev |
Starts local dev server at localhost:4321 |
npm run build |
Build your production site to ./dist/ |
npm run preview |
Preview your build locally, before deploying |
npm run astro ... |
Run CLI commands like astro add, astro check |
npm run astro -- --help |
Get help using the Astro CLI |
Check out our documentation or jump into our Discord server.
- Theme built by Asta Bankauske