Skip to content

Commit 3c891e5

Browse files
committed
Add GitHub Actions deployment workflow
1 parent da8388b commit 3c891e5

5 files changed

Lines changed: 356 additions & 92 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
name: Deploy VR Portfolio to GitHub Pages
2+
3+
on:
4+
push:
5+
branches: [ main, master ]
6+
pull_request:
7+
branches: [ main, master ]
8+
workflow_dispatch:
9+
10+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
11+
permissions:
12+
contents: read
13+
pages: write
14+
id-token: write
15+
16+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
17+
concurrency:
18+
group: "pages"
19+
cancel-in-progress: false
20+
21+
jobs:
22+
build:
23+
runs-on: ubuntu-latest
24+
25+
steps:
26+
- name: Checkout repository
27+
uses: actions/checkout@v4
28+
29+
- name: Setup Node.js
30+
uses: actions/setup-node@v4
31+
with:
32+
node-version: '18'
33+
cache: 'npm'
34+
35+
- name: Install dependencies
36+
run: npm ci
37+
38+
- name: Build project
39+
run: npm run build
40+
env:
41+
NODE_ENV: production
42+
43+
- name: Setup Pages
44+
uses: actions/configure-pages@v4
45+
46+
- name: Upload artifact
47+
uses: actions/upload-pages-artifact@v3
48+
with:
49+
path: ./dist
50+
51+
deploy:
52+
environment:
53+
name: github-pages
54+
url: ${{ steps.deployment.outputs.page_url }}
55+
runs-on: ubuntu-latest
56+
needs: build
57+
steps:
58+
- name: Deploy to GitHub Pages
59+
id: deployment
60+
uses: actions/deploy-pages@v4

src/components/FloatingShapes.jsx

