A web application for Tempe Bicycle Action Group's Open Streets Tempe.
- Remix - Full stack web framework
- React - UI library
- Tailwind CSS - Styling
- TypeScript - Type safety
- Firebase Hosting - Deployment
- Node.js >= 20.0.0
- npm
- Clone the repository
- Install dependencies:
npm install
Run the development server with:
npm run dev
This will start:
- Remix development server
- SVG icon watch process for automatic icon component generation
npm run icons
- Generate SVG icon componentsnpm run lint
- Run ESLintnpm run typecheck
- Run TypeScript type checkingnpm run optimize-images
- Optimize image assets
The project includes a comprehensive image optimization system that generates responsive images for different viewport sizes.
- Place original images in
public/images/originals/
- Run the optimization script:
npm run optimize-images
- Optimized images will be placed in
public/images/
The script will:
- Generate multiple sizes (640w, 768w, 1024w, 1920w, 2560w) for photos
- Convert images to WebP format while maintaining JPG fallbacks
- Use higher quality settings for mobile (640w) versions
- Automatically handle PNGs differently (single size, optimized for logos)
The ResponsiveImage
component automatically handles responsive image loading using the multiple sizes generated by the script:
<ResponsiveImage basePath="/images/my-image" alt="Description" />
For critical above-the-fold images, you can:
- Set
priority
on the component - Use the
generatePreloadLinks
utility to add preload tags in your route
- Build the application:
npm run build
- Start the production server:
npm start
The application is automatically deployed on pushes to the main
branch through GitHub Actions:
- Builds and pushes a Docker image to Google Container Registry
- Deploys to Google Cloud Run
- Deploys static assets and redirects to Firebase Hosting
The site is accessible at: openstreetstempe.org
- Ensure your code passes all checks:
- TypeScript compilation (
npm run typecheck
) - Linting (
npm run lint
)
- TypeScript compilation (
- Submit a pull request