BoatShowPlanner.com
BoatShowPlanner turns a visitor's available time, boat interests, relevant event content and physical show locations into a suggested day. It now serves more than one show. Harbour Marine Show 2027 is a fictional demonstration with synthetic data. Balkans Sea Fair 2026 (16 to 18 October 2026, Marina Orikum, Albania) is a real show, public in Preview, using organiser-supplied data.
This README is the single authoritative record of what the application does, what has changed, what is live and what remains incomplete. The public page at /readme displays this file directly. The roadmap holds future intentions. Versioned show-data packages hold the datasets and source evidence.
The visitor should not have to become the algorithm.
The product hierarchy is: Boats → relevant exhibitors → relevant talks and demonstrations → food, facilities and navigation. Timing is the hard framework.
1. Product purpose
Boat shows present more choice than most visitors can assess in one day. BoatShowPlanner asks a small number of human questions, identifies the most relevant things to see, and places them into a practical timed route. It supports Boatshed Process 2, local presentation and showings; Process 3, buyer relevance and follow-up; and Process 5, the platform and toolbox.
The visitor interface is deliberately calm: one decision per question, one clear action per screen, sensible defaults and detail only when requested.
2. Current functionality
Sections 2 to 4 first described the Harbour demonstration as built in September 2026. That description is kept below. Current multi-show behaviour is in "Multiple shows" and the Change Log.
Implemented now
- Show list on the home page, each show at its own address.
- Event home for Harbour Marine Show, 14–16 May 2027 at Harbour Marina.
- Question-by-question planning: attendance day, arrival, departure, boat types, boat uses, budget and exhibitor interests.
- A valid exhibitor-led path for visitors who select “I'm not looking for a boat”.
- Deterministic recommendations from structured vessel fields. Existing scoring is unchanged.
- Fifteen synthetic vessels, B001–B015, with searchable and data-derived filters.
- Saved vessels and a browser-persisted Suggested Day Plan.
- A small synthetic set of shoreside exhibitors and sessions to demonstrate relevance and fixed-time schedule anchors.
- A marina schematic with one vessel per berth, A01–A07 and B01–B08, useful-place disclosure and route emphasis.
- Vessel exterior images and four-image accessible galleries joined through vessel IDs.
- Mobile layouts, keyboard controls, visible focus and fallbacks for unavailable images.
Demonstration status and limitations
For Harbour Marine Show, all event, vessel, exhibitor, price, session and facility information is synthetic. Balkans Sea Fair uses organiser data only. There is no live organiser feed, account, booking, availability or notification service. Plans live only in the visitor's browser. The sample inventory contains sailing yachts and motor boats; other boat-interest choices demonstrate an extensible classification but do not fabricate absent inventory.
3. Current visitor journey
- Which day are you coming? Only dates within the event are offered.
- What time will you arrive? Times are constrained to show hours.
- What time will you leave? Departure must follow arrival and remain before closing.
- What type of boat interests you? Up to three. “I'm not looking for a boat” is mutually exclusive.
- What would you use the boat for? Up to three. Skipped on the non-boat path.
- What price range should we work within? Broad ranges derived from the sample GBP inventory, with an optional small aspirational allowance. Skipped on the non-boat path.
- What else would you like to explore? Up to three equipment, service or learning interests.
- When a relevant demonstration session fits the attendance window, the visitor may include or decline it.
- BoatShowPlanner builds a timed suggested day. Details and refinements sit behind Adjust my day.
Visitors can also browse every vessel, inspect galleries, save boats manually, view the marina map and revise answers without losing saved items.
4. Current data model
The sample is split into typed data modules rather than embedded in pages:
- Event: DEMO001, dates, venue, currency and demonstration notice.
- Event day: derived valid calendar dates and common sample opening hours.
- Vessel: 15 records with stable vessel, event, exhibitor and location IDs; arrays remain arrays.
- Exhibitor: six vessel exhibitors from the source dataset plus a separate minimal synthetic interest set for shoreside demonstration visits.
- Location: capacity-one berth records linked by
location_id, with zone, label and sequence. - Session: a minimal synthetic set with stable ID, day, fixed start, duration, topic tags and location.
- Facility: entrance, café, food court, toilets, stage, information and first aid. Agenda behaviour separates arrival, optional breaks and map-only places.
- Media: a manifest joins vessel exterior and technical images through
vessel_id. - Relationship: current joins connect vessels to exhibitors and locations; planner tags connect boats, exhibitors and sessions.
Local browser records use boatshowplanner-visit-v2, boatshowplanner-dayplan-v1, boatshowplanner-preferences-v1 and boatshowplanner-answers-v1. Since October 2026 each key is namespaced per show, so plans for different shows stay separate. Saved Harbour plans under the old keys are migrated once.
5. Canonical schema direction
The stable core entities are Event, Event day, Location, Vessel, Exhibitor, Session, Facility, Media and Relationship.
Organiser data
↓
Import, mapping and classification
↓
Canonical event schema
↓
Questions, recommendations, routing and schedule
Future events such as Southampton, Annapolis, Baltic events or smaller marina shows may arrive as organiser spreadsheets, websites, brochures, PDFs, CSV files or APIs. Each source should be mapped and validated before the planner uses it. The schema should remain stable while controlled classifications and taxonomies remain extensible.
Locations must be generic, not permanently berth-only. Valid types include Berth, Pontoon, Stand, Booth, Hall, Stage, Demonstration area, Facility and Entrance. Locations should carry their own IDs, zones, map coordinates and walking connections. Relationships should connect vessels, exhibitors, brands, sessions and locations without assuming permanently that every vessel has one exhibitor.
Controlled tags provide dependable filtering and explainable choices. The same vocabulary should connect records, for example vessel sailing, bluewater, offshore, liveaboard; exhibitor sails, rigging, offshore, safety, navigation; session bluewater, passage planning, ocean safety. Semantic or vector matching may later interpret natural-language material, but must not be the sole decision mechanism.
6. Future expansion
Future capabilities, not implemented now, may include larger event inventories, fuller exhibitor and service categories, extensive sessions and demonstrations, new vessel arrivals, live capacity and boarding slots, relevant visitor notifications, post-show appointments and organiser or exhibitor analytics.
QR and the physical show
A future physical/digital layer may add qr_point, scan_event, availability_slot, booking and opportunity. Purposeful QR points could sit at entrances, pontoon heads, map junctions, selected vessels, exhibitor stands, stages and exits. A scan could confirm arrival, show “you are here”, open a nearby vessel or exhibitor, join a boat queue, request information, add a nearby item or arrange a later viewing.
Every QR must carry a contextual instruction such as “Plan your day”, “You are at Pontoon F”, “Book a boarding slot”, “See this boat's details” or “Join this demonstration”. A pilot should use a limited number of useful codes, not cover every object.
A future booking engine could calculate:
boat or exhibitor availability
∩ visitor attendance window
∩ free time in the plan
∩ walking time
∩ fixed sessions and appointments
This should not depend on continuous GPS. What3Words or a similar tool may help survey approximate positions, while the canonical map retains its own location IDs and connections.
Crowded events often have weak connectivity. A production approach should keep maps and personal plans lightweight and cacheable, retain short printed location references, retry safe operations, confirm bookings only after server acknowledgement, and keep basic show information available when live services fail. No offline infrastructure is implemented in this sample.
7. Stakeholder value
Visitors
- A day organised around their available time and interests.
- Less decision fatigue, with relevant boats first.
- Useful exhibitors and sessions fitted around boat visits.
- Less backtracking and better use of limited show time.
- One coherent experience rather than separate lists and maps.
Organisers
- Better understanding of visitor intent.
- Evidence of which vessels, categories and sessions generate interest.
- Future visibility of planned demand by day and time.
- Better future control of queues and capacity.
- Evidence beyond headline attendance.
- A digital structure able to respond to show changes.
- A branded visitor experience.
Exhibitors
- More relevant visitors.
- Better future evidence from detail views, plan additions and booking demand.
- Opportunities to fill cancelled or unused slots.
- Post-show viewing and enquiry opportunities.
- Better information than total attendance and weather-dependent footfall.
These commercial outcomes belong in organiser and exhibitor material, not prominently in the visitor interface.
8. Future commercial possibilities
No commercial model has been selected. Possibilities include an organiser licence, a per-event platform fee, exhibitor premium tools, booking and lead-management services, clearly labelled sponsored recommendations, aggregated event intelligence and white-labelled event applications. Sponsored placement must never be disguised as visitor relevance.
9. Explicitly not built yet
- Authentication, visitor accounts, organiser or exhibitor logins.
- Production database. (A file-based organiser import script exists; see Multiple shows.)
- Live availability, boarding queues, bookings, payments or client funds.
- QR points, scan tracking, GPS or offline infrastructure.
- Real notifications, live event changes or new-arrival alerts.
- Enquiries, post-show appointments or lead management.
- Organiser and exhibitor dashboards or analytics.
- A full Southampton, Annapolis or Baltic dataset.
- Native mobile applications.
- AI chat or opaque AI-only recommendations.
10. README maintenance rule
Whenever material functionality, data structures, routes or future architectural decisions change, update this README in the same change. Keep current, planned and commercial functionality clearly separated. Never describe a proposal as implemented.
Technical reference
The application uses TanStack Start, React 19, TypeScript, Vite and Tailwind CSS. The home page / lists shows. Planner pages live under each show's address: /<show>/, /<show>/plan, /<show>/recommendations, /<show>/browse, /<show>/vessels/$id, /<show>/exhibitors, /<show>/events, /<show>/visit and /<show>/map. The older top-level addresses (/plan, /browse and so on) redirect to Harbour Marine Show. /readme shows this file. The root layout owns shared navigation, the demonstration-data strip and footer. Canonical sample data lives under src/data; deterministic recommendation and scheduling rules live under src/lib; presentation components live under src/components/planner.
Multiple shows
The home page lists every public show. Each show has its own address, for example /harbour-marine-show-2027 and /balkans-sea-fair.
- Harbour Marine Show 2027: synthetic demo, fully working, unchanged in scope.
- Balkans Sea Fair 2026: public in Preview. 55 exhibitors, 15 events and the organiser map are loaded. No boats are confirmed yet.
Every planner page reads whichever show the visitor chose. Show status (awaiting data, Preview, ready) describes data completeness only and is derived from the data.
To load a show's data: save organiser sheets as CSV files in src/data/shows/<slug>/csv/ and run bun scripts/import-show.ts <slug>. The script lists every problem in plain words and writes nothing until all rows pass. Two narrower modes exist: --descriptions-only updates exhibitor descriptions without changing names, IDs or areas; --boats-only imports the boat catalogue (implemented and tested, not yet published).
Earlier wording, kept for history: on 30 September 2026 this section said Balkans Sea Fair was "Awaiting show data" and that planner pages read Harbour data only. Both are no longer true.
Raw organiser material is kept inside the relevant show folder with a dated source record. Map labels and other observations remain provisional until the organiser confirms their meaning. A numbered map space must not be treated as an occupied berth, stand, boat or exhibitor allocation without that confirmation.
Change Log
Status terms: Proposed, Approved, Implemented, Tested, Published and verified. "Publication requested" means publishing was started but the live site was not checked afterwards.
Multi-show structure and separate saved plans
- Date: plan 28 September 2026; show-aware rebuild on or before 13 October 2026.
- Change: show list on the home page, per-show addresses, every planner page reads the chosen show, per-show saved plans, old addresses redirect to Harbour.
- Reason: run a second, real show without copying the planner.
- Status: implemented, tested (desktop click-through, saved Harbour plan migrated). Published with later releases; no separate live check recorded.
- Harbour effect: shared change. Harbour pages moved to
/harbour-marine-show-2027/...; content and scoring unchanged.
Balkans Sea Fair configuration
- Date: organiser map recorded 30 September 2026; dates and hours on or before 13 October 2026.
- Change: show folder created; 16 to 18 October 2026, 10:00 to 18:00 daily, from the approval document.
- Status: implemented. Kept direct-link only until the Preview release.
What's On events programme
- Date: on or before 14 October 2026.
- Change: events listed by day, each with time, place, short description and optional speaker, added to the day plan with the existing session mechanism. Conferences handled as ordinary longer events.
- Status: implemented, tested on desktop and mobile. Harbour shows its three demo sessions on the same page.
- Harbour effect: shared page added; Harbour sessions unchanged.
Balkans Sea Fair data package v0.1
- Date: 14 October 2026.
- Change: imported 55 public exhibitors (47 BSF Avenue, 4 Dry Display, 6 Front Dock Line), 15 events (10 Summit sessions under 3 headings, 2 B2B Matchmaking, 3 evening parties), 1 facility (information point) and the organiser map shown as supplied. ASSOCIATION and BUSINESS PARTNER withheld until named. Stand numbers kept in data, not shown.
- Supporting changes: blank stand allowed where an area is given; evening events until 21:30 carry no closing-time warning; "Add to my day" on the Exhibitors page.
- Status: approved, implemented, tested on mobile with a sample Saturday itinerary.
- Outstanding: boats, coffee and lunch places, Summit registration link, Sunday finish (13:00 or 14:00), names of the two withheld exhibitors.
Balkans Sea Fair Preview
- Date: 14 October 2026.
- Change: removed direct-link-only; listed on the home page with a Preview label.
- Status: approved, publication requested, public addresses confirmed.
Exhibitor descriptions (research workbook v0.2)
- Date: 14 October 2026.
- Change: 38 conservative business descriptions published; 17 intentionally blank where evidence was weak or identity uncertain. Names, IDs and areas unchanged. Source URLs and confidence notes kept out of public data.
- Status: approved, implemented, tested on mobile and desktop, published and verified on the public exhibitor page.
Exhibitor name search and Boats wording
- Date: 14 October 2026.
- Change: search box on the Exhibitors page; Boats page explains that boats are added as they are confirmed, with a clear empty state.
- Status: approved, implemented, tested on mobile, published and verified on boatshowplanner.com.
My Visit: saved exhibitors and events
- Date: 14 October 2026.
- Change: a Saved tab lists saved boats, exhibitors and events straight away, before Plan my day is completed.
- Status: implemented and tested on phone and desktop. Not yet approved for publication.
- Harbour effect: shared page; Harbour saved boats behave as before.
Boat catalogue import validation
- Date: 14 October 2026.
- Change:
--boats-onlyimport with statuses expected, sighted, confirmed and withdrawn. Rows are withdrawn, never deleted. Each import is copied to a history folder. Only public fields reach the site. - Status: implemented and tested with a practice show. Not yet approved for publication. No Balkans boats imported.
- Limitation: boat photos are not handled by the spreadsheet yet.
Security checks
- Dates: two checks on or before 14 October 2026.
- Result: no findings in either. The site has no backend or user accounts, so deeper checks do not apply. Both ran before some later changes.
Testing
- Mobile (360 px wide) and desktop click-throughs were run for each release above, as noted. Harbour was rechecked after each shared change: 15 vessels, recommendations unchanged.
README record
- Date: 14 October 2026.
- Change: this Change Log and Deferred decisions added; /readme now displays this file instead of a separate copy; the footer link is labelled README.
- Status: implemented. Awaiting approval to publish.
- Release approval, 14 October 2026: README and footer wording approved for publication. Pending My Visit and boat catalogue developments are excluded. Live verification has not yet been performed for this release.
README-only publication and live verification
- Date: 14 October 2026; live checks completed by 12:56 UTC.
- Change and reason: published the authoritative README page and README footer label so visitors can read the maintained product history. The release used the existing search/Boats-wording baseline, excluding pending My Visit and boat catalogue developments.
- Status: approved, implemented, tested, published and verified at https://boatshowplanner.com/readme. The earlier approval and publication-pending entries above describe the state before these live checks.
- Evidence: HTTP 200 on mobile (360 px) and desktop (1280 px); existing history, October Change Log, Deferred decisions and Technical reference present; footer labelled README; no horizontal page overflow or browser runtime errors. Live My Visit still has the original Saved vessels tab.
- Security: fresh basic check reported no issues, but backend checks did not apply and deep code analysis was not run. A separate production-dependency check reported critical Seroval advisories through TanStack packages and high advisories affecting Seroval, source-map-js and js-yaml. These are unresolved dependency advisories, not evidence of exploitation. Earlier no-findings entries are historical, not a current all-clear.
- Limitations: dependency remediation needs a separately scoped update. My Visit and boat catalogue developments remain unpublished; approved BSF Preview wording is a separate change, not included here. No show-data package was changed. This verification entry is recorded after checking the live page; it needs its own README-only publication to appear publicly.
Publication record follow-up and separate Preview wording
- Date: 14 October 2026; follow-up live check completed by 13:15 UTC.
- Publication record: the post-verification entry above was published in a second README-only release and checked on the public page (HTTP 200). Its statement that it still needed publication describes the earlier state. The original My Visit remains live; pending My Visit and boat catalogue files were restored to development without publishing them.
- Preview change and reason: the exact approved BSF notice now appears on the homepage show card and in the shared strip on every BSF planner page. BSF status badges say Preview. This replaces inconsistent testing language without changing show data or implying that missing information is available.
- Status: Preview wording approved, implemented and tested on mobile (360 px) and desktop (1280 px), not published. Checked the BSF landing page, questionnaire, recommendations, Boats, Exhibitors, What's On, My Visit and map plus the homepage: exact notice present, no horizontal overflow or runtime errors. The live BSF site still uses its previous wording.
- Preservation: Harbour retains 15 demo boats. Its pages and badge wording, show datasets, maps, questionnaire and scoring were not changed by this wording update. No data package was imported. Earlier Pending wording proposal below is retained as historical context, not current approval status.
- Outstanding: separate publication approval for Preview wording; My Visit and boat catalogue publication approval; dependency remediation. This follow-up entry is development-only until a later approved record publication.
Deferred decisions
- Map area buttons: held until descriptions of the exhibition areas are verified.
- Exhibitor correction links: held until a recipient email address is approved.
- Exhibitor interest classification: the taxonomy is being developed first. No interest tags are imported and recommendations are unchanged until it is tested against real data.
- Boats: no speculative or unsupported boat records.
- Accounts and storage: no visitor accounts and no new database at this stage.
- Scoring: no changes to the existing scoring rules.
Pending wording proposal (not applied)
The site currently says "Preview: information still being added" on the show card and landing page, but the strip on every Balkans page still says "TESTING: PARTIAL DATA". Proposed single wording: "Balkans Sea Fair 2026 is currently in Preview. Exhibitor, boat and event information is being checked and updated as details become available." Awaiting approval.