{"@context":"https:\/\/schema.org","@type":"WebPage","metadata":{"page_id":46403,"page_name":"podcast","domain":"www.lildudesinsectacademy.com","url":"https:\/\/www.lildudesinsectacademy.com\/podcast","generated_at":"2026-04-01T00:02:30-07:00","last_modified":"2026-04-01T00:02:30-07:00"},"content":{"complete_text":"\r\n    Is there something you would like to see on the Podcast?\r\n\r\n\r\n    Leave recommendations Below!\r\n\n\nPodcasts\r\n\r\n  This is where you can find all of Bradon\u2019s Podcast Episodes. Bradon interviews real-life entomologists from all over the world. From the best places to visit to putting them in your salad, he covers everything bugs! Make sure to listen, enjoy, and share!\r\n\n\n\r\n  \r\n  \r\n    \r\n    \r\n  \r\n\r\n  \r\n  \r\n    \r\n      \r\n      Loading episodes...\r\n    \r\n  \r\n\r\n\r\n\r\nasync function loadPodcastEpisodes() {\r\n  const container = document.getElementById('episodes-container');\r\n  const iframe = document.getElementById('podcast-iframe');\r\n  \r\n  \/\/ Try multiple RSS feed URLs\r\n  const feedUrls = [\r\n    'https:\/\/anchor.fm\/s\/6f557d4\/podcast\/rss',\r\n    'https:\/\/anchor.fm\/lildudesacademy\/podcast\/rss',\r\n  ];\r\n  \r\n  for (const rssUrl of feedUrls) {\r\n    try {\r\n      console.log('Trying feed URL:', rssUrl);\r\n      \r\n      \/\/ Try with RSS2JSON service\r\n      const response = await fetch(`https:\/\/api.rss2json.com\/v1\/api.json?rss_url=${encodeURIComponent(rssUrl)}`);\r\n      const data = await response.json();\r\n      \r\n      console.log('Feed response:', data);\r\n      \r\n      if (data.status === 'ok' && data.items && data.items.length > 0) {\r\n        \/\/ Clear loading message\r\n        container.innerHTML = '';\r\n        \r\n        \/\/ Process each episode\r\n        data.items.forEach((item) => {\r\n          const title = item.title || 'Untitled Episode';\r\n          const description = item.description || item.content || '';\r\n          const link = item.link || item.guid || '';\r\n          const pubDate = item.pubDate || '';\r\n          \r\n          \/\/ Extract duration from description or enclosure\r\n          let duration = '';\r\n          if (item.enclosure && item.enclosure.duration) {\r\n            duration = item.enclosure.duration;\r\n          }\r\n          \r\n          \/\/ Get thumbnail\r\n          const imageUrl = item.thumbnail || item.enclosure?.thumbnail || data.feed?.image || '';\r\n          \r\n          \/\/ Format date\r\n          const date = new Date(pubDate);\r\n          const formattedDate = date.toLocaleDateString('en-US', { \r\n            year: 'numeric', \r\n            month: 'long', \r\n            day: 'numeric' \r\n          });\r\n          \r\n          \/\/ Format duration\r\n          const formattedDuration = duration ? formatDuration(duration) : '';\r\n          \r\n          \/\/ Extract episode slug from the link \r\n          const episodeSlug = link.split('\/').pop();\r\n          \r\n          \/\/ Create Anchor embed URL in same format as initial player\r\n          const embedUrl = `https:\/\/anchor.fm\/lildudesacademy\/embed\/episodes\/${episodeSlug}`;\r\n          \r\n          \/\/ Truncate title and description\r\n          const truncatedTitle = title.length > 60 ? title.substring(0, 60) + '...' : title;\r\n          \r\n          \/\/ Strip HTML from description\r\n          const tempDiv = document.createElement('div');\r\n          tempDiv.innerHTML = description;\r\n          const plainDescription = tempDiv.textContent || tempDiv.innerText || '';\r\n          const truncatedDesc = plainDescription.length > 150 ? plainDescription.substring(0, 150) + '...' : plainDescription;\r\n          \r\n          \/\/ Create episode card\r\n          const episodeCard = createEpisodeCard({\r\n            title: truncatedTitle,\r\n            description: truncatedDesc,\r\n            imageUrl,\r\n            embedUrl,\r\n            formattedDate,\r\n            formattedDuration\r\n          });\r\n          \r\n          container.appendChild(episodeCard);\r\n        });\r\n        \r\n        \/\/ Add Spotify link at the bottom\r\n        const spotifyLink = document.createElement('div');\r\n        spotifyLink.className = 'border-t border-gray-200 p-4 text-center bg-gray-50';\r\n        spotifyLink.innerHTML = `\r\n          Want to listen to all episodes?\r\n          \r\n            \r\n              \r\n            \r\n            Visit us on Spotify\r\n          \r\n        `;\r\n        container.appendChild(spotifyLink);\r\n        \r\n        return; \/\/ Success, exit function\r\n      }\r\n      \r\n    } catch (error) {\r\n      console.error('Error with feed URL:', rssUrl, error);\r\n    }\r\n  }\r\n  \r\n  \/\/ If we get here, all attempts failed\r\n  container.innerHTML = `\r\n    \r\n      Unable to load episodes\r\n      The podcast feed could not be loaded. Please check the RSS feed URL or try again later.\r\n    \r\n  `;\r\n}\r\n\r\nfunction createEpisodeCard({ title, description, imageUrl, embedUrl, formattedDate, formattedDuration }) {\r\n  const card = document.createElement('div');\r\n  card.className = 'border-b border-gray-200 hover:bg-gray-50 transition-colors duration-150';\r\n  \r\n  card.innerHTML = `\r\n    \r\n      \r\n        \r\n        \r\n          ${imageUrl ? `\r\n          ` : `\r\n          \r\n            \r\n              \r\n            \r\n          \r\n          `}\r\n        \r\n        \r\n        \r\n        \r\n          \r\n            ${title}\r\n          \r\n          \r\n            ${description}\r\n          \r\n          \r\n            ${formattedDate}\r\n            ${formattedDuration ? `\r\n              \u2022\r\n              ${formattedDuration}\r\n            ` : ''}\r\n          \r\n        \r\n        \r\n        \r\n        \r\n          \r\n            \r\n          \r\n        \r\n      \r\n    \r\n  `;\r\n  \r\n  \/\/ Add click handler to load episode in iframe\r\n  card.querySelector('.episode-item').addEventListener('click', function() {\r\n    const iframe = document.getElementById('podcast-iframe');\r\n    iframe.src = this.dataset.url;\r\n    \r\n    \/\/ Scroll to player\r\n    iframe.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n    \r\n    \/\/ Visual feedback\r\n    document.querySelectorAll('.episode-item').forEach(el => {\r\n      el.classList.remove('bg-blue-50');\r\n    });\r\n    this.classList.add('bg-blue-50');\r\n  });\r\n  \r\n  return card;\r\n}\r\n\r\nfunction formatDuration(seconds) {\r\n  if (!seconds || seconds === '0') return '';\r\n  \r\n  const duration = parseInt(seconds);\r\n  if (isNaN(duration)) return '';\r\n  \r\n  const hours = Math.floor(duration \/ 3600);\r\n  const minutes = Math.floor((duration % 3600) \/ 60);\r\n  const secs = duration % 60;\r\n  \r\n  if (hours > 0) {\r\n    return `${hours}:${String(minutes).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;\r\n  }\r\n  return `${minutes}:${String(secs).padStart(2, '0')}`;\r\n}\r\n\r\n\/\/ Load episodes when page loads\r\nif (document.readyState === 'loading') {\r\n  document.addEventListener('DOMContentLoaded', loadPodcastEpisodes);\r\n} else {\r\n  loadPodcastEpisodes();\r\n}\r\n","headings":[{"level":2,"text":"Is there something you would like to see on the Podcast?","from_bloq":627928,"tag":"h2"},{"level":1,"text":"Podcasts","from_bloq":627926,"tag":"h1"}],"paragraphs":[{"text":"Leave recommendations Below!","source_bloq_id":627928,"position":0},{"text":"This is where you can find all of Bradon\u2019s Podcast Episodes. Bradon interviews real-life entomologists from all over the world. From the best places to visit to putting them in your salad, he covers everything bugs! Make sure to listen, enjoy, and share!","source_bloq_id":627926,"position":1}],"sections":[{"section_id":"section_1","heading":"Is there something you would like to see on the Podcast?","full_text":"Is there something you would like to see on the Podcast? Leave recommendations Below!","source_bloq_id":627928,"bloq_type":"bloq-rich-text-editors","position":0,"word_count":14,"citeable":true},{"section_id":"section_2","heading":"Podcasts","full_text":"Podcasts This is where you can find all of Bradon\u2019s Podcast Episodes. Bradon interviews real-life entomologists from all over the world. From the best places to visit to putting them in your salad, he covers everything bugs! Make sure to listen, enjoy, and share!","source_bloq_id":627926,"bloq_type":"bloq-rich-text-editors","position":1,"word_count":45,"citeable":true},{"section_id":"section_3","heading":"","full_text":"First Name * Last Name * Email * CommentsIs there something you would like me to cover in a future Podcast Episode? Is there a guest you would like me to interview? What is your experience (if any) in Entomology? * Describe your incident Submit","source_bloq_id":627930,"bloq_type":"bloq-simple-contact-forms","position":1,"word_count":41,"citeable":true},{"section_id":"section_4","heading":"","full_text":"Loading episodes...","source_bloq_id":627927,"bloq_type":"bloq-htmls","position":2,"word_count":2,"citeable":true}],"word_count":567,"character_count":6432,"schema_description":"\r\n  \r\n  \r\n    \r\n    \r\n  \r\n\r\n  \r\n  \r\n    \r\n      \r\n      Loading episodes...\r\n    \r\n  \r\n\r\n\r\n\r\nasync function loadPodcastEpisodes() {\r\n  const container = document.getElementById('episodes-container');\r...","schema_enhanced":true,"last_schema_update":"2026-04-01 00:02:31 PDT"},"media":{"images":[{"url":"\/\/8bloqs.s3.us-west-2.amazonaws.com\/4042-5339\/full-140859-image-editor-result-1761764440-640w.webp","alt":"Close-up of a beetle with intricate patterns and textured shell, showing its antennae and legs. The beetle's surface has iridescent colors, mostly brown with subtle orange hues.","has_alt":true,"source_bloq_id":627929,"bloq_type":"bloq-images","position_in_page":0},{"url":"\/\/8bloqs.s3.us-west-2.amazonaws.com\/4042-5339\/full-140859-image-editor-result-1761764440.webp","alt":"Close-up of a beetle with intricate patterns and textured shell, showing its antennae and legs. The beetle's surface has iridescent colors, mostly brown with subtle orange hues.","has_alt":true,"source":"schema_image","width":1140,"height":295}],"videos":[],"galleries":[]},"links":{"internal":[],"external":[],"navigation":[]},"entities":{"people":[],"organizations":["Lil' Dudes Insect Academy"],"products":[],"locations":[],"landmarks":[],"businesses":[],"events":[]},"schema_org":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NGO","@id":"https:\/\/www.lildudesinsectacademy.com#organization","name":"Lil' Dudes Insect Academy","url":"https:\/\/www.lildudesinsectacademy.com\/","description":"Lil\u2019 Dudes Insect Academy inspires kids and families to discover the fascinating world of insects through hands-on learning, fun videos, podcasts, and educational resources. Founded by young entomologist Bradon, the academy\u2019s mission is to spark curiosity, encourage exploration, and grow the next generation of insect lovers and scientists.","additionalProperty":[],"priceRange":"$","missionStatement":"Firstly, awareness. Most people don\u2019t know what Entomology is, much less consider it as a legitimate career path. A staggering majority of Entomologists weren\u2019t even introduced to Entomology until college. We strive to introduce Entomology as a career option to Middle School and High School students.","taxExemptStatus":"501(c)(3)","knowsAbout":"Science education, K-12 entomology education, STEM outreach, youth science enrichment, and making entomology accessible to under","hasOfferCatalog":{"@type":"OfferCatalog","name":"Programs","itemListElement":[{"@type":"Offer","itemOffered":{"@type":"Service","name":"Weekly podcast, YouTube educational videos, online entomology resources, hands-on bug workshops and classes (insect pinning, specimen collection, field trips), and an upcoming online academy. Content and programs are tailored for teachers, parents, students, and researchers."}}]}},{"@type":"WebSite","@id":"https:\/\/www.lildudesinsectacademy.com#website","url":"https:\/\/www.lildudesinsectacademy.com","name":"Lil' Dudes Insect Academy"},{"@type":"WebPage","@id":"https:\/\/www.lildudesinsectacademy.com\/podcast#webpage","url":"https:\/\/www.lildudesinsectacademy.com\/podcast","name":"Podcast","isPartOf":{"@id":"https:\/\/www.lildudesinsectacademy.com#website"},"about":{"@id":"https:\/\/www.lildudesinsectacademy.com#organization"},"datePublished":"2025-10-29T18:55:59-07:00","dateModified":"2026-04-01T00:02:30-07:00","description":"Explore Bradon's podcasts featuring real-life entomologists. Discover bug facts, tips, and more! Listen now for exciting insights and share your thoughts!","breadcrumb":{"@id":"https:\/\/www.lildudesinsectacademy.com\/podcast#breadcrumb"}},{"@type":"BreadcrumbList","@id":"https:\/\/www.lildudesinsectacademy.com\/podcast#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lildudesinsectacademy.com"},{"@type":"ListItem","position":2,"name":"Podcast","item":"https:\/\/www.lildudesinsectacademy.com\/podcast"}]},{"@type":"ImageObject","width":1140,"height":295,"@context":"https:\/\/schema.org","contentUrl":"\/\/8bloqs.s3.us-west-2.amazonaws.com\/4042-5339\/full-140859-image-editor-result-1761764440.webp","description":"Close-up of a beetle with intricate patterns and textured shell, showing its antennae and legs. The beetle's surface has iridescent colors, mostly brown with subtle orange hues."},{"@type":"ContactPage","@context":"https:\/\/schema.org","description":"Contact form for inquiries and messages","mainContentOfPage":{"@type":"WebPageElement","cssSelector":".spark-contact-form"}},{"text":"\r\n  \r\n  \r\n    \r\n    \r\n  \r\n\r\n  \r\n  \r\n    \r\n      \r\n      Loading episodes...\r\n    \r\n  \r\n\r\n\r\n\r\nasync function loadPodcastEpisodes() {\r\n  const container = document.getElementById('episodes-container');\r\n  const iframe = document.getElementById('podcast-iframe');\r\n  \r\n  \/\/ Try multiple RSS feed URLs\r\n  const feedUrls = [\r\n    'https:\/\/anchor.fm\/s\/6f557d4\/podcast\/rss',\r\n    'https:\/\/anchor.fm\/lildudesacademy\/podcast\/rss',\r\n  ];\r\n  \r\n  for (const rssUrl of feedUrls) {\r\n    try {\r\n      console.log('Trying feed URL:', rssUrl);\r\n      \r\n      \/\/ Try with RSS2JSON service\r\n      const response = await fetch(`https:\/\/api.rss2json.com\/v1\/api.json?rss_url=${encodeURIComponent(rssUrl)}`);\r\n      const data = await response.json();\r\n      \r\n      console.log('Feed response:', data);\r\n      \r\n      if (data.status === 'ok' && data.items && data.items.length > 0) {\r\n        \/\/ Clear loading message\r\n        container.innerHTML = '';\r\n        \r\n        \/\/ Process each episode\r\n        data.items.forEach((item) => {\r\n          const title = item.title || 'Untitled Episode';\r\n          const description = item.description || item.content || '';\r\n          const link = item.link || item.guid || '';\r\n          const pubDate = item.pubDate || '';\r\n          \r\n          \/\/ Extract duration from description or enclosure\r\n          let duration = '';\r\n          if (item.enclosure && item.enclosure.duration) {\r\n            duration = item.enclosure.duration;\r\n          }\r\n          \r\n          \/\/ Get thumbnail\r\n          const imageUrl = item.thumbnail || item.enclosure?.thumbnail || data.feed?.image || '';\r\n          \r\n          \/\/ Format date\r\n          const date = new Date(pubDate);\r\n          const formattedDate = date.toLocaleDateString('en-US', { \r\n            year: 'numeric', \r\n            month: 'long', \r\n            day: 'numeric' \r\n          });\r\n          \r\n          \/\/ Format duration\r\n          const formattedDuration = duration ? formatDuration(duration) : '';\r\n          \r\n          \/\/ Extract episode slug from the link \r\n          const episodeSlug = link.split('\/').pop();\r\n          \r\n          \/\/ Create Anchor embed URL in same format as initial player\r\n          const embedUrl = `https:\/\/anchor.fm\/lildudesacademy\/embed\/episodes\/${episodeSlug}`;\r\n          \r\n          \/\/ Truncate title and description\r\n          const truncatedTitle = title.length > 60 ? title.substring(0, 60) + '...' : title;\r\n          \r\n          \/\/ Strip HTML from description\r\n          const tempDiv = document.createElement('div');\r\n          tempDiv.innerHTML = description;\r\n          const plainDescription = tempDiv.textContent || tempDiv.innerText || '';\r\n          const truncatedDesc = plainDescription.length > 150 ? plainDescription.substring(0, 150) + '...' : plainDescription;\r\n          \r\n          \/\/ Create episode card\r\n          const episodeCard = createEpisodeCard({\r\n            title: truncatedTitle,\r\n            description: truncatedDesc,\r\n            imageUrl,\r\n            embedUrl,\r\n            formattedDate,\r\n            formattedDuration\r\n          });\r\n          \r\n          container.appendChild(episodeCard);\r\n        });\r\n        \r\n        \/\/ Add Spotify link at the bottom\r\n        const spotifyLink = document.createElement('div');\r\n        spotifyLink.className = 'border-t border-gray-200 p-4 text-center bg-gray-50';\r\n        spotifyLink.innerHTML = `\r\n          Want to listen to all episodes?\r\n          \r\n            \r\n              \r\n            \r\n            Visit us on Spotify\r\n          \r\n        `;\r\n        container.appendChild(spotifyLink);\r\n        \r\n        return; \/\/ Success, exit function\r\n      }\r\n      \r\n    } catch (error) {\r\n      console.error('Error with feed URL:', rssUrl, error);\r\n    }\r\n  }\r\n  \r\n  \/\/ If we get here, all attempts failed\r\n  container.innerHTML = `\r\n    \r\n      Unable to load episodes\r\n      The podcast feed could not be loaded. Please check the RSS feed URL or try again later.\r\n    \r\n  `;\r\n}\r\n\r\nfunction createEpisodeCard({ title, description, imageUrl, embedUrl, formattedDate, formattedDuration }) {\r\n  const card = document.createElement('div');\r\n  card.className = 'border-b border-gray-200 hover:bg-gray-50 transition-colors duration-150';\r\n  \r\n  card.innerHTML = `\r\n    \r\n      \r\n        \r\n        \r\n          ${imageUrl ? `\r\n          ` : `\r\n          \r\n            \r\n              \r\n            \r\n          \r\n          `}\r\n        \r\n        \r\n        \r\n        \r\n          \r\n            ${title}\r\n          \r\n          \r\n            ${description}\r\n          \r\n          \r\n            ${formattedDate}\r\n            ${formattedDuration ? `\r\n              \u2022\r\n              ${formattedDuration}\r\n            ` : ''}\r\n          \r\n        \r\n        \r\n        \r\n        \r\n          \r\n            \r\n          \r\n        \r\n      \r\n    \r\n  `;\r\n  \r\n  \/\/ Add click handler to load episode in iframe\r\n  card.querySelector('.episode-item').addEventListener('click', function() {\r\n    const iframe = document.getElementById('podcast-iframe');\r\n    iframe.src = this.dataset.url;\r\n    \r\n    \/\/ Scroll to player\r\n    iframe.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n    \r\n    \/\/ Visual feedback\r\n    document.querySelectorAll('.episode-item').forEach(el => {\r\n      el.classList.remove('bg-blue-50');\r\n    });\r\n    this.classList.add('bg-blue-50');\r\n  });\r\n  \r\n  return card;\r\n}\r\n\r\nfunction formatDuration(seconds) {\r\n  if (!seconds || seconds === '0') return '';\r\n  \r\n  const duration = parseInt(seconds);\r\n  if (isNaN(duration)) return '';\r\n  \r\n  const hours = Math.floor(duration \/ 3600);\r\n  const minutes = Math.floor((duration % 3600) \/ 60);\r\n  const secs = duration % 60;\r\n  \r\n  if (hours > 0) {\r\n    return `${hours}:${String(minutes).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;\r\n  }\r\n  return `${minutes}:${String(secs).padStart(2, '0')}`;\r\n}\r\n\r\n\/\/ Load episodes when page loads\r\nif (document.readyState === 'loading') {\r\n  document.addEventListener('DOMContentLoaded', loadPodcastEpisodes);\r\n} else {\r\n  loadPodcastEpisodes();\r\n}\r\n","@type":"WebPage","@context":"https:\/\/schema.org","description":"\r\n  \r\n  \r\n    \r\n    \r\n  \r\n\r\n  \r\n  \r\n    \r\n      \r\n      Loading episodes...\r\n    \r\n  \r\n\r\n\r\n\r\nasync function loadPodcastEpisodes() {\r\n  const container = document.getElementById('episodes-container');\r..."}],"generated":"2026-04-01 00:02:31 PDT","generatedBy":"cp"},"bloqs":[{"bloq_item_id":627928,"bloq_type":"bloq-rich-text-editors","display_order":0,"data":{"bloq_type":"rich_text_content","description":"Rich text content with formatted HTML","content_type":"text","timestamp":"2026-04-01T00:02:29-07:00","statistics":{"word_count":14,"image_count":0,"link_count":0,"images_with_alt":0},"images":[],"links":[],"plain_text":"\r\n    Is there something you would like to see on the Podcast?\r\n\r\n\r\n    Leave recommendations Below!\r\n","paragraphs":["Leave recommendations Below!"]}},{"bloq_item_id":627929,"bloq_type":"bloq-images","display_order":0,"data":{"bloq_type":"single_image","description":"A single image bloq with optional link","image":{"url":"\/\/8bloqs.s3.us-west-2.amazonaws.com\/4042-5339\/full-140859-image-editor-result-1761764440.webp","alt_text":"Close-up of a beetle with intricate patterns and textured shell, showing its antennae and legs. The beetle's surface has iridescent colors, mostly brown with subtle orange hues.","has_alt":true,"width":1140,"height":295},"link":null,"llm_usefulness_score":80}},{"bloq_item_id":627926,"bloq_type":"bloq-rich-text-editors","display_order":1,"data":{"bloq_type":"rich_text_content","description":"Rich text content with formatted HTML","content_type":"text","timestamp":"2026-04-01T00:02:29-07:00","statistics":{"word_count":45,"image_count":0,"link_count":0,"images_with_alt":0},"images":[],"links":[],"plain_text":"Podcasts\r\n\r\n  This is where you can find all of Bradon\u2019s Podcast Episodes. Bradon interviews real-life entomologists from all over the world. From the best places to visit to putting them in your salad, he covers everything bugs! Make sure to listen, enjoy, and share!\r\n","paragraphs":["This is where you can find all of Bradon\u2019s Podcast Episodes. Bradon interviews real-life entomologists from all over the world. From the best places to visit to putting them in your salad, he covers everything bugs! Make sure to listen, enjoy, and share!"]}},{"bloq_item_id":627930,"bloq_type":"bloq-simple-contact-forms","display_order":1,"data":{"bloq_type":"contact_form","description":"Interactive contact form with configurable fields","content_type":"form","timestamp":"2026-04-01T00:02:30-07:00","form_configuration":{"enabled_fields_count":6,"enabled_fields":{"frm_first_name":{"type":"text","label":"First Name","required":true,"input_type":"text","composite":true,"composite_field":"name"},"frm_last_name":{"type":"text","label":"Last Name","required":true,"input_type":"text","composite":true,"composite_field":"name"},"frm_email":{"type":"email","label":"Email","required":true,"input_type":"email"},"frm_comment":{"type":"textarea","label":"CommentsIs there something you would like me to cover in a future Podcast Episode?","required":false,"rows":"5"},"frm_custom1":{"type":"textarea","label":" Is there a guest you would like me to interview?","required":false,"default":null,"rows":"5"},"frm_custom2":{"type":"textarea","label":"What is your experience (if any) in Entomology?","required":true,"default":null,"rows":"5"}},"has_thank_you_message":true,"spam_protection":true,"ajax_submission":true,"recaptcha_enabled":true,"conditional_layouts":{"email_phone_grid":false,"address_grid":false}},"accessibility":{"labels_provided":true,"required_indicators":true,"form_instructions":"All fields with asterisk (*) are required"},"security_features":{"csrf_protection":true,"honeypot_field":true,"input_validation":true,"recaptcha_v3":true},"theme_integration":{"custom_submit_button":true,"button_properties":{"text_color":"theme_defined","background_color":"theme_defined","border_color":"theme_defined"}}}},{"bloq_item_id":627927,"bloq_type":"bloq-htmls","display_order":2,"data":{"bloq_type":"content","description":"Raw HTML content with embedded elements","content_type":"html","timestamp":"2026-04-01T00:02:29-07:00","statistics":{"word_count":508,"element_count":8,"image_count":0,"link_count":0,"script_count":1,"style_count":0,"iframe_count":1,"images_with_alt":0},"content_analysis":{"has_scripts":true,"has_styles":false,"security_risk":"high"},"images":[],"links":[],"scripts":[{"position":1,"src":"","type":"","has_src":false,"has_content":true,"content_length":8132}],"styles":[],"iframes":[{"position":1,"src":"https:\/\/anchor.fm\/lildudesacademy\/embed","width":"","height":"","title":""}],"plain_text":"\r\n  \r\n  \r\n    \r\n    \r\n  \r\n\r\n  \r\n  \r\n    \r\n      \r\n      Loading episodes...\r\n    \r\n  \r\n\r\n\r\n\r\nasync function loadPodcastEpisodes() {\r\n  const container = document.getElementById('episodes-container');\r\n  const iframe = document.getElementById('podcast-iframe');\r\n  \r\n  \/\/ Try multiple RSS feed URLs\r\n  const feedUrls = [\r\n    'https:\/\/anchor.fm\/s\/6f557d4\/podcast\/rss',\r\n    'https:\/\/anchor.fm\/lildudesacademy\/podcast\/rss',\r\n  ];\r\n  \r\n  for (const rssUrl of feedUrls) {\r\n    try {\r\n      console.log('Trying feed URL:', rssUrl);\r\n      \r\n      \/\/ Try with RSS2JSON service\r\n      const response = await fetch(`https:\/\/api.rss2json.com\/v1\/api.json?rss_url=${encodeURIComponent(rssUrl)}`);\r\n      const data = await response.json();\r\n      \r\n      console.log('Feed response:', data);\r\n      \r\n      if (data.status === 'ok' && data.items && data.items.length > 0) {\r\n        \/\/ Clear loading message\r\n        container.innerHTML = '';\r\n        \r\n        \/\/ Process each episode\r\n        data.items.forEach((item) => {\r\n          const title = item.title || 'Untitled Episode';\r\n          const description = item.description || item.content || '';\r\n          const link = item.link || item.guid || '';\r\n          const pubDate = item.pubDate || '';\r\n          \r\n          \/\/ Extract duration from description or enclosure\r\n          let duration = '';\r\n          if (item.enclosure && item.enclosure.duration) {\r\n            duration = item.enclosure.duration;\r\n          }\r\n          \r\n          \/\/ Get thumbnail\r\n          const imageUrl = item.thumbnail || item.enclosure?.thumbnail || data.feed?.image || '';\r\n          \r\n          \/\/ Format date\r\n          const date = new Date(pubDate);\r\n          const formattedDate = date.toLocaleDateString('en-US', { \r\n            year: 'numeric', \r\n            month: 'long', \r\n            day: 'numeric' \r\n          });\r\n          \r\n          \/\/ Format duration\r\n          const formattedDuration = duration ? formatDuration(duration) : '';\r\n          \r\n          \/\/ Extract episode slug from the link \r\n          const episodeSlug = link.split('\/').pop();\r\n          \r\n          \/\/ Create Anchor embed URL in same format as initial player\r\n          const embedUrl = `https:\/\/anchor.fm\/lildudesacademy\/embed\/episodes\/${episodeSlug}`;\r\n          \r\n          \/\/ Truncate title and description\r\n          const truncatedTitle = title.length > 60 ? title.substring(0, 60) + '...' : title;\r\n          \r\n          \/\/ Strip HTML from description\r\n          const tempDiv = document.createElement('div');\r\n          tempDiv.innerHTML = description;\r\n          const plainDescription = tempDiv.textContent || tempDiv.innerText || '';\r\n          const truncatedDesc = plainDescription.length > 150 ? plainDescription.substring(0, 150) + '...' : plainDescription;\r\n          \r\n          \/\/ Create episode card\r\n          const episodeCard = createEpisodeCard({\r\n            title: truncatedTitle,\r\n            description: truncatedDesc,\r\n            imageUrl,\r\n            embedUrl,\r\n            formattedDate,\r\n            formattedDuration\r\n          });\r\n          \r\n          container.appendChild(episodeCard);\r\n        });\r\n        \r\n        \/\/ Add Spotify link at the bottom\r\n        const spotifyLink = document.createElement('div');\r\n        spotifyLink.className = 'border-t border-gray-200 p-4 text-center bg-gray-50';\r\n        spotifyLink.innerHTML = `\r\n          Want to listen to all episodes?\r\n          \r\n            \r\n              \r\n            \r\n            Visit us on Spotify\r\n          \r\n        `;\r\n        container.appendChild(spotifyLink);\r\n        \r\n        return; \/\/ Success, exit function\r\n      }\r\n      \r\n    } catch (error) {\r\n      console.error('Error with feed URL:', rssUrl, error);\r\n    }\r\n  }\r\n  \r\n  \/\/ If we get here, all attempts failed\r\n  container.innerHTML = `\r\n    \r\n      Unable to load episodes\r\n      The podcast feed could not be loaded. Please check the RSS feed URL or try again later.\r\n    \r\n  `;\r\n}\r\n\r\nfunction createEpisodeCard({ title, description, imageUrl, embedUrl, formattedDate, formattedDuration }) {\r\n  const card = document.createElement('div');\r\n  card.className = 'border-b border-gray-200 hover:bg-gray-50 transition-colors duration-150';\r\n  \r\n  card.innerHTML = `\r\n    \r\n      \r\n        \r\n        \r\n          ${imageUrl ? `\r\n          ` : `\r\n          \r\n            \r\n              \r\n            \r\n          \r\n          `}\r\n        \r\n        \r\n        \r\n        \r\n          \r\n            ${title}\r\n          \r\n          \r\n            ${description}\r\n          \r\n          \r\n            ${formattedDate}\r\n            ${formattedDuration ? `\r\n              \u2022\r\n              ${formattedDuration}\r\n            ` : ''}\r\n          \r\n        \r\n        \r\n        \r\n        \r\n          \r\n            \r\n          \r\n        \r\n      \r\n    \r\n  `;\r\n  \r\n  \/\/ Add click handler to load episode in iframe\r\n  card.querySelector('.episode-item').addEventListener('click', function() {\r\n    const iframe = document.getElementById('podcast-iframe');\r\n    iframe.src = this.dataset.url;\r\n    \r\n    \/\/ Scroll to player\r\n    iframe.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n    \r\n    \/\/ Visual feedback\r\n    document.querySelectorAll('.episode-item').forEach(el => {\r\n      el.classList.remove('bg-blue-50');\r\n    });\r\n    this.classList.add('bg-blue-50');\r\n  });\r\n  \r\n  return card;\r\n}\r\n\r\nfunction formatDuration(seconds) {\r\n  if (!seconds || seconds === '0') return '';\r\n  \r\n  const duration = parseInt(seconds);\r\n  if (isNaN(duration)) return '';\r\n  \r\n  const hours = Math.floor(duration \/ 3600);\r\n  const minutes = Math.floor((duration % 3600) \/ 60);\r\n  const secs = duration % 60;\r\n  \r\n  if (hours > 0) {\r\n    return `${hours}:${String(minutes).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;\r\n  }\r\n  return `${minutes}:${String(secs).padStart(2, '0')}`;\r\n}\r\n\r\n\/\/ Load episodes when page loads\r\nif (document.readyState === 'loading') {\r\n  document.addEventListener('DOMContentLoaded', loadPodcastEpisodes);\r\n} else {\r\n  loadPodcastEpisodes();\r\n}\r\n","html_structure":{"complexity":"low","interactive_elements":true,"styling_present":false,"multimedia_content":true}}}],"statistics":{"total_bloqs":5,"bloq_types":{"bloq-rich-text-editors":2,"bloq-images":1,"bloq-simple-contact-forms":1,"bloq-htmls":1},"total_images":1,"total_links":0,"total_words":567,"total_paragraphs":2,"schema_items":7,"business_fields":9,"media_items":2,"entity_count":1,"merged_schema_version":"3.0"},"citations":{"citeable_statements":[{"id":"stmt_1","statement":"Is there something you would like to see on the Podcast?","section_id":"section_1","bloq_id":627928,"type":"factual","word_count":11},{"id":"stmt_2","statement":"Podcasts This is where you can find all of Bradon\u2019s Podcast Episodes.","section_id":"section_2","bloq_id":627926,"type":"factual","word_count":13},{"id":"stmt_3","statement":"Is there a guest you would like me to interview?","section_id":"section_3","bloq_id":627930,"type":"factual","word_count":10},{"id":"stmt_4","statement":"What is your experience (if any) in Entomology?","section_id":"section_3","bloq_id":627930,"type":"factual","word_count":8}],"source_authority":{"domain":"www.lildudesinsectacademy.com","last_verified":"2026-04-01","content_type":"webpage","url":"https:\/\/www.lildudesinsectacademy.com\/podcast"},"page_structure":{"render_order":[{"bloq_id":627928,"type":"bloq-rich-text-editors","position":0},{"bloq_id":627929,"type":"bloq-images","position":0},{"bloq_id":627926,"type":"bloq-rich-text-editors","position":1},{"bloq_id":627930,"type":"bloq-simple-contact-forms","position":1},{"bloq_id":627927,"type":"bloq-htmls","position":2}]}},"business_profile":{"organization_type":"NGO","name":"Lil' Dudes Insect Academy","description":"Lil\u2019 Dudes Insect Academy inspires kids and families to discover the fascinating world of insects through hands-on learning, fun videos, podcasts, and educational resources. Founded by young entomologist Bradon, the academy\u2019s mission is to spark curiosity, encourage exploration, and grow the next generation of insect lovers and scientists.","address":{"street":"","city":"","state":"","postal_code":"","country":""},"contact":{"telephone":"","url":"https:\/\/www.lildudesinsectacademy.com\/","email":""},"operational_details":{"price_range":"$","cuisine":[],"hours":[],"payment_methods":[]},"ratings":{"aggregate_rating":null,"review_count":0,"reviews":[]},"amenities":[],"historical_branding":{"alternate_name":"","founding_date":"","founder":"","transition_note":""},"is_primary":true},"schema_metadata":{"schema_version":"3.0","schema_type":"merged_llm_schema","merge_date":"2026-04-01T00:02:31-07:00","source_types":["llm_json","page_schema"],"schema_generated":"2026-04-01 00:02:31 PDT","schema_generated_by":"cp","graph_item_count":7,"validation_status":"complete"},"merged":true,"merge_version":"3.0","merge_timestamp":"2026-04-01T00:02:31-07:00","merge_status":"complete","validation":{"has_schema":true,"has_graph":true,"has_business_profile":true,"has_entities":true,"has_media":true,"schema_item_count":7}}