<!DOCTYPE html>
<html class='' lang='en'>
<head>
<!-- LAYOUT: blog_tw -->
<meta content='blog_tw' name='layout'>
<div data-country='US' id='ait-cookie-consent' style='display:none;'>
<div class='ait-cc-backdrop'></div>
<div class='ait-cc-terminal'>
<div class='ait-cc-titlebar'>
<div class='ait-cc-dots'>
<span class='ait-cc-dot red'></span>
<span class='ait-cc-dot yellow'></span>
<span class='ait-cc-dot green'></span>
</div>
<span class='ait-cc-title'>cookie_policy.sh</span>
</div>
<div class='ait-cc-body'>
<div class='ait-cc-output'>
<p class='ait-cc-line'>
<span class='ait-cc-prompt'>$</span>
<span class='ait-cc-cmd'>cat /etc/cookies.conf</span>
</p>
<p class='ait-cc-spacer'></p>
<p class='ait-cc-line'>We use cookies to understand how people use this site.</p>
<p class='ait-cc-line'>
Analytics cookies help us improve your experience.
<br>
They are off by default. Nothing tracks you until you say so.
</p>
<p class='ait-cc-spacer'></p>
<p class='ait-cc-line'>
<span class='ait-cc-prompt'>$</span>
<span class='ait-cc-cmd'>select cookie_preferences</span>
</p>
</div>
<div class='ait-cc-actions'>
<button class='ait-cc-btn accept' onclick='aitCookieConsent(&#39;all&#39;)'>[1] Accept All</button>
<button class='ait-cc-btn necessary' onclick='aitCookieConsent(&#39;necessary&#39;)'>[2] Necessary Only</button>
</div>
<div class='ait-cc-footnote'>
<a href='/privacy-policy' target='_blank'>cat privacy_policy.md</a>
<span class='ait-cc-sep ait-cc-desktop-only'></span>
<span class='ait-cc-desktop-only'>Esc to dismiss</span>
</div>
</div>
</div>
</div>
<style>
  #ait-cookie-consent {
    --cc-bg: #0d1117;
    --cc-surface: #161b22;
    --cc-border: #30363d;
    --cc-green: #3fb950;
    --cc-dim: #8b949e;
    --cc-text: #c9d1d9;
    --cc-bright: #f0f6fc;
    --cc-blue: #58a6ff;
    --cc-red: #f85149;
    --cc-yellow: #d29922;
    --cc-font: 'SF Mono', 'Fira Code', 'Cascadia Code', 'JetBrains Mono', 'Menlo', 'Monaco', 'Consolas', monospace;
    position: fixed;
    inset: 0;
    z-index: 999999;
    display: flex;
    align-items: flex-end;
    justify-content: center;
    padding: 20px;
    font-family: var(--cc-font);
    animation: aitCcFadeIn 0.3s ease;
  }
  @keyframes aitCcFadeIn { from { opacity: 0; } to { opacity: 1; } }
  @keyframes aitCcSlideUp { from { transform: translateY(30px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
  @keyframes aitCcBlink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
  @keyframes aitCcType {
    from { width: 0; }
    to { width: 100%; }
  }
  
  .ait-cc-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.5);
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
  }
  
  .ait-cc-terminal {
    position: relative;
    width: 100%;
    max-width: 540px;
    background: var(--cc-bg);
    border: 1px solid var(--cc-border);
    border-radius: 10px;
    box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(63, 185, 80, 0.1);
    overflow: hidden;
    animation: aitCcSlideUp 0.35s ease;
  }
  
  .ait-cc-titlebar {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    background: var(--cc-surface);
    border-bottom: 1px solid var(--cc-border);
  }
  .ait-cc-dots { display: flex; gap: 6px; }
  .ait-cc-dot {
    width: 12px;
    height: 12px;
    border-radius: 50%;
  }
  .ait-cc-dot.red { background: var(--cc-red); }
  .ait-cc-dot.yellow { background: var(--cc-yellow); }
  .ait-cc-dot.green { background: var(--cc-green); }
  .ait-cc-title {
    flex: 1;
    text-align: center;
    font-size: 12px;
    color: var(--cc-dim);
    letter-spacing: 0.5px;
  }
  
  .ait-cc-body { padding: 20px 22px 18px; }
  
  .ait-cc-output { margin-bottom: 16px; }
  .ait-cc-spacer { height: 8px; margin: 0; }
  .ait-cc-line {
    font-size: 13px;
    line-height: 1.65;
    color: var(--cc-text);
    margin: 0;
    padding: 0;
  }
  .ait-cc-prompt {
    color: var(--cc-green);
    margin-right: 8px;
    font-weight: 600;
  }
  .ait-cc-cmd {
    color: var(--cc-bright);
    font-weight: 500;
  }
  .ait-cc-cmd::after {
    content: '\2588';
    animation: aitCcBlink 1s step-end infinite;
    color: var(--cc-green);
    margin-left: 2px;
    font-weight: 400;
  }
  
  .ait-cc-actions {
    display: flex;
    gap: 10px;
    margin-bottom: 14px;
  }
  .ait-cc-btn {
    flex: 1;
    padding: 10px 16px;
    border-radius: 6px;
    font-family: var(--cc-font);
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    transition: all 0.15s ease;
    border: 1px solid var(--cc-border);
    letter-spacing: 0.3px;
  }
  .ait-cc-btn.accept {
    background: var(--cc-green);
    color: var(--cc-bg);
    border-color: var(--cc-green);
  }
  .ait-cc-btn.accept:hover {
    background: #46d160;
    box-shadow: 0 0 12px rgba(63, 185, 80, 0.3);
  }
  .ait-cc-btn.necessary {
    background: transparent;
    color: var(--cc-text);
  }
  .ait-cc-btn.necessary:hover {
    background: var(--cc-surface);
    border-color: var(--cc-dim);
  }
  
  .ait-cc-footnote {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 11px;
    color: var(--cc-dim);
  }
  .ait-cc-footnote a {
    color: var(--cc-blue);
    text-decoration: none;
  }
  .ait-cc-footnote a:hover { text-decoration: underline; }
  .ait-cc-sep { opacity: 0.4; }
  .ait-cc-desktop-only {}
  
  @media (max-width: 560px) {
    #ait-cookie-consent {
      padding: 0;
      align-items: flex-end;
    }
    .ait-cc-backdrop { backdrop-filter: blur(1px); }
    .ait-cc-terminal {
      max-width: 100%;
      border-radius: 14px 14px 0 0;
      border-bottom: none;
      max-height: 85vh;
      overflow-y: auto;
    }
    .ait-cc-titlebar { padding: 7px 14px; }
    .ait-cc-title { font-size: 11px; }
    .ait-cc-dot { width: 9px; height: 9px; }
    .ait-cc-body { padding: 12px 16px 10px; }
    .ait-cc-output { margin-bottom: 10px; }
    .ait-cc-line { font-size: 12px; line-height: 1.45; }
    .ait-cc-line:empty { display: none; }
    .ait-cc-spacer { height: 2px; }
    .ait-cc-prompt { margin-right: 6px; }
    .ait-cc-actions {
      flex-direction: row;
      gap: 8px;
    }
    .ait-cc-btn {
      padding: 11px 10px;
      font-size: 12px;
    }
    .ait-cc-footnote {
      font-size: 10px;
      padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 60px);
    }
    .ait-cc-desktop-only { display: none; }
  }
</style>
<script>
  (function() {
    // --- GDPR region detection ---
    // Primary: server-side MaxMind geo IP (country code in data attribute).
    // Fallback: client-side timezone (for localhost / private IPs where geo returns nil).
    var GDPR_COUNTRIES = [
      // EU member states
      'AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU',
      'IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE',
      // EEA (non-EU)
      'IS','LI','NO',
      // UK (UK GDPR / DPA 2018)
      'GB',
      // Switzerland (similar regime)
      'CH'
    ];
  
    function needsCookieConsent() {
      // 1. Try server-side country code (most accurate)
      var el = document.getElementById('ait-cookie-consent');
      var country = el && el.getAttribute('data-country');
      if (country && country.length === 2) {
        return GDPR_COUNTRIES.indexOf(country.toUpperCase()) !== -1;
      }
  
      // 2. Fallback: timezone detection (for dev/localhost where geo returns nil)
      try {
        var tz = Intl.DateTimeFormat().resolvedOptions().timeZone || '';
        if (tz.indexOf('Europe/') === 0) return true;
        if (tz.indexOf('Atlantic/') === 0) return true;
        if (tz === 'Arctic/Longyearbyen') return true;
        return false;
      } catch (e) {
        return true;
      }
    }
  
    // --- Cookie helpers ---
    function getCookie(name) {
      var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
      return match ? match[2] : null;
    }
    function setCookie(name, value, days) {
      var d = new Date();
      d.setTime(d.getTime() + days * 86400000);
      document.cookie = name + '=' + value + ';expires=' + d.toUTCString() + ';path=/;SameSite=Lax';
    }
  
    // --- Consent state ---
    var CONSENT_COOKIE = 'ait_cookie_consent';
    var consent = getCookie(CONSENT_COOKIE);
  
    // If already consented, fire analytics if "all", and we're done
    if (consent === 'all') {
      window._aitAnalyticsConsented = true;
      return;
    }
    if (consent === 'necessary') {
      window._aitAnalyticsConsented = false;
      return;
    }
  
    // No consent recorded yet
    if (!needsCookieConsent()) {
      // Non-GDPR region: implicit consent, load analytics
      window._aitAnalyticsConsented = true;
      return;
    }
  
    // GDPR region, no consent yet: show banner, block analytics
    window._aitAnalyticsConsented = false;
  
    // Show the banner once DOM is ready
    function showBanner() {
      var el = document.getElementById('ait-cookie-consent');
      if (el) el.style.display = 'flex';
    }
    if (document.readyState === 'loading') {
      document.addEventListener('DOMContentLoaded', showBanner);
    } else {
      showBanner();
    }
  
    // Esc key dismisses (same as "necessary only")
    document.addEventListener('keydown', function(e) {
      if (e.key === 'Escape') window.aitCookieConsent('necessary');
    });
  })();
  
  function aitCookieConsent(choice) {
    // Set cookie (180 days)
    var d = new Date();
    d.setTime(d.getTime() + 180 * 86400000);
    document.cookie = 'ait_cookie_consent=' + choice + ';expires=' + d.toUTCString() + ';path=/;SameSite=Lax';
  
    // Hide banner
    var el = document.getElementById('ait-cookie-consent');
    if (el) {
      el.style.opacity = '0';
      el.style.transition = 'opacity 0.2s ease';
      setTimeout(function() { el.style.display = 'none'; }, 200);
    }
  
    // If accepted all, load or schedule PostHog based on the page's analytics policy
    if (choice === 'all') {
      window._aitAnalyticsConsented = true;
      if (typeof window._aitSchedulePostHogLoad === 'function') {
        window._aitSchedulePostHogLoad();
      } else if (typeof window._aitLoadPostHog === 'function') {
        window._aitLoadPostHog();
      }
    }
  }
</script>

<!-- PostHog (gated behind cookie consent): -->
<script>
  window._aitPostHogConfig = { apiKey: "phc_O22rohygrHUsNDpWnaUqvRWverxN133wf8mAQQhGl2a", apiHost: "https://r.hq.aitinkerers.org" };
  window._aitDeferPostHogUntilIdle = true;
  window._aitLoadPostHog = function() {
    if (window._aitPostHogLoaded) return;
    window._aitPostHogLoaded = true;
    !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group identify setPersonProperties setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags resetGroups onFeatureFlags addFeatureFlagsHandler onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
    posthog.init(window._aitPostHogConfig.apiKey, { api_host: window._aitPostHogConfig.apiHost, defaults: "2026-01-30" });
  };
  window._aitSchedulePostHogLoad = function() {
    if (!window._aitDeferPostHogUntilIdle) {
      window._aitLoadPostHog();
      return;
    }
  
    var loadPostHog = function() { window._aitLoadPostHog(); };
    var scheduleAfterLoad = function() {
      if (window.requestIdleCallback) {
        window.requestIdleCallback(loadPostHog, { timeout: 3000 });
      } else {
        window.setTimeout(loadPostHog, 1500);
      }
    };
  
    if (document.readyState === "complete") {
      scheduleAfterLoad();
    } else {
      window.addEventListener("load", scheduleAfterLoad, { once: true });
    }
  };
  if (window._aitAnalyticsConsented) { window._aitSchedulePostHogLoad(); }
