A minimal, SEO-optimized personal website built with React, TypeScript, Vite, and Tailwind CSS. Originally created by Akash Bhadange.
- Minimal, centered single-column layout (544px max width)
- Dark mode support with system preference detection
- MDX-powered blog with automatic content indexing
- SEO-optimized with Open Graph, Twitter Cards, and JSON-LD
- Fully responsive design
- Fast builds with Vite
- Optional: Photography gallery with Cloudflare R2 storage
- Framework: React 18 with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS v3
- Routing: React Router v6
- Content: MDX for blog posts
- UI Components: Radix UI primitives
- Deployment: Vercel
git clone https://github.com/YOUR_USERNAME/YOUR_REPO.git
cd YOUR_REPO
npm installUpdate the following files with your information:
Edit src/config/site.ts with your details:
- Site name and URL
- Author name, email, and bio
- Social media links
- Project URLs
Edit src/scripts/site-config.js with the same information (used by build scripts).
- Replace
public/assets/profile.pngwith your profile photo - Replace
public/assets/footer-signature.pngwith your signature/logo - Update
public/assets/og-images/with your Open Graph images - Update
src/pages/Home.tsxwith your bio text - Update
src/components/Header.tsxwith your name
Search and replace these values across the codebase:
designerdada.com→ your domainAkash Bhadange→ your name@designerdada→ your handleakash@peerlist.io→ your email
Files to update:
src/App.tsx(JSON-LD and meta tags)src/pages/*.tsx(page-specific meta tags)src/scripts/generate-prerender.js
Copy .env.example to .env if you're using the photography feature:
cp .env.example .envnpm run dev/
├── src/
│ ├── components/ # React components
│ │ ├── ui/ # Radix UI components
│ │ └── figma/ # Figma import components
│ ├── config/ # Site configuration
│ ├── content/ # MDX content files
│ │ └── writing/ # Blog articles (*.mdx)
│ ├── data/ # Static data and article metadata
│ ├── hooks/ # Custom React hooks
│ ├── pages/ # Page components
│ ├── scripts/ # Build scripts
│ └── utils/ # Utility functions
├── public/ # Static assets
└── cloudflare-worker/ # Optional: Photography API
- Create a new
.mdxfile in/src/content/writing/ - Add frontmatter with required fields:
---
title: Your Article Title
description: Brief description for SEO
publishDate: DD.MMM.YYYY
author: Your Name
ogImage: https://yourdomain.com/og-image.jpg
keywords: keyword1, keyword2, keyword3
---
Your article content here...- Add the article entry to
/src/data/articles.ts - Run
npm run generate:mdxto rebuild the content index
Note: The content index (/src/content/writing/index.ts) is auto-generated. Never edit it manually!
# Development
npm run dev
# Production build
npm run build
# Preview production build
npm run preview
# Generate all build artifacts
npm run generate
# Individual generators
npm run generate:mdx # MDX content index
npm run generate:sitemap # Sitemap
npm run generate:llms # llms.txt for AI crawlersThe photography gallery requires Cloudflare R2 and Workers. See cloudflare-worker/README.md for setup instructions.
- Push your code to GitHub
- Import the repository in Vercel
- Deploy! Vercel will automatically handle the build.
npm run buildThe build output will be in the /build directory.
- Never commit
.envfiles orcloudflare-worker/.dev.vars - The
.gitignoreis configured to exclude sensitive files - All secrets should be set via environment variables or platform secrets
Open source - feel free to use as a template for your own site!
Originally built by Akash Bhadange (@designerdada)