All Videos

Ep 2: Dynamic Country Labels

Hypandra · February 3, 2026

curiosity-buildsborderless-wire

Transcript

Reading mode

0:09Hello and welcome to episode two of

0:09Curiosity Builds. I'm Trevan H with

0:11Hypandra. I did not introduce myself on

0:13the last one. And what I'm doing is I'm

0:16trying to do some vibe coding live and

0:19some public learning as I work on my

0:22website

0:23tool and extension that I've created

0:25BorderlessWire which the goal of that

0:29BorderlessWire which the goal of that

0:29being you can search around the globe

0:31for

0:33your country of choice. You click into

0:35it and it gives you information about

0:38that country, news stories uh in your

0:41native language, etc. We're still kind

0:44of flushing the idea out while we're

0:46building, but that's the goal and that's

0:48what you're watching. Whoops, wrong

0:49direction. Here we are. So, last episode

0:52I added color to the map, which uh we

0:56need to refresh that color. Look at

0:58that. This is what we did last episode.

1:00This episode, we're going to add some

1:02country labels because not everybody

1:06knows every country. Okay, you might

1:07know that that's Brazil, but did you

1:10know that this is Bolivia? Maybe you

1:13did, maybe. But it would be nice if it

1:15said Bolivia, right? Okie dokie. Oh,

1:18yeah. So, this is kind of like the early

1:20scaffolding of what I was trying to do,

1:22right? Adding a little bit about the

1:25country, but we'll be working on that

1:26through different episodes. This one is

1:28just about adding some oops, keep going

1:31the wrong direction. Some uh country

1:33names. So, we copy that. Command shift P

1:37simple browser. Get that in the screen

1:39here so we can kind of see what we're

1:41doing a little bit

1:49in screen there. Okay. Over here to

1:49Codex. I'm going to turn it into

1:50planning mode and I'm going to speak to

1:52it because I like to talk naturally to

1:54my agents. I don't get bogged down by

1:58the analysis paralysis that comes with

2:00trying to type a perfect prompt. I screw

2:03it up. Just try more later. It's just

2:05easier to talk. So, here we go.

2:08I want to add country names on the map

2:11so that way every country is labeled

2:13clearly. I don't want the text of the

2:16country to bleed over into other

2:19countries. But if it's a small country

2:21or it's broken up over many islands like

2:24Indonesia, we can have the country name

2:27cover the top of those islands or the

2:30border or it can be outside the country.

2:35However, I don't want it to look messy

2:37and cluttered. So, if a country is

2:39small, then the name can remain hidden

2:42until you zoom in closer. But if it's a

2:44large country like Russia or the United

2:46States, it takes up a lot of space.

2:48Let's have the country name on there. I

2:50don't want to do abbreviations if we

2:52don't have to.

2:54All right, that was a long prompt, but

2:56that's what I said. And it is going to

2:57go into planning mode and work on it

2:59while it's thinking. It will tell us

3:02what it's doing, and then a plan will

3:04pop up over here that we can review. And

3:06that's very important because you want

3:09to see what it's doing before it acts,

3:11especially if you're new to this. Oh,

3:13it's going to ask us some questions

3:15also. So, at what zoom should smaller

3:17countries start showing labels? I'm

3:19unsure. So, I'm going to say I'm unsure

3:22what it will look like. So, why don't we

3:25start with the most conservative option

3:28and we can change if we need to.

3:32Next question.

3:40label preferences

3:40soft atlas style bold legible darker

3:43clear halo let's do the bold uh all

3:47right let's see what it does with that

3:49wallet builds while it builds a plan

3:52doesn't actually build yet all right

3:54look at that plan tells us the goal

3:56render country name labels on the globe

3:58with minimal clutter large countries

4:00labeled at the base zoom small countries

4:02appear only in a higher zoom label

4:04should avoid overlap and be readable.

4:06Yep, that sounds like what I wanted.

4:08It's talking about the files it's going

4:09to use and the approach comput

4:17after GI all of this. I don't understand

4:17some of these, but I learning. So, it's