Lines changed: 45 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,32 @@ const FloatingShapes = () => {
2828
const shapes = useMemo(() => {
2929
const shapeArray = []
3030
const shapeTypes = ['sphere', 'cube']
31-
const materialTypes = ['glass', 'metal', 'neon', 'hologram', 'crystal']
31+
const materialTypes = ['matte', 'wireframe'] // 80% matte, 20% wireframe
32+
const primaryColors = [
33+
'#ff0000', // Red
34+
'#00ff00', // Green
35+
'#0000ff', // Blue
36+
'#ffff00', // Yellow
37+
'#ff00ff', // Magenta
38+
'#00ffff', // Cyan
39+
'#ff8000', // Orange
40+
'#8000ff', // Purple
41+
'#80ff00', // Lime
42+
'#ff0080', // Pink
43+
'#0080ff', // Light Blue
44+
'#ff8080' // Light Red
45+
]
3246

33-
for (let i = 0; i < 200; i++) { // Doubled from 100 to 200 balls
47+
// Reduce shapes on mobile for better performance
48+
const isMobile = window.innerWidth <= 768
49+
const shapeCount = isMobile ? 100 : 200
50+
51+
for (let i = 0; i < shapeCount; i++) {
52+
const isWireframe = Math.random() < 0.2 // 20% chance of wireframe
3453
shapeArray.push({
3554
id: i,
3655
type: shapeTypes[Math.floor(Math.random() * shapeTypes.length)], // Random sphere or cube
37-
materialType: materialTypes[Math.floor(Math.random() * materialTypes.length)], // Random material
56+
materialType: isWireframe ? 'wireframe' : 'matte',
3857
position: [
3958
(Math.random() - 0.5) * 30, // Even wider spread for more balls
4059
(Math.random() - 0.5) * 20, // Higher spread
@@ -49,10 +68,7 @@ const FloatingShapes = () => {
4968
(Math.random() - 0.5) * 1 // Reduced direction intensity
5069
],
5170
scrollSensitivity: 0.3 + Math.random() * 0.5, // Reduced sensitivity
52-
color: [
53-
'#ec4899', '#8b5cf6', '#3b82f6', '#06b6d4',
54-
'#a855f7', '#d946ef', '#f59e0b', '#10b981'
55-
][Math.floor(Math.random() * 8)]
71+
color: primaryColors[Math.floor(Math.random() * primaryColors.length)]
5672
})
5773
}
5874
return shapeArray
@@ -116,65 +132,29 @@ const FloatingShapes = () => {
116132
}
117133
}, [shape.type])
118134

119-
// Different material types for variety
135+
// Choose material based on type
120136
const material = useMemo(() => {
121-
switch (shape.materialType) {
122-
case 'glass':
123-
return (
124-
<meshPhysicalMaterial
125-
color={shape.color}
126-
metalness={0.0}
127-
roughness={0.0}
128-
transmission={0.9}
129-
transparent={true}
130-
opacity={0.6}
131-
/>
132-
)
133-
case 'metal':
134-
return (
135-
<meshStandardMaterial
136-
color={shape.color}
137-
metalness={1.0}
138-
roughness={0.2}
139-
/>
140-
)
141-
case 'neon':
142-
return (
143-
<meshBasicMaterial
144-
color={shape.color}
145-
transparent={true}
146-
opacity={0.8}
147-
/>
148-
)
149-
case 'hologram':
150-
return (
151-
<meshPhongMaterial
152-
color={shape.color}
153-
transparent={true}
154-
opacity={0.4}
155-
shininess={100}
156-
/>
157-
)
158-
case 'crystal':
159-
return (
160-
<meshPhysicalMaterial
161-
color={shape.color}
162-
metalness={0.1}
163-
roughness={0.0}
164-
transparent={true}
165-
opacity={0.7}
166-
/>
167-
)
168-
default:
169-
return (
170-
<meshStandardMaterial
171-
color={shape.color}
172-
metalness={0.2}
173-
roughness={0.1}
174-
transparent={true}
175-
opacity={0.8}
176-
/>
177-
)
137+
if (shape.materialType === 'wireframe') {
138+
return (
139+
<meshBasicMaterial
140+
color={shape.color}
141+
wireframe={true}
142+
transparent={true}
143+
opacity={0.8}
144+
/>
145+
)
146+
} else {
147+
return (
148+
<meshPhysicalMaterial
149+
color={shape.color}
150+
metalness={0.0}
151+
roughness={0.2}
152+
clearcoat={1.0}
153+
clearcoatRoughness={0.1}
154+
transparent={true}
155+
opacity={0.9}
156+
/>
157+
)
178158
}
179159
}, [shape.materialType, shape.color])
180160

src/components/HeroSection.jsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,22 +50,36 @@ const HeroSection = () => {
5050
<div className="navbar__content">
5151
<div className="navbar__links">
5252
<a href="mailto:austinthemichaud@gmail.com" className="navbar__link">
53-
austinthemichaud@gmail.com
53+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
54+
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
55+
<polyline points="22,6 12,13 2,6"></polyline>
56+
</svg>
57+
<span className="navbar__text">Email</span>
58+
<span className="navbar__text--full">austinthemichaud@gmail.com</span>
5459
</a>
5560
<a href="https://www.linkedin.com/in/austin-michaud-9b25aa141/" target="_blank" rel="noopener noreferrer" className="navbar__link">
56-
LinkedIn
61+
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
62+
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
63+
</svg>
64+
<span className="navbar__text">LinkedIn</span>
65+
<span className="navbar__text--full">LinkedIn</span>
5766
</a>
5867
<a href="https://github.com/foobar404" target="_blank" rel="noopener noreferrer" className="navbar__link">
59-
GitHub
68+
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
69+
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
70+
</svg>
71+
<span className="navbar__text">GitHub</span>
72+
<span className="navbar__text--full">GitHub</span>
6073
</a>
6174
</div>
6275
<a href="/assets/resume.pdf" download="Austin_Michaud_Resume.pdf" className="navbar__resume-btn">
63-
<span>Download Resume</span>
6476
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
6577
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
6678
<polyline points="7,10 12,15 17,10"></polyline>
6779
<line x1="12" y1="15" x2="12" y2="3"></line>
6880
</svg>
81+
<span className="navbar__text">Resume</span>
82+
<span className="navbar__text--full">Download Resume</span>
6983
</a>
7084
</div>
7185
</nav>

0 commit comments

Comments
 (0)