YACHT MASTER

Shipboard Log & Locker

{{ authError }}

Yacht Master v2.4 • Secure Maritime Authentication

YACHT MASTER
{{ currentBoat ? currentBoat.name : 'Select Vessel...' }}
Your Fleet

Port of Registry Empty

Welcome aboard, Captain! There are currently no yachts registered in your database. Let's record your first vessel to unlock the locker and logbook.

Select a Vessel

Choose a vessel from your active fleet to start logging entries

{{ currentBoat.name }}

{{ currentBoat.description }}

No vessel description supplied.

SYSTEMS ONLINE

Refetching Ship's Locker...

Log a New Voyage

LOG-ADD

{{ locationError }}

#{{ idx + 1 }} {{ wp.latitude }}, {{ wp.longitude }}
Leg: {{ calculateLegStats(newLog.waypoints[idx-1], wp).distanceNM.toFixed(2) }} NM @ {{ calculateLegStats(newLog.waypoints[idx-1], wp).speedKnots.toFixed(1) }} kt
Total: {{ calculateVoyageSummary(newLog.waypoints).totalDistanceNM.toFixed(2) }} NM Avg: {{ calculateVoyageSummary(newLog.waypoints).avgSpeedKnots.toFixed(1) }} kt

No waypoints recorded yet. Click above to record current location.

Voyage Logs Archive

{{ logEntries.length }} Voyages

No recorded logs yet. Log your first cruise!

{{ formatDate(entry.date) }} {{ entry.crew }}

Cruise to {{ entry.goal || 'Unknown' }}

From: {{ entry.start }} To: {{ entry.goal }}
{{ entry.waypoints.length }} Waypoint{{ entry.waypoints.length > 1 ? 's' : '' }} {{ calculateVoyageSummary(entry.waypoints).totalDistanceNM.toFixed(1) }} NM ({{ calculateVoyageSummary(entry.waypoints).totalDistanceKm.toFixed(1) }} km) Avg {{ calculateVoyageSummary(entry.waypoints).avgSpeedKnots.toFixed(1) }} kt

Lock Document entry

DOC-ADD

Any format (PDF, PNG, JPG, JPG...)

Selected: {{ newDoc.file.name }}

Document Locker

{{ documents.length }} Documents

No documents matching your scope. Lock one now!

{{ formatDateTime(doc.uploaded_at) }}

{{ doc.title }}

{{ doc.description }}

No details added.

{{ doc.filename }}

Log Maintenance task

MAINT-ADD

Any format (PDF, PNG, JPG, JPG...)

Selected: {{ newMaint.receipt.name }}

Maintenance Registry

{{ maintenanceRecords.length }} Records

No recorded maintenance tasks. Keep your yacht shipshape!

{{ formatDate(record.date) }} Invoice Saved

{{ record.title }}

{{ record.description }}

No details logged.

Add To-Do task

TODO-ADD

Any format (PNG, JPG, PDF...)

Selected: {{ newTodo.file.name }}

Active Task Board

{{ todoItems.filter(t => !t.done).length }} Pending

Task board is clear, Captain! Enjoy the calm seas.

{{ todo.text }}

Logged {{ formatDate(todo.created_at) }} Attachment

Add Provision to Buy

SHOP-ADD

Images or PDF etc.

Selected: {{ newShop.file.name }}

Shopping Cargo List

{{ shoppingItems.filter(s => !s.done).length }} Items to Buy

Cargo hold is fully stocked. Ready for sailing!

{{ shop.name }}

Logged {{ formatDate(shop.created_at) }} Attachment Shop Link

Vessel Registry Settings

Configure or decommission {{ currentBoat.name }}

Rename / Edit Description

Danger Zone

Decommission Yacht "{{ currentBoat.name }}"

This action is permanent! All log entries, document lockers, maintenance receipts, to-do lists, and shopping cargos relative to this vessel will be lost.

Register New Vessel

{{ activePopup.type }} ENTRY

{{ activePopup.editMode ? 'Modify Ship Entry' : 'Log Details' }}

{{ formatDate(activePopup.entry.date) }} Uploaded: {{ formatDateTime(activePopup.entry.uploaded_at) }} Purchase Link {{ activePopup.entry.done ? 'COMPLETED' : 'PENDING' }}

{{ activePopup.type === 'todo' ? activePopup.entry.text : (activePopup.type === 'shopping' ? activePopup.entry.name : activePopup.entry.title) }}

Crew: {{ activePopup.entry.crew || 'No skipper logged' }}

Start: {{ activePopup.entry.start || 'Log origin unspecified' }}

Goal: {{ activePopup.entry.goal || 'Log destination unspecified' }}

Log Description

Voyage Waypoints & Route

{{ locationError }}

Total Distance

{{ calculateVoyageSummary(activePopup.entry.waypoints).totalDistanceNM.toFixed(2) }} NM

({{ calculateVoyageSummary(activePopup.entry.waypoints).totalDistanceKm.toFixed(1) }} km)

Duration

{{ formatDuration(calculateVoyageSummary(activePopup.entry.waypoints).totalDurationMs) }}

Avg Speed

{{ calculateVoyageSummary(activePopup.entry.waypoints).avgSpeedKnots.toFixed(1) }} kt

({{ calculateVoyageSummary(activePopup.entry.waypoints).avgSpeedKmh.toFixed(1) }} km/h)

Waypoints

{{ activePopup.entry.waypoints.length }}

# Time Position (Lat, Lon) Leg Distance Leg Speed Action
{{ idx + 1 }} {{ formatDateTime(wp.timestamp) }} {{ wp.latitude.toFixed(5) }}, {{ wp.longitude.toFixed(5) }} {{ calculateLegStats(activePopup.entry.waypoints[idx-1], wp).distanceNM.toFixed(2) }} NM Start {{ calculateLegStats(activePopup.entry.waypoints[idx-1], wp).speedKnots.toFixed(1) }} kt -
Google Maps Route Preview Open in Google Maps
No waypoints recorded for this voyage. Click "Add Waypoint with Current Location" above to capture location points and view route preview.

Ship's Document Lock

{{ getAttachmentName(activePopup) }}

{{ getAttachmentType(activePopup) || 'Binary Stream' }}

Open Attachment
INLINE MOBI-PDF CO-NAVIGATOR Document Reader
Attachment Preview

{{ locationError }}

#{{ idx + 1 }} {{ wp.latitude }}, {{ wp.longitude }}
Leg: {{ calculateLegStats(editForm.waypoints[idx-1], wp).distanceNM.toFixed(2) }} NM @ {{ calculateLegStats(editForm.waypoints[idx-1], wp).speedKnots.toFixed(1) }} kt

Currently: {{ activePopup.entry.filename }}

Currently: {{ activePopup.entry.receipt_filename }}

Currently: {{ activePopup.entry.file_filename }}

Currently: {{ activePopup.entry.file_filename }}