reduce bounce rate
Some checks failed
ci / site (push) Has been cancelled
publish-image / publish (push) Has been cancelled

This commit is contained in:
2026-02-10 17:36:34 -05:00
parent ac3de3e142
commit 5d07e57256
15 changed files with 992 additions and 90 deletions

View File

@@ -1,5 +1,5 @@
{ {
"generatedAt": "2026-02-10T09:28:27.367Z", "generatedAt": "2026-02-10T21:36:25.766Z",
"items": [ "items": [
{ {
"id": "gPGbtfQdaw4", "id": "gPGbtfQdaw4",
@@ -10,7 +10,7 @@
"publishedAt": "2026-02-08T19:57:08.000Z", "publishedAt": "2026-02-08T19:57:08.000Z",
"thumbnailUrl": "https://i.ytimg.com/vi/gPGbtfQdaw4/hqdefault.jpg", "thumbnailUrl": "https://i.ytimg.com/vi/gPGbtfQdaw4/hqdefault.jpg",
"metrics": { "metrics": {
"views": 42 "views": 63
} }
}, },
{ {
@@ -22,7 +22,7 @@
"publishedAt": "2026-02-05T05:53:25.000Z", "publishedAt": "2026-02-05T05:53:25.000Z",
"thumbnailUrl": "https://i.ytimg.com/vi/aesTuu2nS-I/hqdefault.jpg", "thumbnailUrl": "https://i.ytimg.com/vi/aesTuu2nS-I/hqdefault.jpg",
"metrics": { "metrics": {
"views": 147 "views": 148
} }
}, },
{ {
@@ -34,7 +34,7 @@
"publishedAt": "2026-02-05T04:31:18.000Z", "publishedAt": "2026-02-05T04:31:18.000Z",
"thumbnailUrl": "https://i.ytimg.com/vi/9t8cBpZLHUo/hqdefault.jpg", "thumbnailUrl": "https://i.ytimg.com/vi/9t8cBpZLHUo/hqdefault.jpg",
"metrics": { "metrics": {
"views": 328 "views": 336
} }
}, },
{ {
@@ -46,7 +46,7 @@
"publishedAt": "2026-01-29T13:54:28.000Z", "publishedAt": "2026-01-29T13:54:28.000Z",
"thumbnailUrl": "https://i.ytimg.com/vi/71S5viSJG20/hqdefault.jpg", "thumbnailUrl": "https://i.ytimg.com/vi/71S5viSJG20/hqdefault.jpg",
"metrics": { "metrics": {
"views": 49 "views": 50
} }
}, },
{ {
@@ -118,7 +118,7 @@
"publishedAt": "2026-01-20T17:02:14.000Z", "publishedAt": "2026-01-20T17:02:14.000Z",
"thumbnailUrl": "https://i.ytimg.com/vi/zR9Ey8DjG5s/hqdefault.jpg", "thumbnailUrl": "https://i.ytimg.com/vi/zR9Ey8DjG5s/hqdefault.jpg",
"metrics": { "metrics": {
"views": 24 "views": 25
} }
}, },
{ {
@@ -293,7 +293,7 @@
"publishedAt": "2026-01-11T22:15:03.000Z", "publishedAt": "2026-01-11T22:15:03.000Z",
"thumbnailUrl": "https://i.ytimg.com/vi/XsJCIeqFWCY/hqdefault.jpg", "thumbnailUrl": "https://i.ytimg.com/vi/XsJCIeqFWCY/hqdefault.jpg",
"metrics": { "metrics": {
"views": 5 "views": 7
} }
}, },
{ {
@@ -303,7 +303,8 @@
"title": "E43. US History Understanding This Country | Children's Crusade & the Civil Rights Act of 1964: Turning Protest into Law", "title": "E43. US History Understanding This Country | Children's Crusade & the Civil Rights Act of 1964: Turning Protest into Law",
"summary": "Dive into the pivotal summer of 1963 in this episode of US History - Understanding This Country, hosted by Santhosh Janardhanan. Explore the Birmingham Campaign's bold Project C, where brave children faced fire hoses and police dogs in the…", "summary": "Dive into the pivotal summer of 1963 in this episode of US History - Understanding This Country, hosted by Santhosh Janardhanan. Explore the Birmingham Campaign's bold Project C, where brave children faced fire hoses and police dogs in the…",
"publishedAt": "2026-01-24T03:17:34.000Z", "publishedAt": "2026-01-24T03:17:34.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/114471652/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2026-0-24%2F1126c986-2549-be18-ac72-c68f016c3380.mp3"
}, },
{ {
"id": "90b42ea8-16e9-4374-8043-858c5c04db3f", "id": "90b42ea8-16e9-4374-8043-858c5c04db3f",
@@ -312,7 +313,8 @@
"title": "E42. US History Understanding This Country | Civil Rights Movement from Courtrooms to the Streets", "title": "E42. US History Understanding This Country | Civil Rights Movement from Courtrooms to the Streets",
"summary": "Episode 42 is where the Civil Rights Movement shifts from courtrooms to the streets. After legal wins like Brown v. Board of Education, activists and students push for real change in everyday life-at lunch counters, bus stations, and on in…", "summary": "Episode 42 is where the Civil Rights Movement shifts from courtrooms to the streets. After legal wins like Brown v. Board of Education, activists and students push for real change in everyday life-at lunch counters, bus stations, and on in…",
"publishedAt": "2026-01-16T19:59:44.000Z", "publishedAt": "2026-01-16T19:59:44.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/114108808/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2026-0-16%2Ffbc30f2a-076c-244c-8edc-fe847073291a.mp3"
}, },
{ {
"id": "9900f1c9-315b-42ba-991f-c31241bd9b55", "id": "9900f1c9-315b-42ba-991f-c31241bd9b55",
@@ -321,7 +323,8 @@
"title": "Episode 41a (Recap) - US History Podcast CatchUp: From Colonization to the Early Civil Rights Movement", "title": "Episode 41a (Recap) - US History Podcast CatchUp: From Colonization to the Early Civil Rights Movement",
"summary": "Im back - and I owe you an apology. I went AWOL after September for personal reasons, but US History - Understanding This Country by Irregular Mind is back in the groove. In this recap episode, I quickly bring you up to speed on everythin…", "summary": "Im back - and I owe you an apology. I went AWOL after September for personal reasons, but US History - Understanding This Country by Irregular Mind is back in the groove. In this recap episode, I quickly bring you up to speed on everythin…",
"publishedAt": "2026-01-15T16:24:16.000Z", "publishedAt": "2026-01-15T16:24:16.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/114047090/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2026-0-15%2F745dfc28-5bb8-7a31-045a-9b93871910e6.mp3"
}, },
{ {
"id": "9002e7f6-8ecf-47e2-9590-ba4adfc5dc6d", "id": "9002e7f6-8ecf-47e2-9590-ba4adfc5dc6d",
@@ -330,7 +333,8 @@
"title": "E41. US History Understanding This Country | Civil Rights Beginnings: Brown, Parks & King", "title": "E41. US History Understanding This Country | Civil Rights Beginnings: Brown, Parks & King",
"summary": "Explore the early US civil rights movement: Brown v. Board of Education, Montgomery Bus Boycott, Little Rock Nine, Rosa Parks, Martin Luther King Jr., school integration, nonviolence, and resistance in the 1950s. Legal cases, social justic…", "summary": "Explore the early US civil rights movement: Brown v. Board of Education, Montgomery Bus Boycott, Little Rock Nine, Rosa Parks, Martin Luther King Jr., school integration, nonviolence, and resistance in the 1950s. Legal cases, social justic…",
"publishedAt": "2025-09-20T03:47:37.000Z", "publishedAt": "2025-09-20T03:47:37.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/108561883/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-8-20%2Fcb7f16fc-e9be-5a09-bc96-af307f4ff5fd.mp3"
}, },
{ {
"id": "96e72f96-fb71-4717-9047-120c6e32973a", "id": "96e72f96-fb71-4717-9047-120c6e32973a",
@@ -339,7 +343,8 @@
"title": "E40. US History Understanding This Country | Prosperity, TV, Rock n Roll", "title": "E40. US History Understanding This Country | Prosperity, TV, Rock n Roll",
"summary": "Step into the 1950s: GI Bill-fueled growth, Levittown suburbs, TV in every living room, and rock n roll teens—alongside redlining, poverty, and early sparks of Civil Rights. Booming, but brittle. Listen now.", "summary": "Step into the 1950s: GI Bill-fueled growth, Levittown suburbs, TV in every living room, and rock n roll teens—alongside redlining, poverty, and early sparks of Civil Rights. Booming, but brittle. Listen now.",
"publishedAt": "2025-09-15T02:28:58.000Z", "publishedAt": "2025-09-15T02:28:58.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/108306385/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-8-15%2Fc354780a-6a27-0df9-03a4-57a85ae25bb9.mp3"
}, },
{ {
"id": "bb4faa6e-384d-4204-b133-438c5a82aefd", "id": "bb4faa6e-384d-4204-b133-438c5a82aefd",
@@ -348,7 +353,8 @@
"title": "E39. US History Understanding This Country | The Korean War: Americas First Test of the Cold War", "title": "E39. US History Understanding This Country | The Korean War: Americas First Test of the Cold War",
"summary": "From the North Korean invasion to MacArthurs Inchon landing, Chinese intervention, and Trumans clash with his general — discover how the Korean War became the blueprint for Cold War conflicts and earned the name “The Forgotten War.”", "summary": "From the North Korean invasion to MacArthurs Inchon landing, Chinese intervention, and Trumans clash with his general — discover how the Korean War became the blueprint for Cold War conflicts and earned the name “The Forgotten War.”",
"publishedAt": "2025-09-07T04:58:14.000Z", "publishedAt": "2025-09-07T04:58:14.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/107954085/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-8-7%2F29c9f21c-f6ea-449f-7e56-2df384af1435.mp3"
}, },
{ {
"id": "2d56a5a0-948d-446f-b05d-f18f4299530f", "id": "2d56a5a0-948d-446f-b05d-f18f4299530f",
@@ -357,7 +363,8 @@
"title": "E38. US History Understanding This Country | Victory to Cold War Tensions", "title": "E38. US History Understanding This Country | Victory to Cold War Tensions",
"summary": "In 1945, victory brought hope and change. From the GI Bill and baby boom to the UN, Marshall Plan, Berlin Airlift, and Trumans Fair Deal — discover how America emerged as a global leader while stepping into the Cold War.", "summary": "In 1945, victory brought hope and change. From the GI Bill and baby boom to the UN, Marshall Plan, Berlin Airlift, and Trumans Fair Deal — discover how America emerged as a global leader while stepping into the Cold War.",
"publishedAt": "2025-08-16T03:52:22.000Z", "publishedAt": "2025-08-16T03:52:22.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/106932614/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-7-16%2F8e76d74b-a4b4-d921-79e0-143c61aa45eb.mp3"
}, },
{ {
"id": "14912927-4ea3-4946-948a-dbeeacbd1535", "id": "14912927-4ea3-4946-948a-dbeeacbd1535",
@@ -366,7 +373,8 @@
"title": "E37. US History Understanding This Country | From D-Day to Nagasaki", "title": "E37. US History Understanding This Country | From D-Day to Nagasaki",
"summary": "Coincidentally, on the anniversary of the bombing of Nagasaki, we retrace Americas path to victory in WWII — from D-Days stormed beaches and the Battle of the Bulge, to the Pacific war, the A-Bomb, and the dawn of a new world order.", "summary": "Coincidentally, on the anniversary of the bombing of Nagasaki, we retrace Americas path to victory in WWII — from D-Days stormed beaches and the Battle of the Bulge, to the Pacific war, the A-Bomb, and the dawn of a new world order.",
"publishedAt": "2025-08-09T04:15:45.000Z", "publishedAt": "2025-08-09T04:15:45.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/106639027/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-7-9%2F62b6e4e3-44d4-7f08-4d80-ae897643a2d3.mp3"
}, },
{ {
"id": "063ab850-90c1-4e42-af44-9a64eaa1bf72", "id": "063ab850-90c1-4e42-af44-9a64eaa1bf72",
@@ -375,7 +383,8 @@
"title": "E36. US History Understanding This Country | The World at War, Again: How the US stepped into WWII", "title": "E36. US History Understanding This Country | The World at War, Again: How the US stepped into WWII",
"summary": "Before Normandy and D-Day, there was fear, fascism, and a world unraveling. In this episode, we trace the rise of totalitarian regimes in Europe and Asia, the blitzkrieg that stunned the West, and the slow but steady shift in American sent…", "summary": "Before Normandy and D-Day, there was fear, fascism, and a world unraveling. In this episode, we trace the rise of totalitarian regimes in Europe and Asia, the blitzkrieg that stunned the West, and the slow but steady shift in American sent…",
"publishedAt": "2025-08-02T03:41:33.000Z", "publishedAt": "2025-08-02T03:41:33.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/106336273/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-7-2%2F404983164-44100-2-bf1a3634fbd3c.m4a"
}, },
{ {
"id": "4d616ef1-46e4-46b5-8fa4-e3e71688d2c0", "id": "4d616ef1-46e4-46b5-8fa4-e3e71688d2c0",
@@ -384,7 +393,8 @@
"title": "E35. US History Understanding This Country | The Great Depression", "title": "E35. US History Understanding This Country | The Great Depression",
"summary": "When the Roaring Twenties crashed into economic ruin, America found itself spiraling into the Great Depression. In this episode, we explore the causes, the fallout, and the ambitious response—from Hoovers failure to FDRs New Deal. Escapi…", "summary": "When the Roaring Twenties crashed into economic ruin, America found itself spiraling into the Great Depression. In this episode, we explore the causes, the fallout, and the ambitious response—from Hoovers failure to FDRs New Deal. Escapi…",
"publishedAt": "2025-07-26T02:32:26.000Z", "publishedAt": "2025-07-26T02:32:26.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/106005813/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-6-26%2F2b97b981-decd-fdd2-1317-ad57c9000792.mp3"
}, },
{ {
"id": "2a5efb30-1749-4bcb-b54b-a83878a6015e", "id": "2a5efb30-1749-4bcb-b54b-a83878a6015e",
@@ -393,7 +403,8 @@
"title": "E34. US History Understanding This Country | The Roaring Twenties", "title": "E34. US History Understanding This Country | The Roaring Twenties",
"summary": "Explore the dazzling highs and hidden lows of 1920s America - from jazz clubs and cultural revolutions to rising nativism, fundamentalism, and an economy teetering on collapse. This episode dives deep into how the decade shaped modern Amer…", "summary": "Explore the dazzling highs and hidden lows of 1920s America - from jazz clubs and cultural revolutions to rising nativism, fundamentalism, and an economy teetering on collapse. This episode dives deep into how the decade shaped modern Amer…",
"publishedAt": "2025-07-19T03:58:56.000Z", "publishedAt": "2025-07-19T03:58:56.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/105702720/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-6-19%2Fd4ce6b57-88f7-d794-d909-3e2cb093bcca.mp3"
}, },
{ {
"id": "d41eeed2-96a0-4afe-a8e4-1cf30dec8988", "id": "d41eeed2-96a0-4afe-a8e4-1cf30dec8988",
@@ -402,7 +413,8 @@
"title": "E33. US History Understanding This Country | The Great War: How World War I Transformed America and the World", "title": "E33. US History Understanding This Country | The Great War: How World War I Transformed America and the World",
"summary": "Explore Americas entry into World War I, from trench warfare and propaganda to Wilsons Fourteen Points and the Treaty of Versailles. Discover how the Great War reshaped the U.S. and set the stage for the Roaring Twenties.", "summary": "Explore Americas entry into World War I, from trench warfare and propaganda to Wilsons Fourteen Points and the Treaty of Versailles. Discover how the Great War reshaped the U.S. and set the stage for the Roaring Twenties.",
"publishedAt": "2025-07-12T04:33:52.000Z", "publishedAt": "2025-07-12T04:33:52.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/105390404/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-6-12%2F18fd798a-1a68-44ec-1076-302d619df5c7.mp3"
}, },
{ {
"id": "1fc5bbbf-e649-41b2-9145-85757cbee0a8", "id": "1fc5bbbf-e649-41b2-9145-85757cbee0a8",
@@ -411,7 +423,8 @@
"title": "E32. US History Understanding This Country | American Muscle and Presidents of Power", "title": "E32. US History Understanding This Country | American Muscle and Presidents of Power",
"summary": "In this episode, we follow Americas bold stride into global influence and domestic reform through the eyes of Theodore Roosevelt, William Howard Taft, and Woodrow Wilson. From the Panama Canal to trust-busting, and from Dollar Diplomacy t…", "summary": "In this episode, we follow Americas bold stride into global influence and domestic reform through the eyes of Theodore Roosevelt, William Howard Taft, and Woodrow Wilson. From the Panama Canal to trust-busting, and from Dollar Diplomacy t…",
"publishedAt": "2025-07-05T03:30:53.000Z", "publishedAt": "2025-07-05T03:30:53.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/105055742/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-6-5%2Fe000ebe6-4a2a-9549-84bb-3dacdc71cf74.mp3"
}, },
{ {
"id": "9d5a87a4-bdb7-474f-a249-a43ac6d477e6", "id": "9d5a87a4-bdb7-474f-a249-a43ac6d477e6",
@@ -420,7 +433,8 @@
"title": "E31. US History Understanding This Country | Expansionism and Imperialism", "title": "E31. US History Understanding This Country | Expansionism and Imperialism",
"summary": "Explore how the United States expanded its reach beyond its borders through imperial ambition, war, and diplomacy. From Hawaii to the Philippines, this episode traces Americas rise as a world power.", "summary": "Explore how the United States expanded its reach beyond its borders through imperial ambition, war, and diplomacy. From Hawaii to the Philippines, this episode traces Americas rise as a world power.",
"publishedAt": "2025-06-28T03:30:57.000Z", "publishedAt": "2025-06-28T03:30:57.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/104747456/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-5-28%2F2b53d550-ce69-539f-03c4-c0b9f6cbf80b.mp3"
}, },
{ {
"id": "6b47cd15-1f10-4175-a8d2-0863777022a7", "id": "6b47cd15-1f10-4175-a8d2-0863777022a7",
@@ -429,7 +443,8 @@
"title": "E30. US History Understanding This Country | Progressivism in America", "title": "E30. US History Understanding This Country | Progressivism in America",
"summary": "Explore the transformative Progressive Era in U.S. history — from trust-busting and muckraking journalism to child labor laws, womens suffrage, and civil rights movements. This episode dives into how reformers, activists, and everyday cit…", "summary": "Explore the transformative Progressive Era in U.S. history — from trust-busting and muckraking journalism to child labor laws, womens suffrage, and civil rights movements. This episode dives into how reformers, activists, and everyday cit…",
"publishedAt": "2025-06-19T03:42:14.000Z", "publishedAt": "2025-06-19T03:42:14.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/104345126/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-5-19%2Fcf16ba9f-60d0-2012-5fc9-4158e495ba5b.mp3"
}, },
{ {
"id": "f73008f3-78d6-4644-975f-f5d00d21f404", "id": "f73008f3-78d6-4644-975f-f5d00d21f404",
@@ -438,7 +453,8 @@
"title": "E29. US History Understanding This Country | Immigration and New Cities", "title": "E29. US History Understanding This Country | Immigration and New Cities",
"summary": "In this episode, we explore the explosive rise of American cities during the late 1800s and early 1900s. From Ellis Island to ethnic neighborhoods, from nativist backlash to reform movements, discover how waves of new immigrants shaped the…", "summary": "In this episode, we explore the explosive rise of American cities during the late 1800s and early 1900s. From Ellis Island to ethnic neighborhoods, from nativist backlash to reform movements, discover how waves of new immigrants shaped the…",
"publishedAt": "2025-06-14T03:58:41.000Z", "publishedAt": "2025-06-14T03:58:41.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/104111816/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-5-14%2F58ab0089-5011-599a-94b6-27349c29025c.mp3"
}, },
{ {
"id": "c1c4778d-2597-4b8a-86e2-dd2e5adfe526", "id": "c1c4778d-2597-4b8a-86e2-dd2e5adfe526",
@@ -447,7 +463,8 @@
"title": "E28. US History Understanding This Country | Second Industrial Revolution and The Age of Capitalism", "title": "E28. US History Understanding This Country | Second Industrial Revolution and The Age of Capitalism",
"summary": "In this episode, we explore the Second Industrial Revolution — a time of booming invention, corporate empires, and factory-floor struggles. From Edisons lightbulb to Fords assembly line, and from the rise of the corporation to the birth…", "summary": "In this episode, we explore the Second Industrial Revolution — a time of booming invention, corporate empires, and factory-floor struggles. From Edisons lightbulb to Fords assembly line, and from the rise of the corporation to the birth…",
"publishedAt": "2025-06-07T03:51:30.000Z", "publishedAt": "2025-06-07T03:51:30.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/103784402/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-5-7%2Feb8aea45-90d7-fbbb-eeb3-f2b1f625ba6a.mp3"
}, },
{ {
"id": "13359365-5be2-4f7c-ae11-94d412be7561", "id": "13359365-5be2-4f7c-ae11-94d412be7561",
@@ -456,7 +473,8 @@
"title": "E27. US History Understanding This Country | Clash of Cultures", "title": "E27. US History Understanding This Country | Clash of Cultures",
"summary": "The American frontier was not an empty land — it was home. In this powerful episode, we uncover the story of the Lakota and other Plains tribes who resisted removal, reservations, and forced assimilation. From Custers Last Stand to the bo…", "summary": "The American frontier was not an empty land — it was home. In this powerful episode, we uncover the story of the Lakota and other Plains tribes who resisted removal, reservations, and forced assimilation. From Custers Last Stand to the bo…",
"publishedAt": "2025-05-31T04:14:46.000Z", "publishedAt": "2025-05-31T04:14:46.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/103457111/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-4-31%2F5d65fcda-a3ad-bfee-b1f3-e87ffcbe4a46.mp3"
}, },
{ {
"id": "f7c449ee-f274-4944-9370-0d0c000a053c", "id": "f7c449ee-f274-4944-9370-0d0c000a053c",
@@ -465,7 +483,8 @@
"title": "E26. US History Understanding This Country | Trains, Bonanzas and Cowboys", "title": "E26. US History Understanding This Country | Trains, Bonanzas and Cowboys",
"summary": "From steam engines to cattle drives, and from homesteads to populist rallies — this episode explores how the American West was won, worked, and mythologized. Discover how the Transcontinental Railroad changed everything, how farmers organi…", "summary": "From steam engines to cattle drives, and from homesteads to populist rallies — this episode explores how the American West was won, worked, and mythologized. Discover how the Transcontinental Railroad changed everything, how farmers organi…",
"publishedAt": "2025-05-24T03:30:17.000Z", "publishedAt": "2025-05-24T03:30:17.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/103126664/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-4-24%2F7bd352a3-c787-98d2-a210-4914742351bc.mp3"
}, },
{ {
"id": "b3edb562-64be-4902-a503-f9a93719caf9", "id": "b3edb562-64be-4902-a503-f9a93719caf9",
@@ -474,7 +493,8 @@
"title": "E25. US History Understanding This Country | Reconstruction: Redefining Freedom", "title": "E25. US History Understanding This Country | Reconstruction: Redefining Freedom",
"summary": "After the Civil War, the United States faced its most difficult question yet: how do you rebuild a country that just tried to destroy itself? In this episode, we explore the highs and heartbreaks of Reconstruction — from the promise of fre…", "summary": "After the Civil War, the United States faced its most difficult question yet: how do you rebuild a country that just tried to destroy itself? In this episode, we explore the highs and heartbreaks of Reconstruction — from the promise of fre…",
"publishedAt": "2025-05-17T04:35:58.000Z", "publishedAt": "2025-05-17T04:35:58.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/102785794/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-4-17%2Ff3a5a2ed-b51a-81bd-3577-85fb982628dd.mp3"
}, },
{ {
"id": "bd1cb52f-29fc-456a-b971-13030def86eb", "id": "bd1cb52f-29fc-456a-b971-13030def86eb",
@@ -483,7 +503,8 @@
"title": "E24. US History Understanding This Country | The Civil War", "title": "E24. US History Understanding This Country | The Civil War",
"summary": "Dive deep into the American Civil War — a conflict that shattered the nation, ended slavery, and changed the course of U.S. history. This episode traces the path from secession to surrender, explores key battles like Gettysburg and Antieta…", "summary": "Dive deep into the American Civil War — a conflict that shattered the nation, ended slavery, and changed the course of U.S. history. This episode traces the path from secession to surrender, explores key battles like Gettysburg and Antieta…",
"publishedAt": "2025-05-10T04:07:23.000Z", "publishedAt": "2025-05-10T04:07:23.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/102452394/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-4-10%2F10329af5-e506-1f22-d2f7-2bc340ab3cc9.mp3"
}, },
{ {
"id": "086d2da0-57b4-4410-8637-f076b19bdaf9", "id": "086d2da0-57b4-4410-8637-f076b19bdaf9",
@@ -492,7 +513,8 @@
"title": "E23. US History Understanding This Country | Prelude to Civil War", "title": "E23. US History Understanding This Country | Prelude to Civil War",
"summary": "In this gripping episode of US History Understanding This Country, we trace the volatile road to the American Civil War—from the Wilmot Proviso to Lincolns First Inaugural Address. Learn how heated debates over slavery, landmark legisla…", "summary": "In this gripping episode of US History Understanding This Country, we trace the volatile road to the American Civil War—from the Wilmot Proviso to Lincolns First Inaugural Address. Learn how heated debates over slavery, landmark legisla…",
"publishedAt": "2025-05-03T03:30:33.000Z", "publishedAt": "2025-05-03T03:30:33.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/102109648/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-4-3%2F22fd23a6-a068-7ab5-3089-6535766eaf26.mp3"
}, },
{ {
"id": "b22a7a44-8028-4c84-9dd6-31e7a62a6def", "id": "b22a7a44-8028-4c84-9dd6-31e7a62a6def",
@@ -501,7 +523,8 @@
"title": "E22. US History Understanding This Country | The Age of Reform", "title": "E22. US History Understanding This Country | The Age of Reform",
"summary": "In this episode of US History Understanding This Country, explore the powerful movements that reshaped America in the mid-1800s. From immigration waves and city life challenges to the Second Great Awakening, the Temperance Movement, pris…", "summary": "In this episode of US History Understanding This Country, explore the powerful movements that reshaped America in the mid-1800s. From immigration waves and city life challenges to the Second Great Awakening, the Temperance Movement, pris…",
"publishedAt": "2025-04-26T03:38:18.000Z", "publishedAt": "2025-04-26T03:38:18.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/101800723/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-3-26%2F02c65821-3a9f-b57d-5b28-897ea433ee8c.mp3"
}, },
{ {
"id": "035b8239-d954-42a8-a1a5-d4fce21ff15a", "id": "035b8239-d954-42a8-a1a5-d4fce21ff15a",
@@ -510,7 +533,8 @@
"title": "E21. US History Understanding This Country | The Lone Star and the Borderlands", "title": "E21. US History Understanding This Country | The Lone Star and the Borderlands",
"summary": "In this episode of US History Understanding This Country, we explore how Texas went from Mexican territory to independent republic—and how that sparked the Mexican-American War. Learn about the Alamo, the Battle of San Jacinto, the Treat…", "summary": "In this episode of US History Understanding This Country, we explore how Texas went from Mexican territory to independent republic—and how that sparked the Mexican-American War. Learn about the Alamo, the Battle of San Jacinto, the Treat…",
"publishedAt": "2025-04-19T03:26:55.000Z", "publishedAt": "2025-04-19T03:26:55.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/101486753/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-3-19%2F490ffdc1-c6f6-b467-1687-4eb3143ee377.mp3"
}, },
{ {
"id": "92f62156-44ed-4757-b46b-7b8d3b0deb00", "id": "92f62156-44ed-4757-b46b-7b8d3b0deb00",
@@ -519,7 +543,8 @@
"title": "E20. US History Understanding This Country | The Oregon Trail", "title": "E20. US History Understanding This Country | The Oregon Trail",
"summary": "In this immersive episode of US History Understanding This Country, we journey along the iconic Oregon Trail — the 2,000-mile route that carried Americas pioneer spirit westward. From river crossings and food shortages to the resilience…", "summary": "In this immersive episode of US History Understanding This Country, we journey along the iconic Oregon Trail — the 2,000-mile route that carried Americas pioneer spirit westward. From river crossings and food shortages to the resilience…",
"publishedAt": "2025-04-12T04:39:58.000Z", "publishedAt": "2025-04-12T04:39:58.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/101188164/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-3-12%2Fbcfaf501-9f8b-1ad7-f7ea-fda20e0604b3.mp3"
}, },
{ {
"id": "3fef0da4-41a1-4f69-a444-30a846ba6817", "id": "3fef0da4-41a1-4f69-a444-30a846ba6817",
@@ -528,7 +553,8 @@
"title": "E19. US History Understanding This Country | The Wild West Journeys", "title": "E19. US History Understanding This Country | The Wild West Journeys",
"summary": "In this gripping episode of US History Understanding This Country, we journey deep into the legendary Oregon Trail — the 2,000-mile path that turned ordinary families into pioneers and a young nation into a continental power. Discover wh…", "summary": "In this gripping episode of US History Understanding This Country, we journey deep into the legendary Oregon Trail — the 2,000-mile path that turned ordinary families into pioneers and a young nation into a continental power. Discover wh…",
"publishedAt": "2025-04-04T23:00:00.000Z", "publishedAt": "2025-04-04T23:00:00.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/100819921/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-3-4%2F5d62ff2f-45f0-e0f9-da75-c49272b2cbdb.mp3"
}, },
{ {
"id": "564c1115-f9ac-4c18-8e6f-2e805db638e2", "id": "564c1115-f9ac-4c18-8e6f-2e805db638e2",
@@ -537,7 +563,8 @@
"title": "E18. US History Understanding This Country | From Corrupt Bargains to the Trail of Tears", "title": "E18. US History Understanding This Country | From Corrupt Bargains to the Trail of Tears",
"summary": "In this powerful episode of US History Understanding This Country, host Santhosh Janardhanan unpacks the pivotal elections of 1824, 1828, and 1832—revealing how political rivalries, populist movements, and bitter controversies shaped the…", "summary": "In this powerful episode of US History Understanding This Country, host Santhosh Janardhanan unpacks the pivotal elections of 1824, 1828, and 1832—revealing how political rivalries, populist movements, and bitter controversies shaped the…",
"publishedAt": "2025-03-29T04:10:39.000Z", "publishedAt": "2025-03-29T04:10:39.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/100536780/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-2-29%2Fafe493af-8b1d-edf5-5375-00ef312acf0c.mp3"
}, },
{ {
"id": "3fcbc28c-728f-42cf-83cd-812ba49db367", "id": "3fcbc28c-728f-42cf-83cd-812ba49db367",
@@ -546,7 +573,8 @@
"title": "E17. US History Understanding This Country | The Era of Good Feelings? Nationalism, Industry & Division in Early America", "title": "E17. US History Understanding This Country | The Era of Good Feelings? Nationalism, Industry & Division in Early America",
"summary": "Was the “Era of Good Feelings” truly a time of peace and progress—or a calm before the storm? In Episode 17 of US History Understanding This Country, we explore how the post-War of 1812 boom brought nationalism, innovation, and expansion…", "summary": "Was the “Era of Good Feelings” truly a time of peace and progress—or a calm before the storm? In Episode 17 of US History Understanding This Country, we explore how the post-War of 1812 boom brought nationalism, innovation, and expansion…",
"publishedAt": "2025-03-22T01:00:00.000Z", "publishedAt": "2025-03-22T01:00:00.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/100165431/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-2-21%2F55bc62cd-e2d6-94cc-2d33-b3f6f0f012c4.mp3"
}, },
{ {
"id": "dbf4251d-3b67-4e98-be85-d4888aac4357", "id": "dbf4251d-3b67-4e98-be85-d4888aac4357",
@@ -555,7 +583,8 @@
"title": "E16. US History Understanding This Country | The War of 1812 and Birth of the Star Spangled Banner", "title": "E16. US History Understanding This Country | The War of 1812 and Birth of the Star Spangled Banner",
"summary": "The War of 1812 shaped Americas destiny—Tecumsehs confederation, the Battle of Tippecanoe, the burning of Washington D.C., the Star-Spangled Banner, and Andrew Jacksons victory at New Orleans. Discover how this war redefined U.S. indepe…", "summary": "The War of 1812 shaped Americas destiny—Tecumsehs confederation, the Battle of Tippecanoe, the burning of Washington D.C., the Star-Spangled Banner, and Andrew Jacksons victory at New Orleans. Discover how this war redefined U.S. indepe…",
"publishedAt": "2025-03-15T01:00:00.000Z", "publishedAt": "2025-03-15T01:00:00.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/99676277/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-2-11%2F396348523-44100-2-17d81a634ca2e.m4a"
}, },
{ {
"id": "87f6b19f-b74a-4345-929e-084dec7236b5", "id": "87f6b19f-b74a-4345-929e-084dec7236b5",
@@ -564,7 +593,8 @@
"title": "E15. US History - Understanding this Country | Expansion, Power, and Contradictions", "title": "E15. US History - Understanding this Country | Expansion, Power, and Contradictions",
"summary": "Thomas Jeffersons presidency reshaped America—doubling its size with the Louisiana Purchase, battling the Supreme Court, and enforcing the disastrous Embargo Act. Explore his legacy in this episode!", "summary": "Thomas Jeffersons presidency reshaped America—doubling its size with the Louisiana Purchase, battling the Supreme Court, and enforcing the disastrous Embargo Act. Explore his legacy in this episode!",
"publishedAt": "2025-03-08T05:43:34.000Z", "publishedAt": "2025-03-08T05:43:34.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/99544328/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-2-8%2F396185365-44100-2-2dc56d748f8c2.m4a"
}, },
{ {
"id": "0bb43b9e-c1bc-40be-b642-5b8c0a7977a1", "id": "0bb43b9e-c1bc-40be-b642-5b8c0a7977a1",
@@ -573,7 +603,8 @@
"title": "E14. US History - Understanding this Country | Presidents setting precedents", "title": "E14. US History - Understanding this Country | Presidents setting precedents",
"summary": "Dive into the transformative era of the first presidents as they laid the groundwork for the United States by setting precedents in early America. This episode traces George Washingtons historic election, the formation of his cabinet, and…", "summary": "Dive into the transformative era of the first presidents as they laid the groundwork for the United States by setting precedents in early America. This episode traces George Washingtons historic election, the formation of his cabinet, and…",
"publishedAt": "2025-03-01T04:33:33.000Z", "publishedAt": "2025-03-01T04:33:33.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/99202920/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-2-1%2F54f89a3e-6cb7-9d3d-ece0-d831d3739ab3.mp3"
}, },
{ {
"id": "344e00d3-7a6c-4941-81d2-cb3c60f567cb", "id": "344e00d3-7a6c-4941-81d2-cb3c60f567cb",
@@ -582,7 +613,8 @@
"title": "E13. US History - Understanding this Country | Inside the U.S. Constitution", "title": "E13. US History - Understanding this Country | Inside the U.S. Constitution",
"summary": "The U.S. Constitution was written—but could it survive the fight for approval? In this episode, we dive into the ratification debates, the clash between Federalists and Anti-Federalists, and the political deals that saved the Constitution.…", "summary": "The U.S. Constitution was written—but could it survive the fight for approval? In this episode, we dive into the ratification debates, the clash between Federalists and Anti-Federalists, and the political deals that saved the Constitution.…",
"publishedAt": "2025-02-23T03:35:43.000Z", "publishedAt": "2025-02-23T03:35:43.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/98885311/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-1-23%2F395361579-44100-2-a3f5b1899c71.m4a"
}, },
{ {
"id": "2ffd8004-b419-4260-80de-e3e04518f70d", "id": "2ffd8004-b419-4260-80de-e3e04518f70d",
@@ -591,7 +623,8 @@
"title": "E12. US History - Understanding this Country | Finding the Balance", "title": "E12. US History - Understanding this Country | Finding the Balance",
"summary": "The U.S. Constitution wasnt built overnight—it was shaped by intense debates and hard-fought compromises. In this episode, we dive into The Great Compromise, The Three-Fifths Compromise, and how these decisions created the foundation for…", "summary": "The U.S. Constitution wasnt built overnight—it was shaped by intense debates and hard-fought compromises. In this episode, we dive into The Great Compromise, The Three-Fifths Compromise, and how these decisions created the foundation for…",
"publishedAt": "2025-02-16T04:57:29.000Z", "publishedAt": "2025-02-16T04:57:29.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/98561452/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-1-16%2F394955738-44100-2-7d2c7d88c368.m4a"
}, },
{ {
"id": "ba1a2bcc-8ba8-40f6-afef-5528a7dae897", "id": "ba1a2bcc-8ba8-40f6-afef-5528a7dae897",
@@ -600,7 +633,8 @@
"title": "E11. US History - Understanding this Country | Building a nation from the scratch", "title": "E11. US History - Understanding this Country | Building a nation from the scratch",
"summary": "How did the U.S. go from revolution to a functioning government? Of course, it was not a cake walk. In this episode, we break down the period of Article of Confederation - the first government in the U.S, creation of the Constitution, the…", "summary": "How did the U.S. go from revolution to a functioning government? Of course, it was not a cake walk. In this episode, we break down the period of Article of Confederation - the first government in the U.S, creation of the Constitution, the…",
"publishedAt": "2025-02-09T04:42:25.000Z", "publishedAt": "2025-02-09T04:42:25.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/98227236/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-1-9%2F394539098-44100-2-212c5fa4d510a.m4a"
}, },
{ {
"id": "0c25ee7a-bc69-4791-995a-07cc9456f980", "id": "0c25ee7a-bc69-4791-995a-07cc9456f980",
@@ -609,7 +643,8 @@
"title": "E10. US History - Understanding this Country | The Revolutions Final Stand", "title": "E10. US History - Understanding this Country | The Revolutions Final Stand",
"summary": "The American Revolution wasnt just won on battlefields—it was won through resilience, strategy, and unexpected allies. In this episode, we cover the final battles, the global impact of the war, and the unsung heroes who made independence…", "summary": "The American Revolution wasnt just won on battlefields—it was won through resilience, strategy, and unexpected allies. In this episode, we cover the final battles, the global impact of the war, and the unsung heroes who made independence…",
"publishedAt": "2025-02-01T02:00:00.000Z", "publishedAt": "2025-02-01T02:00:00.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/97766177/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-0-30%2F393965209-44100-2-301b990bd3a5a.m4a"
}, },
{ {
"id": "047a6592-70d3-4ff9-9f2f-f6302c4091f0", "id": "047a6592-70d3-4ff9-9f2f-f6302c4091f0",
@@ -618,7 +653,8 @@
"title": "E9. US History - Understanding this Country | From Declaration to Victory", "title": "E9. US History - Understanding this Country | From Declaration to Victory",
"summary": "Explore the gritty journey from the Declaration of Independence to the early milestones of the American Revolution. In this episode, we cover the Battle of Long Island, Washingtons daring Delaware crossing, the turning point at Saratoga,…", "summary": "Explore the gritty journey from the Declaration of Independence to the early milestones of the American Revolution. In this episode, we cover the Battle of Long Island, Washingtons daring Delaware crossing, the turning point at Saratoga,…",
"publishedAt": "2025-01-26T04:01:00.000Z", "publishedAt": "2025-01-26T04:01:00.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/97569318/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-0-26%2F393720338-44100-2-eeeb29f35922e.m4a"
}, },
{ {
"id": "c7484015-9116-4cd2-ae10-95e10b25cfe2", "id": "c7484015-9116-4cd2-ae10-95e10b25cfe2",
@@ -627,7 +663,8 @@
"title": "E8. US History - Understanding this Country | The Road to Independence", "title": "E8. US History - Understanding this Country | The Road to Independence",
"summary": "Join us in Episode 8 of Irregular Mind as we explore the pivotal moments that shaped America's fight for freedom. From the Second Continental Congress to the bold stand at Bunker Hill, the Olive Branch Petition, and Washingtons victory in…", "summary": "Join us in Episode 8 of Irregular Mind as we explore the pivotal moments that shaped America's fight for freedom. From the Second Continental Congress to the bold stand at Bunker Hill, the Olive Branch Petition, and Washingtons victory in…",
"publishedAt": "2025-01-18T05:08:28.000Z", "publishedAt": "2025-01-18T05:08:28.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/97214840/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-0-18%2Fdbb916af-1d80-4a9c-940a-977cea9a00fd.m4a"
}, },
{ {
"id": "3f3949a2-032d-41ed-bb40-29d5d39ecd63", "id": "3f3949a2-032d-41ed-bb40-29d5d39ecd63",
@@ -636,7 +673,8 @@
"title": "E7. US History - Understanding this Country | The British Are Coming", "title": "E7. US History - Understanding this Country | The British Are Coming",
"summary": "Dive into the electrifying moments that sparked the American Revolution in this episode of Irregular Mind. From the bold actions of the Sons of Liberty and Patrick Henrys fiery “Give me liberty or give me death” speech to the first shots…", "summary": "Dive into the electrifying moments that sparked the American Revolution in this episode of Irregular Mind. From the bold actions of the Sons of Liberty and Patrick Henrys fiery “Give me liberty or give me death” speech to the first shots…",
"publishedAt": "2025-01-10T04:14:48.000Z", "publishedAt": "2025-01-10T04:14:48.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/96847344/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-0-10%2F5324f9ad-08ae-e065-e84f-ce1716eca1c7.m4a"
}, },
{ {
"id": "e415d267-4104-4f40-a6d8-364cd6c36ccb", "id": "e415d267-4104-4f40-a6d8-364cd6c36ccb",
@@ -645,7 +683,8 @@
"title": "E6. US History - Understanding this Country | The Spark of Revolution", "title": "E6. US History - Understanding this Country | The Spark of Revolution",
"summary": "In this episode of Irregular Mind, we trace the growing tensions that lit the fuse of the American Revolution. Explore the cries of “No Taxation Without Representation”, the defiance of the Stamp Act, and the fiery rhetoric of Patrick Henr…", "summary": "In this episode of Irregular Mind, we trace the growing tensions that lit the fuse of the American Revolution. Explore the cries of “No Taxation Without Representation”, the defiance of the Stamp Act, and the fiery rhetoric of Patrick Henr…",
"publishedAt": "2025-01-04T14:12:00.000Z", "publishedAt": "2025-01-04T14:12:00.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/96502701/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2025-0-2%2F67a41fef-5353-4525-b259-1dc76c111c3e.m4a"
}, },
{ {
"id": "82811636-1652-4d69-8c80-62a3021ecc18", "id": "82811636-1652-4d69-8c80-62a3021ecc18",
@@ -654,7 +693,8 @@
"title": "E5. US History - Understanding this Country | Colonial America: The Spark Before the Revolution", "title": "E5. US History - Understanding this Country | Colonial America: The Spark Before the Revolution",
"summary": "Dive into the pivotal moments that set the stage for the American Revolution in this episode of Irregular Mind. Explore the impact of the English Bill of Rights, the Great Awakening, and the Intolerable Acts as tensions between Britain and…", "summary": "Dive into the pivotal moments that set the stage for the American Revolution in this episode of Irregular Mind. Explore the impact of the English Bill of Rights, the Great Awakening, and the Intolerable Acts as tensions between Britain and…",
"publishedAt": "2024-12-28T03:46:34.000Z", "publishedAt": "2024-12-28T03:46:34.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/96337408/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2024-11-28%2F392191473-44100-2-151ecd13be558.m4a"
}, },
{ {
"id": "edae75c4-3a65-4771-8445-ae4a76e9c6c9", "id": "edae75c4-3a65-4771-8445-ae4a76e9c6c9",
@@ -663,7 +703,8 @@
"title": "E4. US History - Understanding this Country | Colonial America: Roots of a New Nation", "title": "E4. US History - Understanding this Country | Colonial America: Roots of a New Nation",
"summary": "Explore the birth of Colonial America in this episode of Irregular Mind. Discover the rise of Virginia, the establishment of the Thirteen Colonies, and how regional differences shaped the early American identity. From Jamestowns struggles…", "summary": "Explore the birth of Colonial America in this episode of Irregular Mind. Discover the rise of Virginia, the establishment of the Thirteen Colonies, and how regional differences shaped the early American identity. From Jamestowns struggles…",
"publishedAt": "2024-12-20T13:30:00.000Z", "publishedAt": "2024-12-20T13:30:00.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/95927257/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2024-11-17%2F391677742-44100-2-ea0a557d872b7.m4a"
}, },
{ {
"id": "87c0d58b-ac9f-4017-a269-c7f16ff67587", "id": "87c0d58b-ac9f-4017-a269-c7f16ff67587",
@@ -672,7 +713,8 @@
"title": "E3. US History - Understanding this Country | Empires, Exploration, and the Birth of Colonies", "title": "E3. US History - Understanding this Country | Empires, Exploration, and the Birth of Colonies",
"summary": "Discover the dramatic shifts in power as the Spanish Armada falls, the rise of tobacco in Virginia, and the relentless search for the Northwest Passage. Explore the early European settlements, trade networks, and cultural exchanges that sh…", "summary": "Discover the dramatic shifts in power as the Spanish Armada falls, the rise of tobacco in Virginia, and the relentless search for the Northwest Passage. Explore the early European settlements, trade networks, and cultural exchanges that sh…",
"publishedAt": "2024-12-17T04:34:51.000Z", "publishedAt": "2024-12-17T04:34:51.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/95721830/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2024-11-12%2F391421749-44100-2-528bde0d8cb69.m4a"
}, },
{ {
"id": "d8f3684a-1fab-4ff1-a638-d48564c870a5", "id": "d8f3684a-1fab-4ff1-a638-d48564c870a5",
@@ -681,7 +723,8 @@
"title": "E2. US History - Understanding this Country | 1492 and Beyond: The Atlantic World Unveiled", "title": "E2. US History - Understanding this Country | 1492 and Beyond: The Atlantic World Unveiled",
"summary": "Uncover the pivotal moments that reshaped history in Episode Two of Irregular Mind's U.S. history series, \"Understanding This Country.\" From Columbus' daring voyage and the race for riches in 15th-century Europe to the clash of cultures, t…", "summary": "Uncover the pivotal moments that reshaped history in Episode Two of Irregular Mind's U.S. history series, \"Understanding This Country.\" From Columbus' daring voyage and the race for riches in 15th-century Europe to the clash of cultures, t…",
"publishedAt": "2024-12-09T05:11:09.000Z", "publishedAt": "2024-12-09T05:11:09.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/95563461/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2024-11-9%2F35bb2106-d023-5bda-ac51-291f03816da4.mp3"
}, },
{ {
"id": "7f5c488b-3a7b-4d62-847c-fd5a807577a9", "id": "7f5c488b-3a7b-4d62-847c-fd5a807577a9",
@@ -690,7 +733,8 @@
"title": "E1. US History - Understanding this Country", "title": "E1. US History - Understanding this Country",
"summary": "I came to the United States chasing opportunities, but I quickly realized that this land is more than just skyscrapers and Hollywood. The history of this place is layered, complicated, and, honestly, sometimes stranger than fiction. And th…", "summary": "I came to the United States chasing opportunities, but I quickly realized that this land is more than just skyscrapers and Hollywood. The history of this place is layered, complicated, and, honestly, sometimes stranger than fiction. And th…",
"publishedAt": "2024-12-02T05:02:25.000Z", "publishedAt": "2024-12-02T05:02:25.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded/7490178/7490178-1644680234566-cf5628ab210f1.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/95226944/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fstaging%2F2024-11-9%2F58a5abaf-88d1-bf43-c09b-63fff3fbeefa.mp3"
}, },
{ {
"id": "f25afab7-54b8-4a61-bc0d-143986c7d475", "id": "f25afab7-54b8-4a61-bc0d-143986c7d475",
@@ -699,7 +743,8 @@
"title": "One Person - One Relation", "title": "One Person - One Relation",
"summary": "A common issue faced by most of us - relationships. Just a wakeup call on it.", "summary": "A common issue faced by most of us - relationships. Just a wakeup call on it.",
"publishedAt": "2022-03-12T19:43:48.000Z", "publishedAt": "2022-03-12T19:43:48.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded400/7490178/7490178-1644680237670-d15b3f1acda1b.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded400/7490178/7490178-1644680237670-d15b3f1acda1b.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/48954123/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fproduction%2Fexports%2F2d3db148%2F48954123%2F7881df2d251946b11f07aa114a313114.m4a"
}, },
{ {
"id": "95b07a0e-6f13-4822-9d4f-2fa74dd4cff9", "id": "95b07a0e-6f13-4822-9d4f-2fa74dd4cff9",
@@ -708,7 +753,8 @@
"title": "Dharmaraja.- Conclusion", "title": "Dharmaraja.- Conclusion",
"summary": "Conclusion and Aftermath of Yogi's plot.", "summary": "Conclusion and Aftermath of Yogi's plot.",
"publishedAt": "2022-02-05T19:28:44.000Z", "publishedAt": "2022-02-05T19:28:44.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644089311927-91c36cb8383e5.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644089311927-91c36cb8383e5.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/47228562/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fproduction%2Fexports%2F2d3db148%2F47228562%2Fe1c5f1c941e23d8716f0531afc530901.m4a"
}, },
{ {
"id": "e72fb42d-1f10-4fe6-842c-811e260a54e7", "id": "e72fb42d-1f10-4fe6-842c-811e260a54e7",
@@ -717,7 +763,8 @@
"title": "Dharmaraja - Episode 28", "title": "Dharmaraja - Episode 28",
"summary": "The final showdown. Major players face off. And Yogi does the undoable.", "summary": "The final showdown. Major players face off. And Yogi does the undoable.",
"publishedAt": "2022-02-05T19:02:09.000Z", "publishedAt": "2022-02-05T19:02:09.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644087715926-5f708b8948277.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644087715926-5f708b8948277.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/47227651/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fproduction%2Fexports%2F2d3db148%2F47227651%2F3edd96c916d24c499670aa71135e7e18.m4a"
}, },
{ {
"id": "e1c0d4dc-35e7-4cb7-b022-0bebef8c3ed1", "id": "e1c0d4dc-35e7-4cb7-b022-0bebef8c3ed1",
@@ -726,7 +773,8 @@
"title": "Dharmaraja - Episode 27", "title": "Dharmaraja - Episode 27",
"summary": "Yogi is shocked with a surprise news. Relationship between brothers crack. Can Yogi see what kind of mess he is into?", "summary": "Yogi is shocked with a surprise news. Relationship between brothers crack. Can Yogi see what kind of mess he is into?",
"publishedAt": "2022-02-05T17:52:55.000Z", "publishedAt": "2022-02-05T17:52:55.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644083569325-d4aaaf3e6d72.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644083569325-d4aaaf3e6d72.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/47224768/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fproduction%2Fexports%2F2d3db148%2F47224768%2F8edbd4996efddbd8e7e058889e1ff20b.m4a"
}, },
{ {
"id": "677892be-4457-49cb-a2b1-b7a696ea7275", "id": "677892be-4457-49cb-a2b1-b7a696ea7275",
@@ -735,7 +783,8 @@
"title": "Dharmaraja - Episode 26", "title": "Dharmaraja - Episode 26",
"summary": "Helplessness grasps Chandrakkaran. Thripurasundarikunjamma sees visions...", "summary": "Helplessness grasps Chandrakkaran. Thripurasundarikunjamma sees visions...",
"publishedAt": "2022-02-04T21:12:06.000Z", "publishedAt": "2022-02-04T21:12:06.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644083230812-bbcda04085e26.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1644083230812-bbcda04085e26.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/47186638/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fproduction%2Fexports%2F2d3db148%2F47186638%2Fdcbf3696cbde84e8db2d1bde36aebc7b.m4a"
}, },
{ {
"id": "8a09387c-bee8-46b9-97f1-828e28dfa09a", "id": "8a09387c-bee8-46b9-97f1-828e28dfa09a",
@@ -744,7 +793,8 @@
"title": "Dharmaraja - Episode 25", "title": "Dharmaraja - Episode 25",
"summary": "Conflict comes to day light. Kesavan Kunju escapes. Padathalavan is all out beast mode after knowing what happened to Kuppassar.", "summary": "Conflict comes to day light. Kesavan Kunju escapes. Padathalavan is all out beast mode after knowing what happened to Kuppassar.",
"publishedAt": "2022-02-03T21:23:34.000Z", "publishedAt": "2022-02-03T21:23:34.000Z",
"thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1643923406877-eef4729d8dab5.jpg" "thumbnailUrl": "https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode/7490178/7490178-1643923406877-eef4729d8dab5.jpg",
"audioUrl": "https://anchor.fm/s/2d3db148/podcast/play/47135056/https%3A%2F%2Fd3ctxlq1ktw2nl.cloudfront.net%2Fproduction%2Fexports%2F2d3db148%2F47135056%2F90996aae5ca4bb6cb4103e2adc0c9c5e.m4a"
} }
], ],
"wordpress": { "wordpress": {

View File

@@ -0,0 +1,3 @@
{
"2dad79d8-ed54-42a8-91a1-4c12a22e3070": "https://open.spotify.com/episode/EPISODE_ID"
}

View File

@@ -386,6 +386,15 @@ textarea:focus-visible {
background 120ms ease; background 120ms ease;
} }
button.card {
padding: 0;
font: inherit;
color: inherit;
text-align: left;
cursor: pointer;
width: 100%;
}
.card-media { .card-media {
flex: 0 0 auto; flex: 0 0 auto;
} }
@@ -573,3 +582,335 @@ textarea:focus-visible {
height: 200px; height: 200px;
} }
} }
/* --- Media Modal --- */
#media-modal {
max-width: 800px;
width: calc(100vw - 48px);
max-height: 90vh;
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.16);
background: var(--bg1);
color: var(--fg);
padding: 0;
overflow: hidden;
box-shadow:
0 24px 80px rgba(0, 0, 0, 0.6),
0 0 0 1px rgba(255, 255, 255, 0.08) inset;
}
#media-modal::backdrop {
background: rgba(0, 0, 0, 0.75);
backdrop-filter: blur(8px);
}
.media-modal-content {
display: flex;
flex-direction: column;
height: 100%;
overflow-y: auto;
overflow-x: hidden;
}
.media-modal-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding: 20px 24px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.media-modal-header-left {
display: flex;
align-items: center;
gap: 14px;
min-width: 0;
flex: 1;
}
.media-modal-thumb {
display: none;
width: 44px;
height: 44px;
border-radius: 14px;
object-fit: cover;
border: 1px solid rgba(255, 255, 255, 0.14);
background: rgba(0, 0, 0, 0.25);
}
.media-modal-title-wrap {
min-width: 0;
}
.media-modal-kicker {
font-size: 11px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--muted);
margin: 0 0 6px;
}
.media-modal-title {
margin: 0;
font-size: 20px;
font-weight: 800;
line-height: 1.3;
letter-spacing: -0.02em;
overflow: hidden;
text-overflow: ellipsis;
}
.media-modal-close {
flex: 0 0 auto;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.14);
background: rgba(255, 255, 255, 0.04);
color: var(--fg);
cursor: pointer;
transition:
background 120ms ease,
transform 120ms ease;
}
.media-modal-close:hover {
background: rgba(255, 255, 255, 0.08);
transform: scale(1.05);
}
.media-modal-embed-container {
position: relative;
width: 100%;
aspect-ratio: 16 / 9;
background: rgba(0, 0, 0, 0.4);
}
.media-modal-embed-container[data-embed-kind="spotify"],
.media-modal-embed-container[data-embed-kind="audio"],
.media-modal-embed-container[data-embed-kind="fallback"] {
margin: 14px 24px 0;
width: calc(100% - 48px);
}
.media-modal-embed-container[data-embed-kind="spotify"] {
aspect-ratio: auto;
height: 232px;
background: rgba(255, 255, 255, 0.04);
border-radius: 12px;
overflow: hidden;
}
.media-modal-embed-container[data-embed-kind="audio"] {
aspect-ratio: auto;
height: auto;
padding: 12px;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.03));
border-radius: 12px;
overflow: hidden;
}
.media-modal-embed-placeholder {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.08);
z-index: 1;
overflow: hidden;
}
.media-modal-embed-fallback {
position: relative;
z-index: 2;
display: none;
align-items: center;
justify-content: center;
padding: 12px 14px;
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.16);
background: rgba(10, 14, 28, 0.55);
color: var(--fg);
font-weight: 700;
text-decoration: none;
}
.media-modal-embed-container[data-embed-kind="fallback"] .media-modal-embed-placeholder::before,
.media-modal-embed-container[data-embed-kind="fallback"] .media-modal-embed-placeholder::after {
display: none;
animation: none;
}
.media-modal-embed-container[data-embed-kind="fallback"] .media-modal-embed-placeholder {
background: rgba(255, 255, 255, 0.04);
}
.media-modal-embed-container[data-embed-kind="fallback"] .media-modal-embed-fallback {
display: inline-flex;
}
.media-modal-embed-placeholder::before {
content: "";
position: absolute;
inset: 0;
z-index: 1;
background: linear-gradient(
90deg,
transparent 0%,
rgba(255, 255, 255, 0.12) 35%,
rgba(255, 255, 255, 0.22) 50%,
rgba(255, 255, 255, 0.12) 65%,
transparent 100%
);
animation: shimmer 1.6s ease-in-out infinite;
}
.media-modal-embed-placeholder::after {
content: "";
position: relative;
z-index: 2;
width: 40px;
height: 40px;
border: 3px solid rgba(255, 255, 255, 0.2);
border-top-color: var(--accent2);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.media-modal-embed {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
border: 0;
z-index: 2;
}
.media-modal-embed-container[data-embed-kind="spotify"] .media-modal-embed,
.media-modal-embed-container[data-embed-kind="spotify"] .media-modal-embed-placeholder {
border-radius: 12px;
}
.media-modal-audio {
display: none;
width: 100%;
height: 44px;
color-scheme: dark;
accent-color: var(--accent2);
}
.media-modal-embed-container[data-embed-kind="audio"] .media-modal-audio {
display: block;
}
.media-modal-audio::-webkit-media-controls-enclosure {
border-radius: 12px;
}
.media-modal-audio::-webkit-media-controls-panel {
background: rgba(10, 14, 28, 0.55);
}
.media-modal-body {
padding: 24px;
flex: 1 1 auto;
}
.media-modal-description {
margin: 0 0 16px;
line-height: 1.6;
color: var(--muted);
}
.media-modal-meta {
display: flex;
gap: 12px;
align-items: center;
flex-wrap: wrap;
font-size: 14px;
color: var(--muted);
}
.media-modal-meta span:not(:last-child)::after {
content: "•";
margin-left: 12px;
opacity: 0.5;
}
.media-modal-ctas {
display: flex;
gap: 12px;
padding: 16px 24px 24px;
border-top: 1px solid rgba(255, 255, 255, 0.08);
}
.media-modal-ctas .cta {
flex: 1;
text-align: center;
padding: 12px 16px;
border-radius: 14px;
border: 1px solid var(--stroke);
background: linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03));
font-weight: 800;
letter-spacing: -0.01em;
transition:
background 120ms ease,
transform 120ms ease;
}
.media-modal-ctas .cta:hover {
background: rgba(255, 255, 255, 0.08);
transform: translateY(-1px);
}
.media-modal-ctas .cta.primary {
border-color: rgba(94, 228, 255, 0.55);
background: linear-gradient(135deg, rgba(94, 228, 255, 0.24), rgba(255, 205, 74, 0.16));
box-shadow:
0 0 0 3px rgba(94, 228, 255, 0.14),
0 10px 30px rgba(0, 0, 0, 0.25);
}
@media (max-width: 760px) {
#media-modal {
max-width: 96vw;
max-height: 94vh;
width: 96vw;
}
.media-modal-header {
padding: 16px 20px;
}
.media-modal-embed-container[data-embed-kind="spotify"],
.media-modal-embed-container[data-embed-kind="audio"],
.media-modal-embed-container[data-embed-kind="fallback"] {
margin: 12px 20px 0;
width: calc(100% - 40px);
}
.media-modal-title {
font-size: 18px;
}
.media-modal-body {
padding: 20px;
}
.media-modal-ctas {
flex-direction: column;
padding: 12px 20px 20px;
}
}

