{"id":541,"date":"2025-10-20T13:02:06","date_gmt":"2025-10-20T17:02:06","guid":{"rendered":"https:\/\/scootercam.net\/notes\/?p=541"},"modified":"2025-10-20T13:02:07","modified_gmt":"2025-10-20T17:02:07","slug":"scootercam-predictors","status":"publish","type":"post","link":"https:\/\/scootercam.net\/blog\/scootercam-predictors\/","title":{"rendered":"ScooterCam Predictors"},"content":{"rendered":"\n<p>A comprehensive WordPress plugin that predicts sunset and moonset viewing conditions over Lake Michigan with advanced horizon weather analysis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Features<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sunset Predictor<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>0-100 scoring system<\/strong> with letter grades (A+ to F)<\/li>\n\n\n\n<li><strong>3-Day evening forecast<\/strong> for sunset planning<\/li>\n\n\n\n<li><strong>Horizon weather analysis<\/strong> &#8211; compares conditions at your location with across the water<\/li>\n\n\n\n<li>Analyzes cloud cover, visibility, humidity, wind, and weather type<\/li>\n\n\n\n<li>Customizable scoring weights<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Moonset Predictor<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Predicts <strong>spectacular moonset events<\/strong> (full moon setting at dawn over Lake Michigan)<\/li>\n\n\n\n<li>Only shows predictions when conditions are worth watching<\/li>\n\n\n\n<li>Considers moon illumination, position, and timing<\/li>\n\n\n\n<li><strong>Dual-location weather analysis<\/strong> (essential for lake viewing)<\/li>\n\n\n\n<li>Tracks next viewing opportunities<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Card Display Shortcodes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modern, responsive card-style layouts<\/li>\n\n\n\n<li>Perfect for dashboard-style pages<\/li>\n\n\n\n<li>Matches current weather conditions design<\/li>\n\n\n\n<li>Fully responsive &#8211; stacks on mobile<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Quick Install<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Upload the <code>scootercam-predictors<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n\n\n\n<li>Activate through the &#8216;Plugins&#8217; menu in WordPress<\/li>\n\n\n\n<li>Go to <strong>Settings \u2192 ScooterCam Predictors<\/strong> to configure<\/li>\n\n\n\n<li>Enter your API keys and adjust settings<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Via Git<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/wp-content\/plugins\/\ngit clone https:\/\/github.com\/scootercam\/scootercam-predictors.git\n<\/code><\/pre>\n\n\n\n<p>Then activate in WordPress Admin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">API Keys Required<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">OpenWeatherMap API Key (Free)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Visit <a href=\"https:\/\/openweathermap.org\/api\">OpenWeatherMap<\/a><\/li>\n\n\n\n<li>Sign up for a free account<\/li>\n\n\n\n<li>Generate an API key (free tier: 1,000 calls\/day)<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Moon API Key (Required for moonset predictions)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Visit <a href=\"https:\/\/rapidapi.com\/api-ninjas\/api\/moon-phase\/\">RapidAPI &#8211; Moon Phase API<\/a><\/li>\n\n\n\n<li>Subscribe to the free plan (100 requests\/day)<\/li>\n\n\n\n<li>Copy your RapidAPI key<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Default Locations (Lake Michigan)<\/h3>\n\n\n\n<p>The plugin comes pre-configured for Lake Michigan viewing:<\/p>\n\n\n\n<p><strong>Home Location (South Haven, MI)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Viewing location on the eastern shore<\/li>\n\n\n\n<li>Lat: 42.4032, Lon: -86.2736<\/li>\n<\/ul>\n\n\n\n<p><strong>Horizon Location (Kenosha, WI)<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Weather across the lake to the west<\/li>\n\n\n\n<li>Lat: 42.5847, Lon: -87.8212<\/li>\n<\/ul>\n\n\n\n<p>You can customize these in Settings for any location worldwide.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Shortcodes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sunset Shortcodes<\/h3>\n\n\n\n<p><strong>Simple displays:<\/strong><\/p>\n\n\n<p>[sunset_score]<br \/>\n[sunset_time]<br \/>\n[sunset_description]<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;sunset_score]          # Shows: 85\/100 (B+)\n&#91;sunset_time]           # Shows: 7:32 PM\n&#91;sunset_description]    # Shows: Excellent sunset conditions expected\n<\/code><\/pre>\n\n\n\n<p><strong>Full display:<\/strong><\/p>\n\n\n<p>[sunset_full] <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;sunset_full]           # Complete sunset predictor with 3-day forecast\n<\/code><\/pre>\n\n\n\n<p><strong>Card display:<\/strong><\/p>\n\n\n<p>[sunset_card]  <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;sunset_card]           # Modern card-style display\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Moonset Shortcodes<\/h3>\n\n\n\n<p><strong>Simple displays:<\/strong><\/p>\n\n\n<p>[moonset_score]<br \/>\n[moonset_time]<br \/>\n[moonset_description]  <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;moonset_score]         # Shows score or \"No notable moonset today\"\n&#91;moonset_time]          # Shows moonset time\n&#91;moonset_description]   # Shows viewing conditions\n<\/code><\/pre>\n\n\n\n<p><strong>Full display:<\/strong><\/p>\n\n\n<p>[moonset_full]<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;moonset_full]          # Complete moonset predictor\n<\/code><\/pre>\n\n\n\n<p><strong>Card display:<\/strong><\/p>\n\n\n<p>[moonset_card]   <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;moonset_card]          # Modern card-style display\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Creating a Dashboard Page<\/h3>\n\n\n\n<p>Use the cards together in a responsive grid:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;div class=\"scootercam-cards-grid\"&gt;<\/code><\/pre>\n\n\n<p>[sunset_card]<\/p>\n\n\n\n<p>[moonset_card] &lt;\/div&gt;<\/p>\n\n\n\n<p>The cards will automatically display 2 columns on desktop and stack on mobile.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How the Scoring Works<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sunset Scoring Factors<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Factor<\/th><th>Default Weight<\/th><th>Optimal Range<\/th><\/tr><\/thead><tbody><tr><td>Cloud Coverage<\/td><td>40%<\/td><td>25-55% (partial clouds)<\/td><\/tr><tr><td>Visibility<\/td><td>25%<\/td><td>&gt;10 km<\/td><\/tr><tr><td>Humidity<\/td><td>20%<\/td><td>45-75%<\/td><\/tr><tr><td>Wind Speed<\/td><td>15%<\/td><td>5-15 mph<\/td><\/tr><tr><td>Weather Type<\/td><td>15%<\/td><td>Partly cloudy<\/td><\/tr><tr><td>Temperature<\/td><td>5%<\/td><td>Comfortable range<\/td><\/tr><tr><td><strong>Horizon Contrast<\/strong><\/td><td>20%<\/td><td>Different conditions across water<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>The <strong>Horizon Contrast<\/strong> feature is unique &#8211; it compares your local weather with conditions across the lake. This creates the most dramatic sunsets when you have clear skies but clouds exist across the water to light up.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Moonset Criteria<\/h3>\n\n\n\n<p>A moonset is considered &#8220;notable&#8221; when ALL conditions are met:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Moon illumination \u2265 80%<\/strong> (nearly full to full moon)<\/li>\n\n\n\n<li><strong>Moonset occurs between 5 AM &#8211; 9 AM<\/strong> (dawn viewing)<\/li>\n\n\n\n<li><strong>Moon sets in western sky<\/strong> (225\u00b0 &#8211; 315\u00b0 azimuth over Lake Michigan)<\/li>\n\n\n\n<li><strong>Clear weather conditions<\/strong> at both locations<\/li>\n<\/ol>\n\n\n\n<p>If any criteria isn&#8217;t met, the plugin displays &#8220;No notable moonset today&#8221; instead of showing a misleading score.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Customization<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Adjusting Scoring Weights<\/h3>\n\n\n\n<p>In <strong>Settings \u2192 ScooterCam Predictors<\/strong>, you can adjust the importance of each weather factor. The plugin will automatically recalculate scores based on your preferences.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Custom Locations<\/h3>\n\n\n\n<p>Change the home and horizon locations to use the plugin anywhere &#8211; great for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ocean coastlines<\/li>\n\n\n\n<li>Large lakes<\/li>\n\n\n\n<li>Mountain viewing locations<\/li>\n\n\n\n<li>Any location where distant weather matters<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Custom Styling<\/h3>\n\n\n\n<p>The plugin includes a <code>style.css<\/code> file you can customize. All elements use the <code>scootercam-<\/code> class prefix for easy targeting:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.scootercam-forecast-card {\n    \/* Your custom styles *\/\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Caching<\/h2>\n\n\n\n<p>The plugin intelligently caches API responses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Weather data<\/strong>: 30 minutes<\/li>\n\n\n\n<li><strong>Moon data<\/strong>: 1 hour<\/li>\n<\/ul>\n\n\n\n<p>This reduces API calls while keeping predictions current. With typical usage, you&#8217;ll use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>~50-100 OpenWeatherMap calls per day (well within free 1,000\/day limit)<\/li>\n\n\n\n<li>~25-50 Moon API calls per day (within free 100\/day limit)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">File Structure<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>scootercam-predictors\/\n\u251c\u2500\u2500 scootercam-predictors.php          # Main plugin file\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 INSTALLATION.md\n\u251c\u2500\u2500 FILE-CHECKLIST.md\n\u251c\u2500\u2500 includes\/\n\u2502   \u251c\u2500\u2500 class-sunset-predictor.php     # Sunset prediction engine\n\u2502   \u251c\u2500\u2500 class-moonset-predictor.php    # Moonset prediction engine\n\u2502   \u251c\u2500\u2500 admin-settings.php             # Settings registration\n\u2502   \u2514\u2500\u2500 admin-page.php                 # Admin interface\n\u251c\u2500\u2500 templates\/\n\u2502   \u251c\u2500\u2500 sunset-full.php                # Full sunset display\n\u2502   \u2514\u2500\u2500 moonset-full.php               # Full moonset display\n\u2514\u2500\u2500 assets\/\n    \u2514\u2500\u2500 css\/\n        \u2514\u2500\u2500 style.css                  # Plugin styles\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Requirements<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WordPress 5.0 or higher<\/li>\n\n\n\n<li>PHP 7.4 or higher<\/li>\n\n\n\n<li>OpenWeatherMap API key (free)<\/li>\n\n\n\n<li>RapidAPI Moon API key (free, required for moonset predictions)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Support<\/h2>\n\n\n\n<p>For issues, feature requests, or questions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitHub: <a href=\"https:\/\/github.com\/scootercam\/scootercam-predictors\">github.com\/scootercam\/scootercam-predictors<\/a><\/li>\n\n\n\n<li>Website: <a href=\"https:\/\/scootercam.net\/\">scootercam.net<\/a><\/li>\n\n\n\n<li>Documentation: See INSTALLATION.md for detailed setup instructions<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">License<\/h2>\n\n\n\n<p>GPL v2 or later<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Changelog<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Version 2.0.0 (October 20, 2025)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NEW<\/strong>: Combined sunset and moonset predictors into unified plugin<\/li>\n\n\n\n<li><strong>NEW<\/strong>: Card-style shortcodes for modern layouts (<code>[sunset_card]<\/code>, <code>[moonset_card]<\/code>)<\/li>\n\n\n\n<li><strong>NEW<\/strong>: Responsive grid support<\/li>\n\n\n\n<li>Improved caching system<\/li>\n\n\n\n<li>Better error handling<\/li>\n\n\n\n<li>Enhanced admin interface<\/li>\n\n\n\n<li>Complete rewrite with proper WordPress standards<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Version 1.0.0<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Initial release of separate plugins<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Credits<\/h2>\n\n\n\n<p>Created by ScooterCam for Lake Michigan sunset and moonset photography.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Screenshots<\/h2>\n\n\n\n<p><em>(Add screenshots here after deployment)<\/em><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Sunset card display<\/li>\n\n\n\n<li>Moonset card display<\/li>\n\n\n\n<li>Dashboard grid layout<\/li>\n\n\n\n<li>Admin settings page<\/li>\n\n\n\n<li>Full sunset forecast<\/li>\n\n\n\n<li>Full moonset prediction<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Enjoy predicting those perfect moments!<\/strong> \ud83c\udf05\ud83c\udf15<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A comprehensive WordPress plugin that predicts sunset and moonset viewing conditions over Lake Michigan with advanced horizon weather analysis. Features Sunset Predictor Moonset Predictor Card Display Shortcodes Installation Quick Install Via Git Then activate in WordPress Admin. API Keys Required OpenWeatherMap API Key (Free) Moon API Key (Required for moonset predictions) Configuration Default Locations (Lake &#8230; <a title=\"ScooterCam Predictors\" class=\"read-more\" href=\"https:\/\/scootercam.net\/blog\/scootercam-predictors\/\" aria-label=\"Read more about ScooterCam Predictors\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[38],"tags":[],"class_list":["post-541","post","type-post","status-publish","format-standard","hentry","category-plugins"],"_links":{"self":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/comments?post=541"}],"version-history":[{"count":1,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/541\/revisions"}],"predecessor-version":[{"id":542,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/posts\/541\/revisions\/542"}],"wp:attachment":[{"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/media?parent=541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/categories?post=541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scootercam.net\/blog\/wp-json\/wp\/v2\/tags?post=541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}