Personal portfolio website for Tyler Du — software engineer, curious mind.
| Layer | Tech |
|---|---|
| Frontend | React 18 + Vite, React Router v6, react-markdown, CSS custom properties |
| Backend | Python 3.12, FastAPI, Mangum (Lambda adapter) |
| AI | Anthropic Claude Sonnet 4.6 — JD fit evaluation via /api/ask |
| Infrastructure | AWS Lambda, API Gateway, S3, CloudFront, SES, Route53, ACM |
| IaC | Terraform (state in S3, native S3 locking) |
Frontend
cd portfolio-website
cp .env.example .env.local # set VITE_API_URL=http://localhost:8000
npm install
npm run dev # → localhost:5173Backend
cd backend
pip install -r requirements.txt
uvicorn app.main:app --reload # → localhost:8000Infrastructure (run once, or on infra changes)
cd infrastructure/terraform
terraform init
terraform apply # requires terraform.tfvars with anthropic_api_keyFrontend
VITE_API_URL=https://api.whoistylerdu.com \
bash infrastructure/scripts/deploy_frontend.shOr use the /deploy and /deploy-infra slash commands in Claude Code.
Note:
Resume_Tyler_Du.pdfis not tracked in git. It lives ats3://whoistylerdu.com/Resume_Tyler_Du.pdfand is excluded from the frontend sync. To update it:aws s3 cp Resume_Tyler_Du.pdf s3://whoistylerdu.com/Resume_Tyler_Du.pdf --cache-control "max-age=86400" --region us-west-1
whoistylerdu.com → CloudFront → S3 (React build, us-west-1)
api.whoistylerdu.com → API Gateway → Lambda (FastAPI) → SES / Anthropic API
→ S3 (resume PDF read)
Routes: /api/health · /api/contact · /api/ask
The /ask page lets recruiters paste a job description and get a Claude-powered evaluation of Tyler's fit. The agent is grounded in:
- Resume PDF fetched live from S3
- Project data from
src/components/projects.js
Planned enhancements:
- MCP server integration with Google Drive (work samples)
- GitHub repository links surfaced as evidence
- Richer conversational context
- Phase 1 — UI overhaul (light + dreamy theme, Vite migration)
- Phase 2 — FastAPI backend + AWS infrastructure via Terraform
- Phase 3 — Agentic AI: Claude-powered recruiter assistant (
/ask) - Phase 3+ — MCP server (Google Drive, GitHub), richer agent context