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.