</script>

<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="L-gvwXkTcwPPiyZwn01UMy1kXwRL4pN-SfvsdKk2mczCUUZ5jRS3LWsdEklLZJtLrnuH7Mr3a_C69iRy4TUAjg" />
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
<meta charset='utf-8'>
<meta content='width=device-width, initial-scale=1.0' name='viewport'>
<title>Currently Obsessed</title>
<meta content='Currently Obsessed - Joe Heitzeberg&#39;s blog from many years ago' name='description'>
<!-- Open Graph Meta -->
<meta content='Currently Obsessed' property='og:title'>
<meta content='website' property='og:type'>
<meta content='Currently Obsessed - Joe Heitzeberg&#39;s blog from many years ago' property='og:description'>
<meta content='https://currentlyobsessed.com/' property='og:url'>
<link href='https://currentlyobsessed.com/' rel='canonical'>
<meta content='https://sloppy-joe-app.imgix.net/prompted_banner/_Q3FbP66tKGQ.jpg?crop=edges&amp;fit=crop&amp;h=350&amp;w=1024' property='og:image'>
<!-- Twitter Cards -->
<meta content='summary' name='twitter:card'>
<meta content='Currently Obsessed' name='twitter:title'>
<meta content='Currently Obsessed - Joe Heitzeberg&#39;s blog from many years ago' name='twitter:description'>
<meta content='https://sloppy-joe-app.imgix.net/prompted_banner/_Q3FbP66tKGQ.jpg?crop=edges&amp;fit=crop&amp;h=350&amp;w=1024' name='twitter:image'>
<meta content='https://currentlyobsessed.com/' name='twitter:url'>
<style>
  .h1-seo {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    white-space: nowrap;
    border: 0;
  }
  .tw-nav-desktop {
    display: flex;
  }
  .tw-nav-mobile {
    display: none;
  }
  .tw-nav-compact .tw-nav-mobile {
    display: inline-flex !important;
  }
  .tw-nav-compact .tw-nav-hide-compact {
    display: none !important;
  }
  .tw-nav-collapsed .tw-nav-desktop {
    display: none !important;
  }
  .tw-nav-collapsed .tw-nav-mobile {
    display: inline-flex !important;
  }
  .tw-nav-collapse-1 .tw-nav-hide-1,
  .tw-nav-collapse-2 .tw-nav-hide-2,
  .tw-nav-collapse-3 .tw-nav-hide-3,
  .tw-nav-collapse-4 .tw-nav-hide-4,
  .tw-nav-collapse-5 .tw-nav-hide-5 {
    display: none !important;
  }
