A vibrant community platform connecting makers worldwide to share projects, learn new skills, and build lasting friendships through STEM/STEAM innovation.
- π¨ Project Showcase: Browse and share maker projects across multiple categories
- π₯ Maker Directory: Connect with talented makers worldwide
- πΊοΈ Interactive MakerSpaces Map: Discover maker spaces worldwide with Leaflet.js integration
- π MakerSpaces Directory: Searchable directory with filtering and community contributions
- π§ Newsletter System: Email subscriptions with multiple backend integrations
- π Blog System: Tutorials, tips, and maker stories
- π€ Community Features: Forums (coming soon), workshops, and events
- π± Responsive Design: Beautiful UI that works on all devices
- β‘ Static Site: Lightning-fast performance with Astro
- βοΈ Cloudflare Pages Ready: Optimized for Cloudflare Pages deployment
- π§© WebAwesome UI Library: Complete integration of 400+ professional UI components
- πͺ Component Demo Page: Interactive showcase at
/webawesome-demodemonstrating all components - βΏ Accessibility First: All components built with WCAG 2.1 AA compliance
- π TypeScript Support: Full TypeScript definitions for all components
- πͺΆ Lightweight: Minimal bundle size impact with optimized performance
- π¨ Customizable: Easy theming and customization options
- π« Custom 404 Page: Professional error page with helpful navigation
- πΌοΈ Fixed Image URLs: Resolved broken image links across the site
- β CI Status Badge: Real-time GitHub Actions CI status in README
- π Branch Switching Guide: Comprehensive documentation for development workflows
- π SEO Optimization: Automatic sitemap generation with @astrojs/sitemap
- πΌοΈ Image Optimization: @astrojs/image integration for optimized image delivery
- π¦ Compression: Gzip compression for faster loading times
- π Security Headers: Comprehensive security headers for enhanced protection
- βοΈ Environment Configuration: Complete environment variable setup
- π§ ESLint Integration: Complete ESLint setup with Astro support
- π Code Quality Tools: ESLint v9 with flat config format and TypeScript support
- πͺ Pre-commit Hooks: Husky integration for automatic code quality checks
- π¦ Node.js Version Management: Migrated from nvm to nodenv for better performance
- π€ Automated Setup: Enhanced setup.sh script for new contributors
- π» VS Code Integration: Complete editor configuration for ESLint and formatting
- π TypeScript Improvements: Resolved all implicit any types and null checks
- β Complete GDPR Compliance: Full implementation of EU data protection regulations
- πͺ Cookie Consent Management: Granular cookie controls with user preferences
- π Privacy Documentation: Comprehensive privacy policy and GDPR compliance pages
- π€ User Rights Implementation: Access, rectification, erasure, and data portability
- π Consent Tracking: Explicit consent management for all data processing
- π‘οΈ Data Protection by Design: Privacy built into all systems and processes
- πΊοΈ Leaflet.js Integration: Interactive map showing maker spaces worldwide
- π Location Services: Automatic location detection and address search
- π― Smart Zoom Controls: Precise zoom sensitivity for better user experience
- β‘ Tile Preloading: Smooth map interactions with preloaded tiles
- π¨ Color-coded Markers: Different colors for ownership models (Commercial, Non-profit, etc.)
- π Searchable Directory: Filter maker spaces by location, specialties, and ownership
- π₯ Community Contributions: Form for users to add new maker spaces
- π Detailed Information: Contact info, equipment, membership costs, and more
- π¬ Buttondown Integration: Developer-friendly newsletter service
- β GDPR Compliant: Explicit consent checkbox and privacy notices
- π± Responsive Design: Beautiful signup form that works on all devices
- π Consent Tracking: Records consent timestamps and sources
makerfriends.com/
βββ public/
β βββ favicon.svg
β βββ _redirects # Cloudflare Pages redirects
β βββ webawesome/ # WebAwesome UI components
βββ src/
β βββ components/
β β βββ Navigation.astro
β β βββ Footer.astro
β β βββ ProjectCard.astro
β β βββ NewsletterSignup.astro
β β βββ CookieConsent.astro
β βββ layouts/
β β βββ Layout.astro
β βββ pages/
β β βββ index.astro # Home page
β β βββ about.astro # About Us
β β βββ makerspaces.astro # MakerSpaces directory
β β βββ makerspace-map.astro # Interactive map
β β βββ add-makerspace.astro # Add MakerSpace form
β β βββ privacy.astro # Privacy Policy
β β βββ gdpr-compliance.astro # GDPR Compliance
β β βββ history.astro # Our History
β β βββ projects.astro # Projects Gallery
β β βββ makers.astro # Maker Directory
β β βββ contact.astro # Contact Form
β β βββ donate.astro # Donations
β β βββ signup.astro # Sign Up
β β βββ members.astro # Member Benefits
β β βββ forum.astro # Forum (Coming Soon)
β β βββ 404.astro # Custom 404 error page
β β βββ webawesome-demo.astro # WebAwesome components demo
β β βββ blog/
β β βββ index.astro
β β βββ getting-started-arduino.astro
β βββ styles/
β βββ global.css
βββ astro.config.mjs
βββ package.json
βββ tailwind.config.mjs
βββ tsconfig.json
βββ wrangler.toml # Cloudflare config
βββ README.md
Choose one of the following options:
Choose one of the following containerization tools:
- π³ Docker Desktop + Docker Compose
- π Rancher Desktop + Docker Compose
- π§ Podman + Podman Compose
- π Colima + Docker Compose
- β‘ OrbStack + Docker Compose
All tools provide Docker-compatible APIs, so the same commands work across all options.
- π¦ Node.js 22.x (managed by nodenv)
- π§ nodenv for Node.js version management
- π¦ npm package manager
- π Git
- π₯ Clone the repository:
git clone https://github.com/yourusername/makerfriends.com.git
cd makerfriends.com- π Start development environment:
# Using Docker Compose (works with all Docker alternatives)
docker-compose up
# Or use the helper script
./docker-dev.sh start
# For Podman users
podman-compose up- π Open your browser and navigate to
http://localhost:4321
- π₯ Clone the repository:
git clone https://github.com/yourusername/makerfriends.com.git
cd makerfriends.com- β‘ Quick Setup (Recommended):
# Run the automated setup script
./setup.shThis script will:
- β Check for nodenv installation
- β Install the correct Node.js version
- β Install all dependencies
- β Set up Husky pre-commit hooks
- π§ Manual Setup (Alternative):
# Install nodenv (if not already installed)
brew install nodenv
mkdir -p "$(nodenv root)/plugins"
git clone https://github.com/nodenv/node-build.git "$(nodenv root)/plugins/node-build"
# Configure your shell (add to ~/.bash_profile or ~/.bashrc)
export PATH="$HOME/.nodenv/bin:$PATH"
eval "$(nodenv init -)"
# Install Node.js version
nodenv install 22.20.0
nodenv local 22.20.0
# Install dependencies
npm install- π Start the development server:
npm run dev- π Open your browser and navigate to
http://localhost:4321
# Start development environment
./docker-dev.sh start
# View logs
./docker-dev.sh logs
# Run commands in container
./docker-dev.sh run npm install
./docker-dev.sh run npm run build
# Access container shell
./docker-dev.sh shell
# Stop development environment
./docker-dev.sh stop
# Rebuild containers
./docker-dev.sh rebuild# Install Rancher Desktop from https://rancherdesktop.io/
# Enable Docker API compatibility in settings
# Then use standard docker-compose commands
docker-compose up# Install Podman and podman-compose
# macOS: brew install podman podman-compose
# Linux: dnf install podman podman-compose
# Then use podman-compose commands
podman-compose up# Install Colima
brew install colima
# Start Colima with Docker API
colima start --with-kubernetes=false
# Use standard docker-compose commands
docker-compose up# Install OrbStack from https://orbstack.dev/
# Provides Docker-compatible API
# Use standard docker-compose commands
docker-compose up# π Development
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run astro # Run Astro CLI commands
# π§ Code Quality
npm run lint # Run ESLint
npm run lint:fix # Auto-fix ESLint issues
npm run lint:strict # Run ESLint with zero warnings allowed
npm run format # Format code with Prettier
npm run format:check # Check code formatting
npm run type-check # Run TypeScript type checking
# π§Ή Utilities
npm run clean # Clean build artifacts and cache
# π Deployment
npm run deploy:local # Deploy to Cloudflare Pages locally
npm run deploy:preview # Deploy to preview environment
# βοΈ Setup
npm run setup # Set up Node version and install dependenciesThis project includes comprehensive code quality tools:
- π ESLint: Linting for JavaScript, TypeScript, and Astro files
- π¨ Prettier: Code formatting with Astro support
- πͺ Husky: Pre-commit hooks for code quality
- π¦ nodenv: Node.js version management
- π» VS Code: Optimized editor configuration
- π TypeScript: Full type checking and strict mode
- π Security Headers: Comprehensive HTTP security headers
- πΌοΈ Image Optimization: Automatic image optimization and compression
- π SEO Tools: Automatic sitemap generation
- π Run dev server: Start the development server with hot-reload
- βοΈ Make changes: Edit files in
src/directory - π Code quality: ESLint and Prettier will automatically check your code
- πͺ Pre-commit hooks: Husky runs ESLint and Prettier before allowing commits
- π See updates: Changes are reflected immediately in the browser
- ποΈ Build: Run
npm run buildto create production build
- π Create a new
.astrofile insrc/pages/:
---
import Layout from "../layouts/Layout.astro";
import Navigation from "../components/Navigation.astro";
import Footer from "../components/Footer.astro";
---
<Layout title="Page Title">
<Navigation />
<main class="flex-1">
<!-- Your content here -->
</main>
<Footer />
</Layout>- π The page will be automatically available at
/page-name
- π Create a new
.astrofile insrc/pages/blog/:
---
import Layout from "../../layouts/Layout.astro";
// ... imports
---
<Layout title="Your Blog Post Title">
<!-- Blog content -->
</Layout>- π Update
src/pages/blog/index.astroto include your new post in the list
The project uses Tailwind CSS v4 for styling with custom configurations:
- Primary:
#3B82F6(Blue) - Secondary:
#F59E0B(Amber) - Accent:
#10B981(Green) - Purple:
#8B5CF6 - Pink:
#EC4899
.animate-float: Floating animation for elements- Custom scrollbar styling
- Edit
src/styles/global.cssfor global styles - Use Tailwind classes directly in components
- Add custom CSS in the
@layerdirective
- Build the project:
npm run build- Push to Git:
git add .
git commit -m "Ready for deployment"
git push origin main-
Connect to Cloudflare Pages:
- Go to Cloudflare Dashboard
- Navigate to Pages
- Click "Create a project"
- Connect your Git repository
- Configure build settings:
- Build command:
npm run build - Build output directory:
dist - Node version:
22
- Build command:
-
Deploy: Cloudflare will automatically build and deploy your site
- Install Wrangler:
npm install -g wrangler- Login to Cloudflare:
wrangler login- Build and Deploy:
npm run build
wrangler pages deploy distAdd environment variables in Cloudflare Pages:
- Go to your Pages project settings
- Navigate to "Environment variables"
- Add your variables for production/preview
- Go to your Pages project settings
- Navigate to "Custom domains"
- Add your domain (e.g.,
makerfriends.com) - Update DNS records as instructed
- Home Page: Edit
src/pages/index.astro - About/History: Edit respective files in
src/pages/ - Projects: Update project data in
src/pages/projects.astro - Makers: Update maker profiles in
src/pages/makers.astro
- Place images in
public/directory - Reference them with
/image-name.jpg - For external images, use full URLs (as currently done with Unsplash)
The site includes a gradient placeholder for the logo. To add your logo:
- Add logo file to
public/(e.g.,logo.svgorlogo.png) - Update
Navigation.astro:
<img src="/logo.svg" alt="MakerFriends" class="w-12 h-12" /># Check current version
npm list astro
# Upgrade to latest version
npm install astro@latest
# Update types if needed
npm install @astrojs/ts-plugin@latest# Upgrade Tailwind
npm install tailwindcss@latest @tailwindcss/vite@latest
# Check for breaking changes in release notes# Check for outdated packages
npm outdated
# Update all to latest (use with caution)
npm update
# Or use npm-check-updates
npx npm-check-updates -u
npm install- Tailwind CSS v4: Modern utility-first CSS framework
- WebAwesome UI Components: 400+ professional UI components with full accessibility support
The project now includes a complete UI component library with:
- Form Components: Input, textarea, select, checkbox, radio, button, etc.
- Layout Components: Card, dialog, drawer, popup, dropdown, etc.
- Interactive Components: Progress bars, spinners, sliders, tabs, etc.
- Utility Components: Icons, date formatting, QR codes, etc.
<!-- Example usage in an Astro component -->
<webawesome-button variant="primary" onclick="alert('Hello!')">
Click Me
</webawesome-button>
<webawesome-input placeholder="Your Name"></webawesome-input>
<webawesome-card>
<h3 slot="header">Card Title</h3>
<p>Card content goes here</p>
<div slot="footer">
<webawesome-button variant="secondary">Action</webawesome-button>
</div>
</webawesome-card>Visit /webawesome-demo to see all components in action with interactive examples.
Astro supports many integrations. To add one:
# Example: Adding React
npx astro add react
# Example: Adding Sitemap
npx astro add sitemap- All navigation links work
- Forms submit correctly
- Responsive design on mobile/tablet/desktop
- Images load properly
- No console errors
- SEO meta tags present
- Use Lighthouse in Chrome DevTools
- Run
npm run buildand check bundle size - Test on slow network connections
- Meta descriptions on all pages
- Open Graph tags for social sharing
- Semantic HTML structure
- Fast loading times (static site)
To add Google Analytics or other tracking:
- Add tracking script to
src/layouts/Layout.astro - Add to the
<head>section:
<script
async
src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "GA_MEASUREMENT_ID");
</script>Issue: Build fails with "Cannot find module"
- Solution: Run
npm installto ensure all dependencies are installed
Issue: Styles not updating
- Solution: Clear browser cache or restart dev server
Issue: Tailwind classes not working
- Solution: Ensure
global.cssis imported inLayout.astro
Issue: Images not loading in production
- Solution: Check image paths start with
/for public directory
- Astro Documentation
- Tailwind CSS Documentation
- Cloudflare Pages Documentation
- MakerFriends Community Forum (coming soon!)
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code style
- Write descriptive commit messages
- Test your changes thoroughly
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Astro
- Styled with Tailwind CSS
- Icons from Heroicons and emoji
- Images from Unsplash
- Hosted on Cloudflare Pages
- Email: support@makerfriends.com
- Website: makerfriends.com
- Twitter: @makerfriends
Made with β€οΈ by the MakerFriends Team
Happy Making! π