View File

@@ -37,6 +37,41 @@ function dedupe(items: ContentItem[]): ContentItem[] {
return out; return out;
} }
function normalizeSpotifyEpisodeUrl(value: string): string | undefined {
const v = (value || "").trim();
if (!v) return undefined;
if (v.startsWith("https://open.spotify.com/episode/")) return v;
if (v.startsWith("https://open.spotify.com/embed/episode/")) {
return v.replace("/embed/episode/", "/episode/");
}
if (v.startsWith("spotify:episode:")) {
const id = v.split(":")[2];
if (!id) return undefined;
return `https://open.spotify.com/episode/${id}`;
}
if (/^[A-Za-z0-9]{10,30}$/.test(v)) {
return `https://open.spotify.com/episode/${v}`;
}
return undefined;
}
async function readPodcastSpotifyOverrideMap(logFn: (msg: string) => void) {
const mapPath = path.join(process.cwd(), "content", "podcast-spotify-map.json");
try {
const raw = await fs.readFile(mapPath, "utf8");
const parsed = JSON.parse(raw) as Record<string, string>;
if (!parsed || typeof parsed !== "object") return undefined;
return parsed;
} catch {
logFn("Podcast: spotify override map not found (content/podcast-spotify-map.json)");
return undefined;
}
}
async function main() { async function main() {
const cfg = getIngestConfigFromEnv(process.env); const cfg = getIngestConfigFromEnv(process.env);
const generatedAt = new Date().toISOString(); const generatedAt = new Date().toISOString();
@@ -101,6 +136,23 @@ async function main() {
); );
log(`Podcast: RSS ${cached ? "cache" : "live"} (${items.length} items)`); log(`Podcast: RSS ${cached ? "cache" : "live"} (${items.length} items)`);
log(`Podcast: RSS ok (${items.length} items)`); log(`Podcast: RSS ok (${items.length} items)`);
const overrideMap = await readPodcastSpotifyOverrideMap(log);
if (overrideMap) {
let overridden = 0;
for (const it of items) {
if (it.source !== "podcast") continue;
const mapped = overrideMap[it.id] || overrideMap[it.url];
const nextUrl = mapped ? normalizeSpotifyEpisodeUrl(mapped) : undefined;
if (!nextUrl) continue;
it.url = nextUrl;
overridden++;
}
if (overridden > 0) {
log(`Podcast: applied Spotify URL overrides (${overridden} items)`);
}
}
all.push(...items); all.push(...items);
} catch (e) { } catch (e) {
log(`Podcast: RSS failed (${String(e)})`); log(`Podcast: RSS failed (${String(e)})`);

View File

@@ -20,17 +20,10 @@ const { categories, activeCategorySlug } = Astro.props;
> >
All All
</a> </a>
<a
class={activeCategorySlug === "__pages" ? "active" : ""} {categories
href="/blog/pages" .filter((c) => c.slug !== "uncategorized")
data-umami-event="click" .map((c) => (
data-umami-event-target_id="blog.subnav.pages"
data-umami-event-placement="blog.subnav"
data-umami-event-target_url="/blog/pages"
>
Pages
</a>
{categories.map((c) => (
<a <a
class={activeCategorySlug === c.slug ? "active" : ""} class={activeCategorySlug === c.slug ? "active" : ""}
href={`/blog/category/${c.slug}`} href={`/blog/category/${c.slug}`}

View File

@@ -35,18 +35,34 @@ const umamiType =
: undefined; : undefined;
const umamiTitle = umamiType ? truncate(item.title, 160) : undefined; const umamiTitle = umamiType ? truncate(item.title, 160) : undefined;
---
<StandardCard // Determine if card should open modal (youtube/podcast) or link normally (other sources)
href={item.url} const isModalTrigger = item.source === "youtube" || item.source === "podcast";
title={item.title} const mode = isModalTrigger ? "modal" : "link";
summary={item.summary}
imageUrl={item.thumbnailUrl} // Build link attrs based on mode
dateLabel={dateLabel} const linkAttrs = isModalTrigger
viewsLabel={item.metrics?.views !== undefined ? `${item.metrics.views.toLocaleString()} views` : undefined} ? {
sourceLabel={item.source} // Modal trigger: pass all item data via data-* attributes
isExternal={true} "data-item-id": item.id,
linkAttrs={{ "data-item-source": item.source,
"data-item-url": item.url,
"data-item-title": item.title,
"data-item-summary": item.summary || "",
"data-item-published-at": item.publishedAt,
"data-item-thumbnail-url": item.thumbnailUrl || "",
"data-item-audio-url": item.source === "podcast" ? item.audioUrl || "" : "",
"data-item-views": item.metrics?.views?.toString() || "",
// Umami tracking: media_preview instead of outbound_click
"data-umami-event": "media_preview",
"data-umami-event-target_id": targetId,
"data-umami-event-placement": placement,
"data-umami-event-title": umamiTitle,
"data-umami-event-type": umamiType,
"data-umami-event-source": item.source,
}
: {
// Normal link: outbound_click tracking
"data-umami-event": "outbound_click", "data-umami-event": "outbound_click",
"data-umami-event-target_id": targetId, "data-umami-event-target_id": targetId,
"data-umami-event-placement": placement, "data-umami-event-placement": placement,
@@ -56,5 +72,18 @@ const umamiTitle = umamiType ? truncate(item.title, 160) : undefined;
"data-umami-event-domain": domain || "unknown", "data-umami-event-domain": domain || "unknown",
"data-umami-event-source": item.source, "data-umami-event-source": item.source,
"data-umami-event-ui_placement": "content_card", "data-umami-event-ui_placement": "content_card",
}} };
---
<StandardCard
href={isModalTrigger ? undefined : item.url}
title={item.title}
summary={item.summary}
imageUrl={item.thumbnailUrl}
dateLabel={dateLabel}
viewsLabel={item.metrics?.views !== undefined ? `${item.metrics.views.toLocaleString()} views` : undefined}
sourceLabel={item.source}
isExternal={!isModalTrigger}
mode={mode}
linkAttrs={linkAttrs}
/> />

View File

@@ -0,0 +1,398 @@
---
import { LINKS } from "../lib/links";
---
<dialog id="media-modal" aria-modal="true" aria-labelledby="media-modal-title">
<div class="media-modal-content">
<div class="media-modal-header">
<div class="media-modal-header-left">
<img class="media-modal-thumb" alt="" loading="lazy" />
<div class="media-modal-title-wrap">
<div class="media-modal-kicker"></div>
<h2 id="media-modal-title" class="media-modal-title"></h2>
</div>
</div>
<button type="button" class="media-modal-close" aria-label="Close" data-close-method="button">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<line x1="18" y1="6" x2="6" y2="18"></line>
<line x1="6" y1="6" x2="18" y2="18"></line>
</svg>
</button>
</div>
<div class="media-modal-embed-container" data-embed-kind="">
<div class="media-modal-embed-placeholder">
<a class="media-modal-embed-fallback" target="_blank" rel="noopener noreferrer"></a>
</div>
<iframe
class="media-modal-embed"
title="Media embed"
width="100%"
frameborder="0"
allowfullscreen
></iframe>
<audio class="media-modal-audio" controls></audio>
</div>
<div class="media-modal-body">
<p class="media-modal-description"></p>
<div class="media-modal-meta">
<span class="media-modal-date"></span>
<span class="media-modal-views"></span>
</div>
</div>
<div class="media-modal-ctas">
<a class="cta primary media-modal-cta-follow" target="_blank" rel="me noopener noreferrer"></a>
<a class="cta media-modal-cta-view" target="_blank" rel="me noopener noreferrer"></a>
</div>
</div>
</dialog>
<script is:inline define:vars={{ youtubeChannelUrl: LINKS.youtubeChannel, podcastUrl: LINKS.podcast }}>
(function() {
const dialog = document.getElementById("media-modal");
const dialogContent = dialog.querySelector(".media-modal-content");
const kickerEl = dialog.querySelector(".media-modal-kicker");
const thumbEl = dialog.querySelector(".media-modal-thumb");
const titleEl = dialog.querySelector(".media-modal-title");
const embedContainer = dialog.querySelector(".media-modal-embed-container");
const embedPlaceholder = dialog.querySelector(".media-modal-embed-placeholder");
const embedFallback = dialog.querySelector(".media-modal-embed-fallback");
const iframe = dialog.querySelector(".media-modal-embed");
const audio = dialog.querySelector(".media-modal-audio");
const descriptionEl = dialog.querySelector(".media-modal-description");
const dateEl = dialog.querySelector(".media-modal-date");
const viewsEl = dialog.querySelector(".media-modal-views");
const followCta = dialog.querySelector(".media-modal-cta-follow");
const viewCta = dialog.querySelector(".media-modal-cta-view");
const closeBtn = dialog.querySelector(".media-modal-close");
let triggerElement = null;
let currentTargetId = null;
// Extract video ID from YouTube URL
function extractYoutubeId(url) {
try {
const u = new URL(url);
// Handle youtube.com/watch?v=ID
if (u.hostname.includes("youtube.com") && u.searchParams.has("v")) {
return u.searchParams.get("v");
}
// Handle youtu.be/ID
if (u.hostname.includes("youtu.be")) {
return u.pathname.slice(1).split("/")[0];
}
} catch (e) {}
return null;
}
// Extract Spotify episode ID from URL
function extractSpotifyEpisodeId(input) {
try {
const u = new URL(String(input));
if (!u.hostname.includes("spotify.com")) return null;
const match = u.pathname.match(/\/episode\/([^/?]+)/);
return match ? match[1] : null;
} catch (e) {}
return null;
}
function extractSpotifyEpisodeIdFromGuid(guid) {
const s = String(guid || "").trim();
if (!s) return null;
// spotify:episode:EPISODE_ID
if (s.startsWith("spotify:episode:")) {
const parts = s.split(":");
return parts.length >= 3 ? parts[2] : null;
}
// URL form
const fromUrl = extractSpotifyEpisodeId(s);
if (fromUrl) return fromUrl;
return null;
}
function getEmbed(source, itemUrl, itemId) {
if (source === "youtube") {
const videoId = extractYoutubeId(itemUrl);
if (!videoId) return null;
return {
kind: "youtube",
src: `https://www.youtube.com/embed/${videoId}?rel=0&modestbranding=1`,
};
}
if (source === "podcast") {
const episodeId =
extractSpotifyEpisodeId(itemUrl) ||
extractSpotifyEpisodeIdFromGuid(itemId) ||
extractSpotifyEpisodeId(itemId);
if (!episodeId) return null;
return {
kind: "spotify",
src: `https://open.spotify.com/embed/episode/${episodeId}`,
height: 232,
};
}
return null;
}
// Add UTM parameters to URL
function withUtm(url, utmParams) {
const u = new URL(url);
for (const [key, value] of Object.entries(utmParams)) {
if (value) u.searchParams.set(key, value);
}
return u.toString();
}
function withYoutubeSubscribePrompt(url) {
try {
const u = new URL(url);
u.searchParams.set("sub_confirmation", "1");
return u.toString();
} catch {
return url;
}
}
// Stop playback by blanking the iframe
function stopPlayback() {
iframe.src = "about:blank";
embedPlaceholder.style.display = "block";
embedContainer.dataset.embedKind = "";
iframe.style.display = "";
embedFallback.style.display = "none";
embedFallback.removeAttribute("href");
audio.pause();
audio.removeAttribute("src");
audio.style.display = "none";
thumbEl.removeAttribute("src");
thumbEl.style.display = "none";
kickerEl.textContent = "";
iframe.removeAttribute("allow");
iframe.removeAttribute("height");
}
// Close modal
function closeModal(method) {
if (!dialog.open) return;
stopPlayback();
dialog.close();
// Emit media_preview_close event if Umami is available
if (typeof window.umami !== "undefined" && currentTargetId) {
window.umami.track("media_preview_close", {
target_id: currentTargetId,
close_method: method || "unknown"
});
}
// Restore focus to trigger element
if (triggerElement) {
triggerElement.focus();
triggerElement = null;
}
currentTargetId = null;
}
// Open and populate modal
function openModal(cardEl) {
// Store trigger for focus return
triggerElement = cardEl;
// Read data attributes
const itemId = cardEl.dataset.itemId;
const source = cardEl.dataset.itemSource;
const url = cardEl.dataset.itemUrl;
const audioUrl = cardEl.dataset.itemAudioUrl;
const title = cardEl.dataset.itemTitle;
const summary = cardEl.dataset.itemSummary;
const publishedAt = cardEl.dataset.itemPublishedAt;
const thumbnailUrl = cardEl.dataset.itemThumbnailUrl;
const views = cardEl.dataset.itemViews;
// Store target ID for close tracking
currentTargetId = cardEl.dataset.umamiEventTargetId;
kickerEl.textContent = source === "podcast" ? "Podcast" : source === "youtube" ? "Video" : "";
if (source === "podcast" && thumbnailUrl) {
thumbEl.src = thumbnailUrl;
thumbEl.style.display = "block";
} else {
thumbEl.removeAttribute("src");
thumbEl.style.display = "none";
}
// Populate title
titleEl.textContent = title || "";
// Populate description
descriptionEl.textContent = summary || "";
// Populate date
if (publishedAt) {
const d = new Date(publishedAt);
const formatted = Number.isFinite(d.valueOf())
? d.toLocaleDateString(undefined, { year: "numeric", month: "short", day: "numeric" })
: "";
dateEl.textContent = formatted;
dateEl.style.display = formatted ? "" : "none";
} else {
dateEl.style.display = "none";
}
// Populate views
if (views && views !== "") {
const viewsNum = parseInt(views, 10);
viewsEl.textContent = `${viewsNum.toLocaleString()} views`;
viewsEl.style.display = "";
} else {
viewsEl.style.display = "none";
}
// Construct embed
const embed = getEmbed(source, url, itemId);
if (embed) {
embedContainer.dataset.embedKind = embed.kind;
embedPlaceholder.style.display = "block";
embedFallback.style.display = "none";
embedFallback.removeAttribute("href");
iframe.style.display = "";
if (embed.kind === "spotify") {
iframe.setAttribute(
"allow",
"autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture",
);
if (embed.height) iframe.setAttribute("height", String(embed.height));
} else {
iframe.setAttribute(
"allow",
"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
);
iframe.removeAttribute("height");
}
iframe.src = embed.src;
iframe.addEventListener("load", function onLoad() {
embedPlaceholder.style.display = "none";
iframe.removeEventListener("load", onLoad);
});
embedContainer.style.display = "block";
} else {
// No embed available
if (source === "podcast") {
embedContainer.style.display = "block";
iframe.src = "about:blank";
iframe.style.display = "none";
if (audioUrl) {
embedContainer.dataset.embedKind = "audio";
embedPlaceholder.style.display = "none";
embedFallback.style.display = "none";
audio.style.display = "block";
audio.src = audioUrl;
} else {
embedContainer.dataset.embedKind = "fallback";
embedPlaceholder.style.display = "flex";
embedFallback.style.display = "inline-flex";
embedFallback.href = url;
embedFallback.textContent = "Listen on Spotify";
audio.style.display = "none";
}
} else {
embedContainer.style.display = "none";
}
}
const platform = source === "youtube" ? "youtube" : "spotify";
const channelUrl = source === "youtube" ? youtubeChannelUrl : podcastUrl;
const followAction = source === "youtube" ? "subscribe" : "follow";
const viewAction = source === "youtube" ? "view" : "listen";
const followLabel = source === "youtube" ? "Subscribe on YouTube" : "Follow on Spotify";
const viewLabel = source === "youtube" ? "View on YouTube" : "Listen on Spotify";
const followBaseUrl = source === "youtube" ? withYoutubeSubscribePrompt(channelUrl) : channelUrl;
const followUrl = withUtm(followBaseUrl, {
utm_source: "website",
utm_medium: "cta",
utm_campaign: "social-acquisition",
utm_content: `${platform}:media_modal`,
});
followCta.href = followUrl;
followCta.textContent = followLabel;
followCta.setAttribute("data-umami-event", "cta_click");
followCta.setAttribute("data-umami-event-target_id", `modal.cta.${followAction}.${platform}`);
followCta.setAttribute("data-umami-event-placement", "media_modal");
followCta.setAttribute("data-umami-event-platform", platform);
followCta.setAttribute("data-umami-event-target_url", channelUrl);
const viewUrl = withUtm(url, {
utm_source: "website",
utm_medium: "cta",
utm_campaign: "social-acquisition",
utm_content: `${platform}:media_modal`,
});
viewCta.href = viewUrl;
viewCta.textContent = viewLabel;
viewCta.setAttribute("data-umami-event", "cta_click");
viewCta.setAttribute("data-umami-event-target_id", `modal.cta.${viewAction}.${platform}`);
viewCta.setAttribute("data-umami-event-placement", "media_modal");
viewCta.setAttribute("data-umami-event-platform", platform);
viewCta.setAttribute("data-umami-event-target_url", url);
// Open the dialog
dialog.showModal();
}
// Listen for clicks on modal-trigger cards
document.addEventListener("click", function(e) {
const card = e.target.closest("button.card[data-item-id]");
if (card) {
e.preventDefault();
openModal(card);
}
});
// Close button
closeBtn.addEventListener("click", function() {
closeModal("button");
});
// Backdrop click
dialog.addEventListener("click", function(e) {
if (e.target === dialog) {
closeModal("backdrop");
}
});
// Escape key (native dialog handles the close, we hook into the close event)
dialog.addEventListener("close", function() {
// If dialog was closed but we didn't call closeModal explicitly (i.e., Escape key)
if (dialog.open === false && currentTargetId) {
stopPlayback();
if (typeof window.umami !== "undefined") {
window.umami.track("media_preview_close", {
target_id: currentTargetId,
close_method: "escape"
});
}
if (triggerElement) {
triggerElement.focus();
triggerElement = null;
}
currentTargetId = null;
}
});
})();
</script>

View File

@@ -1,6 +1,6 @@
--- ---
type Props = { type Props = {
href: string; href?: string;
title: string; title: string;
summary?: string; summary?: string;
imageUrl?: string; imageUrl?: string;
@@ -9,6 +9,7 @@ type Props = {
sourceLabel: string; sourceLabel: string;
isExternal?: boolean; isExternal?: boolean;
linkAttrs?: Record<string, any>; linkAttrs?: Record<string, any>;
mode?: "link" | "modal";
}; };
const { const {
@@ -21,6 +22,7 @@ const {
sourceLabel, sourceLabel,
isExternal, isExternal,
linkAttrs, linkAttrs,
mode = "link",
} = Astro.props; } = Astro.props;
function truncate(s: string, n: number) { function truncate(s: string, n: number) {
@@ -33,14 +35,21 @@ function truncate(s: string, n: number) {
const summaryText = truncate(summary || "", 180); const summaryText = truncate(summary || "", 180);
const Element = mode === "modal" ? "button" : "a";
const elementProps = mode === "modal"
? { type: "button", ...linkAttrs }
: {
href,
target: isExternal ? "_blank" : undefined,
rel: isExternal ? "noopener noreferrer" : undefined,
...linkAttrs
};
--- ---
<a <Element
class="card" class="card"
href={href} {...elementProps}
target={isExternal ? "_blank" : undefined}
rel={isExternal ? "noopener noreferrer" : undefined}
{...(linkAttrs || {})}
> >
<div class="card-media"> <div class="card-media">
{imageUrl ? ( {imageUrl ? (
@@ -66,4 +75,4 @@ const summaryText = truncate(summary || "", 180);
<span class={`pill pill-${sourceLabel}`}>{sourceLabel}</span> <span class={`pill pill-${sourceLabel}`}>{sourceLabel}</span>
</div> </div>
</div> </div>
</a> </Element>

View File

@@ -12,6 +12,7 @@ export type ContentItem = {
summary?: string; summary?: string;
publishedAt: string; // ISO-8601 publishedAt: string; // ISO-8601
thumbnailUrl?: string; thumbnailUrl?: string;
audioUrl?: string;
metrics?: ContentMetrics; metrics?: ContentMetrics;
}; };

View File

@@ -26,6 +26,7 @@ export function normalizePodcastFeedItems(items: any[], limit: number): ContentI
const out = (items || []).slice(0, limit).map((it) => { const out = (items || []).slice(0, limit).map((it) => {
const url = it.link || ""; const url = it.link || "";
const id = (it.guid || it.id || url).toString(); const id = (it.guid || it.id || url).toString();
const audioUrl = (it.enclosure?.url || "").toString();
const publishedAt = (it.isoDate || it.pubDate || new Date(0).toISOString()).toString(); const publishedAt = (it.isoDate || it.pubDate || new Date(0).toISOString()).toString();
const summary = truncate( const summary = truncate(
(it.contentSnippet || (it.contentSnippet ||
@@ -44,6 +45,7 @@ export function normalizePodcastFeedItems(items: any[], limit: number): ContentI
summary: summary || undefined, summary: summary || undefined,
publishedAt: new Date(publishedAt).toISOString(), publishedAt: new Date(publishedAt).toISOString(),
thumbnailUrl: (it.itunes?.image || undefined) as string | undefined, thumbnailUrl: (it.itunes?.image || undefined) as string | undefined,
audioUrl: audioUrl || undefined,
}; };
}); });

View File

@@ -1,5 +1,5 @@
export const LINKS = { export const LINKS = {
youtubeChannel: "https://www.youtube.com/santhoshj", youtubeChannel: "https://www.youtube.com/santhoshj",
instagramProfile: "https://www.instagram.com/santhoshjanan/", instagramProfile: "https://www.instagram.com/santhoshjanan/",
podcast: "https://podcasters.spotify.com/pod/show/irregularmind", // default; override in CTA props if needed podcast: "https://creators.spotify.com/pod/profile/the-irregular-mind/",
}; };

View File

@@ -3,6 +3,7 @@ import BaseLayout from "../layouts/BaseLayout.astro";
import CtaLink from "../components/CtaLink.astro"; import CtaLink from "../components/CtaLink.astro";
import ContentCard from "../components/ContentCard.astro"; import ContentCard from "../components/ContentCard.astro";
import InstagramEmbed from "../components/InstagramEmbed.astro"; import InstagramEmbed from "../components/InstagramEmbed.astro";
import MediaModal from "../components/MediaModal.astro";
import { readContentCache } from "../lib/content/cache"; import { readContentCache } from "../lib/content/cache";
import { import {
newestItems, newestItems,
@@ -240,4 +241,6 @@ const newYorkTime = new Date(cache.generatedAt).toLocaleString('en-US', options)
<CtaLink platform="podcast" placement="footer_cta" url={LINKS.podcast} label="Podcast" /> <CtaLink platform="podcast" placement="footer_cta" url={LINKS.podcast} label="Podcast" />
</div> </div>
</section> </section>
<MediaModal />
</BaseLayout> </BaseLayout>

View File

@@ -1,6 +1,7 @@
--- ---
import BaseLayout from "../layouts/BaseLayout.astro"; import BaseLayout from "../layouts/BaseLayout.astro";
import ContentCard from "../components/ContentCard.astro"; import ContentCard from "../components/ContentCard.astro";
import MediaModal from "../components/MediaModal.astro";
import { readContentCache } from "../lib/content/cache"; import { readContentCache } from "../lib/content/cache";
import { podcastEpisodes } from "../lib/content/selectors"; import { podcastEpisodes } from "../lib/content/selectors";
@@ -35,4 +36,6 @@ const episodes = podcastEpisodes(cache).sort(
) )
} }
</section> </section>
<MediaModal />
</BaseLayout> </BaseLayout>

View File

@@ -1,6 +1,7 @@
--- ---
import BaseLayout from "../layouts/BaseLayout.astro"; import BaseLayout from "../layouts/BaseLayout.astro";
import ContentCard from "../components/ContentCard.astro"; import ContentCard from "../components/ContentCard.astro";
import MediaModal from "../components/MediaModal.astro";
import { readContentCache } from "../lib/content/cache"; import { readContentCache } from "../lib/content/cache";
import { youtubeVideos } from "../lib/content/selectors"; import { youtubeVideos } from "../lib/content/selectors";
@@ -35,4 +36,6 @@ const videos = youtubeVideos(cache).sort(
) )
} }
</section> </section>
<MediaModal />
</BaseLayout> </BaseLayout>

View File

@@ -22,10 +22,25 @@ describe("umami event attributes", () => {
expect(src).toContain("data-umami-event-placement"); expect(src).toContain("data-umami-event-placement");
}); });
it("instruments content cards using outbound_click", async () => { it("instruments youtube/podcast content cards using media_preview", async () => {
const src = await read("src/components/ContentCard.astro");
expect(src).toContain('"data-umami-event": "media_preview"');
expect(src).toContain("data-umami-event-target_id");
expect(src).toContain("data-umami-event-source");
});
it("instruments other content cards using outbound_click", async () => {
const src = await read("src/components/ContentCard.astro"); const src = await read("src/components/ContentCard.astro");
expect(src).toContain('"data-umami-event": "outbound_click"'); expect(src).toContain('"data-umami-event": "outbound_click"');
expect(src).toContain("data-umami-event-target_id"); expect(src).toContain("data-umami-event-target_id");
expect(src).toContain("data-umami-event-domain"); expect(src).toContain("data-umami-event-domain");
}); });
it("instruments modal CTAs with correct attributes", async () => {
const src = await read("src/components/MediaModal.astro");
expect(src).toContain('"cta_click"');
expect(src).toContain('"data-umami-event-target_id"');
expect(src).toContain('"data-umami-event-placement", "media_modal"');
expect(src).toContain('"data-umami-event-platform"');
});
}); });