</style>
<link href='https://sloppy-joe-app.imgix.net' rel='preconnect'>
<link href='/?feed=rss2&amp;page=2' rel='next'>
<link as='image' fetchpriority='high' href='https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy' imagesizes='(max-width: 767px) calc(100vw - 2rem), 28rem' imagesrcset='https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=203&amp;w=360&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 360w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=270&amp;w=480&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 480w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 700w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=651&amp;w=960&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 960w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=950&amp;w=1400&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 1400w' rel='preload'>
<script type='application/ld+json'>{"@context":"https://schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"url":"https://currentlyobsessed.com/p/exploring-the-cutting-edge-key-trends-in-the-llm-and-generative-ai-developer-community","item":{"@type":"BlogPosting","headline":"Exploring the Cutting Edge: Key Trends in the LLM and Generative AI Developer Community","datePublished":"2023-07-27T16:36:00Z","url":"https://currentlyobsessed.com/p/exploring-the-cutting-edge-key-trends-in-the-llm-and-generative-ai-developer-community","image":"https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?fm=jpg"}},{"@type":"ListItem","position":2,"url":"https://currentlyobsessed.com/p/architecture-maestro-from-now-on","item":{"@type":"BlogPosting","headline":"Architecture Maestro from Now On","datePublished":"2023-03-22T15:47:00Z","url":"https://currentlyobsessed.com/p/architecture-maestro-from-now-on","image":"https://replicate.delivery/pbxt/AlzO1z4KcLbgIJIyyRZpr1UgRI7QuCcQeeEVDNBpRJYw0NqQA/out-0.png"}},{"@type":"ListItem","position":3,"url":"https://currentlyobsessed.com/p/about-calorie-coach","item":{"@type":"BlogPosting","headline":"About Calorie Coach","datePublished":"2023-01-01T22:54:00Z","url":"https://currentlyobsessed.com/p/about-calorie-coach","image":"https://sloppy-joe-app.imgix.net/blog_images/cc-png-bsCf.png?fm=jpg"}},{"@type":"ListItem","position":4,"url":"https://currentlyobsessed.com/p/launching-dream-page","item":{"@type":"BlogPosting","headline":"Launching DREAM.page","datePublished":"2022-11-10T20:22:00Z","url":"https://currentlyobsessed.com/p/launching-dream-page","image":"https://replicate.delivery/pbxt/JeZnWf3DHMhCIk3PtmbVcl4b4dC0SQPpdKDUqtBkfbQNnlefB/out-0.png"}},{"@type":"ListItem","position":5,"url":"https://currentlyobsessed.com/p/ai-assisted-blog-images","item":{"@type":"BlogPosting","headline":"AI assisted blog images","datePublished":"2022-10-23T07:10:00Z","url":"https://currentlyobsessed.com/p/ai-assisted-blog-images","image":"https://replicate.delivery/pbxt/T2ddJ2CeX5XcfkOtKA5aszo3wJaF7dZrezlAN1TtVDDXzjJgA/out-0.png"}},{"@type":"ListItem","position":6,"url":"https://currentlyobsessed.com/p/my-first-deep-learning-model-doo-doo-detective","item":{"@type":"BlogPosting","headline":"My first deep learning model: Doo Doo Detective","datePublished":"2022-09-26T21:25:00Z","url":"https://currentlyobsessed.com/p/my-first-deep-learning-model-doo-doo-detective","image":"https://sloppy-joe-app.imgix.net/blog_images/screen-shot-2022-09-26-at-39-30-pm-png-whfk.png?fm=jpg"}},{"@type":"ListItem","position":7,"url":"https://currentlyobsessed.com/p/stable-diffusion-test","item":{"@type":"BlogPosting","headline":"Stable Diffusion Test","datePublished":"2022-09-09T00:37:00Z","url":"https://currentlyobsessed.com/p/stable-diffusion-test","image":"https://sloppy-joe-app.imgix.net/blog_images/51b9a3aa-ce85-4574-ac1b-48c3d330f255-png-s-bd.png?fm=jpg"}},{"@type":"ListItem","position":8,"url":"https://currentlyobsessed.com/p/zoom-meeting-backgrounds-dall-e-2","item":{"@type":"BlogPosting","headline":"Zoom meeting backgrounds (DALL·E 2)","datePublished":"2022-08-02T04:59:00Z","url":"https://currentlyobsessed.com/p/zoom-meeting-backgrounds-dall-e-2","image":"https://sloppy-joe-app.imgix.net/blog_images/ii_3wjehxu1q.png?fm=jpg"}},{"@type":"ListItem","position":9,"url":"https://currentlyobsessed.com/p/let-s-test-some-photo-frame-renders","item":{"@type":"BlogPosting","headline":"Let's test some photo frame renders!","datePublished":"2022-07-17T19:15:00Z","url":"https://currentlyobsessed.com/p/let-s-test-some-photo-frame-renders","image":"https://sloppy-joe-app.imgix.net/blog_images/ii_3aqn6f284.png?fm=jpg"}},{"@type":"ListItem","position":10,"url":"https://currentlyobsessed.com/p/more-dall-e-2-generations","item":{"@type":"BlogPosting","headline":"More DALL·E 2 Generations","datePublished":"2022-07-06T06:30:00Z","url":"https://currentlyobsessed.com/p/more-dall-e-2-generations","image":"https://images.aitinkerers.org/cdn-cgi/image/format=jpeg/blog_images/42-png-mock-polaroid-rQm9.png"}}]}</script>


<link href='/assets/co-favicon-95a130bbd92cc72edaddea293ba22517fa240513a657e0fd58318f6cf83404f2.ico' rel='icon' sizes='192x192' type='image/png'>
<link href='/assets/co-favicon-95a130bbd92cc72edaddea293ba22517fa240513a657e0fd58318f6cf83404f2.ico' rel='apple-touch-icon' sizes='192x192'>
<link rel="stylesheet" href="/assets/application_tw-5e66b3d7e62c37742dcaf22b5b6ca161781bdb640e476d3fa36fc1e1ee89dfd5.css" media="all" />
<script src="/assets/public_shell-3a5286691b145542a57189b98bea3921bb7c82e3a5024e70ffa8163ef9d6cff5.js" defer="defer"></script>
<script src="/assets/public_index-9ddcd182461c3613f16a55ba6b52fbb75358ed07c267d701b7a6dbbbb1d1d6df.js" defer="defer"></script>
<script src="/assets/public_jquery-618cce974b2f397e3fbeab017339a0598f76bfe16cc014b3c421988aaf647a9c.js"></script>
</head>
<body class='tw-light-public-assets'>
<div class='min-h-screen bg-slate-50'>
<header class='tw-site-header tw-site-header-centered border-b border-slate-200 bg-white'>
<div class='mx-auto flex h-20 max-w-5xl items-center justify-between px-6 py-2'>
<div class='w-10'></div>
<div class='flex h-full flex-1 items-center justify-center'>
<a class="tw-site-logo flex h-full items-center gap-2 transition-transform duration-150 ease-out hover:-translate-y-0.5 hover:scale-[1.02] focus-visible:-translate-y-0.5 focus-visible:scale-[1.02]" href="/"><img alt="Currently Obsessed" class="h-full w-auto max-h-full" style="height: 100% !important; width: auto !important; max-height: 100% !important; display: block;" src="https://sloppy-joe-app.imgix.net/www/co-logo.png" />
</a></div>
<div class='flex items-center gap-3 text-sm'>
<a class="tw-button-low-profile-white" href="/signin">Sign in</a>
</div>
</div>
</header>
<div class='hidden border-b border-slate-200 bg-white' data-mobile-menu>
<nav class='flex flex-col p-4 space-y-2'>
<a class="block rounded-lg px-4 py-2.5 text-base font-semibold text-slate-700 hover:bg-slate-100" href="/?tab=home">Home
</a><a class="block rounded-lg px-4 py-2.5 text-base font-semibold text-slate-700 hover:bg-slate-100" href="/">FAQ
</a><details class='group'>
<summary class='flex cursor-pointer items-center justify-between rounded-lg px-4 py-2.5 text-base font-semibold text-slate-800 hover:bg-slate-100 marker:content-none'>
<span>Resources</span>
<span class='ml-auto text-slate-400 transition-transform group-open:rotate-90'>
<i class='fa fa-chevron-right'></i>
</span>
</summary>
<div class='mt-1 space-y-1 px-2'>
</div>
</details>
</nav>
</div>
<script>
    (function installTextClosestShim() {
      if (typeof window === 'undefined' || !window.Text || window.Text.prototype.closest) { return; }
      window.Text.prototype.closest = function(selector) {
        var parent = this.parentElement;
        if (!parent || typeof parent.closest !== 'function') { return null; }
        return parent.closest(selector);
      };
    })();
  
    function initHeaderNavCollapse() {
      function closestFromEventTarget(target, selector) {
        if (!target) { return null; }
        var element = target.nodeType === 1 ? target : target.parentElement;
        if (!element || typeof element.closest !== 'function') { return null; }
        return element.closest(selector);
      }
  
      if (!document.body.dataset.mobileMenuDelegate) {
        document.body.dataset.mobileMenuDelegate = "true";
        document.addEventListener('click', function(event) {
          var trigger = closestFromEventTarget(event.target, '[data-mobile-menu-trigger]');
          if (!trigger) { return; }
          var menu = document.querySelector('[data-mobile-menu]');
          if (!menu) { return; }
          menu.classList.toggle('hidden');
        });
      }
  
    function bindSmartMenuPanel(panel) {
      if (!panel) { return; }
      var triggerEl = panel.parentElement;
      if (!triggerEl) { return; }
  
      function adjustPanel() {
        panel.style.left = '';
        panel.style.right = '';
        panel.style.marginLeft = '';
        panel.style.marginRight = '';
        panel.style.transform = '';
  
        var rect = panel.getBoundingClientRect();
        var viewportWidth = window.innerWidth || document.documentElement.clientWidth;
        var gutter = 8;
        if (rect.left < gutter || rect.right > viewportWidth - gutter) {
          var desiredLeft = rect.left;
          if (rect.left < gutter) {
            desiredLeft = gutter;
          }
          if (rect.right > viewportWidth - gutter) {
            var maxLeft = viewportWidth - gutter - rect.width;
            desiredLeft = Math.max(gutter, maxLeft);
          }
          var shift = desiredLeft - rect.left;
          if (shift !== 0) {
            panel.style.transform = "translateX(" + shift + "px)";
          }
        }
      }
  
      triggerEl.addEventListener('mouseenter', adjustPanel);
      triggerEl.addEventListener('focusin', adjustPanel);
      window.addEventListener('resize', adjustPanel);
    }
  
    function bindSmartSubmenu(triggerEl, panelSelector) {
      var panel = triggerEl.querySelector(panelSelector);
      if (!panel) { return; }
  
      function showPanel() {
        panel.classList.remove('hidden');
        panel.style.left = '';
        panel.style.right = '';
        panel.style.marginLeft = '';
        panel.style.marginRight = '';
        panel.style.transform = '';
  
        var rect = panel.getBoundingClientRect();
        var viewportWidth = window.innerWidth || document.documentElement.clientWidth;
        if (rect.left < 8) {
          panel.style.right = 'auto';
          panel.style.left = '100%';
          panel.style.marginLeft = '0';
          panel.style.marginRight = '0';
        } else if (rect.right > viewportWidth - 8) {
          panel.style.left = 'auto';
          panel.style.right = '100%';
          panel.style.marginLeft = '0';
          panel.style.marginRight = '0';
        }
      }
  
      function hidePanel() {
        panel.classList.add('hidden');
      }
  
      triggerEl.addEventListener('mouseenter', showPanel);
      triggerEl.addEventListener('mouseleave', hidePanel);
      triggerEl.addEventListener('focusin', showPanel);
      triggerEl.addEventListener('focusout', function(e) {
        if (!triggerEl.contains(e.relatedTarget)) { hidePanel(); }
      });
    }
  
    var sponsorshipSubmenus = document.querySelectorAll('.sponsorship-submenu');
    sponsorshipSubmenus.forEach(function(triggerEl) {
      bindSmartSubmenu(triggerEl, '.sponsorship-submenu-panel');
    });
  
    var adminToolsSubmenus = document.querySelectorAll('.admin-tools-submenu');
    adminToolsSubmenus.forEach(function(triggerEl) {
      bindSmartSubmenu(triggerEl, '.admin-tools-submenu-panel');
    });
  
    var hiddenPagesSubmenus = document.querySelectorAll('.hidden-pages-submenu');
    hiddenPagesSubmenus.forEach(function(triggerEl) {
      bindSmartSubmenu(triggerEl, '.hidden-pages-submenu-panel');
    });
  
    var navMenuPanels = document.querySelectorAll('.tw-nav-menu-panel');
    navMenuPanels.forEach(function(panel) {
      bindSmartMenuPanel(panel);
    });
  
    function updateResponsiveNav() {
      var headerRow = document.querySelector('[data-header-row]');
      if (!headerRow) { return; }
      if (headerRow.dataset.forceDesktopNav === 'true') { return; }
      var left = headerRow.querySelector('[data-header-left]');
      var leftContent = headerRow.querySelector('[data-header-left-content]');
      var right = headerRow.querySelector('[data-header-right]');
      var nav = headerRow.querySelector('[data-header-nav]');
      if (!left || !right || !nav || !leftContent) { return; }
      headerRow.classList.remove('tw-nav-collapsed', 'tw-nav-compact');
      for (var i = 0; i <= 5; i++) {
        headerRow.classList.remove('tw-nav-collapse-' + i);
      }
      var minLevel = window.innerWidth < 1060 ? 1 : 0;
      var available = headerRow.clientWidth - right.offsetWidth - 24;
      var maxLevel = 5;
      var selectedLevel = maxLevel;
      for (var level = minLevel; level <= maxLevel; level++) {
        headerRow.classList.add('tw-nav-collapse-' + level);
        if (level > 0) {
          headerRow.classList.add('tw-nav-compact');
        } else {
          headerRow.classList.remove('tw-nav-compact');
        }
        available = headerRow.clientWidth - right.offsetWidth - 24;
        var needed = leftContent.scrollWidth + nav.scrollWidth + 24;
        if (needed <= available) {
          selectedLevel = level;
          break;
        }
      }
      for (var cleanup = 0; cleanup <= maxLevel; cleanup++) {
        if (cleanup !== selectedLevel) {
          headerRow.classList.remove('tw-nav-collapse-' + cleanup);
        }
      }
      if (selectedLevel > 0) {
        headerRow.classList.add('tw-nav-compact');
      } else {
        headerRow.classList.remove('tw-nav-compact');
      }
      headerRow.classList.add('tw-nav-collapse-' + selectedLevel);
      available = headerRow.clientWidth - right.offsetWidth - 24;
      var stillOverflow = leftContent.scrollWidth + nav.scrollWidth + 24 > available;
      if (!stillOverflow) {
        var leftRect = leftContent.getBoundingClientRect();
        var navRect = nav.getBoundingClientRect();
        var rightRect = right.getBoundingClientRect();
        stillOverflow = navRect.left < (leftRect.right - 2) || navRect.right > (rightRect.left + 2);
      }
      if (stillOverflow) {
        headerRow.classList.add('tw-nav-collapsed');
      }
    }
  
    var navResizeTimer = null;
    function scheduleNavCheck() {
      if (navResizeTimer) { window.clearTimeout(navResizeTimer); }
      navResizeTimer = window.setTimeout(updateResponsiveNav, 100);
    }
  
    updateResponsiveNav();
    if (document.fonts && document.fonts.ready) {
      document.fonts.ready.then(updateResponsiveNav);
    }
    window.addEventListener('resize', scheduleNavCheck);
    if (window.ResizeObserver) {
      var headerRow = document.querySelector('[data-header-row]');
      if (headerRow) {
        var ro = new ResizeObserver(scheduleNavCheck);
        ro.observe(headerRow);
        var left = headerRow.querySelector('[data-header-left]');
        var right = headerRow.querySelector('[data-header-right]');
        if (left) { ro.observe(left); }
        if (right) { ro.observe(right); }
      }
    }
  }
  
  function onHeaderReady(callback) {
    if (document.readyState === 'loading') {
      document.addEventListener('DOMContentLoaded', callback, { once: true });
    } else {
      callback();
    }
  }
  
  onHeaderReady(initHeaderNavCollapse);
  document.addEventListener('turbo:load', initHeaderNavCollapse);
  document.addEventListener('turbo:render', initHeaderNavCollapse);
  document.addEventListener('turbolinks:load', initHeaderNavCollapse);
</script>
<main class='mx-auto w-full max-w-5xl px-0 md:px-6 pt-0 pb-24 md:pb-4'>
<h1 class='h1-seo'>Currently Obsessed</h1>
<section class='tw-tab-panel' data-tab-panel='home'>
<div class='pt-6'>
<section class='mt-0 px-4 md:px-0'>
<script>
  (function() {
    var script = document.currentScript;
    var root = script ? script.previousElementSibling : null;
    if (!root || !root.matches('[data-subscribe-widget]')) {
      root = document.querySelector('[data-subscribe-widget="blog_lnurn0090"]');
    }
    if (!root) { return; }
  
    var cookieName = "email_subscribed_blog_lnurn0090";
    var weblogToken = "blog_lnurn0090";
    var subscribeForm = root.querySelector('.subscribe-form');
    var successMessage = root.querySelector('.success-message');
    var errorMessage = root.querySelector('.error-message');
    var errorMessageText = root.querySelector('.error-message-text');
    var emailInput = root.querySelector('.email-value');
    var submitButton = root.querySelector('.subscribe-to-blog');
    var clickCount = 0;
  
    function csrfToken() {
      if (typeof window.sjCsrfToken === 'function') {
        return window.sjCsrfToken();
      }
      var meta = document.querySelector('meta[name="csrf-token"]');
      return meta ? meta.getAttribute('content') : '';
    }
  
    function readCookie(name) {
      var encodedName = encodeURIComponent(name) + '=';
      var parts = document.cookie ? document.cookie.split('; ') : [];
      for (var i = 0; i < parts.length; i++) {
        if (parts[i].indexOf(encodedName) === 0) {
          return decodeURIComponent(parts[i].slice(encodedName.length));
        }
      }
      return '';
    }
  
    function removeCookie(name) {
      document.cookie = encodeURIComponent(name) + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/';
    }
  
    function setHidden(element, hidden) {
      if (element) {
        element.classList.toggle('hidden', hidden);
      }
    }
  
    function setupForm() {
      var isCookied = readCookie(cookieName);
      setHidden(subscribeForm, !!isCookied);
      setHidden(successMessage, !isCookied);
      setHidden(errorMessage, true);
    }
  
    function submitSubscribe() {
      if (!emailInput || !submitButton) { return; }
      var email = emailInput.value;
      var body = new URLSearchParams();
      body.append('weblog_token', weblogToken);
      body.append('email', email);
      submitButton.disabled = true;
  
      fetch('/subscribe_email_to_blog', {
        method: 'POST',
        credentials: 'same-origin',
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
          'X-CSRF-Token': csrfToken()
        },
        body: body.toString()
      })
        .then(function(response) { return response.json(); })
        .then(function(data) {
          setHidden(subscribeForm, true);
          if (data.state === 'success') {
            setHidden(successMessage, false);
          } else {
            var message = data.message || 'Unable to subscribe.';
            setHidden(errorMessage, false);
            if (errorMessageText) { errorMessageText.textContent = message; }
            setTimeout(function() {
              setupForm();
            }, 3200);
          }
        })
        .catch(function() {
          setHidden(errorMessage, false);
          if (errorMessageText) { errorMessageText.textContent = 'Unable to subscribe.'; }
        })
        .finally(function() {
          submitButton.disabled = false;
        });
    }
  
    if (emailInput) {
      emailInput.addEventListener('keypress', function(e) {
        if (e.which === 13 || e.key === 'Enter') {
          submitSubscribe();
        }
      });
    }
  
    if (successMessage) {
      successMessage.addEventListener('click', function() {
        clickCount++;
        if (clickCount >= 2) {
          removeCookie(cookieName);
          setupForm();
        }
      });
    }
  
    if (submitButton) {
      submitButton.addEventListener('click', submitSubscribe);
    }
  
    setupForm();
  })();
</script>

