Learn how to update and manage all content on the Open Hardware Initiative website.
The website uses TypeScript data files for content management. This approach:
- β No database required - everything is in code
- β Version controlled - all changes are tracked in Git
- β Easy to maintain - simple file editing
- β Type-safe - TypeScript prevents errors
All content is managed in these files:
Source code/src/data/
βββ peopleData.ts # Team members
βββ projectsData.ts # Projects showcase
βββ eventsData.ts # Events and activities
Source code/src/config/
βββ applicationConfig.ts # Application form settings
-
Edit
src/data/peopleData.ts:export const peopleData = [ // ... existing members { name: "John Doe", role: "Team Member", image: "/media/team/john-doe.jpg", linkedin: "https://linkedin.com/in/johndoe", github: "https://github.com/johndoe", email: "john.doe@tum.de", description: "Hardware enthusiast with expertise in FPGA design.", skills: ["FPGA", "VHDL", "Digital Design"], year: 2024, semester: "SoSe" } ];
-
Add team member photo:
- Save photo as
Source code/public/media/team/john-doe.jpg - Use JPG format, recommended size: 400x400px
- Keep file size under 200KB
- Save photo as
-
Test locally:
bun run dev -
Deploy: Commit and push changes
- Find the member in
src/data/peopleData.ts - Update any fields:
name- Full namerole- Position/roleimage- Photo pathlinkedin- LinkedIn profile URLgithub- GitHub profile URLemail- Email addressdescription- Bio/descriptionskills- Array of skillsyear- Year joinedsemester- Semester joined (WiSe/SoSe)
- Remove the member object from
peopleDataarray - Optionally delete their photo from
public/media/team/ - Commit and push changes
-
Edit
src/data/projectsData.ts:export const projectsData = [ // ... existing projects { title: "FPGA-Based Neural Network", description: "Implementation of a neural network on FPGA for real-time inference.", image: "/media/projects/fpga-neural-network.jpg", technologies: ["VHDL", "Python", "TensorFlow"], github: "https://github.com/ohw/fpga-neural-network", demo: "https://demo.example.com", status: "In Progress", // "Completed", "In Progress", "Planning" team: ["John Doe", "Jane Smith"], year: 2024 } ];
-
Add project image:
- Save as
Source code/public/media/projects/project-name.jpg - Recommended size: 800x600px
- Keep file size under 500KB
- Save as
title- Project namedescription- Brief project descriptionimage- Project screenshot/logotechnologies- Array of technologies usedgithub- GitHub repository URL (optional)demo- Live demo URL (optional)status- Project statusteam- Array of team member namesyear- Year project started
-
Edit
src/data/eventsData.ts:export const eventsData = [ // ... existing events { title: "Hardware Workshop", date: "2024-03-15", time: "14:00-17:00", location: "TUM Campus", description: "Learn FPGA programming basics.", image: "/media/events/hardware-workshop.jpg", registration: "https://forms.google.com/workshop", status: "Upcoming", // "Upcoming", "Past", "Cancelled" category: "Workshop" // "Workshop", "Lecture", "Competition", "Social" } ];
-
Add event image (optional):
- Save as
Source code/public/media/events/event-name.jpg - Recommended size: 800x400px
- Save as
title- Event namedate- Date in YYYY-MM-DD formattime- Time range (optional)location- Event locationdescription- Event descriptionimage- Event banner/imageregistration- Registration form URLstatus- Event statuscategory- Event type
Edit src/config/applicationConfig.ts:
export const applicationConfig = {
isOpen: false, // Set to true to enable applications
formUrl: "https://forms.google.com/your-form-url",
closedMessage: "Application period is currently closed. Check back later!",
openMessage: "We're currently accepting applications! Apply now."
};-
Applications Open:
- Set
isOpen: true - Update
formUrlwith your Google Form link - Update
openMessageif needed
- Set
-
Applications Closed:
- Set
isOpen: false - Update
closedMessagewith appropriate message - The form URL will be ignored
- Set
- Create a Google Form for applications
- Copy the form URL
- Update
formUrlinapplicationConfig.ts - Test the link works correctly
- Team photos: 400x400px, JPG format
- Project images: 800x600px, JPG format
- Event banners: 800x400px, JPG format
- File size: Keep under 500KB for optimal loading
Source code/public/media/
βββ team/ # Team member photos
βββ projects/ # Project screenshots/logos
βββ events/ # Event banners
βββ logos/ # Organization logos
βββ sponsors/ # Sponsor logos
βββ alumni/ # Alumni photos
- Save image in appropriate folder
- Reference in data file with
/media/folder/filename.jpg - Test locally to ensure image loads
- Commit and push changes
cd "Source code"
bun run dev- Edit the appropriate data file
- Add/update images if needed
- Test changes in browser
git add .
git commit -m "Update team member: John Doe"
git push- Check GitHub Actions workflow completes
- Visit open-hardware-initiative.com
- Verify changes are live
- Keep descriptions concise - 1-2 sentences max
- Use consistent formatting - Follow existing patterns
- Optimize images - Compress before uploading
- Test responsiveness - Check on mobile devices
- Maintain consistent field names - Don't change existing structure
- Use arrays for multiple values - Skills, technologies, team members
- Keep URLs valid - Test all links before deploying
- Use proper date formats - YYYY-MM-DD for events
- Commit frequently - Small, focused commits
- Use descriptive commit messages - "Add team member: John Doe"
- Test before pushing - Always test locally first
- Review changes - Check the live site after deployment
- Check file path is correct
- Ensure image exists in public folder
- Verify file permissions
- Check TypeScript syntax in data files
- Ensure all required fields are present
- Run
bun run lintto find errors
- Clear browser cache
- Check GitHub Actions workflow status
- Verify changes were pushed to main branch
- Quick Start Guide - Getting started
- Development Guide - Technical setup
- Deployment Guide - How deployment works