4:20basically giving you the steps that it's

4:21going to build this out. Add a new map

4:23libra symbol layer. Control visibility

4:25with the zoom function. Validate

4:28rehability. This is the part it will

4:29probably suck at. So, we'll be the ones

4:32that validate that. But, you never know.

4:34We'll use a conservative threshold and

4:36then it gives the to-dos. So, we're

4:38going to click build because I approve.

4:40I can sit here and watch the to-dos work

4:42or we can go over here and see if it

4:45pops up. Sometimes, I've said this

4:46before, changes will pop up after this

4:49happen. Sometimes it'll all happen at

4:51the end. It just depends on what you're

4:52changing, how complicated it is, and I

4:55also think the agent um It's going

4:58through. It might look like it's not

5:00doing much, but it is. It's working. And

5:02you can see the to-dos are going to

5:05start filling in here. Right now, it's

5:07doing to-do number one. Compute the BB

5:09box base labels. Did that. Now, it's

5:12doing step number two of three. Add the

5:15map Libra symbol layer with the bold

5:17atlas labels. And then step four, which

5:20I don't or step three, which I don't

5:21remember, was gate label visibility by

5:25tier and zoom threshold, which it did.

5:27Now, it's going to probably do linting

5:29errors, which is like the last thing it

5:30likes to do. And then it says, "Oh, I

5:32did it for you." Um,

5:35sometimes it'll refresh on its own.

5:36Sometimes I have to refresh. Right now,

5:39I don't see anything. We're zooming in

5:41and around. I see nothing, but maybe we

5:43click refresh. We'll get something.

5:44Let's see.

5:47Two issues. All right. Something could

5:50be blocking it. Let's also check the big

5:52uh preview

5:55here.

5:56Just make sure

5:59two issues. So what happens when that

6:00happens? You can click this. Oops. You

6:03can copy the issue right into the

6:05terminal so it looks at it and tries to

6:07debug on its own. So you don't have to

6:10sit there and spin your wheels or go out

6:12and search somewhere else. Because the

6:15point of this is learning how to do

6:17this, understanding how it works, but

6:19also doing this because of the speed and

6:21the accessibility that it provides. This

6:23is not something that I could have done

6:24on my own very easily at all without

6:27substantial learning. I'm still

6:30learning, but I'm able to do because AI

6:33breaks down some of those barriers. All

6:35right. Says give it a refresh and label

6:37should be there. Another issue we had

6:40to. So, we will see if it solves both of

6:43these.

6:45Oh, stale. Yes,

6:48I'm assuming stale. Sometimes the words

6:52are exactly what you would think and

6:54then other times it's wild. It's not

6:56it's not even close to what the word

6:58means out in layman's term layman the

7:00layman land where I live

7:04where I live.

7:08If you want tweak I don't see anything

7:10going on here. It's really struggling

7:12here. Um

7:20copy this.

7:20Then I'm going to give it additional

7:21context.

7:23I still only see the colored map. I

7:26don't see anything appearing at all. So

7:28I'm not even able to give feedback on

7:31the legibility because it looks like no

7:33changes have been made.

7:36So now it's got my context and this um

7:40air that it found. And we'll see what it

7:42does with that.

7:44We'll see what does that. But we're

7:46getting there. We're getting pretty.

7:47It's not like this is going to be,

7:51you know, instant. We're creating

7:52something from scratch. And I am being a

7:57little picky on how I want it to look.

8:00So, yeah, we might need to refresh the

8:04uh local server because I think I did

8:07not do that actually. So, I'm just going

8:09to kill this terminal. I'm going to

8:12start a new terminal. There's probably a

8:14better way to do that. And I'm going to

8:15run this command bun dev in the terminal

8:18directly which will restart the server

8:22and we will get rid of that

8:27a little bit

8:38I don't see anything. So it might not be

8:38that issue. So we'll go back and we'll

8:41ask

8:48Nothing shows at all. So I'm not able to

8:48read.

9:01Whoops. See, look at that. It went to

