Personal site built with Astro. Deployed automatically to GitHub Pages on every push to main.
npm install
npm run dev # → http://localhost:4321
npm run build # builds to dist/
All content lives in src/content/ as YAML files. You never need to touch the page code to update your info.
| File | What it controls |
|---|---|
about.yaml |
Name, bio, hero text, interests, languages, contact links |
experience.yaml |
Work and volunteer roles |
projects.yaml |
Project cards |
education.yaml |
Degrees |
skills.yaml |
Skill groups and which ones are highlighted |
awards.yaml |
Awards and certifications |
uses.yaml |
The /uses page — hardware, software, tools |
Open src/content/experience.yaml and add a block at the top:
- title: Your Job Title
org: Company Name
url: https://company.com # optional
dates: Jan 2025 — Present
type: work # "work" or "vol"
bullets:
- First responsibility
- Second responsibility
Open src/content/projects.yaml and add a block:
- title: My New Project
tag: Machine Learning # see tag options in the file header
description: >
What the project does, methods used, and what you learned.
stack: [Python, pandas, sklearn]
url: https://github.com/theqquach/my-project
In src/content/skills.yaml, add hot: true to any item:
- name: PyTorch
hot: true
Replace public/avatar.png with your new photo. Keep the filename the same.
Drop your PDF into public/uploads/resume.pdf.
Push to main → GitHub Actions builds the site → deploys to GitHub Pages automatically.
First-time setup:
.github/workflows/deploy.yml handles the resttheqquach.github.io/
├── src/
│ ├── content/ ← EDIT THESE
│ │ ├── about.yaml
│ │ ├── experience.yaml
│ │ ├── projects.yaml
│ │ ├── education.yaml
│ │ ├── skills.yaml
│ │ ├── awards.yaml
│ │ └── uses.yaml
│ ├── layouts/
│ │ └── Base.astro ← nav, footer, shared HTML
│ ├── pages/
│ │ ├── index.astro ← home page
│ │ └── uses.astro ← /uses page
│ └── styles/
│ └── global.css ← colours, fonts, shared styles
├── public/
│ ├── avatar.png ← your photo
│ └── uploads/
│ └── resume.pdf ← your CV
├── astro.config.mjs
└── package.json