Transcription: OpenAgents Episode 051 - HTMX Bitcoin Price Ticker
June 9, 2026 ยท View on GitHub
Source: https://twitter.com/OpenAgentsInc/status/1747366650075025671 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 051: HTMX Bitcoin Price Ticker We build a Laravel+HTMX compon... Upload date: 20240116 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T20:14:36Z
Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.
[00:00] Christopher David: So let's keep going on HGMX and let's build an actual component that we want in our application.
[00:08] Christopher David: So we are building towards actual commerce flowing through payments.
[00:18] Christopher David: We're going to be using credit card payments and Bitcoin payments.
[00:23] Christopher David: And so we're going to want to know what the Bitcoin price is so we can show prices in both
[00:30] Christopher David: sats and dollars.
[00:35] Christopher David: So I think this would be a cool component to build with HGMX because we're actually going
[00:40] Christopher David: to need it for application.
[00:43] Christopher David: We can build it out with TDD now that we know that we can confidently build feature tests
[00:46] Christopher David: and assert as to what we see on the screen.
[00:52] Christopher David: And this would probably would be cool to try to get broadcasting working so it will actually
[00:58] Christopher David: update to all connected clients with the prices every 15 30 seconds.
[01:05] Christopher David: And I found this extension.
[01:14] Christopher David: It's like newer than the SSSE stuff that we were doing previously.
[01:17] Christopher David: It's like a new extension that's meant to replace the old version and then got pretty
[01:23] Christopher David: clear instructions here on how you receive named events.
[01:27] Christopher David: So I'd like to see if we can do this.
[01:31] Christopher David: May not get to it in this video.
[01:33] Christopher David: We can probably feed that to the chatGPT leader.
[01:40] Christopher David: Okay, so we're going to build up a component.
[01:46] Christopher David: It's going to be a blade slash HTMX component.
[01:52] Christopher David: Blade is Laravel's templating language and call it Bitcoin price.
[02:04] Christopher David: My current plan is that we'll always be updated.
[02:07] Christopher David: We may or may not do it like that.
[02:11] Christopher David: So regardless of whether we stick with HTMX or not, we're still going to want there to
[02:21] Christopher David: be solid tested codes, code, maybe in a service class for fetching the Bitcoin price.
[02:35] Christopher David: We're going to be able to kind of pass the price from server to client and do that in
[02:46] Christopher David: like the HTMX way.
[02:47] Christopher David: And then reason about how we can add broadcast into that for price updates.
[02:59] Christopher David: And then if we later on do a React version of this, we'll still be able to use this.
[03:04] Christopher David: Do a React version of that.
[03:11] Christopher David: Okay.
[03:13] Christopher David: And we'll build this up via TDD.
[03:19] Christopher David: Let's open up a repo.
[03:30] Christopher David: And we'll call this Bitcoin price.
[03:36] Christopher David: First make sure all our test pass.
[03:41] Christopher David: 119 passed with 295 assertions.
[03:44] Christopher David: I like that a lot.
[03:47] Christopher David: We're skipping past the integration tests that have like long HTB calls to third-party services.
[03:58] Christopher David: So what test sweep at this end?
[04:04] Christopher David: It's got Bitcoin price test.
[04:17] Christopher David: And for now we just want to assert that we see
[04:27] Christopher David: Bitcoin price page lose.
[04:41] Christopher David: Bitcoin page lose.
[04:46] Christopher David: Let's assert status assert.
[05:00] Christopher David: All right.
[05:02] Christopher David: Simple TDD.
[05:04] Christopher David: Let's try to get a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of
[05:34] Christopher David: little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little
[06:04] Christopher David: little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little
[06:34] Christopher David: little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little
[07:04] Christopher David: little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little
[07:34] Christopher David: bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit
[08:04] Christopher David: a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a
[08:34] Christopher David: little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little
[09:04] Christopher David: bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit
[09:34] Christopher David: a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a little bit of a
[10:04] Christopher David: okay as try we see actual bit coin price let's write a fun failing test first
[10:09] Christopher David: I want to get the actual Bitcoin price so price equals maybe a static method Bitcoin
[10:19] Christopher David: get price get USD price
[10:24] Christopher David: then I expect that when I go to Bitcoin I expect to see that price
[10:33] Christopher David: yeah that's the test that will need to succeed
[10:47] Christopher David: and it fails because class Bitcoin is not out okay failing test for actual Bitcoin price
[11:03] Christopher David: so because this is kind of two different things that we expect this to work and then we wanted to be past
[11:08] Christopher David: this is where a unit test would make sense for this class so we're going to drop down
[11:16] Christopher David: to create a new unit test a Bitcoin test just tests for our new yet to be created Bitcoin class so it can fetch USD price
[11:33] Christopher David: we're expecting it to be a float I think
[11:38] Christopher David: and then up here we'll say use app
[11:44] Christopher David: services Bitcoin which just not exist so it's created
[11:59] Christopher David: Bitcoin
[12:12] Christopher David: okay
[12:18] Christopher David: okay it can fetch USD price but that's still static
[12:29] Christopher David: but should we now expect this test to pass
[12:41] Christopher David: okay
[12:44] Christopher David: now we're just getting the fake data from a Bitcoin class start Bitcoin class
[12:54] Christopher David: but we're not going to be doing that
[13:08] Christopher David: I can't take a look at test that out we're just going to do the actual functionality
[13:13] Christopher David: okay so
[13:17] Christopher David: I did a little bit of poking around to find the best Bitcoin price API
[13:24] Christopher David: a bunch of them are from shitcoin companies that I don't want to use but block streams are good
[13:31] Christopher David: Bitcoin only
[13:34] Christopher David: for those of you who are not familiar with the distinction between Bitcoin and crypto one of the like
[13:41] Christopher David: lessons that I've come to appreciate is that if you're focusing on Bitcoin only
[13:50] Christopher David: odds are that your service is going to have more integrity
[13:54] Christopher David: it's going to work better you're going to be able to go deeper into Bitcoin and do things to the Bitcoin way
[13:59] Christopher David: if you're trying to split between Bitcoin and a bunch of crypto is
[14:03] Christopher David: the amount of technical complexity and overhead you have to deal with is just not good
[14:10] Christopher David: and the treating Bitcoin as if it's one of these other ones like
[14:14] Christopher David: so for something like Bitcoin price you could go to something like
[14:20] Christopher David: some crypto price list
[14:23] Christopher David: but block streams of solid Bitcoin only coming
[14:26] Christopher David: if they're out for 10 years or so
[14:29] Christopher David: so
[14:33] Christopher David: I googled block stream API to here
[14:37] Christopher David: I think they have a price here
[14:52] Christopher David: or maybe they don't
[14:56] Christopher David: or maybe they don't
[15:06] Christopher David: Transactions addresses
[15:11] Christopher David: block
[15:14] Christopher David: member
[15:17] Christopher David: fee estimates
[15:20] Christopher David: like
[15:23] Christopher David: like
[15:29] Christopher David: like
[15:31] Christopher David: like
[15:34] Christopher David: like
[15:38] Christopher David: like
[15:49] Christopher David: like
[15:55] Christopher David: that's funny that actually the Bitcoin price up here
[15:59] Christopher David: is
[16:14] Christopher David: I know
[16:16] Christopher David: I know
[16:26] Christopher David: okay
[16:31] Christopher David: all right I need a Bitcoin price API
[16:37] Christopher David: sorry, boxing law
[17:17] Christopher David: I'm
[17:20] Christopher David: Was a Bitcoin dashboard
[17:27] Christopher David: I'll be have it
[17:47] Christopher David: I'm
[18:01] Christopher David: Was that Bitcoin dashboard called
[18:17] Christopher David: I'm
[18:30] Christopher David: trying to think of who
[18:31] Christopher David: I'm trying to think of
[18:35] Christopher David: I'm trying to think of who
[18:44] Christopher David: I'm trying to think of who
[18:46] Christopher David: I'm trying to think of who
[18:49] Christopher David: I'm trying to think of who
[18:52] Christopher David: I'm trying to think of who
[18:55] Christopher David: I'm trying to think of who
[18:57] Christopher David: I'm trying to think of who
[18:59] Christopher David: I'm trying to think of who
[19:01] Christopher David: I'm trying to think of who
[19:03] Christopher David: I'm trying to think of who
[19:05] Christopher David: I'm trying to think of who
[19:08] Christopher David: I'm trying to think of who
[19:10] Christopher David: I'm trying to think of who
[19:12] Christopher David: I'm trying to think of who
[19:14] Christopher David: I'm trying to think of who
[19:16] Christopher David: I'm trying to think of who
[19:18] Christopher David: I'm trying to think of who
[19:20] Christopher David: I'm trying to think of who
[19:22] Christopher David: I'm trying to think of who
[19:24] Christopher David: I'm trying to think of who
[19:25] Christopher David: I'm trying to think of who
[19:28] Christopher David: I'm trying to think of who
[19:30] Christopher David: I'm trying to think of who
[19:32] Christopher David: I'm trying to think of who
[19:34] Christopher David: I'm trying to think of who
[19:36] Christopher David: I'm trying to think of who
[19:38] Christopher David: I'm trying to think of who
[19:41] Christopher David: I'm trying to think of who
[19:43] Christopher David: I'm trying to think of who
[19:45] Christopher David: I'm trying to think of who
[19:47] Christopher David: I'm trying to think of who
[19:49] Christopher David: I'm trying to think of who
[19:51] Christopher David: I'm trying to think of who
[19:55] Christopher David: I'm trying to think of who
[19:58] Christopher David: I'm trying to think of who
[20:01] Christopher David: I'm trying to think of who
[20:04] Christopher David: I'm trying to think of who
[20:07] Christopher David: I'm trying to think of who
[20:10] Christopher David: I'm trying to think of who
[20:13] Christopher David: I'm trying to think of who
[20:15] Christopher David: I'm trying to think of who
[20:18] Christopher David: I'm trying to think of who
[20:21] Christopher David: I'm trying to think of who
[19:59] Christopher David: I can't say maybe you got him for a self.
[20:29] Christopher David: I can't say maybe you got him for a self.
[20:39] Christopher David: I can't say maybe you got him for a self.
[20:49] Christopher David: I can't say maybe you got him for a self.
[20:59] Christopher David: I can't say maybe you got him for a self.
[21:20] Christopher David: Where is Clark getting his data from?
[21:50] Christopher David: I can't say maybe you got him for a self.
[22:07] Christopher David: I can't say maybe you got him for a self.
[22:17] Christopher David: I can't say maybe you got him for a self.
[22:24] Christopher David: I can't say bitcoin.
[22:33] Christopher David: I need an API that lets me fetch the current bitcoin price.
[22:40] Christopher David: I can't say it's not cryptocurrency.
[22:58] Christopher David: I can't say maybe you got him for a self.
[23:28] Christopher David: I can't say it's not cryptocurrency.
[23:43] Christopher David: I can't say it's not cryptocurrency.
[24:11] Christopher David: I can't say it's not cryptocurrency.
[24:23] Christopher David: I can't say it's not cryptocurrency.
[24:51] Christopher David: I can't say it's not cryptocurrency.
[25:21] Christopher David: I can't say it's not cryptocurrency.
[25:36] Christopher David: I can't say it's not cryptocurrency.
[26:06] Christopher David: I can't say it's not cryptocurrency.
[26:31] Christopher David: I can't say it's not cryptocurrency.
[27:01] Christopher David: I can't say it's not cryptocurrency.
[27:31] Christopher David: I can't say it's not cryptocurrency.
[27:57] Christopher David: I can't say it's not cryptocurrency.
[28:27] Christopher David: I can't say it's not cryptocurrency.
[28:57] Christopher David: I can't say it's not cryptocurrency.
[29:27] Christopher David: I can't say it's not cryptocurrency.
[29:57] Christopher David: I can't say it's not cryptocurrency.
[30:22] Christopher David: I can't say it's not cryptocurrency.
[30:50] Christopher David: I can't say it's not cryptocurrency.
[31:20] Christopher David: I can't say it's not cryptocurrency.
[31:48] Christopher David: I can't say it's not cryptocurrency.
[32:13] Christopher David: I can't say it's not cryptocurrency.
[32:43] Christopher David: I can't say it's not cryptocurrency.
[33:09] Christopher David: I can't say it's not cryptocurrency.
[33:39] Christopher David: I can't say it's not cryptocurrency.
[34:05] Christopher David: I can't say it's not cryptocurrency.
[34:35] Christopher David: I can't say it's not cryptocurrency.
[35:03] Christopher David: I can't say it's not cryptocurrency.
[35:31] Christopher David: I can't say it's not cryptocurrency.
[35:57] Christopher David: I can't say it's not cryptocurrency.
[36:27] Christopher David: I can't say it's not cryptocurrency.
[36:53] Christopher David: I can't say it's not cryptocurrency.
[37:23] Christopher David: I can't say it's not cryptocurrency.
[37:51] Christopher David: I can't say it's not cryptocurrency.
[38:19] Christopher David: I can't say it's not cryptocurrency.
[38:45] Christopher David: I can't say it's not cryptocurrency.
[39:15] Christopher David: I can't say it's not cryptocurrency.
[39:45] Christopher David: I can't say it's not cryptocurrency.