<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://www.cjav.dev/</loc>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/about</loc>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/uses</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles</loc>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/talks</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/meet</loc>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos</loc>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/ax-dx-adx-naming-the-three-audiences-your-api-now-has-to-serve</loc>
    <lastmod>2026-03-03T20:46:00Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2026-03-03T15:43:00Z</news:publication_date>
      <news:title>AX, DX, ADX: naming the three audiences your API now has to serve</news:title>
      <news:keywords></news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/introducing-the-experimental-stainless-sql-sdk-generator</loc>
    <lastmod>2026-02-18T15:13:05Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2026-02-18T10:10:00Z</news:publication_date>
      <news:title>Introducing the (experimental!) Stainless SQL SDK generator</news:title>
      <news:keywords>ai, sdk, openapi, data, sql, postgresql</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/agentlint-a-lighthouse-score-for-ai-readiness</loc>
    <lastmod>2026-02-16T15:36:53Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2026-02-16T10:35:00Z</news:publication_date>
      <news:title>AgentLint: A Lighthouse Score for AI-Readiness</news:title>
      <news:keywords>ai, developer-tools, agents, web</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/how-to-generate-a-typescript-sdk-from-your-openapi-spec</loc>
    <lastmod>2026-02-09T18:07:05Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2026-02-09T13:05:00Z</news:publication_date>
      <news:title>How to generate a TypeScript SDK from your OpenAPI spec</news:title>
      <news:keywords>Stainless, TypeScript, OpenAPI</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/what-era-are-your-docs-in</loc>
    <lastmod>2025-11-06T20:20:03Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2025-11-06T15:19:00Z</news:publication_date>
      <news:title>What era are your docs in? </news:title>
      <news:keywords>docs, sdk, stainless</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/on-distribution-a-term-for-what-rails-has-been-doing-all-along</loc>
    <lastmod>2025-09-25T14:47:20Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2025-09-24T11:17:00Z</news:publication_date>
      <news:title>On Distribution: A Term for What Rails Has Been Doing All Along</news:title>
      <news:keywords>rails, ml, ai</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/learning-in-the-age-of-ai</loc>
    <lastmod>2025-08-19T19:27:55Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2025-08-19T15:27:00Z</news:publication_date>
      <news:title>Learning in the Age of AI</news:title>
      <news:keywords></news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/shifting-gears</loc>
    <lastmod>2025-08-19T10:34:11Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2025-08-14T07:57:00Z</news:publication_date>
      <news:title>Shifting Gears</news:title>
      <news:keywords></news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/books</loc>
    <lastmod>2025-08-14T14:54:24Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-08-11T08:59:00Z</news:publication_date>
      <news:title>Books</news:title>
      <news:keywords>Books</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/is-the-vcr-plugged-in-common-sense-troubleshooting-for-web-devs</loc>
    <lastmod>2025-06-23T19:41:00Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-07-10T15:58:00Z</news:publication_date>
      <news:title>Is the VCR plugged in? Common Sense Troubleshooting For Web Devs</news:title>
      <news:keywords>Rails, Troubleshooting</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/a-flexible-ai-integration-pattern-for-ruby-on-rails</loc>
    <lastmod>2024-07-27T21:59:30Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-06-18T21:02:00Z</news:publication_date>
      <news:title>A Flexible AI Integration Pattern for Ruby on Rails</news:title>
      <news:keywords>Rails, Ruby, AI</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/a-year-of-lessons-key-principles-and-takeaways-for-a-rails-apps-in-2024</loc>
    <lastmod>2024-07-27T21:59:30Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-06-07T15:35:00Z</news:publication_date>
      <news:title>A Year of Lessons: Key Principles and Takeaways for a Rails Apps in 2024</news:title>
      <news:keywords>Rails, Best Practices</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/caching-viewcomponents</loc>
    <lastmod>2025-11-07T15:27:04Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-04-24T18:43:00Z</news:publication_date>
      <news:title>Caching ViewComponents</news:title>
      <news:keywords>Rails, Ruby</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/quick-drag-and-drop-sorting-with-rails-using-stimulus-and-shopify-draggable</loc>
    <lastmod>2024-07-27T21:59:30Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-11-29T20:15:00Z</news:publication_date>
      <news:title>Quick drag and drop sorting with Rails using stimulus and shopify/draggable</news:title>
      <news:keywords>Rails, JavaScript, StimulusJS</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/rails-performance-playbook</loc>
    <lastmod>2024-07-27T21:59:30Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-09-21T13:34:00Z</news:publication_date>
      <news:title>Rails Performance Playbook</news:title>
      <news:keywords>Rails, Performance</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/renaming-in-rails-projects-with-sed-and-find-a-guide</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-09-20T20:25:00Z</news:publication_date>
      <news:title>Renaming in Rails Projects with `sed` and `find`: A Guide</news:title>
      <news:keywords>Bash</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/how-to-setup-react-rails-with-esbuild</loc>
    <lastmod>2024-07-27T21:59:30Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-08-30T19:52:00Z</news:publication_date>
      <news:title>How to setup react-rails with esbuild</news:title>
      <news:keywords>Rails, React</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/setting-up-pr-previews-for-rails-on-render-com</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-07-17T15:19:00Z</news:publication_date>
      <news:title>Setting up PR previews for Rails on Render.com</news:title>
      <news:keywords>Rails, Deployment, Render</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/stripe-connect-onboarding-with-ruby-on-rails</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-04-14T14:46:00Z</news:publication_date>
      <news:title>Stripe Connect onboarding with Ruby on Rails</news:title>
      <news:keywords>Rails, Stripe, Stripe Connect, Webhooks</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/offer-free-trials-without-an-upfront-payment-method-using-stripe-checkout</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-02-15T18:11:00Z</news:publication_date>
      <news:title>Offer free trials without an upfront payment method using Stripe Checkout</news:title>
      <news:keywords>Ruby, Stripe, Stripe Checkout</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/handling-webhooks-for-stripe-connect</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-01-26T22:57:00Z</news:publication_date>
      <news:title>Handling webhooks for Stripe Connect</news:title>
      <news:keywords>Stripe, Stripe Connect, Webhooks</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/taking-a-cut-with-stripe-connect</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-01-24T00:00:00Z</news:publication_date>
      <news:title>Taking a cut with Stripe Connect</news:title>
      <news:keywords>Stripe, Stripe Connect</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/picking-the-right-charge-type-for-your-stripe-connect-platform</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-01-23T00:00:00Z</news:publication_date>
      <news:title>Picking the right charge type for your Stripe Connect platform</news:title>
      <news:keywords>Stripe, Stripe Connect</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/standard-vs-express-vs-custom-account-types-for-stripe-connect</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-01-06T00:00:00Z</news:publication_date>
      <news:title>Standard vs. Express vs. Custom account types for Stripe Connect</news:title>
      <news:keywords>Stripe, Stripe Connect</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/pass-data-through-stripe-payment-links</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-11-14T00:00:00Z</news:publication_date>
      <news:title>Pass data through Stripe payment links</news:title>
      <news:keywords>Stripe, Payment Links</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/how-i-start-django-apps-in-2022</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-07-07T00:00:00Z</news:publication_date>
      <news:title>How I start Django apps in 2022</news:title>
      <news:keywords>Stripe, Django, Tailwind</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/stripe-api-from-airtable-scripts</loc>
    <lastmod>2024-07-27T21:59:25Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-06-30T00:00:00Z</news:publication_date>
      <news:title>Stripe API from Airtable Scripts</news:title>
      <news:keywords>JavaScript, Stripe, Airtable</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/handling-stripe-webhooks-with-rails</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-02-17T00:00:00Z</news:publication_date>
      <news:title>Handling Stripe Webhooks with Rails</news:title>
      <news:keywords>Rails, Stripe, Webhooks</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/net-minimal-api-patterns-for-code-samples</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-02-11T00:00:00Z</news:publication_date>
      <news:title>.NET Minimal API patterns for Code Samples</news:title>
      <news:keywords>Stripe, .NET</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/tailwind-ui-menu-with-stimulus-js-and-rails</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-01-11T00:00:00Z</news:publication_date>
      <news:title>Tailwind UI menu with stimulus.js and Rails</news:title>
      <news:keywords>Rails, StimulusJS, Tailwind</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/rails-with-payments-auth-esbuild-and-tailwind-in-2022</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-01-05T00:00:00Z</news:publication_date>
      <news:title>Rails with payments, auth, esbuild, and tailwind in 2022</news:title>
      <news:keywords>Rails, Stripe, Tailwind, esbuild</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/creating-a-file-with-base64-png-dataurl</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2021-02-21T00:00:00Z</news:publication_date>
      <news:title>Creating a file with base64 png dataURL</news:title>
      <news:keywords>Ruby, Code Snippet</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/svg-to-png-with-javascript</loc>
    <lastmod>2025-11-07T15:27:25Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2021-02-20T00:00:00Z</news:publication_date>
      <news:title>SVG to PNG with JavaScript</news:title>
      <news:keywords>JavaScript</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/finding-and-killing-running-web-servers</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2021-02-18T00:00:00Z</news:publication_date>
      <news:title>Finding and killing running web servers</news:title>
      <news:keywords>Bash, Deployment</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/stripe-perl-hello-world</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2021-01-28T00:00:00Z</news:publication_date>
      <news:title>stripe-perl Hello World</news:title>
      <news:keywords></news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/webhook-trip-hazards</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-11-13T00:00:00Z</news:publication_date>
      <news:title>Webhook Trip Hazards</news:title>
      <news:keywords>Webhooks</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/challenge-accepted</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-11-06T00:00:00Z</news:publication_date>
      <news:title>Challenge Accepted</news:title>
      <news:keywords>Goals</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/working-with-cj</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-11-02T00:00:00Z</news:publication_date>
      <news:title>Working with CJ</news:title>
      <news:keywords>Values, Principles</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/pianobar-1-pandora-cli</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2016-02-01T00:00:00Z</news:publication_date>
      <news:title>Pianobar +1 Pandora CLI</news:title>
      <news:keywords></news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/tv-less-january</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2016-01-30T00:00:00Z</news:publication_date>
      <news:title>TV-Less January</news:title>
      <news:keywords>Goals</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/you-wanna-work-remote-huh</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-12-04T00:00:00Z</news:publication_date>
      <news:title>You wanna work remote, huh?</news:title>
      <news:keywords>Career, Remote</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/extreme-validation</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-11-27T00:00:00Z</news:publication_date>
      <news:title>Extreme Validation</news:title>
      <news:keywords></news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/rails-sitemap-heroku-aws</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-04-11T00:00:00Z</news:publication_date>
      <news:title>Rails + Sitemap + Heroku + AWS</news:title>
      <news:keywords>Rails</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/where-the-f-is-jst-coming-from</loc>
    <lastmod>2024-07-27T21:59:29Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-04-10T00:00:00Z</news:publication_date>
      <news:title>Where the F is JST coming from?!?</news:title>
      <news:keywords>Backbone</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/push-database-to-heroku-using-dropbox</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-03-31T00:00:00Z</news:publication_date>
      <news:title>Push database to Heroku using Dropbox</news:title>
      <news:keywords>Deployment, Heroku</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/open-tab-from-javascript</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-02-26T00:00:00Z</news:publication_date>
      <news:title>Open tab from JavaScript</news:title>
      <news:keywords>JavaScript</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/backbone-rule-learned-during-a-javascript-refactoring</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-02-25T00:00:00Z</news:publication_date>
      <news:title>Backbone rule learned during a JavaScript refactoring</news:title>
      <news:keywords>Backbone</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/rails-edge-case-solved-with-middleware</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-02-16T00:00:00Z</news:publication_date>
      <news:title>Rails edge case solved with middleware</news:title>
      <news:keywords>Rails</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/solving-presence-in-rails-pusher-vs-node-service</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-02-06T00:00:00Z</news:publication_date>
      <news:title>Solving presence in Rails Pusher vs. Node service</news:title>
      <news:keywords>Rails</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/app-landing-page-for-ionic-app</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-01-28T00:00:00Z</news:publication_date>
      <news:title>App landing page for ionic app</news:title>
      <news:keywords>Ionic</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/let-s-do-this</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-01-24T00:00:00Z</news:publication_date>
      <news:title>Let's do this!</news:title>
      <news:keywords></news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/es6-model-layer-for-angular-js</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-01-19T00:00:00Z</news:publication_date>
      <news:title>ES6 model layer for angular.js</news:title>
      <news:keywords>JavaScript, Angular</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/towers-of-hanoi-in-scala</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-01-15T00:00:00Z</news:publication_date>
      <news:title>Towers of Hanoi in Scala</news:title>
      <news:keywords>Scala</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/getting-started-with-ionic-1-and-es6</loc>
    <lastmod>2024-07-27T21:59:27Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-01-11T00:00:00Z</news:publication_date>
      <news:title>Getting started with Ionic 1 and ES6</news:title>
      <news:keywords>JavaScript, Ionic</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/editor-battle-productivity-hack</loc>
    <lastmod>2024-07-27T21:59:26Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-01-08T00:00:00Z</news:publication_date>
      <news:title>Editor battle + productivity hack!</news:title>
      <news:keywords>vim</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/articles/suck-at-reading-watch-or-listen-instead</loc>
    <lastmod>2024-07-27T21:59:28Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>cjav.dev</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2015-01-03T00:00:00Z</news:publication_date>
      <news:title>Suck at reading? Watch or listen instead.</news:title>
      <news:keywords>Goals</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/to-ai-assist-or-not-to-ai-assist</loc>
    <lastmod>2024-11-18T21:17:14Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-11-11T21:36:49Z</news:publication_date>
      <news:title>To AI Assist or not to AI Assist?</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/personal-knowledge-management-second-brain</loc>
    <lastmod>2024-11-18T21:17:14Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-10-28T15:00:00Z</news:publication_date>
      <news:title>Personal Knowledge Management (Second Brain)</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/our-daily-drivers-hardware-and-software-edition</loc>
    <lastmod>2024-11-18T21:17:14Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-10-14T18:06:37Z</news:publication_date>
      <news:title>Our Daily Drivers: Hardware and Software Edition</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/rails-20th-anniversary-writing-culture</loc>
    <lastmod>2024-11-18T21:17:14Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-09-23T15:00:00Z</news:publication_date>
      <news:title>Rails 20th Anniversary, Writing Culture</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/devrelcon-red-eyes-and-enums</loc>
    <lastmod>2024-11-18T21:17:14Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-09-10T05:12:58Z</news:publication_date>
      <news:title>DevRelCon, Red Eyes, and Enums</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/two-years-of-build-learn</loc>
    <lastmod>2024-11-18T21:17:15Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-08-27T17:20:24Z</news:publication_date>
      <news:title>Two Years of Build &amp; Learn</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/enum-types-coworking-software-and-more-atomic-habits</loc>
    <lastmod>2024-11-18T21:17:15Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-08-13T04:16:14Z</news:publication_date>
      <news:title>Enum Types, Coworking Software, and more Atomic Habits</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/webhooks</loc>
    <lastmod>2024-11-18T21:17:15Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-07-23T19:29:13Z</news:publication_date>
      <news:title>Webhooks!</news:title>
      <news:keywords>["webhooks", "software development", "rails"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/summer-fit-check-cron-schedulers-and-sample-apps</loc>
    <lastmod>2024-11-18T21:17:15Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-07-09T04:59:51Z</news:publication_date>
      <news:title>Summer Fit Check, Cron Schedulers, and Sample Apps</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/monoliths-graphql-next-js-and-devrel-insights</loc>
    <lastmod>2024-11-18T21:17:15Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-06-24T15:00:00Z</news:publication_date>
      <news:title>Monoliths, GraphQL, Next.js, and DevRel Insights</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/last-railsconf-gameboy-nostalgia-and-platform-risk</loc>
    <lastmod>2024-11-18T21:17:15Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-06-10T16:00:00Z</news:publication_date>
      <news:title>Last RailsConf, Gameboy Nostalgia, and Platform Risk</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/slow-productivity-write-the-docs</loc>
    <lastmod>2024-11-18T21:17:16Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-05-27T15:00:00Z</news:publication_date>
      <news:title>Slow Productivity, Write The Docs</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/apis-acquisitions-and-event-emitters</loc>
    <lastmod>2024-05-29T13:53:47Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-05-06T16:00:00Z</news:publication_date>
      <news:title>APIs, Acquisitions, and Event Emitters</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/gdc-buckets-and-more-calendars</loc>
    <lastmod>2024-05-29T13:53:47Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-04-22T15:00:00Z</news:publication_date>
      <news:title>GDC, Buckets, and more calendars</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/digital-homesteading-discord-sdks-and-more-house-stuff</loc>
    <lastmod>2024-05-29T13:53:47Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-04-08T16:00:00Z</news:publication_date>
      <news:title>Digital homesteading, Discord SDKs and more house stuff</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/campfire-code-read</loc>
    <lastmod>2024-05-29T13:53:48Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-03-25T20:50:03Z</news:publication_date>
      <news:title>Campfire Code Read</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/creating-vs-consuming-consistency-fitness</loc>
    <lastmod>2024-05-29T13:53:48Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-03-04T16:00:00Z</news:publication_date>
      <news:title>Creating vs Consuming, Consistency &amp; Fitness</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/performance-review-season-openapi-twilio-and-calendar-app</loc>
    <lastmod>2024-05-29T13:53:48Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-02-19T18:01:13Z</news:publication_date>
      <news:title>Performance review season, OpenAPI, Twilio, and calendar app</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/our-daily-drivers-the-tools-we-use</loc>
    <lastmod>2024-05-29T13:53:48Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-02-05T16:00:00Z</news:publication_date>
      <news:title>Our Daily Drivers: The Tools We Use</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/co-founders-layoffs-ruby-memory-docs-product</loc>
    <lastmod>2024-05-29T13:53:48Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-01-23T14:53:29Z</news:publication_date>
      <news:title>Co-Founders, Layoffs, Ruby Memory, Docs Product</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/replacing-mint-finishing-things-vim</loc>
    <lastmod>2024-05-29T13:53:48Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2024-01-08T16:00:00Z</news:publication_date>
      <news:title> Replacing Mint, Finishing Things &amp; Vim</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/advent-of-code-economic-development</loc>
    <lastmod>2024-01-04T17:17:06Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-12-26T16:33:17Z</news:publication_date>
      <news:title>Advent of Code, Economic Development</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/coworking-grit-or-quit-polish-week-at-craftwork</loc>
    <lastmod>2024-01-04T17:17:06Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-12-12T05:43:33Z</news:publication_date>
      <news:title>Coworking: Grit or Quit &amp; Polish Week at Craftwork</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/ai-launches-docs-calendars</loc>
    <lastmod>2024-01-04T17:17:06Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-11-28T04:00:00Z</news:publication_date>
      <news:title>AI launches, Docs, Calendars</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/mint-shutting-down-project-catchup</loc>
    <lastmod>2023-11-27T18:06:55Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-11-13T16:00:00Z</news:publication_date>
      <news:title>Mint Shutting Down, Project Catchup</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/building-tools-and-staying-accountable</loc>
    <lastmod>2023-11-27T18:06:55Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-10-30T15:00:00Z</news:publication_date>
      <news:title>Building Tools and Staying Accountable</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/shiny-new-tech-llms-iphones-and-ray-bans</loc>
    <lastmod>2023-10-09T18:00:48Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-10-09T15:00:00Z</news:publication_date>
      <news:title>Shiny New Tech: LLMs, iPhones and Ray Bans</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/on-learning</loc>
    <lastmod>2023-09-26T18:00:40Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-09-25T14:50:45Z</news:publication_date>
      <news:title>On Learning</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/everything-old-is-new-again-niching-down</loc>
    <lastmod>2023-09-11T18:01:01Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-09-11T16:00:00Z</news:publication_date>
      <news:title>Everything Old Is New Again &amp; Niching Down</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/calendar-discord-bot-and-turbo-stream-gotchas</loc>
    <lastmod>2023-08-21T18:00:18Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-08-21T16:00:00Z</news:publication_date>
      <news:title>Calendar Discord Bot and Turbo Stream Gotchas</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/role-reversal-summer-catchup</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-08-07T17:00:00Z</news:publication_date>
      <news:title>Role Reversal &amp; Summer Catchup</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/dave-paola-agency-of-learning</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-06-12T18:58:00Z</news:publication_date>
      <news:title>Dave Paola: Agency of Learning</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/chris-oliver-building-a-life-and-businesses-on-rails</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-05-30T16:00:00Z</news:publication_date>
      <news:title>Chris Oliver: Building a Life (and Businesses) on Rails</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/streamlining-global-ingress-with-ngrok</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-05-15T13:06:13Z</news:publication_date>
      <news:title>Streamlining global ingress with ngrok</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/forest-bathing-railsconf-and-developer-communities</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-05-01T16:00:00Z</news:publication_date>
      <news:title>Forest Bathing, RailsConf, and Developer Communities</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/chatgpt-llms-openai-doom-or-boon</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-04-17T15:00:00Z</news:publication_date>
      <news:title>ChatGPT, LLMs, OpenAI, doom or boon?</news:title>
      <news:keywords>["software development", "technology", "openai", "chatgpt"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/digging-into-the-hackerrank-survey-2023</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-04-03T15:00:00Z</news:publication_date>
      <news:title>Digging into the HackerRank Survey 2023</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/webhooks-fyi</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-03-20T15:00:00Z</news:publication_date>
      <news:title>Keith Casey: Webhooks &amp; webhooks.fyi</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/chelsea-otakan-design-and-build-systems-not-just-features</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-03-06T17:00:00Z</news:publication_date>
      <news:title>Chelsea Otakan: Design and build systems, not just features</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/custom-codegen-for-sdks</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-02-20T16:00:00Z</news:publication_date>
      <news:title>Custom codegen for SDKs</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/building-developer-relations-teams-with-trag</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-02-07T04:28:54Z</news:publication_date>
      <news:title>Building Developer Relations Teams with Trag</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/building-things-that-excite-you-with-charlie-gerard</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-01-23T16:00:00Z</news:publication_date>
      <news:title>Building things that excite you with Charlie Gerard</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/ic-to-lead-building-confidence-in-your-skills-with-lindsay-barrett</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2023-01-10T06:57:01Z</news:publication_date>
      <news:title>IC to Lead: Building Confidence In Your Skills with Lindsay Barrett</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/aws-amplify-and-front-end-frameworks-with-erik-hanchett</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-12-26T14:20:33Z</news:publication_date>
      <news:title>AWS Amplify and Front-end Frameworks with Erik Hanchett</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/mike-bifulco-building-a-developer-brand</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-12-12T17:00:00Z</news:publication_date>
      <news:title>Mike Bifulco: Building a Developer Brand </news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/getting-hired-as-a-developer</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-11-25T16:55:51Z</news:publication_date>
      <news:title>Getting hired as a developer</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/cfps-submitting-talks-to-conferences</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-11-14T17:00:00Z</news:publication_date>
      <news:title>CFPs! Submitting talks to conferences</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/content-creation-for-developers</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-10-31T15:00:00Z</news:publication_date>
      <news:title>Content creation for developers</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/code-reviews-giving-and-receiving-feedback</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-10-18T03:11:19Z</news:publication_date>
      <news:title>Code Reviews: Giving and Receiving Feedback</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/build-vs-buy</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-10-03T15:00:00Z</news:publication_date>
      <news:title>Build vs. Buy</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/pto-and-taking-time-off</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-09-19T16:00:00Z</news:publication_date>
      <news:title>PTO and Taking Time Off</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/is-there-a-traditional-background-for-programmers-anymore</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-09-05T18:33:47Z</news:publication_date>
      <news:title>Is there a “traditional background” for programmers anymore?</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/the-2022-stack-overflow-survey</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-08-22T16:00:00Z</news:publication_date>
      <news:title>The 2022 Stack Overflow Survey</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/the-first-pancake-hello-world</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-08-08T16:24:03Z</news:publication_date>
      <news:title>The First Pancake: Hello World</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/introducing-build-learn</loc>
    <lastmod>2023-08-15T18:00:38Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Build and Learn</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2022-08-05T17:53:49Z</news:publication_date>
      <news:title>Introducing Build &amp; Learn</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/covid-19-travel-trailers</loc>
    <lastmod>2023-01-27T18:00:40Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2021-03-22T17:38:35Z</news:publication_date>
      <news:title>COVID-19 Travel - Trailers!</news:title>
      <news:keywords>["traveling during covid"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/health-fast-update</loc>
    <lastmod>2022-11-20T20:12:34Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-08-16T16:00:00Z</news:publication_date>
      <news:title>Health: Fast update</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/finance-becoming-a-1-car-family</loc>
    <lastmod>2022-11-20T20:12:34Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-08-09T18:46:06Z</news:publication_date>
      <news:title>Finance: Becoming a 1 car family</news:title>
      <news:keywords>["finance", "family", "air quality", "cars"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/health-home-air-quality</loc>
    <lastmod>2022-11-20T20:12:34Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-08-02T15:00:00Z</news:publication_date>
      <news:title>Health - Home Air Quality</news:title>
      <news:keywords>["health", "home air quality"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/parenting-school-in-the-age-of-covid-19</loc>
    <lastmod>2022-11-20T20:12:34Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-07-26T15:20:00Z</news:publication_date>
      <news:title>Parenting - School in the age of COVID-19</news:title>
      <news:keywords>["parenting", "health", "peloton", "school"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/parenting-covid-19-life-at-the-cabin</loc>
    <lastmod>2022-11-20T20:12:34Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-07-19T17:46:49Z</news:publication_date>
      <news:title>Parenting - COVID-19 Life at the Cabin</news:title>
      <news:keywords>["kids", "bikes", "bears"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/parenting-covid-19-style</loc>
    <lastmod>2023-01-27T18:00:41Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-03-14T21:00:00Z</news:publication_date>
      <news:title>Parenting - COVID 19 style</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/health-keto-checklists-goals</loc>
    <lastmod>2022-11-20T20:12:34Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2020-01-20T09:00:00Z</news:publication_date>
      <news:title>Health - Keto, Checklists, Goals!</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/parenting-flying-solo-while-sick</loc>
    <lastmod>2023-01-27T18:00:41Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-12-16T20:00:00Z</news:publication_date>
      <news:title>Parenting - Flying Solo While Sick</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/real-estate-airbnb-superhost</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-12-09T13:00:00Z</news:publication_date>
      <news:title>Real estate - Airbnb Superhost</news:title>
      <news:keywords>["family", "airbnb", "real estate", "short term rentals"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/parenting-piano</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-12-02T19:00:00Z</news:publication_date>
      <news:title>Parenting - Piano 🎵</news:title>
      <news:keywords>["family", "marriage", "parenting", "piano", "piano lessons", "holiday", "jingle bells"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/real-estate-tear-down-walls</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-11-25T13:00:00Z</news:publication_date>
      <news:title>Real Estate - Tear down walls</news:title>
      <news:keywords>["family", "marriage", "remodel", "real estate", "tools", "homedepot"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/real-estate-long-term-renters-tenants</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-11-18T13:00:00Z</news:publication_date>
      <news:title>Real Estate - Long term renters (tenants)</news:title>
      <news:keywords>["real estate", "long term", "tennants", "cozy.co", "rentals", "avilla theory", "flu"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/parenting-home-birth-vs-hospital-birth</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-11-11T13:00:00Z</news:publication_date>
      <news:title>Parenting - Home Birth vs Hospital birth</news:title>
      <news:keywords>["family", "parenting", "birth", "homebirth", "doulas", "midwives", "midwife", "babies", "pregnancy", "placenta", "placenta encapsulation"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/real-estate-second-home-vs-rental</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-11-04T13:00:00Z</news:publication_date>
      <news:title>Real Estate - Second Home vs. Rental</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/finances-groceries</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-10-28T13:00:00Z</news:publication_date>
      <news:title>Finances - Groceries</news:title>
      <news:keywords>["finances", "groceries", "permanent record", ""]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/health-halloween</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-10-21T14:00:00Z</news:publication_date>
      <news:title>Health - Halloween</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/real-estate-getting-started</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-10-15T00:00:00Z</news:publication_date>
      <news:title>Real Estate - Getting Started</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/disneyland-the-secrets-to-a-successful-trip</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-10-08T01:00:00Z</news:publication_date>
      <news:title>Disneyland - The secrets to a successful trip.</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/relationships-maintaining-friendships</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-09-30T14:00:00Z</news:publication_date>
      <news:title>Relationships - Maintaining Friendships</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/parenting-raising-kids-ages-2-6</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-09-23T14:00:00Z</news:publication_date>
      <news:title>Parenting - Raising Kids Ages 2-6</news:title>
      <news:keywords>["family", "kids", "health", "parenting"]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/relationships-how-to-avoid-the-crazy-cycle</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-09-13T17:00:00Z</news:publication_date>
      <news:title>Relationships - How to avoid the crazy cycle</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/relationships-wedding-toasts</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-09-09T15:00:00Z</news:publication_date>
      <news:title>Relationships - Wedding Toasts</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/podcasts/relationships-preparing-for-serious-relationships</loc>
    <lastmod>2022-11-20T20:12:35Z</lastmod>
    <news:news>
      <news:publication>
        <news:name>Avilla Theory</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2019-09-07T14:00:00Z</news:publication_date>
      <news:title>Relationships - Preparing for serious relationships</news:title>
      <news:keywords>[]</news:keywords>
    </news:news>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/code-mode-mcp</loc>
    <lastmod>2026-03-04T20:08:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2s6b0gMMmTo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Code mode MCP!</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2s6b0gMMmTo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/mcp-hurdle-autho</loc>
    <lastmod>2026-03-04T20:08:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2tgv4nEnzVQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>MCP hurdle: autho</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2tgv4nEnzVQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/1b-from-api</loc>
    <lastmod>2026-03-04T20:08:28Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/qpq7agCiVlo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>$1B from API</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=qpq7agCiVlo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/localhost-is-dead-for-dev</loc>
    <lastmod>2026-03-04T20:08:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/TSPBbtd0bfg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Localhost is dead for dev?</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=TSPBbtd0bfg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/the-best-companies-start-as-api-companies</loc>
    <lastmod>2026-03-04T20:08:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/NWiUMABMs9I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>The best companies start as API companies</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=NWiUMABMs9I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/rest-api-from-postgresql</loc>
    <lastmod>2026-03-04T20:08:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/x65nAXsufWQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>REST API from PostgreSQL?!</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=x65nAXsufWQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/agents-fall-back-from-mcp-to-cli</loc>
    <lastmod>2026-03-04T20:08:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Q1w2LWqltiw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Agents fall back from MCP to CLI?</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Q1w2LWqltiw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/cli-trending</loc>
    <lastmod>2026-03-04T20:08:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/JPG2WPxVWH4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>CLI trending</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=JPG2WPxVWH4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/generate-sdks-from-openapi-spec-with-stainless-cli</loc>
    <lastmod>2026-03-04T20:08:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/D80aTJ4Q4Kg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Generate SDKs from OpenAPI spec with Stainless CLI</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=D80aTJ4Q4Kg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/mobile-dev-workflow-with-claude-code</loc>
    <lastmod>2026-03-04T20:08:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tgEPLpoHavU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Mobile dev workflow with Claude Code</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tgEPLpoHavU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/smarter-env-management-with-1password</loc>
    <lastmod>2026-03-04T20:08:36Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Q3dAjue6hGw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Smarter .env management with 1password</video:title>
      <video:description>How to use 1password environments instead of raw .env files for safer management of API keys and other sensitive environment variables.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Q3dAjue6hGw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ripping</loc>
    <lastmod>2026-03-04T20:08:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/E5p40uj8w4g/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ripping</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=E5p40uj8w4g</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/from-zero-to-typescript-sdk-and-full-docs-site-in-130-seconds</loc>
    <lastmod>2026-03-04T20:08:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Q6D9M1LSO1k/hqdefault.jpg</video:thumbnail_loc>
      <video:title>From Zero to TypeScript SDK and full docs site in 130 seconds</video:title>
      <video:description>Used Stainless to generate SDK and Docs from a simple OpenAPI spec.

https://stainless.com/</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Q6D9M1LSO1k</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/what-drives-you</loc>
    <lastmod>2026-03-04T20:08:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tsdbVG76eVA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>What Drives You</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tsdbVG76eVA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/correct-docs-snippets</loc>
    <lastmod>2026-03-04T20:08:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/jj6ad4gUYJQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>❤️ Correct Docs Snippets</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=jj6ad4gUYJQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/no-webhooks-no-prob</loc>
    <lastmod>2026-03-04T20:08:41Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/je0Gbg3Mg58/hqdefault.jpg</video:thumbnail_loc>
      <video:title>No webhooks no prob</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=je0Gbg3Mg58</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/singular-focus-and-insider-trading</loc>
    <lastmod>2026-03-04T20:08:41Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/T0UwcbE9Z6I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Singular focus and insider trading</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=T0UwcbE9Z6I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ai-that-updates-your-docs-when-code-changes</loc>
    <lastmod>2026-03-04T20:08:42Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/QTCKpPu1RcI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>AI That Updates Your Docs When Code Changes 🤯</video:title>
      <video:description>Imagine your GitHub PR triggers Falconer to auto-update your docs — no more drift, no more manual edits. #AITools #GitHub #devtools</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=QTCKpPu1RcI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/wrong-about-mcp-autogen</loc>
    <lastmod>2026-03-04T20:08:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/URP1JoDqNV4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Wrong about MCP autogen</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=URP1JoDqNV4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/work-sloppy-joes</loc>
    <lastmod>2026-03-04T20:08:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/1cAqzdgXyAM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Work sloppy joes</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=1cAqzdgXyAM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/agentic-commerce-protocol-released</loc>
    <lastmod>2026-03-04T20:12:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/v6jlkxKXfQQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Agentic Commerce Protocol released</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=v6jlkxKXfQQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/misalignment-leads-to-burnout</loc>
    <lastmod>2026-03-04T20:12:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GhNMLF4ZPOg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Misalignment leads to burnout</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GhNMLF4ZPOg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/trying-rubyllm-again</loc>
    <lastmod>2026-03-04T20:12:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/M2vkMsEAF7I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Trying RubyLLM again</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=M2vkMsEAF7I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/evals-and-espresso-a-perfect-blend</loc>
    <lastmod>2026-03-04T20:12:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/RkxnTgdkhDo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Evals and Espresso: A Perfect Blend</video:title>
      <video:description>I've started to think about Evals like dialing in an espresso shot. 

Just as the meter on the espresso machine checks for time and extraction, LLM-as-Judge scores your traces for the scale, but human still needs to taste-test ☕️👨‍💻</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=RkxnTgdkhDo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/on-distribution</loc>
    <lastmod>2026-03-04T20:12:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/uxOTZUfSQuE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>“On distribution”</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=uxOTZUfSQuE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/kafka-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:12:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/gXz1YtfeiJk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Kafka with Ruby on Rails</video:title>
      <video:description>In this introduction episode, you'll learn how to setup Kafka with Ruby on Rails using the karafka gem and see how to consume messages. We'll connect to a locally running kafka broker first, then use Confluent cloud as the broker. 

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=gXz1YtfeiJk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/jumping-around-keyboard-katana</loc>
    <lastmod>2026-03-04T20:12:48Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8FWJqqTzUak/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Jumping Around - Keyboard Katana</video:title>
      <video:description>In this video, we learn how to quickly navigate and edit text using keyboard shortcuts. You'll see how holding the Option key allows you to jump from word to word, making edits much faster than tapping the arrow keys. 

To delete a whole word, press Option+Backspace. 
To jump to the beginning or end of a line, use Control+A or Control+E. 
You can also jump between the start and end of a row using Command+Left and Command+Right. 

These shortcuts for navigating and editing text - like Ctrl+A, Ctrl+E, Option+Left, Option+Right, Command+Left, and Command+Right - are really helpful to learn to speed up your workflow when working with text. Master these time-saving keyboard tricks to move around and update text more efficiently.

Keyboard Katana is a series of short videos showing tips and tricks for navigating quickly with your keyboard.

#keyboard #keyboardshortcuts #productivity</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8FWJqqTzUak</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/keyboard-speed-gainz-keyboard-katana</loc>
    <lastmod>2026-03-04T20:12:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/f0rFJn1gI24/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Keyboard Speed Gainz - Keyboard Katana</video:title>
      <video:description>Keyboard Katana is a series of short videos showing tips and tricks for navigating quickly with your keyboard.

#keyboard #keyboardshortcuts #productivity</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=f0rFJn1gI24</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/navigating-between-apps-keyboard-katana</loc>
    <lastmod>2026-03-04T20:12:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/xMWugPr2u-U/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Navigating between Apps - Keyboard Katana</video:title>
      <video:description>Keyboard Katana is a series of short videos showing tips and tricks for navigating quickly with your keyboard.

#keyboard #keyboardshortcuts #productivity</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=xMWugPr2u-U</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/working-with-tabs-keyboard-katana</loc>
    <lastmod>2026-03-04T20:12:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-Ibq3zbvvSY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Working with Tabs - Keyboard Katana</video:title>
      <video:description>#keyboard #keyboardshortcuts #keybaordshortcutkeys</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-Ibq3zbvvSY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/bcrypt-password-basics-in-ruby</loc>
    <lastmod>2026-03-04T20:12:51Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/HTt1628yNGg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>BCrypt Password basics in Ruby</video:title>
      <video:description>This video explains how to use the Bcrypt password class in Ruby to securely hash and store passwords. We'll look at how a user's encrypted password is stored in the database as a hashed string that can't be reversed. To check if a password matches, you initialize a Bcrypt::Password object with the hashed password, then compare it to a plain text password using the == operator, which Bcrypt overrides to check if the hashes match.

Bcrypt handles salting and key stretching internally to make brute force attacks harder. When creating a hash, Bcrypt takes time to run its key derivation function, which can be configured by increasing the cost parameter. We'll look at how to check properties of a bcrypt password like cost, version, and valid hash.

Overall, bcrypt provides a simple interface in Ruby for securely hashing passwords. By storing the bcrypt password hashes rather than plain text passwords, the passwords are securely encrypted at rest in the database. Bcrypt is an industry-standard for password hashing.

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=HTt1628yNGg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/basic-posthog-api-integration-add-a-feature</loc>
    <lastmod>2026-03-04T20:12:52Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/HKszbOC3ABY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Basic Posthog API integration - Add A Feature</video:title>
      <video:description>In this video, we'll work on a feature to integrate PostHog analytics into the Craftwork web application. We create a Rails model to store marketing attribution data from PostHog called TrafficSource. The job fetches session data from the PostHog API, parses it, and stores relevant marketing metadata like UTM parameters, click IDs, referrers etc. in the TrafficSource model. Tests are written to validate the parsing and storage of the session data. The integration will allow the business to analyze the marketing funnel and tie revenue back to different traffic sources like Facebook/Google ads.

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=HKszbOC3ABY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/shoelace-pick-and-enumerators-day-18-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:12:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Z9VQvWxWAkM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Shoelace, Pick, and Enumerators - Day 18 - Advent of Code 2023</video:title>
      <video:description>In this Advent of Code 2023 video, you’ll learn how to solve the "Lava Duct Lagoon" puzzle from Day 18. We walk through calculating the area of a complex polygon shape based on a set of digging instructions.


The key techniques and concepts covered are:
- Parsing direction, step count, and color instructions
- Visualizing the polygon by drawing it on a grid
- Applying the Shoelace Formula to calculate interior area
- Using Pick's Theorem to count interior dots
- Switching to an Enumerator/Generator for better performance
- Yielding instructions instead of materializing a huge array
- Keeping a wall-length counter to enable Pick's Theorem

We’ll start with the sample input, walking through the instructions visually, then extend it to handle the full input efficiently using enumerators. 

Shoelace Formula https://en.wikipedia.org/wiki/Shoelace_formula
Pick's theorem https://en.wikipedia.org/wiki/Pick%27s_theorem

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Z9VQvWxWAkM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/heaps-of-fun-with-shortest-paths-day-17-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:12:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/XssRxCsI0-g/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Heaps of fun with shortest paths - Day 17 - Advent of Code 2023</video:title>
      <video:description>In this episode you'll learn how to solve day 17's "Clumsy Crucible" puzzle. We walk through implementing a shortest path algorithm to find the route through a grid-based map with the lowest "heat loss".

Using a greedy approach to explore minimum heat paths first
Implementing a visited set to avoid exploring already visited states
Switching from arrays to a heap data structure for faster state exploration
Adding directional state to track movement rules (max 3, later 4-10 blocks)

We'll start with a simple test case to incrementally build a basic solution, then extend it to handle the full puzzle input. 

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=XssRxCsI0-g</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/grid-traversal-with-pattern-matching-day-16-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:12:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7yAgKw2PvT0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>grid traversal with pattern matching - Day 16 - Advent of Code 2023</video:title>
      <video:description>In this episode of the Advent of Code 2023 solutions series, we tackle day 16, The Floor Is Lava, using Ruby. We start by examining the puzzle input, representing a contraption through which a beam of light travels. The beam interacts with different components like mirrors, splitters, empty spaces, etc. Our goal is to follow the path of the beam and count the number of "energized" tiles it travels over.

First, we set up the input grid and beams data structures to track the position and direction of beam segments. We use a while loop to traverse the grid, using pattern matching to check the tile type ahead and turn, split beams, or continue on accordingly. We skip over seen tiles and handle edge cases.

For part 1, we print the number of energized tiles for the given input. For part 2, we maximize energy by checking all possible starting points along the edges. This results in a brute-force approach that takes several minutes to run. We make an optimization to use just 1 set instead of 2 to improve performance.

Overall, this solution leverages pattern matching, recursion, and data structures like arrays and sets. The video explains the code step-by-step and suggests further improvements as well. It's aimed at intermediate Ruby developers looking to strengthen their skills.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=7yAgKw2PvT0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ascii-values-with-ord-and-delete_if-day-15-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:12:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/hPa5hfJeFlU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>ASCII values with ord and delete_if - Day 15 - Advent of Code 2023</video:title>
      <video:description>In this video, you’ll learn how to solve day 15 of the Advent of Code 2023. The first part involves writing a hash function to convert initialization sequences like "rn=1" into decimal values between 0-255. The hash function works by:

1. Getting the ASCII code for each character using .ord
2. Multiplying the current value by 17
3. Taking modulo 256 to get the final hash value

For part 2, the initialization sequences now can contain "=" to add lenses or "-" to remove them from "boxes", which are arrays. The boxes are stored in a hash keyed by the hash value of the label on the lense. We’ll parse the complex input into easier-to-work with structures. Then we’ll iterate through the instructions, either adding/updating lenses or removing them if the instruction contains "-". At the end, we’ll sum each lens's "focusing power" based on the box number and slot number.

After getting the right answer, we’ll spend some time refactoring some of the code, showing useful Ruby idioms like inject, delete_if, and pattern matching.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=hPa5hfJeFlU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/transpose-reverse-roll-day-14-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/NtAEhk-QuLA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>transpose, reverse, roll! - Day 14 - Advent of Code 2023</video:title>
      <video:description>In this video, you’ll see how to solve Day 14 for the Advent of Code 2023 Part 1 and Part 2. The puzzle involves manipulating a grid representing a panel with rocks on it. The goal is to tilt the panel north, south, east and west to get the round rocks to roll around.


In Part 1, we’ll write a "roll" method to move the round rocks on a single row all the way to the left by swapping spaces. Then we’ll use "transpose" to tilt the whole grid north and calculate the "weight" or load on the north beam.


In Part 2, the puzzle introduces a "spin cycle" which tilts the panel in four directions repeatedly. We’ll write methods for tilting each direction. Then detect cycles in the grid states using a dictionary and set to count unique patterns. By moduloing the number of cycles by the cycle length, we’re able to index into the grid states and get the weight after 1 billion cycles.


The video demonstrates Ruby array manipulation, recursion, cycles and modulo to solve the Advent of Code puzzle.


Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=NtAEhk-QuLA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/partition-and-inject-intersection-day-13-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bKO93YzC0Co/hqdefault.jpg</video:thumbnail_loc>
      <video:title>partition and inject intersection &amp;:&amp; 👯‍♂️ - Day 13 - Advent of Code 2023</video:title>
      <video:description>In this episode, we solve day 13 of Advent of Code 2023, called "Point of Incidence", where we're trying to find lines of symmetry in patterns of dots and pound signs representing mirrors on Lava Island.

First, we parse the input into arrays of character arrays representing each pattern. Then we write some methods to check if a line is symmetrical around a given point, find all points of symmetry on a line, and ultimately find lines of symmetry in a full pattern.

The key is finding the intersection of symmetry points across all lines to pinpoint the overall symmetry. We handle both horizontal and vertical lines of symmetry.

For part 1, we report the number of rows above or columns left of the symmetry lines.

For part 2, we consider smudges - swapping one character in the pattern and rechecking for other valid lines of symmetry. We brute force check all possibilities, collect the new lines, and subtract out ones we already had.

In the end, we arrive at working solutions for both parts, matching the provided examples. 


Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bKO93YzC0Co</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/caching-and-pattern-matching-day-12-advent-of-code</loc>
    <lastmod>2026-03-04T20:15:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZIWk05CqC4s/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Caching and Pattern matching - Day 12 - Advent of Code</video:title>
      <video:description>In this episode, we walk through solving day 12 of Advent of Code 2023, called "Hot Springs". The challenge involves parsing records of hot springs, some of which are damaged (#) or operational (.), along with checksums indicating groups of damaged springs.

First, we set up some test cases and write a parse method to process the input. Then we implement a count method using recursion and pattern matching to count all valid arrangements of springs that match the checksums. Key cases include:
- Encountering a "?" which represents variable springs
- Incrementing "group size" when we hit pound signs to track damaged groups
- Checking that group sizes match checksums when we reach periods
- Caching results to speed things up

For part 2, we expand the strings by duplicating parts and joining them to make the problem more complex. More optimizations like collapsing multiple dots and returning early based on string lengths are added.

In the end, we arrive at a working solution that passes the test cases and puzzle input! 

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ZIWk05CqC4s</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/combination-filter_map-day-11-advent-of-code</loc>
    <lastmod>2026-03-04T20:15:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Oh5tAPD4adQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>combination, filter_map - Day 11 - Advent of Code</video:title>
      <video:description>Join me as we traverse the cosmos while solving Day 11 of Advent of Code 2023 - Cosmic Expansion - in Ruby!


In this coding galaxy quest, we'll:
Parse an image grid of galaxies and empty space
Expand the grid by inserting extra rows and columns
Find all galaxy locations and calculate distances
Generate combinations of galaxies to compare
Refactor distance to handle cosmic doubling
Scale empty spaces to multiply distances


The solution handles parsing the image input and initially expanding it. We then pivot to a calculation-based approach without materializing massive arrays. Some elegant Ruby built in methods like combination and inject help compare galaxy pairs.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Oh5tAPD4adQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/point-in-polygon-day-10-advent-of-code</loc>
    <lastmod>2026-03-04T20:15:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/017epvQWPtc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Point in polygon - Day 10 - Advent of Code</video:title>
      <video:description>Join me to solve Day 10 of Advent of Code 2023 - The Pipe Maze - in Ruby!


In this coding challenge, we'll navigate a grid map of different pipe connections to:
Parse the input grid data
Find starting points and valid neighbors
Traverse around the pipe loop to map its path
Determine enclosed tiles inside the loop
Use raycasting logic to count wall intersections
Handle tricky cases like squeezed openings


The solution builds a search to map out the full pipe structure. We'll refine the directional rules and fix bugs in the graph traversal logic.


Mapping polygons and counting enclosed regions employs some novel techniques like raycasting and parity checks.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=017epvQWPtc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/each_cons-and-layers-day-09-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bEJ0HSKzBCo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>each_cons, and layers 🎂 - Day 09 - Advent of Code 2023</video:title>
      <video:description>Learn how to solve Day 9 of Advent of Code 2023 - Mirage Maintenance - in Ruby!

In this episode, we'll cover:
Parsing the input data into statistics
Breaking down the statistics layer by layer to differences
Building back up each layer to extrapolate the next value
Collecting layers into an array of arrays
Predicting future and past values by adding to array ends
Refactoring with destructuring for conciseness

The solution demonstrates some neat iteration techniques in Ruby:
each_cons to yield consecutive pairs
unshift to add to array front
map, select, inject to transform arrays

We walk through the thought process, test examples, and refine the logic until we have scripts that generate the right answers for both parts of this puzzle.


If you're participating in Advent of Code or just want to level up your Ruby skills, join me for this festive programming challenge!

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bEJ0HSKzBCo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/lcm-rotate-and-modulo-day-08-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kD4111wInYk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>lcm, rotate!, and modulo - Day 08 - Advent of Code 2023</video:title>
      <video:description>Learn how to solve day 8 of Advent of Code 2023 - The Haunted Wasteland - in this Ruby tutorial.

We'll cover:
Parsing the input data into directions and a graph representation
Navigating the graph by rotating through direction turns
Finding paths in the graph from starting to ending nodes
Handling Part 2 where paths start from multiple nodes
Using the modulo operator and lcm method to align ending points
Refactoring to allow re-use for both parts with a block


This solution demonstrates some elegant Ruby data structures and methods like rotate, lcm, and inject to concisely traverse a directed graph. The code walkthrough explains the initial thought process and a failed solution attempt before arriving at the final answer.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kD4111wInYk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/spaceship-operator-day-07-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bASPI9cV7R4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Spaceship operator - Day 07 - Advent of Code 2023</video:title>
      <video:description>This video tackles the "Camel Cards" poker puzzle. We’ll parse the input data into Hand objects, modeling ranks, and bids. We can sort hands by type and strength by including the Comparable module and implementing spaceship logic.

For part 1, we’ll build a card counter and hand typing system, assigning numeric ranks. This lets us multiply bids by position to get total winnings. For part 2's joker rules, we’ll tweak the ranks and add joker offset logic to promote hands.

The core solution focuses on custom classes and comparable spaceships for sorting. I polish with enumerable pipelines for a concise answer. While not golf code, we end up with readable Ruby leveraging objects, sorting, and clever tricks.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bASPI9cV7R4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/percent-delimiters-w-zip-day-06-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GBY_GZs3CZ8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Percent delimiters %w, zip - Day 06 - Advent of Code 2023</video:title>
      <video:description>See how to solve the Day 6 "Race" puzzle for the advent of code with Ruby! We’ll determine how long to press a boat's speed button to beat distance records. We’ll talk about Ruby's %w delimiter to extract race times and distances. Then use `zip` to combine the time and distance arrays together.

We’ll increment a counter when the distance beats the record. By reducing these counters per race, we can find the final product. 

While this approach works, faster alternative solutions are using the quadratic formula for a mathematical model or counting below threshold distances. This allows skipping unnecessary iterations.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GBY_GZs3CZ8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/range-overlap-and-intersection-day-05-advent-of-code</loc>
    <lastmod>2026-03-04T20:15:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/VcYHkGgQPqs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Range overlap and intersection - Day 05 - Advent of Code</video:title>
      <video:description>In this episode, you’ll learn how to solve the tricky Day 5 advent of code challenge involving massive number ranges and mapping "seeds" to "locations". I parse the input data into seeds and conversion rule groups. Then build a find method to apply offsets from each group's ranges.

For part 1, we'll traverse the groups to map a seed to its lowest possible location number. Part 2 requires handling seed ranges, so we create a convert method to break ranges into intersecting sub-ranges with offsets. By tracking these in a nested array, we cascade through each step without exploding memory.

The core solution leverages custom range intersection and set logic to avoid iterating impossible quadrillions of numbers. We’ll change the Range object with monkey-patching to add overlaps? and intersection methods.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=VcYHkGgQPqs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/rightward-assignment-in-ruby-day-04-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:18Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/W1Z0VCdRwag/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Rightward Assignment in Ruby - Day 04 - Advent of Code 2023</video:title>
      <video:description>Dive into the Advent of Code 2023 Day 4 puzzle with a Ruby twist! In this episode, titled "Scratch Cards," we’ll focus on harnessing the power of Ruby's rightward assignment feature for a challenge.

We start by setting up our input data, consisting of winning numbers and our own numbers, separated by a pipe operator. The goal is to determine how often our numbers appear in the winning numbers, with points doubling for each match. This episode walks you through each process step, from parsing the input with here-docs to utilizing rightward assignment for efficient code structuring.

Our journey includes pattern matching and array manipulation. The second part of the puzzle adds a twist, where scratch cards yield more cards instead of points, leading to a cascading effect in card duplication.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=W1Z0VCdRwag</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/grid-of-characters-day-03-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:19Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/H32Od3uZEs4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Grid of Characters - Day 03 - Advent of Code 2023</video:title>
      <video:description>Let’s solve the Advent of Code 2023 Day 3 puzzle in Ruby! In this video, we'll parse a text file representing a gear assembly schematic. We aim to sum the values of all numbers adjacent to marker symbols.

First, we'll break the input into rows and iterate through, identifying symbol locations. Then for each symbol, we'll search neighboring cells for adjacent numbers. By traversing left, we can find the starting digit to extract the full number value.

For part two, we'll adapt our solution to only consider star symbols with exactly two adjacent numbers - representing gear ratios. We'll get the product of these number pairs and sum the ratios.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=H32Od3uZEs4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pattern-matching-with-ranges-day-02-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:19Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/9sUFred8oQs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Pattern matching with Ranges - Day 02 - Advent of Code 2023</video:title>
      <video:description>In this video, you'll see a Ruby solution to parse the input data, model Game and Round classes, and determine which games meet the validity criteria for the Day 02, 2023 advent of code challenge.

We'll start by parsing the input to extract the game ID and rounds. Then build out Game and Round classes to represent the data. Next we'll create a #possible? method to check if a game meets the criteria of only having 12 red, 13 green, and 14 blue cubes.

For part 2, we'll find the minimum possible cubes needed to make each game valid. I refactor my solution to leverage Ruby iterator methods like #each_with_object and #all?. Finally, I use Ruby 3.1's new pattern matching on ranges for a clean validation check.


Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=9sUFred8oQs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/match-and-scan-day-01-advent-of-code-2023</loc>
    <lastmod>2026-03-04T20:15:19Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/lrJfC2dF84k/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Match and Scan - Day 01 - Advent of Code 2023</video:title>
      <video:description>Let's solve Day 1 of Advent of Code 2023 in Ruby! We'll parse a trebuchet calibration log file, extracting the first and last digits from each line, whether they're numerals or spelled-out words. By summing these two-digit numbers, we get the calibration value.

It's a fun logic puzzle with regular expressions, arrays and hashes in a Ruby script. The code is concise but effective for this coding challenge.

Overall it's a great beginner-friendly Advent of Code solution, showing some clever Ruby tricks for this text parsing and calculation problem.

Advent of Code: https://adventofcode.com/
My Solutions: https://gist.github.com/cjavdev/d15a2a4ffed6c840c2fb28a093e9f927/
Playlist https://www.youtube.com/playlist?list=PLS6F722u-R6KYlGyUv65EFpGKl2Esmurr

#adventofcode  #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=lrJfC2dF84k</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/jupyter-with-ruby-and-rails-plus-openai-function-calling</loc>
    <lastmod>2026-03-04T20:12:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/WTmcdixuqcY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Jupyter with Ruby and Rails (plus OpenAI function calling)</video:title>
      <video:description>In this episode you'll learn how to set up Jupyter notebooks with a Ruby kernel. We'll load our rails application into a Jupyter notebook and play around with function calling to create an Active Record model!

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=WTmcdixuqcY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/chatbot-with-ruby-on-rails-turbo-streams-and-openai</loc>
    <lastmod>2026-03-04T20:12:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/VEIEQwrK2Q8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Chatbot with Ruby on Rails, Turbo Streams, and OpenAI</video:title>
      <video:description>In this episode, we build a chatbot in Ruby on Rails using Turbo Streams to create a real-time chat experience.

00:00 - Introduction
We generate a Chat controller, model, and migrations to get started. Then we create the main chat index and show pages.

02:35 - Implement Chat Messaging
We build out sending and displaying chat messages using Turbo Streams to update the page without reloading. We also add a background job to process the chat messages.

05:30 - Integrate OpenAI API
We send the chat message history to the OpenAI API to generate responses. Then we display the "thinking" message before replacing it with the actual response via Turbo Streams.

09:10 - Refactor for Live Feedback
We refactor the OpenAI job to immediately show the "thinking" message, then later replace it with the final response. This provides live feedback as the response is generated.

12:30 - Next Steps
Some ideas for future improvements like authentication, fine-tuning an AI model, and streaming the OpenAI response.

Overall, we build a real-time chatbot with Rails and OpenAI using Turbo Streams for a smooth user experience. The code is available on GitHub to try it out yourself!

#rubyonrails #openai</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=VEIEQwrK2Q8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/semantic-search-search-by-meaning-rails-openai-langchain-rb-pg_vector</loc>
    <lastmod>2026-03-04T20:15:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/799wrxVZXWA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Semantic search (search by meaning) - Rails, OpenAI, langchain.rb, pg_vector</video:title>
      <video:description>In this video, you'll learn how to use tools like OpenAI, LangChain.rb, and Postgres with pgVector to build semantic search for a Rails app, breaking content into chunks, generating embeddings for each chunk with OpenAI, storing those in Postgres, and then using nearest neighbor search to find relevant chunks for a search query. This allows searching by meaning rather than just matching text exactly.

https://medium.com/@rubyroidlabs/how-to-build-an-ai-chatbot-with-ruby-on-rails-and-chatgpt-9a48f292c37c
https://github.com/ankane/neighbor
https://github.com/andreibondarev/langchainrb
https://github.com/andreibondarev/langchainrb/blob/main/lib/langchain/chunker/recursive_text.rb
https://github.com/IAPark/tiktoken_ruby
https://stdgems.org/matrix/
https://www.youtube.com/@RabbitHoleSyndrome
https://www.youtube.com/@jamesbriggs
https://www.youtube.com/watch?v=NTk8L2de_2Y

#rubyonrails #openai  #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=799wrxVZXWA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/fun-with-rails-generators</loc>
    <lastmod>2026-03-04T20:12:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8Rnf_-vDuaU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Fun with Rails Generators</video:title>
      <video:description>We'll hack on the api_client generator that comes in Jumpstart Pro to learn about rails generators.

Come work with me! - https://www.ycombinator.com/companies/craftwork 
Rails generators guides - https://guides.rubyonrails.org/generators.html 
Jumpstart Pro Rails - https://jumpstartrails.com/ 
Thor - http://whatisthor.com/ https://github.com/rails/thor
Model Generator Source - https://github.com/rails/rails/blob/main/activerecord/lib/rails/generators/active_record/model/model_generator.rb
Named Base Source - https://github.com/rails/rails/blob/main/railties/lib/rails/generators/named_base.rb#L182 
Generated Attribute Source - https://github.com/rails/rails/blob/main/railties/lib/rails/generators/generated_attribute.rb#L72 


#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8Rnf_-vDuaU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/sales-handoff-hacking-on-a-handoff-process-from-sales-to-operations</loc>
    <lastmod>2026-03-04T20:12:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Os4v_a2XKk8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Sales Handoff - Hacking on a handoff process from sales to operations</video:title>
      <video:description>.

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Os4v_a2XKk8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/rails-performance-tips-and-tricks</loc>
    <lastmod>2026-03-04T20:12:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Krkh0IGTYrQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Rails Performance Tips and Tricks</video:title>
      <video:description>Working through some performance improvements to a kanban list of projects. We'll cover eager loading, counter caches, improved caching for calculated fields, fragment caching, and image lazy loading.

Here's my perf playbook: https://www.cjav.dev/articles/rails-performance-playbook 

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Krkh0IGTYrQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/image-upload-for-markdown-input-with-stimulus-and-activestorage</loc>
    <lastmod>2026-03-04T20:12:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/rOdtvShwFPE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Image upload for markdown input with Stimulus and ActiveStorage</video:title>
      <video:description>In this episode, you'll learn how to add image uploading to inline images into a textarea for markdown. 

Jeremy's blog post: https://hybrd.co/posts/github-issue-style-file-uploader-using-stimulus-and-active-storage 
Jeremy's Twitter: https://twitter.com/jeremysmithco 

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=rOdtvShwFPE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/using-pinecone-vector-db-from-rails-with-openai-for-semantic-search</loc>
    <lastmod>2026-03-04T20:12:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/NTk8L2de_2Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Using pinecone vector db from Rails with OpenAI for semantic search</video:title>
      <video:description>Using pinecone vector db from Rails with OpenAI for semantic search

#rubyonrails #ruby #rails #gpt3 #openai #pinecone</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=NTk8L2de_2Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/recursively-summarize-blog-posts-with-openai-and-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:12:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/VV6fPf6O3sY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Recursively summarize blog posts with OpenAI and Ruby on Rails</video:title>
      <video:description>Recursively summarize blog posts with OpenAI and Ruby on Rails

#rubyonrails #ruby #rails #openai #gpt3</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=VV6fPf6O3sY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/when-are-webhooks-a-good-choice</loc>
    <lastmod>2026-03-04T20:13:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/dOe_7ysQVRE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>When are webhooks a good choice?</video:title>
      <video:description>#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=dOe_7ysQVRE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-the-payment-element-using-ruby</loc>
    <lastmod>2023-01-30T22:51:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/OGmEZbLMjOs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with the Payment Element using Ruby</video:title>
      <video:description>In this episode, you'll learn how to accept a one-time payment with a custom form using Ruby on the server with Sinatra and the Stripe Payment Element on the client. The Payment Element enables you to collect several different payment method types from cards and bank accounts to wallets and buy-now-pay-later payment methods. 

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
01:40 Install a sample with the Stripe for VSCode extension and CLI
03:23 Enable payment methods in the dashboard
04:29 Overview of payment flow
04:55 Create payment intent on the server
07:24 Collect payment details on the client
12:10 Submit payment details to Stripe
14:15 Build a confirmation page
16:02 Handle webhooks and post-processing events
18:33 Test your integration with Stripe test cards
19:51 Conclusion

### Resources
Accept a payment - https://stripe.com/docs/payments/accept-a-payment?platform=web&amp;ui=elements&amp;lang=ruby
PaymentIntent API reference - https://stripe.com/docs/api/payment_intents/create?lang=ruby
Learn all about webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers&amp;lang=ruby

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#stripe #ruby #payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=OGmEZbLMjOs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/monkey-math-evaluating-expressions-advent-of-code-2022-day-21-with-ruby</loc>
    <lastmod>2026-03-04T20:15:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/xJqkse6gojo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Monkey Math evaluating expressions - Advent of Code 2022 day 21 with Ruby</video:title>
      <video:description>Monkey Math evaluating expressions - Advent of Code 2022 day 21 with Ruby

Challenge: https://adventofcode.com/2022/day/21
Solution: https://gist.github.com/cjavdev/49230e5c547ece89efb07dbb0c5d8ced

Website used for solving the big equation: https://www.dcode.fr/equation-solver

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=xJqkse6gojo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/rotate-grove-positioning-system-advent-of-code-2022-day-20-with-ruby</loc>
    <lastmod>2026-03-04T20:15:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/oEDjAUS3sjc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>rotate, Grove Positioning System - Advent of Code 2022 Day 20 with Ruby</video:title>
      <video:description>rotate, Grove Positioning System - Advent of Code 2022 Day 20 with Ruby

Challenge: https://adventofcode.com/2022/day/20
Solution: https://gist.github.com/cjavdev/acdcf1d9dad509928ddd0305e8d878f7

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=oEDjAUS3sjc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/robots-and-mining-ore-clay-obsidian-geodes-advent-of-code-2022-day-19-with-ruby</loc>
    <lastmod>2026-03-04T20:15:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/O1EWLebIaAU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Robots and mining ore, clay, obsidian, geodes - Advent of Code 2022 Day 19 with Ruby</video:title>
      <video:description>Robots and mining ore, clay, obsidian, geodes - Advent of Code 2022 Day 19 with Ruby. Graph traversal problem with some optimizations.

Challenge: https://adventofcode.com/2022/day/19
Solution: https://gist.github.com/cjavdev/3d4df947d785d04bde080d3d4bf20b28

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=O1EWLebIaAU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/tetris-kinda-advent-of-code-2022-day-17-with-ruby</loc>
    <lastmod>2026-03-04T20:15:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZphG9VXELbc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Tetris (kinda) - Advent of Code 2022 Day 17 with Ruby</video:title>
      <video:description>Tetris (kinda)  - Advent of Code 2022 Day 17 with Ruby

Challenge: https://adventofcode.com/2022/day/17
Solution: https://gist.github.com/cjavdev/1b9d1f89629c400f1c10ba05e8433c26

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ZphG9VXELbc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/valve-flows-and-tunnels-through-a-graph-advent-of-code-2022-day-16-with-ruby</loc>
    <lastmod>2026-03-04T20:15:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/LzDRS7igO1k/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Valve flows and tunnels through a graph - Advent of Code 2022 Day 16 with Ruby</video:title>
      <video:description>Flows and tunnels through a graph - Advent of Code 2022 Day 16 with Ruby

Challenge: https://adventofcode.com/2022/day/16
Solution: https://gist.github.com/cjavdev/b6f1f78bad76f69130cef4532742c97a

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=LzDRS7igO1k</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-the-payment-element-using-net</loc>
    <lastmod>2023-01-30T22:51:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/B8KDDiXZE90/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with the Payment Element using .NET</video:title>
      <video:description>In this episode, you'll learn how to accept a one-time payment with a custom form using .NET on the server and the Stripe Payment Element on the client. The Payment Element enables you to collect several different payment method types from cards and bank accounts to wallets and buy-now-pay-later payment methods. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Table of contents
00:00 Introduction
01:40 Install a sample with the Stripe for VSCode extension and CLI
05:08 Enable payment methods in the dashboard
06:10 Overview of payment flow
06:38 Create payment intent on the server
09:56 Collect payment details on the client
15:00 Submit payment details to Stripe
17:33 Build a confirmation page
20:50 Handle webhooks and post-processing events
25:14 Test your integration with Stripe test cards
26:31 Conclusion


### Resources
Accept a payment - https://stripe.com/docs/payments/accept-a-payment?platform=web&amp;ui=elements&amp;lang=dotnet
PaymentIntent API reference - https://stripe.com/docs/api/payment_intents/create?lang=dotnet
Learn all about webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers&amp;lang=dotnet


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=B8KDDiXZE90</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/when-should-you-use-webhooks</loc>
    <lastmod>2026-03-04T20:15:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/50S0hRyPCFA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>When should you use webhooks?</video:title>
      <video:description>When should you use webhooks?

#rubyonrails  #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=50S0hRyPCFA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/2-2-beacon-exclusion-advent-of-code-2022-day-15-with-ruby</loc>
    <lastmod>2026-03-04T20:15:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ij9WmVQfLgc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>(2/2) Beacon Exclusion - Advent of Code 2022 Day 15 with Ruby</video:title>
      <video:description>(2/2) Beacon Exclusion - Advent of Code 2022 Day 15 with Ruby

Challenge: https://adventofcode.com/2022/day/15
Solution: https://gist.github.com/cjavdev/9a736b1ed879882e17d50dc9684d790d

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ij9WmVQfLgc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/1-2-beacon-exclusion-zone-advent-of-code-2022-day-15-part-1-with-ruby</loc>
    <lastmod>2026-03-04T20:15:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7p9RsY9-dp4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>(1/2) Beacon Exclusion Zone - Advent of Code 2022 Day 15 Part 1 with Ruby</video:title>
      <video:description>Beacon Exclusion Zone - Advent of Code 2022 Day 15 Part 1 with Ruby

Challenge: https://adventofcode.com/2022/day/15
Solution: https://gist.github.com/9a736b1ed879882e17d50dc9684d790d

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=7p9RsY9-dp4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/throw-catch-heredocs-for-regolith-reservoir-advent-of-code-2022-day-14-with-ruby</loc>
    <lastmod>2026-03-04T20:15:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/h7W8VipzBbk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>throw, catch, heredocs for Regolith Reservoir - Advent of Code 2022 Day 14 with Ruby</video:title>
      <video:description>throw, catch, heredocs for Regolith Reservoir - Advent of Code 2022 Day 14 with Ruby

00:00 Introduction
02:18 Grab input and start parsing lines
04:50 Grid boundaries
07:26 Build grid from boundaries
11:12 Start pouring sand
20:16 Part 2

Challenge: https://adventofcode.com/2022/day/14
Solution: https://gist.github.com/cjavdev/358c6a2587da9ca83404b81f9d7fac4a

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=h7W8VipzBbk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/passing-data-with-payment-links</loc>
    <lastmod>2023-01-30T22:51:52Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/uI9gJakNLQ8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Passing data with Payment Links</video:title>
      <video:description>In this episode, you'll learn the tools for passing data to and from Stripe with payment links. We'll cover the client_reference_id, embedding the Checkout Session ID in the return URL, and using UTM params for conversion tracking.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Table of contents
00:00 Introduction
01:00 Creating a Payment Link in the Stripe Dashboard
02:00 Adding a client reference id
03:04 Retrieving the checkout session id
06:50 Adding UTM parameters
07:48 Conclusion

### Resources
UTM Codes https://stripe.com/docs/payments/payment-links#utm-codes
Confirmation behavior https://stripe.com/docs/payments/payment-links#change-confirmation-behavior 
Prefill or track customer sessions https://stripe.com/docs/payments/payment-links#url-parameters 


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#nocode #stripe #lowcodenocode #payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=uI9gJakNLQ8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/distress-signal-pattern-matching-eval-method-advent-of-code-2022-day-13-with-ruby</loc>
    <lastmod>2026-03-04T20:15:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/k2MojjRowik/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Distress signal, pattern matching, eval, method - Advent of Code 2022 Day 13 with Ruby</video:title>
      <video:description>Distress signal, pattern matching, eval, method - Advent of Code 2022 Day 13 with Ruby

Challenge: https://adventofcode.com/2022/day/13
Solution: https://gist.github.com/37763ea6c5998f3178b201170c01d72e

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=k2MojjRowik</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/hill-climb-algorithm-advent-of-code-2022-day-12-with-ruby</loc>
    <lastmod>2026-03-04T20:15:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Klp6NKEXiw8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Hill climb algorithm - Advent of Code 2022 Day 12 with Ruby</video:title>
      <video:description>Hill climb algorithm - Advent of Code 2022 Day 12 with Ruby

Challenge: https://adventofcode.com/2022/day/12
Solution: https://gist.github.com/cjavdev/37aa7385afb395147d67dd922de21808

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Klp6NKEXiw8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-the-payment-element-using-java</loc>
    <lastmod>2023-01-30T22:51:51Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zyM5OsXUGdI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with the Payment Element using Java</video:title>
      <video:description>In this episode, you'll learn how to accept a one-time payment with a custom form using Java on the server and the Stripe PaymentElement on the client. The PaymentElement enables you to collect several different payment method types from cards and bank accounts to wallets and buy-now-pay-later payment methods. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
01:39 Install a sample with the Stripe CLI
04:50 Enable payment methods in the dashboard
06:00 Overview of payment flow
06:36 Create payment intent on the server
10:26 Collect payment details on the client
14:56 Submit payment details to Stripe
17:30 Build a confirmation page
20:25 Handle webhooks and post-processing events
23:10 Test your integration with Stripe test cards
24:33 Conclusion

### Resources
Accept a payment - https://stripe.com/docs/payments/accept-a-payment?platform=web&amp;ui=elements&amp;lang=java
PaymentIntent API reference - https://stripe.com/docs/api/payment_intents/create?lang=java
Learn all about webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers&amp;lang=java


### Support
If you have a question, please feel free to reach out to our support team  on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#stripe #payments #java #javaprogramming #javapayments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zyM5OsXUGdI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/monkey-class-advent-of-code-day-11-with-ruby</loc>
    <lastmod>2026-03-04T20:15:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GbUmGhF-BGo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Monkey class - Advent of Code Day 11 with Ruby</video:title>
      <video:description>Monkey class - Advent of Code Day 11 with Ruby

Challenge: https://adventofcode.com/2022/day/11
Solution: https://gist.github.com/cjavdev/8334e7dfef0a47076b90f1af8382d6f4 

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GbUmGhF-BGo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/enumerator-crt-display-advent-of-code-day-10-with-ruby</loc>
    <lastmod>2026-03-04T20:15:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5Qjktd13QUQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Enumerator, CRT display - Advent of Code - Day 10 with Ruby</video:title>
      <video:description>Enumerator, CRT display - Advent of Code - Day 10 with Ruby

Challenge: https://adventofcode.com/2022/day/10
Solution: https://gist.github.com/cjavdev/9f0aab41191b1050886257c0ce052be3

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5Qjktd13QUQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/spaceship-operator-rope-bridge-snake-advent-of-code-2022-day-9-with-ruby</loc>
    <lastmod>2026-03-04T20:15:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kKOBOlk6tqI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>🚀 spaceship operator, rope bridge (snake) - Advent of Code 2022 - Day 9 with Ruby</video:title>
      <video:description>spaceship operator, rope bridge (snake) - Advent of Code 2022 - Day 9 with Ruby

Challenge: https://adventofcode.com/2022/day/9 
Solution:  https://gist.github.com/cjavdev/db881b693bf33a754401328d73e410ba

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kKOBOlk6tqI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/treetop-tree-house-advent-of-code-day-8-with-ruby</loc>
    <lastmod>2026-03-04T20:15:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/3SHQOyUVvgA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Treetop Tree House - Advent of Code Day 8 with Ruby</video:title>
      <video:description>Treetop Tree House - Advent of Code Day 8 with Ruby

Challenge: https://adventofcode.com/2022/day/8
Solution: https://gist.github.com/cjavdev/a152b93c3d2328a6b910eedce01c19ee

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=3SHQOyUVvgA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/more-pattern-matching-advent-of-code-day-7-with-ruby</loc>
    <lastmod>2026-03-04T20:15:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/cTDs-pmxHYU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>more pattern matching - Advent of Code Day 7 with Ruby</video:title>
      <video:description>more pattern matching - Advent of Code Day 7 with Ruby

Challenge: https://adventofcode.com/2022/day/7
Solution: https://gist.github.com/cjavdev/a8122973da3303d76a93aeb614d6eff4

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=cTDs-pmxHYU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/each_cons-find_index-advent-of-code-2022-day-6-with-ruby</loc>
    <lastmod>2026-03-04T20:15:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/W1d-yFjnI1I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>each_cons, find_index - Advent of Code 2022 - Day 6 with Ruby</video:title>
      <video:description>each_cons, find_index - Advent of Code 2022 - Day 6 with Ruby

Challenge: https://adventofcode.com/2022/day/6
Solution: https://gist.github.com/cjavdev/98c558e5423f3bba42f15cedcefcd08e

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=W1d-yFjnI1I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/regex-towers-and-each_with_index-advent-of-code-2022-day-5-with-ruby</loc>
    <lastmod>2026-03-04T20:15:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/NNd7se8NlrU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Regex, towers, and each_with_index - Advent of Code 2022 - Day 5 with Ruby</video:title>
      <video:description>Solution for Day 5 of the Advent of Code in 2022 with Ruby. In this solution, we'll talk a bit about regex. The hardest part of this problem, in my opinion, is deserializing the input into useful data structures.

Challenge: https://adventofcode.com/2022/day/5
Solution: https://gist.github.com/6519248312ec4d6596ddd320583ba685

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=NNd7se8NlrU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-payment-element-using-go</loc>
    <lastmod>2023-01-30T22:51:52Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/M4aCgy67f24/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with payment element using Go</video:title>
      <video:description>In this episode, you'll learn how to accept a one-time payment with a custom form using Go on the server and the Stripe Payment Element on the client. The Payment Element enables you to collect several different payment method types from cards and bank accounts to wallets and buy-now-pay-later payment methods. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Chapters
00:00 Introduction
01:40 Install a sample with the Stripe CLI
04:06 Enable payment methods in the dashboard
05:12 Overview of payment flow
05:38 Create payment intent on the server
10:54 Collect payment details on the client
15:40 Submit payment details to Stripe
18:20 Build a confirmation page
21:46 Handle webhooks and post-processing events
24:44 Test your integration with Stripe test cards
26:00 Conclusion


### Resources
Accept a payment - https://stripe.com/docs/payments/accept-a-payment?platform=web&amp;ui=elements&amp;lang=go
PaymentIntent API reference - https://stripe.com/docs/api/payment_intents/create?lang=go
Learn all about webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers&amp;lang=go


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#stripe #payments #golang #golangtutorial</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=M4aCgy67f24</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ranges-and-sets-overlaps-subsets-and-intersection-advent-of-code-2022-day-4-in-ruby</loc>
    <lastmod>2026-03-04T20:12:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zpuKrQUKty8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ranges and Sets overlaps, subsets, and intersection - Advent of Code 2022 Day 4 in Ruby</video:title>
      <video:description>Ranges and Sets overlaps, subsets, and intersection - Advent of Code Day 4 in Ruby.

Challenge: https://adventofcode.com/2022/day/4
Solution: https://gist.github.com/cjavdev/2637d3d898554e8b82a834c25cc80339

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zpuKrQUKty8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/set-intersection-with-advent-of-code-2022-day-3-with-ruby</loc>
    <lastmod>2026-03-04T20:12:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/wksc9evwjHA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>set intersection with &amp; - Advent of Code 2022 - Day 3 with Ruby</video:title>
      <video:description>In today's exercise, you'll see how to use the &amp; operator to find the intersection of two sets to solve day 3 of the advent of code 2022.

Challenge: https://adventofcode.com/2022/day/3
Solution: https://gist.github.com/cjavdev/864bec6b1b6bc423be487d234009f9bf

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=wksc9evwjHA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pattern-matching-rock-paper-scissors-advent-of-code-2022-day-2-with-ruby</loc>
    <lastmod>2026-03-04T20:12:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/xYk_xxIp0u4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>pattern matching - rock paper scissors - Advent of Code 2022 Day 2 with Ruby</video:title>
      <video:description>Using pattern matching in ruby to solve the advent of code problem for day 2, 2022. 

Challenge: https://adventofcode.com/2022/day/2
Solution: https://gist.github.com/cjavdev/1c38250a552aecdfa1fb07f11b0c4bd9

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=xYk_xxIp0u4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/chunk_while-numbered-block-arguments-advent-of-code-2022-day-1-with-ruby</loc>
    <lastmod>2026-03-04T20:13:00Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ooqgY9yVbPc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>chunk_while, numbered block arguments - Advent of Code 2022 Day 1 with Ruby</video:title>
      <video:description>Solution for Advent of Code day 1 with Ruby! In this episode, you'll learn about using the chunk_while enumerable method and numbered block arguments.

Challenge: https://adventofcode.com/2022/day/1
Solution: https://gist.github.com/cjavdev/acd047fe1c04104665a8e3225998b2a3 

#ruby #adventofcode</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ooqgY9yVbPc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/nerdtree-and-fzf-in-vim</loc>
    <lastmod>2026-03-04T20:13:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_ur-26Hfqq8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Nerdtree and fzf in vim</video:title>
      <video:description>How I use nerdtree and fzf in vim.

#vim</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_ur-26Hfqq8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-the-payment-element-using-python</loc>
    <lastmod>2023-01-30T22:51:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tCSbCk5j3Tk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with the Payment Element using Python</video:title>
      <video:description>In this episode, you'll learn how to accept a one-time payment with a custom form using Python on the server and the Stripe Payment Element on the client. The Payment Element enables you to collect several different payment method types from cards and bank accounts to wallets and buy-now-pay-later payment methods. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Chapters
00:00 Introduction
01:37 Install a sample with the Stripe CLI
03:57 Enable payment methods in the dashboard
05:02 Overview of payment flow
05:31 Create payment intent on the server
07:58 Collect payment details on the client
12:06 Submit payment details to Stripe
14:53 Build a confirmation page
17:25 Handle webhooks and post-processing events
20:43 Test your integration with Stripe test cards
22:01 Conclusion

### Resources
Accept a payment - https://stripe.com/docs/payments/accept-a-payment?platform=web&amp;ui=elements&amp;lang=python
PaymentIntent API reference - https://stripe.com/docs/api/payment_intents/create?lang=python
Learn all about webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers&amp;lang=python


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#stripe #payments #python #pythonprogramming 

#stripe #payments #python #pythonprogramming</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tCSbCk5j3Tk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/what-changes-are-in-the-most-recent-git-commit</loc>
    <lastmod>2026-03-04T20:13:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Ub3MQr4DrWk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>What changes are in the most recent git commit?</video:title>
      <video:description>What changes are in the most recent git commit?

#git #webdevelopment #webdev</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Ub3MQr4DrWk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-payment-element-using-node-js</loc>
    <lastmod>2023-01-30T22:51:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/NZvwxAjptaQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with payment element using Node.js</video:title>
      <video:description>In this episode, you'll learn how to accept a one-time payment with a custom form using Node.js with Express on the server and the Stripe Payment Element on the client. The Payment Element enables you to collect several different payment method types from cards and bank accounts to wallets and buy-now-pay-later payment methods. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Chapters
00:00 Introduction
01:37 Install a sample with the Stripe CLI
03:50 Enable payment methods in the dashboard
04:55 Overview of payment flow
05:42 Create payment intent on the server
09:14 Collect payment details on the client
13:51 Submit payment details to Stripe
16:30 Build a confirmation page
19:24 Handle webhooks and post-processing events
22:03 Test your integration with Stripe test cards
23:30 Conclusion

### Resources
Accept a payment - https://stripe.com/docs/payments/accept-a-payment?platform=web&amp;ui=elements&amp;lang=node
PaymentIntent API reference - https://stripe.com/docs/api/payment_intents/create?lang=node
Learn all about webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers&amp;lang=node

### Support
If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#stripe #payments #nodejs</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=NZvwxAjptaQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/webhook-reliability</loc>
    <lastmod>2026-03-04T20:13:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-yg3q1bz6TY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Webhook reliability</video:title>
      <video:description>#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-yg3q1bz6TY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-the-payment-element-using-php</loc>
    <lastmod>2023-01-30T22:51:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/D_XL3P4MFH4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with the Payment Element using PHP</video:title>
      <video:description>In this episode, you'll learn how to accept a one-time payment with a custom form using PHP on the server and the Stripe Payment Element on the client. The Payment Element enables you to collect several different payment method types from cards and bank accounts to wallets and buy-now-pay-later payment methods. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Chapters
00:00 Introduction
01:37 Install a sample with the Stripe CLI
04:00 Enable payment methods in the dashboard
05:06 Overview of payment flow
05:31 Create payment intent on the server
08:00 Collect payment details on the client
11:22 Submit payment details to Stripe
13:58 Build a confirmation page
16:19 Handle webhooks and post-processing events
19:49 Test your integration with Stripe test cards
21:15 Conclusion

### Resources
Accept a payment - https://stripe.com/docs/payments/accept-a-payment?platform=web&amp;ui=elements&amp;lang=php
PaymentIntent API reference - https://stripe.com/docs/api/payment_intents/create?lang=php
Learn all about webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers&amp;lang=php


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#stripe #payments #php #payment_element #integration</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=D_XL3P4MFH4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/variable-amount-pricing-in-stripe-checkout</loc>
    <lastmod>2023-01-30T22:51:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/1-olKBnmC84/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Variable amount pricing in Stripe Checkout</video:title>
      <video:description>In this episode, you'll learn two ways to collect variable amount one-time payments with Stripe Checkout. First, you can enable customers to define the price they pay at Checkout for donation or tip use-cases. You'll also learn how to pass a custom amount when creating the Checkout Session, useful in cases where you maintain a large product catalog outside of Stripe or when the amount varies widely from customer to customer. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Table of contents
00:00 Introduction
00:33 Demo
01:34 Creating a "customer chooses price" in the dashboard
02:58 Letting the user specify a custom amount at checkout
07:25 Conclusion



### Resources
Variable pricing https://stripe.com/docs/products-prices/pricing-models#variable-pricing 
Checkout 101 https://stripe.com/docs/videos/checkout-101
Checkout Quickstart https://stripe.com/docs/checkout/quickstart


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#stripe #payments #stripecheckout #checkout #donation</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=1-olKBnmC84</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/query-strings-from-hash-in-ruby</loc>
    <lastmod>2026-03-04T20:13:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/FSXkYgL0M6Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Query strings from Hash in Ruby</video:title>
      <video:description>Query strings from Hash in Ruby 

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=FSXkYgL0M6Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/subscription-trials-without-payment-details-upfront</loc>
    <lastmod>2023-01-30T22:51:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/x9Grjc-8tbw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Subscription trials without payment details upfront</video:title>
      <video:description>In this episode, you'll learn how to use Stripe Checkout to start a Subscription on a trial without a payment method.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev



### Table of contents
00:00 Introduction
02:53 Configure the `subscription_data` object for trials
03:50 Configure the customer portal
04:51 Configure email reminders and the no-code customer portal
05:28 Using test clocks to advance time and test your integration
10:10 Conclusion


### Resources
Configure a free trial without payment details https://stripe.com/docs/payments/checkout/free-trials 
Stripe Checkout https://stripe.com/docs/payments/checkout
Checkout 101: https://stripe.com/docs/videos/checkout-101


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo

#stripe #payments #subscriptions</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=x9Grjc-8tbw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/is-ruby-on-rails-fast</loc>
    <lastmod>2026-03-04T20:13:18Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/aKloVlQTyAA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Is Ruby on Rails fast?</video:title>
      <video:description>Is Ruby on Rails fast?

#rails #rubyonrails #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=aKloVlQTyAA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/collect-payment-in-installments-with-subscription-schedules</loc>
    <lastmod>2023-01-30T22:51:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7z8mncrjq24/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Collect payment in installments with Subscription Schedules</video:title>
      <video:description>In this episode, you'll learn how to use Subscription Schedules to collect a large payment over several months in installments. We'll start the Subscription with Stripe Checkout, then create a Subscription Schedule from that new Subscription assigning phases for the incremental payments, and ultimately canceling the Subscription after the final payment. We'll also show how to use Test Clocks to simulate moving through time and to test your integration.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
01:00 Create a subscription in Checkout
05:24 Build subscription phases and apply to schedule
12:15 Testing collecting installments with test clocks
16:50 Cancel subscription after final installment
19:30 conclusion


### Resources
Subscription Schedules https://stripe.com/docs/api/subscription_schedules 
Subscription Schedule use-cases https://stripe.com/docs/billing/subscriptions/subscription-schedules/use-cases#installment-plans 


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=7z8mncrjq24</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-to-convert-an-active-record-model-to-a-hash-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:18Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/z-CRtTV9P0s/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How to convert an Active Record model to a Hash with Ruby on Rails</video:title>
      <video:description>How to convert an Active Record model to a Hash with Ruby on Rails

#rubyonrails #rails #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=z-CRtTV9P0s</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/active-record-save-without-validations-for-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:18Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/RUVP-ikIzcw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Active Record save without validations for ruby on rails</video:title>
      <video:description>Active Record save without validations for ruby on rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=RUVP-ikIzcw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-to-call-controller-methods-from-a-view-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:19Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/evmkIazp6co/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How to call controller methods from a view with Ruby on Rails</video:title>
      <video:description>How to call controller methods from a view with Ruby on Rails

#rails #rubyonrails #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=evmkIazp6co</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-authenticating-your-stripe-customers-with-clerk</loc>
    <lastmod>2026-03-04T20:13:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/yY_mW5Xa30Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Authenticating your Stripe Customers with Clerk</video:title>
      <video:description>Clerk provides drop-in authentication for React applications. In this livestream, Colin Sidoti will show us how Clerk works and also how it can compliment your Stripe integrations.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=yY_mW5Xa30Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-authenticating-your-stripe-customers-with-clerk-0109b974-8a9b-4a28-a3fe-109ac91ecaa9</loc>
    <lastmod>2023-01-30T22:52:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/gG5M9JgO9mo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Authenticating your Stripe Customers with Clerk</video:title>
      <video:description>Clerk provides drop-in authentication for React applications. In this livestream, Colin Sidoti will show us how Clerk works and also how it can compliment your Stripe integrations.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=gG5M9JgO9mo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/attachment-downloads-for-end-customers-creatorplatform-xyz-part-33</loc>
    <lastmod>2026-03-04T20:13:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Qa45n84IN3E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Attachment downloads for end customers - CreatorPlatform.xyz - Part 33</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Qa45n84IN3E</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/display-virtual-card-details-with-issuing-elements-creatorplatform-xyz-part-31</loc>
    <lastmod>2026-03-04T20:13:02Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/9dPRhPsZSm0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Display virtual card details with Issuing Elements  - CreatorPlatform.xyz - Part 31</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev


#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=9dPRhPsZSm0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/are-webhooks-reliable</loc>
    <lastmod>2026-03-04T20:13:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/h9XZH-SgStk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Are webhooks reliable?</video:title>
      <video:description>Are webhooks reliable?</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=h9XZH-SgStk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/sending-email-with-ruby-on-rails-creatorplatform-xyz-part-32</loc>
    <lastmod>2026-03-04T20:13:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zq57C07xCSE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Sending email with Ruby on Rails - CreatorPlatform.xyz - Part 32</video:title>
      <video:description>In this video, you'll learn how to create Mailers to send emails with Ruby on Rails. We'll use the letter_opener gem locally to test our email templates and cover the basics for configuring emails.

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zq57C07xCSE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/create-cardholders-and-issue-cards-to-creators-creatorplatform-xyz-part-30</loc>
    <lastmod>2026-03-04T20:13:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/YXrYyv8GbJA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Create cardholders and issue cards to creators - CreatorPlatform.xyz - Part 30</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=YXrYyv8GbJA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/branding-with-dall-e-generated-logo-creatorplatform-xyz-part-28</loc>
    <lastmod>2026-03-04T20:13:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/EUri3jjbq1s/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Branding with DALL-E generated logo - CreatorPlatform.xyz - Part 28</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=EUri3jjbq1s</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/custom-attributes-for-devise-onboarding-creatorplatform-xyz-part-27</loc>
    <lastmod>2026-03-04T20:13:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-_AlWZ67SOk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Custom attributes for devise onboarding - CreatorPlatform.xyz - Part 27</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-_AlWZ67SOk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/custom-layout-for-devise-views-creatorplatform-xyz-part-26</loc>
    <lastmod>2026-03-04T20:13:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/N86tF2RnMgM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Custom layout for devise views - CreatorPlatform.xyz - Part 26</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=N86tF2RnMgM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/gravatars-creatorplatform-xyz-part-25</loc>
    <lastmod>2026-03-04T20:13:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/quLHxF0jjr4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Gravatars - CreatorPlatform.xyz - Part 25</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=quLHxF0jjr4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-formatting-basics</loc>
    <lastmod>2026-03-04T20:13:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/yJdCZghQPoQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby formatting basics</video:title>
      <video:description>How to format ruby code.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=yJdCZghQPoQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ssl-for-custom-subdomains-with-cloudflare-heroku-and-rails-creatorplatform-xyz-part-24</loc>
    <lastmod>2026-03-04T20:13:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8c6Z9SXqoF0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SSL for Custom Subdomains with Cloudflare, Heroku, and Rails - CreatorPlatform.xyz - Part 24</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8c6Z9SXqoF0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/deploy-rails-7-to-heroku-creatorplatform-xyz-part-23</loc>
    <lastmod>2026-03-04T20:13:06Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7eb_GzX3Gys/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Deploy Rails 7 to Heroku - CreatorPlatform.xyz - Part 23</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=7eb_GzX3Gys</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/modeling-attachments-and-using-counter-caches-creatorplatform-xyz-part-22</loc>
    <lastmod>2026-03-04T20:13:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/sFSprEVFhc4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Modeling Attachments and using Counter Caches - CreatorPlatform.xyz - Part 22</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=sFSprEVFhc4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/order-fulfillment-with-webhooks-creatorplatform-xyz-part-21</loc>
    <lastmod>2026-03-04T20:13:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_7gH6G5vo2c/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Order Fulfillment with Webhooks - CreatorPlatform.xyz - Part 21</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_7gH6G5vo2c</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/order-confirmation-page-with-tailwind-ui-creatorplatform-xyz-part-20</loc>
    <lastmod>2026-03-04T20:13:06Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/QWUvuRwpZLU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Order Confirmation Page with Tailwind UI - CreatorPlatform.xyz - Part 20</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=QWUvuRwpZLU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/customer-payment-flow-with-stripe-checkout-creatorplatform-xyz-part-19</loc>
    <lastmod>2026-03-04T20:13:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/UUL7NUGljXE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Customer Payment Flow with Stripe Checkout - CreatorPlatform.xyz - Part 19</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=UUL7NUGljXE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-08-subscriber-management-with-the-customer-portal</loc>
    <lastmod>2023-01-30T22:52:02Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zMc-YcuQVts/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 08 - Subscriber management with the customer portal</video:title>
      <video:description>In this episode, you'll learn how to enable customers to manage their billing using the customer portal. The customer portal is a feature rich Stripe hosted page where customers can do things like update their card on file, change their subscription, or cancel. You can configure what customers are allowed to do from the settings in your dashboard, or by creating a Customer Portal Configuration using the API. We'll focus on integrating the customer portal.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Contents
00:00 Introduction to the customer portal
01:41 Configuring the customer portal in your app
03:07 Configure your front-end
04:29 Configure your portal in the dashboard
05:30 Conclusion

### Resources
Integrating the customer portal: https://stripe.com/docs/billing/subscriptions/integrating-customer-portal
Article: https://dev.to/stripe/managing-the-customer-billing-lifecycle-using-the-customer-portal-307j


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#saas #stripe #payments #ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zMc-YcuQVts</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-to-execute-shell-commands-with-ruby</loc>
    <lastmod>2026-03-04T20:13:22Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tdMXhunvRkU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How to execute shell commands with Ruby</video:title>
      <video:description>How to execute shell commands with Ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tdMXhunvRkU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/product-listing-pages-with-tailwind-ui-creatorplatform-xyz-part-18</loc>
    <lastmod>2026-03-04T20:13:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Y0DPSD1uSz8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Product listing pages with Tailwind UI - CreatorPlatform.xyz - Part 18</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Y0DPSD1uSz8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stores-subdomain-routing-with-ruby-on-rails-creatorplatform-xyz-part-17</loc>
    <lastmod>2026-03-04T20:13:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/U2C7e0sA8kg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stores Subdomain Routing with Ruby on Rails - CreatorPlatform.xyz - Part 17</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=U2C7e0sA8kg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/aws-s3-uploads-with-ruby-on-rails-creatorplatform-xyz-part-16</loc>
    <lastmod>2026-03-04T20:13:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/wbiXR7VGWYo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>AWS S3 Uploads with Ruby on Rails - CreatorPlatform.xyz - Part 16</video:title>
      <video:description>Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=wbiXR7VGWYo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-07-provisioning-access-to-paid-features</loc>
    <lastmod>2023-01-30T22:52:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8iWijfcmktM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 07 - Provisioning access to paid features</video:title>
      <video:description>In this episode, you'll learn how to listen for webhooks and provision or deprovision access to your SaaS application. As users subscribe, upgrade, downgrade, or cancel their subscriptions, you can keep track of the latest status of the Subscription by listening for webhook events. 

00:00 Introduction
00:41 Using the CLI to listen for events
02:05 Using the pay gem
03:19 Implementing without pay gem
03:59 Pro trip on using the CLI


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Resources
Provision access and monitor: https://stripe.com/docs/billing/subscriptions/build-subscriptions?ui=checkout#provision-and-monitor 
Webhooks videos: https://www.youtube.com/c/StripeDevelopers/search?query=webhook%20helpers
Article: https://dev.to/stripe/enable-your-saas-users-to-access-paid-features-with-webhooks-4n8f


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8iWijfcmktM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/upload-product-images-with-activestorage-creatorplatform-xyz-part-15</loc>
    <lastmod>2026-03-04T20:13:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ihGRv-0E6K0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Upload Product images with ActiveStorage - CreatorPlatform.xyz - Part 15</video:title>
      <video:description>In this episode, we'll install and set up ActiveStorage to upload files. I encounter a confusing bug related to how active storage was installed client side, and I go through my debugging steps, hopefully, those are helpful! We'll also talk about how to add variants to images. 

00:00 Introduction
00:27 Install Active Storage and image_processing gem
01:39 Add reference to the attachment to the Product model
02:56 Add file upload input to product form
04:12 Incorrectly add active storage client side
05:24 Encounter ActiveSupport::MessageVerifier::InvalidSignature bug
06:43 Fix bug
07:16 Add image_tag to display the uploaded image
07:58 Add variants to photo
09:15 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ihGRv-0E6K0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/enable-creators-to-create-stripe-products-with-localized-prices-creatorplatform-xyz-part-14</loc>
    <lastmod>2026-03-04T20:13:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/rl8AOfEep5Q/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Enable creators to create Stripe Products with localized prices - CreatorPlatform.xyz - Part 14</video:title>
      <video:description>In this episode, we'll add support for creators to add Products. Each Product represents something a creator sells. We'll use the Stripe API to create localized products and store their IDs in the database. We'll also use Stimulus.js to add additional nested form elements to our page. We'll test that price localization is working and display a list of products to the creator. 

00:00 Introduction
00:37 Create a Product model
02:10 Create a Products controller
03:34 Add a Tailwind UI styled form for creating products
10:58 Review price localization options in the Stripe Product API
15:21 Create the Product in the database
16:15 Create a Product with the Stripe API
23:25 Use Stimulus.js to add nested form inputs
29:43 Generate a controller for testing Checkout as the creator
35:24 Test Checkout price localization
36:38 Display the list of products
42:29 Conclusion

Stripe Product API Reference: https://stripe.com/docs/api/products/create
Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=rl8AOfEep5Q</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/faker-gem-creatorplatform-xyz-part-13</loc>
    <lastmod>2026-03-04T20:13:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/r25pFfLLF_c/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Faker gem - CreatorPlatform.xyz - Part 13</video:title>
      <video:description>In this episode, we install the Faker gem, a tool for generating fake data in development and test mode. 

00:00 Introduction
00:16 Install the Faker gem
00:29 Explore Faker's methods in the Rails console
01:47 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=r25pFfLLF_c</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/annotate-gem-creatorplatform-xyz-part-12</loc>
    <lastmod>2026-03-04T20:13:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/19xAXtUv7c8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Annotate gem - CreatorPlatform.xyz - Part 12</video:title>
      <video:description>In this episode, we'll install and use the annotate gem, a helpful tool for visualizing the database schema from the model files in a Ruby on Rails application.

00:00 Introduction
00:21 Why do we want to annotate?
00:38 Install the annotate gem
00:56 Annotate existing models 
01:19 Test annotations for new models
01:40 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=19xAXtUv7c8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-payouts-creatorplatform-xyz-part-11</loc>
    <lastmod>2026-03-04T20:13:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/pfVHg4pNG7c/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Payouts - CreatorPlatform.xyz - Part 11</video:title>
      <video:description>In this episode, we'll show how to move money from our Stripe Payments balance to the Financial Account balance with a Payout. A Payout will send money to the underlying Stripe account's external account. We used our Financial Account's account and routing number in a previous episode to create an External account, and now we'll payout to that new external account.

00:00 Introduction
00:33 Create a Payouts controller
01:24 Create a Stripe Payout
02:38 Add a dashboard button to trigger a manual payout
05:28 Test the payout flow
05:51 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=pfVHg4pNG7c</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/laravel-bootcamp-for-ruby-on-rails-devs</loc>
    <lastmod>2026-03-04T20:13:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/rm9xshlbir4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Laravel bootcamp for Ruby on Rails devs</video:title>
      <video:description>Playing through bootcamp.laravel.com 

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=rm9xshlbir4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-06-start-a-subscription-with-checkout</loc>
    <lastmod>2023-01-30T22:52:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/pTtJjOKLYsQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 06 - Start a subscription with Checkout</video:title>
      <video:description>In this episode, you'll learn how to start a subscription with Stripe Checkout to collect recurring payments for your SaaS business.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Chapters
00:00 Introduction
00:57 Implementing a Checkout session with pay
04:31 Implementing a Checkout session with Stripe Ruby
06:23 Enabling tax calculation and other Checkout features
09:04 Conclusion

### Resources
Build a subscriptions integration: https://stripe.com/docs/billing/subscriptions/build-subscriptions
Integration builder: https://stripe.com/docs/billing/quickstart
Article: https://dev.to/stripe/start-a-subscription-to-collect-recurring-payments-with-stripe-faa


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=pTtJjOKLYsQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/financial-account-balances-and-payments-balances-creatorplatform-xyz-part-10</loc>
    <lastmod>2026-03-04T20:13:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/h0BTwafCgiY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Financial Account balances and Payments balances - CreatorPlatform.xyz - Part 10</video:title>
      <video:description>In this episode, we'll build a simple dashboard to display the balances from our Financial Account (store of funds) and our Payments balances (available and pending). We'll also talk about how to quickly add test funds to a Financial Account using a test mode Received Credit or a Payments balance using a special test card.

00:00 Introduction
01:20 Display Stripe Financial Account balances
02:26 Style dashboard metrics with Tailwind UI
04:32 Add test funds to the Financial Account with a Received Credit
06:57 Display Stripe Payments balances
08:12 Retrieve Stripe Payments balance
10:44 Test adding funds to available payments balance 
12:29 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=h0BTwafCgiY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/fibonacci-sequence-with-ruby</loc>
    <lastmod>2026-03-04T20:13:22Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/qTPHVXBIPNM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Fibonacci sequence with Ruby</video:title>
      <video:description>Implement a function to find the Fibonacci sequence with Ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=qTPHVXBIPNM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/create-stripe-financial-accounts-to-store-money-creatorplatform-xyz-part-9</loc>
    <lastmod>2026-03-04T20:13:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZDF1DdWIl18/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Create Stripe Financial Accounts to store money - CreatorPlatform.xyz - Part 9</video:title>
      <video:description>In this episode, we'll handle webhook events related to our connected account onboarding flow to create a new Financial Account (store of funds). Then, we'll show how to access the ACH account and routing number for the Financial Account. Finally, we'll use our new Financial Account's account and routing number to create an External Account so that creators can receive payouts from our Stripe Payments balance. 

00:00 Introduction
00:34 Handle the treasury capability enabled webhook event
04:57 Create a new Financial Account with the Stripe API
08:00 Test webhook event processing
12:41 Handle the financial account features status update webhook event
16:28 How to retrieve the ABA ACH account number for a Stripe Financial Account
19:33 Create an External Account using the ACH details from the Financial Account
22:15 Conclusion

Financial Account API Reference: https://stripe.com/docs/api/treasury/financial_accounts
Treasury Docs: https://stripe.com/docs/treasury/examples/financial-accounts#creating-a-financialaccount
Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ZDF1DdWIl18</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-accepting-recurring-payments-for-your-saas-business-with-checkout</loc>
    <lastmod>2026-03-04T20:13:02Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/BMfRjmm1zws/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Accepting recurring payments for your SaaS business with Checkout</video:title>
      <video:description>If you're running a business that collects recurring payments with subscriptions, there are so many things you need to consider. What payment methods do you accept, localized prices, issuing receipts, funds, and much more.

In this live session, we'll have fellow Stripes Josh Ackerman and CJ Avilla join Cecil Phillip to showcase some of the ways that Stripe is supporting SaaS companies. They will discuss some of the newly released features that support SaaS business models, and we'll also see some demos of how these features work together.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=BMfRjmm1zws</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-accepting-recurring-payments-for-your-saas-business-with-checkout-06a1f1e5-787b-496e-9640-0d834e7541a1</loc>
    <lastmod>2023-01-30T22:52:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KZAv4qrDZrA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Accepting recurring payments for your SaaS business with Checkout</video:title>
      <video:description>If you're running a business that collects recurring payments with subscriptions, there are so many things you need to consider. What payment methods do you accept, localized prices, issuing receipts, funds, and much more.

In this live session, we'll have fellow Stripes Josh Ackerman and CJ Avilla join Cecil Phillip to showcase some of the ways that Stripe is supporting SaaS companies. They will discuss some of the newly released features that support SaaS business models, and we'll also see some demos of how these features work together.

### Table of contents

00:00 Countdown
04:53 Introduction
12:53 Why Stripe Checkout
20:00 Subscription trial without payment method upfront demo
24:01 Configure Checkout not to collect payment method
30:56 Test Clocks demo
35:34 Customer portal with no-code option
41:49 Usage based billing in Checkout
48:01 Conclusion

#payments #stripe #webdevelopment</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KZAv4qrDZrA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-connect-onboarding-with-ruby-on-rails-creatorplatform-xyz-part-8</loc>
    <lastmod>2026-03-04T20:13:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/M1_JCZxhlRA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Connect onboarding with Ruby on Rails - CreatorPlatform.xyz - Part 8</video:title>
      <video:description>Stripe Connect onboarding with Ruby on Rails. You'll learn about the webhook events needed to track the onboarding flow for a custom connect account with Stripe Treasury enabled.

00:00 Introduction
00:55 Create an Account model in the database
02:22 Make a class for working with Stripe Account APIs
04:20 Create a custom Account with the Stripe API
07:18 Create an AccountLink for Connect onboarding
08:57 Add button for creating accounts
12:21 URL helpers from a custom class
14:39 Stripe Connect onboarding
20:32 Display account details in the dashboard
23:57 Handle Stripe Connect onboarding webhook events
28:24 Conclusion

Stripe Connect Onboarding docs: https://stripe.com/docs/connect/custom-accounts
Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev


#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=M1_JCZxhlRA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-05-build-a-saas-pricing-page</loc>
    <lastmod>2023-01-30T22:52:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/qmulfQS8wqU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 05 - Build a SaaS pricing page</video:title>
      <video:description>In this episode, you'll learn how to build a pricing page for a SaaS product. Display a good-better-best business model as tiers that customers can select from.


### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Resources
Embeddable pricing table https://stripe.com/docs/payments/checkout/pricing-table 
Pricing models https://stripe.com/docs/products-prices/pricing-models


### Support
If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

Attachments

Options</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=qmulfQS8wqU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dashboard-view-with-tailwind-ui-creatorplatform-xyz-part-7</loc>
    <lastmod>2026-03-04T20:13:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/STZtfs6RR-E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dashboard view with Tailwind UI - CreatorPlatform.xyz - Part 7</video:title>
      <video:description>Building an application dashboard page from Tailwind UI for our authenticated user view. 

00:00 Introduction
00:29 Create Dashboard controller
01:31 Create new stacked layout with Tailwind UI
04:03 Custom yield for content_for Capture Helper
04:55 Clean up unused navigation
05:18 Add helper for generating navigation items
07:55 Set specific layout in the StaticPages controller
09:34 Conclusion

Capture helper docs: https://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html
Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=STZtfs6RR-E</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/handle-webhooks-and-process-async-with-rails-creatorplatform-xyz-part-6</loc>
    <lastmod>2026-03-04T20:13:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZkHOC8Ebk0A/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Handle webhooks and process async with Rails - CreatorPlatform.xyz - Part 6</video:title>
      <video:description>Handle webhooks and process async with Rails using sidekiq as our queue adapter. When a webhook event notification is received by Rails, we'll store the event in the database, then process it in the background with a Job. We'll talk about how to set up the routing for events based on the source and event type. 

00:00 Introduction
00:20 Create a new Webhooks controller
01:29 Create a Job for handling webhook events
01:59 Install sidekiq in Ruby on Rails 7
03:39 Test Stripe webhooks
06:23 Route events based on source and event type
07:49 Install the Stripe Ruby gem
09:10 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ZkHOC8Ebk0A</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/postgres-enums-in-ruby-on-rails-creatorplatform-xyz-part-5</loc>
    <lastmod>2026-03-04T20:13:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/H9W5dwHbY3Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Postgres enums in Ruby on Rails - CreatorPlatform.xyz - Part 5</video:title>
      <video:description>Postgres enums in Ruby on Rails. Using the create_enum method in a Rails migration, we can create a new Enum datatype in postgres that we can use from our models. We'll also talk about several enum configurations for enabling prefixes or suffixes and disabling scopes that are automatically generated for you.

00:00 Introduction
00:24 Generate a new Event model
01:21 Create enum datatype in Rails migration
02:24 Review enums in postgresql database
03:24 Set up enums in Active Record model
06:05 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Documentation: https://api.rubyonrails.org/v5.2.4.4/classes/ActiveRecord/Enum.html
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=H9W5dwHbY3Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/factorial-with-ruby</loc>
    <lastmod>2026-03-04T20:13:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/D2LdKxE3wt4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Factorial with Ruby</video:title>
      <video:description>Factorial with Ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=D2LdKxE3wt4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/landing-page-for-ruby-on-rails-with-tailwind-ui-creatorplatform-xyz-part-4</loc>
    <lastmod>2026-03-04T20:13:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/U5mU38Avdhw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Landing page for Ruby on Rails with Tailwind UI - CreatorPlatform.xyz - Part 4</video:title>
      <video:description>Using a landing page template from Tailwind UI to build a nice landing page for our creator platform built as a Ruby on Rails 7 application.

00:00 Introduction
00:31 Pick landing page from TailwindUI
00:57 Update tailwind.config.js
02:47 Update navigation
04:01 Handle authentication states
05:29 Customize copy and remove unused elements
07:03 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=U5mU38Avdhw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/devise-authentication-styled-with-tailwind-ui-creator-platform-xyz-part-3</loc>
    <lastmod>2026-03-04T20:13:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/COFI93NySUw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Devise authentication styled with Tailwind UI - Creator Platform.xyz - Part 3</video:title>
      <video:description>In this video, we'll install the devise gem for authentication in our Ruby on Rails application. We'll talk about a common gotcha with navigational formats to avoid the error where the user_url method is undefined in the Devise::Registrations controller. We'll also talk about how to switch sign out to use a get method and briefly why that might be a bad idea (but we do it anyways).

00:00 Introduction
00:20 Install the devise gem
01:24 Create a User model
03:01 Routes created by devise
03:30 Use Tailwind UI sign up template
08:06 Fix undefined method `user_url` for Devise::RegistrationsController
09:38 Add sign out via get request
10:28 Style remaining forms
18:28 Conclusion

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=COFI93NySUw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/new-ruby-on-rails-application-and-static-pages-creatorplatform-xyz-part-2</loc>
    <lastmod>2026-03-04T20:13:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MwbmKqdDsyI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>New Ruby on Rails application and Static pages - CreatorPlatform.xyz - Part 2</video:title>
      <video:description>We'll set up a new Ruby on Rails 7 application in this video. We'll create a StaticPages controller for handling requests to our root route. Finally, we'll create and migrate the database. 

00:00 Introduction
01:02 Create StaticPages controller
01:48 Set up routes
02:54 Start the server
03:13 Create and migrate the database
03:54 Conclusion

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev

#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MwbmKqdDsyI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/introduction-to-the-creatorplatform-xyz-tutorial-what-we-ll-build-part-1</loc>
    <lastmod>2026-03-04T20:13:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/uuHtuR2FFS4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Introduction to the CreatorPlatform.xyz tutorial - What we'll build - Part 1</video:title>
      <video:description>Introduction to the CreatorPlatform.xyz tutorial. You'll see the functionality of the application that we'll build. I'll show you all the pieces and how it works today and give you a sense of the entire application.

00:00 Introduction
00:40 Landing page
00:57 Registration and onboarding
02:59 Create products
04:23 Manage a store
06:48 Manage customers
07:46 Create cardholders and issue cards
09:23 Deployment 

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6IJfBrIRx3a2SBkAL4vUp2p 
Code: https://github.com/cjavdev/creators.dev/ 
Follow me on Twitter: http://twitter.com/cjav_dev


#rubyonrails #ruby #rails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=uuHtuR2FFS4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-04-saas-customer-onboarding</loc>
    <lastmod>2023-01-30T22:52:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/0ypLs0tLeGQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 04 - SaaS Customer onboarding</video:title>
      <video:description>In this episode, you'll learn how to onboard customers to your SaaS application so that you can collect recurring payments from them using Subscriptions later.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Resources
Written version https://dev.to/stripe/user-registration-for-saas-businesses-with-a-bonus-3hli
Working with Customers https://stripe.com/docs/billing/customer


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=0ypLs0tLeGQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-03-price-testing-with-lookup-keys</loc>
    <lastmod>2023-01-30T22:52:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-shbqtjrRM0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 03 - Price testing with Lookup Keys</video:title>
      <video:description>In this episode, you'll learn how to use lookup keys and transfer lookup key to test different prices for your SaaS business without needing to deploy any new code. Lookup keys are a lesser known high leverage feature of the Stripe API. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources
Lookup Keys https://stripe.com/docs/products-prices/manage-prices#lookup-keys
Price lookup_key API reference https://stripe.com/docs/api/prices/update#update_price-lookup_key
Price transfer_lookup_key API reference https://stripe.com/docs/api/prices/update#update_price-transfer_lookup_key



### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-shbqtjrRM0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-begin-and-end-blocks</loc>
    <lastmod>2026-03-04T20:13:24Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/y4JsGfFgBeI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby BEGIN and END blocks</video:title>
      <video:description>How to use ruby's BEGIN and END.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=y4JsGfFgBeI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-02-modeling-your-saas-business-with-products-and-prices</loc>
    <lastmod>2023-01-30T22:52:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/1RwPB3sqzKc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 02 - Modeling your SaaS business with Products and Prices</video:title>
      <video:description>In this episode, you’ll learn how to model your business with Products and Prices to get the most out of your Stripe integration.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
00:30 Products and prices overview
02:57 Set up Stripe Tax
03:30 Adding a product in the dashboard
04:30 Adding multiple prices to a single product
05:05 Upsells
06:15 Offering good-better-best subscription levels
07:15 Currency pricing
08:30 Conclusion
08:51 Stripe CLI fixtures command



### Resources
Written version of this content: https://dev.to/stripe/modeling-your-saas-business-with-products-and-prices-59e0
Business modeling documentation: https://stripe.com/docs/products-prices/pricing-models
Stripe CLI fixtures code: https://gist.github.com/cjavilla-stripe/fdafc2666e634742b4fec2db03b34e72


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=1RwPB3sqzKc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-fundamentals-01-a-primer-for-collecting-recurring-payments-with-stripe</loc>
    <lastmod>2023-01-30T22:52:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/9PHoQ6VD5E8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS Fundamentals 01 - A primer for collecting recurring payments with Stripe</video:title>
      <video:description>In this episode, you'll learn the high level process of setting up recurring payments using the Stripe API. We'll define some terms and prepare for the series of videos walking through all the steps and best practices for setting up subscriptions.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Table of contents
00:00 Introduction
00:40 Simple web application walkthrough
01:40 Integration options and complexity
02:05 The customer object and payment methods  
02:40 Products
03:20 Subscriptions


### Resources
Written version of this content: https://dev.to/stripe/a-primer-for-collecting-recurring-payments-with-stripe-4mik
Overview of Subscriptions https://stripe.com/docs/billing/subscriptions/overview 


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88

#payments #stripe #saas</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=9PHoQ6VD5E8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/what-does-a-ruby-program-look-like</loc>
    <lastmod>2026-03-04T20:13:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/smwAQsqAiKM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>What does a ruby program look like?</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=smwAQsqAiKM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-script-using-inkscape-to-convert-several-svg-to-png</loc>
    <lastmod>2026-03-04T20:13:19Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/oi-5MFGsMIM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby script using inkscape to convert several svg to png</video:title>
      <video:description>Ruby script using inkscape to convert several svg to png

Code: https://gist.github.com/cjavdev/5990cfa28ff9b0ea0b81a61854fa0c40</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=oi-5MFGsMIM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-loops-while-until-loop-for</loc>
    <lastmod>2026-03-04T20:13:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/LD1WXSKq2kE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby loops - while, until, loop, for</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=LD1WXSKq2kE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-extending-rails-with-engines</loc>
    <lastmod>2026-03-04T20:13:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5NxbmRVKuC0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Extending Rails with Engines</video:title>
      <video:description>Quite often, developers need to include some additional functionality to their application frameworks to improve code usability and their own productivity.

In this live session, Chris Oliver returns to join Cecil and CJ to talk about how Ruby on Rails developers can use Engines to extend the functionality of their applications.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5NxbmRVKuC0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-extending-rails-with-engines-cdf4edc1-97a6-47f7-aed3-afd4dac6b0c2</loc>
    <lastmod>2023-01-30T22:52:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zlgY4MYz6Hg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Extending Rails with Engines</video:title>
      <video:description>Quite often, developers need to include some additional functionality to their application frameworks to improve code usability and their own productivity.

In this live session, Chris Oliver returns to join Cecil and CJ to talk about how Ruby on Rails developers can use Engines to extend the functionality of their applications.

#ruby #rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zlgY4MYz6Hg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/timelapse-of-drawing-explainer</loc>
    <lastmod>2026-03-04T20:13:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/rluVWvGv-TY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Timelapse of drawing explainer</video:title>
      <video:description>Timelapse of drawing explainer</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=rluVWvGv-TY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/what-are-ruby-gems-what-is-rubygems</loc>
    <lastmod>2026-03-04T20:13:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_rfvVelKeM0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>What are ruby gems? What is rubygems?</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_rfvVelKeM0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/usage-based-metered-billing-with-ruby-on-rails-and-stripe</loc>
    <lastmod>2026-03-04T20:13:22Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/v8cN4pEofy8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Usage based metered billing with Ruby on Rails and Stripe</video:title>
      <video:description>In this video, you'll learn how to use Stripe Checkout to start a Subscription that includes a flat monthly rate plus a small fee based on usage. We'll also look at how to create UsageRecords with the Stripe API to report usage over time.


00:00:00 Introduction
00:02:16 Create the pricing page with Tailwind UI
00:06:50 Create the Checkout Session and redirect
00:11:55 Install the Stripe gem
00:13:07 Redirect back after authenticating with devise
00:16:55 Create and store a Stripe Customer on the current user
00:21:46 Store Subscription data in the db
00:24:20 Handle Stripe webhook events
00:34:53 Handle customer.subscription.created event
00:51:13 Report UsageRecords for the metered Subscription
01:01:51 Create a metered Stripe price with divide by transform
01:11:52 Conclusion

#rails #rubyonrails #webhook</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=v8cN4pEofy8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/is-ruby-on-rails-a-programming-language</loc>
    <lastmod>2026-03-04T20:13:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/oCIbbvkFgXI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Is Ruby on Rails a programming language?</video:title>
      <video:description>What is Ruby on Rails? Is Ruby on Rails a programming language?


No! Ruby is a programming language, Ruby on Rails is a web framework built with ruby. 

#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=oCIbbvkFgXI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/is-ruby-on-rails-dead</loc>
    <lastmod>2026-03-04T20:13:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ReaGyottWgM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Is Ruby on Rails dead?</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ReaGyottWgM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/overview-of-stripe-treasury</loc>
    <lastmod>2023-01-30T22:52:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2MiMFJ9c4t8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Overview of Stripe Treasury</video:title>
      <video:description>In this livestream, we'll walk through an example Stripe Treasury application that shows how to work with Financial Accounts, Balances, and moving money.

Code: https://github.com/stripe-samples/treasury-nextjs 



#Stripe #Payments #Treasury</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2MiMFJ9c4t8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/youtube-api-webhooks-pubsubhubbub-a-k-a-websub-with-rails</loc>
    <lastmod>2026-03-04T20:13:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/QQSJGS2JR4w/hqdefault.jpg</video:thumbnail_loc>
      <video:title>YouTube API webhooks - PubSubHubbub a.k.a. WebSub with Rails</video:title>
      <video:description>In this episode, you'll learn how to handle webhooks from the YouTube Data API using PubSubHubbub or WebSub with Ruby on Rails.

h/t to Sunday Club's live stream here: https://www.youtube.com/watch?v=CyTjGWLyUqA 

## Table of contents

00:00 Introduction
01:23 Generate a new Webhooks controller
02:53 Start ngrok tunnel
04:05 Verify PubSubHubbub callback URL
06:51 Handle atom notification
08:14 Create a background job to handle notification
13:46 Conclusion

#rails #rubyonrails #webhook
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=QQSJGS2JR4w</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saas-in-a-tweet-payment-links-and-the-no-code-customer-portal-beta</loc>
    <lastmod>2023-01-30T22:52:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/gA2Fla6mvWQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SaaS in a Tweet - Payment Links and the no-code customer portal beta</video:title>
      <video:description>In this episode, you'll learn how to set up a Payment Link and the new no-code customer portal (beta) to build a SaaS with no-code. With only these two links that fit in a Tweet, you can build a working recurring SaaS business. Please email us if you would like to participate in the beta program for the no-code portal: customer-portal-beta@stripe.com. 


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Table of contents

00:00 Create a Product with Prices
01:42 Create a Payment Link
03:10 Configure the customer portal
05:04 Deploy SaaS app to Twitter (with a Tweet!)
05:50 Conclusion


### Resources
Payment Links: https://stripe.com/docs/payments/payment-links
Integrating the customer portal with code: https://stripe.com/docs/billing/subscriptions/integrating-customer-portal
No-code customer portal beta email: customer-portal-beta@stripe.com


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=gA2Fla6mvWQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/import-dev-to-articles-to-orbit-with-ruby</loc>
    <lastmod>2026-03-04T20:13:26Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/R_gknmGj9wM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Import dev.to articles to Orbit with Ruby</video:title>
      <video:description>Code: https://gist.github.com/cjavdev/64108e6aa25673255487fd4b20563e7d</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=R_gknmGj9wM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/multi-tenant-auth-with-auth0-organizations-and-rails</loc>
    <lastmod>2026-03-04T20:13:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/w8yf9DISpZQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Multi tenant auth with Auth0 organizations and Rails</video:title>
      <video:description>Code: https://github.com/cjavdev/auth0-demo
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=w8yf9DISpZQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/introducing-the-embeddable-pricing-table-for-saas-businesses</loc>
    <lastmod>2023-01-30T22:52:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tY8fVEoPHIc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Introducing the embeddable pricing table for SaaS businesses</video:title>
      <video:description>In this episode, you'll learn about the brand new embeddable pricing table. Now you can configure a pricing page directly from the Stripe Dashboard, copy a snippet and paste it into any site that supports HTML embeds. Building a SaaS app has never been easier. We'll look at a few no-code and low-code examples, then dive deeper to see a full integration with a ruby on rails application.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Table of contents
00:53 Review and update Products and Prices
01:12 Update feature list for Product
02:33 Create a pricing table
05:50 Copy embeddable widget into codepen, bubble, and typedream
07:33 Integrate the pricing table with Rails
09:33 Associate pricing table with current user using client-reference-id
11:17 Review webhook automations
13:37 Integrate the customer portal
17:30 Conclusion


### Resources
Pricing table: https://stripe.com/docs/payments/checkout/pricing-table
Integrating the customer portal: https://stripe.com/docs/billing/subscriptions/integrating-customer-portal 
Code: https://github.com/cjavilla-stripe/saas-rails-pricing-table/blob/main/app/views/pricings/show.html.erb


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tY8fVEoPHIc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/subdomain-routing-in-rails</loc>
    <lastmod>2026-03-04T20:13:28Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/T1pSiWOf0O4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Subdomain routing in Rails</video:title>
      <video:description>Code:https://github.com/cjavdev/auth0-demo 

Pre-cursor to setting up multi-tenant auth with auth0.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=T1pSiWOf0O4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/login-with-auth0-and-rails</loc>
    <lastmod>2026-03-04T20:13:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/4OJpI7ZObQc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Login with Auth0 and Rails</video:title>
      <video:description>Code: https://github.com/cjavdev/auth0-demo
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=4OJpI7ZObQc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/building-a-saas-app-with-no-code-using-bubble-and-stripe</loc>
    <lastmod>2023-01-30T22:52:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/SmXgjpW5MTQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Building a SaaS app with no-code using Bubble and Stripe</video:title>
      <video:description>In this live event, you'll learn from Ben from Stripe and TJ from Bubble about how to build a subscription software-as-a-service (SaaS) business with Bubble's no-code tools and Stripe.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=SmXgjpW5MTQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-collecting-payments-in-ruby-on-rails-with-pay</loc>
    <lastmod>2023-01-30T22:52:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/aVJq2G19zh0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Collecting payments in Ruby on Rails with Pay</video:title>
      <video:description>In this live session, Chris Oliver joins Cecil and CJ to talk about his open source project called Pay. It's a payments engine for Ruby on Rails applications that makes it easy to integrate with various payment providers.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=aVJq2G19zh0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/getting-started-with-django-for-rails-devs-tailwind-auth</loc>
    <lastmod>2026-03-04T20:13:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MNSUNGt-jnw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Getting started with Django for Rails devs - tailwind + auth</video:title>
      <video:description>Getting started with Django for Rails devs - tailwind + auth
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MNSUNGt-jnw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/subscribe-to-our-twitter-bookmarks-app</loc>
    <lastmod>2026-03-04T20:13:28Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bn9bSN7NvBo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Subscribe to our Twitter Bookmarks App</video:title>
      <video:description>Adding pay rails gem to our Twitter app so that we can collect payment for our Twitter Bookmarks application.

Code: https://github.com/cjavdev/bookmarks-search-rails
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bn9bSN7NvBo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ui-for-our-twitter-bookmarks-with-rails</loc>
    <lastmod>2026-03-04T20:13:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kMhs6TIJuOw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>UI for our Twitter Bookmarks with Rails</video:title>
      <video:description>In this episode, we'll build a simple UI for our Twitter bookmarks manager. We'll use Tailwind UI and handle some interesting data structure reorganization.

Code: https://github.com/cjavdev/bookmarks-search-rails
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kMhs6TIJuOw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/fetching-twitter-bookmarks-with-ruby</loc>
    <lastmod>2026-03-04T20:13:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kK-EWp9oRoY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Fetching Twitter Bookmarks with Ruby</video:title>
      <video:description>In this episode, we'll create a Twitter client for the V2 API and add methods for fetching our users' bookmarks. 

Code: https://github.com/cjavdev/bookmarks-search-rails
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kK-EWp9oRoY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/twitter-authentication-oauth-2-with-omniauth-and-rails</loc>
    <lastmod>2026-03-04T20:13:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kgGFM4BdVSM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Twitter Authentication OAuth 2 with omniauth and Rails</video:title>
      <video:description>Learn how to authenticate users to the new v2 Twitter API using omniauth and the omniauth-twitter2 provider in a Ruby on Rails application.

Code: https://github.com/cjavdev/bookmarks-search-rails
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kgGFM4BdVSM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/continuation-of-remix-stripe-demo-for-accepting-custom-amounts</loc>
    <lastmod>2026-03-04T20:13:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/TwWrG7lYneY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Continuation of Remix + Stripe demo for accepting custom amounts</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=TwWrG7lYneY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/sinatra-activerecord</loc>
    <lastmod>2026-03-04T20:13:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MgEgTu6NnWg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Sinatra + ActiveRecord</video:title>
      <video:description>Quick run through of wiring up Sinatra with ActiveRecord.

Code: https://github.com/cjavdev/sinatra-active-record</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MgEgTu6NnWg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-payment-with-affirm</loc>
    <lastmod>2023-01-30T22:52:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/x1HIIp-0Ow4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept payment with Affirm</video:title>
      <video:description>In this episode, you'll learn how to accept an Affirm payment using Stripe.js. Enable your customers to buy-now-pay-later. The recommended integration for Affirm is with Stripe Checkout or the PaymentElement. In this episode, you'll learn how to directly integrate just with Stripe.js. 

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources
https://stripe.com/docs/payments/affirm
https://stripe.com/docs/payments/affirm/accept-a-payment
https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/affirm.js

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=x1HIIp-0Ow4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/handle-stripe-webhooks-with-remix</loc>
    <lastmod>2023-01-30T22:52:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bI389xU87JY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Handle Stripe webhooks with Remix</video:title>
      <video:description>In this episode, you'll learn how to set up a Remix action to handle Stripe webhooks. We'll show how to build and test with the Stripe CLI and also how to verify webhook signatures.
If you're curious about getting started with Remix and Stripe, watch our other video about accepting payments in a Remix app: https://youtu.be/5aI0hJX_XXM


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of Contents
00:00 Introduction
00:35 Adding webhooks route
01:40 Configure the Stripe CLI to listen for webhooks
02:00 Creating the payment intent
03:24 Securing your endpoint with a signing secret
07:25 Testing the payment flow
08:11 Conclusion

### Resources

Remix: https://remix.run/
Stripe webhooks: https://stripe.com/docs/webhooks/signatures
Code: https://gist.github.com/cjavilla-stripe/241682c549292bc21165744401d38793
Remix resource routes: https://remix.run/docs/en/v1/guides/resource-routes 

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bI389xU87JY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-a-remix-application</loc>
    <lastmod>2023-01-30T22:52:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5aI0hJX_XXM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with a Remix application</video:title>
      <video:description>In this video, you'll learn how to add a custom form to a Remix application to accept a one time payment with react-stripe-js. We'll start from npx create-remix and show how to set environment variables for your Stripe API keys, how to configure the Elements provider, and ultimately the PaymentElement in order to accept a one-time payment.We'll use remix loaders to make server side API calls to Stripe, and the react-stripe-js components to render Elements.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
00:23 Installing Remix and getting an app running
01:36 Installing libraries
02:20 Configure routes
04:00 Configure elements
05:21 Configure an outlet
07:04 Rendering a payment form with the Form component
20:25 Conclusion


### Resources
Remix: https://remix.run/
Stripe webhooks: https://stripe.com/docs/webhooks/signatures 
Code: https://github.com/cjavilla-stripe/remix-stripe-sample
Remix resource routes: https://remix.run/docs/en/v1/guides/resource-routes 

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5aI0hJX_XXM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-to-add-link-for-faster-checkout-with-stripe</loc>
    <lastmod>2023-01-30T22:52:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/LYRJzu5t3CA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How to add Link for faster checkout with Stripe</video:title>
      <video:description>In this episode, you'll learn how to accept payments with the Link payment method in the US. Link is a reusable payment method with immediate notification. Using Link, you can offer a frictionless checkout experience to every new customer. Customers have Link accounts where they store their billing information (email, addresses, and so on) and payment details (cards, bank accounts, and so on).

When a customer visits a new business that accepts Link, they only need to authenticate using an SMS code. Link with Stripe is the new solution that we recommend instead of the legacy "remember me" feature.

Link is now out of beta and available publicly in some regions.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources
Documentation: https://stripe.com/docs/payments/payment-methods/link/accept-a-payment 

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=LYRJzu5t3CA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/getting-started-with-link</loc>
    <lastmod>2023-01-30T22:52:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-ufvKuYAtSg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Getting started with Link</video:title>
      <video:description>Learn how to integrate Link into your payment flow with PaymentElement for faster checkout. We'll use an express.js backend and a react front end with an existing PaymentElement integration. You'll learn how to add the new LinkAuthenticationElement, and the ShippingAddressElement to smooth onboarding and increase conversions from your customers.

Link is a special payment method type that hooks into Elements using a new email authentication element that sends a one time pin to the customer's phone number. Once authenticated, Elements are populated with the customer's previously saved payment methods and addresses.


### Presenters

CJ Avilla - Developer Advocate at Stripe
Diana Chen - Link Product Marketing at Stripe

### Resources

Stripe: https://www.stripe.com
Link overview: https://stripe.com/docs/payments/link
Accept a payment with Link: https://stripe.com/docs/payments/link/accept-a-payment
Code: https://github.com/cjavilla-stripe/link-in-payment-element
Quick start video: https://www.youtube.com/watch?v=LYRJzu5t3CA 

### Table of contents

01:05 What is Link?
04:58 Enable Link payment method type
07:10 Passing beta headers on the server
08:37 Understanding payment method types
10:45 Passing beta headers on the client
13:27 Install authentication element
17:00 Does link persist across Stripe Accounts?
17:41 Install shipping address element
19:45 Pre-fill email address
21:40 Handle email address change events
23:37 Handle shipping address changes
28:13 Merchant domain cookies
41:30 Customer saved data
42:50 Conclusion


### Support

If you have a question, please feel free to reach out to our support team at support.stripe.com or on Discord at stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: go.stripe.global/dev-digest 

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-ufvKuYAtSg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/an-introduction-to-stripe-billing</loc>
    <lastmod>2023-01-30T22:52:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Omg2e7kbEdo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>An Introduction to Stripe Billing</video:title>
      <video:description>Create and manage subscriptions, recurring payments, and recurring revenue with the Stripe Billing APIs.

Developers can use our composable API to get started quickly or design customized subscription logic and pricing models.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Omg2e7kbEdo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dev-chats-going-serverless-with-deno-and-begin</loc>
    <lastmod>2023-01-30T22:52:24Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GbAe7SOa0UI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dev Chats - Going serverless with Deno and Begin</video:title>
      <video:description>Begin (https://begin/com) allows developers to effortlessly ship Apps &amp; APIs to AWS. In this live session, we'll have Brian LeRoux and Simon MacDonald hanging out with us live to show off how we can build serverless applications with Deno and Begin.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GbAe7SOa0UI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/create-cardholders-and-issue-cards-with-stripe-issuing</loc>
    <lastmod>2023-01-30T22:52:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/V__ZkQRKqZI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Create cardholders and issue cards with Stripe Issuing</video:title>
      <video:description>Stripe Issuing lets you to create, manage, and distribute virtual and physical cards programmatically. You can create set spending limits, control expenses, set allowed business type, designate virtual cards for one-time or multiple uses.

In this episode, Stripe developer advocate CJ Avilla, demonstrates how easy it is to create a new cardholder and issue them a card.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
00:35 Install the code template with the Stripe for VSCode extension
01:00 Create a cardholder routes
02:51 Using the Stripe CLI to retrieve the cardholder information
03:04 Create the card form
04:10 Create a server endpoint to issue a card
06:29 Recap



### Resources
Stripe Issuing: https://stripe.com/issuing
Issuing documentation: https://stripe.com/docs/issuing
Stripe for VS Code extension: https://stripe.com/docs/stripe-vscode
Handling asynchronous payments with Stripe and VS Code: https://youtu.be/X9e7-LhZBYc
Developer Office hours sample: https://github.com/stripe-archive/developer-office-hours
Node.js Express Starter: https://youtu.be/rPR2aJ6XnAc
Expand with stripe-node: https://youtu.be/3-erqAmS8Ak


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=V__ZkQRKqZI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/us-bank-account-debits-with-ach</loc>
    <lastmod>2023-01-30T22:52:22Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/wng0mPMISjM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>US bank account debits with ACH</video:title>
      <video:description>In this livestream, you'll learn how the new ACH payment method works for debiting US bank accounts. We'll talk about all the ways to accept ACH payments including Invoicing, Payment Links, Checkout, and the new Payment Element.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
Matthew Ling - Developer Advocate at Stripe - https://twitter.com/mattling_dev


### Table of contents
02:00 Introduction
07:40 Create a Payment Link with no-code
09:25 Enable ACH payment method
11:45 Start writing code
13:00 Create a PaymentIntent
15:40 Implement payment form
22:00 Enable automatic payment methods
23:50 Confirm the payment on form submit
28:00 Confirmation page
34:20 Microdeposit verification
43:17 Verification methods
45:33 Webhooks
56:40 Conclusion


### Resources
ACH announcement - https://youtu.be/Q9Muz8OEZYk 
Code on Replit - https://replit.com/@CJAvilla1/ach-us-bank-account-sinatra-sample 
Accept a payment Stripe Sample - https://github.com/stripe-samples/accept-a-payment
Accept a payment documentation - https://stripe.com/docs/payments/accept-a-payment
Webhooks - https://stripe.com/docs/videos/developer-foundations?video=webhook-helpers




### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=wng0mPMISjM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/testing-puts-output-with-rspec-error-handling-snippets</loc>
    <lastmod>2026-03-04T20:13:34Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/SbbjTc3gCHI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Testing puts output with RSpec, error handling snippets</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=SbbjTc3gCHI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/livestream-remix-stacks-saas-billing-with-stripe-checkout-and-customer-portal</loc>
    <lastmod>2026-03-04T20:13:34Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5d80Q8r5-zE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[Livestream] Remix stacks SaaS billing with Stripe Checkout and Customer portal</video:title>
      <video:description>Playing with Remix and Stripe billing.

Code: https://github.com/cjavilla-stripe/remix-saas 
Remix Stacks: https://remix.run/docs/en/v1/pages/stacks</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5d80Q8r5-zE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/guest-identity-verification-with-stripe-identity-clearbnb-part-23</loc>
    <lastmod>2026-03-04T20:13:36Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/4I-Jc46dW9I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Guest identity verification with Stripe Identity - clearbnb - Part 23</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=4I-Jc46dW9I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/live-working-on-stripe-samples-open-source-for-stripe-connect</loc>
    <lastmod>2026-03-04T20:13:35Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7gcxUFQppXk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[live] working on Stripe Samples open source for Stripe Connect</video:title>
      <video:description>This episode is a live stream where we're working on some Stripe Samples for Stripe Connect, a product for building marketplaces and platforms.

Code for this episode: https://github.com/stripe-samples/connect-direct-charge-checkout/pull/11</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=7gcxUFQppXk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/send-sms-text-message-notifications-with-noticed-and-twilio-clearbnb-part-22</loc>
    <lastmod>2026-03-04T20:13:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ilRzBf3bAng/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Send SMS Text message notifications with noticed and Twilio - clearbnb - Part 22</video:title>
      <video:description>In this episode, you'll learn how to set up Twilio with the noticed gem to send text messages.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ilRzBf3bAng</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/simplified-invoice-creation</loc>
    <lastmod>2023-01-30T22:52:24Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/awpcfRROb3A/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Simplified invoice creation</video:title>
      <video:description>In this episode, you'll see a new parameter in the invoicing API that allows you to create draft invoices and attach invoice items. This is a new and much-requested invoicing flow. Download the notebook and follow along.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
00:50 Setting up the notebook
02:40 Configure invoice parameters
04:20 Create invoice items
06:32 Finalize invoice
07:52 Conclusion


### Resources
Code for this episode: https://gist.github.com/cjavilla-stripe/0c11afd766807906ce791dacf196fb12
Pending invoice items API reference: https://stripe.com/docs/api/invoices/create#create_invoice-pending_invoice_items_behavior
Invoicing docs: https://stripe.com/docs/invoicing


### Support
If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=awpcfRROb3A</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/two-way-messaging-with-email-clearbnb-part-21</loc>
    <lastmod>2026-03-04T20:13:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/E3XKa3Pto44/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Two-way messaging with email - clearbnb - part 21</video:title>
      <video:description>In this episode, we'll create a Message object to pass messages between guest and host, using a noticed notification to send an email.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=E3XKa3Pto44</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/reservation-booked-notifications-with-noticed-clearbnb-part-20</loc>
    <lastmod>2026-03-04T20:13:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/CGW0ttDW0r8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Reservation booked notifications with noticed - clearbnb - Part 20</video:title>
      <video:description>We'll use the noticed gem to send emails when we receive the webhook confirmation of a booking.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=CGW0ttDW0r8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/reservation-list-advanced-activerecord-new-tailwindui-tables-clearbnb-part-19</loc>
    <lastmod>2026-03-04T20:13:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/M3XcP5O3IGM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Reservation list, advanced ActiveRecord, new TailwindUI Tables - clearbnb - Part 19</video:title>
      <video:description>In this episode, you'll learn about some more advanced active record associations, see a few of the new TailwindUI tables, and we'll wire up a new host/reservations controller.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=M3XcP5O3IGM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/listing-location-pin-markers-to-google-map-with-stimulus-js-clearbnb-part-18</loc>
    <lastmod>2026-03-04T20:13:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/lNRLQih8a-c/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Listing location pin markers to google map with stimulus js - clearbnb - Part 18</video:title>
      <video:description>In this episode, you'll see how to add pins to a google map using a stimulus.js controller. We embed the lat/lng with data-attributes, then create markers for those listings on a new google map.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=lNRLQih8a-c</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-elements-appearance-api-basics</loc>
    <lastmod>2023-01-30T22:52:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/hzWo7J5t_Wc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Elements Appearance API basics</video:title>
      <video:description>In this episode, you'll learn the basics for working with the Appearance API to style the PaymentElement. You can pick a theme, then customize specific variables, and ultimately define custom rules to design your Payment Element to match your brand.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
02:08 Apply a theme
06:45 Apply rules
08:03 Form input configuration options
08:45 Conclusion


### Resources
Elements Appearance API https://stripe.com/docs/stripe-js/appearance-api


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
Attachments

Options
Drop files to attach, or browse.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=hzWo7J5t_Wc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pagination-with-pagy-clearbnb-part-17</loc>
    <lastmod>2026-03-04T20:13:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/0RtYhDIKmBY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Pagination with pagy - clearbnb - Part 17</video:title>
      <video:description>In this short episode, we'll install the pagy gem and use it to paginate the list of listings.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=0RtYhDIKmBY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/affiliate-marketing-with-payment-links</loc>
    <lastmod>2023-01-30T22:52:26Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ytRkVL1Dm50/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Affiliate marketing with Payment Links</video:title>
      <video:description>### Description
In this episode, you'll learn how to use the Payment Links API with Stripe Connect to build an affiliate marketing tool. We'll show how you can pay out affiliates a portion of the proceeds when they help you make a sale.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
00:51 Creating a new affiliate user
03:09 Affiliate onboarding flow walkthrough
04:57 Creating affiliate links
11:13 Payment Links API
17:10 Conclusion


### Resources
Stripe Connect onboarding documentation - https://stripe.com/docs/connect/express-accounts
Payment Links documentation - https://stripe.com/docs/payments/payment-links/api
Payment Links API reference - https://stripe.com/docs/api/payment_links/payment_links/create



### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ytRkVL1Dm50</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/checkout-and-customer-portal-with-node-js-express-and-sendgrid-on-repl-it</loc>
    <lastmod>2026-03-04T20:13:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/4R_ABkeBIOU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Checkout and Customer Portal with Node.js express and SendGrid on Repl.it</video:title>
      <video:description>Learn how to setup the Stripe Customer portal with magic link email authentication. 

sendgrid: https://docs.sendgrid.com/for-developers/sending-email/quickstart-nodejs 
code: https://replit.com/@CJAvilla/checkout-customer-portal-node</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=4R_ABkeBIOU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/fixing-google-maps-address-autocomplete-bug-with-stimulus</loc>
    <lastmod>2026-03-04T20:13:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2oHdSy_fhWw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Fixing Google maps address autocomplete bug with stimulus</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2oHdSy_fhWw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/avoid-double-bookings-with-checkout-session-expiration-clearbnb-part-16</loc>
    <lastmod>2026-03-04T20:13:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/WIYJtzIGYh0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Avoid double bookings with Checkout Session expiration - clearbnb - part 16</video:title>
      <video:description>In this episode, we'll talk about ways to avoid _some_ double bookings with the Checkout Session expiration feature.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=WIYJtzIGYh0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/calendar-events-improved-booking-clearbnb-part-15</loc>
    <lastmod>2026-03-04T20:13:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/VFVSgnL1nmE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Calendar events, improved booking - clearbnb - part 15</video:title>
      <video:description>In this episode, we'll talk briefly about delegation and use the validates_overlap gem to create valid booking ranges as CalendarEvents. 

https://github.com/robinbortlik/validates_overlap
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=VFVSgnL1nmE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/test-subscription-lifecycles-with-test-clocks</loc>
    <lastmod>2023-01-30T22:52:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/0GsVXfDPavg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Test subscription lifecycles with test clocks</video:title>
      <video:description>In this episode, you'll learn how to move objects through time in test mode.

Test clocks make it easier to test your Billing integration and make sure it behaves as designed. When you use test clocks you simulate the forward movement of time in test mode, which causes resources, like Subscriptions, to change state and trigger webhook events. This means that, e.g., you don’t have to wait a year to see how your integration handles a payment failure for a quarterly or annual renewal.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources
API Reference: https://stripe.com/docs/api/test_clocks 
Documentation: https://stripe.com/docs/billing/testing/test-clocks 

### Table of contents
00:00 Introduction
00:58 Create a new test clock
01:46 Attach the test clock to a customer
03:05 Create a subscription
03:58 Advance a subscription in time
06:02 Test a future subscription cancellation
06:24 Delete a test clock
06:41 Recap


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=0GsVXfDPavg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stimulus-js-tailwindui-menu-applicationhelper-clearbnb-part-14</loc>
    <lastmod>2026-03-04T20:13:41Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/wE-G_J3ezos/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stimulus.js TailwindUI menu; ApplicationHelper - clearbnb - Part 14</video:title>
      <video:description>In this episode, we'll improve the styling of our application shell. We'll show active states for navigation and use a new npm module called el-transition to add nice interactions to the Tailwind UI menu.

00:30 ApplicationHelper navigation items
09:51 Stimulus.js TailwindUI menu with el-transition

el-transition: https://www.npmjs.com/package/el-transition 
dev.to https://dev.to/mmccall10/tailwind-enter-leave-transition-effects-with-stimulus-js-5hl7
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=wE-G_J3ezos</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-connect-onboarding-to-pay-hosts-clearbnb-part-13</loc>
    <lastmod>2026-03-04T20:13:41Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/UhDCZa2p5jE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Connect onboarding to pay hosts - clearbnb - Part 13</video:title>
      <video:description>Stripe Connect onboarding to pay hosts - clearbnb - Part 13
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=UhDCZa2p5jE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/inject-lambda-stream-processing-advent-of-code-2021-day-16-with-ruby</loc>
    <lastmod>2026-03-04T20:13:42Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/EGQM3QMXSSk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>inject, lambda, stream processing - Advent of Code 2021 - Day 16 with Ruby</video:title>
      <video:description>inject, lambda, stream processing - Advent of Code 2021 - Day 16 with Ruby

https://www.tiktok.com/@meals_by_cug/video/7017126832948399365</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=EGQM3QMXSSk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/hash-minmax-polymer-expansion-advent-of-code-2021-day-14-with-ruby</loc>
    <lastmod>2026-03-04T20:13:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/sXJieqAoL8w/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Hash[], minmax, polymer expansion - Advent of Code 2021 - Day 14 with Ruby</video:title>
      <video:description>Another puzzle that requires some data structure changes to make it fast enough to get an answer.

00:20 Part 1
11:20 Hash[]
12:47 minmax
14:14 Part 2</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=sXJieqAoL8w</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/hash-new-tally-one-tap-path-finding-advent-of-code-2021-day-12-with-ruby</loc>
    <lastmod>2026-03-04T20:13:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_spUSatNdbs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Hash.new, tally, one?, tap, path finding - Advent of Code 2021 - Day 12 with Ruby</video:title>
      <video:description>Hash.new, tally, one?, tap, path finding - Advent of Code 2021 - Day 12 with Ruby

06:23 Hash.new tricks
08:34 find_paths
17:00 Part 2
18:00 tally!
20:45 tap</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_spUSatNdbs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/heredocs-select-with-index-paper-folding-advent-of-code-2021-day-13-with-ruby</loc>
    <lastmod>2026-03-04T20:13:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/AaePCMNgyMY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>heredocs, select with index, paper folding - Advent of Code 2021 - Day 13 with Ruby</video:title>
      <video:description>heredocs, select with index - Advent of Code 2021 - Day 13 with Ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=AaePCMNgyMY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/methods-with-block-arguments-advent-of-code-2021-day-11-with-ruby</loc>
    <lastmod>2026-03-04T20:13:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/o_9uhOhMKtQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>methods with block arguments - Advent of Code 2021 - Day 11 with Ruby</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=o_9uhOhMKtQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-webhooks-with-deno</loc>
    <lastmod>2023-01-30T22:52:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/pA1YD4adP9I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe webhooks with Deno</video:title>
      <video:description>Part two of how to handle webhooks using `stripe-node` in a Deno application. We recommend starting with the part one (https://youtu.be/epCHqHEdz8I).

In this episode, CJ walks you through handling webhooks using `stripe-node` in a Deno application.

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 

### Table of contents
00:00 Introduction
01:00 Configuring your server
03:18 Webhook signing secret
03:47 CryptoProvider
04:43 Testing the endpoint
06:39 Conclusion

 
### Resources

Standing up Deno and installing `stripe-node`: https://youtu.be/epCHqHEdz8I
stripe-node: https://github.com/stripe/stripe-node
Deno: https://deno.land/


 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=pA1YD4adP9I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/constants-enumerable-brackets-advent-of-code-2021-day-10-with-ruby</loc>
    <lastmod>2026-03-04T20:13:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/DlCXlbVfQn8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>constants, enumerable, brackets - Advent of Code 2021 - Day 10 with Ruby</video:title>
      <video:description>constants, enumerable, brackets - Advent of Code 2021 - Day 10 with Ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=DlCXlbVfQn8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/operator-overloading-let-heightmap-advent-of-code-2021-day-9-with-ruby</loc>
    <lastmod>2026-03-04T20:13:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GWJln-NMw74/hqdefault.jpg</video:thumbnail_loc>
      <video:title>operator overloading, let, heightmap - Advent of Code 2021 - Day 9 with Ruby</video:title>
      <video:description>Fixnum#between?, operator overloading, let, heightmap - Advent of Code 2021 - Day 9 with Ruby

00:00 Part 1
06:45 Fixnum#between? Check to see if a value is between two numbers
10:34 Operator overloading 
12:40 using `let` with RSpec
19:00 Part 2</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GWJln-NMw74</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pattern-matching-sets-seven-segment-display-advent-of-code-2021-day-8-with-ruby</loc>
    <lastmod>2026-03-04T20:13:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/k4zSyiAwWiI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>pattern matching, Sets, seven segment display - Advent of Code 2021 - Day 8 with Ruby</video:title>
      <video:description>pattern matching, Sets, seven segment display - Advent of Code 2021 - Day 8 with Ruby

In this episode, we implement seven segment display decoding using Ruby's newish pattern matching feature. We'll also use the Set data structure. This was one of the more challenging exercises for me and I'm excited to show you a fun solution. 

00:00 Part 1
13:00 Part 2</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=k4zSyiAwWiI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/using-stripe-node-with-deno</loc>
    <lastmod>2023-01-30T22:52:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/epCHqHEdz8I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Using stripe-node with Deno</video:title>
      <video:description>Learn how to interact with the Stripe API from a Deno application using `stripe-node`.


### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev


### Table of contents
00:00 Introduction
00:21 The evolving server-side Javascript ecosystem
00:37 Changes to stripe-node 
00:57 Installing Deno
01:22 Creating the server.js file and getting the webserver started
02:50 Adding Stripe to the Deno server
03:20 Creating a Checkout session
04:40 Recap
05:11 Conclusion

 
### Resources
stripe-node: https://github.com/stripe/stripe-node
Deno: https://deno.land/


 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=epCHqHEdz8I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/float-infinity-brute-force-align-the-crabs-advent-of-code-2021-day-7-with-ruby</loc>
    <lastmod>2026-03-04T20:13:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/C--Oj5uoFHQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Float::INFINITY, brute force align the crabs - Advent of Code 2021 - Day 7 with Ruby</video:title>
      <video:description>Float::INFINITY, brute force align the crabs - Advent of Code 2021 - Day 7 with Ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=C--Oj5uoFHQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/building-avilla-s-hot-cocoa-stand-with-google-sites</loc>
    <lastmod>2026-03-04T20:13:47Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/106YF_me_U8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Building Avilla's Hot Cocoa Stand with Google Sites</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=106YF_me_U8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/data-structure-performance-array-vs-hash-advent-of-code-day-6-with-ruby</loc>
    <lastmod>2026-03-04T20:13:46Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MjMx6bym4mE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Data structure performance Array vs. Hash - Advent of Code - Day 6 with Ruby</video:title>
      <video:description>Data structure performance Array vs. Hash - Advent of Code - Day 6 with Ruby

In this episode, we'll look at a slow but easy to reason about solution to Day 6, then increase performance by switching to a different data structure -- Hash.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MjMx6bym4mE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/array-destructuring-operator-overload-vents-advent-of-code-day-5-with-ruby</loc>
    <lastmod>2026-03-04T20:13:46Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/pZC0Bgf-UNc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>array destructuring, operator overload, vents - Advent of Code - Day 5 with Ruby</video:title>
      <video:description>array destructuring, operator overload, vents - Advent of Code - Day 5 with Ruby

00:30 Part 1
11:20 Array destructuring
15:28 Operator overloading
22:40 Part 2</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=pZC0Bgf-UNc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/transpose-flatten-described_class-bingo-solver-advent-of-code-2021-day-4-with-ruby</loc>
    <lastmod>2026-03-04T20:13:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/JeMIC7tYxFY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>transpose, flatten, described_class, bingo solver! - Advent of Code 2021 - Day 4 with Ruby</video:title>
      <video:description>transpose, flatten, described_class, bingo solver! - Advent of Code 2021 - Day 4 with Ruby

00:00 Part 1
22:00 Part 2</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=JeMIC7tYxFY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/binary-and-bit-fiddling-xor-array-median-advent-of-code-2021-day-3-in-ruby</loc>
    <lastmod>2026-03-04T20:13:48Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/jATwcZI_hHU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>binary and bit fiddling, xor, Array#median - Advent of Code 2021 - Day 3 in ruby</video:title>
      <video:description>binary and bit fiddling, xor, Array#median - Advent of Code - Day 3 in ruby

00:30 Part 1
08:07 Using Fixnum#[] to access the bit value at an index
10:23 Numbered block argument
15:36 XOR exclusive or to flip bits
20:30 Part 2
24:30 Array#median monkey patch to find middle element</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=jATwcZI_hHU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dsl-instance_eval-eval-advent-of-code-day-2-with-ruby</loc>
    <lastmod>2026-03-04T20:13:47Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/O-68TZhjp4Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>DSL instance_eval, eval - Advent of Code - Day 2 with ruby</video:title>
      <video:description>DSL instance_eval, eval - Advent of Code - Day 2 with ruby

01:00 Part 1 - Submarine
07:12 Use instance_eval to define a domain specific language for submarines
11:21 Use eval to process commands as DSL methods
11:53 Part 2 - Aiming Submarine</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=O-68TZhjp4Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/each_cons-inject-and-file-readlines-advent-of-code-2021-day-1-with-ruby</loc>
    <lastmod>2026-03-04T20:13:49Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/u1MwWSN_tQI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>each_cons, inject, and File.readlines - Advent of Code 2021 - Day 1 with ruby</video:title>
      <video:description>each_cons, inject, and File.readlines - Advent of Code 2021 - Day 1 with ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=u1MwWSN_tQI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/refunding-cancelled-reservations-clearbnb-part-12</loc>
    <lastmod>2026-03-04T20:13:47Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/nto4vXDqMOg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Refunding cancelled reservations - clearbnb - Part 12</video:title>
      <video:description>Refunding cancelled reservations - clearbnb - Part 12
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=nto4vXDqMOg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/update-reservations-to-booked-handle-refunds-clearbnb-part-11</loc>
    <lastmod>2026-03-04T20:13:48Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/xR6H4sYJuWQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Update reservations to booked, handle refunds - clearbnb - Part 11</video:title>
      <video:description>Update reservations to booked, handle refunds - clearbnb - Part 11
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=xR6H4sYJuWQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/trying-github-copilot-in-neovim</loc>
    <lastmod>2026-03-04T20:13:48Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/lAYSPU2swAg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Trying GitHub Copilot in neovim</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=lAYSPU2swAg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/setup-stripe-create-stripe-customers-and-products-clearbnb-part-10</loc>
    <lastmod>2026-03-04T20:13:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/yxv0q2_t1so/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Setup Stripe, create Stripe Customers and Products - clearbnb - Part 10</video:title>
      <video:description>Setup Stripe, create Stripe Customers and Products - clearbnb - Part 10
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=yxv0q2_t1so</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/listing-photo-uploads-database-seeding-and-more-clearbnb-part-09</loc>
    <lastmod>2026-03-04T20:13:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/9rDuCaTreJA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Listing photo uploads, database seeding, and more! - clearbnb - Part 09</video:title>
      <video:description>Listing photo uploads with active storage, database seeding using seed.rb, and more! - clearbnb - Part 09
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=9rDuCaTreJA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/active-record-scopes-cleanup-and-select-boxes-with-enum-clearbnb-part-8</loc>
    <lastmod>2026-03-04T20:13:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_fBpethNY2I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Active record scopes, cleanup, and select boxes with enum - clearbnb - Part 8</video:title>
      <video:description>Active record scopes, cleanup, and select boxes with enum - clearbnb - Part 8
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_fBpethNY2I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/enable-payment-methods-with-checkout</loc>
    <lastmod>2023-01-30T22:52:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/wWKHN4RgpUI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Enable payment methods with Checkout</video:title>
      <video:description>Learn how to quickly deploy new payment methods with zero code changes to your Stripe Checkout integration.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents
00:00 Introduction
00:20 Migrate payment methods to the Stripe dashboard
00:41 Manage payment methods on the Stripe dashboard
01:17 Conclusion
 
### Resources

Checkout: https://stripe.com/docs/payments/checkout
Migrate payment methods to the dashboard: https://stripe.com/docs/payments/dashboard-payment-methods
Documentation: https://stripe.com/docs/payments/payment-element

 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest/
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=wWKHN4RgpUI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/livestream-building-a-sand-pile-visualization-with-p5-js</loc>
    <lastmod>2026-03-04T20:13:51Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/iJ_dbJlj42A/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[Livestream] building a sand pile visualization with p5.js</video:title>
      <video:description>https://editor.p5js.org/cjavilla/sketches/T5vvy8w93</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=iJ_dbJlj42A</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/livestream-hacking-on-some-open-source-projects</loc>
    <lastmod>2026-03-04T20:13:51Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Omp02YME-Js/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[Livestream] hacking on some open source projects</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Omp02YME-Js</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/partition-destructured-assignment-and-quicksort-in-ruby</loc>
    <lastmod>2026-03-04T20:13:51Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/6vc7jSJEJDU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>partition, destructured assignment, and quicksort! in ruby</video:title>
      <video:description>partition, destructured assignment, and quicksort! in ruby

Partition docs: https://apidock.com/ruby/v2_5_5/Enumerable/partition
Best HTTP client article: https://www.scrapingbee.com/blog/best-ruby-http-clients/
Random quicksort visualization: https://visualgo.net/en/sorting
Starwars API: https://swapi.dev/
Faraday docs: https://lostisland.github.io/faraday/usage/

Follow https://twitter.com/collin_jilbert</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=6vc7jSJEJDU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripedev-live-stripe-for-vs-code-and-vs-code-extensions</loc>
    <lastmod>2023-01-30T22:52:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/JOLMyJGvsAI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>StripeDev Live – Stripe for VS Code and VS Code Extensions</video:title>
      <video:description>StripeDev Live - Stripe for VS Code and VS Code Extensions 2021-11-18

Recording of the StripeDev Live event on Visual Studio Code extensions and the Stripe for VS Code extension, including the Stripe for Visual Studio Code extension. 

Want to join the next one live? Join the official Stripe Discord server here: https://stripe.com/go/developer-chat

### Presenters
Isidor Nikolic - Software Engineer at Microsoft, Visual Studio Code - https://twitter.com/IsidorN
Brian Holt – Software Engineer at Stripe, Developer Experience Product Manager – https://twitter.com/holtbt
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources
Stripe Developers Discord: https://stripe.com/go/developer-chat
Stripe Dev Live chat: https://discord.com/channels/841573134531821608/898275283445108806
Stripe for VS Code: https://marketplace.visualstudio.com/items?itemName=Stripe.vscode-stripe
Stripe for VS Code docs: https://stripe.com/docs/stripe-vscode


### Table of contents
00:00 Introduction
04:25 Dogfooding VS Code
07:04 Opening 2000 issues
09:10 Does VS Code in the browser use fewer resources than the client application
11:35 Removing the Java dependency in Stripe for VS Code
12:48 Publishing new extensions
13:45 Favorite Stripe for VS Code features
14:25 Common hurdles for extension developers
17:17 VS Code extension samples
20:34 Stripe for VS Code snippets feature
23:30 The future of Atom at Microsoft
24:23 What future developments in editors are you most excited about?
27:09 What extensions do you keep always-enabled?
34:50 C# and VS Code vs Visual Studio
38:04 LSP and building on protocols
39:50 Favorite VS Code themes
42:00 Upcoming VS Code features
46:00 Conclusion


### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=JOLMyJGvsAI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/implement-stripe-identity-with-a-redirect</loc>
    <lastmod>2023-01-30T22:52:42Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ny2AIFM15x4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Implement Stripe Identity with a redirect</video:title>
      <video:description>Learn how to build a Stripe Identity integration using the redirect implementation. 

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Table of contents
00:00 Introduction
00:16 Prerequisites 
00:46 Redirect-based flow overview
00:58 client instructions
01:18 server instructions
02:26 Starting your server
02:38 Test the demo
03:19 Pass a return URL option
03:36 Conclusion
 
### Resources
Stripe Checkout: https://stripe.com/identity
Documentation: https://stripe.com/docs/identity/verify-identity-documents?platform=web&amp;type=redirect

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ny2AIFM15x4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/class-variables-vs-class-instance-variables-in-ruby</loc>
    <lastmod>2026-03-04T20:13:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Cf_4edpFMko/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Class variables vs class instance variables in Ruby</video:title>
      <video:description>Class variables vs class instance variables in Ruby.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Cf_4edpFMko</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/payment-element</loc>
    <lastmod>2023-01-30T22:52:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Vvxl9HFI0eQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Payment Element</video:title>
      <video:description>Join us for this month's Stripe Developer Office hours where you'll learn all about the brand new Payment Element.


Rhodesia by Twin Musicom is licensed under a Creative Commons Attribution 4.0 license. https://creativecommons.org/licenses/by/4.0/

Artist: http://www.twinmusicom.org/
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Vvxl9HFI0eQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/upgrading-a-rails-6-1-application-to-rails-7-clearbnb-part-7</loc>
    <lastmod>2026-03-04T20:13:52Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tmw2ULIMbA8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Upgrading a Rails 6.1 application to Rails 7 - clearbnb - Part 7</video:title>
      <video:description>For part 7, let's upgrade to... Rails 7!
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tmw2ULIMbA8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/implement-stripe-identity-with-a-modal</loc>
    <lastmod>2023-01-30T22:52:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/gm8-73JEN5o/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Implement Stripe Identity with a modal</video:title>
      <video:description>Learn how to build a Stripe Identity integration using the modal implementation. 

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Table of contents
00:00 Introduction
00:14 Prerequisites
00:34 Four ways to implement identity
00:57 Add stripe.js and a modal button
01:22 Create verification session
02:32 Set up modal button
03:26 Test the demo
03:54 Conclusion
 
### Resources
Stripe Checkout: https://stripe.com/identity
Documentation: https://stripe.com/docs/identity/verify-identity-documents?platform=web&amp;type=modal

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=gm8-73JEN5o</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/set-up-future-payments-with-checkout</loc>
    <lastmod>2023-01-30T22:52:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/S1WJuhGkY88/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Set up future payments with Checkout</video:title>
      <video:description>Learn how to collect payment details using Checkout's setup mode, which stores the payment method on file for future payments using the Setup Intents API.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Table of contents
00:00 Introduction
00:36 Add a checkout button
00:42 Add an endpoint to your server and a session with setup mode
01:23 Create customer object
01:54 Retrieve the session object and setup intent
03:20 Use the payment method to create a payment intent
03:54 Alternate flow
04:48 Recap
 
### Resources
Stripe Checkout: https://stripe.com/payments/checkout
Documentation: https://stripe.com/docs/payments/save-and-reuse
API reference: https://stripe.com/docs/api/setup_intents
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=S1WJuhGkY88</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/nested-forms-with-stimulus-js-clearbnb-part-6</loc>
    <lastmod>2026-03-04T20:13:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/60XAwdpHS_o/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Nested forms with Stimulus.js - clearbnb - Part 6</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=60XAwdpHS_o</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-to-fix-tax_behavior-missing-for-prices-error</loc>
    <lastmod>2023-01-30T22:52:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KfaqrxEO8Y4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How to fix tax_behavior missing for prices error</video:title>
      <video:description>Learn how to fix the exception: "one or more provided prices do not have a `tax_behavior` set which is required for automatic tax computation." 

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Table of contents
00:00 Introduction
00:13 What causes the exception
00:42 How to fix a single price in the Stripe Dashboard
01:19 How to update `tax_behavior` with the Stripe CLI
03:35 Conclusion
 
 
### Resources
Stripe Tax: https://stripe.com/tax
Documentation: https://stripe.com/docs/tax
Tax behavior: https://stripe.com/docs/tax/products-prices-tax-codes-tax-behavior#tax-behavior

 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KfaqrxEO8Y4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/adding-tailwindui-clearbnb-part-5</loc>
    <lastmod>2026-03-04T20:13:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/DqaDPoLa53I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Adding TailwindUI - clearbnb - Part 5</video:title>
      <video:description>Adding TailwindUI - clearbnb - Part 5
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=DqaDPoLa53I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/getting-started-with-the-search-api-beta</loc>
    <lastmod>2023-01-30T22:53:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GAL0RnRYK1Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Getting started with the Search API beta</video:title>
      <video:description>Learn how to use the new Search API and query language to search for activity and customers in your Stripe account. Now available in beta.

Email search-api@stripe.com with your Stripe account ID to get started with the Search API beta.


### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 

### Table of contents
00:00 Introduction
00:17 Find a customer from the Stripe Dashboard
01:00 Beta import statement specifics
01:41 Finding a customer with the existing list endpoint
04:12 Finding a customer with the new search endpoint
06:43 Finding payments with the new search endpoint
08:04 Conclusion
 
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GAL0RnRYK1Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/autocomplete-address-with-google-places-and-stimulus-clearbnb-part-4</loc>
    <lastmod>2026-03-04T20:13:52Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Zj15TCNtxKE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Autocomplete address with Google Places and Stimulus - clearbnb - Part 4</video:title>
      <video:description>In this episode, we'll work more on the Listing create form by adding support for address autocomplete with the Google Places API. We'll talk about some stimulus.js basics and wire up a stimulus controller to handle the place completed event. 

Inspiration for the loaded event from Chris Oliver's episode here: https://www.youtube.com/watch?v=odziYrbiphA 

stimulus-rails https://github.com/hotwired/stimulus-rails 

Places autocomplete docs https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform#maps_places_autocomplete_addressform-javascript
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Zj15TCNtxKE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/edit-a-payment-link-from-the-stripe-dashboard</loc>
    <lastmod>2023-01-30T22:53:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/lbs0VY_NFQI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Edit a payment link from the Stripe Dashboard</video:title>
      <video:description>You've got a payment link but want to customize it. Learn how to quickly change and customize an existing payment link in the Stripe Dashboard.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
Payment Links: https://stripe.com/payments/payment-links
Documentation: https://stripe.com/docs/payments/payment-links
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=lbs0VY_NFQI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/create-read-update-delete-listings-clearbnb-part-3</loc>
    <lastmod>2026-03-04T20:13:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ho2crbMzSUs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Create, read, update, delete Listings - clearbnb - Part 3</video:title>
      <video:description>In this episode, we'll break ground on our Rails application and cover the 7 fundamental controller actions for CRUD (create, read, update, delete).
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ho2crbMzSUs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/create-customize-and-send-stripe-invoices</loc>
    <lastmod>2023-01-30T22:53:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/y1g2z4hNAqI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Create, customize, and send Stripe invoices</video:title>
      <video:description>Learn how to create, customize, and send a Stripe invoice from the Stripe Dashboard. 

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Table of contents
00:00 Introduction
00:12 Create an invoice from the Stripe Dashboard
00:30 Create a one-time item
01:19 Customize payment options
01:50 Review the invoice
02:54 Conclusion
 
 
### Resources
Invoicing: https://stripe.com/invoicing
Documentation: https://stripe.com/docs/invoicing

 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=y1g2z4hNAqI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/google-oauth-with-devise-and-omniauth-clearbnb-part-2</loc>
    <lastmod>2026-03-04T20:13:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Lut1C6CHDCE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Google OAuth with Devise and Omniauth - clearbnb - Part 2</video:title>
      <video:description>In this episode, we'll bump our way through setting up Devise with the omniauthable module to support Google OAuth authentication for our clearbnb ruby on rails application.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Lut1C6CHDCE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/project-planning-clearbnb-part-1</loc>
    <lastmod>2026-03-04T20:13:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/z_IYMv5m46w/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Project planning - clearbnb - Part 1</video:title>
      <video:description>This is the first of a series of episodes where we'll build a platform for short term vacation rentals called clearbnb.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=z_IYMv5m46w</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/create-a-payment-link-from-the-stripe-dashboard</loc>
    <lastmod>2023-01-30T22:53:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/RXuPWuI7JXE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Create a payment link from the Stripe Dashboard</video:title>
      <video:description>Learn how to create, customize, and share a Stripe Payment Link from the Stripe Dashboard. Create a full payment page, with promotion codes, customer-selectable quantity, custom shipping options, and a custom confirmation page. It takes just a few clicks and you can share the link with your customers — a no code option for users wanting to get started quickly.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Table of contents
00:00 Introduction
00:11 Create a payment link from the Stripe Dashboard
00:45 Custom shipping locations
00:54 Customize your confirmation page
01:42 Check your payment link in the browser
02:00 Conclusion
 
### Resources
 Payment Links: https://stripe.com/payments/payment-links
 Documentation: https://stripe.com/docs/payments/payment-links
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=RXuPWuI7JXE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/developer-office-hours-search-api-beta</loc>
    <lastmod>2023-01-30T22:53:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/rMpXRTFpsgY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Developer office hours: Search API beta</video:title>
      <video:description>If you are interested in participating in the Search API beta, please reach out: search-api@stripe.com with your email address and account ID. 

01:00 Developer updates
07:10 Search API demo

Join Charles and CJ to get a sneak peek of the brand new Search API beta and get your questions answered live.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=rMpXRTFpsgY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/payment-links-vs-invoices</loc>
    <lastmod>2023-01-30T22:53:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/64dWeELtA5k/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Payment Links vs Invoices</video:title>
      <video:description>You want to start collecting one-time payments but you're not ready to code yet. Do you create a hosted invoice or a Payment Link? Learn the difference between Stripe invoicing and Stripe Payment Links and which is best for your use case.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents

00:00 Introduction
00:32 Your use case
00:44 Specific customer vs specific product
01:15 Reusability
01:46 Custom payment flows with the Invoicing API
02:39 Stripe Connect support
02:47 Fulfillment
03:00 Conclusion

### Resources
Create and share a payment link: https://stripe.com/docs/payments/payment-links
How invoicing works: https://stripe.com/docs/invoicing/overview

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=64dWeELtA5k</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/upload-a-product-catalog</loc>
    <lastmod>2023-01-30T22:53:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2_-6QpARFqc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Upload a product catalog</video:title>
      <video:description>Learn how to upload a JSON object and create a product catalog in Stripe.

### Presenter
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Table of contents
00:00 Introduction
00:57 Product object API reference
02:08 Price object API reference
02:56 Read in and map JSON
07:22 Create price object
08:22 Executing the script
 
### Resources

Code: https://gist.github.com/cjavilla-stripe/d11ede0383bad23cc329cc2588a3f975 
Product API ref: https://stripe.com/docs/api/products
Price API ref: https://stripe.com/docs/api/prices
Documentation: https://stripe.com/docs/invoicing/products-prices
 
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2_-6QpARFqc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/playing-with-map-data-from-zillow-and-the-google-maps-api</loc>
    <lastmod>2026-03-04T20:13:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/YltdJFlm_Xs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Playing with map data from Zillow and the Google Maps API</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=YltdJFlm_Xs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/has-many-through-associations-in-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/YsgyM0qOt1U/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Has many through associations in Ruby on Rails</video:title>
      <video:description>In this episode we'll talk about how to use has many through associations with a join table instead of a has and belongs to many association. 

Inspired by this question on Reddit: https://www.reddit.com/r/rails/comments/pn6mgm/help_figuring_out_associations/.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=YsgyM0qOt1U</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/connect-4-game-with-react-and-next-js</loc>
    <lastmod>2026-03-04T20:13:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/CjQv3VNt0HU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Connect 4 game with React and Next.js</video:title>
      <video:description>Connect four game with React and Next.js</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=CjQv3VNt0HU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/turbo-streams-tic-tac-toe</loc>
    <lastmod>2026-03-04T20:13:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Zxs8tKIOKU4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Turbo Streams Tic Tac Toe</video:title>
      <video:description>Implementing a multi player tic tac toe game with turbo streams and ruby on rails. #LearnInPublic 

https://github.com/cjavdev/turbo-streams-tic-tac-toe
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Zxs8tKIOKU4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/realtime-partial-page-updates-with-turbo-streams</loc>
    <lastmod>2026-03-04T20:13:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZB4YnzxMxkE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Realtime partial page updates with Turbo Streams</video:title>
      <video:description>In this episode, you'll see how to setup and install turbo-rails to create partial page updates with Turbo streams in your Ruby on Rails applications. We'll broadcast updates to blog posts, and broadcast appends to our list of comments.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ZB4YnzxMxkE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/receive-and-process-inbound-email-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/jOfAV2QWNOw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Receive and process inbound email with Ruby on Rails</video:title>
      <video:description>In this episode you'll learn the pieces for setting up inbound email processing so you can receive emails with your Ruby on Rails applications. We'll setup action mailbox and route an inbound email that is meant to be a reply to a comment.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=jOfAV2QWNOw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/send-emails-when-receiving-a-comment-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Y4-qcXdhPvY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Send emails when receiving a comment - Ruby on Rails</video:title>
      <video:description>In this episode, we'll send an email to a post or comment author when a new comment is added to their original content.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Y4-qcXdhPvY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/polymorphic-associations-with-ruby-on-rails-like-all-the-things</loc>
    <lastmod>2026-03-04T20:13:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5EidzTqsw-E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Polymorphic associations with Ruby on Rails - like all the things</video:title>
      <video:description>In this episode, you'll learn how to migrate from a one to many association to a polymorphic association. Imagine you've implemented a like button for a blog post. You're tracking whether a user has liked a post or not using a Like model related directly to the post. Now you want to also support "liking" other objects: comments, images, friends, etc. In this episode, you'll see how to modify the database to support these polymorphic associations between a Like model and any other "likeable" model.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5EidzTqsw-E</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/like-button-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bD--WOyQkug/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Like button with Ruby on Rails</video:title>
      <video:description>In this episode, you'll learn how to add a simple like button with Ruby on Rails. We'll show how to like and unlike a post, how to use button_to or a raw form, and validate that a user can't like a post twice.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bD--WOyQkug</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/nested-comments-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/mtIBFvWZuwI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Nested Comments with Ruby on Rails</video:title>
      <video:description>In this episode, we'll improve our comment system to allow users to reply to existing comments in a thread.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=mtIBFvWZuwI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/performance-basics-n-1-and-memoization-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/FInC_2qV3mc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Performance basics: N+1 and memoization with Ruby on Rails</video:title>
      <video:description>In this episode, we'll address two of the lowest hanging fruit performance issues you'll encounter when developing a Rails application: N+1 queries and basic caching with memoization.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=FInC_2qV3mc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/add-comments-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/TcltF0KVyrE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Add Comments with Ruby on Rails</video:title>
      <video:description>In this episode you'll learn how to add basic "flat" comments to a blog post. In future episodes, we'll show how to improve performance and nest comments replies.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=TcltF0KVyrE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-the-stripe-postman-collection</loc>
    <lastmod>2023-01-30T22:53:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZFJ_z8v35e8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with the Stripe Postman collection</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the Stripe Postman collection. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

Dawn Lambeth - Developer Advocate at Stripe - https://twitter.com/dawnlambeth

### Resources

Documentation: https://stripe.com/docs/api/authentication
Postman collection: https://www.postman.com/stripedev/workspace/stripe-developers/overview

### Table of contents

00:00 Overview
00:18 Authorization header
00:28 Types of API keys
00:58 Publishable keys
01:10 Secret keys
01:54 Restricted keys
02:23 Webhook signing secrets
03:43 Roll API keys
04:20 Set API key environment variable in Postman
04:50 Fork the environment template
06:05 Set API key globally 
06:58 Set API key per-request
08:04 Authenticate requests for Stripe Connect per-request
08:42 Authenticate requests for Stripe Connect globally
10:44 Conclusion

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or on Discord: https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ZFJ_z8v35e8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-the-stripe-postman-collection</loc>
    <lastmod>2023-01-30T22:53:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5SzRdPuZVR0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with the Stripe Postman collection</video:title>
      <video:description>Learn about making requests to the Stripe API using the Stripe Postman collection. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

Dawn Lambeth - Developer Advocate at Stripe - https://twitter.com/dawnlambeth

### Resources

Documentation: https://stripe.com/docs/api
Postman collection: https://www.postman.com/stripedev/workspace/stripe-developers/overview

### Table of contents

00:00 Overview 
00:35 Sending data to Stripe
01:36 Create an object with no params
02:21 Retrieve an object
03:13 Create an object passing scalar values
04:34 Create an object passing enum values
05:28 Errors with invalid params
07:20 Update an object
09:00 Retrieve a list of objects
09:48 Delete an object
10:27 Calling action endpoints like confirming a payment intent
12:44 Conclusion

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or on Discord: https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5SzRdPuZVR0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/crud-basics-with-current_user</loc>
    <lastmod>2026-03-04T20:14:00Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8hfQbkw4snc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>CRUD basics with current_user</video:title>
      <video:description>In this episode, you'll learn how to work with a current user object to create and work with objects related to the current user.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8hfQbkw4snc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-basics-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:13:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MGNc6qCZBmE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication basics with Ruby on Rails</video:title>
      <video:description>In this episode, you'll see how to implement a simple email and password authentication system from scratch. We'll talk about how auth works, but in practice, you should use a gem like devise or another well tested, (ideally open source) tool for authentication. This is only to see how some of the pieces of authentication work. 

To see how to install Devise, checkout this other video: https://youtu.be/zl6iJLlmUog.

Code for the episode: https://github.com/cjavdev/blog-demo
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MGNc6qCZBmE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/rails-scaffold-deepdive</loc>
    <lastmod>2026-03-04T20:14:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/j7Qh-wIo5Zc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Rails scaffold deepdive</video:title>
      <video:description>Learn all about what you get when generating a scaffold with Ruby on Rails. This covers many Rails conventions that follow the happy path and are often sensible defaults.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=j7Qh-wIo5Zc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/asynchronous-javascript-3-of-3-async-await</loc>
    <lastmod>2026-03-04T20:14:00Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/do2neAvj8hQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Asynchronous JavaScript 3 of 3: async / await</video:title>
      <video:description>In this last episode of the three part mini-series, you'll learn about the async and await keywords and how to use those when working with promises.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=do2neAvj8hQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/asynchronous-javascript-2-of-3-javascript-promises</loc>
    <lastmod>2026-03-04T20:14:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/YDL4yvbEb50/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Asynchronous JavaScript 2 of 3: JavaScript Promises</video:title>
      <video:description>This is the second of three episodes in a mini series about working with asynchronous javascript. You'll learn about how to create your own promises and how to work with browser and library APIs that return promises.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=YDL4yvbEb50</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/asynchronous-javascript-1-of-3-settimeout-setinterval-clearinterval</loc>
    <lastmod>2026-03-04T20:14:02Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Fku_cRb6odc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Asynchronous JavaScript 1 of 3: setTimeout, setInterval, clearInterval</video:title>
      <video:description>This is the first episode in a set of 3 where we'll talk about how JavaScript runs asynchronously. In this episode, we'll use setTimeout and setInterval to build some timers with some olympics inspired mini tasks.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Fku_cRb6odc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-an-fpx-payment-with-react</loc>
    <lastmod>2023-01-30T22:53:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Est1hCRY97I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept an FPX payment with React</video:title>
      <video:description>In this episode, you'll learn how to confirm an FPX payment with the react-stripe-js library in a create-react-app based React application.
 
### Table of contents
 
00:00 Introduction to FPX
01:01 Verify server is running
02:27 Implement the FPX payment form
03:38 Create the payment intent
04:57 Confirm the payment intent
05:56 Test the demo
06:30 Implement the thank you page
08:36 Recap
 
### Server implementations
 
Ruby - https://www.youtube.com/watch?v=079khYtqWPo
Python - https://www.youtube.com/watch?v=3s4Dwox7oTQ
PHP - https://www.youtube.com/watch?v=BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4
Java - https://www.youtube.com/watch?v=-uyXCnPXegE
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo
 
### Other client implementations
 
Not using React?  Consider these other episodes that cover the same content in different front end implementations:
 
HTML and JavaScript - https://www.youtube.com/watch?v=CpPBUfPHA3I
 
### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/stripe-js/react
Official documentation: https://stripe.com/docs/payments/fpx/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/Fpx.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Est1hCRY97I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/some-vimrc-and-vimrc-bundles-config-tips-l</loc>
    <lastmod>2026-03-04T20:14:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tM2j_fssDuM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Some vimrc and vimrc.bundles config tips l</video:title>
      <video:description>You'll get a look at my vimrc and plugins I use with vim.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tM2j_fssDuM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-grabpay-payment-with-react</loc>
    <lastmod>2023-01-30T22:53:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/p35U_dAoJ7E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a GrabPay payment with React</video:title>
      <video:description>In this episode, you'll learn how to confirm a GrabPay payment with the react-stripe-js client library in a create-react-app based React application.
 
### Table of contents
 
00:00 Introduction
01:00 Verify server is running
02:20 Implement the GrabPay payment form
03:23 Create a payment intent
04:08 Confirm a payment intent
04:59 Test the demo
05:30 Implement the GrabPay return
06:58 Walk through GrabPay demo again
07:18 Recap
 
### Server implementations
 
Ruby - https://www.youtube.com/watch?v=079khYtqWPo
Python - https://www.youtube.com/watch?v=3s4Dwox7oTQ
PHP - https://www.youtube.com/watch?v=BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4
Java - https://www.youtube.com/watch?v=-uyXCnPXegE
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo
 
### Other client implementations
 
Not using React?  Consider these other episodes that cover the same content in different front end implementations:
 
HTML and JavaScript - https://www.youtube.com/watch?v=m3lueukOKto
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/stripe-js/react
Official documentation: https://stripe.com/docs/payments/grabpay/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/GrabPay.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=p35U_dAoJ7E</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-an-au-becs-direct-debit-payment-with-react</loc>
    <lastmod>2023-01-30T22:53:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/io2wrfFpGC8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept an AU Becs Direct Debit payment with React</video:title>
      <video:description>In this episode, you'll learn how to confirm an AU Becs Direct Debit payment with the react-stripe-js library in a create react app based application.
 
### Table of contents
 
00:00 Introduction
00:58 Verify server is running
02:34 Implement the BecsDebit payment form component
04:22  Create payment intent
05:52 Confirm payment intent
06:59 View the Becs Debit demo
07:48 Recap
 
### Server implementations
 
Ruby - https://www.youtube.com/watch?v=079khYtqWPo
Python - https://www.youtube.com/watch?v=3s4Dwox7oTQ
PHP - https://www.youtube.com/watch?v=BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4
Java - https://www.youtube.com/watch?v=-uyXCnPXegE
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo
 
### Other client implementations
 
Not using React?  Consider these other episodes that cover the same content in different front end implementations:
 
HTML and JavaScript - https://www.youtube.com/watch?v=IeGpu9JNvNU
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/stripe-js/react
Official documentation: https://stripe.com/docs/payments/au-becs-debit/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/BecsDebit.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=io2wrfFpGC8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/recursion-with-ruby-and-inline-rspec</loc>
    <lastmod>2026-03-04T20:14:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/SAfpPJkHRec/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Recursion with Ruby and inline rspec</video:title>
      <video:description>In this episode you'll learn all about recursion and see the implementation of fibonacci, factorial, and towers of hanoi. You'll also see how to write inline rspec tests in the same file you're experimenting with! You'll even get. alook at memoization / caching to speed up recursive calls.

Related video: https://www.youtube.com/watch?v=WPSeyjX1-4s</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=SAfpPJkHRec</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/working-with-yaml-and-converting-string-time-to-integer</loc>
    <lastmod>2026-03-04T20:14:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/XdYSwFewTsg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Working with YAML and converting string time to integer</video:title>
      <video:description>In this episode, we'll work a bit with a YAML file and convert a timestamp from a string to an integer number of seconds. We'll also play with some Ruby enumerable methods</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=XdYSwFewTsg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/end-to-end-testing-rails-with-capybara</loc>
    <lastmod>2026-03-04T20:14:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ggnGOBe2A3o/hqdefault.jpg</video:thumbnail_loc>
      <video:title>End to end testing Rails with capybara</video:title>
      <video:description>In this episode, you'll learn about how to setup capybara for end to end testing. We also cover how to login within the context of a test to access authenticated routes that are protected with devise.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ggnGOBe2A3o</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/rspec-request-specs-for-an-api-controller-with-rails</loc>
    <lastmod>2026-03-04T20:14:03Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/I9dz2w0bIGE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Rspec request specs for an API Controller with Rails</video:title>
      <video:description>In this episode, you'll learn a little about setting up a request spec with Rspec to test an API controller in a Ruby on Rails application
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=I9dz2w0bIGE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/download-heroku-postgres-database-to-use-locally</loc>
    <lastmod>2026-03-04T20:14:02Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/mMBeEReUd5w/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Download Heroku Postgres database to use locally</video:title>
      <video:description>It can be useful during development to have a dump of the production database. In this episode you’ll learn an approach to dumping a Postgres database and use that dump to restore your local pg database.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=mMBeEReUd5w</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stytch-user-sign-up-or-login-with-rails</loc>
    <lastmod>2026-03-04T20:14:02Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/T4rcmzAdp44/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stytch user sign up or login with Rails</video:title>
      <video:description>Playing around with the Stytch API
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=T4rcmzAdp44</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/getting-started-with-webmock-and-rspec-with-rails</loc>
    <lastmod>2026-03-04T20:14:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/WQjOB4sHXGQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Getting started with webmock and rspec with Rails</video:title>
      <video:description>In this episode, you'll learn how to use webmock to stub out HTTP requests to avoid traversing the network (slow!) in rspec tests.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=WQjOB4sHXGQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-grabpay-payment-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/m3lueukOKto/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a GrabPay payment with Stripe.js</video:title>
      <video:description>In this episode, you'll learn how to confirm a GrabPay payment with an HTML and JavaScript client using a custom form.
 
### Table of contents
 
00:00 Introduction
01:00 Confirm server is running
02:00 Create a payment intent
03:19 Confirm a payment intent
04:01 Test the demo
04:34 Refetch the payment on return
05:40 Recap
 
### Server implementations
 
Ruby - https://www.youtube.com/watch?v=079khYtqWPo
Python - https://www.youtube.com/watch?v=3s4Dwox7oTQ
PHP - https://www.youtube.com/watch?v=BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4
Java - https://www.youtube.com/watch?v=-uyXCnPXegE
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo
 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/js
Official documentation: https://stripe.com/docs/payments/grabpay/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/grabpay.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=m3lueukOKto</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/job-specs-for-rspec-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/cllR3jpQ0pc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Job specs for rspec with Ruby on Rails</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=cllR3jpQ0pc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/basic-rspec-ruby-on-rails-model-specs</loc>
    <lastmod>2026-03-04T20:14:06Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Spogv4o8haM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Basic rspec Ruby on Rails model specs</video:title>
      <video:description>In this episode you'll learn some basics for testing simple methods on Ruby on Rails models.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Spogv4o8haM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-au-becs-debit-payments-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:22Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/IeGpu9JNvNU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept AU Becs Debit payments with Stripe.js</video:title>
      <video:description>In this episode, you'll learn how to confirm an AU Becs Debit payment with an HTML and JavaScript client.
 
### Table of contents
 
00:00 Introduction
02:10 Implement the HTML payment form
03:47 Create a payment intent
04:26 Confirm a payment intent
05:15 Test the demo
06:12 Recap
 
### Server implementations
 
Ruby - https://www.youtube.com/watch?v=079khYtqWPo
Python - https://www.youtube.com/watch?v=3s4Dwox7oTQ
PHP - https://www.youtube.com/watch?v=BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4
Java - https://www.youtube.com/watch?v=-uyXCnPXegE
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/js
Official documentation: https://stripe.com/docs/payments/au-becs-debit/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/becs-debit.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=IeGpu9JNvNU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/install-factory-bot-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/vQQKIyAHPI4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Install Factory Bot with Ruby on Rails</video:title>
      <video:description>In this episode, you'll learn how to setup the factory_bot_rails gem and some basics about using factories with RSpec tests in a Ruby on Rails application.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=vQQKIyAHPI4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-fpx-payments-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:22Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/CpPBUfPHA3I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept FPX payments with Stripe.js</video:title>
      <video:description>In this episode, you'll learn how to confirm an FPX payment with HTML and JavaScript.
 
### Table of contents
 
00:00 Introduction
01:00 Confirm the server is running
01:42 Implement the HTML payment form
03:12 Create a payment intent
04:00 Confirm a payment intent
05:00 Test the demo
05:32 Implement a success page and display payment status
07:10 Recap
 
### Server implementations
 
Ruby - https://www.youtube.com/watch?v=079khYtqWPo
Python - https://www.youtube.com/watch?v=3s4Dwox7oTQ
PHP - https://www.youtube.com/watch?v=BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4
Java - https://www.youtube.com/watch?v=-uyXCnPXegE
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/js
Official documentation:  https://stripe.com/docs/payments/fpx/accept-a-payment 
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/fpx.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=CpPBUfPHA3I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/setup-rspec-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2jX-FLcznDE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Setup Rspec with Ruby on Rails</video:title>
      <video:description>In this episode you'll learn how to install and configure the rspec-rails gem for automated RSpec testing with Ruby on Rails.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2jX-FLcznDE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-array-transform-question-from-reddit</loc>
    <lastmod>2026-03-04T20:14:06Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/v6jYFGsEmZQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby array transform question from reddit</video:title>
      <video:description>https://www.reddit.com/r/rubyonrails/comments/oc96dt/hello_i_need_help_to_change_this_array_of_objects/

The question:
https://gist.github.com/cjavdev/7bafa99f8eb0517fd1711f1e870130db
 
A solution: https://replit.com/@CJAvilla/array-fun#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=v6jYFGsEmZQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/server-side-redirect-to-stripe-checkout</loc>
    <lastmod>2023-01-30T22:53:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/WSki6n502mk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Server side redirect to Stripe Checkout</video:title>
      <video:description>In this episode, we'll explore the many ways to redirect to the Stripe hosted Checkout page. First, we'll build the standard client-server Checkout flow where a Checkout Session is created server side, and use JavaScript to redirect on the client. Then, we'll refactor to use the brand new `url` property that is returned as part of the Checkout Session object to redirect server side. Finally, we'll show the simplest way to redirect to Checkout using a Payment Link.

### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official documentation: https://stripe.com/docs/payments/accept-a-payment?integration=checkout
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=WSki6n502mk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dependabot-on-github</loc>
    <lastmod>2026-03-04T20:14:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/TnBEVPUsuAw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>dependabot on GitHub</video:title>
      <video:description>How to setup dependabot to automatically open PRs for security issues and also for general library version updates.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=TnBEVPUsuAw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-blocks-procs-and-lambdas</loc>
    <lastmod>2026-03-04T20:14:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/SADF5diqAJk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby Blocks, Procs, and Lambdas 🦁🐅🐻</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=SADF5diqAJk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-boleto-payments-with-react</loc>
    <lastmod>2023-01-30T22:53:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/DTauCM4QlsY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept Boleto payments with React</video:title>
      <video:description>In this episode you'll learn how to confirm a Boleto PaymentIntent with a React client. Boleto is a popular and official voucher based payment method in Brazil. 

### Table of contents

00:00 Introduction
00:55 Verify the server is running
01:25 Code tour
02:23 Create the Boleto component
05:00 Handle form submission
05:23 Create a payment intent on the server
06:02 Confirm the payment intent on the client
07:39 Test the demo
09:47 Recap 

### Server implementations
 
Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/3s4Dwox7oTQ
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://youtu.be/BPfpPGl85tk
Java - https://youtu.be/BPfpPGl85tk
Go - https://youtu.be/BPfpPGl85tk
.NET - https://youtu.be/BPfpPGl85tk
 
### Other client implementations
 
Not using React?  Consider other episodes that cover the same content in different front end implementations:
 
HTML and JavaScript - https://youtu.be/0kng70cwW4E
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/js/payment_intents/confirm_boleto_payment
Official documentation: https://stripe.com/docs/payments/boleto/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/Boleto.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=DTauCM4QlsY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-boleto-payments-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/0kng70cwW4E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept Boleto payments with Stripe.js</video:title>
      <video:description>In this episode you'll learn how to confirm a Boleto PaymentIntent with Stripe.js. Boleto is a popular and official voucher based payment method in Brazil. 

### Table of contents

00:00 Introduction
01:12 Verify the server is running
01:43 Code tour
02:22 Build a payment form
03:16 Create boleto.js
03:41 Create a payment intent on the server
04:40 Confirm the payment intent on the client
06:03 Test the demo
07:53 Recap 

### Server implementations
 
Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/3s4Dwox7oTQ
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://youtu.be/BPfpPGl85tk
Java - https://youtu.be/BPfpPGl85tk
Go - https://youtu.be/BPfpPGl85tk
.NET - https://youtu.be/BPfpPGl85tk
 
### Other client implementations
 
Not using vanilla JavaScript?  Consider other episodes that cover the same content in different front end implementations:
 
React - https://youtu.be/DTauCM4QlsY
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://stripe.com/docs/js/payment_intents/confirm_boleto_payment
Official documentation: https://stripe.com/docs/payments/boleto/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/boleto.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=0kng70cwW4E</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-for-visual-studio-code</loc>
    <lastmod>2023-01-30T22:53:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/fATvgUMWLzU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe for Visual Studio Code</video:title>
      <video:description>Harness the power of the Stripe CLI directly inside your editor to build, test, and use Stripe inside your editor with the new Stripe for VS Code extension. Stripe’s extension for Visual Studio Code makes it easy to generate sample code, view API request logs, forward events to your application, and use Stripe within your editor. 


### Table of contents
 
00:00 Introduction
01:08 Install VS Code
01:30 Install the Stripe extension from the marketplace
01:51 Install the Stripe CLI
03:12 Clone a Stripe Sample
05:29 Stream webhook events
06:47 Stream logs
08:36 Forward webhook events 
11:08 Triggering events
11:46 Expand code snippets
12:18 API reference links
13:31 Quick links
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official documentation: https://stripe.com/docs/stripe-vscode
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=fATvgUMWLzU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/setting-up-active-storage-to-use-aws-s3-with-rails-on-heroku</loc>
    <lastmod>2026-03-04T20:14:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/y1Ks3ET0A40/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Setting up active storage to use AWS S3 with Rails on Heroku</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=y1Ks3ET0A40</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/record-your-screen-and-save-with-rails-active-storage</loc>
    <lastmod>2026-03-04T20:14:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/i_NEx7LwIAQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Record your screen and save with Rails active storage</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=i_NEx7LwIAQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-an-afterpay-clearpay-payment-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:26Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/p1qv9o63uPQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept an Afterpay / Clearpay payment with Stripe.js</video:title>
      <video:description>In this episode, you'll learn how to confirm an Afterpay / Clearpay payment with a React client. Afterpay / Clearpay is a payment method available through Stripe that enables your customers to buy now and pay later. 
 
### Table of contents
 
00:00 Introduction
01:20 Verify server endpoints
02:10 Implement a payment form with Afterpay / Clearpay
04:47 Create a payment intent
05:39 Confirm the payment intent
07:45 Test the demo
08:23 Implement the thank you page
10:15 Recap
 
### Server implementations
 
Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/3s4Dwox7oTQ
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://youtu.be/BPfpPGl85tk
Java - https://youtu.be/BPfpPGl85tk
Go - https://youtu.be/BPfpPGl85tk
.NET - https://youtu.be/BPfpPGl85tk
 
### Other client implementations
 
Not using vanilla JavaScript?  Consider these other episodes that cover the same content in different front end implementations:
 
React - https://youtu.be/GS91DCwn_Ek
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://github.com/stripe/react-stripe-js
Official documentation: https://stripe.com/docs/payments/afterpay-clearpay/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/afterpay-clearpay.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=p1qv9o63uPQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-an-afterpay-clearpay-payment-with-react</loc>
    <lastmod>2023-01-30T22:53:26Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GS91DCwn_Ek/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept an Afterpay / Clearpay payment with React</video:title>
      <video:description>In this episode, you'll learn how to confirm an Afterpay / Clearpay payment with a React client. Afterpay / Clearpay is a payment method available through Stripe that enables your customers to buy now and pay later. 
 
### Table of contents
 
00:00 Introduction
01:25 Verify server endpoints
02:48 Build the AfterpayClearpay component
06:00 Handle submission of the form 
06:18 Create a payment intent
07:44 Confirm the payment intent
09:08 Test the demo
09:30 Implement the thank you page
12:29 Test the demo again
13:11 Recap
 
### Server implementations
 
Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
PHP - https://www.youtube.com/watch?v=BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

 
### Other client implementations
 
Not using React?  Consider these other episodes that cover the same content in different front end implementations:
 
HTML and JavaScript - https://youtu.be/p1qv9o63uPQ
 
### Presenter
 
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official client library: https://github.com/stripe/react-stripe-js
Official documentation: https://stripe.com/docs/payments/afterpay-clearpay/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/AfterpayClearpay.js
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GS91DCwn_Ek</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-create-a-paymentintent-with-python</loc>
    <lastmod>2023-01-30T22:53:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/3s4Dwox7oTQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment - Create a PaymentIntent with Python</video:title>
      <video:description>Accepting a one-time payment with a custom form requires two steps. First, creating a PaymentIntent on the server. Second, confirming the payment intent on the client. It's also recommended that you handle fulfillment for a purchase when receiving a webhook notification of successful payment. 

In this video, you'll learn how to create a PaymentIntent on the server using Python and how to setup a basic Webhook handler. For part two of this series to confirm a PaymentIntent using a variety of payment methods, watch one of the videos in the playlists for front end frameworks:

HTML and JavaScript - https://www.youtube.com/playlist?list=PLy1nL-pvL2M7EUdqARPiayuj5cjGMLCvM
React - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6HFApWUDSGA4Y7btyKx7cE
iOS - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6yD1D72ceqqrW_1BqyN4It 
Android - https://www.youtube.com/playlist?list=PLy1nL-pvL2M4IvDG-DOFKi_UCEgQkHu3n

If you'd like to learn how to create a PaymentIntent on the server in another server side language, consider watching one of these episodes:

Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

### Resources

Code: https://github.com/stripe-samples/accept-a-payment/tree/main/custom-payment-flow
Documentation: https://stripe.com/docs/payments/payment-intents
How intents work: https://stripe.com/docs/payments/intents 
Playlist: https://www.youtube.com/playlist?list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a

### Table of contents

00:00 Overview
01:11 Setup the office hours sample
01:45 Add route to create-payment-intent
02:12 Create a basic PaymentIntent using the API with stripe-go
02:45 Test the endpoint with cURL
03:12 Accept payment method type and currency in request
04:57 Handle errors
05:48 Handle webhook notifications
08:23 Add a config route for fetching publishable keys
09:00 Recap and conclusion

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev 

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=3s4Dwox7oTQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-identity</loc>
    <lastmod>2023-01-30T22:53:26Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/mUgnRq9jC7s/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Identity</video:title>
      <video:description>Stripe Identity lets you programmatically confirm the identity of global users so you can prevent attacks from fraudsters while minimizing friction for legitimate customers. In this edition, you'll learn how to implement an Identity integration using Stripe.js to open the modal based verification flow.

### Table of contents
 
00:05 Introduction
00:55 Overview of identity verification
01:54 Common use-cases for Stripe Identity
03:28 What makes Stripe Identity special
04:56 Setup a small HTML client
06:41 Create a VerificationSession on the server
08:48 Initiate the identity verification flow
10:15 Handle verification session events
14:11 Recap
 
### Presenters
 
Iñigo Beitia Arevalo - Engineer on Stripe Identity - https://www.linkedin.com/in/ibeitia/
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev
 
### Resources
 
Official documentation: https://stripe.com/docs/identity
Code: https://github.com/stripe-samples/developer-office-hours/tree/master/2021-06-15-identity
 
### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.
 
### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest
 
### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=mUgnRq9jC7s</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/strava-api-from-javascript-with-11ty</loc>
    <lastmod>2026-03-04T20:14:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KXUxGUKtcbM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Strava API from JavaScript with 11ty</video:title>
      <video:description>In this episode, we review the Strava API, manually go through the OAuth flow to get an access token, then fetch activities from the API using JavaScript.

We also play with 11tys data pipeline, experiment with dates, and API pagination.



https://cjav.dev/squares/
API docs: https://developers.strava.com/</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KXUxGUKtcbM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/notion-api-with-ruby</loc>
    <lastmod>2026-03-04T20:14:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/oKPn_gg7jss/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Notion API with Ruby</video:title>
      <video:description>In this episode, we'll take a _first-look_ at the new Notion API for developers. We'll get onboarded and experiment with a ruby gem for working with the Notion API. As a small test, I created a Stripe Payment Link and piped in customer's sales into a Notion database. We also make a little PR to the notion-sdk-ruby client library on GitHub, which might be interesting if you're curious about getting into Open Source.

### Resources

https://github.com/mgmarlow/notion-sdk-ruby</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=oKPn_gg7jss</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/null-piece-refactoring-implement-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/NfDUpT2U3b0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Null Piece + refactoring - Implement Chess with Ruby for beginners</video:title>
      <video:description>In this series, you'll learn how to implement a simple terminal based Chess game with Ruby.

In this episode, we finally talk about the null object pattern and create a NullPiece object that is a singleton for representing the absence of a piece.

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=NfDUpT2U3b0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/check-and-checkmate-implementing-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/4tpxeDJTQqk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Check and checkmate - Implementing Chess with Ruby for beginners</video:title>
      <video:description>In this series you'll learn object oriented basics while building a simple terminal based Chess game with Ruby.

In this episode, we implement the logic to see if a player is in check or in checkmate.

Playlist: https://www.youtube.com/watch?v=Zc0ZuH3Qpxw&amp;list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=4tpxeDJTQqk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/game-play-logic-implement-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/a3MSZm6GfRQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Game play logic - Implement Chess with Ruby for beginners</video:title>
      <video:description>In this series of videos, you'll learn how to implement a simple terminal based Chess game with Ruby. In this episode, we start implementing the Game class and the logic for the play loop. We create a Player class to read the start and end positions from a human user as comma separated values. We'll create a new Error type for raising a custom exception.

We talk about:

* Dependency injection
* Passing a class as an argument
* Custom error classes (InvalidMoveError)


Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=a3MSZm6GfRQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/move-pieces-on-the-board-implement-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/urZ8aypeSoU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Move pieces on the board - Implement Chess with Ruby for beginners</video:title>
      <video:description>In this series of videos you'll learn how to implement a simple terminal based Chess game with Ruby. In this episode we update our board class so that pieces can be moved from one location to another.

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=urZ8aypeSoU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pawn-moves-implementing-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:10Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/K5VCekNAd0c/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Pawn moves - Implementing Chess with Ruby for beginners</video:title>
      <video:description>In this series, we're discussing several object oriented design concepts while building a simple terminal based Chess game with Ruby. In this episode, we continue work on our Pawn class -- a surprisingly tricky piece to get right given it's small size ;) We add support for deriving the list of available_moves for a given piece on the board at a specific location and talk about some limitations.

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=K5VCekNAd0c</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/available-moves-for-a-piece-implementing-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2LXc7QYwcRk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Available moves for a Piece - Implementing Chess with Ruby for beginners</video:title>
      <video:description>In this series you'll learn object oriented basics while building a basic terminal based Chess game with Ruby.

In this episode, we'll extract some of the common logic that is the same across all piece classes into a parent Piece class and setup a basic inheritance tree. Then we build Slideable and Stepable modules to share the logic for discovering available moves for all pieces that fit into those categories.

We cover:

* inheritance
* modules

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2LXc7QYwcRk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/render-the-board-implementing-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/B4FU0oO0uOw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Render the board - Implementing Chess with Ruby for beginners</video:title>
      <video:description>In this series we're building a basic terminal based Chess game with Ruby for beginners with the goal of discussing various object oriented concepts. In this episode we create a factory method for creating a pre-configured board.

* Factory methods
* Single responsibility principle - create a BoardRendererText class rather than printing directly from the board class

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=B4FU0oO0uOw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-oxxo-payments-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8ezSzH8jnY4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept OXXO payments with Stripe.js</video:title>
      <video:description>In this episode, you'll learn how to confirm PaymentIntents on the front end with HTML and JavaScript to accept payment with OXXO. OXXO is a popular voucher based payment method type in Mexico.

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/3s4Dwox7oTQ
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

### Resources

Official documentation: https://stripe.com/docs/payments/oxxo/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/oxxo.js

### Table of contents

00:00 Introduction
01:22 Verify the server endpoints
01:48 Review skeleton code
02:27 Create the payment form
03:42 Create the PaymentIntent on the server
04:36 Confirm the PaymentIntent on the client
05:47 Test OXXO payments
06:49 Recap

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8ezSzH8jnY4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-an-oxxo-payment-with-react</loc>
    <lastmod>2023-01-30T22:53:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zmNMMBbYFf0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept an OXXO payment with React</video:title>
      <video:description>In this episode, you'll learn how to confirm PaymentIntents on the front end with React to accept payment with OXXO. OXXO is a popular voucher based payment method type in Mexico.

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/3s4Dwox7oTQ
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

### Resources

Official documentation: https://stripe.com/docs/payments/oxxo/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/Oxxo.js

### Table of contents

00:00 Introduction
01:27 Verify the server endpoints
03:14 Scaffold the OXXO form component
04:45 Create the PaymentIntent on the server
05:58 Setup the StatusMessages component
06:39 Confirm the PaymentIntent on the client
08:01 Test OXXO payments
09:45 Recap

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zmNMMBbYFf0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/creating-classes-for-chess-pieces-implementing-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-wLVmf7-efU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Creating classes for Chess Pieces - Implementing Chess with Ruby for beginners</video:title>
      <video:description>In this series, you'll learn how to implement a basic terminal based Chess game with Ruby. In this episode we create the piece classes for Pawn, Rook, Knight, King, Queen, and Bishop. 

We cover:
* Ternary operators
* Why use Symbol vs String
* Duck typing - using the same method name across similar classes
* Waiting to DRY up code until the system is well known

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-wLVmf7-efU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/building-a-board-class-implementing-chess-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:11Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Zc0ZuH3Qpxw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Building a Board class - Implementing Chess with Ruby for beginners</video:title>
      <video:description>In this series, you'll learn how to implement a very basic terminal based Chess game in Ruby. In this episode, you'll learn about:

* Operator overloading
* The convention of adding a `?` to the end of methods
* Getter methods with `attr_reader`
* Passing tuples rather than x and y for coordinates

Playlist: https://www.youtube.com/playlist?list=PLS6F722u-R6LZxh7mvEUvZKshcH6KSNhr
Code: https://replit.com/@CJAvilla/chess#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Zc0ZuH3Qpxw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/hangman-with-ruby-for-beginners</loc>
    <lastmod>2026-03-04T20:14:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/LQGRzObX94o/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Hangman with ruby for beginners</video:title>
      <video:description>We cover some basics for getting started with ruby and refactoring a simple version of hangman into one that uses a class with instance variables. 

Play with the code yourself here: https://replit.com/@CJAvilla/hangman#main.rb</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=LQGRzObX94o</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-pre-authorized-debit-payments-in-canada-acss-with-react</loc>
    <lastmod>2023-01-30T22:53:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/EwH4B3M0-bk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept pre-authorized debit payments in Canada (ACSS) with React</video:title>
      <video:description>In this episode, you'll learn how to confirm PaymentIntents on the front end with React to accept payment with Pre-authorized debit (PAD), also known as ACSS. This is a popular local payment method type in Canada.

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/Tgjwx-38Dic
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

### Resources

ACSS PaymentIntent creation: https://gist.github.com/cjavilla-stripe/20c7d9ccd31cd3f39a4f7d0cb066b2b8 
Official documentation: https://stripe.com/docs/payments/acss-debit/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/acss.js

### Table of contents

00:00 Introduction
02:12 Verify the server endpoints
03:15 Scaffold the AcssDebit form component
04:50 Setup StatusMessages debugging component
05:18 Create the PaymentIntent on the server
06:18 Confirm the PaymentIntent on the client
07:58 Test ACSS payments
09:30 Recap

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=EwH4B3M0-bk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-pre-authorized-debit-in-canada-acss-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KWhynzGP5bw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept Pre-authorized debit in Canada (ACSS) with Stripe.js</video:title>
      <video:description>In this episode, you'll learn how to confirm PaymentIntents on the front end with HTML and JavaScript to accept payment with Pre-authorized debit (PAD), also known as ACSS. This is a popular local payment method type in Canada.

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/Tgjwx-38Dic
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

### Resources

ACSS PaymentIntent creation: https://gist.github.com/cjavilla-stripe/20c7d9ccd31cd3f39a4f7d0cb066b2b8 
Official documentation: https://stripe.com/docs/payments/acss-debit/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/acss.js

### Table of contents

00:00 Introduction
02:12 Verify the server endpoints
02:44 Create acss.html with a form
04:03 Initialize an instance of Stripe
04:14 Add a submit handler for the form
04:26 Create the PaymentIntent on the server
05:00 Confirm the PaymentIntent on the client
05:52 Test ACSS payments
08:18 Recap

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KWhynzGP5bw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/adding-a-landing-page-to-rails-with-tailwindui</loc>
    <lastmod>2026-03-04T20:14:12Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/G1FgkYtrGU0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Adding a landing page to Rails with TailwindUI</video:title>
      <video:description>Learn how to use the marketing pages available in TailwindUI to create a landing page in a rails application. We briefly talk about using a custom layout per Controller. In a future episode we’ll refactor further to support multiple marketing pages.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=G1FgkYtrGU0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-create-a-paymentintent-with-php</loc>
    <lastmod>2023-01-30T22:53:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/BPfpPGl85tk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment - Create a PaymentIntent with PHP</video:title>
      <video:description>Accepting a one-time payment with a custom form requires two steps. First, creating a PaymentIntent on the server. Second, confirming the payment intent on the client. It's also recommended that you handle fulfillment for a purchase when receiving a webhook notification of successful payment. 

In this video, you'll learn how to create a PaymentIntent on the server using PHP and how to setup a basic Webhook handler. For part two of this series to confirm a PaymentIntent using a variety of payment methods, watch one of the videos in the playlists for front end frameworks:

HTML and JavaScript - https://www.youtube.com/playlist?list=PLy1nL-pvL2M7EUdqARPiayuj5cjGMLCvM
React - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6HFApWUDSGA4Y7btyKx7cE
iOS - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6yD1D72ceqqrW_1BqyN4It 
Android - https://www.youtube.com/playlist?list=PLy1nL-pvL2M4IvDG-DOFKi_UCEgQkHu3n

If you'd like to learn how to create a PaymentIntent on the server in another server side language, consider watching one of these episodes:

Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

### Resources

Code: https://github.com/stripe-samples/accept-a-payment/tree/main/custom-payment-flow
Documentation: https://stripe.com/docs/payments/payment-intents
How intents work: https://stripe.com/docs/payments/intents 
Playlist: https://www.youtube.com/playlist?list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a

### Table of contents

00:00 Overview
01:11 Setup the office hours sample
01:45 Add route to create-payment-intent
02:12 Create a basic PaymentIntent using the API with stripe-go
02:45 Test the endpoint with cURL
03:12 Accept payment method type and currency in request
04:57 Handle errors
05:48 Handle webhook notifications
08:23 Add a config route for fetching publishable keys
09:00 Recap and conclusion

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev 

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=BPfpPGl85tk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-issuing-real-time-authorizations</loc>
    <lastmod>2023-01-30T22:53:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/vKptxR9zdCQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Issuing - real-time authorizations</video:title>
      <video:description>In this episode, you'll get an overview of the core components to Stripe Issuing, a product that enables you to send payment cards to your users who can then pay for goods and services. We discuss creating cardholders and their cards, and walk through a webhook implementation for approving or declining authorization requests in real-time. 

### Presenters

Steve Kaliski - Software Engineer at Stripe - https://twitter.com/stevekaliski
CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Get started with Issuing: https://stripe.com/issuing
Real-time authorizations documentation: https://stripe.com/docs/issuing/controls/real-time-authorizations 

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=vKptxR9zdCQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/sending-email-with-rails-using-sendgrid-and-heroku</loc>
    <lastmod>2026-03-04T20:14:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kQyfOLKPrOE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Sending email with Rails using Sendgrid and Heroku</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kQyfOLKPrOE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/setup-sentry-error-monitoring-on-heroku-for-rails</loc>
    <lastmod>2026-03-04T20:14:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/jBwYW1TotfQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Setup Sentry error monitoring on Heroku for Rails</video:title>
      <video:description>Setup Sentry error monitoring on Heroku for Rails
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=jBwYW1TotfQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-an-apple-pay-payment-with-react</loc>
    <lastmod>2023-01-30T22:53:33Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bMCsJfJyQKA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept an Apple Pay payment with React</video:title>
      <video:description>Learn the front end steps for accepting a payment with Apple Pay from your customers using a custom form in a React application. You'll learn how to use the PaymentRequestButtonElement component and how to use the confirmCardPayment method from Stripe.js to securely confirm a PaymentIntent client-side. This method handles 3D Secure and Secure Customer Authentication (SCA).

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/Tgjwx-38Dic
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Getting started with React Stripe.js: https://www.youtube.com/watch?v=5y5WwF9s-ZI
Stripe.js documentation: https://stripe.com/docs/js
Accept a payment documentation: https://stripe.com/docs/payments/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/Card.js

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bMCsJfJyQKA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-an-apple-pay-payment-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:33Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5KcdQboA7Gc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept an Apple Pay payment with Stripe.js</video:title>
      <video:description>Learn the front end steps for accepting a payment with Apple Pay from your customers using a custom form in HTML and JavaScript. You'll learn how to use the payment request button and how to use the confirmCardPayment method from Stripe.js to securely confirm a PaymentIntent client-side. This method handles 3D Secure and Secure Customer Authentication (SCA).

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/Tgjwx-38Dic
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

### Table of contents

00:00 Introduction
00:45 Verify server endpoints
01:58 Add Apple Pay button container to HTML
02:48 Create the PaymentRequest object
03:53 Create the PaymentRequestButton element
04:23 Check if we can make payment
05:47 Listen for the paymentmethod event
07:46 Review requirements for testing Apple Pay
08:39 Setup a ngrok tunnel
09:36 Register an Apple Pay domain
11:20 Create a PaymentIntent on the server
11:57 Confirm the PaymentIntent
15:10 Test Apple Pay 
16:00 Recap

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Stripe.js documentation: https://stripe.com/docs/js
Accept a payment documentation: https://stripe.com/docs/payments/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/apple-pay.js
ngrok: https://ngrok.com/

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5KcdQboA7Gc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/fetch-company-data-from-alphavantage-api-with-ruby</loc>
    <lastmod>2026-03-04T20:14:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MSlICEGVZyc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Fetch company data from Alphavantage API with Ruby</video:title>
      <video:description>alphavantagerb
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MSlICEGVZyc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/adding-tailwind-ui-to-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/qPquD5AmKVU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Adding Tailwind UI to Ruby on Rails</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=qPquD5AmKVU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/poll-and-alert-for-recent-filings-regex-migrations-and-heroku-scheduler</loc>
    <lastmod>2026-03-04T20:14:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/1G7m6fx4MwI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Poll and alert for recent filings, regex, migrations, and heroku scheduler</video:title>
      <video:description>A little bit of regex.

This is a bit of a long episode that has some little tidbits like some basic regular expressions, migrations, and setting up heroku scheduler.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=1G7m6fx4MwI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pagination-in-ruby-on-rails-with-kaminari</loc>
    <lastmod>2026-03-04T20:14:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/wBu7zPctus4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Pagination in Ruby on Rails with kaminari</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=wBu7zPctus4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/noticed-gem-with-webpush-in-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:15Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/T6vdjAvGr1Q/hqdefault.jpg</video:thumbnail_loc>
      <video:title>noticed gem with webpush in Ruby on Rails</video:title>
      <video:description>In this episode, we refactor our webpush logic created in the previous episode to create a custom delivery method in the noticed gem for publishing webpush notifications.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=T6vdjAvGr1Q</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-card-payment-with-react-stripe-js</loc>
    <lastmod>2023-01-30T22:53:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/IhvtIbfDZJI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a card payment with React Stripe.js</video:title>
      <video:description>Learn the front end steps for accepting a payment with a card from your customers using a custom form in a React application. You'll learn how to use the CardElement component and how to use the confirmCardPayment method from Stripe.js to securely confirm a PaymentIntent client-side. This method handles 3D Secure and Secure Customer Authentication (SCA).

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/Tgjwx-38Dic
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

Want to see how to implement with a different client?

HTML and JavaScript - https://youtu.be/0oHjwz-WHcc
iOS - https://youtu.be/8sXgvDWVsuI
Android - https://youtu.be/fhgqeeQczOc

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Getting started with React Stripe.js: https://www.youtube.com/watch?v=5y5WwF9s-ZI
Stripe.js documentation: https://stripe.com/docs/js
Accept a payment documentation: https://stripe.com/docs/payments/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/react-cra/src/Card.js

### Table of contents

00:45 Confirm the server is working as expected
02:00 Add a new payment form
03:52 Add the CardElement component
05:57 Add useElements and useStripe hooks
06:36 Create PaymentIntent on the server
08:07 Add StatusMessages helper component
09:48 Confirm with confirmCardPayment
12:21 View successful payment in the dashboard
13:00 Test 3D Secure and Secure Customer Authentication card
14:12 Add error handling
15:40 Review

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=IhvtIbfDZJI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-card-payment-with-stripe-js</loc>
    <lastmod>2023-01-30T22:53:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/0oHjwz-WHcc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a card payment with Stripe.js</video:title>
      <video:description>Learn the front end steps for accepting a payment with a card from your customers using a custom form. You'll see how to use the confirmCardPayment method from Stripe.js to securely confirm a PaymentIntent client-side. This method handles 3D Secure and Secure Customer Authentication (SCA).

Watch one of these episodes to learn the server side steps required to create a PaymentIntent using the Stripe API with one of the officially supported client libraries:

Ruby - https://youtu.be/079khYtqWPo
Python - https://youtu.be/Tgjwx-38Dic
Node.js - https://youtu.be/WG4ehXSEpz4
Go - https://youtu.be/cbsCxLDL4EY
Java - https://youtu.be/-uyXCnPXegE
.NET - https://youtu.be/mqEjRgoZWdo
PHP - https://youtu.be/BPfpPGl85tk

Want to see how to implement with a different client?

iOS - https://youtu.be/8sXgvDWVsuI
Android - https://youtu.be/fhgqeeQczOc
React - https://youtu.be/IhvtIbfDZJI

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Stripe.js: https://stripe.com/docs/js
Official documentation: https://stripe.com/docs/payments/accept-a-payment
Code: https://github.com/stripe-samples/accept-a-payment/blob/main/custom-payment-flow/client/html/card.js

### Table of contents

00:00 Overview
00:39 Confirm server is creating PaymentIntents
01:00 Create a payment form with HTML
02:12 Create card.js and start JavaScript implementation
02:44 Setup Stripe.js, create and mount a card element
03:23 Make a request to the server to create a PaymentIntent
04:36 Confirm the PaymentIntent with confirmCardPayment
05:54 Test payment
06:39 Add error handling
07:29 Load publishable key from server with /config

### Support
If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=0oHjwz-WHcc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-create-a-paymentintent-with-net</loc>
    <lastmod>2023-01-30T22:53:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/mqEjRgoZWdo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment - Create a PaymentIntent with .NET</video:title>
      <video:description>Accepting a one-time payment with a custom form requires two steps. First, creating a PaymentIntent on the server. Second, confirming the payment intent on the client. It's also recommended that you handle fulfillment for a purchase when receiving a webhook notification of successful payment. 

In this video, you'll learn how to create a PaymentIntent on the server using .NET and how to setup a basic Webhook handler. For part two of this series to confirm a PaymentIntent using a variety of payment methods, watch one of the videos in the playlists for front end frameworks:

HTML and JavaScript - https://www.youtube.com/playlist?list=PLy1nL-pvL2M7EUdqARPiayuj5cjGMLCvM
React - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6HFApWUDSGA4Y7btyKx7cE
iOS - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6yD1D72ceqqrW_1BqyN4It 
Android - https://www.youtube.com/playlist?list=PLy1nL-pvL2M4IvDG-DOFKi_UCEgQkHu3n

If you'd like to learn how to create a PaymentIntent on the server in another server side language, consider watching one of these episodes:

Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

### Resources

Code: https://github.com/stripe-samples/accept-a-payment/tree/main/custom-payment-flow
Documentation: https://stripe.com/docs/payments/payment-intents
How intents work: https://stripe.com/docs/payments/intents 
Playlist: https://www.youtube.com/playlist?list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a

### Table of contents

00:00 Overview
01:11 Setup the office hours sample
01:45 Add route to create-payment-intent
02:12 Create a basic PaymentIntent using the API with stripe-go
02:45 Test the endpoint with cURL
03:12 Accept payment method type and currency in request
04:57 Handle errors
05:48 Handle webhook notifications
08:23 Add a config route for fetching publishable keys
09:00 Recap and conclusion

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev 

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=mqEjRgoZWdo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-create-a-paymentintent-with-go</loc>
    <lastmod>2023-01-30T22:53:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/cbsCxLDL4EY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment - Create a PaymentIntent with Go</video:title>
      <video:description>Accepting a one-time payment with a custom form requires two steps. First, creating a PaymentIntent on the server. Second, confirming the payment intent on the client. It's also recommended that you handle fulfillment for a purchase when receiving a webhook notification of successful payment. 

In this video, you'll learn how to create a PaymentIntent on the server using Go and how to setup a basic Webhook handler. For part two of this series to confirm a PaymentIntent using a variety of payment methods, watch one of the videos in the playlists for front end frameworks:

HTML and JavaScript - https://www.youtube.com/playlist?list=PLy1nL-pvL2M7EUdqARPiayuj5cjGMLCvM
React - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6HFApWUDSGA4Y7btyKx7cE
iOS - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6yD1D72ceqqrW_1BqyN4It 
Android - https://www.youtube.com/playlist?list=PLy1nL-pvL2M4IvDG-DOFKi_UCEgQkHu3n

If you'd like to learn how to create a PaymentIntent on the server in another server side language, consider watching one of these episodes:

Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

### Resources

Code: https://github.com/stripe-samples/accept-a-payment/tree/main/custom-payment-flow
Documentation: https://stripe.com/docs/payments/payment-intents
How intents work: https://stripe.com/docs/payments/intents 
Playlist: https://www.youtube.com/playlist?list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a

### Table of contents

00:00 Overview
01:11 Setup the office hours sample
01:45 Add route to create-payment-intent
02:12 Create a basic PaymentIntent using the API with stripe-go
02:45 Test the endpoint with cURL
03:12 Accept payment method type and currency in request
04:57 Handle errors
05:48 Handle webhook notifications
08:23 Add a config route for fetching publishable keys
09:00 Recap and conclusion

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev 

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=cbsCxLDL4EY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-create-a-paymentintent-with-node-js</loc>
    <lastmod>2023-01-30T22:53:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/WG4ehXSEpz4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment - Create a PaymentIntent with Node.js</video:title>
      <video:description>Accepting a one-time payment with a custom form requires two steps. First, creating a PaymentIntent on the server. Second, confirming the payment intent on the client. It's also recommended that you handle fulfillment for a purchase when receiving a webhook notification of successful payment. 

In this video, you'll learn how to create a PaymentIntent on the server using Node.js and how to setup a basic Webhook handler. For part two of this series to confirm a PaymentIntent using a variety of payment methods, watch one of the videos in the playlists for front end frameworks:

HTML and JavaScript - https://www.youtube.com/playlist?list=PLy1nL-pvL2M7EUdqARPiayuj5cjGMLCvM
React - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6HFApWUDSGA4Y7btyKx7cE
iOS - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6yD1D72ceqqrW_1BqyN4It 
Android - https://www.youtube.com/playlist?list=PLy1nL-pvL2M4IvDG-DOFKi_UCEgQkHu3n

If you'd like to learn how to create a PaymentIntent on the server in another server side language, consider watching one of these episodes:

Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

### Resources

Code: https://github.com/stripe-samples/accept-a-payment/tree/main/custom-payment-flow
Documentation: https://stripe.com/docs/payments/payment-intents
How intents work: https://stripe.com/docs/payments/intents 
Playlist: https://www.youtube.com/playlist?list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a

### Table of contents

00:00 Overview
01:11 Setup the office hours sample
01:45 Add route to create-payment-intent
02:12 Create a basic PaymentIntent using the API with stripe-go
02:45 Test the endpoint with cURL
03:12 Accept payment method type and currency in request
04:57 Handle errors
05:48 Handle webhook notifications
08:23 Add a config route for fetching publishable keys
09:00 Recap and conclusion

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev 

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=WG4ehXSEpz4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-create-a-paymentintent-with-ruby</loc>
    <lastmod>2023-01-30T22:53:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/079khYtqWPo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment - Create a PaymentIntent with Ruby</video:title>
      <video:description>Accepting a one-time payment with a custom form requires two steps. First, creating a PaymentIntent on the server. Second, confirming the payment intent on the client. It's also recommended that you handle fulfillment for a purchase when receiving a webhook notification of successful payment. 

In this video, you'll learn how to create a PaymentIntent on the server using Ruby and how to setup a basic Webhook handler. For part two of this series to confirm a PaymentIntent using a variety of payment methods, watch one of the videos in the playlists for front end frameworks:

HTML and JavaScript - https://www.youtube.com/playlist?list=PLy1nL-pvL2M7EUdqARPiayuj5cjGMLCvM
React - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6HFApWUDSGA4Y7btyKx7cE
iOS - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6yD1D72ceqqrW_1BqyN4It 
Android - https://www.youtube.com/playlist?list=PLy1nL-pvL2M4IvDG-DOFKi_UCEgQkHu3n

If you'd like to learn how to create a PaymentIntent on the server in another server side language, consider watching one of these episodes:

Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

### Resources

Code: https://github.com/stripe-samples/accept-a-payment/tree/main/custom-payment-flow
Documentation: https://stripe.com/docs/payments/payment-intents
How intents work: https://stripe.com/docs/payments/intents 
Playlist: https://www.youtube.com/playlist?list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a

### Table of contents

00:00 Overview
01:11 Setup the office hours sample
01:45 Add route to create-payment-intent
02:12 Create a basic PaymentIntent using the API with stripe-go
02:45 Test the endpoint with cURL
03:12 Accept payment method type and currency in request
04:57 Handle errors
05:48 Handle webhook notifications
08:23 Add a config route for fetching publishable keys
09:00 Recap and conclusion

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev 

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=079khYtqWPo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-create-a-paymentintent-with-java</loc>
    <lastmod>2023-01-30T22:53:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-uyXCnPXegE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment - Create a PaymentIntent with Java</video:title>
      <video:description>Accepting a one-time payment with a custom form requires two steps. First, creating a PaymentIntent on the server. Second, confirming the payment intent on the client. It's also recommended that you handle fulfillment for a purchase when receiving a webhook notification of successful payment. 

In this video, you'll learn how to create a PaymentIntent on the server using Java and how to setup a basic Webhook handler. For part two of this series to confirm a PaymentIntent using a variety of payment methods, watch one of the videos in the playlists for front end frameworks:

HTML and JavaScript - https://www.youtube.com/playlist?list=PLy1nL-pvL2M7EUdqARPiayuj5cjGMLCvM
React - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6HFApWUDSGA4Y7btyKx7cE
iOS - https://www.youtube.com/playlist?list=PLy1nL-pvL2M6yD1D72ceqqrW_1BqyN4It 
Android - https://www.youtube.com/playlist?list=PLy1nL-pvL2M4IvDG-DOFKi_UCEgQkHu3n

If you'd like to learn how to create a PaymentIntent on the server in another server side language, consider watching one of these episodes:

Ruby - https://www.youtube.com/watch?v=079khYtqWPo&amp;list=PLy1nL-pvL2M50RmP6ie-gdcSnfOuQCRYk&amp;index=12
Python - https://www.youtube.com/watch?v=Tgjwx-38Dic&amp;list=PLy1nL-pvL2M55YVn0mGoQ5r-39A1-ZypO&amp;index=11
PHP - https://youtu.be/BPfpPGl85tk
Node.js - https://www.youtube.com/watch?v=WG4ehXSEpz4&amp;list=PLy1nL-pvL2M5xNIuNapwmABwEy2uifAlY&amp;index=11
Java - https://www.youtube.com/watch?v=-uyXCnPXegE&amp;list=PLy1nL-pvL2M5TnSGVjEHTTMgdnnHi-KPg&amp;index=11
Go - https://www.youtube.com/watch?v=cbsCxLDL4EY&amp;list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a&amp;index=12
.NET - https://www.youtube.com/watch?v=mqEjRgoZWdo&amp;list=PLy1nL-pvL2M4cNNoUtjWevYSci4ubsbhC&amp;index=11

### Resources

Code: https://github.com/stripe-samples/accept-a-payment/tree/main/custom-payment-flow
Documentation: https://stripe.com/docs/payments/payment-intents
How intents work: https://stripe.com/docs/payments/intents 
Playlist: https://www.youtube.com/playlist?list=PLy1nL-pvL2M5eqpSBR9KL7K0lcnWo0V0a

### Table of contents

00:00 Overview
01:11 Setup the office hours sample
01:45 Add route to create-payment-intent
02:12 Create a basic PaymentIntent using the API with stripe-go
02:45 Test the endpoint with cURL
03:12 Accept payment method type and currency in request
04:57 Handle errors
05:48 Handle webhook notifications
08:23 Add a config route for fetching publishable keys
09:00 Recap and conclusion

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev 

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-uyXCnPXegE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/web-push-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/d0XJ9cLfoTs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Web push with Ruby on Rails</video:title>
      <video:description>Learn how to implement web push notifications in an ruby on rails application. In the next episode, we'll integrate with the noticed gem and create a custom delivery method.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=d0XJ9cLfoTs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/configure-rake-tasks-to-accept-arguments</loc>
    <lastmod>2026-03-04T20:14:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/NAe77HHFLfM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Configure rake tasks to accept arguments</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=NAe77HHFLfM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/add-flags-to-stock-chart-when-form4-trades-were-filed</loc>
    <lastmod>2026-03-04T20:14:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/uhH0WBkP2Yc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Add flags to Stock chart when Form4 trades were filed</video:title>
      <video:description>In this episode, we'll build an API endpoint to return some simple form4 data to display on our stock charts with Ruby on Rails.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=uhH0WBkP2Yc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/importing-large-data-set-to-rails-with-background-jobs</loc>
    <lastmod>2026-03-04T20:14:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ZMB6KVdDp68/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Importing large data set to Rails with background jobs</video:title>
      <video:description>Importing large sets of U.S. Security and Exchange Commission Form 4 Filings with Ruby on Rails. This episode talks about deserializing from the rough SEC XML Document format into Structs and ultimately storing in Active Record models.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ZMB6KVdDp68</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/learn-active-record-associations-with-starwars</loc>
    <lastmod>2026-03-04T20:14:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/E2jk4h1gQ2I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Learn Active Record associations with Starwars</video:title>
      <video:description>Experiment with Active Record associations by running some rspec tests. 

Kata: https://github.com/cjavdev/st-ar-wars 
Original Reddit Post: https://www.reddit.com/r/rails/comments/mocwsa/how_did_you_learn_active_record_associations/
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=E2jk4h1gQ2I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ingest-company-data-from-the-sec-with-ruby</loc>
    <lastmod>2026-03-04T20:14:18Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/bNcdSb_vUuA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ingest Company data from the SEC with Ruby</video:title>
      <video:description>Importing Company Entity data from the U.S. Security and Exchange Commission's open Edgar API.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=bNcdSb_vUuA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/add-stock-prices-to-a-chart-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:18Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/tH7DbRgi6_A/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Add Stock Prices to a Chart with Ruby on Rails</video:title>
      <video:description>Add Stock Prices to a highchart javascript chart with Ruby on Rails.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=tH7DbRgi6_A</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/php-starter</loc>
    <lastmod>2023-01-30T22:53:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/voFjVwlKHvM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>PHP Starter</video:title>
      <video:description>Learn how we structure the Stripe Samples and other Stripe tutorials when working with PHP. We'll cover how to setup and install dependencies with Composer, load API keys and settings from .env, and how to setup a basic webhook handler.

### Table of contents

00:00 Overview
03:00 Create project structure
03:40 Test a "hello world" php script
04:10 Install stripe-php with composer
05:30 Make an API call to Stripe
06:40 Scaffold the HTML
07:58 Load API keys from .env
12:40 Convert server rendered example to JSON rendered example
14:12 Make POST with fetch client-side
16:27 Setup a webhook handler

### Presenter

CJ Avilla - Developer advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/.

### Feedback

What would you like to see in future episodes? https://docs.google.com/forms/d/e/1FAIpQLScx_BtXcakIJ_EFso-4-fnCrTVFXxsh-5BPM-SdhNG6W7kzbw/viewform</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=voFjVwlKHvM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/install-amcharts-and-highcharts-into-a-ruby-on-rails-app</loc>
    <lastmod>2026-03-04T20:14:19Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/IOtr9E02PZM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Install amcharts and highcharts into a Ruby on Rails app</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=IOtr9E02PZM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/picking-a-third-party-library</loc>
    <lastmod>2026-03-04T20:14:18Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/b18972NLPJI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Picking a third party library</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=b18972NLPJI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/import-stock-prices-from-alphavantage-with-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/dSux29_wBSE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Import Stock Prices from Alphavantage with Ruby on Rails</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=dSux29_wBSE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/drag-image-on-html-canvas-with-javascript</loc>
    <lastmod>2026-03-04T20:14:19Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/6dpxrBTESvQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Drag image on HTML Canvas with JavaScript</video:title>
      <video:description>Learn how to drag image on HTML Canvas with JavaScript. We're building on the last episode where we used the bitmoji API to add stickers to a thumbnail canvas. In this episode, we listen for mouse events on the canvas and redraw based on where the sticker is dragged.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=6dpxrBTESvQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/add-bitmoji-sticker-to-canvas-with-javascript-using-the-bitmoji-kit</loc>
    <lastmod>2026-03-04T20:14:20Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/DQKIcWvXNLk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Add bitmoji sticker to canvas with JavaScript using the bitmoji kit</video:title>
      <video:description>Learn how to use the bitmoji kit sticker picker to add a bitmoji image to an HTML canvas with JavaScript.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=DQKIcWvXNLk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/take-a-photo-and-remove-greenscreen-with-javascript</loc>
    <lastmod>2026-03-04T20:14:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/6cwsNpvp6vo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Take a photo and remove greenscreen with JavaScript</video:title>
      <video:description>In this episode, we show how to take a photo with the browser, then remove the greenscreen by either setting alpha to 0 or by replacing the pixels in the background with a specific color.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=6cwsNpvp6vo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pass-a-function-as-an-argument-to-another-function-in-javascript</loc>
    <lastmod>2026-03-04T20:14:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/T0eroJltRsM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Pass a function as an argument to another function in JavaScript</video:title>
      <video:description>https://www.reddit.com/r/learnjavascript/comments/m8vlsb/can_someone_explain_how_to_pass_a_function_as_an/</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=T0eroJltRsM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/refresh-youtube-api-oauth-tokens-with-ruby</loc>
    <lastmod>2026-03-04T20:14:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KCsw_eTVpIM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Refresh YouTube API OAuth Tokens with Ruby</video:title>
      <video:description>Refreshing YouTube authentication tokens using Ruby. This builds on a previous episode where we setup authentication with the YouTube API.

Setting up YouTube API Authentication in Ruby on Rails: https://youtu.be/KDkLQAcsCXg

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KCsw_eTVpIM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/running-rails-background-jobs-on-heroku-with-resque-and-redis</loc>
    <lastmod>2026-03-04T20:14:21Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/seC6MnKvbnI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Running Rails background jobs on Heroku with Resque and Redis</video:title>
      <video:description>Running Rails background jobs on Heroku with Resque and Redis.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=seC6MnKvbnI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/setting-up-background-jobs-in-ruby-on-rails</loc>
    <lastmod>2026-03-04T20:14:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5Z21WARO7P8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Setting up Background Jobs in Ruby on Rails</video:title>
      <video:description>Setting up Background Jobs in Ruby on Rails with Resque and Redis. In this edition, we'll setup basic background jobs with ActiveJob, run redis-server locally.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5Z21WARO7P8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/go-net-http-starter</loc>
    <lastmod>2023-01-30T22:53:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/JQWEJV2tR-c/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Go net/http Starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of setting up a basic web application with the net/http go lang package.

## Resources

- net/http https://golang.org/pkg/net/http/
- curl command line tool https://curl.haxx.se/
- dotenv https://github.com/joho/godotenv 
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types  https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter/server/go-http

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or join us on Discord https://stripe.com/go/developer-chat.

### Feedback

What would you like to see in future episodes? https://docs.google.com/forms/d/e/1FAIpQLScx_BtXcakIJ_EFso-4-fnCrTVFXxsh-5BPM-SdhNG6W7kzbw/viewform
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=JQWEJV2tR-c</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/6-tips-for-working-with-json-in-the-terminal-with-jq-shorts</loc>
    <lastmod>2026-03-04T20:14:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/jbXF06jglnQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>6 tips for working with JSON in the terminal with jq #Shorts</video:title>
      <video:description>https://stedolan.github.io/jq/manual/</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=jbXF06jglnQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/getting-started-with-react-stripe-js</loc>
    <lastmod>2023-01-30T22:53:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/5y5WwF9s-ZI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Getting started with React Stripe.js</video:title>
      <video:description>In this episode, you'll learn how we use React with Stripe Samples, a collection of GitHub repositories showing full end to end examples of Stripe integrations. We'll start from scratch and build a simple create-react-app style app with Stripe.js and React Stripe.js installed. You'll learn about the loadStripe helper, Elements and ElementsConsumer providers, and how to use the useElements and useStripe hooks for functional react based components.

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

React Stripe.js official docs: https://stripe.com/docs/stripe-js/react 
Stripe.js docs: https://stripe.com/docs/stripe-js
Create React App documentation: https://create-react-app.dev

### Server Starters

Node.js Express Starter - https://www.youtube.com/watch?v=rPR2aJ6XnAc
Ruby Sinatra Starter - https://www.youtube.com/watch?v=8aA9Enb8NVc
Python Flask Starter - https://www.youtube.com/watch?v=7Ul1vfmsDck
.NET Core Starter - https://www.youtube.com/watch?v=2-mMOB8MhmE
Java Spark Starter - https://youtu.be/qY2HBiBu2XA
Go Echo Starter - https://youtu.be/ePmEVBu8w6Y

### Table of contents

00:00 Introduction
00:40 Scaffold basic file and directory structure and install react dependencies
01:48 Create and render a basic react app 
03:30 Install stripe dependencies
04:25 loadStripe
05:23 Elements and ElementsConsumer providers
06:03 CardElement/IdealBankElement/CardNumberElement components
06:50 useStripe and useElements hooks

### Support
If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or join us on Discord https://stripe.com/go/developer-chat.

### Updates
Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback
If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=5y5WwF9s-ZI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/upload-a-video-to-youtube-with-the-youtube-data-api</loc>
    <lastmod>2026-03-04T20:14:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/I5EvTSytDIM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Upload a video to YouTube with the YouTube Data API</video:title>
      <video:description>Upload a video to YouTube with the YouTube Data API with ruby on rails.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=I5EvTSytDIM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/record-a-video-with-javascript-in-a-ruby-on-rails-app</loc>
    <lastmod>2026-03-04T20:14:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/fqgnOEjakDg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Record a video with JavaScript in a Ruby on Rails app</video:title>
      <video:description>Learn how to record video using the MediaRecorder browser API with JavaScript. We'll cover how to display a monitor video and how to playback the recorded video in a second video object.

Episode gist: https://gist.github.com/cjavdev/3f23db1771fff816b79a2580c435b0fc

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=fqgnOEjakDg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/limit-access-to-data-to-authorized-users-rails-6</loc>
    <lastmod>2026-03-04T20:14:23Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/LU1g0pTMXhk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Limit access to data to authorized users Rails 6</video:title>
      <video:description>Only show users the data that belongs to them. Using authenticated users that we created in the previous episode with devise, we'll limit access to videos, description templates, and presenters to only the user who owns those objects.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=LU1g0pTMXhk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/java-spark-starter</loc>
    <lastmod>2023-01-30T22:53:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/qY2HBiBu2XA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Java Spark Starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of setting up a basic web application with Java Spark.

## Resources

- Spark Framework https://sparkjava.com/
- curl command line tool https://curl.haxx.se/
- java-dotenv https://github.com/cdimascio/dotenv-java 
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types  https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter/server/java

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents

00:00 Overview
01:50 Scaffold an HTML page
02:18 Setup the pom.xml file for installing dependencies with Maven
04:20 Create a new Server class
04:50 Make an API call to Stripe to list products
06:10 Setup .env for managing API keys
06:48 Install Java Spark
07:00 Serve static assets
07:36 Add a GET route server-side
09:00 Make GET request client-side
09:52 Add a POST route server-side
11:30 Make a POST request client-side
12:27 Setup a webhook handler
14:16 Recap

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or join us on Discord https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=qY2HBiBu2XA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/devise-authentication-with-rails-6</loc>
    <lastmod>2026-03-04T20:14:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zl6iJLlmUog/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Devise authentication with Rails 6</video:title>
      <video:description>In this episode, we set up a vanilla configuration for devise authentication with Ruby on Rails 6. devise is a ruby gem for quickly implementing user authentication in a ruby application.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zl6iJLlmUog</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/building-a-meteor-fall-game-with-javascript-livestream</loc>
    <lastmod>2026-03-04T20:14:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/o5CWxjV5Le8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Building a Meteor Fall game with JavaScript [livestream]</video:title>
      <video:description>In this episode, we build a simple rock fall game with emoji where rocks fall from the top and the ship (🐛 or 🚀)  attempts to ignore falling rocks by moving left and right. We use plain vanilla javascript and HTML canvas for this one. 

Code: https://github.com/cjavdev/rock-fall</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=o5CWxjV5Le8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-to-deploy-a-rails-6-application-to-heroku</loc>
    <lastmod>2026-03-04T20:14:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/3wmMtHz2zpY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How to deploy a Rails 6 application to Heroku</video:title>
      <video:description>How to deploy a Ruby on Rails 6 application to Heroku in 2021.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=3wmMtHz2zpY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/5-tools-for-printing-files-to-the-terminal-shorts</loc>
    <lastmod>2026-03-04T20:14:25Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/HqzJ_tmktt0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>5 tools for printing files to the terminal #shorts</video:title>
      <video:description>The 5 must know tools for displaying file contents on the terminal:

Cat - it’s generally used to concatenate files together, and it spits out the contents on standard output
More - is a filter for paging through text one screenful at a time
Less - it’s used for viewing files instead of opening them. It’s like more, but allows for moving backward too. Less is just a little better than more.
Head is used to print the first N lines of a file, it accepts N as input and has a default of 10
Tail. It’s used to print the bottom N lines of a file, it also accepts n as input and has a default of 10

Subscribe for more terminal tips!</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=HqzJ_tmktt0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/adding-a-categories-feature</loc>
    <lastmod>2026-03-04T20:14:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/WJXLwQGwqDI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Adding a Categories feature</video:title>
      <video:description>This is more of a basic Rails CRUD episode where we upgrade from a simple text subtitle to a video category. This makes managing a group of videos in a specific category a bit easier. We'll manage colors in the category rather than a subtitle.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=WJXLwQGwqDI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/upload-youtube-thumbnail-with-the-youtube-data-api-and-rails</loc>
    <lastmod>2026-03-04T20:14:28Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/r5PIzDmRups/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Upload YouTube thumbnail with the YouTube Data API and Rails</video:title>
      <video:description>Upload YouTube thumbnail with the YouTube Data API using Ruby on Rails. In this edition, we build on the previous episode by taking the base64 data URL for a png image, decode and write it to a Tempfile, then upload to the YouTube API to use as a thumbnail.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=r5PIzDmRups</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/adding-support-for-afterpay-clearpay-with-react-to-a-stripe-sample</loc>
    <lastmod>2026-03-04T20:14:26Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/z19lYFdAcn4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Adding support for Afterpay / Clearpay with React to a Stripe Sample</video:title>
      <video:description>Working on some open source contributions to a soon to be released Stripe Sample. This time, we're adding support for Afterpay / Clearpay with a React client.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=z19lYFdAcn4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dynamically-render-svg-with-rails</loc>
    <lastmod>2026-03-04T20:14:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Ij7l-yOWaso/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dynamically render SVG with Rails</video:title>
      <video:description>In this Ruby on Rails tutorial, you'll learn  how to render SVGs with embedded erb using Ruby on Rails. This trick can be handy for rendering custom SVG then converting and exporting PNGs.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Ij7l-yOWaso</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/convert-svg-to-png-with-javascript</loc>
    <lastmod>2026-03-04T20:14:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/-oXRpzLyz6Q/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Convert SVG to PNG with JavaScript</video:title>
      <video:description>In this segment, we'll work on converting an SVG to a PNG using an HTML canvas.  We'll dynamically render content into the SVG image including custom fonts from Google fonts. In the next episode, we'll show how to take the PNG image and upload it to YouTube with the YouTube Data API to use as the thumbnail.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=-oXRpzLyz6Q</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/tagging-videos-with-the-youtube-api</loc>
    <lastmod>2026-03-04T20:14:28Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/zDx41b54UWs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Tagging videos with the YouTube API</video:title>
      <video:description>Tag YouTube videos using the YouTube Data API V3 with Ruby.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=zDx41b54UWs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/update-videos-with-the-youtube-api</loc>
    <lastmod>2026-03-04T20:14:27Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ae-azSl5-EI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Update Videos with the YouTube API</video:title>
      <video:description>Updating videos on YouTube using the YouTube Data API v3 with Ruby. Walking through the process of making an API call to sync content updates for a YouTube video Title and Description.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ae-azSl5-EI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/list-youtube-videos-with-the-data-api-and-ruby</loc>
    <lastmod>2026-03-04T20:14:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/hVfyqmN6ILE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>List YouTube videos with the Data API and Ruby</video:title>
      <video:description>Fetching lists of videos from the YouTube Data API v3.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=hVfyqmN6ILE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/youtube-api-authentication-with-rails</loc>
    <lastmod>2026-03-04T20:14:28Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KDkLQAcsCXg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>YouTube API Authentication with Rails</video:title>
      <video:description>How to set up YouTube API Authentication with Ruby on Rails. We show how to create auth tokens. In a future episode, we cover how to refresh authentication tokens: https://www.youtube.com/watch?v=KCsw_eTVpIM&amp;list=PLS6F722u-R6ILDUeteD-A_q6Ja4SH8v95&amp;index=19.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KDkLQAcsCXg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/render-custom-descriptions-with-erb</loc>
    <lastmod>2026-03-04T20:14:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Br6nk3gFjDE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Render custom descriptions with ERB</video:title>
      <video:description>Adding ERB template rendering for description templates using the instance of a Video as the binding. We're building a tool to sync descriptions to the YouTube API and render the content based on a custom ERB template defined by the user of the application. 

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Br6nk3gFjDE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/actionview-basics-list-and-edit-custom-video-descriptions</loc>
    <lastmod>2026-03-04T20:14:29Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/JispE3mZtXg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>ActionView basics - list and edit custom video descriptions</video:title>
      <video:description>In this episode, we build on the previous work we did with the database and add views with simple ActionView templates with basic HTML and ERB for working with video, presenters, and templates.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=JispE3mZtXg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/data-modeling-with-activerecord-for-video-automation-tool</loc>
    <lastmod>2026-03-04T20:14:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/n_5z4FDBbqI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Data modeling with ActiveRecord for Video Automation tool</video:title>
      <video:description>Follow along as we build a tool to manage YouTube descriptions from Rails. In part 1, we cover the basic data model with ActiveRecord.

Code: https://github.com/cjavdev/video_automation
Twitter: https://twitter.com/cjav_dev
Feedback: https://forms.gle/Q31hhjJGsMrvY4mL6

It turns out there's a really excellent tool called TubeBuddy that already exists and does most of what I was planning to build. I've started using TubeBuddy in the past few months and really like it. If you use this link to buy a license, I'll get a small cut for being an affiliate: https://www.tubebuddy.com/cjavdev.
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=n_5z4FDBbqI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-perl</loc>
    <lastmod>2026-03-04T20:14:30Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/fOSXTpzlqts/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with perl</video:title>
      <video:description>In this episode, you'll learn how to accept a one time payment with stripe-perl aka Net::Stripe.

Code for this episode: https://github.com/cjavilla-stripe/accept-a-payment-perl

Related blog post: https://cjav.dev/posts/stripe-perl-hello-world/</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=fOSXTpzlqts</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/livestream-add-support-for-go-to-stripe-sample</loc>
    <lastmod>2026-03-04T20:14:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GL44DPfYtuE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[LiveStream] Add support for go to Stripe Sample</video:title>
      <video:description>Follow along to see how the go lang server example was added to the accept-a-payment Stripe Sample</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GL44DPfYtuE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-on-rails-how-i-get-started</loc>
    <lastmod>2026-03-04T20:14:31Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/LD49oT09jHs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby on rails - how I get started</video:title>
      <video:description>#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=LD49oT09jHs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/livestream-adding-net-core-server-to-stripe-sample</loc>
    <lastmod>2026-03-04T20:14:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/aJtOw0Ms7vE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[Livestream] Adding .NET Core server to Stripe Sample</video:title>
      <video:description>Follow along to see how to add support for a .NET core server option to a brand new Stripe Sample.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=aJtOw0Ms7vE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/replacing-peg-board-with-french-cleats</loc>
    <lastmod>2026-03-04T20:14:32Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/f7FOlOktoaE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Replacing peg board with French cleats</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=f7FOlOktoaE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/const_get-metaprogramming-in-ruby</loc>
    <lastmod>2026-03-04T20:14:33Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/yXROBruo1JE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>const_get - Metaprogramming in Ruby</video:title>
      <video:description>Another metaprogramming in Ruby that you'll find useful. Module.const_get allows you to pass a string or symbol value and returns the real constant or class. In this video, you'll learn how metaprogramming is used to implement the `resources` method in Rails routes. 

Presenter: https://twitter.com/cjav_dev

Code: https://gist.github.com/cjavdev/10e280a5210cdf7297f4ecb436a73aed</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=yXROBruo1JE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/define_method-metaprogramming-in-ruby</loc>
    <lastmod>2026-03-04T20:14:33Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/I0itVuoprAY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>define_method - Metaprogramming in Ruby</video:title>
      <video:description>In this edition, we talk about the ruby metaprogramming tool: define_method for dynamically defining methods on objects. define_method allows you to write very generic classes that automatically add functionality on the fly. Follow along to become even better with metaprogramming in ruby.


Code: https://gist.github.com/cjavdev/b9244e89d26d0dd91a583b61cc275f1b

Presenter:

CJ Avilla - https://twitter.com/cjav_dev</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=I0itVuoprAY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-stripe-net</loc>
    <lastmod>2023-01-30T22:53:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/N20T0rXAWsc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with Stripe.net</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the Stripe.net client library. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Documentation: https://stripe.com/docs/api/authentication
Official client library: https://github.com/stripe/stripe-dotnet/
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/dotnet/authentication/Program.cs

### Table of contents

00:00 Overview
00:08 Authorization header
00:18 Types of API keys
00:38 Publishable keys
01:00 Secret keys
01:44 Restricted keys
02:07 Webhook signing secrets
03:33 Roll API keys
04:03 Set API key globally
05:37 Set API key per-request
07:14 Authenticate requests for Stripe Connect
08:32 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=N20T0rXAWsc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/send-in-ruby</loc>
    <lastmod>2026-03-04T20:14:33Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/cY-wxg5z5bA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>send in ruby</video:title>
      <video:description>Send is a way to dynamically call different methods on an underlying object at run time. It allows you to define methods that are more flexible.

Code: https://gist.github.com/cjavdev/9900f55c2a31c2dee1a99d29c4ba214e

Presenter:
CJ Avilla - https://twitter.com/cjav_dev</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=cY-wxg5z5bA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-stripe-java</loc>
    <lastmod>2023-01-30T22:53:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/t4iJ07E_tA8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with stripe-java</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the stripe-java client library. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Documentation: https://stripe.com/docs/api/authentication
Official client library: https://github.com/stripe/stripe-java
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/java/Authentication.java

### Table of contents

00:00 Overview
00:08 Authorization header
00:18 Types of API keys
00:38 Publishable keys
01:00 Secret keys
01:44 Restricted keys
02:07 Webhook signing secrets
03:33 Roll API keys
04:03 Set API key globally
05:37 Set API key per-request
06:58 Authenticate requests for Stripe Connect per-request
09:44 Authenticate requests for Stripe Connect globally
10:45 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=t4iJ07E_tA8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/environment-variables-env-with-php</loc>
    <lastmod>2023-01-30T22:51:06Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/qAkxQIYHlUw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Environment Variables .env with PHP</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of managing environment variables with .env.

## Resources

- https://github.com/vlucas/phpdotenv

## Table of contents

1:18 Setting environment variables with export
2:25 Create .env file
2:55 Using .env with Stripe Samples
4:59 Using .env with phpdotenv

## Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=qAkxQIYHlUw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-does-this-work-in-javascript</loc>
    <lastmod>2026-03-04T20:14:35Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/q66M2hYiEcY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How does this work in JavaScript?</video:title>
      <video:description>You're probably wondering how the `this` keyword is set in JavaScript. There are a couple rules of thumb and things to look for that will help you understand what `this` is. We'll cover 4 different ways that methods are executed and how `this` will be bound for each. We'll also talk briefly about the differences with arrow functions

### Table of contents

Ways to call a function:

00:52 Function style overview - global object a.k.a. window in the browser
02:34 Call / Apply style overview - explicit binding
05:30 Constructor style overview - new keyword
06:14 Method style overview - dot operator
08:14 Function style demo
09:55 Call / Apply style demo
12:57 Constructor style demo
13:50 Method style demo
24:50 Class vs. prototype
29:03 function vs arrow fn
33:37 strict mode gotchas
35:15 bind
38:00 Implement myBind to see how bind might work under the hood

### Resources

MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
Code: https://gist.github.com/cjavdev/867ba2aecb695001ebdc3613d494f185
Let's connect: https://twitter.com/cjav_dev</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=q66M2hYiEcY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-stripe-go</loc>
    <lastmod>2023-01-30T22:53:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/oJRPV07bVS0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with stripe-go</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the stripe-go client library. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Documentation: https://stripe.com/docs/api/authentication
Official client library: https://github.com/stripe/stripe-go
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/go/authentication.go

### Table of contents

00:00 Overview
00:08 Authorization header
00:18 Types of API keys
00:38 Publishable keys
01:00 Secret keys
01:44 Restricted keys
02:07 Webhook signing secrets
03:33 Roll API keys
04:03 Set API key globally
05:07 Set API key per-request
06:58 Authenticate requests for Stripe Connect 
09:48 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=oJRPV07bVS0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/asp-net-webforms-payment-with-stripe</loc>
    <lastmod>2026-03-04T20:14:33Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/CGpMRtdxvmQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>ASP.NET Webforms Payment with Stripe</video:title>
      <video:description>Learn how to collect a one time payment with a custom form using ASP.NET webforms. 

The code for this episode is available here: https://github.com/cjavilla-stripe/dotnet-webforms-accept-a-payment 

Presenter: https://twitter.com/cjav_dev</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=CGpMRtdxvmQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-stripe-node</loc>
    <lastmod>2023-01-30T22:53:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/R5RoYDEIhCI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with stripe-node</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the stripe-node client library. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Documentation: https://stripe.com/docs/api/authentication
Official client library: https://github.com/stripe/stripe-node
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/node/authentication.js

### Table of contents

00:00 Overview
00:08 Authorization header
00:18 Types of API keys
00:38 Publishable keys
01:00 Secret keys
01:44 Restricted keys
02:07 Webhook signing secrets
03:33 Roll API keys
04:03 Set API key globally
05:10 Set API key per-request
06:30 Authenticate requests for Stripe Connect globally
09:30 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=R5RoYDEIhCI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/environment-variables-env-with-node-js</loc>
    <lastmod>2023-01-30T22:51:06Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/onhXVIvxFQU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Environment Variables .env with Node.js</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of managing environment variables with .env.

## Resources

- https://www.npmjs.com/package/dotenv

## Table of contents

1:18 Setting environment variables with export
2:25 Create .env file
2:55 Using .env with Stripe Samples
4:59 Using .env with Node.js

## Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=onhXVIvxFQU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/chrome-debugger-bug</loc>
    <lastmod>2026-03-04T20:14:34Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/3eP-lgYGGbc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Chrome Debugger Bug</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=3eP-lgYGGbc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-stripe-php</loc>
    <lastmod>2023-01-30T22:53:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/CeufP46S5BI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with stripe-php</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the stripe-php client library. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Documentation: https://stripe.com/docs/api/authentication
Official client library: https://github.com/stripe/stripe-php
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/php/authentication.php

### Table of contents

00:00 Overview
00:08 Authorization header
00:18 Types of API keys
00:38 Publishable keys
01:00 Secret keys
01:44 Restricted keys
02:07 Webhook signing secrets
03:33 Roll API keys
04:03 Set API key globally
06:10 Set API key per-request
08:12 Authenticate requests for Stripe Connect globally
11:30 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=CeufP46S5BI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/environment-variables-env-with-java</loc>
    <lastmod>2023-01-30T22:51:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/o1HsGbTZObQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Environment Variables .env with Java</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of managing environment variables with .env.

## Resources

- https://github.com/cdimascio/java-dotenv

## Table of contents

1:18 Setting environment variables with export
2:25 Create .env file
2:55 Using .env with Stripe Samples
4:59 Using .env with java-dotenv

## Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=o1HsGbTZObQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/transistor-fm-api-fetch-from-11ty</loc>
    <lastmod>2026-03-04T20:14:35Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ktEjaABp4aw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Transistor.fm API fetch from 11ty</video:title>
      <video:description>Sharing a little script that I run to list my Transistor.fm hosted podcast episodes using the Transistor.fm API. 

Here's the code for this episode: https://gist.github.com/cjavdev/47f1525569e05ac15786444ff35a72f0

Let's connect on Twitter: https://twitter.com/cjav_dev

I highly recommend Transistor and enjoy using it for avillatheory.com, if you want to try it out, use this affiliate link :) https://transistor.fm/?via=cj 

Full API reference: https://developers.transistor.fm/</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ktEjaABp4aw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-stripe-python</loc>
    <lastmod>2023-01-30T22:53:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/gRvlMeBks6k/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with stripe-python</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the stripe-python client library. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Documentation: https://stripe.com/docs/api/authentication
Official client library: https://github.com/stripe/stripe-python
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/python/authentication.py

### Table of contents

00:00 Overview
00:08 Authorization header
00:18 Types of API keys
00:38 Publishable keys
01:00 Secret keys
01:44 Restricted keys
02:07 Webhook signing secrets
03:33 Roll API keys
04:03 Set API key globally
05:33 Set API key per-request
06:02 Authenticate requests for Stripe Connect per-request
07:38 Authenticate requests for Stripe Connect globally
08:28 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=gRvlMeBks6k</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/environment-variables-env-with-ruby</loc>
    <lastmod>2023-01-30T22:51:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KRzt_vTZaLQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Environment Variables (.env) with Ruby</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of managing environment variables with .env.

### Resources

- https://github.com/bkeepers/dotenv

### Table of contents

1:18 Setting environment variables with export
2:25 Create .env file
2:55 Using .env with Stripe Samples
4:59 Using .env with Ruby

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KRzt_vTZaLQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/authentication-with-stripe-ruby</loc>
    <lastmod>2023-01-30T22:53:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8Db0nTVlKM0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Authentication with stripe-ruby</video:title>
      <video:description>Learn about API keys and how to authenticate requests to the Stripe API using the stripe-ruby client library. You can set API keys globally or per-request. In this episode, we cover secret keys, public or publishable keys, restricted keys, and webhook signing secrets. 

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Documentation: https://stripe.com/docs/api/authentication
Official client library: https://github.com/stripe/stripe-ruby
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/ruby/authentication.rb

### Table of contents

00:00 Overview
00:08 Authorization header
00:18 Types of API keys
00:38 Publishable keys
01:00 Secret keys
01:44 Restricted keys
02:07 Webhook signing secrets
03:33 Roll API keys
04:03 Set API key globally
04:55 Set API key per-request
05:50 Authenticate requests for Stripe Connect globally
08:04 Authenticate requests for Stripe Connect per-request
08:32 Conclusion

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8Db0nTVlKM0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-checkout-with-asp-net-webforms</loc>
    <lastmod>2026-03-04T20:14:35Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/6DDNgYxLHvU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Checkout with ASP.NET Webforms</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=6DDNgYxLHvU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-stripe-net</loc>
    <lastmod>2023-01-30T22:53:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/HZnzzHpGrMU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with Stripe.net</video:title>
      <video:description>Learn how to make requests to the Stripe API using the Stripe.net client library. You'll see how to format parameters and pass request body, query string params, and request headers.

### Presenter

CJ Avilla - Developer Advocate at Stripe  - https://twitter.com/cjav_dev

### Resources

Official client library: https://github.com/stripe/stripe-dotnet/
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/dotnet/requests/Program.cs

### Table of contents

00:00 Overview
01:16 API reference
04:10 Create an object passing no params
05:12 Retrieve single object
06:50 Create an object with scalar values
09:06 Create an object with enum values
10:42 Create an object with nested object
13:45 Create an object with a list of strings
15:00 Update an object with scalar values
17:13 Update an object with a list of nested objects
20:41 Retrieve a list of objects
22:50 Retrieve a list filtered by scalar
24:53 Delete an object
26:00 Custom methods overview
26:58 Custom method demo
30:40 Nested service method overview
31:08 Nested service method demo
33:34 Request headers overview
34:40 Request headers demo
39:19 Conclusion

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=HZnzzHpGrMU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-checkout-clientrefrenceid</loc>
    <lastmod>2026-03-04T20:14:36Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kslu9SKNtaw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Checkout clientRefrenceId</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kslu9SKNtaw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/environment-variables-env-with-net</loc>
    <lastmod>2023-01-30T22:51:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/QFf2HlOcD24/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Environment Variables .env with .Net</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of managing environment variables with .env. Note that this is how we use .env for Stripe samples, but you can also use .NET's built in secrets management.

### Resources

- https://github.com/tonerdo/dotnet-env

### Table of contents

1:18 Setting environment variables with export
2:25 Create .env file
2:55 Using .env with Stripe Samples
4:59 Using .env with DotNetEnv

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=QFf2HlOcD24</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-stripe-go</loc>
    <lastmod>2023-01-30T22:53:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Wkgftgu5nag/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with stripe-go</video:title>
      <video:description>Learn how to make requests to the Stripe API using the stripe-go client library. You'll see how to format parameters and pass request body, query string params, and request headers.

### Presenter

CJ Avilla - Developer Advocate at Stripe  - https://twitter.com/cjav_dev

### Resources

Official client library: https://github.com/stripe/stripe-go
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/go/demo_requests.go 

### Table of contents

00:00 Overview
01:16 API reference
04:10 Create an object passing no params
05:15 Retrieve single object
05:53 Create an object with scalar values
09:04 Create an object with enum values
11:03 Create an object with nested object
13:53 Create an object with a list of strings
15:19 Update an object with scalar values
17:12 Update an object with a list of nested objects
20:08 Retrieve a list of objects
21:40 Retrieve a list filtered by scalar
23:30 Delete an object
24:27 Custom methods overview
25:28 Custom method demo
29:10 Nested service method overview
29:38 Nested service method demo
32:42 Request headers overview
33:44 Request headers demo
35:48 Conclusion

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Wkgftgu5nag</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/livestream-save-card-details-for-later-with-net-core</loc>
    <lastmod>2026-03-04T20:14:36Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/U_AfLEpUTPs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[livestream] Save card details for later with .NET core</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=U_AfLEpUTPs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/environment-variables-env-with-go</loc>
    <lastmod>2023-01-30T22:51:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/TWF6VUyxQ84/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Environment Variables .env with Go</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of managing environment variables with .env.

## Resources

- https://github.com/joho/godotenv

## Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

## Table of contents

1:18 Setting environment variables with export
2:25 Create .env file
2:55 Using .env with Stripe Samples
4:59 Using .env with Go

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=TWF6VUyxQ84</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/environment-variables-env-with-python</loc>
    <lastmod>2023-01-30T22:51:06Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ecshCQU6X2U/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Environment Variables .env with Python</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of managing environment variables with .env.

## Resources

- https://pypi.org/project/python-dotenv/

## Table of contents

1:18 Setting environment variables with export
2:25 Create .env file
2:55 Using .env with Stripe Samples
4:59 Using .env with python-dotenv

## Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ecshCQU6X2U</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/translate-sinatra-to-rails</loc>
    <lastmod>2026-03-04T20:14:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/f5GwoBk1_F4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Translate Sinatra to Rails</video:title>
      <video:description>The code for this episode is available here: https://github.com/cjavdev/sinatra-to-rails-translation
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=f5GwoBk1_F4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-stripe-java</loc>
    <lastmod>2023-01-30T22:54:00Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/cg6xosdd2GM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with stripe-java</video:title>
      <video:description>Learn how to make requests to the Stripe API using the stripe-java client library. You'll see how to format parameters and pass request body, query string params, and request headers.

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Official client library: https://github.com/stripe/stripe-java
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/java/DemoRequest.java

### Table of contents

00:00 Overview
01:16 API reference
04:10 Create an object passing no params
05:45 Retrieve single object
06:36 Create an object with scalar values
08:40 Create an object with enum values
11:03 Create an object with nested object
13:41 Create an object with a list of strings
15:00 Update an object with scalar values
17:57 Update an object with a list of nested objects
21:55 Retrieve a list of objects
23:30 Retrieve a list filtered by scalar
25:28 Delete an object
26:30 Custom methods overview
27:28 Custom method demo
31:46 Nested service method overview
32:16 Nested service method demo
35:38 Request headers overview
36:43 Request headers demo
39:30 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=cg6xosdd2GM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-stripe-node</loc>
    <lastmod>2023-01-30T22:54:00Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_Ayi6wohGkc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with stripe-node</video:title>
      <video:description>Learn how to make requests to the Stripe API using the stripe-node client library. You'll see how to format parameters and pass request body, query string params, and request headers.

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Official client library: https://github.com/stripe/stripe-node
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/node/demo_requests.js

## Table of contents

00:00 Overview
01:16 API reference
04:10 Create an object passing no params
05:15 Retrieve single object
06:06 Create an object with scalar values
08:11 Create an object with enum values
11:53 Create an object with nested object
13:37 Create an object with a list of strings
14:57 Update an object with scalar values
16:36 Update an object with a list of nested objects
18:55 Retrieve a list of objects
20:10 Retrieve a list filtered by scalar
20:53 Delete an object
22:32 Custom methods overview
23:31 Custom method demo
26:23 Nested service method overview
26:53 Nested service method demo
28:55 Request headers overview
30:00 Request headers demo
31:40 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_Ayi6wohGkc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/how-sort-works-in-javascript</loc>
    <lastmod>2026-03-04T20:14:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2DATa8qEzWc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>How sort works in JavaScript</video:title>
      <video:description>Learn why sorting a list of numbers in javascript yields unexpected results and how to use a compare function. Also, we'll show how the sort function on the Array.prototype might be implemented by re-implementing it our own `Array.prototype.mySort` that accepts our own compare function.

00:00 sort basics
02:00 Implement mySort with the merge sort algorithm

### Code

https://gist.github.com/cjavdev/9fbfcce4fb16f0a70e43c8507b4962ea</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2DATa8qEzWc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-stripe-php</loc>
    <lastmod>2023-01-30T22:54:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Fc75MwzT4MI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with stripe-php</video:title>
      <video:description>Learn how to make requests to the Stripe API using the stripe-php client library. You'll see how to format parameters and pass request body, query string params, and request headers.

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Official client library: https://github.com/stripe/stripe-php
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/php/demo_requests.php

## Table of contents

00:00 Overview
01:16 API reference
04:10 Create an object passing no params
05:12 Retrieve single object
06:19 Create an object with scalar values
08:25 Create an object with enum values
10:50 Create an object with nested associative array
12:32 Create an object with a list of strings
14:01 Update an object with scalar values
15:24 Update an object with a list of nested associative arrays
17:30 Retrieve a list of objects
18:30 Retrieve a list filtered by scalar
20:15 Delete an object
20:52 Custom methods overview
21:50 Custom method demo
24:26 Nested service method overview
24:57 Nested service method demo
26:55 Request headers overview
28:00 Request headers demo
30:10 Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Fc75MwzT4MI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/part-1-of-building-puppygram-inspired-by-ig-but-for-dogs-with-logiebear</loc>
    <lastmod>2026-03-04T20:14:37Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/nRegjUcoR0E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Part 1 of building PuppyGram (inspired by IG, but for dogs)  with Logiebear!</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=nRegjUcoR0E</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/playing-codecombat-with-goofybud</loc>
    <lastmod>2026-03-04T20:14:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/SFAYvNBTcvA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Playing codeCombat with Goofybud</video:title>
      <video:description>We're going to start from scratch and play codeCombat with tips from my son.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=SFAYvNBTcvA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-stripe-python</loc>
    <lastmod>2023-01-30T22:54:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Hg5FkqSmV68/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with stripe-python</video:title>
      <video:description>Learn how to make requests to the Stripe API using the stripe-python client library. You'll see how to format parameters and pass request body, query string params, and request headers.

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Official client library: https://github.com/stripe/stripe-python
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/python/demo_requests.py

## Table of contents

00:00 Overview
01:16 API reference
04:10 Create an object passing no params
05:00 Retrieve single object
06:16 Create an object with scalar values
07:50 Create an object with enum values
09:36 Create an object with nested dict
11:50 Create an object with a list of strings
12:44 Update an object with scalar values
14:30 Update an object with a list of nested dicts
15:52 Retrieve a list of objects
17:16 Retrieve a list filtered by scalar
18:10 Delete an object
18:42 Custom methods overview
19:40 Custom method demo
21:48 Nested service method overview
22:17 Nested service method demo
24:10 Request headers overview
25:10 Request headers demo
27:01 Conclusion


### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Hg5FkqSmV68</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-requests-with-stripe-ruby</loc>
    <lastmod>2023-01-30T22:54:02Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ALYCKg7E7AA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making requests with stripe-ruby</video:title>
      <video:description>Learn how to make requests to the Stripe API using the stripe-ruby client library. You'll see how to format parameters and pass request body, query string params, and request headers.

### Presenter

CJ Avilla - Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Official client library: https://github.com/stripe/stripe-ruby
Code: https://github.com/stripe-samples/developer-office-hours/blob/master/2020-10-30-client-libraries/ruby/demo_requests.rb

### Table of contents

00:00 Overview
01:16 API reference
04:10 Create an object passing no params
04:48 Retrieve single object
05:52 Create an object with scalar values
07:23 Create an object with enum values
09:30 Create an object with nested hash
10:55 Create an object with a list of strings
12:22 Update an object with scalar values
14:00 Update an object with a list of nested hashes
15:33 Retrieve a list of objects
17:03 Retrieve a list filtered by scalar
18:40 Delete an object
19:10 Custom methods overview
20:12 Custom method demo
21:53 Nested service method overview
22:22 Nested service method demo
23:48 Request headers overview
24:50 Request headers demo
28:00 Conclusion

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or join us on Discord https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ALYCKg7E7AA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/dog-poop-box-build</loc>
    <lastmod>2026-03-04T20:14:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/c1nTJDsrzJk/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Dog poop box build</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=c1nTJDsrzJk</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/simple-stripe-checkout-page-with-php</loc>
    <lastmod>2026-03-04T20:14:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Ofyhamy76cQ/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Simple Stripe Checkout page with php</video:title>
      <video:description>https://gist.github.com/cjavilla-stripe/872a3509c902ec32a8cef82b39d8e0b8</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Ofyhamy76cQ</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/go-kart-test-track-day</loc>
    <lastmod>2026-03-04T20:14:38Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/11mK9n6Iieg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Go-kart test track day!</video:title>
      <video:description>DIY go-kart with this 1800W 48v motor kit:

https://amzn.to/3oTkASL 

Previous video with some of the construction: 

https://www.youtube.com/watch?v=LoiAkVZAbUw</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=11mK9n6Iieg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/next-js-graphcms-stripe-checkout-part-3</loc>
    <lastmod>2023-01-30T22:54:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/R2xT3ue-liY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Next.js, GraphCMS, Stripe Checkout part 3</video:title>
      <video:description>In this four part series, CJ Avilla and Jonathan Steele cover how to build a headless e-commerce application on Next.js backed by GraphCMS using Stripe Checkout for payments.

This is part 3 of 4 where we cover how to integrate Stripe Checkout.

### Presenters

Jonathan Steele, Developer Advocate at GraphCMS - https://twitter.com/ynnoj
CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Next.js documentation: https://nextjs.org/docs/getting-started
GraphCMS documentation: https://graphcms.com/docs
Stripe Checkout documentation: https://stripe.com/docs/checkout
Repository with the code for the demo: https://github.com/cjavilla-stripe/next-graphcms-stripe-checkout
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=R2xT3ue-liY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/next-js-graphcms-stripe-checkout-part-2</loc>
    <lastmod>2023-01-30T22:51:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GHW-gmj9ZwU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Next.js, GraphCMS, Stripe Checkout part 2</video:title>
      <video:description>In this four part series, CJ Avilla and Jonathan Steele cover how to build a headless e-commerce application on Next.js backed by GraphCMS using Stripe Checkout for payments.

This is part 2 of 4 where we cover how to build product pages with Next.js backed by GraphCMS.

### Presenters

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev
Jonathan Steele, Developer Advocate at GraphCMS - https://twitter.com/ynnoj

### Resources

Next.js documentation: https://nextjs.org/docs/getting-started
GraphCMS documentation: https://graphcms.com/docs
Stripe Checkout documentation: https://stripe.com/docs/checkout
Repository with the code for the demo: https://github.com/cjavilla-stripe/next-graphcms-stripe-checkout
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GHW-gmj9ZwU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/next-js-graphcms-stripe-checkout-part-4</loc>
    <lastmod>2023-01-30T22:54:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/y8L3OephZPs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Next.js, GraphCMS, Stripe Checkout part 4</video:title>
      <video:description>In this four part series, CJ Avilla and Jonathan Steele cover how to build a headless e-commerce application on Next.js backed by GraphCMS using Stripe Checkout for payments.

This is part 4 of 4 where we cover how to automate fulfillment and keep track of orders in GraphCMS when payment succeeds in Checkout.

### Presenters

Jonathan Steele, Developer Advocate at GraphCMS - https://twitter.com/ynnoj
CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Next.js documentation: https://nextjs.org/docs/getting-started
GraphCMS documentation: https://graphcms.com/docs
Stripe Checkout documentation: https://stripe.com/docs/checkout
Repository with the code for the demo: https://github.com/cjavilla-stripe/next-graphcms-stripe-checkout
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=y8L3OephZPs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/next-js-graphcms-stripe-checkout-part-1</loc>
    <lastmod>2023-01-30T22:51:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/z6m0Tnj2WB0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Next.js, GraphCMS, Stripe Checkout part 1</video:title>
      <video:description>In this four part series, CJ Avilla and Jonathan Steele cover how to build a headless e-commerce application on Next.js backed by GraphCMS using Stripe Checkout for payments.

This is part 1 of 4 where we cover how to build your GraphCMS schema for products.

### Presenters

Jonathan Steele, Developer Advocate at GraphCMS - https://twitter.com/ynnoj
CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Resources

Next.js documentation: https://nextjs.org/docs/getting-started
GraphCMS documentation: https://graphcms.com/docs
Stripe Checkout documentation: https://stripe.com/docs/checkout
Repository with the code for the demo: https://github.com/cjavilla-stripe/next-graphcms-stripe-checkout
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=z6m0Tnj2WB0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-net-example-for-server-side-paymentintent-confirmation</loc>
    <lastmod>2026-03-04T20:14:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/g7k7NIJUc7o/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe.NET example for server side PaymentIntent confirmation</video:title>
      <video:description>Adding .NET example for server side PaymentIntent confirmation</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=g7k7NIJUc7o</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/european-payment-methods-for-connect-platforms</loc>
    <lastmod>2023-01-30T22:51:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ECYrkpsv1OU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>European payment methods for Connect platforms</video:title>
      <video:description>In this edition CJ Avilla and Clinton Blackburn cover how to build a global e-commerce platform that enables sellers around the world to accept payments from European customers (~20% of online commerce) using their preferred payment methods. This Ruby on Rails based demo shows a Stripe Connect and Stripe Checkout integration and the new capabilities APIs. 

### Presenters

Clinton Blackburn, Software Engineer at Stripe https://twitter.com/ccb621
CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents

00:05 - Introduction
01:02 - Overview of payment methods
03:39 - Rails setup
05:39 - Scaffolding for store and order models
08:52 - Onboarding stores (Connect accounts)
17:26 - Redirect to Checkout from the storefront
27:20 - Add payment method types
32:40 - Display supported payment method types
40:00 - Configurable payment method types

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.

#Stripe #Checkout #Connect
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ECYrkpsv1OU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/setting-up-react-in-a-new-rails-application</loc>
    <lastmod>2026-03-04T20:14:39Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/KqBARbg28NA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Setting up React in a new Rails application</video:title>
      <video:description>https://github.com/cjavilla-stripe/office-hours-rails-react
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=KqBARbg28NA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-on-rails-starter</loc>
    <lastmod>2023-01-30T22:51:42Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/vULdSKCUhOs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby on Rails starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of working with Rails and how those pertain to other office hours episodes. This episode does not implement a Stripe integration, however serves as foundational content for other episodes.

## Resources
- Code for this demo https://github.com/cjavilla-stripe/office-hours-rails
- Rails web framework https://rubyonrails.org/
- curl command line tool https://curl.haxx.se/
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter

## Table of contents

00:05 Introduction
02:50 Setup a new Rails application
03:59 File and directory tour
05:58 Configure API keys and dependencies
09:26 Test API config from Rails console
12:20 Controllers and actions
14:20 Routing
17:10 Add GET route to server to render JSON
21:27 Data models
24:30 Add create method to controller
27:00 Make POST request from front end
30:24 Dealing with CSRF
33:50 Make GET request from front end
38:00 Webhooks controller

## Presenter
CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

What would you like to see in future episodes? https://docs.google.com/forms/d/e/1FAIpQLScx_BtXcakIJ_EFso-4-fnCrTVFXxsh-5BPM-SdhNG6W7kzbw/viewform?usp=sf_link
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=vULdSKCUhOs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment-with-stripe-rails-and-paymentintents</loc>
    <lastmod>2026-03-04T20:14:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/VY9IwMsMSMY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment with Stripe, Rails, and PaymentIntents</video:title>
      <video:description>Accept a one-time payment with Stripe, Rails, and PaymentIntents

Code for this episode: https://github.com/cjavilla-stripe/rails-accept-a-payment

If you have any questions, feel free to reach out to me on Twitter @cjav_dev :D
#rails #rubyonrails</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=VY9IwMsMSMY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/building-a-train-game-with-react</loc>
    <lastmod>2026-03-04T20:14:42Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/SZuSanogjv0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Building a train game with React</video:title>
      <video:description>Inspired by the coding train!</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=SZuSanogjv0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/cvc-re-collection-with-stripe-elements</loc>
    <lastmod>2026-03-04T20:14:41Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MM3ezC89178/hqdefault.jpg</video:thumbnail_loc>
      <video:title>CVC Re-collection with Stripe Elements</video:title>
      <video:description>Code for this demo: https://github.com/cjavilla-stripe/cvc-recollection.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MM3ezC89178</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/trying-out-laravel-cashier</loc>
    <lastmod>2026-03-04T20:14:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/yBhyN6JwQo0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Trying out Laravel Cashier</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=yBhyN6JwQo0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/adding-support-for-changing-plans</loc>
    <lastmod>2026-03-04T20:14:42Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/vDbDfQByIRo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Adding support for changing plans</video:title>
      <video:description>Continuing to work on a Stripe Sample for collecting recurring payments with a custom Elements form.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=vDbDfQByIRo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/working-on-the-example-for-custom-stripe-billing-integration</loc>
    <lastmod>2026-03-04T20:14:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/EnEUt8CCryE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Working on the example for custom Stripe Billing integration</video:title>
      <video:description>Working on our sample for building a custom @StripeDev billing integration to take recurring payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=EnEUt8CCryE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/hacktoberfest-2020-getting-started-with-stripe-and-open-source-q-a</loc>
    <lastmod>2023-01-30T22:51:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/59SVNFjGI1Q/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Hacktoberfest 2020 - Getting started with Stripe and open-source Q&amp;A</video:title>
      <video:description>In this edition of Stripe Developer Office hours, we review some basics for getting started with Stripe, then visit with open-source contributors in the Stripe ecosystem.

### Presenters

CJ Avilla - https://twitter.com/cjav_dev
Nick DeJesus - https://twitter.com/Dayhaysoos
Jofferson Tiquez - https://twitter.com/jrtiquez
Jerome Leclanche - https://twitter.com/Adys

### Table of contents

00:05 Introduction
00:46 Stripe at a glance
06:12 Getting started with Stripe
08:12 Code sample walk through
18:00 Q&amp;A with maintainers

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.

#Stripe #OpenSource
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=59SVNFjGI1Q</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/cj-and-sons-build-pokemon-marvel-themed-hangman</loc>
    <lastmod>2026-03-04T20:14:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/HWT7xrlVimg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>CJ and sons build Pokémon / Marvel themed hangman</video:title>
      <video:description>The kids and I hack together a rails app for playing hangman. We use standard Ruby on Rails CRUD, build simple game mechanics for hangman, theme it with pikachu and marvel characters using the Marvel API.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=HWT7xrlVimg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/quick-and-dirty-twitter-api-play</loc>
    <lastmod>2026-03-04T20:14:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/t0wmp923Tcs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Quick and dirty Twitter API play</video:title>
      <video:description>Hacking together a quick app with the Twitter API to learn more about my followers and how my tweets are being engaged.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=t0wmp923Tcs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-a-payment</loc>
    <lastmod>2023-01-30T22:51:40Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2PJTcShgBps/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept a payment</video:title>
      <video:description>In this refreshed episode, CJ covers how to take a one-time payment in an SCA ready way with Stripe.js and Ruby.

### Resources

Official guide: https://stripe.com/docs/payments/accept-a-payment
Demo repo: https://github.com/stripe-samples/developer-office-hours/tree/master/2020-10-08-accept-a-payment

### Presenter

CJ Avilla - Developer advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents

00:05 - Intro
01:49 - Demo overview
02:12 - Install Stripe sample
03:23 - Create payment intent on the server
06:58 - Collect card details on the client
12:00 - Confirm payment intent on client
14:50 - Test payment flow
15:55 - Reasons for "No such payment intent: pi_"
19:29 - Add support for email receipts

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.

#Stripe #SCA
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2PJTcShgBps</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/beta-testing-new-subscription-creation-flow</loc>
    <lastmod>2026-03-04T20:14:44Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/sWVQfx1sQHI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Beta testing new Subscription creation flow</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=sWVQfx1sQHI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-checkout-customer-portal</loc>
    <lastmod>2026-03-04T20:14:46Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/PJk6cQGDovg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Checkout + Customer Portal</video:title>
      <video:description>Building a new Stripe Sample showing how to integrate Stripe Checkout and the new Customer Portal as the quickest way to get started with a brand new SAAS application.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=PJk6cQGDovg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/accept-variable-amounts-with-stripe-checkout-using-php</loc>
    <lastmod>2026-03-04T20:14:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/FOLRATK4pVA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Accept variable amounts with Stripe Checkout using PHP</video:title>
      <video:description>In this livestream, I answered a request from one of our users to show how to take variable amount donations with Stripe Checkout using php. We use the `price_data` attribute to create Price objects on the fly.

We show how to use metadata, accept different currencies, and talked a bit about associating an existing Stripe customer object with new Checkout Sessions.

Code! https://github.com/cjavilla-stripe/checkout-php-variable</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=FOLRATK4pVA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/remote-office-2020</loc>
    <lastmod>2026-03-04T20:14:45Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/M6vSKOCbevs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Remote Office 2020</video:title>
      <video:description>Links to the gear in the description 👇

Camera
  Sony a6400 - https://amzn.to/2FkKfm0
  Scissor mount - https://amzn.to/3iomyYa
  Elgato Cam link - https://amzn.to/3inFxlM

Mic
  Shure SM7B Microphone - https://amzn.to/33fKy9G
  Mic Activator - https://amzn.to/3kapkke
  Scarlet Solo - https://amzn.to/3htSd9C
  Mic Arm - https://amzn.to/35uEg8H

Lights
  Studio Light Kit - https://amzn.to/2Fw7mJT

Backdrops
  Wood - https://amzn.to/2GLTDiQ
  Green Screen - https://amzn.to/3bQ6VGw

Desk
  Uplift v2 frame - https://www.upliftdesk.com/
  Ikea top - https://www.ikea.com/us/en/p/linnmon-tabletop-white-00251135/
  27 inch LG 4K Monitor - https://amzn.to/2ZrZPmw
  CODE 87-Key Mechanical Keyboard - Cherry MX Clear - https://www.wasdkeyboards.com/code-v3-87-key-mechanical-keyboard-cherry-mx-clear.html
  MStand for Macbook Pro - https://amzn.to/3hrI1hv
  
  Wrist pad 11in. - https://www.wasdkeyboards.com/11-wrist-pad.html
  Coffee Mug - https://amzn.to/3kdXTpX
  Water Mug - https://amzn.to/35toFGL
  Google Home - (No longer available, I'd get this instead and we have these elsewhere at home - https://store.google.com/us/product/google_nest_mini) 

Bike
  Peloton - https://www.onepeloton.com/referrals/PV6BBX/social-share?source=youtube
  Phone mount - https://amzn.to/3bNYtHQ
  Computer tray - https://amzn.to/2DRkPvw

Fans
  Floor Fan - https://amzn.to/3bQn3YB
  Ceiling Fan - https://www.lowes.com/pd/Harbor-Breeze-Mazon-44-in-Brushed-Nickel-LED-Indoor-Flush-Mount-Ceiling-Fan-with-Light-Kit-and-Remote-3-Blade/1001328076
  Diffuser - https://amzn.to/33ipJuc</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=M6vSKOCbevs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-checkout-82e2f059-a086-465c-9f85-b5e783dc2e60</loc>
    <lastmod>2023-01-30T22:51:43Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/UjcSWxPNo18/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Checkout</video:title>
      <video:description>In this edition CJ Avilla and Mari Puncel cover the newest features of Stripe Checkout, build an integration with node.js, and cover some best practices.

### Presenters

Mari Puncel, Engineering Manager @ Stripe
CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Table of contents

00:05 - Introduction
01:20 - Overview of Stripe Checkout
04:22 - Implementation review
06:15 - Install developer-office-hours Stripe sample
08:13 - Create Checkout Session
11:21 - Inventory modeling
15:35 - Set up frontend
20:41 - Add success page
25:05 - Expand line items
28:13 - Refactor to collect recurring payments
29:10 - Fixed tax rates
30:58 - Dynamic tax rates
33:30 - Coupons, promotion codes, and discounts
37:22 - Wire webhook handler
40:55 - Conclusion

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=UjcSWxPNo18</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/intro-to-values-and-types-in-c</loc>
    <lastmod>2026-03-04T20:14:46Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/d9QY7-3QQHg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Intro to values and types in C#</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=d9QY7-3QQHg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/intro-to-values-and-types-in-go</loc>
    <lastmod>2026-03-04T20:14:47Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/b7c8K8HFpOo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Intro to values and types in go</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=b7c8K8HFpOo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/building-a-site-with-rails-to-sell-hand-made-bracelets</loc>
    <lastmod>2026-03-04T20:14:46Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Rax8LwwiX9g/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Building a site with Rails to sell hand made bracelets</video:title>
      <video:description>It's live! Check out the final project and order at buy.logie.rocks</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Rax8LwwiX9g</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/intro-to-values-and-types-in-php</loc>
    <lastmod>2026-03-04T20:14:47Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/PZKYmQh6kb0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Intro to values and types in PHP</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=PZKYmQh6kb0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/building-a-memory-game-with-react</loc>
    <lastmod>2026-03-04T20:14:48Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Y47kSCiQCN0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Building a memory game with React</video:title>
      <video:description>Father and son pair program a simple implementation of a memory card game to start learning React.js

Code available over here: https://github.com/cjavdev/memory

Follow @cjav_dev on twitter to know about future live episodes 😊</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Y47kSCiQCN0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/intro-to-values-and-types-in-python</loc>
    <lastmod>2026-03-04T20:14:47Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/F81pjbGk4UY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Intro to values and types in python</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=F81pjbGk4UY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/intro-to-values-and-types-in-ruby</loc>
    <lastmod>2026-03-04T20:14:48Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_h45Ty1mPJ4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Intro to values and types in ruby</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_h45Ty1mPJ4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/add-support-for-a-dotnet-server-to-a-stripe-checkout-one-time-payments-sample</loc>
    <lastmod>2026-03-04T20:14:49Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Smwc7mtyFHY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Add support for a #Dotnet server to a Stripe Checkout one time payments sample</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Smwc7mtyFHY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/adding-support-for-golang-server-to-stripe-sample-for-checkout</loc>
    <lastmod>2026-03-04T20:14:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/OoheVGnMfU0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Adding support for golang server to Stripe Sample for Checkout</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=OoheVGnMfU0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/intro-to-values-and-types-in-javascript</loc>
    <lastmod>2026-03-04T20:14:49Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/LhMPRWOtdZ4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Intro to Values and Types in JavaScript</video:title>
      <video:description>In this edition, we'll start from the very basics and talk about what values and types are in the context of programming. These concepts are covered at a high level, then we show some examples and talk about commenting code in, commenting code out, evaluating expressions, and reading error messages.

@cjav_dev on Twitter</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=LhMPRWOtdZ4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/fixing-a-flakey-shorted-dewalt-20v-drill</loc>
    <lastmod>2026-03-04T20:14:50Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/72ENpeAsw94/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Fixing a flakey, shorted, Dewalt 20V drill</video:title>
      <video:description>My Dewalt 20V drill has been flakey since I got it about 3 years before this video. I discovered and fixed some bad soldering. Hope this is helpful for others.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=72ENpeAsw94</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-video-audio-source</loc>
    <lastmod>2026-03-04T20:14:52Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/WOUNDWqdTJM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: video, audio, source</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=WOUNDWqdTJM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-forms</loc>
    <lastmod>2026-03-04T20:14:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/c_UE13mWjAA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: forms</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=c_UE13mWjAA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-lists-ul-ol-li-dl-dt-dd</loc>
    <lastmod>2026-03-04T20:14:52Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/F1bofxImJ3Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: lists! ul, ol, li, dl, dt, dd,</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=F1bofxImJ3Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-table-tr-td</loc>
    <lastmod>2026-03-04T20:14:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kNcJKPRUjuY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: table, tr, td</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kNcJKPRUjuY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-img</loc>
    <lastmod>2026-03-04T20:14:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/4g6mA3IEPic/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: img</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=4g6mA3IEPic</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-links</loc>
    <lastmod>2026-03-04T20:14:53Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/jUBOzpbb8Mc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: links</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=jUBOzpbb8Mc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/bear-twerking</loc>
    <lastmod>2026-03-04T20:14:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/v_VYpQDgBiw/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Bear twerking</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=v_VYpQDgBiw</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-text-formatting</loc>
    <lastmod>2026-03-04T20:14:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/qYOYX9ANzzc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: text formatting</video:title>
      <video:description>Learn about formatting text with some basic HTML elements.

- strong
- b
- em
- i
- small
- del
- mark
- sup and sub</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=qYOYX9ANzzc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-p-h1-br-tags</loc>
    <lastmod>2026-03-04T20:14:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/XpCRA9pWfeM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: p, h1, br tags</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=XpCRA9pWfeM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-attributes</loc>
    <lastmod>2026-03-04T20:14:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/HSEA6BzgagI/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: Attributes</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=HSEA6BzgagI</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/making-nogal-s-logo-with-sketch</loc>
    <lastmod>2026-03-04T20:14:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/uEX7gOUxbXY/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Making Nogal's Logo with Sketch</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=uEX7gOUxbXY</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-head-and-body</loc>
    <lastmod>2026-03-04T20:14:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/AdC4NraO728/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML: head and body</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=AdC4NraO728</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/html-101</loc>
    <lastmod>2026-03-04T20:14:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/mHyIAOGfkoc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>HTML 101</video:title>
      <video:description>Intro to a series of videos for the most beginner viewers.</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=mHyIAOGfkoc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/hose</loc>
    <lastmod>2026-03-04T20:14:56Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/nwqNheGZkzE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Hose</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=nwqNheGZkzE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/bbq</loc>
    <lastmod>2026-03-04T20:14:58Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2p9I78GSUPo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>BBQ</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2p9I78GSUPo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/bear-on-back-yard-slackline</loc>
    <lastmod>2026-03-04T20:14:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/aCtVd0Ig98w/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Bear on back yard slackline</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=aCtVd0Ig98w</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/responding-to-disputes</loc>
    <lastmod>2023-01-30T22:51:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/FrX8UerYmVg/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Responding to disputes</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla automates the dispute response process. This episode uses Node.js and starts from the checkout-one-time-payments Stripe Sample available here: https://github.com/stripe-samples/checkout-one-time-payments

## Resources
- Official Guide https://stripe.com/docs/disputes/responding
- Support article regarding COVID-19 related dispute responses https://support.stripe.com/questions/covid-19-dispute-response-guidance
- File uploads https://stripe.com/docs/file-upload

### Table of contents

2:30 setup Checkout store from sample
4:00 respond to a dispute from the dashboard (Note this is the old UI)
8:16 data collection best practices
12:50 add terms, conditions, and privacy policy
16:55 prefill dispute data on webhook event
32:20 build custom dispute UI
44:29 frequently asked questions about disputes with Connect

### Presenter

CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=FrX8UerYmVg</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/ruby-sinatra-starter</loc>
    <lastmod>2023-01-30T22:51:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/8aA9Enb8NVc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Ruby Sinatra Starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of working with Ruby Sinatra. For a getting started guide for Ruby on Rails checkout this other video: https://youtu.be/vULdSKCUhOs. 

### Resources

Sinatra web framework http://sinatrarb.com/
curl command line tool https://curl.haxx.se/
dotenv Ruby gem https://github.com/bkeepers/dotenv
Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
Stripe Event Types https://stripe.com/docs/api/events/types
Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter

### Table of contents

01:40 Agenda
02:39 Install starter with Stripe CLI
03:43 Create directory structure
03:54 Implement base client HTML
05:48 Install dependencies
08:32 Implement base server.rb
11:36 Add GET route for html file
13:20 Configure Sinatra
19:27 Add GET route for JSON to server
21:05 Add fetch to client to retrieve public key
24:30 Add POST route for JSON to server
28:10 Add fetch POST from client to server
36:33 Add webhook handler

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=8aA9Enb8NVc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/php-slim-starter</loc>
    <lastmod>2023-01-30T22:51:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/sGcNPFX1Ph4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>PHP Slim Starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of PHP with Slim.

### Resources

- Slim web framework http://www.slimframework.com/
- curl command line tool https://curl.haxx.se/
- phpdotenv https://github.com/vlucas/phpdotenv
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents

00:05 Introduction
01:48 Agenda
02:20 See how to install with Stripe CLI
03:25 Create client and server directories
04:10 Add boilerplate HTML
06:18 Install dependencies with composer
08:05 Create index.php
09:30 Test API call to Stripe
11:00 Setup Slim
13:20 Add a GET routes
17:40 Make GET request from client
19:30 Chrome devtools overview
21:40 Add a POST route
25:40 Make POST request from client

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=sGcNPFX1Ph4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/node-js-express-starter</loc>
    <lastmod>2023-01-30T22:51:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/rPR2aJ6XnAc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Node.js Express Starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of Node.js and Express.

### Resources

- Express web framework https://expressjs.com/
- curl command line tool https://curl.haxx.se/
- dotenv https://www.npmjs.com/package/dotenv
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents

00:05 Introduction
02:20 See how to install with Stripe CLI
03:06 Create client and server directories
03:18 Add boilerplate HTML
04:30 Install dependencies with npm
05:42 Create server.js
07:00 Test API call to Stripe
08:20 Setup Express.js
13:48 Add a GET routes
15:30 Make GET request from client
16:34 Chrome devtools overview
19:20 Add a POST route
22:42 Make POST request from client
29:15 Webhook handlers

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=rPR2aJ6XnAc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/python-flask-starter</loc>
    <lastmod>2023-01-30T22:51:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/7Ul1vfmsDck/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Python Flask Starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of Python and Flask.

## Resources
- Flask web framework https://flask.palletsprojects.com/en/1.1.x/
- curl command line tool https://curl.haxx.se/
- python-dotenv https://pypi.org/project/python-dotenv/
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter

## Table of contents

02:17 Install starter with Stripe CLI
03:10 Setup directory structure
03:24 Basic HTML
05:05 Install dependencies with pip
06:09 Start a basic server.py
08:42 Add GET routes to the server
14:04 Make GET request from client
18:04 Add POST route to the server
22:20 Make POST request from client
27:27 Add basic webhook handler

## Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=7Ul1vfmsDck</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/go-and-echo-starter</loc>
    <lastmod>2023-01-30T22:51:16Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/ePmEVBu8w6Y/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Go and Echo starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of Go and Echo.

### Resources

- Echo web framework https://echo.labstack.com/
- curl command line tool https://curl.haxx.se/
- godotenv https://github.com/joho/godotenv
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter

### Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Table of contents

00:05 Introduction
01:45 How to jump to the end with `stripe samples create`
03:00 Setup client-side boiler plate
04:39 Setup server-side boiler plate
07:34 Make API call to Stripe from server
09:38 Install and configure echo
16:30 Test server endpoints with curl
17:04 Add GET route to server
19:05 Make GET request from client-side
20:48 Add POST route to server
25:07 Make POST request from client-side
31:20 Handle webhook notifications

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=ePmEVBu8w6Y</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/net-core-starter</loc>
    <lastmod>2023-01-30T22:51:14Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2-mMOB8MhmE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>.NET Core Starter</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of .NET Core and how it's used with Stripe Samples and Developer Office Hours.

## Resources

- .NET Core https://docs.microsoft.com/en-us/dotnet/core/
- curl command line tool https://curl.haxx.se/
- DotNetEnv https://github.com/tonerdo/dotnet-env
- Stripe.net https://github.com/stripe/stripe-dotnet/
- Stripe Webhooks Guide https://stripe.com/docs/webhooks/build
- Stripe Event Types https://stripe.com/docs/api/events/types
- Code: https://github.com/stripe-samples/developer-office-hours/tree/master/starter

## Table of contents

0:05 Introduction
2:00 Skip to the end with Stripe CLI
3:29 Initialize project
3:39 Implement simple client
5:35 Create webapp with Stripe CLI
6:32 Update launch settings
7:30 Load environment variables
10:47 Update Startup.cs
12:45 Setup StripeOptions settings class
15:24 Create billing controller
18:00 Create GET route on server
22:40 Make GET request from client
24:20 Make POST request from client
26:50 Create POST route on server
35:08 Make API requests to Stripe
39:35 Configure webhook endpoint
47:58 Test webhooks with Stripe CLI
54:00 Conclusion

## Presenter

CJ Avilla, Developer Advocate at Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2-mMOB8MhmE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/lumpy-payments-with-subscription-schedules</loc>
    <lastmod>2023-01-30T22:51:13Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/2gws-r392I8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Lumpy payments with Subscription Schedules</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through how to use Subscription Schedules to make the payments for a Subscription "lumpy" meaning take a lower amount for a period, then revert back to the original amount.

## Resources
- Official Guide https://stripe.com/docs/billing/subscriptions/subscription-schedules

## Presenter

CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=2gws-r392I8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pay-in-installments</loc>
    <lastmod>2023-01-30T22:51:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/YBSBcjyKWWU/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Pay in installments</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through how to collect a large payment in installments using a Subscription.

## Resources
- Official Guide https://stripe.com/docs/billing/subscriptions/creating
- Stripe CLI https://github.com/stripe/stripe-cli https://www.youtube.com/watch?v=Psq5N5C-FGo&amp;list=PLy1nL-pvL2M4N3kfPoZ0igtbMj3K3Jdr_&amp;index=2&amp;t=0s 
- Express Starter https://www.youtube.com/watch?v=rPR2aJ6XnAc&amp;list=PLy1nL-pvL2M4N3kfPoZ0igtbMj3K3Jdr_&amp;index=11&amp;t=0s
- Environment Variables https://www.youtube.com/watch?v=onhXVIvxFQU&amp;list=PLy1nL-pvL2M4N3kfPoZ0igtbMj3K3Jdr_&amp;index=15&amp;t=0s

## Table of contents

0:05 Intro
0:49 Agenda
1:55 Demo
3:01 Install sample
4:01 Create plans
7:41 Setup client HTML
12:56 Create SetupIntent
14:45 Start store.js
17:28 Confirm card setup
23:54 Add create customer and subscription to server
32:52 Pass client data to server
34:50 Test

## Presenter

CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=YBSBcjyKWWU</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/pause-a-stripe-subscription</loc>
    <lastmod>2023-01-30T22:51:17Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/177SsXpvy3I/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Pause a Stripe subscription</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the new Subscription pausing feature.

## Resources
Official Guide: https://stripe.com/docs/billing/subscriptions/pausing
Demo Repo: https://github.com/stripe-samples/developer-office-hours/tree/master/2020-04-02-pausing-subscriptions
Stripe CLI: https://github.com/stripe/stripe-cli https://www.youtube.com/watch?v=Psq5N5C-FGo&amp;list=PLy1nL-pvL2M4N3kfPoZ0igtbMj3K3Jdr_&amp;index=2&amp;t=0s 
Sinatra Starter: https://www.youtube.com/watch?v=8aA9Enb8NVc&amp;list=PLy1nL-pvL2M4N3kfPoZ0igtbMj3K3Jdr_&amp;index=10&amp;t=0s
Environment Variables: https://www.youtube.com/watch?v=KRzt_vTZaLQ&amp;list=PLy1nL-pvL2M4N3kfPoZ0igtbMj3K3Jdr_&amp;index=5&amp;t=0s 

### Presenter

CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Table of contents

00:05 Introduction
01:00 See what we'll build
02:06 Install sample boiler plate
02:47 Setup basic list of subscriptions
07:10 Setup basic detail for subscription
10:00 Add front-end to pause or reactivate
18:27 Add server logic to pause or reactivate

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=177SsXpvy3I</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/codemod-sed</loc>
    <lastmod>2026-03-04T20:14:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_ogopzhnOo8/hqdefault.jpg</video:thumbnail_loc>
      <video:title>codemod + sed</video:title>
      <video:description>How to make wide sweeping changes to a codebase with codemod or sed.

https://github.com/facebook/codemod

https://www.gnu.org/software/sed/manual/html_node/Addresses-overview.html</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_ogopzhnOo8</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/introduction-to-the-stripe-cli</loc>
    <lastmod>2023-01-30T22:51:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Psq5N5C-FGo/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Introduction to the Stripe CLI</video:title>
      <video:description>In this edition of Stripe Developer Office Hours, follow along as CJ Avilla walks through the fundamentals of using the Stripe Command Line Interface, or simply “the CLI”. We cover getting started, using multiple API commands, how to test webhooks, and more.

### Resources
- Full Reference: https://stripe.com/docs/cli
- Download the Stripe CLI: https://github.com/stripe/stripe-cli 
- Using the Stripe CLI: https://stripe.com/docs/stripe-cli
- jq: https://stedolan.github.io/jq/

### Table of contents

01:35 - Installation
02:32 - Getting started
02:34 - `stripe`
03:00 - `stripe -v`
03:21 - `stripe status`
03:34 - Connecting to your Stripe account
04:42 - `stripe plans list`
04:54 - `stripe config`
05:26 - Connecting a second Stripe account
07:00 - API Resource Commands
07:15 - Create a Customer and subscribe them to a Plan
15:07 - Pairing Stripe CLI with jq
17:28 - Webhook Commands
18:13 - `stripe listen`
21:00 - `stripe trigger`
25:36 - Forwarding events to local webhook handler
27:40 - Resending events
28:36 - `stripe serve`
29:23 - `stripe samples`
32:07 - Quick Wins ⚡️

## Presenter

CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team at https://support.stripe.com/ or on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Psq5N5C-FGo</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/collect-donations-with-transistor-fm-website</loc>
    <lastmod>2026-03-04T20:15:00Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/Dqj-K6_f6uM/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Collect Donations with Transistor.fm Website</video:title>
      <video:description>The code used in this demo:

https://gist.github.com/w1zeman1p/71da2a3b1dba726edbb381bdadc17945</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=Dqj-K6_f6uM</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/parts-of-a-url</loc>
    <lastmod>2026-03-04T20:14:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GwVg5bvIl_g/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Parts of a URL</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GwVg5bvIl_g</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/legacy-ach-bank-account-setup</loc>
    <lastmod>2023-01-30T22:51:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/_1EX-DrikoA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>[legacy] ACH bank account setup</video:title>
      <video:description>Updated video: https://youtu.be/Q9Muz8OEZYk 

Join us for Stripe Developer Office Hours and get your questions about taking payment directly from a bank account with ACH. Our engineers will walk you through the basics of Collecting and Verifying bank account details.

## Table of contents

00:05 Intro
01:02 See what we'll build
03:12 Initialize server code
08:15 Setup client with Plaid link
13:17 Setup exchange token route
24:00 Create test charge
25:00 Manually verify bank details with microdeposits

## Resources
Official Guide - https://stripe.com/docs/ach

## Presenter
CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=_1EX-DrikoA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/connect-onboarding-requirements</loc>
    <lastmod>2023-01-30T22:51:04Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kzVZaXDWyVE/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Connect onboarding requirements</video:title>
      <video:description>Join us for Stripe Developer Office Hours and ask your questions regarding the upcoming changes to Connect Onboarding Requirements. Our engineers will walk you through the basics of migrating an account with legacy_payments capability to the new card_payments and transfers capabilities.

## Resources
Official Guide - https://stripe.com/docs/connect/connect-onboarding
.env - https://pypi.org/project/python-dotenv/
Stripe CLI - https://github.com/stripe/stripe-cli

## Presenter
CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

## Table of contents

00:05 Introduction
04:23 Stripe CLI installation and linking
05:00 Create legacy test connected account
07:07 Request card_payments and transfer capabilities
09:20 Review requirements hash
10:00 Update account with business type, profile, and URL
11:00 Update account with address, name, and tax ID
13:55 Add a person to the account
15:50 Review person requirements
16:04 Update person details
18:00 Review account requirements
19:25 Remove legacy_payments capability

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kzVZaXDWyVE</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-issuing</loc>
    <lastmod>2023-01-30T22:51:05Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/knBWhYMqLds/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Issuing</video:title>
      <video:description>Join us for Stripe Developer Office Hours and ask your questions about issuing new Cards and Cardholders through the API with Issuing. Our expert engineers will walk you through the basics of creating cardholders, cards and handling authorization requests with ruby on rails.

Learn more about and request an invite to Stripe Issuing here:
https://stripe.com/issuing

### Table of contents

00:25 Intro to Issuing 
03:29 Create Rails Application 
05:55 Create a charge with stripe-cli 
07:40 Generate Controllers 
10:30 Create Cardholders 
24:35 Create Cards 
31:00 Checkout with virtual Card 
33:27 List Transactions 
37:10 Authorization webhook 
49:11 Q&amp;A 

## Resources

Official Guide - https://stripe.com/docs/issuing

## Presenter

CJ Avilla, Developer Advocate @ Stripe - https://twitter.com/cjav_dev

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=knBWhYMqLds</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-checkout</loc>
    <lastmod>2023-01-30T22:50:59Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/VQ5jccnZ2Ow/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Checkout</video:title>
      <video:description>Join us for Developer Office Hours and get your questions about the Stripe Checkout answered. Our engineers will walk you through building an end-to-end Checkout integration for taking one time payments and subscriptions.

### Table of contents

Intro to Checkout 1:00
Scaffold demo 4:57
Setup Checkout server 6:42
Add database helpers 7:58
Create a Checkout Session 11:42
Redirect to Checkout 17:02
Demo One-Time Payment 22:40
SCA in Checkout 24:37
Fulfillment webhook 27:30
Create a Subscription 40:46


### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=VQ5jccnZ2Ow</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/custom-connect-onboarding</loc>
    <lastmod>2023-01-30T22:50:57Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/RYiscsdICrs/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Custom Connect Onboarding</video:title>
      <video:description>Join us for our Developer Office Hours and get your questions about the changes to Connect onboarding answered. Our expert engineers will walk you through the basics of building a Custom Connect integration.

### Table of contents

Connect Onboarding Overview 1:47
Scaffold Demo 11:48
(hosted) Connect Custom Onboarding 16:00
Custom Onboarding Implementation 24:40
Create Custom Account 26:50
Demo Custom Onboarding 41:36
Create Representative (Person) 46:12
Check requirements with stripe-cli 52:20

Looking for the official guide?
https://stripe.com/docs/connect/connect-onboarding

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=RYiscsdICrs</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/custom-fonts-for-transistor-fm-website</loc>
    <lastmod>2026-03-04T20:15:01Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/MFQMczanAm4/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Custom Fonts For Transistor.fm Website</video:title>
      <video:description>See how to set a custom font for your transistor.fm website</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=MFQMczanAm4</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/snowed-in-set-up-windows-3-0</loc>
    <lastmod>2026-03-04T20:15:08Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/XMlBvKf0Wd0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Snowed in? Set up Windows 3.0</video:title>
      <video:description>Kid helps guys set up windows 3.0</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=XMlBvKf0Wd0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/stripe-webhooks</loc>
    <lastmod>2023-01-30T22:50:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/oYSLhriIZaA/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Stripe Webhooks</video:title>
      <video:description>Join us for our Developer Office Hours and get your questions about leveraging the awesome power of webhooks answered. CJ and Adrienne will walk you through how to setup an endpoint to accept webhook events reliably in Ruby. We'll cover some common tripping points, best practices, and using the CLI to test your endpoints.

### Table of Contents

02:20 What is a Webhook? 
06:20 Demo of what we'll build 
07:00 Scaffold new Rails App 
09:00 Add simple Checkout UI 
13:10 Setup Webhook Route 
15:25 Skip CSRF Check 
16:00 Implement Webhook Controller Action 
20:00 Save and process events later 
26:07 Verify webhook signatures 
34:07 Refactor webhook handling into service objects 
39:14 Process events in background job 
46:03 Using ngrok 
53:22 Q&amp;A 

### Resources

Official guides: https://stripe.com/docs/webhooks/build
Stripe CLI: https://github.com/stripe/stripe-cli
Code: https://github.com/stripe-samples/developer-office-hours

### Support

If you have a question, please feel free to reach out to our support team on Discord at https://stripe.com/go/developer-chat.

### Updates

Sign up to stay updated with developer news: https://go.stripe.global/dev-digest

### Feedback

If you have any feedback about this or other episodes, let us know: https://forms.gle/VjNqzRhotM2snYo88.
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=oYSLhriIZaA</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/sca-ready-billing-and-subscriptions</loc>
    <lastmod>2023-01-30T22:50:55Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/GOp-Pt82Bes/hqdefault.jpg</video:thumbnail_loc>
      <video:title>SCA Ready Billing and Subscriptions</video:title>
      <video:description>Join us for our Developer Office Hours and get your questions about developing a Billing Integration answered. Our expert engineers will walk you through the basics of building a subscription system with the Stripe API and PHP.

The session will be recorded along with any chat commentary.

Please Subscribe to the Developer Office Hours-playlist to stay up-to-date on upcoming events like this in the future.

Looking for the official guide?
https://stripe.com/docs/billing/subscriptions/creating

https://www.youtube.com/playlist?list=PLy1nL-pvL2M6IYfRCmhOPcyC70zJqFoCs

If you have a question outside of these office hours, please feel free to reach out to our support team at https://support.stripe.com/.

The demos for the Developer Office Hours series are available on GitHub.

https://github.com/stripe-samples/developer-office-hours

We'd love your feedback about this episode: https://forms.gle/eNSnjmookYn2HQih7
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=GOp-Pt82Bes</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/saving-and-reusing-cards-sca</loc>
    <lastmod>2023-01-30T22:50:54Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/95qSebQrm5E/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Saving and reusing cards (SCA)</video:title>
      <video:description>[DEPRECATION WARNING] The method in Stripe.js to confirm the SetupIntent is now called `confirmCardSetup` and is documented here: https://stripe.com/docs/js/setup_intents/confirm_card_setup


Join us for our Developer Office Hours and get your questions about saving and charging cards answered. Our expert engineers will walk you through the basics of building a reusable card payment system with the Stripe API and PHP.

The session will be recorded along with any chat commentary.

Please Subscribe to the Developer Office Hours-playlist to stay up-to-date on upcoming events like this in the future.

Looking for official guides?
https://stripe.com/docs/payments/setup-intents

https://www.youtube.com/playlist?list=PLy1nL-pvL2M6IYfRCmhOPcyC70zJqFoCs

If you have a question outside of these office hours, please feel free to reach out to our support team at https://support.stripe.com/.

The demos for the Developer Office Hours series are available on GitHub.

https://github.com/stripe-samples/developer-office-hours
#Stripe #Payments</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=95qSebQrm5E</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/who-s-online-presence-feature</loc>
    <lastmod>2026-03-04T20:15:07Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/kayy6q3F9Nc/hqdefault.jpg</video:thumbnail_loc>
      <video:title>Who's Online "Presence" Feature</video:title>
      <video:description>A rundown of a few approaches to the "who's online" feature. Ruby, JavaScript, socket.io, Pusher. Talk given at SF Rails meetup in March 2015.
http://github.com/w1zeman1p/presence_demo
https://github.com/w1zeman1p/presence_demo_node_microservice</video:description>
      <video:player_loc>https://www.youtube.com/watch?v=kayy6q3F9Nc</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
  <url>
    <loc>https://www.cjav.dev/videos/1426830735</loc>
    <lastmod>2026-03-04T20:15:09Z</lastmod>
    <video:video>
      <video:thumbnail_loc>https://i.ytimg.com/vi/1Z4otSnv-t0/hqdefault.jpg</video:thumbnail_loc>
      <video:title>1426830735</video:title>
      <video:description></video:description>
      <video:player_loc>https://www.youtube.com/watch?v=1Z4otSnv-t0</video:player_loc>
      <video:family_friendly>yes</video:family_friendly>
    </video:video>
  </url>
</urlset>