9:01Google because I didn't know what I

9:02wanted. The wrong copy.

9:06Tries to be helpful. Sometimes it is,

9:08sometimes it ain't.

9:11Simple

9:18simple

9:18browser.

9:31I wonder what the problem is. It's doing

9:31something. It's not working. So,

9:41I'm seeing no changes at all with what

9:41you're doing. It's some kind of

9:42rendering issue or maybe there's some

9:44kind of thing blocking the scripts from

9:48being seen. I have no text appearing on

9:51the screen and everything remains static

9:53as it was prior.

10:01Do something that's going to have the

10:01most consistency and the least amount of

10:03bugs when it comes to adding country

10:05labels.

10:12Sometimes I just have to

10:12dial back what I'm trying to do. Um, if

10:15the zoom and the labels are too

10:17complicated,

10:18it might be worth just having it add

10:21labels and work out the zoom thing in a

10:23second step. I also switched out and I'm

10:27just kind of going back and forth with

10:28the agent. I could pop back into plan

10:31mode to have it think a little more

10:32about it. And then if this fails, I will

10:36switch my agent and go to Claude and see

10:37if Claude can do a little better. But

10:39this should be

10:42working.

10:49Oh, hey, something happened. I think the

10:49zoom need to be really zoomed in.

10:55What's going on with some of these

10:55countries? So, yeah, there's something

10:57going on. It's trying it's trying it

10:59little little best. Um,

11:05yeah, it looks like there might be some

11:05missing

11:10stuff. I suspect the labels don't show

11:10because the issues with feature property

11:12names, symbol placement, or zoom based

11:15text. Yeah, it does its own

11:17investigation. Like I said before, it

11:20reads what it's supposed to do and then

11:23it tells you what it's doing in a

11:25legible way for you. So you can go back

11:27and check out all of the things it's

11:29trying to do and understand it

11:31reasoning. All right. To maximize

11:33stability, it did something. Let's go

11:35back and read that. To maximize

11:36stability, I removed the dynamic text

11:39opacity

11:41expression and split labels into three

11:43separate layers. Large, medium, small,

11:45each with a simple minimum zoom

11:49constant. Okay. You say you did this.

11:53Let's see.

12:19Don't depend on any external host. Keep

12:20everything local. You had some labels

12:22pop up for a second, but now they're

12:24gone again.

12:25I want to be able to look at the globe

12:27and see country names if the country is

12:30large enough to hold that name.

12:33I also want to be able to zoom in and

12:35see the country name fill on to the

12:37whole country as I approach. If this

12:40needs to be done locally so we have the

12:42most control. Let's make sure we do

12:43that. Whatever you're doing right now

12:45seems to be failing.

12:51All right, that's it. Last try. And if

12:51this doesn't work, I will switch over to

12:53Claude. The reason I don't use Claude code

12:56is I want to save that for things that I

12:58I think are more complicated and I don't

13:00want it to spend my tokens

13:02unnecessarily.

13:03Um

13:05so hopefully

13:08the designing that it does and making

13:10its own local overlay will uh solve the

13:14problem. Little more work. It does try

13:16to take the easy path first. I

13:19sure that's part of its internal

13:21prompting from their companies. They

13:23want to make They don't, you know, do a

13:27bunch of calls into their data centers

13:29unnecessarily or for things that can be

13:31taken care of more simply. But in doing

13:33that, a lot of times they will try to

13:35take shortcuts or make assumptions. Oh,

13:37look at this. What's going on here?

13:40Dang. Okay.

13:43All right. Well, what happens when I get

13:46over here? Oh, yeah. Antarctica. I love

13:48it. And what is this?

13:52So,

14:01it's really failing here. So, what I'm

14:01going to do is I'm going to go into

14:04cloud and see if we can fix this mess.

14:07New terminal

14:09cl.

14:17I'm going to change to ask. Can you

14:17write a very simple description of what

14:20you were attempting to do? So I can give

14:22it to Claude and have them give it a

14:24try.

14:26That way I don't have to reexlain it.

