A platform connecting open source maintainers with supporters and practitioners who can help with project needs. Built with Astro, Tailwind CSS, and React.
- Node.js (v18+ recommended)
- npm
- Git
- GitHub account (for API access)
-
Clone the repository
git clone https://github.com/oss-wish-list/oss-wishlist-website.git cd oss-wishlist-website -
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env
Edit the
.envfile and add your configuration:# Site Mode - Controls which homepage to display # Set to 'placeholder' for "Coming Soon" page # Set to 'full' for complete website PUBLIC_SITE_MODE=full # Required: GitHub Personal Access Token (only needed for full mode) # Create one at: https://github.com/settings/tokens/new # Needs 'repo' scope for creating issues GITHUB_TOKEN=your_github_token_here # GitHub OAuth (optional - only needed for user authentication) GITHUB_CLIENT_ID=your_client_id GITHUB_CLIENT_SECRET=your_client_secret GITHUB_REDIRECT_URI=http://localhost:4323/oss-wishlist-website/auth/callback # Email settings (optional) EMAIL_FROM=[email protected] EMAIL_TO=[email protected] # Environment NODE_ENV=development PUBLIC_SITE_URL=http://localhost:4323/oss-wishlist-website BASE_URL=http://localhost:4323/oss-wishlist-website
π Switching Between Placeholder and Full Site:
- Placeholder mode: Set
PUBLIC_SITE_MODE=placeholderin.env - Full site mode: Set
PUBLIC_SITE_MODE=fullin.env - After changing, restart the dev server (
Ctrl+Cthennpm run dev)
π Creating a GitHub Token:
- Go to GitHub Settings > Personal access tokens
- Click "Generate new token (classic)"
- Give it a name like "OSS Wishlist Dev"
- Select scopes:
repo(for creating issues) - Copy the token and paste it in your
.envfile
- Placeholder mode: Set
-
Start development server
npm run dev
The server will run on port 4324 by default and display the URLs:
Local: http://localhost:4324/ Network: http://192.168.1.x:4324/Note: Port 4324 is configured in
astro.config.mjsfor local development only. Production deployments use environment variables. -
You're ready! Open the Local URL in your browser.
If you just want to see the site without GitHub integration:
git clone https://github.com/oss-wish-list/oss-wishlist-website.git
cd oss-wishlist-website
npm install
npm run devThe site will work for browsing, but wishlist creation will be disabled without a GitHub token.
The site includes a "Coming Soon" placeholder page for pre-launch use:
-
Enable placeholder mode:
- Create or edit
.envfile - Set
PUBLIC_SITE_MODE=placeholder - Restart dev server
- Create or edit
-
Return to full site:
- Change to
PUBLIC_SITE_MODE=fullin.env - Restart dev server
- Change to
The placeholder page displays:
- Project logo
- "Coming November 2025" message
- Brief description for maintainers, practitioners, and sponsors
- GitHub link in footer
- For Maintainers: Create wishlists describing what help your project needs
- For Practitioners: Browse projects that need your expertise
- For Ecosystem Sponsors: Support critical open source infrastructure
- Service Catalog: Browse available services and expertise areas
- Astro (v5.x) - SSR with Node adapter
- Tailwind CSS (v3.x) - Styling
- React + TypeScript - Interactive components
- GitHub OAuth - Authentication
- PostgreSQL - Database for wishlists, practitioners, and fulfillments
- Markdown - Content collections for services, FAQ, and documentation
Playbooks are maintained in an external repository and included here as a Git submodule.
- Location in this repo:
src/content/playbooks-external/ - Source repo: https://github.com/oss-wishlist/wishlist-playbooks
- We donβt duplicate playbooks into a local content folder; the submodule is the single source of truth
git submodule init
git submodule updateIn a service frontmatter (e.g., src/content/services/funding-strategy.md), link to the playbook folder name:
---
title: Funding Strategy
playbook: funding-strategy # or use `playbooks: ["a", "b"]` for multiple
---This maps to src/content/playbooks-external/funding-strategy/playbook.md.
Playbooks live in the external repo. To add or improve one:
- Open the source repo: https://github.com/oss-wishlist/wishlist-playbooks
- Add a new folder (kebab-case) and a
playbook.mdinside - Submit a PR to that repo
Note: Manual edits to submodule files should be done in the source repo via PR; changes made locally in the submodule will be overwritten on update.
src/
βββ pages/ # Website pages (file-based routing)
β βββ index.astro # Homepage
β βββ create-wishlist.astro # Create wishlists
β βββ fulfill.astro # Fulfill wishlists (sponsors)
β βββ api/ # API endpoints
βββ content/ # Static content (markdown)
β βββ services/ # Service definitions
β βββ faq/ # FAQ entries
β βββ guardians/ # Sponsor organizations
β βββ playbooks-external/ # Git submodule
βββ components/ # Reusable UI components
βββ lib/ # Utilities and database functions
βββ db.ts # Database queries
βββ github.ts # GitHub API integration
- Wishlists: Created by maintainers via
/create-wishlistform - Practitioners: Added via
/practitioner-submissionform - Fulfillments: Created when sponsors commit to fund services
Content collections in src/content/ (markdown files):
- Services: Add/edit in
src/content/services/ - FAQ: Add/edit in
src/content/faq/ - Guardians: Add/edit in
src/content/guardians/ - Playbooks: External git submodule (see Playbooks section above)
npm run build # Build for production
npm run preview # Preview built site locallyPort already in use? The dev server will automatically try different ports (4323, 4324, 4325, etc.)
Changes not showing? The dev server auto-reloads, but try refreshing your browser.
Content not loading? Check the markdown frontmatter matches the schema in src/content/config.ts
For staging deployments, prevent search engine indexing by adding to your .env:
DISABLE_INDEXING=trueThis will:
- Add
X-Robots-Tag: noindex, nofollowheaders to all pages - Generate a
robots.txtthat disallows all crawlers - Prevent search engines from indexing your staging site
For production: Omit DISABLE_INDEXING or set it to false in your .env
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build- Homepage:
/- Main landing page - Create Wishlist:
/create-wishlist- Maintainers create wishlists - Fulfill Wishlist:
/fulfill- Sponsors commit funding - Browse Wishlists:
/wishlists- View all approved wishlists - Admin Panel:
/admin- Manage wishlists and practitioners - FAQ:
/faq- Frequently asked questions
---
# Frontmatter (metadata)
title: "Service Name"
description: "Brief description"
available: true
---
# Content goes here in markdown
This service provides...Production platform connecting open source maintainers with practitioners and ecosystem sponsors. Uses PostgreSQL for dynamic content and markdown for static content.
Portions of this codebase were developed with assistance from AI tools, specifically GitHub Copilot with Claude Sonnet 4.5. All AI-generated code has been reviewed, tested, and modified to meet project standards and security requirements.
- Database content: Use web forms (
/create-wishlist,/practitioner-submission) - Static content: Edit markdown files in
src/content/ - Code changes: Edit
.astro,.tsx, or.tsfiles as needed
For questions about setup or deployment, check the git history for configuration details or contact the development team.