</section>
</div>
<section class='mt-6 px-4 md:px-0' data-blog-filter-section>
<div class='mt-4 grid gap-6'>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/exploring-the-cutting-edge-key-trends-in-the-llm-and-generative-ai-developer-community'>
<img alt='A large, colorful, geometric sculpture is displayed in a darkened room, illuminated from within and by spotlights.  People are silhouetted in the foreground, interacting with projected images on the walls.' class='h-full w-full object-cover' decoding='async' fetchpriority='high' height='475' loading='eager' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy' srcset='https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=203&amp;w=360&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 360w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=270&amp;w=480&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 480w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 700w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=651&amp;w=960&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 960w, https://sloppy-joe-app.imgix.net/blog_images/out-jpg-4ShT.jpg?h=950&amp;w=1400&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/exploring-the-cutting-edge-key-trends-in-the-llm-and-generative-ai-developer-community'>
Exploring the Cutting Edge: <span class="event-title__suffix">Key Trends in the LLM and Generative AI Developer Community</span>
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>July 27, 2023</span>
<span class='text-slate-300'>·</span>
<span>3 minutes</span>
<span class='text-slate-300'>·</span>
<span>2 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:0c59ad32 --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_VN0FyZxK0P0" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX1ZOMEZ5WnhLMFAwIiwidXBkYXRlZF9hdCI6MTcyNTgxMzI3NSwidmVyc2lvbl9pZCI6MzY2NDYsImJvZHlfbWQ1IjoiN2ViZWNiZTg2YjE3MjI1NTRmYTI0NTMxNDBhZDYyZDAiLCJ0aXRsZV9tZDUiOiJjYzIyZjg2OTA3ZjdkNzI2YzE3MDM0ZjNmZjA4OGVjYyIsImFsZ28iOiJ2MjAyNi0wMi0wMyJ9" data-cache-updated="true">From AI Tinkerers’ proposals, trends focus on democratizing access (Skyglass, LEDITS, Relevance AI), automating workflows (Watto AI, Autonomous Finance, Cody), customizing experiences (Sonic Link, ai-jsx, MenuGPT), and multimodal/knowledge-synthesis work (Decoupage, AnswerCast, System Pro). Core challenges remain data engineering, scalable infra, prompt engineering, and intuitive UI design.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/exploring-the-cutting-edge-key-trends-in-the-llm-and-generative-ai-developer-community">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/architecture-maestro-from-now-on'>
<img alt='Architecture Maestro from Now On' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://replicate.delivery/pbxt/AlzO1z4KcLbgIJIyyRZpr1UgRI7QuCcQeeEVDNBpRJYw0NqQA/out-0.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy' srcset='https://replicate.delivery/pbxt/AlzO1z4KcLbgIJIyyRZpr1UgRI7QuCcQeeEVDNBpRJYw0NqQA/out-0.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 360w, https://replicate.delivery/pbxt/AlzO1z4KcLbgIJIyyRZpr1UgRI7QuCcQeeEVDNBpRJYw0NqQA/out-0.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 480w, https://replicate.delivery/pbxt/AlzO1z4KcLbgIJIyyRZpr1UgRI7QuCcQeeEVDNBpRJYw0NqQA/out-0.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 700w, https://replicate.delivery/pbxt/AlzO1z4KcLbgIJIyyRZpr1UgRI7QuCcQeeEVDNBpRJYw0NqQA/out-0.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 960w, https://replicate.delivery/pbxt/AlzO1z4KcLbgIJIyyRZpr1UgRI7QuCcQeeEVDNBpRJYw0NqQA/out-0.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/architecture-maestro-from-now-on'>
Architecture Maestro from Now On
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>March 22, 2023</span>
<span class='text-slate-300'>·</span>
<span>3 minutes</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:f3e8cea8 --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_SNdAwPWe1bw" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX1NOZEF3UFdlMWJ3IiwidXBkYXRlZF9hdCI6MTY3OTUwMjMwOSwidmVyc2lvbl9pZCI6ODQ5NCwiYm9keV9tZDUiOiI3OWFmYTA2ZWRkMjQxNTg5M2UxMTYwYTllYjlhY2YyZiIsInRpdGxlX21kNSI6ImQ4NTk0ZTRmNmEwMDBmZDA0NzBhZDQ2ODM3ODU4MzRkIiwiYWxnbyI6InYyMDI2LTAyLTAzIn0=" data-cache-updated="true">Architecture maestro mode with GPT-4: I outline objectives and have it code; for my 20-year home NAS of photos (Ruby/rsync/glacier), it pulls EXIF, reverse-geocodes, writes index.json per folder with hashes, rewrites and fixes gems, parallelizes IO, adds a progress bar and mutex; result runs in minutes, saving a day.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/architecture-maestro-from-now-on">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/about-calorie-coach'>
<img alt='Two screenshots of a mobile app, likely a calorie tracker, showing settings for text reminders and a log of food consumed on January 2, 2023.. Text: 10:51
Messages
CalorieCoach.ai
5G 50
Your Settings
Text reminders
Select up to 3 times per day to receive
reminders to log your calories. All times are in
Pacific Time Zone.
6 am PT
7 am PT
8 am PT
9 am PT
10 am PT
11 am PT
12 am PT
1 pm PT
2 pm PT
3 pm PT
4 pm PT
5 pm PT
6 pm PT
7 pm PT
8 pm PT
9 pm PT
10 pm PT
11 pm PT
JANUARY 2, 2023 807 calories
AA
caloriecoach.ai
10:51
Messages
JANUARY 2, 2023 807 calories
5G 50
TIME
NAME
CALORIES
10:46 AM
Kirkland
signature trail
mix (2 ounces)
200
10:39 AM
Kirkland
signature trail
mix (2 ounces)
210
10:39 AM
Nature valley
bar (1 bar)
190
9:53 AM
coffee (1 cup)
2
8:23 AM
coffee (1 cup)
5
8:23 AM
Lotus Biscoff
Cookies (2
cookies)
200
5:03 AM
glass of water (1
glass)
0
Total calories
807
Text Calorie Coach
(325) CALORIE
caloriecoach.ai – Private' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://sloppy-joe-app.imgix.net/blog_images/cc-png-bsCf.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68' srcset='https://sloppy-joe-app.imgix.net/blog_images/cc-png-bsCf.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 360w, https://sloppy-joe-app.imgix.net/blog_images/cc-png-bsCf.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 480w, https://sloppy-joe-app.imgix.net/blog_images/cc-png-bsCf.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 700w, https://sloppy-joe-app.imgix.net/blog_images/cc-png-bsCf.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 960w, https://sloppy-joe-app.imgix.net/blog_images/cc-png-bsCf.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/about-calorie-coach'>
About Calorie Coach
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>January 01, 2023</span>
<span class='text-slate-300'>·</span>
<span>2 minutes</span>
<span class='text-slate-300'>·</span>
<span>2 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:77252a68 --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp__dU2y5zmnKs" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX19kVTJ5NXptbktzIiwidXBkYXRlZF9hdCI6MTY3MjczODYyMiwidmVyc2lvbl9pZCI6NTYwMSwiYm9keV9tZDUiOiIwZjMwZTQwZGRjODZkNzJjMjY3MzRkYzBjNWM2NzNjOCIsInRpdGxlX21kNSI6Ijk0NjA3M2Y3NGJlZjRlM2M4ZDc4OGFiYzkyMmI2NTUyIiwiYWxnbyI6InYyMDI2LTAyLTAzIn0=" data-cache-updated="true">Calorie Coach is an AI-powered calorie-tracking assistant you text at 325-225-6743 or via caloriecoach.ai. It asks your age, gender, weight, and goals to tailor daily calories. Log foods by text, receive meal-time reminders, and use a unique URL to manage reminders, progress, and edits (USA/Canada/Australia).</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/about-calorie-coach">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/launching-dream-page'>
<img alt='Launching DREAM.page' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://replicate.delivery/pbxt/JeZnWf3DHMhCIk3PtmbVcl4b4dC0SQPpdKDUqtBkfbQNnlefB/out-0.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy' srcset='https://replicate.delivery/pbxt/JeZnWf3DHMhCIk3PtmbVcl4b4dC0SQPpdKDUqtBkfbQNnlefB/out-0.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 360w, https://replicate.delivery/pbxt/JeZnWf3DHMhCIk3PtmbVcl4b4dC0SQPpdKDUqtBkfbQNnlefB/out-0.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 480w, https://replicate.delivery/pbxt/JeZnWf3DHMhCIk3PtmbVcl4b4dC0SQPpdKDUqtBkfbQNnlefB/out-0.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 700w, https://replicate.delivery/pbxt/JeZnWf3DHMhCIk3PtmbVcl4b4dC0SQPpdKDUqtBkfbQNnlefB/out-0.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 960w, https://replicate.delivery/pbxt/JeZnWf3DHMhCIk3PtmbVcl4b4dC0SQPpdKDUqtBkfbQNnlefB/out-0.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/launching-dream-page'>
Launching DREAM.page
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>November 10, 2022</span>
<span class='text-slate-300'>·</span>
<span>1 minute</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:005c5194 --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_WZJ6KNwGmI0" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX1daSjZLTndHbUkwIiwidXBkYXRlZF9hdCI6MTY2ODQ4NTY5NywidmVyc2lvbl9pZCI6MjA0OCwiYm9keV9tZDUiOiIyMmQ1NDBiZmZhYTMzNmQ5MDg5NmRlZDgxMWMyMzdlZiIsInRpdGxlX21kNSI6ImJjMTMyMDQxZDhjYTA3MGM4NmViYzQxNmIxMDg2NjBlIiwiYWxnbyI6InYyMDI2LTAyLTAzIn0=" data-cache-updated="true">Today I launched DREAM.page, an AI-first personal publishing platform that lets me apply LLM learnings in a real app. It’s early, I’m excited to see how people use it. Check the video walkthrough and sign up at dream.page; DM me to move from wait list to product.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/launching-dream-page">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/ai-assisted-blog-images'>
<img alt='AI assisted blog images' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://replicate.delivery/pbxt/T2ddJ2CeX5XcfkOtKA5aszo3wJaF7dZrezlAN1TtVDDXzjJgA/out-0.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy' srcset='https://replicate.delivery/pbxt/T2ddJ2CeX5XcfkOtKA5aszo3wJaF7dZrezlAN1TtVDDXzjJgA/out-0.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 360w, https://replicate.delivery/pbxt/T2ddJ2CeX5XcfkOtKA5aszo3wJaF7dZrezlAN1TtVDDXzjJgA/out-0.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 480w, https://replicate.delivery/pbxt/T2ddJ2CeX5XcfkOtKA5aszo3wJaF7dZrezlAN1TtVDDXzjJgA/out-0.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 700w, https://replicate.delivery/pbxt/T2ddJ2CeX5XcfkOtKA5aszo3wJaF7dZrezlAN1TtVDDXzjJgA/out-0.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 960w, https://replicate.delivery/pbxt/T2ddJ2CeX5XcfkOtKA5aszo3wJaF7dZrezlAN1TtVDDXzjJgA/out-0.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format,compress&amp;q=68&amp;crop=faces,entropy 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/ai-assisted-blog-images'>
AI assisted blog images
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>October 23, 2022</span>
<span class='text-slate-300'>·</span>
<span>2 minutes</span>
<span class='text-slate-300'>·</span>
<span>4 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:0f1d3491 --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_r0BKw-4mYl8" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX3IwQkt3LTRtWWw4IiwidXBkYXRlZF9hdCI6MTY2OTY4ODQxMCwidmVyc2lvbl9pZCI6MzkxNiwiYm9keV9tZDUiOiI3MWZkZjMxZDJkNjA5YmU2MmFkOTkyM2E0NDA0NWRjYiIsInRpdGxlX21kNSI6ImJlOTY3MzZkOTA1MWM4MjFiMWZjMDgxMjg5ODA5ZmI5IiwiYWxnbyI6InYyMDI2LTAyLTAzIn0=" data-cache-updated="true">LONDON, Oct 23 — Former prime minister Boris Johnson pulled out of Britain's leadership contest, saying he had enough MPs to progress but far fewer than front-runner Rishi Sunak. Our AI-assisted blog post pairs this with image prompts and renders created via GPT-3 and Stable Diffusion.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/ai-assisted-blog-images">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/my-first-deep-learning-model-doo-doo-detective'>
<img alt='A screenshot of a Hugging Face application interface featuring a photo of a dog and text related to dog behavior analysis.. Text: Hugging Face
Search models, datasets, users...
Spaces: sloppyjoe/doodoodetective
App Files Community Settings
Models Datasets Spaces Docs Solutions Pricing
like 0 See logs • Running
Is this a photo of a doing his business? Or just a dog hanging out?
My dog Kona has a nasty habit of doing her business in a very particular spot in the upstairs of our house. Using this model, I&#39;ll be able to aim a
camera at that spot and send a text alert whenever she does this, so I&#39;ll have a better chance of correcting the bad behavior in the moment, which is
essential to training a dog.
img
Clear
Submit
output
normal
normal 98%
pooping 2%' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://sloppy-joe-app.imgix.net/blog_images/screen-shot-2022-09-26-at-39-30-pm-png-whfk.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68' srcset='https://sloppy-joe-app.imgix.net/blog_images/screen-shot-2022-09-26-at-39-30-pm-png-whfk.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 360w, https://sloppy-joe-app.imgix.net/blog_images/screen-shot-2022-09-26-at-39-30-pm-png-whfk.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 480w, https://sloppy-joe-app.imgix.net/blog_images/screen-shot-2022-09-26-at-39-30-pm-png-whfk.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 700w, https://sloppy-joe-app.imgix.net/blog_images/screen-shot-2022-09-26-at-39-30-pm-png-whfk.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 960w, https://sloppy-joe-app.imgix.net/blog_images/screen-shot-2022-09-26-at-39-30-pm-png-whfk.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/my-first-deep-learning-model-doo-doo-detective'>
My first deep learning model: <span class="event-title__suffix">Doo Doo Detective</span>
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>September 26, 2022</span>
<span class='text-slate-300'>·</span>
<span>3 minutes</span>
<span class='text-slate-300'>·</span>
<span>2 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:3fcf13ef --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_jUM8tsvGzXQ" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX2pVTTh0c3ZHelhRIiwidXBkYXRlZF9hdCI6MTY2NjQzNjUwNSwidmVyc2lvbl9pZCI6MjIsImJvZHlfbWQ1IjoiNGFjNGU2ZDZlMDE5Nzg4YmM5YTkwZDVmNzMwNTZhZTgiLCJ0aXRsZV9tZDUiOiI0ZTExZjY2NGE0ZGE5MWY0ZTVhZmZmODg2ZGNkZDA2OCIsImFsZ28iOiJ2MjAyNi0wMi0wMyJ9" data-cache-updated="true">Using Fast AI’s Practical Deep Learning for Coders, I fine-tuned ResNet-18 for a dog-pooping detector, training on images from DuckDuckGo and validating with a confusion matrix. I deployed a Gradio app on Hugging Face Spaces (sloppyjoe/doodoodetective) in ~2 hours; DALL·E 2 in-painting blocked dog-pooping content.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/my-first-deep-learning-model-doo-doo-detective">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/stable-diffusion-test'>
<img alt='A small brown dog is running through a muddy puddle, creating a splash of mud and water.' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://sloppy-joe-app.imgix.net/blog_images/51b9a3aa-ce85-4574-ac1b-48c3d330f255-png-s-bd.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy' srcset='https://sloppy-joe-app.imgix.net/blog_images/51b9a3aa-ce85-4574-ac1b-48c3d330f255-png-s-bd.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 360w, https://sloppy-joe-app.imgix.net/blog_images/51b9a3aa-ce85-4574-ac1b-48c3d330f255-png-s-bd.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 480w, https://sloppy-joe-app.imgix.net/blog_images/51b9a3aa-ce85-4574-ac1b-48c3d330f255-png-s-bd.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 700w, https://sloppy-joe-app.imgix.net/blog_images/51b9a3aa-ce85-4574-ac1b-48c3d330f255-png-s-bd.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 960w, https://sloppy-joe-app.imgix.net/blog_images/51b9a3aa-ce85-4574-ac1b-48c3d330f255-png-s-bd.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/stable-diffusion-test'>
Stable Diffusion Test
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>September 08, 2022</span>
<span class='text-slate-300'>·</span>
<span>1 minute</span>
<span class='text-slate-300'>·</span>
<span>4 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:19391d8c --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_D0iWMxk0wq0" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX0QwaVdNeGswd3EwIiwidXBkYXRlZF9hdCI6MTY2NjQzNjUwNSwidmVyc2lvbl9pZCI6MjksImJvZHlfbWQ1IjoiYjcwYWRmMDk2ZTU4N2JiNjdmZTc5ZDA2OGMxODdiN2IiLCJ0aXRsZV9tZDUiOiI3ZGM4MTk4NjE5YjhjZGJmYTJiMjQxYzBjOWEwZDc5MCIsImFsZ28iOiJ2MjAyNi0wMi0wMyJ9" data-cache-updated="true">Add photos to posts by selecting a description and clicking 'stable diffusion'—the system auto-inserts an <image-generation> tag and generates image results (e.g., “photo of a cute puppy jumping through a muddy pond, nikon d50, 100mm, bokeh”). It also supports magic tags like <rainbow> and <handwriting> for styling.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/stable-diffusion-test">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/zoom-meeting-backgrounds-dall-e-2'>
<img alt='A blurred photo of a home office or study, featuring a desk, computer, chair, and a bookshelf filled with books and other items.' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://sloppy-joe-app.imgix.net/blog_images/ii_3wjehxu1q.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy' srcset='https://sloppy-joe-app.imgix.net/blog_images/ii_3wjehxu1q.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 360w, https://sloppy-joe-app.imgix.net/blog_images/ii_3wjehxu1q.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 480w, https://sloppy-joe-app.imgix.net/blog_images/ii_3wjehxu1q.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 700w, https://sloppy-joe-app.imgix.net/blog_images/ii_3wjehxu1q.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 960w, https://sloppy-joe-app.imgix.net/blog_images/ii_3wjehxu1q.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68&amp;crop=faces%2Centropy 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/zoom-meeting-backgrounds-dall-e-2'>
Zoom meeting backgrounds <span class="event-title__parenthetical">(DALL·E 2)</span>
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>August 01, 2022</span>
<span class='text-slate-300'>·</span>
<span>1 minute</span>
<span class='text-slate-300'>·</span>
<span>67 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:7ab4126e --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_vp2tpuz25" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX3ZwMnRwdXoyNSIsInVwZGF0ZWRfYXQiOjE2NjY0MzY1MDYsInZlcnNpb25faWQiOjQwLCJib2R5X21kNSI6Ijk3OTMyZWY1Y2QxNzdiNmI1NWUzNjMwZmIzYzI1ZGEwIiwidGl0bGVfbWQ1IjoiN2VjMmZmZTRlZmNmMDU4MGQ1YTg3NWJlYWUxN2ZmYzEiLCJhbGdvIjoidjIwMjYtMDItMDMifQ==" data-cache-updated="true">Explore DALL·E 2 AI-generated Zoom backgrounds to add personality to your next meeting. A wide range of options ensures you’ll find the perfect background to make your meeting stand out.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/zoom-meeting-backgrounds-dall-e-2">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/let-s-test-some-photo-frame-renders'>
<img alt='A screenshot of a web page or application interface showing a text editor and image formatting options.. Text: CURRENTLY OBSESSED
Title
Let&#39;s test some photo frame renders!
Markdown
For fun, I&#39;m creating the blogging software I&#39;ve always wanted. One aspect is the idea of enabling
handwritten posts and beautiful visuals for the photos without much (any?) effort. It&#39;s a work in
progress, but here are some examples so far.
The editor looks like this:
Pretty simple, but also powerful.
&lt;handwriting&gt;To turn any text into handwriting, you can add some markup to it.&lt;/handwriting&gt;
**Results in:**
&lt;handwriting&gt;To turn any text into handwriting, you can add some markup to it.&lt;/handwriting&gt;
&lt;photorealpreview style=&quot;wood-frame-landscape&quot;&gt;
![](https://sloppy-joe-app.imgix.net/blog_images/ii_ljttyt75y.jpg)
&lt;/photorealpreview&gt;
AI WRITING TOOLS
TEXT FORMATTING
Handwriting Remove handwriting
UPCASE lowercase Titlecase
Capitalize
IMAGE FORMATTING
Polaroid iPhone 13 Pro
Macbook Pro Gallery Frame
Wood Frame Test Render
UPLOAD IMAGES
Drop file here or click to
upload.' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://sloppy-joe-app.imgix.net/blog_images/ii_3aqn6f284.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68' srcset='https://sloppy-joe-app.imgix.net/blog_images/ii_3aqn6f284.png?h=203&amp;w=360&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 360w, https://sloppy-joe-app.imgix.net/blog_images/ii_3aqn6f284.png?h=270&amp;w=480&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 480w, https://sloppy-joe-app.imgix.net/blog_images/ii_3aqn6f284.png?h=475&amp;w=700&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 700w, https://sloppy-joe-app.imgix.net/blog_images/ii_3aqn6f284.png?h=651&amp;w=960&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 960w, https://sloppy-joe-app.imgix.net/blog_images/ii_3aqn6f284.png?h=950&amp;w=1400&amp;fit=crop&amp;auto=format%2Ccompress&amp;q=68 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/let-s-test-some-photo-frame-renders'>
Let&#39;s test some photo frame renders!
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>July 17, 2022</span>
<span class='text-slate-300'>·</span>
<span>3 minutes</span>
<span class='text-slate-300'>·</span>
<span>15 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<!--cache-hit:ee66fa35 --><span class="" style="" data-cache-name="body_summary" data-cache-token="cp_cz94ezcot" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX2N6OTRlemNvdCIsInVwZGF0ZWRfYXQiOjE2NjY4NTI1NDEsInZlcnNpb25faWQiOjY5NywiYm9keV9tZDUiOiI1OWM4NzQ0ODNjMDM5ZjkyMThhOWExMGZlMzUwMzZkYSIsInRpdGxlX21kNSI6ImI5NWNhNTBjOTI5ZDkwY2JiNWM5MTI3Y2MyMTBkNjJmIiwiYWxnbyI6InYyMDI2LTAyLTAzIn0=" data-cache-updated="true">I'm building the blogging software I've always wanted, with handwritten posts and automatic photo framing. The new editor (~48 hours old) supports <handwriting>…</handwriting>, <photorealpreview> wrappers, and <photoeffect style="…"> (wood-frame-landscape/portrait, gallery-frame-portrait) that auto-orient images. Code blocks format nicely; Disqus integration with Octopress — I'll show you how in this post.</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/let-s-test-some-photo-frame-renders">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
<div data-blog-filter-item data-blog-filter-series='' data-blog-filter-topics=''>
<article class='group overflow-hidden rounded-2xl border bg-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-lg border-slate-200'>
<div class='grid grid-cols-1 items-start gap-0 md:grid-cols-[28rem_1fr]'>
<a class='relative block aspect-[16/9] overflow-hidden bg-slate-100 md:aspect-[700/475]' href='p/more-dall-e-2-generations'>
<img alt='A photo of a sculpture made of stacked rectangular blocks balanced on a rounded base, set against a blue sky with some clouds and trees in the background.' class='h-full w-full object-cover' decoding='async' fetchpriority='auto' height='475' loading='lazy' sizes='(max-width: 767px) calc(100vw - 2rem), 28rem' src='https://images.aitinkerers.org/cdn-cgi/image/height=475,width=700,fit=cover,format=auto,quality=68,gravity=face/blog_images/42-png-mock-polaroid-rQm9.png' srcset='https://images.aitinkerers.org/cdn-cgi/image/height=203,width=360,fit=cover,format=auto,quality=68,gravity=face/blog_images/42-png-mock-polaroid-rQm9.png 360w, https://images.aitinkerers.org/cdn-cgi/image/height=270,width=480,fit=cover,format=auto,quality=68,gravity=face/blog_images/42-png-mock-polaroid-rQm9.png 480w, https://images.aitinkerers.org/cdn-cgi/image/height=475,width=700,fit=cover,format=auto,quality=68,gravity=face/blog_images/42-png-mock-polaroid-rQm9.png 700w, https://images.aitinkerers.org/cdn-cgi/image/height=651,width=960,fit=cover,format=auto,quality=68,gravity=face/blog_images/42-png-mock-polaroid-rQm9.png 960w, https://images.aitinkerers.org/cdn-cgi/image/height=950,width=1400,fit=cover,format=auto,quality=68,gravity=face/blog_images/42-png-mock-polaroid-rQm9.png 1400w' width='700'>
<span class='pointer-events-none absolute inset-0 bg-gradient-to-tr from-slate-950/40 via-slate-900/5 to-transparent'></span>
</a>
<div class='flex flex-col gap-4 p-6 md:p-8'>
<div>
<div class='flex flex-wrap items-center justify-between gap-3 mb-4'>
</div>
<h3 class='text-2xl font-semibold text-slate-900 leading-tight'>
<a class='hover:text-slate-700' href='p/more-dall-e-2-generations'>
More DALL·E 2 Generations
</a>
</h3>
<div class='mt-2 flex flex-wrap items-center gap-2 text-sm text-slate-500'>
</div>
<span>July 05, 2022</span>
<span class='text-slate-300'>·</span>
<span>3 minutes</span>
<span class='text-slate-300'>·</span>
<span>36 photos</span>
<p class='mt-4 text-sm text-slate-600'>
<span class="" style="" data-cache-name="body_summary" data-cache-token="cp_xpue5h4al" data-cache-key="cache::eyJrZXkiOiJib2R5X3N1bW1hcnkiLCJjbGFzc19uYW1lIjoiQ29udGVudFBhZ2UiLCJ0b2tlbiI6ImNwX3hwdWU1aDRhbCIsInVwZGF0ZWRfYXQiOjE2NjY0MzY1MDUsInZlcnNpb25faWQiOjI4LCJib2R5X21kNSI6IjJiNzAzY2I3NTZmMjU5MDgzZjAxZTdlNDExOTc4MzYyIiwidGl0bGVfbWQ1IjoiMDA5NzY0NDZhN2ZlY2Y2ZmE3YWVkMjAzNjg0YzVjM2IiLCJhbGdvIjoidjIwMjYtMDItMDMifQ=="><i class="fa fa-spinner fa-spin"></i> Loading...</span>
</p>
<div class='mt-2 flex flex-wrap items-center gap-3'>
<a class="tw-button tw-button-link" href="p/more-dall-e-2-generations">Read post →</a>
</div>
</div>
</div>
</div>
</article>

</div>
</div>
</section>
<div class='mt-10 flex flex-col items-center gap-3'>
<nav class="pagy-bootstrap nav" aria-label="Pages"><ul class="pagination"><li class="page-item prev disabled"><a role="link" class="page-link" aria-disabled="true" aria-label="Previous"><i class="fa fa-angle-left" aria-hidden="true"></i><span class="sr-only visually-hidden">Previous</span></a></li><li class="page-item active"><a role="link" class="page-link" aria-current="page" aria-disabled="true">1</a></li><li class="page-item"><a href="/?feed=rss2&page=2" class="page-link">2</a></li><li class="page-item"><a href="/?feed=rss2&page=3" class="page-link">3</a></li><li class="page-item"><a href="/?feed=rss2&page=4" class="page-link">4</a></li><li class="page-item"><a href="/?feed=rss2&page=5" class="page-link">5</a></li><li class="page-item next"><a href="/?feed=rss2&page=2" class="page-link" aria-label="Next"><i class="fa fa-angle-right" aria-hidden="true"></i><span class="sr-only visually-hidden">Next</span></a></li></ul></nav>
</div>
</section>
<div aria-labelledby='new-post-modal-title' aria-modal='true' class='fixed inset-0 z-50 hidden' data-new-post-modal role='dialog'>
<div class='absolute inset-0 bg-slate-900/40 backdrop-blur-sm' data-new-post-modal-backdrop></div>
<div class='relative mx-auto w-full max-w-2xl px-4 py-10 sm:py-16'>
<div class='rounded-3xl bg-white p-8 shadow-2xl ring-1 ring-slate-200'>
<div class='flex items-start justify-between gap-6'>
<h2 class='text-2xl font-semibold text-slate-900' id='new-post-modal-title'>Create a new page or event</h2>
<button aria-label='Close' class='rounded-full p-2 text-slate-400 transition hover:bg-slate-100 hover:text-slate-600' data-new-post-modal-close type='button'>
<i class='fas fa-times'></i>
</button>
</div>
<div class='mt-6 grid gap-4'>
<button class='flex items-start gap-4 rounded-2xl border border-slate-100 bg-slate-50 p-5 text-left transition hover:border-[#31439b]/30 hover:bg-white hover:shadow-md' data-new-post-choice='event' type='button'>
<div class='flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-white shadow-sm'>
<svg style="display:inline-block;vertical-align:middle;" width="24" height="24"  viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2V5" stroke="#31439b" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 2V5" stroke="#31439b" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M3.5 9.09H20.5" stroke="#31439b" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M21 8.5V17C21 20 19.5 22 16 22H8C4.5 22 3 20 3 17V8.5C3 5.5 4.5 3.5 8 3.5H16C19.5 3.5 21 5.5 21 8.5Z" stroke="#31439b" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.6947 13.7H15.7037" stroke="#31439b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.6947 16.7H15.7037" stroke="#31439b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.9955 13.7H12.0045" stroke="#31439b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.9955 16.7H12.0045" stroke="#31439b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.29431 13.7H8.30329" stroke="#31439b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.29431 16.7H8.30329" stroke="#31439b" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/></svg><!-- icon: calendar-thick -->
</div>
<div class='flex flex-col gap-1'>
<div class='text-base font-bold text-slate-900'>AI-Assisted Event</div>
<div class='text-sm text-slate-500 leading-snug'>Generate a full event page with AI based on your instructions.</div>
</div>
</button>
<button class='flex items-start gap-4 rounded-2xl border border-slate-100 bg-slate-50 p-5 text-left transition hover:border-[#31439b]/30 hover:bg-white hover:shadow-md' data-new-post-choice='content' type='button'>
<div class='flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-white shadow-sm'>
<svg style="display:inline-block;vertical-align:middle;" width="24"  height="24" fill="#31439b" viewBox="0 0 512 512" id="icons" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"><path d="M208,512a24.84,24.84,0,0,1-23.34-16l-39.84-103.6a16.06,16.06,0,0,0-9.19-9.19L32,343.34a25,25,0,0,1,0-46.68l103.6-39.84a16.06,16.06,0,0,0,9.19-9.19L184.66,144a25,25,0,0,1,46.68,0l39.84,103.6a16.06,16.06,0,0,0,9.19,9.19l103,39.63A25.49,25.49,0,0,1,400,320.52a24.82,24.82,0,0,1-16,22.82l-103.6,39.84a16.06,16.06,0,0,0-9.19,9.19L231.34,496A24.84,24.84,0,0,1,208,512Zm66.85-254.84h0Z"></path><path d="M88,176a14.67,14.67,0,0,1-13.69-9.4L57.45,122.76a7.28,7.28,0,0,0-4.21-4.21L9.4,101.69a14.67,14.67,0,0,1,0-27.38L53.24,57.45a7.31,7.31,0,0,0,4.21-4.21L74.16,9.79A15,15,0,0,1,86.23.11,14.67,14.67,0,0,1,101.69,9.4l16.86,43.84a7.31,7.31,0,0,0,4.21,4.21L166.6,74.31a14.67,14.67,0,0,1,0,27.38l-43.84,16.86a7.28,7.28,0,0,0-4.21,4.21L101.69,166.6A14.67,14.67,0,0,1,88,176Z"></path><path d="M400,256a16,16,0,0,1-14.93-10.26l-22.84-59.37a8,8,0,0,0-4.6-4.6l-59.37-22.84a16,16,0,0,1,0-29.86l59.37-22.84a8,8,0,0,0,4.6-4.6L384.9,42.68a16.45,16.45,0,0,1,13.17-10.57,16,16,0,0,1,16.86,10.15l22.84,59.37a8,8,0,0,0,4.6,4.6l59.37,22.84a16,16,0,0,1,0,29.86l-59.37,22.84a8,8,0,0,0-4.6,4.6l-22.84,59.37A16,16,0,0,1,400,256Z"></path></g></svg><!-- icon: gen_ai -->
</div>
<div class='flex flex-col gap-1'>
<div class='text-base font-bold text-slate-900'>AI-Assisted Content Page</div>
<div class='text-sm text-slate-500 leading-snug'>Create a blog post or page draft using AI.</div>
</div>
</button>
<button class='flex items-start gap-4 rounded-2xl border border-slate-100 bg-slate-50 p-5 text-left transition hover:border-[#31439b]/30 hover:bg-white hover:shadow-md' data-new-post-choice='blank' type='button'>
<div class='flex h-12 w-12 shrink-0 items-center justify-center rounded-full bg-white shadow-sm'>
<i class='fas fa-file text-slate-400 text-xl'></i>
</div>
<div class='flex flex-col gap-1'>
<div class='text-base font-bold text-slate-900'>Blank Page</div>
<div class='text-sm text-slate-500 leading-snug'>Start from scratch with a clean slate.</div>
</div>
</button>
</div>
<div class='mt-6 flex justify-center'>
<button class='tw-button tw-button-ghost' data-new-post-modal-close type='button'>Cancel</button>
</div>
</div>
</div>
</div>
<script>
  (function() {
    document.addEventListener('click', function(e) {
      var inquireLink = e.target.closest('.how-to-inquire');
      if (!inquireLink) { return; }
      e.preventDefault();
      document.querySelectorAll('.how-to-inquire-instructions').forEach(function(el) {
        el.classList.remove('hidden');
      });
      document.querySelectorAll('.how-to-inquire-link').forEach(function(el) {
        el.classList.add('hidden');
      });
    });
  
    var tabButtons = document.querySelectorAll('[data-tab-target]');
    var tabPanels = document.querySelectorAll('[data-tab-panel]');
    if (!tabButtons.length || !tabPanels.length) { return; }
  
    function applyFeaturedCityIconTheme(element) {
      var scope = element ? element.closest('.tw-featured-city') : null;
      var cards = scope ? [scope] : Array.from(document.querySelectorAll('.tw-featured-city'));
      cards.forEach(function(card) {
        var icon = card.querySelector('.featured-city-icon div');
        if (!icon) { return; }
  
        if (card.classList.contains('tw-region-usa')) {
          icon.style.setProperty('background-color', '#ffffff', 'important');
          icon.style.setProperty('color', '#2563eb', 'important');
          icon.style.setProperty('border-color', 'rgba(37, 99, 235, 0.45)', 'important');
          icon.style.setProperty('box-shadow', 'none', 'important');
        } else if (card.classList.contains('tw-region-canada')) {
          icon.style.setProperty('background-color', '#ffffff', 'important');
          icon.style.setProperty('color', '#dc2626', 'important');
          icon.style.setProperty('border-color', 'rgba(220, 38, 38, 0.45)', 'important');
          icon.style.setProperty('box-shadow', 'none', 'important');
        } else if (card.classList.contains('tw-region-europe')) {
          icon.style.setProperty('background-color', '#ffffff', 'important');
          icon.style.setProperty('color', '#16a34a', 'important');
          icon.style.setProperty('border-color', 'rgba(22, 163, 74, 0.45)', 'important');
          icon.style.setProperty('box-shadow', 'none', 'important');
        } else if (card.classList.contains('tw-region-mea')) {
          icon.style.setProperty('background-color', '#ffffff', 'important');
          icon.style.setProperty('color', '#475569', 'important');
          icon.style.setProperty('border-color', 'rgba(71, 85, 105, 0.35)', 'important');
          icon.style.setProperty('box-shadow', 'none', 'important');
        } else if (card.classList.contains('tw-region-asia')) {
          icon.style.setProperty('background-color', '#ffffff', 'important');
          icon.style.setProperty('color', '#d97706', 'important');
          icon.style.setProperty('border-color', 'rgba(217, 119, 6, 0.45)', 'important');
          icon.style.setProperty('box-shadow', 'none', 'important');
        } else {
          icon.style.setProperty('background-color', '#ffffff', 'important');
          icon.style.setProperty('color', '#475569', 'important');
          icon.style.setProperty('border-color', 'rgba(71, 85, 105, 0.35)', 'important');
          icon.style.setProperty('box-shadow', 'none', 'important');
        }
      });
    }
  
    function activateTab(target) {
      tabButtons.forEach(function(button) {
        var isActive = button.getAttribute('data-tab-target') === target;
        if (button.classList.contains('tw-tab-link')) {
          button.classList.toggle('tw-tab-link-active', isActive);
        } else {
          button.classList.toggle('tw-tab-button-active', isActive);
        }
      });
      tabPanels.forEach(function(panel) {
        var isActive = panel.getAttribute('data-tab-panel') === target;
        panel.classList.toggle('hidden', !isActive);
      });
    }
  
    tabButtons.forEach(function(button) {
      button.addEventListener('click', function() {
        activateTab(button.getAttribute('data-tab-target'));
      });
    });
  
    var defaultTab = "home";
    if (defaultTab !== 'home') {
      activateTab(defaultTab);
    }
  
    var communityTabs = document.querySelectorAll('[data-community-tab-target]');
    var communityPanels = document.querySelectorAll('[data-community-panel]');
    var communitySearch = document.querySelector('[data-community-search]');
    if (communityTabs.length && communityPanels.length) {
      var communityFuseIndexes = {};
      var activeCommunityPanel = 'featured';
      function activateCommunityTab(target) {
        activeCommunityPanel = target;
        updateCommunitySlider(target);
        communityTabs.forEach(function(tab) {
          var isActive = tab.getAttribute('data-community-tab-target') === target;
          tab.classList.toggle('bg-white', !tab.classList.contains('community-tab-button') && isActive);
          tab.classList.toggle('shadow-sm', !tab.classList.contains('community-tab-button') && isActive);
          tab.classList.toggle('text-slate-900', !tab.classList.contains('community-tab-button') && isActive);
          tab.classList.toggle('text-slate-500', !tab.classList.contains('community-tab-button') && !isActive);
          tab.classList.toggle('bg-slate-900', tab.classList.contains('community-tab-button') && isActive);
          tab.classList.toggle('text-white', tab.classList.contains('community-tab-button') && isActive);
          tab.classList.toggle('shadow-sm', tab.classList.contains('community-tab-button') && isActive);
          tab.classList.toggle('text-slate-500', tab.classList.contains('community-tab-button') && !isActive);
        });
        communityPanels.forEach(function(panel) {
          panel.classList.toggle('hidden', panel.getAttribute('data-community-panel') !== target);
        });
        if (communitySearch && communitySearch.value && target === 'featured') {
          communitySearch.value = '';
        }
        filterCities(communitySearch ? communitySearch.value : '');
      }
      communityTabs.forEach(function(tab) {
        tab.addEventListener('click', function() {
          activateCommunityTab(tab.getAttribute('data-community-tab-target'));
        });
      });
      var defaultCommunityPanel = "featured";
      if (defaultCommunityPanel !== 'featured' && defaultCommunityPanel !== 'all') {
        defaultCommunityPanel = 'featured';
      }
      activateCommunityTab(defaultCommunityPanel);
  
      function panelFuseKey(panel) {
        return panel.getAttribute('data-community-panel') || 'unknown';
      }
  
      function normalizeSearchTerm(value) {
        if (!value) { return ''; }
        var normalized = value.toLowerCase();
        if (normalized.normalize) {
          normalized = normalized.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
        }
        return normalized;
      }
  
      function buildCommunityFuse(panel) {
        var key = panelFuseKey(panel);
        if (communityFuseIndexes[key]) { return; }
        var items = Array.from(panel.querySelectorAll('[data-city-name]'));
        var entries = items.map(function(item) {
          var rawName = (item.getAttribute('data-city-name') || '').toLowerCase();
          return { name: rawName, name_normalized: normalizeSearchTerm(rawName), element: item };
        });
        var fuse = null;
        if (window.Fuse) {
          fuse = new Fuse(entries, {
            keys: ['name', 'name_normalized'],
            threshold: 0.32,
            ignoreLocation: true,
            minMatchCharLength: 2
          });
        }
        communityFuseIndexes[key] = { entries: entries, fuse: fuse };
      }
  
      function toggleCityRowIcon(entry, showIcon) {
        var icon = entry.element.querySelector('[data-city-icon]');
        var dot = entry.element.querySelector('[data-city-dot]');
        if (!icon || !dot) { return; }
        icon.classList.toggle('hidden', !showIcon);
        dot.classList.toggle('hidden', showIcon);
      }
  
      function filterCities(query) {
        var q = query.toLowerCase().trim();
        var qNormalized = normalizeSearchTerm(q);
        var hasMatches = false;
        communityPanels.forEach(function(panel) {
          if (panel.getAttribute('data-community-panel') !== activeCommunityPanel) { return; }
          buildCommunityFuse(panel);
          var index = communityFuseIndexes[panelFuseKey(panel)];
          var matched = [];
          if (q.length === 0) {
            matched = index.entries;
          } else if (index.fuse && q.length >= 2) {
            matched = index.fuse.search(q).map(function(result) { return result.item; });
          } else {
            matched = index.entries.filter(function(entry) {
              return entry.name.indexOf(q) !== -1 || entry.name_normalized.indexOf(qNormalized) !== -1;
            });
          }
  
          index.entries.forEach(function(entry) {
            var isHidden = q.length > 0 && matched.indexOf(entry) === -1;
            entry.element.classList.toggle('hidden', isHidden);
            toggleCityRowIcon(entry, q.length > 0 && !isHidden);
            if (!isHidden) { hasMatches = true; }
          });
  
          var groups = panel.querySelectorAll('[data-city-section="group"]');
          groups.forEach(function(group) {
            var groupItems = group.querySelectorAll('[data-city-name]');
            var visible = Array.from(groupItems).some(function(item) {
              return !item.classList.contains('hidden');
            });
            group.classList.toggle('hidden', q.length > 0 && !visible);
          });
          var regions = panel.querySelectorAll('[data-city-section="region"]');
          regions.forEach(function(region) {
            var regionGroups = region.querySelectorAll('[data-city-section="group"]');
            var visible = Array.from(regionGroups).some(function(group) {
              return !group.classList.contains('hidden');
            });
            region.classList.toggle('hidden', q.length > 0 && !visible);
          });
        });
        var emptyState = document.querySelector('[data-community-empty-state]');
        if (emptyState) {
          var showEmpty = q.length > 0 && !hasMatches;
          emptyState.classList.toggle('hidden', !showEmpty);
          var queryNode = emptyState.querySelector('[data-community-empty-query]');
          if (queryNode) {
            queryNode.textContent = q.length > 0 ? '"' + q + '"' : 'your city';
          }
        }
      }
  
      if (communitySearch) {
        communitySearch.addEventListener('input', function() {
          if (activeCommunityPanel !== 'all') {
            activateCommunityTab('all');
          }
          filterCities(communitySearch.value);
        });
      }
  
      var clearButton = document.querySelector('[data-community-clear-search]');
      if (clearButton && communitySearch) {
        clearButton.addEventListener('click', function() {
          communitySearch.value = '';
          if (activeCommunityPanel !== 'all') {
            activateCommunityTab('all');
          }
          filterCities('');
          communitySearch.focus();
        });
      }
  
      function updateCommunitySlider(target) {
        var switcher = document.querySelector('.community-tab-switcher');
        if (!switcher) { return; }
        var slider = switcher.querySelector('.community-tab-slider');
        if (!slider) { return; }
        var activeButton = switcher.querySelector('[data-community-tab-target="' + target + '"]');
        if (!activeButton) { return; }
        var switcherRect = switcher.getBoundingClientRect();
        var buttonRect = activeButton.getBoundingClientRect();
        slider.style.width = buttonRect.width + 'px';
        slider.style.transform = 'translateX(' + (buttonRect.left - switcherRect.left) + 'px)';
      }
  
      window.addEventListener('resize', function() {
        updateCommunitySlider(activeCommunityPanel);
      });
    }
  
    applyFeaturedCityIconTheme();
    var iconWrappers = document.querySelectorAll('.tw-featured-city .featured-city-icon');
    if (window.MutationObserver && iconWrappers.length) {
      var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
          if (mutation.type === 'childList') {
            applyFeaturedCityIconTheme(mutation.target);
          }
        });
      });
      iconWrappers.forEach(function(wrapper) {
        observer.observe(wrapper, { childList: true, subtree: true });
      });
    }
    window.applyFeaturedCityIconTheme = applyFeaturedCityIconTheme;
  })();
  
  (function() {
    var root = document.querySelector('[data-blog-filter-root]');
    if (!root) { return; }
  
    var buttons = Array.from(root.querySelectorAll('[data-blog-filter-kind]'));
    var items = Array.from(document.querySelectorAll('[data-blog-filter-item]'));
    var sections = Array.from(document.querySelectorAll('[data-blog-filter-section]'));
    var divider = document.querySelector('[data-blog-filter-divider]');
    var emptyState = document.querySelector('[data-blog-filter-empty]');
    var status = root.querySelector('[data-blog-filter-status]');
    var loadingState = document.querySelector('[data-blog-filter-loading]');
    var loadingTimer = null;
  
    function tokensFor(item, kind) {
      var value = item.getAttribute('data-blog-filter-' + kind) || '';
      return value.split(/\s+/).filter(Boolean);
    }
  
    function itemMatches(item, kind, value) {
      if (kind === 'all') { return true; }
      return tokensFor(item, kind).indexOf(value) !== -1;
    }
  
    function setButtonState(activeButton) {
      buttons.forEach(function(button) {
        var active = button === activeButton;
        var kind = button.getAttribute('data-blog-filter-kind');
        button.classList.toggle('bg-slate-900', active);
        button.classList.toggle('text-white', active);
        button.classList.toggle('border-slate-900', active && kind !== 'all');
        button.classList.toggle('shadow-sm', active);
        button.classList.toggle('hover:bg-slate-900', active);
        button.classList.toggle('hover:text-white', active);
  
        if (!active && kind === 'topics') {
          button.classList.add('bg-white', 'text-slate-900', 'border-slate-200', 'hover:border-slate-300', 'hover:bg-slate-50', 'hover:text-black');
          button.classList.remove('bg-slate-900', 'text-white', 'border-slate-900', 'hover:bg-slate-900', 'hover:text-white');
        } else if (!active && kind === 'series') {
          button.classList.add('bg-indigo-50', 'text-slate-900', 'border-indigo-100', 'hover:border-indigo-200', 'hover:bg-white', 'hover:text-black');
          button.classList.remove('bg-slate-900', 'text-white', 'border-slate-900', 'hover:bg-slate-900', 'hover:text-white');
        } else if (!active && kind === 'all') {
          button.classList.add('bg-white', 'text-slate-900', 'border', 'border-slate-200', 'hover:border-slate-300', 'hover:bg-slate-50', 'hover:text-black');
          button.classList.remove('bg-slate-900', 'text-white', 'hover:bg-slate-900', 'hover:text-white');
        } else if (active) {
          button.classList.remove('bg-white', 'bg-indigo-50', 'text-slate-900', 'text-indigo-700', 'border-indigo-100', 'border-slate-200', 'hover:border-slate-300', 'hover:border-indigo-200', 'hover:bg-slate-50', 'hover:bg-white', 'hover:text-black');
        }
      });
    }
  
    function updateSections() {
      var visibleSections = 0;
      sections.forEach(function(section) {
        var sectionItems = Array.from(section.querySelectorAll('[data-blog-filter-item]'));
        var visible = sectionItems.some(function(item) { return !item.classList.contains('hidden'); });
        section.classList.toggle('hidden', !visible);
        if (visible) { visibleSections += 1; }
      });
      if (divider) {
        divider.classList.toggle('hidden', visibleSections < 2);
      }
    }
  
    function setLoading(isLoading) {
      if (loadingState) {
        loadingState.classList.toggle('hidden', !isLoading);
      }
      sections.forEach(function(section) {
        section.classList.toggle('opacity-40', isLoading);
        section.classList.toggle('pointer-events-none', isLoading);
      });
    }
  
    function applyFilterToItems(kind, value) {
      var shown = 0;
      items.forEach(function(item) {
        var matches = itemMatches(item, kind, value);
        item.classList.toggle('hidden', !matches);
        if (matches) { shown += 1; }
      });
  
      updateSections();
  
      if (emptyState) {
        emptyState.classList.toggle('hidden', shown > 0);
      }
      if (status) {
        status.classList.toggle('hidden', kind === 'all');
        status.textContent = shown + (shown === 1 ? ' post' : ' posts');
      }
    }
  
    function applyFilter(kind, value, activeButton) {
      setButtonState(activeButton);
      if (loadingTimer) {
        window.clearTimeout(loadingTimer);
      }
      setLoading(true);
  
      window.requestAnimationFrame(function() {
        window.setTimeout(function() {
          applyFilterToItems(kind, value);
          loadingTimer = window.setTimeout(function() {
            setLoading(false);
          }, 220);
        }, 20);
      });
    }
  
    buttons.forEach(function(button) {
      button.addEventListener('click', function() {
        applyFilter(
          button.getAttribute('data-blog-filter-kind'),
          button.getAttribute('data-blog-filter-value'),
          button
        );
      });
    });
  })();
  
  (function() {
    var modal = document.querySelector('[data-new-post-modal]');
    if (!modal) { return; }
  
    var closeButtons = modal.querySelectorAll('[data-new-post-modal-close]');
    var backdrop = modal.querySelector('[data-new-post-modal-backdrop]');
    var choiceButtons = modal.querySelectorAll('[data-new-post-choice]');
  
    function openNewPostModal() {
      modal.classList.remove('hidden');
      document.body.classList.add('overflow-hidden');
    }
  
    function closeNewPostModal() {
      modal.classList.add('hidden');
      document.body.classList.remove('overflow-hidden');
    }
  
    $(document).on('click', '.ai-assisted-draft, .new-post-selector', function(e) {
      e.preventDefault();
      openNewPostModal();
    });
  
    if (backdrop) {
      backdrop.addEventListener('click', closeNewPostModal);
    }
  
    closeButtons.forEach(function(button) {
      button.addEventListener('click', closeNewPostModal);
    });
  
    choiceButtons.forEach(function(button) {
      button.addEventListener('click', function() {
        var choice = button.getAttribute('data-new-post-choice');
        closeNewPostModal();
        if (choice === 'event') {
          askForInstructions("✨Guide the AI-Assisted Event✨", "event");
        } else if (choice === 'content') {
          askForInstructions("✨Guide the AI-Assisted Content Page✨", "content");
        } else if (choice === 'blank') {
          do_new_blank_post();
        }
      });
    });
  
    document.addEventListener('keydown', function(e) {
      if (e.key === 'Escape' && !modal.classList.contains('hidden')) {
        closeNewPostModal();
      }
    });
  })();
  
  function askForInstructions(title, type) {
    var message = "Please provide any input about the " + type + " you'd like to create. The " + type + " will be created and adapted to reflect your input here, giving you suitable starting point.";
    ask_with_callback(title, message, function(params, instructions) { do_ai_assisted_draft(type, instructions); }, {}, "", "Submit");
  }
  
  function do_ai_assisted_draft(type, instructions) {
    var values = {
      instructions: instructions,
      type: type
    };
  
    show_my_spinner();
    var url = "/blog/blog_lnurn0090/do_ai_assisted_draft";
    $.post(url, values)
      .done(function(result) {
        var state = result && (result.state || result.status);
        if (state == "error") {
          hide_my_spinner();
          show_big_error("Error", result.message || "Unable to start the AI-assisted draft.");
        } else if (state == "success") {
          show_working("Booting up the AI...", "gen-ai-pulse", AI_DRAFT_TIMEOUT_SECS);
  
          setTimeout(function() {
            hide_working();
            show_big_info(
              "✨ AI-Assisted " + type.charAt(0).toUpperCase() + type.slice(1) + " ✨",
              "<i class='fas fa-coffee'></i> Your AI-assisted " + type + " is on the way! This may take a few moments. We will email you once it is ready. This may take up to 3 minutes."
            );
          }, 2000);
        } else {
          show_ai_assisted_draft_error(null, "Unable to start the AI-assisted draft. Please try again.");
        }
      })
      .fail(function(xhr) {
        show_ai_assisted_draft_error(xhr);
      });
  }
  
  function do_new_blank_post() {
    var values = {};
    show_working("Creating a new blank post...");
    $.post("/content_page/new", values)
      .done(function(result) {
        if (result.state == "error") {
          show_big_error("Error", result.message);
        } else if (result.state == "success") {
          var message = result.message;
          show_tailwind_toast(message);
          var contentPageToken = result.content_page_token;
          window.location.href = "/content_page/" + contentPageToken + "/editor_v2";
        }
      });
  }
