A modern, responsive website for the CU Robotics ARC competition team at the University of Colorado Boulder.
- Bold CU Boulder Black & Gold Theme - Official university colors with modern design
- Interactive 3D Robot Viewer - Three.js powered model viewer with orbit controls
- JSON-Driven Content - Easy updates without touching HTML code
- Smooth Animations - Scroll-triggered animations and parallax effects
- Mobile Responsive - Fully responsive design with mobile menu
- Modern CSS - CSS Grid, Flexbox, Custom Properties, and Glassmorphism effects
- Open
index.htmlin a web browser - For local development, use a local server (required for JSON loading):
# Using Python python -m http.server 8000 # Using Node.js npx serve # Using PHP php -S localhost:8000
- Open
http://localhost:8000in your browser
website/
├── index.html # Homepage
├── team.html # Team/Leaders page
├── projects.html # Projects showcase
├── achievements.html # Awards timeline
├── contact.html # Contact form
├── README.md # This file
│
├── css/
│ └── styles.css # All styles (CSS variables, components, responsive)
│
├── js/
│ ├── main.js # Animations, navigation, JSON loading
│ └── robot-viewer.js # Three.js 3D viewer
│
├── data/
│ ├── achievements.json # Competition awards (edit this!)
│ ├── leaders.json # Team members (edit this!)
│ └── robots.json # Robot info & 3D models (edit this!)
│
├── images/
│ ├── logo.png # Team logo
│ ├── hero.jpg # Homepage hero image
│ ├── [name]-[surname].png # Team member photos
│ ├── discord-icon.png # Social icons
│ ├── instagram-icon.png
│ ├── youtube-icon.png
│ ├── robots/ # Robot photos (add here)
│ └── achievements/ # Achievement photos (add here)
│
└── models/
└── [robot-name].glb # 3D robot models (add here)
Add or edit team members by modifying the JSON file:
{
"leadership": [
{
"name": "New Person",
"role": "Their Role",
"photo": "images/new-person.png",
"major": "Engineering",
"year": "Junior",
"bio": "Short bio here (2-3 sentences max).",
"email": "email@colorado.edu",
"linkedin": "https://linkedin.com/in/profile",
"github": "https://github.com/username"
}
],
"members": [
// Non-leadership team members go here
]
}Photo Requirements:
- Square aspect ratio (400x400px minimum)
- PNG or JPG format
- Save to
images/folder - Use lowercase with hyphens:
first-last.png
Add achievements by year:
{
"achievements": [
{
"year": "2026",
"items": [
{
"competition": "Competition Name",
"award": "Award Won",
"description": "Brief description of the achievement.",
"image": "images/achievements/photo.jpg",
"date": "2026-03-15"
}
]
}
]
}Tips:
- Add new years at the TOP of the array
- Images are optional but recommended
- Date format: YYYY-MM-DD
- Keep descriptions concise (1-2 sentences)
Add robot information and 3D models:
{
"robots": [
{
"id": "robot-name-year",
"name": "Robot Name",
"season": "2025-2026",
"status": "active",
"description": "Brief robot description.",
"image": "images/robots/robot-photo.jpg",
"model3d": "models/robot-name.glb",
"specs": {
"drivetrain": "6-Motor Mecanum",
"intake": "Dual Roller",
"weight": "14.8 lbs"
},
"features": [
"Feature 1",
"Feature 2"
]
}
]
}Important:
- Only ONE robot should have
"status": "active"at a time - The active robot is featured on the homepage 3D viewer
- GLB (preferred) - Single binary file
- GLTF - JSON with external assets
-
Export from CAD:
- Fusion 360: File → Export → Select GLB
- SolidWorks: Use third-party converter
- Blender: File → Export → glTF 2.0 (.glb)
-
Optimize for Web:
- Keep file size under 10MB
- Reduce polygon count if needed
- Use gltf.report to check and optimize
-
Scale:
- Model should be approximately 2 units tall
- Or use real-world scale (the viewer auto-fits)
-
Save:
- Place in
models/folder - Use lowercase with hyphens:
robot-name-2026.glb
- Place in
-
Update robots.json:
"model3d": "models/robot-name-2026.glb"
- Model not loading? Check browser console for errors
- Model too small/large? The viewer auto-scales, but check your export settings
- Textures missing? Use GLB format (embeds textures) or ensure texture paths are correct
- Slow loading? Optimize with gltf.report or Blender's Decimate modifier
images/robots/
├── atlas-2026.jpg
├── titan-2025.jpg
└── phoenix-2024.jpg
- Recommended: 16:9 aspect ratio, minimum 800px wide
- Update
robots.jsonwith the path
images/achievements/
├── arc-championship-2026.jpg
├── state-championship-2025.jpg
└── skills-award-2025.jpg
- Recommended: 16:9 aspect ratio, minimum 800px wide
- Update
achievements.jsonwith the path
- Square aspect ratio (1:1)
- Minimum 400x400 pixels
- Save directly in
images/folder - Naming:
firstname-lastname.png
Edit CSS variables in css/styles.css:
:root {
--cu-gold: #CFB87C; /* Main accent */
--cu-black: #000000; /* Primary background */
--cu-charcoal: #1C1C1C; /* Secondary background */
/* ... more variables */
}The site uses Google Fonts:
- Display: Space Grotesk (headings)
- Body: Inter (paragraphs)
- Mono: JetBrains Mono (technical text)
Change in <head> of each HTML file.
Update in all HTML files and data/leaders.json:
- Discord:
https://discord.gg/curobotics - Instagram:
https://instagram.com/curobotics - YouTube:
https://youtube.com/@curobotics
Search and replace your-form-id with your actual Google Form ID.
- Chrome 80+
- Firefox 75+
- Safari 13+
- Edge 80+
- Three.js r128 - 3D rendering
- Three.js OrbitControls - Camera controls
- Three.js GLTFLoader - Model loading
- Three.js DRACOLoader - Compressed model support
- Images are lazy-loaded when possible
- 3D models load asynchronously
- Animations use CSS transforms (GPU accelerated)
- Consider WebP format for images
Works with any static host:
- GitHub Pages - Free, automatic deploys
- Netlify - Free tier available
- Vercel - Free tier available
- CU Boulder web hosting - Check with IT
- Push to GitHub repository
- Go to Settings → Pages
- Select branch (usually
main) - Wait for deployment
- Must use a web server (not
file://protocol) - Check browser console for CORS errors
- Verify JSON syntax at jsonlint.com
- Check if Three.js CDN is loading
- Verify model path in
robots.json - Check browser console for WebGL errors
- Elements need
animate-on-scrollclass - Check if JavaScript is loading
- Verify Intersection Observer support
- Check if
main.jsis loaded - Verify
.mobile-menuand.mobile-menu-btnexist
- Make changes to content via JSON files
- Test locally with a web server
- Submit changes for review
For code changes, please discuss with the web team first.
- Design & Development: CU Robotics Web Team
- Theme: CU Boulder Official Brand Colors
- 3D Library: Three.js
- Fonts: Google Fonts
This website is property of CU Robotics at the University of Colorado Boulder.
Last updated: January 2026