Skip to content

Commit 23aa360

Browse files
committed
Update README to reflect portfolio site details and structure
1 parent 6e2885d commit 23aa360

File tree

1 file changed

+118
-6
lines changed

1 file changed

+118
-6
lines changed

README.md

Lines changed: 118 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,121 @@
1-
# React Application with Vite and Three.js
1+
# Gavin Hon Portfolio
22

3-
This repository contains a React application that utilizes Vite as the build tool and integrates Three.js for 3D graphics rendering. It serves as a starting point for developing interactive and visually engaging web applications.
3+
This is a single-page portfolio site built with React and Vite. It is designed as a content-driven personal site rather than a CMS-backed app: profile details, experience, education, links, and featured work are maintained directly in the source code.
44

5-
## Features
5+
The site combines a structured portfolio layout with a Three.js globe hero, grouped experience cards, and a light/dark theme that follows the user's device or browser preference.
66

7-
- React: A JavaScript library for building user interfaces.
8-
- Vite: A fast and lightweight development build tool for modern web applications.
9-
- Three.js: A JavaScript library for creating 3D graphics and animations in the browser.
7+
## Tech Stack
8+
9+
- React 18 for the UI and section composition
10+
- Vite for local development and production builds
11+
- Three.js for the hero globe
12+
- GSAP for globe motion
13+
- Plain CSS for layout, theming, and responsive behavior
14+
- React Context for portfolio content and profile data
15+
16+
## How It Is Built
17+
18+
### Application structure
19+
20+
- `src/main.jsx` mounts the React app
21+
- `src/App.jsx` composes the page sections and applies reveal-on-scroll behavior
22+
- `src/context/DataContext.jsx` stores the portfolio content model
23+
- `src/components/sections/` contains the main page sections:
24+
- `Navbar`
25+
- `Home`
26+
- `About`
27+
- `Work`
28+
- `Credentials`
29+
- `Footer`
30+
- `src/components/ThreeEarth.jsx` renders the globe used in the hero
31+
- `public/` contains static assets such as logos, favicon, social icons, and profile imagery
32+
33+
### Content model
34+
35+
The site content is driven from `src/context/DataContext.jsx`.
36+
37+
This includes:
38+
39+
- profile headline, summaries, links, and hero highlights
40+
- grouped work experience entries and company metadata
41+
- certifications and education
42+
- featured public links
43+
- skill tags and focus areas
44+
45+
If you want to update role history, hero text, public links, or company logos, that is the main file to change.
46+
47+
### Styling and theming
48+
49+
- `src/index.css` defines the global design tokens and the light/dark theme variables
50+
- the site uses `prefers-color-scheme` to switch automatically between light and dark mode
51+
- `src/App.css` provides the shared shell, card, button, pill, and reveal styles
52+
- each section has its own CSS file for layout-specific styling
53+
54+
The current visual direction uses:
55+
56+
- a cool-toned grid background
57+
- glass-like cards with soft borders and shadows
58+
- a restrained defense-tech inspired palette
59+
- responsive layouts for desktop and mobile
60+
61+
### Hero globe
62+
63+
The hero section lazy-loads `ThreeEarth` so the main page content does not depend on the rendering bundle loading first.
64+
65+
The globe implementation uses:
66+
67+
- Three.js scene/camera/renderer setup
68+
- GSAP-based rotation animation
69+
- a separate rendering chunk configured in `vite.config.js`
70+
71+
## Build and Run
72+
73+
Install dependencies:
74+
75+
```bash
76+
npm install
77+
```
78+
79+
Start the local dev server:
80+
81+
```bash
82+
npm run dev
83+
```
84+
85+
Create a production build:
86+
87+
```bash
88+
npm run build
89+
```
90+
91+
Preview the production build locally:
92+
93+
```bash
94+
npm run preview
95+
```
96+
97+
## Build Configuration
98+
99+
`vite.config.js` uses:
100+
101+
- `@vitejs/plugin-react` for React support
102+
- `vite-plugin-string` for loading shader strings
103+
- manual chunking so `three` and `gsap` are split into a dedicated `rendering` bundle
104+
105+
This keeps the main app bundle smaller and isolates the heavier visual code.
106+
107+
## Notes for Maintenance
108+
109+
- update portfolio content in `src/context/DataContext.jsx`
110+
- update section layout/styling in the matching file under `src/components/sections/`
111+
- update global theme behavior in `src/index.css` and `src/App.css`
112+
- update static assets such as logos and favicon in `public/`
113+
114+
## Current Characteristics
115+
116+
- single-page portfolio experience
117+
- sticky top navigation with section jump links
118+
- grouped company experience cards
119+
- responsive first-fold hero with globe backdrop
120+
- public-facing links to LinkedIn, GitHub, and selected work
121+
- system-based light and dark mode

0 commit comments

Comments
 (0)