</script>

</main>
</div>
<div class='js-mobile-bottom-nav js-mobile-floating-ui fixed inset-x-0 bottom-0 z-[2147483647] md:hidden'>
<div class='ait-mobile-bottom-nav-shell mx-auto max-w-md px-4'>
<div class='ait-mobile-bottom-nav-bar rounded-[26px] border-2 border-[#3d53c2] bg-white shadow-[0_-10px_28px_rgba(61,83,194,0.22)]'>
<div class='flex h-full items-center justify-between px-5'>
<a class="ait-mobile-bottom-nav-item flex flex-1 flex-col items-center justify-center gap-1 text-[11px] font-semibold text-[#3d53c2]" href="/events"><svg style="display:inline-block;vertical-align:middle;" width="22" height="22"  viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2V5" stroke="#3d53c2" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M16 2V5" stroke="#3d53c2" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M3.5 9.09H20.5" stroke="#3d53c2" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M21 8.5V17C21 20 19.5 22 16 22H8C4.5 22 3 20 3 17V8.5C3 5.5 4.5 3.5 8 3.5H16C19.5 3.5 21 5.5 21 8.5Z" stroke="#3d53c2" stroke-width="2.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.6947 13.7H15.7037" stroke="#3d53c2" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.6947 16.7H15.7037" stroke="#3d53c2" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.9955 13.7H12.0045" stroke="#3d53c2" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M11.9955 16.7H12.0045" stroke="#3d53c2" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.29431 13.7H8.30329" stroke="#3d53c2" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.29431 16.7H8.30329" stroke="#3d53c2" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/></svg><!-- icon: calendar-thick -->
Events
</a><a class="ait-mobile-bottom-nav-item flex flex-1 flex-col items-center justify-center gap-1 text-[11px] font-semibold text-[#3d53c2]" href="/gallery"><i class='fa fa-images text-[20px] text-[#3d53c2]'></i>
Gallery
</a></div>
</div>
</div>
</div>
<footer class='tw-site-footer border-t border-slate-200 bg-white'>
<div class='mx-auto flex max-w-5xl flex-col items-center justify-between gap-2 px-6 py-6 text-sm text-slate-500 md:flex-row'>
<div class='flex items-center gap-2'>
<span>Created with <a href='https://DREAM.page' class='text-strong looks-like-link-dotted'>DREAM.page</a></span>
<span aria-hidden='true'>·</span>
<a class="hover:text-slate-700" target="_blank" rel="noopener" href="https://aitfund.ai">AIT Fund</a>
</div>
</div>

