Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Croatia Ferries — 2026 schedules

A single static page (servable from GitHub Pages) showing the official 2026 sailing schedules for Croatian coastal ferry and catamaran lines, with an interactive map.

  • Left panel — pick a date, get every sailing that actually runs that day (seasonal validity periods, day-of-week patterns, footnote restrictions and Croatian public-holiday rules applied), sorted by departure time. From/To boxes narrow the list as you type, accent-insensitively ("losinj" finds Mali Lošinj); one box matches any port the route calls at, both boxes require the route to visit a From match before a To match (the ⇅ button swaps them). The "ⓘ About" button next to the title opens a popup with data provenance and the disclaimer. Tip buttons (Ko-fi, PayPal, Buy Me a Coffee, GitHub Sponsors) and a report-an-issue link sit at the top right of the map.
  • Right panel — pannable/zoomable map (Leaflet + OpenStreetMap) with a dot on every departure pier. Hovering a schedule row previews its route with per-stop times; clicking the row pins it (yellow outline): the schedule then shows only that route, frozen at the top while its individual legs (A → B, B → C, …) with times are listed beneath, until you click it again or click open water. Hovering a port dot previews its connection network on the map; clicking it writes the port into the From box. Whenever the From text uniquely matches one port — typed or clicked — that port's network shows: solid blue/amber lines for routes boardable that day, thinner dotted lines for routes that only run on other days — no stop labels, to keep it readable. With both From and To uniquely matched, the map shows only sailings visiting them in that order, both ports yellow. By default only direct sailings count; the "transfers" checkbox also allows boat changes at intermediate ports (connection times are never checked). Other ports follow the same language as the key: solid dot if connected that day, hollow dot if only on other days, shrunk to half size if not connected at all; the selected port itself is yellow, matching the schedule's selection colour. Clicking open water clears everything, From/To included. A tab on the panel/map boundary collapses the schedule into a map-only view.

Data provenance — verify it yourself

The authoritative source is the Croatian Coastal Liner Shipping Agency (Agencija za obalni linijski pomorski promet), which publishes the official timetable PDF for every coastal line and operator: https://agencija-zolpp.hr/linije-2026/

  • data/YYYY-MM-DD/pdfs/ — the raw official PDFs exactly as downloaded on that date.
  • data/YYYY-MM-DD/extracted/line-*.json — one hand-checkable JSON per line, each carrying sourceUrl (the official PDF online) and sourcePdf (the archived copy in this repo).
  • data/YYYY-MM-DD/sources.json — manifest with the sha256 of every archived PDF.
  • data.js — generated bundle the page loads; every line entry keeps its sourceUrl, and the line badge on every schedule row links straight to the official PDF.

To verify a transcription: open data/<date>/extracted/line-631.json next to data/<date>/pdfs/T-631-Supetar-Split-2026.pdf (or the sourceUrl) and compare.

Coverage: all 24 state car-ferry lines, all 17 state high-speed catamaran lines, the major commercial catamarans (Kapetan Luka / Krilo, TP Line), the Croatia–Italy international lines (Jadrolinija 51/53/54/56 from their official per-line timetable PDFs, SNAV Ancona–Split from the official 2026 departure-calendar flyer), Adria Ferries Italy–Albania, Liberty Lines Trieste–Piran–Poreč–Rovinj–Mali Lošinj (official pocket-timetable PDF), and Adriatic Lines (Kompas) Venice–Istria plus Dubrovnik–Kotor/Budva — the latter harvested from the operator's booking API (tools/fetch_adriatic_lines.py) because no static timetable exists; each extracted line records an extractionMethod field describing how it was read. Per-provider extraction methods are documented in AGENTS.md. Small local passenger-boat ("brodske") lines are not included. Always confirm times with the operator before travelling — schedules are subject to change (and to weather).

Sanity checks

tools/validate.py guards against transcription errors:

  • times must be valid and strictly increasing along each sailing (midnight crossings flagged);
  • implied straight-line speed between consecutive stops must be physically plausible (car ferry 2–35 km/h, catamaran 5–65 km/h) — a mistyped time or wrong pier shows up here;
  • validity periods must not overlap and gaps/seasonal coverage are reported;
  • each period is checked for one-direction-only sailings and duplicate departures;
  • durations for the same origin→destination are compared across periods (outliers flagged);
  • every port must resolve to pier coordinates, every line to an archived source PDF.

Updating the data

# 1. Re-download the official PDFs into a new dated folder and re-extract them into
#    data/<today>/extracted/  (see tools/EXTRACTION_SPEC.md for the JSON schema)
# 2. Rebuild + validate:
python3 tools/build_data.py
python3 tools/validate.py

Deploying to GitHub Pages

git init && git add . && git commit -m "Croatia ferry schedules"
git branch -M main
git remote add origin git@github.com:<you>/ferries.git
git push -u origin main
# GitHub repo → Settings → Pages → deploy from branch "main", folder "/ (root)"

The page is fully static: index.html + data.js (Leaflet and map tiles load from unpkg/OSM). The deploy workflow publishes only those two files — the archived source PDFs stay in the repository (browse them on GitHub under data/) but are not part of the published website.

About

Croatia ferry & catamaran schedules 2026 — official timetables on an interactive map

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages