Personal portfolio website built with React + TypeScript + Vite, with:
- Multi-language routes (e.g.
/en,/es,/ja, …) - A blog + projects section
- Static SEO generation during build
- DEV-only editors (hidden in production) to manage blog posts, projects, tags and assets
- React 19 + TypeScript
- Vite
- Tailwind CSS
- React Router
- Markdown rendering (GFM + KaTeX + code highlighting)
Requirements:
- Node.js 20+
Install and run locally:
npm ci
npm run devThen open the URL printed by Vite (default port in this repo is 5177).
npm run dev— starts Vite in dev mode (also generates sitemap/robots first)npm run build— production build (TypeScript build + Vite build + static SEO generation)npm run preview— previews the production build locallynpm run lint— ESLint
This repo includes a GitHub Actions workflow that deploys the dist/ output to GitHub Pages.
- Workflow:
.github/workflows/deploy-pages.yml - Trigger: push to
masterormain, or manual run - Output folder:
dist
The workflow auto-configures these build env vars:
VITE_BASESITE_URLVITE_SITE_URL
Rules:
- If
public/CNAMEexists, it assumes a custom domain and setsVITE_BASE=/. - Otherwise it assumes repository pages and sets
VITE_BASE=/<repo-name>/.
In your repository settings:
- Go to Settings → Pages
- Under Build and deployment, choose Source: GitHub Actions
- (Optional) If you use a custom domain, configure it there as well
- The content for blog posts and projects lives under
public/(so it’s available as static assets). - The DEV-only editors are intended for local usage and are not meant to be exposed in production.