</footer>


<!-- / Resume functionality moved to resume_summary.js and will only load when needed -->

<script>
  window.enhancePrismCopyButtons = window.enhancePrismCopyButtons || function(root) {
    var copyIconHtml = '<!-- copy svg --><svg style=\"display:inline-block;vertical-align:middle;\" width=\"18\" height=\"18\"  viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 5h8a2 2 0 0 1 2 2v8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/><rect x=\"5\" y=\"9\" width=\"10\" height=\"10\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"2\"/><\/svg><!-- icon: copy -->';
    var scope = root && root.querySelectorAll ? root : document;
  
    scope.querySelectorAll("div.code-toolbar .copy-to-clipboard-button").forEach(function(button) {
      if (!button || button.dataset.sjPrismCopyEnhanced === "true") {
        return;
      }
  
      var label = button.querySelector("span");
      if (!label) {
        return;
      }
  
      label.classList.add("prism-copy-button__label");
  
      var icon = document.createElement("span");
      icon.className = "prism-copy-button__icon";
      icon.setAttribute("aria-hidden", "true");
      icon.innerHTML = copyIconHtml;
      button.insertBefore(icon, label);
  
      var successIcon = document.createElement("span");
      successIcon.className = "prism-copy-button__success-icon";
      successIcon.setAttribute("aria-hidden", "true");
      successIcon.textContent = "✓";
      button.appendChild(successIcon);
  
      button.classList.add("prism-copy-button--enhanced");
      button.dataset.sjPrismCopyEnhanced = "true";
    });
  };
  
  window.observePrismCopyButtons = window.observePrismCopyButtons || function() {
    if (!window.MutationObserver || document.body.dataset.sjPrismCopyObserver === "true") {
      return;
    }
  
    var observer = new MutationObserver(function(mutations) {
      mutations.forEach(function(mutation) {
        mutation.addedNodes.forEach(function(node) {
          if (!(node instanceof HTMLElement)) {
            return;
          }
  
          if (node.matches && node.matches(".copy-to-clipboard-button")) {
            window.enhancePrismCopyButtons(node.parentNode || document);
          } else {
            window.enhancePrismCopyButtons(node);
          }
        });
      });
    });
  
    observer.observe(document.body, { childList: true, subtree: true });
    document.body.dataset.sjPrismCopyObserver = "true";
  };
  
  // console.log("loaded [[url]]") when the page is loaded
  $(document).ready(function() {
    var current_url = window.location.href;
  
    document.querySelectorAll('.show-page-body pre, .show-page-body--legacy pre').forEach(function(pre) {
      if (!pre.hasAttribute('data-prismjs-copy-timeout')) {
        pre.setAttribute('data-prismjs-copy-timeout', '1000');
      }
    });
    
    // Initialize Universal Alert Bar
    if (typeof UniversalAlertBar !== 'undefined') {
      UniversalAlertBar.init();
    }
    
    // Initialize Prism syntax highlighting
    if (typeof Prism !== 'undefined') {
      Prism.highlightAll();
    }
  
    // Initialize Mermaid diagrams (loaded via CDN on docs pages)
    if (typeof mermaid !== 'undefined') {
      mermaid.initialize({ startOnLoad: false, theme: 'neutral' });
      mermaid.run();
    }
  
    window.enhancePrismCopyButtons(document);
    window.observePrismCopyButtons();
  });
  
  // Do not change the table if there is only one row
  function smart_article_table_styles() {
    var tables = $(".show-page-body table");
    for (var i = 0; i < tables.length; i++) {
      var table = tables[i];
      // Check if table has more than one row
      if ($(table).find("tr").length > 1) {
        if ($(table).find("thead").length == 0) {
          var firstRow = $(table).find("tr")[0];
          $(table).prepend("<thead></thead>");
          // Change the td to th in that row
          var tds = $(firstRow).find("td");
          for (var j = 0; j < tds.length; j++) {
            var td = tds[j];
            $(td).replaceWith("<th>" + $(td).html() + "</th>");
          }
          $(table).find("thead").append(firstRow);
        }
      }
    }
  }
  
  // total hack.  I'm sorry.
  // inside of article.story, show-page-body, look for any tables
  // if the table is missing a thead elemnent, create one using the first row of the table as the thead row.
  $(document).ready(function() {
    //smart_article_table_styles();
  });
  
  // PostHog tracking (only if cookie consent granted)
  if (window._aitAnalyticsConsented && window.posthog && typeof window.posthog.identify === 'function' && "phc_O22rohygrHUsNDpWnaUqvRWverxN133wf8mAQQhGl2a".length > 0) {
    var posthogPersonProperties = {};
  
    if ("".length > 0) {
      posthog.identify("", posthogPersonProperties);
    }
  }
