Directory of queer/trans groups, venues and spaces in Omaha.
- *nix
- Bun as drop-in Node interpreter replacement, package manager and test runner
- (optional) volta for node ver wrangling
- (optional) Netlify CLI for managing live deployments
- Astro for static site generation and light SSE
- Biome for lint
- Playwright for mobile and desktop browser testing
- vitest for unit tests
# install JS deps
bun install --development
(optional) To run e2e tests
bunx playwright install --with-deps
# start local astro server w/ HMR at localhost:4321
bun run dev
The Netlify GitHub app is installed for this repo, which creates a "preview deployment" on (non-draft) Pull Requests.
Merges to main (protected branch) will deploy the production site.
# install netlify CLI globally
bun install -g netlify-cli
# authenticate
netlify login
# link repo with Netlify project
netlify link
# create a test deployment
netlify deploy
# after validation, deploy production
netlify deploy --production
Pull Requests must pass lint and include relevant unit/end-to-end tests.
Accessibility for motion-sensitivity, color, fonts, reduced scrolling, tapping affordances, "go to top" are table stakes.
This project uses Husky hooks which you can install locally to automatically lint and test on pre-commit and pre-push.
bunx husky init
You can run lint (via biome) manually
bun run lint # check formatting
bun run format # auto-fix formatting
You must add/update unit tests for code changes.
End-to-end tests are strongly recommended for commits that touch the frontend.
bun run test:unit # vitest
bun run test:e2e # Playwright mobile/ desktop browsers
bun run test:e2e:a11y # Accessibility via axe
bun run test:lighthouse # Lighthouse audit (SEO, perf)
This project follows Conventional Commits for all new commits.
<type>[optional scope]: <short description>
[optional body]
[optional footer(s)]
Common types used here:
| Type | When to use |
|---|---|
feat |
New feature or content addition |
fix |
Bug fix |
chore |
Maintenance, deps, config (no production change) |
docs |
Documentation only |
refactor |
Code restructure, no behavior change |
style |
Formatting, whitespace |
test |
Adding or updating tests |
perf |
Performance improvement |
ci |
CI/CD config |
revert |
Reverting a previous commit |
Examples:
feat(ical): add end_time support to recurring events
fix: correct slug collision on renamed items
chore(deps): bump astro to 5.x
docs: document git-cliff setup in README
The commit-msg Husky hook runs commitlint against every commit. It is advisory only — it prints a friendly hint but never blocks a commit. History before this convention was adopted is left as-is.
bun run commit runs opencommit (bunx oco) to draft a Conventional Commit message from the staged diff. One-time setup:
bunx oco config set OCO_AI_PROVIDER=<provider> OCO_API_KEY=<key>The changelog is generated from git history by git-cliff, configured in cliff.toml. Commits that don't parse as Conventional Commits are silently excluded.
Install git-cliff (standalone binary, not an npm package):
brew install git-cliffRegenerate CHANGELOG.md from the full git history:
bun run changelogPreview unreleased entries (commits since the last tag, no file write):
bun run changelog:unreleasedHow cliff.toml works:
conventional_commits = true— parses the standardtype(scope): messageformatfilter_unconventional = true— silently drops non-conventional commits instead of erroringcommit_parsers— maps types to emoji-prefixed groups (Features, Bug Fixes, etc.) and sets sort order via<!-- N -->prefixescommit_preprocessors— rewrites(#123)issue references into GitHub linkspostprocessors— replaces the<REPO>placeholder with the actual GitHub URLtopo_order_commits = true— orders commits topologically within each release
bun run check:links parses the built dist/ HTML and markdown for external
links, tests them against the live web, and reports failures. It runs in CI on
every PR and weekly via the Check Links workflow.
Run it locally:
bun run build && bun run check:links