Skip to content

Commit e795c63

Browse files
committed
feat: initial commit
0 parents  commit e795c63

30 files changed

+5008
-0
lines changed

.github/workflows/ci.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
6+
permissions:
7+
contents: read
8+
9+
jobs:
10+
build:
11+
name: Lint and Build
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v5
16+
17+
- name: Setup Node.js
18+
uses: actions/setup-node@v4
19+
with:
20+
node-version-file: '.nvmrc'
21+
cache: npm
22+
23+
- name: Install dependencies
24+
run: npm ci
25+
26+
- name: Run lint
27+
run: npm run lint
28+
29+
- name: Build site
30+
run: npm run build

.github/workflows/deploy.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Deploy to GitHub Pages
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
pages: write
12+
id-token: write
13+
14+
concurrency:
15+
group: pages
16+
cancel-in-progress: true
17+
18+
jobs:
19+
build:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- name: Checkout
23+
uses: actions/checkout@v5
24+
25+
- name: Setup Node.js
26+
uses: actions/setup-node@v4
27+
with:
28+
node-version-file: '.nvmrc'
29+
cache: npm
30+
31+
- name: Install dependencies
32+
run: npm ci
33+
34+
- name: Run lint
35+
run: npm run lint
36+
37+
- name: Build site
38+
run: npm run build
39+
40+
- name: Upload Pages artifact
41+
uses: actions/upload-pages-artifact@v3
42+
with:
43+
path: dist
44+
45+
deploy:
46+
environment:
47+
name: github-pages
48+
url: ${{ steps.deployment.outputs.page_url }}
49+
runs-on: ubuntu-latest
50+
needs: build
51+
steps:
52+
- name: Deploy to GitHub Pages
53+
id: deployment
54+
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist/
12+
dist-ssr/
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea/
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?

.husky/pre-commit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
npx lint-staged

.nvmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v24

