{"id":51198245,"url":"https://github.com/schiste/aetrain","last_synced_at":"2026-06-27T22:31:32.427Z","repository":{"id":356600210,"uuid":"1232131220","full_name":"schiste/aetrain","owner":"schiste","description":"Interactive European rail trip planner — built in the open.","archived":false,"fork":false,"pushed_at":"2026-05-21T16:51:55.000Z","size":65566,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-21T22:12:49.758Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/schiste.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-07T16:07:59.000Z","updated_at":"2026-05-21T16:52:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/schiste/aetrain","commit_stats":null,"previous_names":["schiste/aetrain"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/schiste/aetrain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faetrain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faetrain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faetrain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faetrain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/schiste","download_url":"https://codeload.github.com/schiste/aetrain/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/schiste%2Faetrain/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34870654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-27T22:31:31.746Z","updated_at":"2026-06-27T22:31:32.417Z","avatar_url":"https://github.com/schiste.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aetrain\n\n\u003e Interactive European rail trip planner — built in the open.\n\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](./LICENSE)\n[![Status: prototype](https://img.shields.io/badge/status-early%20prototype-orange.svg)](#project-status)\n\n\u003c!--\nTODO(you): write the project pitch here. 3-5 sentences, no more.\n\nThis block is the most important text in the repo: it's what someone sees in\nthe first 10 seconds on GitHub, in social previews, and in search results.\nThe decision is yours, not the converter's, because positioning is a\nproduct/voice call:\n\n  - Who is this *for*? (Trip planners? OSS rail-data folks? Curious devs?)\n  - What does it *do* in one sentence a non-technical reader can grasp?\n  - What makes it *different* from existing tools (interrail.eu, Rome2Rio,\n    Google Maps)?\n\nSuggested shape (5-10 lines):\n\n  Aetrain helps you plan multi-stop European rail trips visually. Pick cities\n  on an interactive map; Aetrain calculates routes, suggests interesting\n  detours along the way, and filters destinations by travel time, popularity,\n  or population. Built on a curated dataset of 369 cities and 748 connections\n  derived from public GTFS feeds, it runs as a single static page with no\n  external services or tracking.\n\nReplace the placeholder paragraph below with your version.\n--\u003e\n\n**Aetrain is an early-stage build.** _A clear pitch goes here — see the comment above._\n\n## Project status\n\nEarly Stage 1 build-out, in public. The original legacy prototype now lives at\n`apps/web/prototype/index.html`, and `apps/web/` itself now serves the\nmodularized version of that same proof of concept while shared Rust crates and\ngenerated static datasets take shape underneath it. Expect breaking changes;\nAPIs, data contracts, and repo structure are intentionally still moving.\n\nThe architectural direction is now explicit:\n\n- `Rust` is the shared performance-critical core\n- `apps/web` is a thin browser surface around generated datasets and the core\n- future `apps/ios` and `apps/android` are intended to be native clients, not\n  web wrappers\n\nThe staged technical decisions are documented in\n[ARCHITECTURE.md](./ARCHITECTURE.md). Expect that document to evolve as the\nweb renderer, worker boundary, and runtime dataset contracts harden.\n\n## Quick start\n\n```sh\n# Run the shared Rust workspace checks\ncargo test\n\n# Fetch or refresh the Stage 1 sources, build the selected target, and sync\n# the runtime debug projection into the web app\ntools/pipeline/run-stage1.sh\n\n# Browse the current modularized web app (any static server works)\npython3 -m http.server --directory apps/web 8080\n# then open http://localhost:8080/\n```\n\nThe web app is now split into modules, but it still contains a transitional\n`src/legacy/` implementation while the long-term renderer, worker, and wasm\nboundaries are being introduced. The Stage 1 pipeline now manages:\n\n- raw source cache state under `data/cache/`\n- target-scoped canonical artifacts under `data/build/stage1/\u003ctarget\u003e/canonical/`\n- a compact runtime projection under `data/build/stage1/\u003ctarget\u003e/runtime/web/`\n- a runtime `web-debug` projection under `data/build/stage1/\u003ctarget\u003e/runtime/web-debug/`\n- optional sync into `apps/web/public/data/production/`\n\n## Repository layout\n\n```\naetrain/\n├── apps/\n│   ├── web/              # current web surface, future high-performance browser app\n│   ├── ios/              # future native iOS client\n│   ├── android/          # future native Android client\n│   └── chatgpt/          # secondary assistant surface, never product truth\n├── ARCHITECTURE.md       # public architecture and staged technical decisions\n├── data/                 # source manifests, overrides, cache, build artifacts\n├── packages/\n│   ├── rust/             # shared engine: domain, routing, parsing, normalization\n│   └── ts/               # thin browser-only glue around the Rust core\n├── tools/                # operator-facing utilities and orchestration\n├── docs/                 # architecture notes and long-form repo documentation\n├── scripts/              # compatibility shims for relocated tools\n├── LICENSE               # AGPL-3.0\n├── CONTRIBUTING.md\n├── CODE_OF_CONDUCT.md\n└── SECURITY.md\n```\n\nThe detailed folder intent is documented in the per-directory `README.md`\nfiles throughout the repo.\n\n## Contributing\n\nWe welcome contributions of all sizes. Please read [CONTRIBUTING.md](./CONTRIBUTING.md)\nbefore opening a pull request, and abide by our [Code of Conduct](./CODE_OF_CONDUCT.md).\n\nTo report a security issue privately, see [SECURITY.md](./SECURITY.md).\n\n## License\n\nAetrain is licensed under the [GNU Affero General Public License v3.0](./LICENSE).\n\nThe AGPL's network-use clause means: if you run a modified version of Aetrain\nas a network service, you must offer the source of your modifications to its\nusers. We chose AGPL deliberately — see CONTRIBUTING.md for context.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschiste%2Faetrain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fschiste%2Faetrain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fschiste%2Faetrain/lists"}