A modern portfolio of Henry Allens website built with Next.js, Tailwind CSS, and shadcn/ui.
- Next.js 15 - React framework with App Router
- TypeScript - Type-safe JavaScript
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - Beautiful, accessible, and customizable components
- Lucide React - Beautiful & consistent icons
- Node.js 18.17 or later
- npm, yarn, or pnpm
- Clone the repository
- Install dependencies:
npm install- Run the development server:
npm run dev- Open http://localhost:3000 in your browser
npm run dev- Start development server with Turbopacknpm run build- Build the application for productionnpm run start- Start the production servernpm run lint- Run ESLint
henry-portfolio/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── globals.css # Global styles
│ │ ├── layout.tsx # Root layout with SEO metadata
│ │ ├── page.tsx # Homepage
│ │ └── the20hr-co/ # Experience page route
│ │ ├── layout.tsx # SEO-optimized layout for experience page
│ │ └── page.tsx # The20hr.co story page
│ ├── components/ # React components
│ │ ├── ui/ # shadcn/ui components
│ │ └── BackNavigation.tsx # Reusable back navigation overlay
│ └── lib/ # Utility functions
├── public/ # Static assets
│ ├── halogo.svg # Brand logo (used as favicon)
│ ├── site.webmanifest # PWA configuration
│ └── images/ # Image assets
└── package.json
To add new shadcn/ui components:
npx shadcn@latest add [component-name]Example:
npx shadcn@latest add dialog
npx shadcn@latest add form
npx shadcn@latest add navigation-menuThe project uses a layered layout approach for optimal SEO and functionality:
- Purpose: Defines global metadata, viewport settings, and PWA configuration
- Exports:
metadata(SEO tags) andviewport(responsive settings) - Features:
- Open Graph and Twitter Card metadata
- Custom favicon using brand logo (
halogo.svg) - Web manifest reference for PWA support
- Global theme and viewport configuration
- Purpose: Page-specific SEO optimization and structured data
- Server Component: Handles metadata export (required for SEO)
- Features:
- Targeted meta descriptions and keywords
- JSON-LD structured data for search engines
- Social media optimization with custom images
- Canonical URLs for SEO
- Purpose: Interactive functionality and animations
- Client-side: Uses
"use client"directive for interactivity - Features:
- Stagger animations and user interactions
- Dynamic content and scroll behaviors
- Clean separation from SEO concerns
The portfolio implements comprehensive SEO best practices:
- Hierarchical: Root layout provides global defaults, route layouts override specifics
- Complete: Title, description, keywords, authors, and social media tags
- Dynamic: Each page has tailored metadata for optimal search visibility
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "The20hr.co - Europe's Fastest Startup Exit",
"author": { "@type": "Person", "name": "Henry Allen" },
"image": { "@type": "ImageObject", "url": "..." }
}- Descriptive Alt Text: SEO-friendly image descriptions with context
- Lazy Loading: Performance optimization for images and iframes
- Social Sharing: Optimized images for Open Graph and Twitter Cards
- Article Structure: Proper
<article>,<header>,<section>tags - Microdata: Schema.org markup for enhanced search results
- Accessibility: ARIA labels and semantic navigation
The site.webmanifest file configures your portfolio as a Progressive Web App:
{
"name": "Henry Allen - AI Engineer & Entrepreneur",
"short_name": "Henry Allen",
"description": "Portfolio of Henry Allen - Self-taught AI engineer...",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "/halogo.svg",
"sizes": "any",
"type": "image/svg+xml",
"purpose": "any maskable"
}
]
}- Installable: Users can install your portfolio as a native app
- Offline Ready: Cached resources for offline viewing
- App-like Experience: Standalone display mode removes browser chrome
- Custom Branding: Uses your logo for app icons and splash screens
- Modern Favicon: SVG favicon scales perfectly across all devices
- Mobile Optimization: Proper touch icons and theme colors
- Search Engine Recognition: Helps search engines understand your site structure
- Colors: Modify CSS variables in
src/app/globals.css - Components: Customize shadcn/ui components in
src/components/ui/ - Fonts: Configure in
src/app/layout.tsx - SEO: Update metadata in layout files for different pages
- PWA: Modify
site.webmanifestfor app configuration
The easiest way to deploy is using Vercel:
- Push your code to GitHub
- Connect your repository to Vercel
- Deploy with zero configuration