Mesa's Community Hackerspace website built with Astro and Bun.
- Astro 4.x: Static site generator with Vue islands for interactivity
- Vue 3: Component framework for interactive parts
- Bun: Runtime and package manager
- TypeScript: Type safety
- date-fns: Date manipulation
├── src/
│ ├── components/ # Reusable components
│ │ ├── base/ # Foundation components
│ │ ├── calendar/ # Calendar components (Vue)
│ │ ├── events/ # Event components (Vue)
│ │ ├── graphics/ # Photo/graphics components (Vue)
│ │ ├── layout/ # Layout components
│ │ ├── sections/ # Page sections
│ │ └── schedule/ # Schedule components (Vue)
│ ├── layouts/ # Page layouts
│ ├── pages/ # Routes (file-based routing)
│ │ └── api/ # Astro API endpoints (serverless functions)
│ ├── services/ # Service classes
│ └── styles/ # Global styles
├── public/ # Static assets
└── dist/ # Build output
- Bun (latest version)
# Install dependencies
bun install
# Start development server
bun run dev
# Build for production
bun run build
# Preview production build
bun run previewCreate a .env file in the root directory:
GOOGLE_API_KEY=your_google_calendar_api_key
CALENDAR_ID=your_google_calendar_idThe site is configured for hybrid deployment:
- Static pages are pre-rendered at build time
- API routes (
/api/calendarand/api/flickr) are deployed as serverless functions via Astro
The project works with Netlify out of the box. Set environment variables in the Netlify dashboard.
Astro supports deployment to:
- Vercel
- Cloudflare Pages
- AWS Amplify
- GitHub Pages (static only)
- Static Generation: Most pages are pre-rendered for fast loading
- Vue Islands: Interactive components (calendar, photos) use Vue islands
- API Routes: Calendar and Flickr APIs are serverless functions
- Markdown Ready: Content pages can be converted to Markdown
- Static Pages: About, Membership, Classes, Support pages are static
- Dynamic Components: Calendar, Photo galleries, and schedule use Vue islands
- API Routes:
/api/calendarand/api/flickrare Astro API routes deployed as serverless functions - Environment Variables: Required for API routes (GOOGLE_API_KEY, CALENDAR_ID)
Content pages like About and Membership can be converted to Markdown by:
- Creating
.mdfiles insrc/content/ - Using Astro's Content Collections
- Rendering Markdown in page templates
See Astro documentation for content collections setup.
Want to help improve the website? Check out CONTRIBUTING.md — it covers everything from fixing a typo to adding new pages, no coding experience required.