CONTRIBUTING.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Contributing
2+
3+
Thanks for your interest in contributing!
4+
5+
## Development Setup
6+
7+
- Node.js: use the version in `.nvmrc`
8+
- Install dependencies: `npm install`
9+
- Start dev server: `npm run dev`
10+
- Build SSG output: `npm run build`
11+
- Preview build: `npm run preview`
12+
13+
## Branch, Commit, PR
14+
15+
- Create a feature branch from `main`: `feat/...`, `fix/...`, or `docs/...`
16+
- Write clear, concise [conventional commits](https://www.conventionalcommits.org/). Group related changes.
17+
- Open a PR to `main`. Include:
18+
- What changed and why
19+
- Screenshots if the UI changed
20+
- Any follow‑ups needed
21+
22+
## Code Style
23+
24+
- TypeScript + React functional components
25+
- Tailwind CSS utility classes for styling
26+
- Keep components small and typed; prefer clear prop names and types
27+
- Avoid unnecessary abstractions; favor readability
28+
29+
## Formatting & Linting
30+
31+
- Biome is configured in `biome.json`
32+
- Check: `npm run lint`
33+
- Auto‑fix: `npm run lint:fix`
34+
- Pre‑commit hooks run Biome via `lint-staged`
35+
36+
## Testing & Verification
37+
38+
- This project is a static site; verify builds succeed (`npm run build`) and manually test pages in the browser
39+
- For UI updates, please include a screenshot or short description of the change
40+
41+
## Content & Assets
42+
43+
- Site content lives in `site-data.json`
44+
- Replace `public/profile.jpeg` with your own profile image when customizing
45+
- Do not include changes to these files when contributing unless necessary
46+
47+
## License
48+
49+
- By contributing, you agree your contributions will be licensed under the [MIT License](https://wei.mit-license.org/)

README.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# simple-resume
2+
3+
[![CI](https://img.shields.io/github/actions/workflow/status/wei/simple-resume/ci.yml?branch=main&label=CI)](https://github.com/wei/simple-resume/actions/workflows/ci.yml)
4+
[![Deploy](https://img.shields.io/github/actions/workflow/status/wei/simple-resume/deploy.yml?branch=main&label=Deploy)](https://github.com/wei/simple-resume/actions/workflows/deploy.yml)
5+
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://wei.mit-license.org/)
6+
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
7+
[![Code Style: Biome](https://img.shields.io/badge/code%20style-biome-60D394)](https://biomejs.dev)
8+
[![Node 24](https://img.shields.io/badge/node-24.x-339933?logo=node.js&logoColor=white)](.nvmrc)
9+
10+
A fast, responsive, SEO-friendly single‑page resume template powered by React, TypeScript, Tailwind CSS, Vite, and Static Site Generation.
11+
12+
## Demo
13+
14+
- Live demo: https://wei.github.io/simple-resume
15+
- Screenshot: ![screenshot](https://github.com/user-attachments/assets/262e0d31-8d96-467a-b9ac-2ea2419204ae)
16+
17+
## Features
18+
19+
- React + TypeScript responsive single‑page app
20+
- Content is driven by a single JSON file for easy customization
21+
- Static Site Generation (SSG) for fast first paint and SEO
22+
- GitHub Actions for CI and GitHub Pages deployment
23+
- Formatter & linter with pre‑commit hooks
24+
25+
## Getting Started
26+
27+
1. Make a new repo from [this template](https://github.com/new?template_name=simple-resume&template_owner=wei)
28+
3. Content: edit `site-data.json`
29+
4. Profile image: replace `public/profile.jpeg` with your own profile image (200×200 recommended)
30+
5. Style: edit Tailwind styles in `src/style.css` and within component files as needed
31+
32+
### Generate `site-data.json` using AI from LinkedIn
33+
34+
1. LinkedIn Profile → More → Save as PDF
35+
2. Download [site-data.json](./site-data.json)
36+
3. Upload both files to your favorite AI and ask it to generate a `site-data.json` file tailored to you!
37+
38+
## Deployment
39+
40+
### GitHub Pages
41+
1) Ensure the repository has Pages enabled under Settings → Pages, with source “GitHub Actions”.
42+
2) The included workflow `.github/workflows/deploy.yml` builds and deploys on pushes to `main`.
43+
3) Push to `main`. The site will publish to the Pages URL shown in the workflow output.
44+
4) Optionally, set up a custom domain under Settings → Pages.
45+
46+
### Other static site hosting
47+
- Vercel, Netlify, Cloudflare Pages: configure a project that runs `npm run build` and serves the `dist/` directory.
48+
49+
## Project Structure
50+
51+
- `index.html`: main html file
52+
- `src/`: react components and app entry
53+
- `public/`: static assets like profile image
54+
- `site-data.json`: all content for the site
55+
- `dist/`: generated site output (not committed)
56+
57+
## Scripts
58+
59+
- `npm run dev`: start local dev server
60+
- `npm run build`: build static site with SSG
61+
- `npm run preview`: preview built output
62+
- `npm run lint`: check formatting/lint with Biome
63+
- `npm run lint:fix`: auto‑format and fix with Biome
64+
65+
## Contribution
66+
67+
See [CONTRIBUTING.md](CONTRIBUTING.md)
68+
69+
## License
70+
71+
[MIT](https://wei.mit-license.org/)

biome.json

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
3+
"vcs": {
4+
"enabled": true,
5+
"clientKind": "git",
6+
"useIgnoreFile": true
7+
},
8+
"files": {
9+
"ignoreUnknown": false
10+
},
11+
"formatter": {
12+
"enabled": true,
13+
"indentStyle": "space",
14+
"indentWidth": 2,
15+
"lineWidth": 120
16+
},
17+
"linter": {
18+
"enabled": true,
19+
"rules": {
20+
"recommended": true,
21+
"correctness": {
22+
"useUniqueElementIds": "off"
23+
},
24+
"suspicious": {
25+
"noArrayIndexKey": "off",
26+
"noUnknownAtRules": "off"
27+
}
28+
}
29+
},
30+
"javascript": {
31+
"formatter": {
32+
"quoteStyle": "double"
33+
}
34+
},
35+
"assist": {
36+
"enabled": true,
37+
"actions": {
38+
"source": {
39+
"organizeImports": "on"
40+
}
41+
}
42+
}
43+
}

index.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!DOCTYPE html>
2+
<html lang="en" class="scroll-smooth">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6+
<link rel="preconnect" href="https://fonts.googleapis.com">
7+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
8+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
9+
</head>
10+
<body class="bg-slate-50 text-slate-600 antialiased text-sm">
11+
<div id="root"></div>
12+
<script type="module" src="/src/main.tsx"></script>
13+
</body>
14+
</html>

0 commit comments

Comments
 (0)