Personal Portfolio & Design System of Ajmal Basheer
A high-performance, accessible, and hardened personal portfolio engineered with a Zero Client JS Default philosophy. Powered by Astro 7, Tailwind CSS 4, and TypeScript, the site achieves near-instant load times while enforcing production-grade Content Security Policies.
- Zero Client JS Default: Content is server-rendered as static HTML via Astro's Island architecture. Client JavaScript is strictly isolated to deferred interactive elements (
tsParticlescanvas). - Automated SHA-256 CSP Pipeline: A custom Astro build hook (
inline-cspinastro.config.mjs) scans generated HTML, hashes all inline<style>and<script>tags, and injects SHA-256 hashes into the Cloudflare_headersfile—eliminatingunsafe-inlineentirely. - Strict Hardened Security: Preconfigured with
HSTS(31536000 with preload),X-Frame-Options: DENY,Permissions-Policy,COOP: same-origin,COEP: require-corp, andCORP: same-origin. - Type-Safe Content Store: All portfolio data, projects, and personal timeline records reside in
src/data/site.tstyped with strict immutable TypeScript interfaces. - Accessibility & Motion Compliance: Features keyboard skip-to-content links,
focus-visibleoutlines, ARIA attributes, native HTML5 Popover API for zero-JS mobile navigation, and@media (prefers-reduced-motion)guards. - Modern Typography: Self-hosted variable font pairing using
@fontsource-variable/geistand@fontsource-variable/geist-monowith preloading for core Latin glyph subsets.
ajmalbuv.github.io/
├── public/
│ ├── favicon.ico # Multi-resolution favicon
│ ├── favicon.svg # Vector favicon
│ └── apple-touch-icon-* # Apple mobile touch icons
├── scripts/
│ └── clean.mjs # Project cleanup script
├── src/
│ ├── assets/ # Local images (covers, screenshots, avatars)
│ ├── components/ # Semantic Astro components
│ │ ├── About.astro # Experience & education timeline
│ │ ├── ConsoleSignature.astro # Devtools Easter egg
│ │ ├── Contact.astro # Contact card & direct channels
│ │ ├── Footer.astro # Footer & social links
│ │ ├── Head.astro # SEO metadata, Open Graph, & JSON-LD schema
│ │ ├── Header.astro # Responsive header with Popover mobile nav
│ │ ├── Hero.astro # Hero section with lazy tsParticles integration
│ │ ├── Projects.astro # projects showcase
│ │ └── Skills.astro # Technical competencies matrix
│ ├── data/
│ │ └── site.ts # Central source of truth for site content
│ ├── layouts/
│ │ └── Base.astro # Root HTML document shell
│ ├── pages/
│ │ ├── 404.astro # Custom 404 error page
│ │ ├── index.astro # Single-page portfolio root
│ │ └── projects/
│ │ └── [slug].astro # Dynamic projects route
│ ├── styles/
│ │ └── global.css # Tailwind CSS v4 entry & scroll animations
│ └── types/
│ └── index.ts # TypeScript data contracts & models
├── astro.config.mjs # Astro, Vite, Rollup, & CSP build integration
├── eslint.config.mjs # Flat ESLint configuration
├── knip.json # Dead code & unused dependency detector
├── package.json # Scripts & dependency definitions
├── tsconfig.json # Strictest TypeScript configuration
└── LICENSE # MIT License
This project is built and managed using Bun.
- Bun:
>= 1.1.0(or Node.js>= 20.0.0)
Clone the repository and install dependencies:
git clone https://github.com/ajmalbuv/ajmalbuv.github.io.git
cd ajmalbuv.github.io
bun installStart the local Astro development server:
bun devVisit http://localhost:4321 in your browser.
Run type-checking, linting, and formatting checks:
# Type check Astro & TypeScript, run ESLint
bun run check
# Lint files with ESLint
bun run lint
# Auto-fix linting issues
bun run lint:fix
# Verify formatting with Bun
bun run format:check
# Auto-format all code
bun run formatCreate an optimized production build:
bun run buildPreview the production build locally:
bun run preview| Layer | Technologies |
|---|---|
| Framework | Astro v7 (Static Site Generation / Islands) |
| Styling | Tailwind CSS v4 (@tailwindcss/vite) |
| Language | TypeScript (strictest profile) |
| Icons | astro-icon (@iconify-json/mdi) |
| Interactive Canvas | tsParticles Slim (Lazy loaded via requestIdleCallback) |
| Typography | Geist Variable & Geist Mono |
| Quality & Linting | ESLint v9+, Bun formatter, Knip |
- Source Code: Licensed under the MIT License. You are free to adapt the architecture, layout components, and build configuration for your own personal projects.
- Personal Content & Branding: All personal imagery, screenshots, project copy, and biography are proprietary and copyrighted by Ajmal Basheer (All Rights Reserved). Please replace them with your own information before deploying your fork.