Install Divemap App
+Install our app on your device for fast access, offline logs, and push updates!
+ +Add to Home Screen
+Add Divemap directly to your iPhone for the ultimate mobile-first experience.
+ + + {showIOSModal && ( +Install on iPhone
+-
+
-
+ 1
+ Tap Safari's Share button+
.
+ -
+ 2
+ Scroll down and select "Add to Home Screen"+
.
+
Track Your Adventures
+Log your scuba dives, map your certs, and connect with other buddies worldwide!
+ +Install Divemap App
++ Get the native experience with offline support and fast load times! +
++ How to install on iOS +
+-
+
-
+
+ 1
+
+ + Tap the Share button{' '} ++
at the bottom of Safari. +
+ -
+
+ 2
+
+ + Scroll down and select "Add to Home Screen"{' '} ++
. +
+
+ Join the Divemap Community! +
++ Register a free account to log your own dives, save favorite sites, and find buddies. +
++ Install Divemap App +
++ {selectedPromo.message} Install the app for fast access and offline support! +
++ Add to Home Screen +
++ {selectedPromo.message} Install on your iPhone to access your offline dive logs + anytime. +
++ Install on iPhone +
+-
+
-
+
+ 1
+
+ + Tap Safari's Share button{' '} ++
. +
+ -
+
+ 2
+
+ + Scroll down and select "Add to Home Screen"{' '} ++
. +
+
+ {selectedPromo.title} +
++ {selectedPromo.message} +
+
-
+
+ {/* Header: Title & Type */}
+
+
+
- {decodeHtmlEntities(route.name)}
-
-
- {/* Route Type Badge */}
-
- {detectedType.replace('_', ' ')}
-
-
-
-
- {/* Meta Info: Site & Creator */}
-
- {route.dive_site && (
-
-
- at
-
+ {decodeHtmlEntities(route.name)}
+
+
+ {/* Route Type Badge */}
+
-
- {route.dive_site.name}
-
-
+ {detectedType.replace('_', ' ')}
+
- )}
+
-
-
- {route.creator?.username || route.owner?.username || 'Unknown'}
+ {/* Meta Info: Site & Creator */}
+
+ {route.dive_site && (
+
+
+ at
+
+
+ {route.dive_site.name}
+
+
+
+ )}
+
+
+
+ {route.creator?.username || route.owner?.username || 'Unknown'}
+
-
- {/* Body: Description (Hidden in List Compact Mode if desired, but good to keep) */}
- {route.description && (
+ {/* Body: Description (Hidden in List Compact Mode if desired, but good to keep) */}
+ {route.description && (
+
+ {renderTextWithLinks(decodeHtmlEntities(route.description))}
+
+ )}
+
+ {/* Stats Strip & Actions */}
- {renderTextWithLinks(decodeHtmlEntities(route.description))}
-
- )}
-
- {/* Stats Strip & Actions */}
-
-
-
- Created
-
-
-
-
- {formatDate(route.created_at, {
- day: 'numeric',
- month: 'short',
- year: 'numeric',
- })}
+
+
+ Created
+
+
+
+ {formatDate(route.created_at, {
+ day: 'numeric',
+ month: 'short',
+ year: 'numeric',
+ })}
+
+
-
-
-
-
+
+
+
+
-
+ {shouldShowFeedPromo && (index - 2) % 15 === 0 && (
+
+ )}
+
);
})}
- {decodeHtmlEntities(route.name)} - -
- {/* Route Type Badge */} - - {detectedType.replace('_', ' ')} - -- - {dive.name || `Dive #${dive.id}`} - - {dive.dive_site?.name && ( - - @ {dive.dive_site.name} - - )} -
- - {/* Meta Byline - Single line on mobile */} -+ + {dive.name || `Dive #${dive.id}`} + + {dive.dive_site?.name && ( + + @ {dive.dive_site.name} - ))} - {dive.tags.length > (isMobile ? 3 : 5) && ( - - +{dive.tags.length - (isMobile ? 3 : 5)} + )} +
+ + {/* Meta Byline - Single line on mobile */} +- - {center.name} - -
-+ + {center.name} + +
+ {decodeHtmlEntities(center.description)} +
)}- {decodeHtmlEntities(center.description)} -
- )} -