</script>

<script>
  (function() {
    var menu = document.querySelector('[data-city-menu]');
    if (!menu) { return; }
    var template = menu.querySelector('template[data-city-menu-template]');
    var panel = menu.querySelector('[data-city-menu-panel]');
    var media = window.matchMedia('(min-width: 768px)');
    var closeTimeout = null;
  
    function hydrateTemplate(target) {
      var templateEl = target && target.querySelector('template[data-lazy-template]');
      if (!templateEl) { return; }
      target.appendChild(templateEl.content.cloneNode(true));
      templateEl.remove();
      if (window.applyFeaturedCityIconTheme) {
        window.applyFeaturedCityIconTheme(target);
      }
    }
  
    function ensurePanel() {
      if (!panel && template) {
        menu.appendChild(template.content.cloneNode(true));
        template.remove();
        template = null;
        panel = menu.querySelector('[data-city-menu-panel]');
        if (panel) {
          panel.addEventListener('mouseenter', openMenu);
        }
        if (window.applyFeaturedCityIconTheme) {
          window.applyFeaturedCityIconTheme(panel);
        }
      }
      return panel;
    }
  
    function openMenu() {
      if (!media.matches) { return; }
      if (closeTimeout) { clearTimeout(closeTimeout); closeTimeout = null; }
      ensurePanel();
      menu.open = true;
    }
  
    function closeMenu() {
      if (!media.matches) { return; }
      closeTimeout = setTimeout(function() {
        menu.open = false;
      }, 200);
    }
  
    menu.addEventListener('mouseenter', openMenu);
    menu.addEventListener('mouseleave', closeMenu);
    menu.addEventListener('toggle', function() {
      if (menu.open) { ensurePanel(); }
    });
    if (panel) {
      panel.addEventListener('mouseenter', openMenu);
    }
    media.addEventListener('change', function() {
      if (!media.matches) { menu.open = false; }
    });
    document.querySelectorAll('[data-lazy-template-target]').forEach(function(target) {
      var details = target.closest('details');
      if (!details) { return; }
      details.addEventListener('toggle', function() {
        if (details.open) { hydrateTemplate(target); }
      });
    });
  })();
</script>
</body>
</html>
