Dive Gear
Destinations
Dive Sites
Liveaboards
Dive Gear
See All Gear Reviews →
Dive Computers
Best Dive Computers
Garmin Descent MK3i
Shearwater Teric
Shearwater Peregrine TX
Suunto Nautic S
Masks & Fins
Full Face Snorkel Masks
Freediving Masks
Scuba Fins
Safety & Accessories
Dive Knives
SMBs
Tank Markers
Dive Gloves
Dive Boots
Tanks
Best Scuba Tanks
Steel vs Aluminum
Hunting Guides
Hunting Lionfish
Catching Spiny Lobster
More Gear
Reef Safe Sunscreens
Lefeet P1 (DPV)
Destinations
See All Destinations →
Caribbean
Mexico
Cozumel
Dominican Republic
Honduras
Roatán
Utila
Colombia
Rosario Islands
Central America & Pacific
Panama
Coiba
Costa Rica
Santa Teresa
Mediterranean
Türkiye
Kaş
Red Sea
Israel
Eilat
Dive Sites
Liveaboards
First hand dive guides
Destinations
Every destination I've dived personally — region guides with operators and logistics, plus deep dives on individual sites.
Türkiye
Europe
Water Temp
Skill Level
Beginner
Cost
$
Best Season
May - October
Kas, Turkey
Europe
Water Temp
71F
Skill Level
Beginner
Cost
$
Best Season
May - October
Eilat, Israel
Middle East
Water Temp
77F
Skill Level
Intermediate
Cost
$$
Best Season
Year Round
Dominican Republic
Caribbean
Water Temp
80F
Skill Level
Intermediate
Cost
$$
Best Season
Dec - April
Panama
Central America
Water Temp
Skill Level
Intermediate
Cost
$$
Best Season
Cozumel, Mexico
North America
Water Temp
82°F // 27.78°C
Skill Level
Intermediate
Cost
$$
Best Season
Year Round
Utila, Honduras
Central America
Water Temp
80°F // 27°C
Skill Level
Beginner
Cost
$
Best Season
Mar - Sep
Roatan, Honduras
Central America
Water Temp
80°F // 27°C
Skill Level
Beginner
Cost
$$
Best Season
Mar - Sep
Coiba, Panama
Central America
Water Temp
79°F // 26°C
Skill Level
Intermediate
Cost
$$
Best Season
Year Round
Santa Teresa, Costa Rica
Central America
Water Temp
72°F // 22°C
Skill Level
Intermediate
Cost
$$
Best Season
Dec - May
Rosario Islands, Colombia
South America
Water Temp
82°F // 26°C
Skill Level
Beginner
Cost
$$
Best Season
Dec - April
✕
You've Been Invited to Dive Club
What happens inside stays inside. But here's a hint:
✓
🤿 Dive meetups, group trips, liveaboards
✓
🌍 Top dive sites shared by community members
✓
🎥 Underwater footage, gear tips, and technique discussions
✓
👋 People who’ve already linked up and dove together IRL
Join Dive Club 🤿
No thanks, I'll dive solo
/* * Check whether the popup has already appeared * during the current browser session. */ function hasAlreadyShown() { try { return sessionStorage.getItem(STORAGE_KEY) === "1"; } catch (error) { return false; } } /* * Mark the popup as shown for the current session. */ function markAsShown() { try { sessionStorage.setItem(STORAGE_KEY, "1"); } catch (error) { /* * Continue normally if sessionStorage * is unavailable or blocked. */ } } /* * Clear the active delay timer. */ function clearPopupTimer() { if (timer !== null) { window.clearTimeout(timer); timer = null; } } /* * Open the popup smoothly. */ function showPopup() { clearPopupTimer(); if (popupVisible || hasAlreadyShown()) { return; } popupVisible = true; previousActiveElement = document.activeElement; markAsShown(); popup.setAttribute("aria-hidden", "false"); overlay.setAttribute("aria-hidden", "false"); /* * Wait for two animation frames so the browser * registers the hidden state before adding * the visible animation class. */ window.requestAnimationFrame(function () { window.requestAnimationFrame(function () { overlay.classList.add("ei-visible"); popup.classList.add("ei-visible"); }); }); /* * Focus the close button after the animation begins. */ window.setTimeout(function () { closeButton.focus(); }, 450); } /* * Close the popup smoothly. */ function hidePopup() { if (!popupVisible) { return; } popupVisible = false; overlay.classList.remove("ei-visible"); popup.classList.remove("ei-visible"); popup.setAttribute("aria-hidden", "true"); overlay.setAttribute("aria-hidden", "true"); /* * Return keyboard focus to the element * the visitor was using before the popup opened. */ window.setTimeout(function () { if ( previousActiveElement && typeof previousActiveElement.focus === "function" ) { previousActiveElement.focus(); } }, 450); } /* * Start or resume the 30-second timer. * * The timer only runs while the browser tab * is visible to the visitor. */ function startPopupTimer() { if ( popupVisible || hasAlreadyShown() || document.visibilityState === "hidden" || timer !== null ) { return; } timerStartedAt = Date.now(); timer = window.setTimeout(function () { timer = null; remainingTime = 0; showPopup(); }, remainingTime); } /* * Pause the timer when the visitor leaves * or switches away from the browser tab. */ function pausePopupTimer() { if (timer === null) { return; } var elapsedTime = Date.now() - timerStartedAt; remainingTime = Math.max( 0, remainingTime - elapsedTime ); clearPopupTimer(); } /* * Handle browser-tab visibility changes. */ function handleVisibilityChange() { if (hasAlreadyShown()) { clearPopupTimer(); return; } if (document.visibilityState === "hidden") { pausePopupTimer(); return; } if (remainingTime <= 0) { showPopup(); } else { startPopupTimer(); } } /* * Initialize the popup. */ function initializePopup() { overlay.classList.remove("ei-visible"); popup.classList.remove("ei-visible"); popup.setAttribute("aria-hidden", "true"); overlay.setAttribute("aria-hidden", "true"); if (hasAlreadyShown()) { return; } startPopupTimer(); } /* * Close interactions */ closeButton.addEventListener("click", hidePopup); overlay.addEventListener("click", hidePopup); dismissButton.addEventListener("click", hidePopup); /* * Allow the dismiss text to work with Enter or Space. */ dismissButton.addEventListener("keydown", function (event) { if ( event.key === "Enter" || event.key === " " ) { event.preventDefault(); hidePopup(); } }); /* * Close with the Escape key. */ document.addEventListener("keydown", function (event) { if (event.key === "Escape" && popupVisible) { hidePopup(); } }); /* * Pause and resume the timer based on * whether the visitor is actively viewing the page. */ document.addEventListener( "visibilitychange", handleVisibilityChange ); /* * Track CTA clicks. */ ctaButton.addEventListener("click", function () { hidePopup(); if (typeof window.gtag === "function") { window.gtag( "event", "exit_popup_cta_click", { event_category: "Exit Intent", event_label: "Skool Community" } ); } }); /* * Start the delay after the full page, * including images and fonts, has loaded. */ if (document.readyState === "complete") { initializePopup(); } else { window.addEventListener( "load", initializePopup, { once: true } ); } })();