A performance-first personal portfolio for Mridul Haque, a full-stack developer and data science enthusiast based in Dhaka, Bangladesh.
The site is built with Astro as a static, component-based portfolio. Project information lives in an Astro Content Collection, so new work can be added without editing the card component or duplicating markup.
After GitHub Pages is enabled, the site will be available at:
https://haque31.github.io/mridul-haque-portfolio/
- Astro 7
- TypeScript configuration and content schemas
- Custom responsive CSS
- Small vanilla JavaScript enhancements
- Astro image optimization
- Astro Content Collections
- GitHub Actions and GitHub Pages
No client-side framework runtime is shipped. JavaScript is limited to the mobile menu, scroll state, reveal effects, active navigation, and the static contact form's email handoff.
mridul-haque-portfolio/
├── .github/workflows/deploy.yml
├── public/
│ ├── assets/
│ │ ├── documents/
│ │ └── images/og-card.jpg
│ ├── favicon.svg
│ ├── robots.txt
│ └── site.webmanifest
├── src/
│ ├── assets/mridul-haque-portrait.png
│ ├── components/
│ ├── content/projects/
│ ├── layouts/BaseLayout.astro
│ ├── pages/index.astro
│ ├── styles/global.css
│ └── content.config.ts
├── astro.config.mjs
├── package.json
├── package-lock.json
├── tsconfig.json
├── LICENSE
└── README.md
Requirements:
- Node.js 22.12 or newer. Node 24 is recommended to match the deployment workflow.
- npm
git clone https://github.com/Haque31/mridul-haque-portfolio.git
cd mridul-haque-portfolio
npm install
npm run devAstro will print the local development URL, normally http://localhost:4321.
Useful commands:
npm run dev # Start the development server
npm run check # Validate Astro and TypeScript
npm run build # Create the production build in dist/
npm run preview # Preview the production build locallyEach project is a Markdown file in src/content/projects/.
Example:
---
title: Example Project
subtitle: One-line project category
description: A clear explanation of the problem, solution, and contribution.
role: Full-stack developer
year: Personal project
tags:
- Astro
- TypeScript
github: https://github.com/Haque31/example-project
live: https://example.com
featured: true
order: 5
---The schema in src/content.config.ts validates the data during development and builds.
The current contact form prepares a message and opens the visitor's default email application. This keeps the static site free of external form processors and does not store submitted data.
A hosted service such as Formspree can be added later by changing the form action and removing the mailto handler from SiteScripts.astro.
- Resume or CV file in
public/assets/documents/ - Public link for the EPL Match Prediction repository, if it is made public
- Public or live link for the Asian Power website, if appropriate
- Verified dates for debating, club volunteering, competitive programming, and the Asian Power role
- Optional project screenshots or dedicated case-study pages
Run these commands from the folder that contains this project:
cd mridul-haque-portfolio
git init
git branch -M main
git add .
git commit -m "feat: launch Astro portfolio foundation"
gh auth login
gh repo create Haque31/mridul-haque-portfolio \
--public \
--source=. \
--remote=origin \
--push- Sign in to GitHub.
- Create a new public repository named
mridul-haque-portfolio. - Do not initialize it with a README, license, or
.gitignore, because those files already exist here. - Run:
cd mridul-haque-portfolio
git init
git branch -M main
git add .
git commit -m "feat: launch Astro portfolio foundation"
git remote add origin https://github.com/Haque31/mridul-haque-portfolio.git
git push -u origin mainThe repository includes the official Astro GitHub Pages workflow.
- Open the repository on GitHub.
- Go to Settings → Pages.
- Under Build and deployment, choose GitHub Actions as the source.
- Open the Actions tab and confirm that
Deploy to GitHub Pagescompletes successfully.
Every successful push to main will rebuild and deploy the site.
Use a branch for each focused change:
git switch main
git pull --ff-only
git switch -c feature/add-project-case-study
# Make and test changes
npm run check
npm run build
git add .
git commit -m "feat: add project case study"
git push -u origin feature/add-project-case-studyCreate the pull request:
gh pr create \
--base main \
--head feature/add-project-case-study \
--title "feat: add project case study" \
--body "Adds the new project content and validates the production build."After review and merge:
git switch main
git pull --ff-only
git branch -d feature/add-project-case-study- Test at 360 px, tablet, laptop, and wide desktop widths.
- Navigate the entire site using only the keyboard.
- Confirm visible focus states and mobile menu behavior.
- Test reduced-motion mode.
- Verify every public project and social link.
- Run
npm run checkandnpm run build. - Run Lighthouse for performance, accessibility, best practices, and SEO.
- Confirm the Open Graph preview after deployment.
MIT © 2026 Mridul Haque