A static Next.js application for discovering technology opportunities published in GitHub community repositories.
openings.dev is the front-end for a global jobs index built from public GitHub issue data. The application is exported as static pages and reads its runtime dataset from raw JSON files published by the separate openings-dev/data repository.
The front-end does not keep local job data, mocks, fixtures, or JSON snapshots. All opportunity, facet, repository, community, user, and job-detail data is loaded through remote raw URLs.
app/
_components/ shared route-level components
_hooks/ route-level React hooks
community/ community directory and repository routes
docs/ rendered project documentation pages
jobs/ static job detail routes
opportunities/ opportunities screen and feature UI
users/ author directory and profile routes
components/
footer/ global footer components
header/ global header components
icons/ shared icon components
providers/ app providers
ui/ low-level UI primitives
lib/
constants/ locale constants
content/ markdown document loading
opportunities/ remote data services, routing helpers, and domain types
translations/ UI copy by locale
utils/ framework-agnostic utilities
docs/
*/ localized markdown rendered by the appKey boundaries:
app/**/page.tsxfiles define App Router routes and static params.app/opportunities/_components/**owns the opportunities feature UI and UI-only controller hooks.lib/opportunities/api.tsreads the remote static API files.lib/opportunities/snapshot.tsreads the remote segmented snapshot index for static community/user route generation.lib/opportunities/static-api.tscentralizes raw data base URLs.lib/opportunities/types.tsowns shared opportunity domain types.
Default remote data endpoints:
https://raw.githubusercontent.com/openings-dev/data/main/snapshots/opportunities
https://raw.githubusercontent.com/openings-dev/data/mainThe app consumes:
api/manifest.jsonfor metadata, facets, and static API file pointers.api/order/recent.jsonfor ordered opportunity IDs.api/page-lookup.jsonandapi/pages/*.jsonfor paginated list loading.api/jobs/*.jsonandapi/job-ids.jsonfor job detail pages.index.jsonpluscountries/*shards for community and user static params.src/modules/catalog/repositories.jsonthrough the remote repository base URL for valid filter options.
There is no local API route for opportunities and no local JSON import in the front-end.
Create .env.local only when you need to override the production data source:
NEXT_PUBLIC_OPENINGS_DATA_BASE_URL=https://raw.githubusercontent.com/openings-dev/data/main/snapshots/opportunities
NEXT_PUBLIC_OPENINGS_DATA_REPOSITORY_BASE_URL=https://raw.githubusercontent.com/openings-dev/data/mainServer-side equivalents are also supported for build-time usage:
OPENINGS_DATA_BASE_URL=https://raw.githubusercontent.com/openings-dev/data/main/snapshots/opportunities
OPENINGS_DATA_REPOSITORY_BASE_URL=https://raw.githubusercontent.com/openings-dev/data/main
OPENINGS_DATA_SNAPSHOT_URL=https://raw.githubusercontent.com/openings-dev/data/main/snapshots/opportunities/index.jsonRequirements:
- Node.js
>=20.9.0 - npm
Install and run locally:
npm install
npm run devOpen http://localhost:3000.
npm run lint
npm run buildnpm run build runs the production Next.js static export and writes the generated site to out/.
Read CONTRIBUTING.md before opening a pull request.
Source repository and snapshot changes belong in the openings-dev/data repository. Front-end changes should keep data access centralized in lib/opportunities and must not add local datasets or mock JSON files.