A modern web application for managing The Great Holyoke Brick Race - where performance art meets sport in the first brick race of its kind. This comprehensive platform supports race management, participant registration, photo galleries, awards tracking, and community engagement.
The Great Holyoke Brick Race is a unique gravity-powered vehicle racing event that combines creativity, engineering, and artistic expression. Started by local artists in 2010, it has become the first brick race of its kind in the country, celebrating both speed and artistry in custom-built racing vehicles.
This application provides a complete digital platform for the racing community, from registration and race management to photo sharing and awards ceremonies.
- Race Information: Current and historical race details with live countdown timers
- Photo Galleries: Community-submitted photos with moderation and featured image system
- Racer Profiles: Showcase of creative vehicles and their builders
- Awards System: Public display of race results and award winners
- Real-time Updates: Live countdown timers and race day information
- Responsive Design: Optimized for desktop, tablet, and mobile devices
- Race Management: Create and manage racing events with detailed configuration
- Photo Moderation: Review, approve, and feature user-submitted photos
- Awards Management: Create award categories and assign winners
- User Management: Handle participant accounts and permissions
- Dashboard: Comprehensive admin interface with statistics and quick actions
- Account Registration: Secure user authentication with role-based access
- Racer Registration: Submit vehicle entries for upcoming races
- Photo Uploads: Share photos from races and community events
- Profile Management: Track personal racing history and achievements
- Nuxt 3 - Vue.js framework with server-side rendering
- PrimeVue - Comprehensive Vue.js component library
- Tailwind CSS - Utility-first CSS framework for rapid styling
- Pinia - Vue.js state management
- Supabase - Backend-as-a-service with PostgreSQL database
- PrimeIcons - Icon library for consistent UI elements
- Supabase - PostgreSQL database with real-time capabilities
- Supabase Auth - User authentication and authorization
- Supabase Storage - File uploads and media management
- Row Level Security - Database-level security policies
- Righteous - Bold display font for headers and branding
- Inter - Clean body font for readability
- Brand Color Scheme - Red-orange gradient reflecting the brick race theme
- DIY/Maker Aesthetic - Clean, industrial design elements
- Primary Red:
#dc2626(red-600) - Main brand color, primary buttons - Primary Orange:
#ea580c(orange-600) - Secondary brand color, accent elements - Gradient Background:
from-red-50 via-orange-50 to-yellow-50- Light mode page backgrounds - Dark Gradient:
from-gray-900 via-gray-800 to-gray-900- Dark mode page backgrounds
- Brick Red:
#b91c1c(red-700) - Darker brand accents - Orange Accent:
#fb923c(orange-400) - Hover states, highlights - Yellow Accent:
#fbbf24(yellow-400) - Completion states, success indicators
- Dark Green:
#166534(green-800) - Call-to-action elements, special features - Success Green:
#16a34a(green-600) - Success states, positive actions - Info Blue:
#2563eb(blue-600) - Information, neutral actions
- Text Dark:
#111827(gray-900) - Primary text in light mode - Text Light:
#ffffff(white) - Primary text in dark mode - Text Muted:
#6b7280(gray-500) - Secondary text - Border:
#d1d5db(gray-300) - Light borders and dividers
- Page Backgrounds: Always use the brand gradient (
from-red-50 via-orange-50 to-yellow-50) - Card Backgrounds: White/gray-800 for contrast against gradient
- Hero Sections: Can use solid red gradients for special emphasis
- Primary Actions:
.btn-brickclass (red-orange gradient) - Secondary Actions:
.btn-brick-secondaryclass (yellow brick style) - Tertiary Actions: Dark green for special CTAs (homepage)
- Neutral Actions: Standard PrimeVue button styles
- Links: Blue-600 for information, red-600 for brand-related
- Hover States: Darker versions of base colors
- Active States: Even darker versions with pressed effects
- Success: Green variants
- Warning: Yellow/orange variants
- Error: Red variants (but not brand red to avoid confusion)
- Info: Blue variants
- Display Font:
'Righteous', sans-serif- Headers, titles, branding - Body Font:
'Inter', sans-serif- All body text, UI elements
- Righteous: 400 (only weight available)
- Inter: 300, 400, 500, 600, 700 (use 400 for body, 600+ for emphasis)
- Use white/gray-800 backgrounds for contrast
- Subtle shadows for depth
- Brand-colored borders for emphasis
- Transparent breadcrumbs using pass-through API
- Brand gradient backgrounds throughout
- Consistent with PrimeVue theme
- Brand-colored focus states
- Error states use non-brand red to avoid confusion
brickrace/
├── frontend/ # Nuxt 3 Vue.js application
│ ├── assets/ # Static assets (CSS, images)
│ ├── components/ # Reusable Vue components
│ ├── composables/ # Vue composables for shared logic
│ ├── layouts/ # Application layouts
│ ├── middleware/ # Route middleware (auth, admin)
│ ├── pages/ # File-based routing pages
│ ├── plugins/ # Nuxt plugins
│ ├── stores/ # Pinia state stores
│ └── types/ # TypeScript type definitions
└── README.md # This file
- Node.js 18+
- npm or pnpm package manager
- Supabase account for database hosting
-
Clone the repository
git clone <repository-url> cd brickrace
-
Frontend Setup
cd frontend npm install -
Environment Configuration Create
.envfile in the frontend directory:SUPABASE_URL=your_supabase_url SUPABASE_ANON_KEY=your_supabase_anon_key
-
Start Development Server
npm run dev
The application will be available at
http://localhost:3000
The application uses Supabase PostgreSQL with the following core tables:
races- Racing events and configurationracers- Participant vehicles and registration datacheckins- Race day attendance trackingawards- Award categories and definitionsaward_winners- Award assignments to participantsgeneral_photos- Community photo uploads with moderationusers- Authentication and user profile data
- Row Level Security (RLS) for data protection
- Featured photo system for hero backgrounds
- Admin role hierarchy (User → Race Admin → Admin)
- Photo moderation workflow with approval status
- Real-time subscriptions for live updates
npm run dev # Start development server
npm run build # Build for production
npm run generate # Generate static site
npm run preview # Preview production build
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint issues automatically
npm run format # Format code with Prettier
npm run format:check # Check code formatting- ESLint with Nuxt 3 configuration
- Prettier for consistent formatting
- Vue ESLint for Vue.js specific rules
- TypeScript support for type safety
- Run code quality tools before committing:
npm run lint:fix && npm run format - Test functionality across different screen sizes
- Verify authentication and authorization flows
- Check error handling and edge cases
- Environment variables configured
- Database migrations applied
- Static assets optimized
- Error tracking configured
- Performance monitoring enabled
- SSL certificates installed
- CDN configured for media files
npm run build # Production build
npm run generate # Static site generation-
User - Basic participants
- Register vehicles for races
- Upload photos (requires approval)
- View public content
-
Race Admin - Event organizers
- All User permissions
- Create and manage races
- Approve photos and moderate content
- Assign awards and manage results
-
Admin - System administrators
- All Race Admin permissions
- Manage user accounts and permissions
- Access system configuration
- View comprehensive analytics
- Founded: 2010 by local artists
- Location: Holyoke, Massachusetts
- Frequency: Annual racing events
- Categories: Speed, Creativity, Artistry, and more
- Community: Artists, engineers, tinkerers, and dreamers of all ages
- Gravity-powered vehicles built by participants
- Creative expression combined with engineering
- Awards ceremonies celebrating both speed and artistry
- Community gathering fostering maker spirit
- Photo documentation preserving racing history
We welcome contributions from the racing community and developers!
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes with proper testing
- Run code quality tools:
npm run lint:fix && npm run format - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow the established code style and patterns
- Add tests for new functionality
- Update documentation as needed
- Ensure responsive design compatibility
- Test across different browsers and devices
- Frontend Documentation - Detailed technical documentation
- Development Guide - Development practices and standards
- Nuxt 3 Documentation
- Supabase Documentation
- PrimeVue Components
- Review existing documentation
- Check GitHub issues for similar problems
- Create detailed issue reports with reproduction steps
- Join community discussions
This project is part of The Great Holyoke Brick Race community event. Built with ❤️ for the creative racing community.
Ready to race? Join the creative chaos and build your own gravity-powered masterpiece! 🏎️✨