Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Find every SNCF train where a free MAX JEUNE / MAX SENIOR (ex-TGVmax) seat is actually reservable — instead of checking SNCF Connect one route at a time.**

### ▶ [**Try it live — davd-gzl.github.io/MAX-Finder**](https://davd-gzl.github.io/MAX-Finder/) — no signup, runs in your browser
### ▶ [**Try it live — offware-apps.github.io/MAX-Finder**](https://offware-apps.github.io/MAX-Finder/) — no signup, runs in your browser

With a MAX JEUNE or MAX SENIOR pass, high-speed trains are free — but only when a MAX seat is still open on that train. SNCF Connect makes you check one route at a time; MAX Finder shows every station you can reach for free from a single search, using SNCF's open availability data.

Expand Down Expand Up @@ -142,4 +142,4 @@ Machine-readable and serverless — [`llms.txt`](public/llms.txt) and [`api.json

## Credits

- **[@AhmedFr](https://github.com/AhmedFr)** — designed the **map-first view** (List/Map toggle, full-bleed map with a floating results panel) and the **connection-count pin tinting**, originally in [#2](https://github.com/davd-gzl/MAX-Finder/pull/2). That work was salvaged onto the current codebase in [#21](https://github.com/davd-gzl/MAX-Finder/pull/21) and refined in [#26](https://github.com/davd-gzl/MAX-Finder/pull/26).
- **[@AhmedFr](https://github.com/AhmedFr)** — designed the **map-first view** (List/Map toggle, full-bleed map with a floating results panel) and the **connection-count pin tinting**, originally in [#2](https://github.com/offware-apps/MAX-Finder/pull/2). That work was salvaged onto the current codebase in [#21](https://github.com/offware-apps/MAX-Finder/pull/21) and refined in [#26](https://github.com/offware-apps/MAX-Finder/pull/26).
6 changes: 3 additions & 3 deletions docs/FDROID.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,13 @@ Categories:
- Travel
License: AGPL-3.0-only
AuthorName: MAX Finder contributors
SourceCode: https://github.com/davd-gzl/MAX-Finder
IssueTracker: https://github.com/davd-gzl/MAX-Finder/issues
SourceCode: https://github.com/offware-apps/MAX-Finder
IssueTracker: https://github.com/offware-apps/MAX-Finder/issues

AutoName: MAX Finder

RepoType: git
Repo: https://github.com/davd-gzl/MAX-Finder.git
Repo: https://github.com/offware-apps/MAX-Finder.git

Builds:
- versionName: 0.1.0
Expand Down
34 changes: 17 additions & 17 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@
name="description"
content="Trouvez les trains où une place TGV Max (MAX JEUNE ou MAX SENIOR) est réservable : trajet précis, carte des destinations, calendrier 30 jours, allers-retours. Open data SNCF, gratuit, open source, non affilié à la SNCF."
/>
<link rel="canonical" href="https://davd-gzl.github.io/MAX-Finder/" />
<link rel="canonical" href="https://offware-apps.github.io/MAX-Finder/" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="MAX Finder" />
<meta property="og:title" content="MAX Finder — trouver un train TGVmax avec une place réservable" />
<meta
property="og:description"
content="Toutes les places MAX JEUNE / MAX SENIOR ouvertes à la réservation, mises à jour chaque jour depuis l'open data SNCF. Gratuit, sans compte."
/>
<meta property="og:url" content="https://davd-gzl.github.io/MAX-Finder/" />
<meta property="og:image" content="https://davd-gzl.github.io/MAX-Finder/icons/og.png" />
<meta property="og:url" content="https://offware-apps.github.io/MAX-Finder/" />
<meta property="og:image" content="https://offware-apps.github.io/MAX-Finder/icons/og.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:locale" content="fr_FR" />
Expand All @@ -31,7 +31,7 @@
name="twitter:description"
content="Toutes les places MAX JEUNE / MAX SENIOR ouvertes à la réservation, mises à jour chaque jour depuis l'open data SNCF."
/>
<meta name="twitter:image" content="https://davd-gzl.github.io/MAX-Finder/icons/og.png" />
<meta name="twitter:image" content="https://offware-apps.github.io/MAX-Finder/icons/og.png" />
<link rel="manifest" href="manifest.webmanifest" />
<meta name="theme-color" content="#0f7a52" />
<link rel="icon" type="image/svg+xml" href="icons/icon.svg" />
Expand All @@ -45,30 +45,30 @@
"@graph": [
{
"@type": "WebSite",
"@id": "https://davd-gzl.github.io/MAX-Finder/#website",
"url": "https://davd-gzl.github.io/MAX-Finder/",
"@id": "https://offware-apps.github.io/MAX-Finder/#website",
"url": "https://offware-apps.github.io/MAX-Finder/",
"name": "MAX Finder",
"alternateName": "MAX Finder TGVmax",
"description": "Recherche de places TGV Max (MAX JEUNE / MAX SENIOR) ouvertes à la réservation, à partir de l'open data SNCF.",
"inLanguage": ["fr", "en", "es", "de", "it", "pt", "nl", "ko", "ja", "zh", "ar"]
},
{
"@type": "WebApplication",
"@id": "https://davd-gzl.github.io/MAX-Finder/#app",
"isPartOf": { "@id": "https://davd-gzl.github.io/MAX-Finder/#website" },
"@id": "https://offware-apps.github.io/MAX-Finder/#app",
"isPartOf": { "@id": "https://offware-apps.github.io/MAX-Finder/#website" },
"name": "MAX Finder",
"url": "https://davd-gzl.github.io/MAX-Finder/",
"url": "https://offware-apps.github.io/MAX-Finder/",
"applicationCategory": "TravelApplication",
"operatingSystem": "Any",
"browserRequirements": "Requires JavaScript",
"isAccessibleForFree": true,
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "EUR" },
"license": "https://github.com/davd-gzl/MAX-Finder/blob/main/LICENSE",
"sameAs": ["https://github.com/davd-gzl/MAX-Finder"],
"license": "https://github.com/offware-apps/MAX-Finder/blob/main/LICENSE",
"sameAs": ["https://github.com/offware-apps/MAX-Finder"],
"author": {
"@type": "Organization",
"name": "MAX Finder contributors",
"url": "https://github.com/davd-gzl/MAX-Finder"
"url": "https://github.com/offware-apps/MAX-Finder"
},
"description": "Application gratuite et open source qui affiche les trains avec une place MAX JEUNE ou MAX SENIOR (ex-TGVmax) ouverte à la réservation. Projet indépendant, non affilié à la SNCF ; la réservation se fait sur SNCF Connect.",
"featureList": [
Expand All @@ -79,7 +79,7 @@
"Itinéraires multi-villes (tour)",
"Carte des gares, 11 langues, PWA hors-ligne"
],
"screenshot": "https://davd-gzl.github.io/MAX-Finder/icons/og.png"
"screenshot": "https://offware-apps.github.io/MAX-Finder/icons/og.png"
}
]
}
Expand All @@ -90,7 +90,7 @@
"@type": "Dataset",
"name": "Places MAX JEUNE / MAX SENIOR ouvertes à la réservation — snapshot quotidien",
"description": "Snapshot quotidien des places TGV Max (MAX JEUNE / MAX SENIOR) ouvertes à la réservation sur environ 30 jours glissants : date, gare d'origine, gare de destination, heures de départ et d'arrivée, numéro de train, disponibilité. Environ 32 000 enregistrements dérivés de l'open data SNCF (jeu de données tgvmax).",
"url": "https://davd-gzl.github.io/MAX-Finder/",
"url": "https://offware-apps.github.io/MAX-Finder/",
"isAccessibleForFree": true,
"license": "https://www.etalab.gouv.fr/licence-ouverte-open-licence",
"creator": { "@type": "Organization", "name": "SNCF" },
Expand All @@ -100,17 +100,17 @@
"distribution": [
{
"@type": "DataDownload",
"contentUrl": "https://davd-gzl.github.io/MAX-Finder/data/tgvmax.json",
"contentUrl": "https://offware-apps.github.io/MAX-Finder/data/tgvmax.json",
"encodingFormat": "application/json"
},
{
"@type": "DataDownload",
"contentUrl": "https://davd-gzl.github.io/MAX-Finder/data/stations.json",
"contentUrl": "https://offware-apps.github.io/MAX-Finder/data/stations.json",
"encodingFormat": "application/json"
},
{
"@type": "DataDownload",
"contentUrl": "https://davd-gzl.github.io/MAX-Finder/data/meta.json",
"contentUrl": "https://offware-apps.github.io/MAX-Finder/data/meta.json",
"encodingFormat": "application/json"
}
]
Expand Down
14 changes: 7 additions & 7 deletions public/api.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "MAX Finder",
"description": "Free MAX JEUNE / MAX SENIOR (ex-TGVmax) seat availability from SNCF open data. Static, serverless, no accounts.",
"homepage": "https://davd-gzl.github.io/MAX-Finder/",
"homepage": "https://offware-apps.github.io/MAX-Finder/",
"license": "AGPL-3.0-only",
"dataLicense": "Licence Ouverte / Open Licence",
"notAffiliatedWith": "SNCF",
Expand Down Expand Up @@ -34,7 +34,7 @@
"axe": "string (optional line/axis)"
},
"search": {
"base": "https://davd-gzl.github.io/MAX-Finder/",
"base": "https://offware-apps.github.io/MAX-Finder/",
"method": "GET (query string deep-link)",
"params": {
"mode": [
Expand Down Expand Up @@ -82,10 +82,10 @@
}
},
"docs": {
"faq": "https://davd-gzl.github.io/MAX-Finder/faq/",
"howItWorks": "https://davd-gzl.github.io/MAX-Finder/docs/how-it-works.html",
"algorithms": "https://davd-gzl.github.io/MAX-Finder/docs/algorithms.html",
"llms": "https://davd-gzl.github.io/MAX-Finder/llms.txt",
"llmsFull": "https://davd-gzl.github.io/MAX-Finder/llms-full.txt"
"faq": "https://offware-apps.github.io/MAX-Finder/faq/",
"howItWorks": "https://offware-apps.github.io/MAX-Finder/docs/how-it-works.html",
"algorithms": "https://offware-apps.github.io/MAX-Finder/docs/algorithms.html",
"llms": "https://offware-apps.github.io/MAX-Finder/llms.txt",
"llmsFull": "https://offware-apps.github.io/MAX-Finder/llms-full.txt"
}
}
30 changes: 15 additions & 15 deletions public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ static JSON served over HTTPS; there is no rate limit beyond normal hosting.

## Machine-readable data

- Availability snapshot (JSON array): https://davd-gzl.github.io/MAX-Finder/data/tgvmax.json
- Snapshot metadata: https://davd-gzl.github.io/MAX-Finder/data/meta.json
- Station registry (coordinates, region, aliases): https://davd-gzl.github.io/MAX-Finder/data/stations.json
- API manifest (schema + query params, machine-readable): https://davd-gzl.github.io/MAX-Finder/api.json
- Availability snapshot (JSON array): https://offware-apps.github.io/MAX-Finder/data/tgvmax.json
- Snapshot metadata: https://offware-apps.github.io/MAX-Finder/data/meta.json
- Station registry (coordinates, region, aliases): https://offware-apps.github.io/MAX-Finder/data/stations.json
- API manifest (schema + query params, machine-readable): https://offware-apps.github.io/MAX-Finder/api.json
- Upstream source (refreshed ~once a day): SNCF Open Data "tgvmax" (Licence Ouverte)

### Record shape (tgvmax.json)
Expand All @@ -37,7 +37,7 @@ Stations use SNCF labels, e.g. `"PARIS (intramuros)"`, `"LYON (intramuros)"`,

## Search / deep-link API (build a shareable URL)

Base: `https://davd-gzl.github.io/MAX-Finder/`
Base: `https://offware-apps.github.io/MAX-Finder/`
Query params:
- `mode`: `from` | `to` | `od` | `tour` | `best`
- `from`: origin station id ; `to`: destination station id (in `mode=tour`, the optional finish city; set `to`=`from` for a loop)
Expand Down Expand Up @@ -65,24 +65,24 @@ Query params:

Examples:
- Where can I go from Paris on 2026-06-25:
`https://davd-gzl.github.io/MAX-Finder/?mode=from&from=PARIS%20(intramuros)&date=2026-06-25`
`https://offware-apps.github.io/MAX-Finder/?mode=from&from=PARIS%20(intramuros)&date=2026-06-25`
- Paris → Toulouse incl. up to one change:
`https://davd-gzl.github.io/MAX-Finder/?mode=od&from=PARIS%20(intramuros)&to=TOULOUSE%20MATABIAU&date=2026-06-25&conn=1`
`https://offware-apps.github.io/MAX-Finder/?mode=od&from=PARIS%20(intramuros)&to=TOULOUSE%20MATABIAU&date=2026-06-25&conn=1`
- Paris → Lyon round trip, back two days later:
`https://davd-gzl.github.io/MAX-Finder/?mode=od&from=PARIS%20(intramuros)&to=LYON%20(intramuros)&date=2026-06-25&rdate=2026-06-27`
`https://offware-apps.github.io/MAX-Finder/?mode=od&from=PARIS%20(intramuros)&to=LYON%20(intramuros)&date=2026-06-25&rdate=2026-06-27`
- Weekend getaways from Paris (1 night):
`https://davd-gzl.github.io/MAX-Finder/?mode=from&from=PARIS%20(intramuros)&date=2026-06-25&rt=1&nights=1`
`https://offware-apps.github.io/MAX-Finder/?mode=from&from=PARIS%20(intramuros)&date=2026-06-25&rt=1&nights=1`
- A Bretagne tour from Rennes, 1–2 days per city, no hop over 300 km:
`https://davd-gzl.github.io/MAX-Finder/?mode=tour&from=RENNES&rg=Bretagne&dmin=1&dmax=2&legkm=300&date=2026-06-25`
`https://offware-apps.github.io/MAX-Finder/?mode=tour&from=RENNES&rg=Bretagne&dmin=1&dmax=2&legkm=300&date=2026-06-25`
- An explicit multi-city itinerary (Paris → Lyon → Toulon):
`https://davd-gzl.github.io/MAX-Finder/?mode=tour&legs=PARIS%20(intramuros)>LYON%20(intramuros)@2026-06-25~LYON%20(intramuros)>TOULON@2026-06-27`
`https://offware-apps.github.io/MAX-Finder/?mode=tour&legs=PARIS%20(intramuros)>LYON%20(intramuros)@2026-06-25~LYON%20(intramuros)>TOULON@2026-06-27`

## Docs (HTML, crawlable)

- FAQ (French): https://davd-gzl.github.io/MAX-Finder/faq/
- How it works: https://davd-gzl.github.io/MAX-Finder/docs/how-it-works.html
- Algorithms: https://davd-gzl.github.io/MAX-Finder/docs/algorithms.html
- Full context in one fetch (this file + docs + FAQ): https://davd-gzl.github.io/MAX-Finder/llms-full.txt
- FAQ (French): https://offware-apps.github.io/MAX-Finder/faq/
- How it works: https://offware-apps.github.io/MAX-Finder/docs/how-it-works.html
- Algorithms: https://offware-apps.github.io/MAX-Finder/docs/algorithms.html
- Full context in one fetch (this file + docs + FAQ): https://offware-apps.github.io/MAX-Finder/llms-full.txt

## Disclaimer

Expand Down
4 changes: 2 additions & 2 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ export const META_URL = `${BASE}data/meta.json`;

export const SNCF_CONNECT_URL = "https://www.sncf-connect.com/";

export const SITE_URL = "https://davd-gzl.github.io/MAX-Finder/";
export const SITE_URL = "https://offware-apps.github.io/MAX-Finder/";

/** Project repository (used for the header star link and the feedback button). */
export const GITHUB_URL = "https://github.com/davd-gzl/MAX-Finder";
export const GITHUB_URL = "https://github.com/offware-apps/MAX-Finder";
export const GITHUB_ISSUES_URL = `${GITHUB_URL}/issues/new`;

/** Official SNCF pages describing the MAX JEUNE / MAX SENIOR subscriptions. */
Expand Down
Loading