14:29I'm going to give you a prompt from

14:32Codex. It's trying to apply country

14:34labels to my dynamic globe. It's not

14:38doing very well. The country labels need

14:42to be attached to the country. If the

14:44globe is rotating, the labels should

14:47rotate with the country and move out of

14:50vision. Now they're just dancing around

14:52as the globe moves. I also can't see

14:55other country names. It's just a mess.

14:57This is what it's saying it tried to do

14:59so you can understand the context.

15:02And now I'm going to

15:21All right, let's give Claude a try here.

15:21We're using Opus 4.5, which is the

15:25highest

15:27thinking model I believe they have right

15:29now.

15:31Should

15:33should do a little better. Although I'm

15:35surprised. This is also partly me

15:38learning. Every time I'm adding a

15:40feature, I'm doing something I've not

15:42done before. This globe's new. These

15:44country labels are new to me. So, I'm

15:47learning how it works and how prompting

15:50uh can get this to be better, how my

15:53description can be improved.

15:54Additionally, we are trying to create a

15:57library of all of these things that we

15:58create. So later we can reference them

16:01the code and the LLMS can reference them

16:04easily and not struggle through. So if I

16:06wanted to add some kind of globe feature

16:08later, hopefully I'll have all the

16:10lessons saved from this so we can

16:12implement quicker.

16:15Let's see. Do you want to proceed? Yes.

16:18So, some commands I have like they're

16:21naturally set up to require you to push

16:23a button. I could go through and tell it

16:25not to do this again, but we'll just

16:27keep it as something I have to manually

16:29approve. Some things are good to have uh

16:33set to automatically go through. Other

16:35things it's better for me for you to

16:38check. Keep an eye on it. You don't want

16:40it to just always act. And sometimes

16:43having those checks are good because you

16:46can catch it from loop. One time I had a

16:49problem. I was trying to debug and I

16:51just kept saying yes, yes, yes, yes,

16:53yes. And then I ran out of tokens and

16:55when my business partner looked through

16:56it, he's like, "Oh, you were just having

16:58it do the same thing." Because it just

16:59kind of got stuck. Couldn't figure it

17:00out. So, I burned a bunch of tokens and

17:03I couldn't use

17:05uh Claude for the rest of the day

17:07because I wasted it. So, it's always

17:10good to be a little more mindful on what

17:13you're doing and be a little more

17:14intentional so that way you're less

17:17calls, which is good. You're being a

17:20little more discreet in the features

17:23that you're adding. So that way, if

17:25something is wrong or something doesn't

17:26work well, you're not, you know, trying

17:28to do too much at once and you're saving

17:31money or tokens at least. So, it's still

17:35going because it's a lot to to think

17:37about and do, but um

17:42Okay, so we're getting somewhere. I made

17:45this a little So it's easier to see. I

17:47didn't want to sit here and let you sit

17:49for 4 minutes and 22 seconds. But look,

17:52so Claude added these labels. It is

17:56getting better. I like it. I can zoom

17:58in. I see the country. It is a little

18:01more dynamic. It moves, but they

18:03disappear. It stays on the country as I

18:06zoom in. I love it. What does Indonesia

18:09look like?

18:11Yeah. Okay. So, that kind of concludes

18:17this other episode. Sorry, it's a little

18:19jumpy. I just didn't want to sit. There

18:21was a couple long periods of waiting.

18:23So, that's why I clipped these together.

18:25But, I am happy with this. So, we are

18:27going to commit this

18:29and call it a day on this. And I spelled

18:32that great, didn't I? Um, okay.

18:37Cool. I hope you learned a little

18:40something or at least

18:42got something out of that. I've got a

18:45spinning globe now with labels all over

18:47it. And soon we'll be able to move on to

18:50the next piece, which is getting the

18:52country cards and the information that I

18:55want when I click on things like

18:56Greenland. You know, maybe something's

18:58going on there that I want to learn

19:00about. You never know.

19:03You never know. Anyway, don't forget to

19:05commit and don't forget to stay curious.

19:07Have a great day.