Repositories

Five primary repositories under the github.com/flighthelp organization, plus secondary support repos. Each is built to be useful on its own; the split exists so contributors can specialize and so downstream consumers can pin only what they need.

Primary repositories

flighthelp/schema (MIT)

The schema definitions and generated language bindings. The lightest repo by lines of code, the heaviest by downstream impact.

/json-schema/
  airline.schema.json
  airport.schema.json
  baggage-rule.schema.json
  contact-method.schema.json
  fare-class.schema.json
  fee.schema.json
  scenario.schema.json
  regulation.schema.json
  contributor.schema.json
  edit.schema.json
  source.schema.json
  badge.schema.json
  _shared/
    provenance.schema.json
    localizable-string.schema.json
    money.schema.json
    hours.schema.json
    coordinates.schema.json
/openapi/
  flighthelp-v1.openapi.yaml
/typescript/
  generated/
  package.json                  # @flighthelp/schema
/python/
  generated/
  pyproject.toml                # flighthelp-schema
/php/
  generated/
  composer.json                 # flighthelp/schema
/go/
  generated/
/rust/
  generated/
  Cargo.toml                    # flighthelp-schema
/java/
  generated/
/swift/
  generated/
/docs/
  field-reference.md
  versioning-policy.md
  migration/
    v0-to-v1.md
/scripts/
  generate-bindings.ts
  validate-schemas.ts
/.github/
  workflows/
    validate.yml
    publish.yml
README.md
CHANGELOG.md
CONTRIBUTING.md
LICENSE

CI on every PR: schema lint, breaking-change detection (using a diff tool against the previous release), language binding regeneration. On every release tag: publish to npm, PyPI, Composer, etc., in a single coordinated transaction.

flighthelp/rules-engine (MIT)

The standalone passenger-rights logic library. Structure detailed in RULES-ENGINE.md.

/regimes/
  eu-261/
  uk-261/
  brazil-400/
  montreal-convention/
  us-dot-tarmac-delay/
  us-dot-bumping/
  canada-appr/
  india-dgca/
  israel-aviation-services-law/
  australia-acl/
  japan-civil-aeronautics/
/engine/
  evaluator.ts
  types.ts
  currency.ts
  distance.ts
/playground/
  cli.ts
  web/
/sdks/
  node/
  python/
  php/
  go/
  rust/
  java/
  swift/
/test-fixtures/
  shared-scenarios.json
/docs/
  legal-versioning.md
  adding-a-regime.md
  contributing-test-cases.md
README.md
CHANGELOG.md

Each regime is self-contained. Adding a new jurisdiction is a self-contained PR that doesn't touch existing regimes. CI runs every fixture case in every language SDK on every PR.

flighthelp/data (CC-BY 4.0)

The verified dataset. Updated continuously by automated and human processes.

/data/
  airlines/
    {iata}.json              # one file per airline
  airports/
    {iata}.json              # one file per airport
  baggage-rules/
    {airline}/
      {fare_class}/
        {bag_type}.json
  contacts/
    {airline}.json
  fees/
    {airline}.json
  fare-classes/
    {airline}.json
  scenarios/
    {slug}.json
  regulations/
    {slug}.json
  badges.json
/snapshots/
  daily/
    {YYYY-MM-DD}.tar.gz       # nightly full dump
  monthly/
    {YYYY-MM}.tar.gz          # archived monthly snapshot
/changelog.md                 # auto-generated, every committed change
/README.md
/SCHEMA-VERSION.txt           # which schema version the data conforms to
/LICENSE                      # CC-BY 4.0

The repo is updated by GitHub Actions that pull from the moderated edit queue. PRs against /data are accepted from external contributors but go through automated schema validation, then human moderation. The PR template demands a source URL for every change.

The CC-BY 4.0 license means anyone can use the data commercially, with attribution. Forks are encouraged: regional mirrors, AI training subsets, journalism investigation snapshots. The data does not depend on the project's continued existence.

flighthelp/scrapers (MIT)

The automated monitors that watch airline pages and flag changes. One scraper per airline; each is a small standalone module.

/scrapers/
  lufthansa/
    scraper.ts
    selectors.ts
    fixtures/                 # frozen HTML samples for tests
      2026-01-15.html
      2026-03-22.html
    tests/
      scraper.test.ts
    README.md
  ryanair/
  delta/
  emirates/
  ...
/shared/
  utils/
    fetch.ts
    parser.ts
    diff.ts
  selectors/
    common-baggage-table.ts
/cron/
  schedule.yaml              # which scrapers run when
  priority-tiers.yaml        # high-priority vs low-priority airlines
/scripts/
  run-scraper.ts
  generate-fixture.ts
README.md
ROBOTS-POLICY.md             # public statement of scraping practice

Scrapers respect robots.txt, rate-limit politely (typically one request per minute per origin), and use a User-Agent identifying flighthelp.net with a link to ROBOTS-POLICY.md.

When an airline changes their website layout, the scraper breaks. The system flags it, a community member opens a PR fixing the selectors, CI runs against fixtures, and the maintainer merges. This is the most active repo by edit volume.

flighthelp/web (AGPL-3.0)

The reference website and contributor PWA, as a monorepo.

/apps/
  web/                       # flighthelp.net (the consumer site)
    app/                     # Next.js app router
    components/
    lib/
    public/
    next.config.ts
  contribute/                # contribute.flighthelp.net (PWA)
    app/
    components/
    lib/
    public/
    next.config.ts
  docs/                      # docs.flighthelp.net (Nextra)
    pages/
    next.config.ts
/packages/
  ui/                        # shared shadcn/ui components, restyled
  data-client/               # typed API client (wraps schemas + REST)
  i18n/                      # translation strings
  design-tokens/             # CSS variables, Tailwind config
/infra/
  scrapers-runner/           # Fly.io container for running scrapers
  api/                       # the API server (separate deploy)
  workers/                   # Cloudflare Workers (cache, edge logic)
pnpm-workspace.yaml
turbo.json
package.json
README.md
LICENSE                      # AGPL-3.0

AGPL because we want forks to remain open. Anyone can self-host their own instance (regional mirror, language-specific deployment, internal corporate fork) but improvements come back.

Secondary repositories

flighthelp/docs-content

Long-form documentation, not bundled with code. Markdown files for tutorials, guides, contributor onboarding, governance documents, and the public website's static content (About, Governance, Transparency Reports). Licensed CC-BY 4.0.

flighthelp/governance

The governing documents: bylaws, code of conduct, contributor agreement, conflict-of-interest policy, succession plan. Versioned, public, amendable through the documented process. Licensed CC0 (true public domain) so any other public-interest project can fork them.

flighthelp/case-law-archive

A read-only archive of court rulings and regulator opinions that have shaped the rules engine. Each ruling is captured as a PDF (or HTML snapshot when available) with a structured metadata file. Licensed CC-BY 4.0 where the underlying documents permit.

flighthelp/api-clients-community

A meta-repo listing community-maintained SDKs and integrations in languages or frameworks not officially supported. Pull requests adding new clients (with quality criteria) are welcomed.

flighthelp/translations

Community-managed translation strings for the website, the contributor app, the email templates, and the scenario template messages. Uses Crowdin or Weblate for the workflow. Strings are sourced from flighthelp/web/packages/i18n and published back to it.

What stays closed-source

Three things are deliberately not open:

Moderation tooling. The internal queue interface, the anti-spam heuristics, the contributor risk scoring, the abuse signals, the IP and device fingerprint clustering. Open-sourcing this lets bad actors game the system. The high-level principles (graduated sanctions, public change log, dispute resolution paths) are documented in MODERATION.md; the implementation details are private.

Reputation engine. The exact weights and decay functions used to compute contributor reputation scores. Open-sourcing the engine would make reputation farming trivial. The general approach is documented; the specifics are not.

Internal analytics. The internal dashboards (page views, search queries, performance metrics) stay private. There are no third-party analytics scripts on the site (no Google Analytics, no Mixpanel, no Segment), and the internal dashboards are not exposed externally to avoid creating a target for surveillance.

The principle: open everything that builds trust and capability; close only what protects the community from manipulation.

License summary

Component Repo License Rationale
Dataset flighthelp/data CC-BY 4.0 Max reuse; attribution preserves credit
Schemas flighthelp/schema MIT Frictionless adoption by downstream tools
Rules engine flighthelp/rules-engine MIT Public, auditable implementation of law
Scrapers flighthelp/scrapers MIT Community maintenance survives layout changes
Website + PWA flighthelp/web AGPL-3.0 Forks stay open; improvements return
Long-form docs flighthelp/docs-content CC-BY 4.0 Reuse with credit
Governance documents flighthelp/governance CC0 Anyone can adapt for their own non-profit
Case-law archive flighthelp/case-law-archive CC-BY 4.0 (where permitted) Archive of public legal documents
Moderation tooling private Prevents gaming
Reputation engine private Prevents farming
Internal analytics private Protects user privacy

The dual-license pattern (permissive for data and infrastructure, copyleft for the application) mirrors what worked for OpenStreetMap, Wikimedia, and Open Food Facts: lower the bar for using the data, raise the bar for forking the project.

Repository governance

Each repository has at least three maintainers with merge rights, drawn from the core team and senior trusted contributors. No repository depends on a single person to ship.

Issues and PRs follow templates that prompt for the required information (source URLs for data edits, fixture cases for engine changes, breaking-change notes for schema changes). Stale issues are auto-flagged but not auto-closed; the community decides when to retire them.

The full governance model is in GOVERNANCE.md.