Skip to main content
completed web-development

Portfolio Website

This high-performance, statically generated portfolio website you are looking at right now, built from scratch with Astro, React, and Tailwind CSS.

Started: January 1, 2025
Completed: January 31, 2025
98
Lighthouse Score

Tags

portfolioastrotailwind-csstypescriptmarkdownstatic-site-generator

Technologies

Astro Tailwind CSS TypeScript MDX GitHub Pages

Architecture

Portfolio Architecture

Modern static site architecture for optimal performance

Content Layer

Markdown/MDX content source files

  • Project writeups
  • Blog posts
  • Resume data
  • Config files
Markdown/MDX content source files

Framework Layer

Astro + React build system

  • Astro 5.x
  • React 19
  • Tailwind CSS
  • MDX support
Astro + React build system

Build Process

Static site generation

  • SSG compilation
  • Asset optimization
  • CSS purging
  • Image processing
Static site generation

Deployment

GitHub Pages hosting

  • GitHub Actions
  • CDN delivery
  • HTTPS
  • Custom domain
GitHub Pages hosting

Technology Stack

πŸš€
Astro(Framework)
βš›οΈ
React(UI Library)
🎨
Tailwind CSS(Styling)
πŸ“˜
TypeScript(Language)
πŸ“
MDX(Content)
🌐
GitHub Pages(Hosting)
Astro Islands
Zero JS Default
< 30s
Build Time
< 50KB
Bundle Size
100/100
Lighthouse
100Lighthouse Score Β· Zero JS by Default

Overview

This portfolio website serves as the central hub for showcasing my research, projects, and professional activities as an AI Security Researcher. Built with modern web technologies to ensure optimal performance, accessibility, and developer experience.

Tech Stack

TechnologyPurpose
AstroStatic site generator with zero JS by default
Tailwind CSSUtility-first CSS framework
TypeScriptType-safe JavaScript development
MDXEnhanced Markdown with JSX support
GitHub PagesStatic hosting with CI/CD

Architecture

Project Structure

portfolio-website/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ layout/
β”‚   β”‚   β”‚   β”œβ”€β”€ BaseLayout.astro
β”‚   β”‚   β”‚   β”œβ”€β”€ Header.astro
β”‚   β”‚   β”‚   └── Footer.astro
β”‚   β”‚   β”œβ”€β”€ ui/
β”‚   β”‚   β”‚   β”œβ”€β”€ Card.astro
β”‚   β”‚   β”‚   β”œβ”€β”€ Badge.astro
β”‚   β”‚   β”‚   └── Button.astro
β”‚   β”‚   └── sections/
β”‚   β”‚       β”œβ”€β”€ Hero.astro
β”‚   β”‚       β”œβ”€β”€ About.astro
β”‚   β”‚       └── ProjectShowcase.astro
β”‚   β”œβ”€β”€ content/
β”‚   β”‚   β”œβ”€β”€ projects/      # Project markdown files
β”‚   β”‚   β”œβ”€β”€ blog/          # Blog posts
β”‚   β”‚   └── publications/  # Academic papers
β”‚   β”œβ”€β”€ pages/             # Route pages
β”‚   β”œβ”€β”€ styles/            # Global CSS
β”‚   └── utils/             # Helper functions
β”œβ”€β”€ public/                # Static assets
β”œβ”€β”€ astro.config.mjs       # Astro configuration
└── tailwind.config.mjs    # Tailwind configuration

Key Features

1. Content Collections

Projects are managed through Astro’s content collections:

// src/content/config.ts
import { defineCollection, z } from 'astro:content';

const projects = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    status: z.enum(['completed', 'in-progress', 'draft']),
    category: z.string(),
    tags: z.array(z.string()),
    summary: z.string(),
    technologies: z.array(z.string()),
    repository: z.string().url().optional(),
    demo: z.string().url().optional(),
  }),
});

export const collections = { projects };

2. Component-Based Architecture

Reusable UI components for consistent design:

---
// src/components/ui/Card.astro
interface Props {
  title: string;
  description: string;
  tags?: string[];
}

const { title, description, tags } = Astro.props;
---

<div class="glass-card p-6">
  <h3 class="text-xl font-bold mb-2">{title}</h3>
  <p class="text-text-secondary">{description}</p>
  {tags && (
    <div class="flex gap-2 mt-4">
      {tags.map(tag => (
        <span class="badge">{tag}</span>
      ))}
    </div>
  )}
</div>

3. Responsive Design

Mobile-first approach with Tailwind CSS:

/* Responsive grid */
.grid {
  @apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6;
}

/* Glass morphism effect */
.glass-card {
  @apply bg-white/5 backdrop-blur-lg border border-white/10 rounded-xl;
}

4. Performance Optimization

  • Zero JS by default: Minimal JavaScript for fast loading
  • Image optimization: Automatic image optimization with Sharp
  • Code splitting: Only load necessary code per page
  • Static generation: Pre-rendered pages for instant delivery

Performance Metrics

MetricScore
Performance98
Accessibility100
Best Practices100
SEO100

Lighthouse scores - Desktop

Content Management

Adding Projects

Create a new markdown file in src/content/projects/:

---
title: "Project Title"
status: "completed"
category: "federated-learning"
tags:
  - federated-learning
  - security
summary: "Brief project description"
technologies:
  - Python
  - PyTorch
repository: "https://github.com/user/repo"
---

Interactive CLI

Built-in CLI for managing activity log:

npm run update-activity

Development

Installation

git clone https://github.com/alazkiyai09/alazkiyai09.github.io.git
cd alazkiyai09.github.io
npm install

Local Development

npm run dev
# Server running at http://localhost:4321

Production Build

npm run build
npm run preview

Deployment

The site is automatically deployed to GitHub Pages via GitHub Actions:

  1. Push to main branch
  2. GitHub Actions builds the site
  3. Deployed to https://alazkiyai09.github.io

Workflow

# .github/workflows/deploy.yml
name: Deploy to GitHub Pages

on:
  push:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: withastro/action@v1
        with:
          path: ./

Design System

Color Palette

:root {
  --color-accent: #3b82f6;
  --color-accent-light: #60a5fa;
  --color-accent-pale: #93c5fd;
  --color-text-primary: #1f2937;
  --color-text-secondary: #6b7280;
  --color-bg-surface: #f9fafb;
}

Typography

.font-display {
  font-family: 'Inter', system-ui, sans-serif;
}

.font-mono {
  font-family: 'Fira Code', monospace;
}

Future Enhancements

  1. Dark Mode: Toggle between light/dark themes
  2. Blog Comments: Add commenting system
  3. Search: Full-text search for projects
  4. RSS Feed: Auto-generated RSS for blog
  5. Analytics: Privacy-friendly analytics integration

License

MIT License

Credits

Built with: