Open-source directory of startup credits, discounts, and eligibility requirements.
The goal is simple: help founders find real perks in one clean place, then let the community keep the list current through pull requests.
- Astro (latest)
- Bun
- Astro Content Collections with schema validation
bun install
bun run devOpen http://localhost:4321.
Optional environment variables:
PUBLIC_REPO_URL=https://github.com/your-org/startupperks
PUBLIC_REPO_BRANCH=main
PUBLIC_SUBMISSION_API_URL=https://startup-perks-submit-api.<your-subdomain>.workers.dev/api/submit-perk
PUBLIC_SITE_URL=https://startup-perks.comThe repo currently defaults to https://github.com/jnd0/startup-perks and main if these are not set. Set these vars only if you want to override those defaults.
If PUBLIC_SUBMISSION_API_URL is set, the submit form creates a PR automatically via the Worker API, so contributors do not need GitHub accounts.
PUBLIC_SITE_URL controls canonical URLs and sitemap domain during build.
- Cloudflare Dashboard -> Workers & Pages -> Create -> Pages -> Connect to Git.
- Select this repository and the default branch.
- Configure build settings:
- Build command:
bun run build - Build output directory:
dist - Root directory: repository root
- Build command:
- Set environment variables for Preview and Production:
PUBLIC_REPO_URL=https://github.com/your-org/startupperksPUBLIC_REPO_BRANCH=mainPUBLIC_SITE_URL=https://startup-perks.com
- Save and deploy.
bun add -D wrangler
bunx wrangler login
bun run build
bunx wrangler pages deploy dist --project-name startupperksIf you want to publish as a Worker with static assets instead of Pages, this repo includes wrangler.jsonc.
bun run build
bunx wrangler deployNotes:
- This project is static Astro output (
dist/), so no Cloudflare adapter is required. - Bun is only needed at build time. If your Pages image does not support Bun, use
npm run buildas fallback. - Cloudflare Workers with static assets do not support runtime Worker variables; use build-time envs or rely on the repository defaults in this codebase.
- SEO assets are generated at build time:
dist/sitemap-index.xmlandpublic/robots.txt.
The repository includes a separate Worker API at workers/submit-api/ for automatic PR creation.
Deploy it with:
bunx wrangler secret put GITHUB_TOKEN --config workers/submit-api/wrangler.toml
bunx wrangler deploy --config workers/submit-api/wrangler.tomlThen set PUBLIC_SUBMISSION_API_URL in your frontend deployment to:
https://startup-perks-submit-api.<your-subdomain>.workers.dev/api/submit-perk
/
├── src/
│ ├── content/perks/ # One markdown file per perk
│ ├── components/ # UI components
│ ├── layouts/ # Shared layout and metadata
│ └── pages/ # Astro routes
├── CONTRIBUTING.md
└── .github/
├── workflows/validate.yml
└── PULL_REQUEST_TEMPLATE.md
- Create a new file in
src/content/perks/. - Use kebab-case filename, for example:
cloudflare-startups.md. - Fill required frontmatter fields (
company,title,eligibility,applyUrl,sourceUrl, etc). - Run the checks locally:
bun run check- Open a pull request.
For full details, see CONTRIBUTING.md.
You can also use the homepage Submit perk form to generate a valid perk file and open GitHub with prefilled content.
- Perk values and eligibility frequently change.
- Every entry should include an official source URL.
- If data is uncertain, mark it clearly in the summary/body and avoid overconfident claims.
- README, CONTRIBUTING, and AGENTS docs are accurate.
.gitignorecovers local/build/deploy artifacts.bun run checkpasses.- License is added before publishing (recommended: Apache-2.0 for code and CC BY 4.0 for content).
- Code in this repository is licensed under
Apache-2.0(seeLICENSE). - Perk/content data in
src/content/perks/is licensed underCC BY 4.0(seeLICENSE-CONTENT).