Personal website of Nabil Alkahar — Solutions Architect, Software Engineer, and Writer.
- Astro — Static site generation
- Tailwind CSS — Utility-first styling
- TypeScript — Type safety
- Astro Content Collections — Markdown blog processing
- Sharp — Image optimization at build time
- Bun — JavaScript runtime and package manager
bun install
bun run devOpen http://localhost:4321.
- Create a new
.mdfile insrc/content/blog/ - Add frontmatter:
--- title: "Your Post Title" date: "2025-05-01" excerpt: "Short description for the listing page" tags: ["topic"] ---
- Write your content in Markdown below the frontmatter
- Commit and push — the build process will pick it up automatically
Drop images into public/blog/ and reference them in your markdown:
No imports needed — Astro serves them as static files.
- Drop image files into
src/assets/gallery/(.jpg,.jpeg,.png, or.webp) - Add an entry to
src/data/gallery.json:{ "file": "your-photo.jpg", "alt": "Description shown on hover and for screen readers" } - Images are automatically optimized by Sharp at build time
bun run buildThe static site is output to the dist/ directory. Deploy it to GitHub Pages, Vercel, Cloudflare Pages, or any static host.
Click the theme toggle button in the top-right corner to switch between light and dark mode. Your preference is saved in localStorage and respected on your next visit. The site also respects your system preference on first load.
- Skip-to-content link for keyboard users
- Focus management in gallery lightbox and easter egg dialog
prefers-reduced-motionsupport disables animations- All gallery images include descriptive alt text
MIT