The official website for HackRegina - Regina's tech community hub.
- Framework: Next.js 16 (Pages Router)
- Styling: Tailwind CSS with custom brand colors
- State Management: React Query v5
- Code Quality: Biome (linter + formatter)
- UI Components: shadcn/ui with Radix UI primitives
- Icons: Lucide React
- Visualizations: @visx/hierarchy for member bubble chart
- Maps: Mapbox GL (for tech map)
- Node.js 18+ or 22+
- Bun 1.0+ (alternative to npm/yarn)
- npm, yarn, or pnpm
- Clone the repository:
git clone https://github.com/HackRegina/website.git
cd website- Install dependencies:
bun install --legacy-peer-deps- Set up environment variables:
cp .env.local.example .env.localEdit .env.local and add your API tokens:
MAPBOX_ACCESS_TOKEN- For the tech map featureSLACK_BOT_TOKEN- For fetching community membersEVENTBRITE_PRIVATE_TOKEN- For fetching events
- Run the development server:
bun run devOpen http://localhost:3000 in your browser.
bun run dev- Start development serverbun run build- Build for productionbun run start- Start production serverbun run format- Format code with Biomebun run lint- Lint code with Biome
├── components/ # React components
│ ├── ErrorBoundary.tsx
│ ├── Footer/
│ ├── Members/ # Community members bubble chart
│ ├── Navbar/
│ ├── SkeletonLoader.tsx
│ └── ui/ # shadcn/ui components
├── contexts/ # React contexts
│ └── ThemeContext.tsx # Dark mode management
├── data/ # Static data files
│ └── organizations.json
├── fetch/ # API fetch functions
├── hooks/ # React Query hooks
├── interfaces/ # TypeScript interfaces
├── pages/ # Next.js pages
│ ├── _app.tsx
│ ├── _document.tsx
│ └── index.tsx # Homepage
├── public/ # Static assets
│ ├── images/
│ └── videos/
├── styles/ # Global styles
│ └── globals.css
└── utils/ # Utility functions
- Hero Section: Video showcase with call-to-action
- Benefits: Three-column grid highlighting events, connections, and community
- Partners: Display of community partners with logos
- Sponsors: Tiered sponsor display (Champion, Promotor, Supporter, Fan)
- Community Visualization: Interactive bubble chart showing Slack members
- System preference detection
- Manual toggle in navigation
- Persistent user preference via localStorage
- Default: Dark mode
- Mobile-first approach
- Hamburger menu for mobile navigation
- Adaptive layouts for all screen sizes
brand-red-700: #77232b (primary CTAs)brand-red-300: #fca5a5 (accents in light mode)- Full scale: 50, 100, 300, 500, 700, 900
brand-blue-700: #1a365d- Full scale: 50, 100, 300, 500, 700, 900
The following API routes need to be implemented:
/api/events- Fetch events from Eventbrite/api/members- Fetch community members from Slack/api/website- Fetch website metadata
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Format your code (
bun run lint:fix) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the ISC License.
- Slack: Join HackRegina on Slack
- GitHub: HackRegina
- Twitter: @HackRegina
- Facebook: HackRegina
- LinkedIn: HackRegina
Special thanks to all our partners and sponsors who make HackRegina possible!