---
url: "https://youtu.be/kPN564Kol14"
title: L8 Principal Building a Full Stack App with Agentic Engineering
source_kind: youtube
author: Kun Chen
captured: "2026-09-05T02:13:33+00:00"
comment_tree: false
topics: [ai-tools]
summary: A principal engineer shows how to build a full-stack app from scratch using his agentic engineering workflow with AI tools like FirstMate and Pi agents.
status: ok
---

# L8 Principal Building a Full Stack App with Agentic Engineering

Channel: Kun Chen

## Transcript

[0s] Hello everyone. My name is Kun. I worked
[2s] at Meta, Microsoft, and Atlassian as an
[5s] L8 principal engineer. And a few weeks
[7s] ago, I made a video about my agentic
[10s] engineering workflow, which got 600,000
[13s] views. And one of the most popular ask
[16s] from the video was to make another video
[18s] about me using my agentic engineering
[21s] workflow to build a real project from
[23s] scratch. And that's what we will be
[25s] doing today. Let's dive in. All right,
[28s] let's begin. Um I'm starting from an
[30s] empty terminal here, and I already have
[32s] my tools and environment set up, uh but
[35s] I haven't created any project files yet.
[37s] So, I'm going to start with that. Uh the
[39s] first thing I'm going to do is to launch
[41s] Herder.
[42s] Um Herder is kind of like my new tmux.
[45s] It's my replacement for tmux. It's just
[47s] better. Um it manages my agent sessions
[49s] for me, and you will see uh later why uh
[52s] that gives me a really good experience.
[54s] Um and this is an empty session I just
[56s] started. Uh so, uh the next thing thing
[59s] I'm going to do is to set up FirstMate.
[61s] Um FirstMate, if you haven't heard of it
[64s] yet, um it's an open-source project that
[66s] I created, uh which gained some
[68s] popularity, which is nice.
[70s] Um it's a new way of working that allows
[72s] me, uh the captain, uh to talk to only
[75s] one agent, which is the FirstMate. And
[78s] the FirstMate will juggle everything for
[80s] me, uh which really reduces the um
[83s] cognitive load that I have and the
[85s] burden of context switch. So, it makes
[88s] me uh my life a lot easier. Uh the way
[91s] to set this up is really easy. Um so, I
[92s] just come here and clone the repo.
[95s] I'll just come here and do a git clone
[97s] and get this FirstMate repo cloned. And
[101s] I'm going to just uh go into the
[102s] FirstMate repo and launch my agent in
[105s] here. That's how you use FirstMate. Um
[107s] and today I'm going to use the Pi agent,
[109s] uh because I want to use the GPT model,
[111s] and Pi is my favorite harness for
[113s] running any model that is not Claude. Um
[116s] so, I uh I will launch Pi, and you can
[119s] see here um my current model is GPT-5.6
[123s] Soul on X High. And uh I do use this
[126s] model a lot, uh but today uh I actually
[129s] want to give myself a challenge and make
[131s] this a little bit more uh fun and uh
[134s] uncertain. Uh so, I'm going to use Luna
[138s] instead. Um, the reason is that um I
[142s] think a lot of the time we try to use
[145s] the best model possible for everything,
[147s] uh because that's just going to be able
[148s] to get give us the better results,
[150s] right? Um, but actually I want to
[152s] demonstrate that you don't really need
[155s] the best model for everything. Um, you
[157s] actually can get a lot out of these more
[160s] efficient models. I hope Luna doesn't
[162s] backfire on me. Um, so uh the first
[166s] thing uh I will do uh with FirstMate is
[169s] to probably lay down the ground rule
[171s] here that I just want to use Luna. Uh
[174s] so, I'll yeah, I'll do a few things.
[177s] Hey FirstMate, uh let's uh set up a new
[180s] project here, uh a new repo called
[182s] Eddie's Wallet.
[184s] And it's going to be just a local repo
[186s] for now, um probably put a dummy readme
[189s] file in it and make a commit uh just to
[191s] get it started. Um, and uh I want to lay
[195s] down some ground rule here that today
[197s] every task, every crewmate will be
[200s] dispatched to a Pi agent running GPT-5.6
[204s] Luna
[205s] um X High reasoning um level. So, yeah,
[209s] get that set up as well.
[213s] All right, just give this prompt to um
[215s] Luna and let uh Luna start doing its
[218s] work.
[219s] So, um yeah, it's running a session
[221s] start script. This is how FirstMate
[224s] works. Uh FirstMate has a bunch of
[225s] scripts to handle the deterministic uh
[228s] aspect of uh running this uh whole
[231s] FirstMate thing.
[232s] Um, and it will call some skills, it
[234s] will do some of the scripts.
[238s] What I typically actually do is to
[240s] ignore all this noise because FirstMate
[243s] is just calling the tools, calling the
[245s] scripts it needs,
[247s] calling the skills to do its work,
[249s] right? I don't really need to look at
[251s] which tools it called and etc. etc.
[253s] That's not super useful for me. So, I
[256s] actually have this calm mode.
[258s] This is something that comes with
[260s] FirstMate and it's only possible for the
[264s] Pi agent. It's not available for other
[266s] agent harnesses yet. In the Pi agent,
[269s] FirstMate comes with this calm mode. If
[271s] I turn this on, then all those noise
[274s] disappears.
[275s] The only thing that's going to show in
[277s] the terminal is my prompt and
[279s] FirstMate's response. So, I don't really
[282s] need to look at all the tool calls and
[284s] everything, which makes the experience
[286s] really clean. And that is how I want to
[288s] work with FirstMate typically. I think
[291s] with less intelligent models that we had
[294s] maybe like a year ago, two years ago,
[296s] it's really useful to look at what the
[298s] agent is doing, which tools is calling,
[300s] which files is reading, etc. etc.
[303s] because
[304s] sometimes it will make mistakes, right?
[306s] It will go down a wrong path. And if we
[308s] can look at what it's doing, we can
[310s] steer it. We can actually ask it to say,
[312s] "Hey, stop. That's the wrong thing to
[314s] do."
[315s] But with today's models, it's actually
[318s] more and more rare that I need to steer
[320s] the agent that way.
[322s] So,
[323s] I just find it's less useful now to look
[325s] at the tool calls and everything. So, I
[327s] did this calm mode to just help me
[331s] ignore all those noise.
[333s] So, now yeah, FirstMate said, "Captain,
[336s] Eddie's wallet is set up." Um
[339s] Okay. Um
[342s] It's locally in here and readme stairs
[344s] initial commits. Okay. Crew dispatch.
[347s] Okay, so it's basically done what I
[349s] asked, which is good. Now, I'm going to
[352s] talk to first mate about this project,
[356s] what I really want to build, right? So
[358s] I'll just tell first mate the same time
[359s] I tell you guys.
[361s] Hey first mate. Now this Eddie's wallet
[364s] project is a
[366s] um
[367s] it's an app that my son Eddie told me to
[370s] build for him. Uh it's a it's an app for
[374s] children to manage their allowances. Um
[377s] so right now we sometimes write this
[379s] down in a notebook. Sometimes we just
[382s] try to remember it, but it's really hard
[384s] to manage once we have like a bunch of
[387s] things, a bunch of rules for how he gets
[390s] allowance and how he spends it. So I
[393s] want to use this app for as a tracker
[396s] for Eddie to manage his balance. Um I
[399s] also want to actually
[402s] take this as an opportunity have this
[405s] app have some educational value to teach
[408s] Eddie
[410s] the basic financial concepts like
[413s] balance,
[415s] loans, and how credit cards work, right?
[419s] How he makes payment back for a loan,
[423s] things like that and interest for the
[426s] money he's saving in the in the in the
[429s] account. So I think we should try to
[432s] have this app introduce kids to these
[436s] concepts gradually in a natural way
[439s] in a way that they can understand.
[441s] So this app is probably iOS only for now
[445s] because Eddie uses an iPad most of the
[448s] time. And I want this app to have a
[451s] parent mode and a child mode. So in the
[455s] parent mode I can deposit and I can
[458s] manage withdrawal.
[459s] In child mode that's what Eddie use Uh
[463s] and Eddie can use the child mode to um
[465s] look around and see how much balance he
[468s] balance he has.
[469s] Uh is he taking a loan, etc. etc. It's
[472s] basically a read-only mode. Um
[475s] So, that's probably like the high-level
[477s] requirements. Um I haven't thought
[479s] through all the details yet. Um but
[481s] there's a few things I want to do. Um
[483s] first, I want to do a market research to
[486s] see whether such an app already exist.
[490s] Because if it already exists that does
[492s] exactly what I described, then I'll just
[494s] install the app for him. Uh if it
[496s] doesn't exist, then that's an unique uh
[499s] gap that we can build an app to fill.
[502s] Um but pay attention that I want to um
[505s] make sure the money in this app is
[508s] virtual, it's not real money, right?
[510s] It's just a virtual wallet tracking
[512s] these numbers.
[514s] Uh the other thing I want to make sure
[516s] is like uh the data is portable and
[519s] stored in the cloud. Because
[522s] uh I may want to use my phone to manage
[525s] uh the deposit and withdraw not on the
[527s] same device as Eddie's iPad. Uh and
[530s] Eddie sometimes may switch devices. Uh
[533s] and the data should be visible on all
[535s] the devices he use.
[536s] Uh he has a Mac um and has a an iPad. Uh
[540s] for now, we just worry about iOS. Um but
[543s] uh knowing that he has multiple devices,
[545s] I think we have to persist the data in
[547s] in the cloud.
[548s] Um what else? Uh I think that's it. Uh
[551s] that's for the market research. We want
[553s] to make sure uh such an app doesn't
[555s] already exist. Um
[557s] The other thing I want to do in parallel
[559s] is to look into the technical aspect of
[561s] this. How would we approach building
[564s] this full stack um end to end, right?
[567s] So, those are the two things I want you
[568s] to kick off in parallel.
[572s] Okay. Uh so, you you you can see that
[574s] was a long rambling, right? It was a
[577s] long rambling of the requirements and my
[579s] idea, my thinking, uh what I was uh
[582s] trying to get done. Uh 3,000 characters
[585s] uh is a lot. Uh so, this is typically
[588s] how I kick off a new project. Uh I just
[590s] ramble. Uh I talk, try to explain
[594s] everything I have in mind to FirstMate,
[597s] and let the agent uh figure things out.
[601s] Um
[601s] There's a lot of context, a lot of
[603s] requirements, a lot of ideas I mentioned
[605s] in there. Uh it will try to rationalize
[607s] that. And FirstMate here should respond
[609s] to what I asked. Uh I asked for two
[611s] things in parallel. One is the market
[613s] research, and the other is the technical
[616s] planning, right? Uh so, uh I think very
[619s] soon FirstMate will probably like kick
[621s] those things off. Uh so, let's see.
[625s] Um so, it's not showing me any of the
[627s] tool calls, uh which is nice. I don't
[628s] really need to look at that. Uh what I
[631s] can uh see here is the uh token count to
[634s] know it's actually doing, it's not stuck
[637s] or anything. Uh so, we can see like the
[639s] token um uh counter has been moving. The
[642s] context window is already at 24 uh
[645s] percent of the 20 uh of the 272k.
[649s] Um
[650s] This is the default uh
[652s] uh cap for GPT models right now. Um I
[656s] think there was a um a bug Open AI
[659s] reported a while ago that if your
[662s] context uh if you send a request that
[665s] has a higher context uh size than this,
[669s] then the request will be charged higher
[671s] than usual. Uh so, that's a reason why a
[674s] lot of people are saying, "Oh, Codex is
[676s] draining my uh quota very quickly." Um
[680s] so, I capped this at two um 272k
[683s] uh to be the safe um cap for how large a
[687s] request can be. Okay, so here FirstMate
[689s] said, "Captain, both scouts are
[691s] underway." Uh so, here we can see uh
[693s] actually first mate already spun up two
[697s] uh tabs here. The first tab is a market
[699s] research, and the second tab is a
[702s] technical research. Right, so this is
[704s] how first mate works. Uh it first mate
[707s] does not try to do everything by itself
[709s] because if it does so, it will get stuck
[713s] um and it will get too busy, right? It
[715s] will do um it can only do one thing at a
[717s] time. Uh it will uh get stuck handling
[720s] all
[721s] um by delegating these tasks to um these
[724s] crewmates, um
[726s] uh first mate can get a lot of things
[728s] done in parallel. So, now we have a
[729s] market research, we have a technical
[731s] research both being run uh in parallel
[734s] by two different agents.
[735s] Uh and we can validate uh these agents
[737s] are also running uh GPT 5.6 Luna on X
[741s] high uh as we asked.
[743s] Uh so, this is what we ask for this
[745s] first mate, uh and something I maybe uh
[748s] maybe interesting to show you is uh my
[751s] quota.
[752s] So, I have this uh baby menu widget here
[756s] uh that shows uh tracks my quota.
[759s] I have my cloth quota here
[761s] um uh and I have my Codex quota here. I
[764s] have uh Kim me subscription as well uh
[766s] and I already used up my Grok uh quota.
[769s] Uh so, I can see all the quota here uh
[771s] and it's really nice. Uh today we got a
[773s] reset uh from Tebo,
[776s] uh which is uh
[777s] which is really good. Uh Tebo here uh
[781s] has been giving me
[783s] uh giving us resets all the time. Uh and
[786s] that's why I still have so much quota
[788s] left for uh Codex. So, this is basically
[791s] how I track my subscription quota across
[793s] these different uh plans. Yeah, it's
[795s] still working. Uh we can probably um
[797s] just wait until it come back to us. Uh
[800s] actually, one thing that would be uh
[802s] cool is to turn on the fast mode.
[804s] Uh so, I have this uh Codex uh fast
[808s] extension in pie that allows me to
[810s] control whether I want the fast mode. Uh
[812s] so, I'll just uh do a Codex fast on.
[815s] Uh this will turn on fast mode and
[818s] request from now on uh from this session
[821s] uh should become faster. Um I actually
[823s] don't know whether this affects the
[825s] other sessions or not. Uh let's take a
[827s] look.
[828s] If I run next
[830s] uh
[831s] fast here.
[833s] Uh it says it's on already. Okay. So, uh
[836s] turning on the Codex fast mode uh in
[838s] this extension actually affects all the
[839s] sessions, which is nice. Uh so, that's
[842s] what I want. Uh so, this should make us
[844s] get the results a little bit faster, but
[846s] it will cost us more. Uh so, the fast
[849s] mode here uh is actually uh getting uh
[852s] spending more to get a lower latency. Um
[855s] so, typically I don't turn on this fast
[857s] mode uh because GPT models are already
[859s] pretty fast. Yeah, but today uh because
[862s] we're running a demo, uh I think it's
[864s] probably better to let it run faster.
[866s] The cool thing about FirstMate and the
[868s] crewmates is that we can really observe
[871s] what it's doing just like a normal agent
[873s] uh because it is a normal agent running
[875s] in a normal uh hurdle tab, right? So,
[878s] this is better than uh how sub agents
[881s] work in most agent harnesses, where it's
[884s] really hard for you to look at what is a
[886s] sub agent doing. And it's also hard for
[889s] you to steer a sub agent, right? Uh you
[892s] can uh here uh with FirstMate I can
[895s] actually come into this sub agent
[896s] session uh and it's just a normal agent
[899s] running a um pie agent or cloud code, uh
[902s] which I can steer from here. Uh if I see
[905s] that the sub agent, this crewmate, is
[907s] doing something wrong, I can just talk
[909s] to it here um instead of having to
[912s] manage everything without the
[913s] transparency and observability uh that I
[917s] have now.
[918s] So, here we can see this market research
[920s] agent um is actually generating a
[923s] report, right? So, it's writing a
[925s] report, uh 100 lines.
[927s] Um once it finishes writing this report,
[929s] it will probably get back to the main
[931s] agent.
[932s] Uh so, this is the market research. The
[935s] technical research is still doing a
[937s] bunch of things. Uh what is it doing?
[939s] Uh it's printing, uh
[942s] it's tooling. Okay, it's actually
[945s] building a backlog.
[947s] Uh it's trying to make a note of which
[950s] decisions uh are open, uh which
[953s] decisions I will need to make later on
[955s] uh to help it finalize the plan, which
[957s] is nice. Uh so, it's managing the
[958s] backlog by itself.
[960s] Uh it's doing some fetch, uh but uh
[963s] okay, yeah, it's fetching Apple
[965s] documentation. Okay, because I asked for
[967s] an iOS app, probably.
[969s] Uh so, that's nice. Uh it looks like
[971s] they're on the right track. So, um most
[973s] of the time when I work with Firstmate,
[976s] I actually don't even look at any of the
[978s] crewmates. Uh that was just like to show
[980s] you um how it works.
[983s] Um I just uh let Firstmate uh handle all
[986s] the juggling for me, and I only talk to
[989s] Firstmate.
[990s] Um since the market research crewmate uh
[993s] just uh finished generating the market
[995s] research report, it should come back to
[997s] the Firstmate now. So, now uh we can see
[999s] Firstmate is working, right? This is
[1001s] probably Firstmate receiving the report
[1004s] from the uh uh from the crewmates.
[1006s] Uh and now Firstmate is uh trying to
[1008s] rationalize reports and probably will uh
[1011s] come back to me uh in a little bit.
[1013s] Okay, yes, we can see um Firstmate
[1015s] actually already torn down uh the market
[1019s] research uh agent session, right?
[1021s] Because that session is done. The report
[1022s] is generated, uh so there's no need to
[1025s] keep that agent around. So, it closed
[1027s] the tab for me.
[1028s] Um typically uh before I had Firstmate,
[1032s] that would be something I would be
[1033s] doing. Uh I would create all those uh
[1036s] terminal tabs, and I will look at which
[1038s] agent is done, which is not. And I once
[1041s] it's done, I got the report, I will
[1043s] close the tab myself.
[1045s] But now it's all Firstmate doing that
[1047s] for me, and I don't even need to worry
[1048s] about that. So, okay, the market scout
[1051s] finished. It found no current iOS app
[1054s] matching the full brief, okay?
[1056s] Virtual only money, parent controlled
[1059s] rights, child only. Okay, okay.
[1062s] So, that means there's some value for us
[1064s] to build it. Closest references. So,
[1067s] these are
[1069s] some apps, right? Some apps that are
[1072s] doing things that are similar.
[1074s] This is Kiddle Bank. It's web only.
[1078s] Okay, so the recommendation, so I
[1080s] typically I trust this because it it did
[1083s] look like it searched around and looked
[1085s] for similar apps.
[1087s] And but different apps have some
[1089s] different strengths, but none of them do
[1091s] exactly what I described. Which is a
[1095s] good validation that maybe we're onto
[1097s] something.
[1098s] So, recommendation is to prototype Atlys
[1101s] Wallet rather than installing
[1103s] replacement. Okay, I agree. So, that's
[1106s] great. The market research told us that
[1108s] we probably should build this. So, now
[1111s] I'm going to be waiting for the
[1112s] technical research to figure out how we
[1115s] would go about that, right? So, yeah,
[1116s] let's see what kind of technical
[1118s] research reports will come back to us.
[1120s] Now, Firstmate has also closed the
[1123s] technical research agent session as
[1125s] well,
[1126s] and it said it's done.
[1127s] Recommends a native SwiftUI iPad app.
[1132s] Superbase auth, okay. Postgres row level
[1135s] security. Immutable server-side ledger,
[1140s] Swift data,
[1141s] local cash. Oh, okay.
[1144s] No real money integrations. I already
[1147s] have some reaction to this.
[1149s] First is that I don't really want to use
[1151s] uh Superbase. My experience with
[1153s] Superbase is that uh once you grow, uh
[1156s] once you have more complexity, it starts
[1158s] to become expensive. Uh but I think for
[1160s] this app, I don't even have a single
[1162s] user yet. Uh I only have Eddie as a
[1165s] single user uh and myself. Uh it's uh
[1168s] and my wife. Um it's not really going to
[1170s] need any kind of scale. We can probably
[1172s] handle that ourselves without paying for
[1174s] a SAS. Um what else uh in this that uh
[1178s] it's interesting? CloudKit.
[1181s] Um
[1182s] hm
[1184s] Okay.
[1186s] Um
[1189s] before implementation, identity and
[1192s] pairing. Okay. So, there's actually
[1194s] quite a bit of ambiguity here. Um and
[1197s] what it's telling me right now uh in
[1199s] this reports, I don't really want to
[1201s] read this reports.md
[1203s] uh because it's going to be like just a
[1205s] long wall of text. What I uh typically
[1207s] do is to ask Firstmate to um
[1211s] do this review with me uh in a better
[1213s] format.
[1215s] >> [gasps]
[1215s] >> Hey Firstmate. Uh I think uh I'm settled
[1218s] on the market research. Uh that's a good
[1220s] result. Uh I now want to discuss a
[1222s] little bit more about the technical
[1224s] research. Um so, I want to discuss this
[1227s] in Lavish. Uh can you spin that up? Uh
[1230s] the the parts I want to discuss the most
[1232s] uh is the backend. Uh especially the
[1235s] database. Uh current recommendation is
[1237s] Superbase, but I don't uh want to jump
[1241s] into the conclusion that we need to pay
[1243s] for a SAS.
[1244s] Um the other solution that I like uh is
[1247s] to get a VPS uh and just host that
[1249s] ourselves for now. Uh especially when uh
[1252s] we don't have many users yet. So, let's
[1254s] probably put that on the table as well.
[1257s] Um and if we do that, we need to figure
[1259s] out what is our authentication uh story.
[1262s] Um on iOS, I think we have to support
[1265s] Apple uh Apple sign in.
[1268s] So, that's probably going to be the
[1271s] solution for now.
[1273s] I think later on we will also want to
[1276s] support Google sign in
[1278s] because that's going to be
[1279s] friendly to a wider set of users,
[1282s] but we are not going to implement that
[1284s] today.
[1285s] Today is just about Eddie having a MVP
[1289s] working for him. So, yeah, let's take
[1292s] those into account and come back to me
[1294s] with a
[1296s] technical proposal in lavish
[1299s] with all the open questions and
[1301s] decisions that I have to make laid out.
[1306s] All right, so lavish is a tool that I
[1310s] built as well. It's basically using HTML
[1313s] artifacts for better interactions on
[1316s] this kind of planning. You will see that
[1318s] in a bit. The report.md I think it's
[1321s] like I can actually show you. Let me
[1323s] just copy
[1325s] uh
[1326s] the path here.
[1329s] Um
[1331s] Okay, and I will spin up another pane
[1334s] here and I will just use new them to
[1338s] open up this
[1340s] markdown file. This markdown file you
[1342s] can see it's like recommendations,
[1345s] what was inspected, blah blah blah blah.
[1348s] Identity.
[1349s] It's like it's so much text. If I really
[1353s] try to read all this,
[1356s] how many lines does it have? 351 lines
[1359s] of
[1360s] text. So,
[1362s] I mean it's a lot of useful information,
[1365s] but I just don't really like reading
[1367s] this long wall of text. It's also not
[1370s] very easy for me to give feedback on
[1372s] specific parts of it, right?
[1374s] So, now I'm just I asked First Mate to
[1378s] use lavish to give me a good technical
[1382s] plan. So, let's see what that will come
[1384s] up with. First mate here spun up another
[1387s] crewmate to do that.
[1389s] This is basically how first mate works.
[1391s] You will see this over and over again
[1393s] that first mate doesn't try to do things
[1395s] by itself. It will delegate the task to
[1397s] someone else.
[1399s] And if we drill into this crewmate, we
[1402s] will see
[1403s] that
[1404s] the crewmate is doing all the work
[1407s] which would otherwise block first mate
[1410s] doing all these things. So, yeah, let's
[1412s] let's the crewmate do his job. So far, I
[1415s] think Luna is doing a good job, right?
[1417s] Nothing seems quite off yet. So, let's
[1420s] go back to first mate and we will just
[1423s] wait here. Yeah, so the back end
[1425s] research is doing its work. What I
[1427s] typically do in this kind of case where
[1429s] I'm waiting for some work to be done is
[1431s] to think about what else can we do.
[1433s] So, here I think the back end is doing
[1436s] some research. Let's think about the
[1437s] front end as well, right? How does the
[1439s] user experience work? So, I'll talk to
[1441s] first mate.
[1443s] Hey first mate. So, while the back end
[1447s] investigation is ongoing, I think we can
[1449s] also do some prototyping on the front
[1451s] end, right? So, I want to also
[1455s] review a lavish plan where we show some
[1459s] of the potential user experience, the
[1461s] user journey. Let's probably like just
[1464s] have a bunch of prototypes of the key
[1467s] screens that this app will have.
[1471s] And let me get a feel of how they can
[1473s] work and I'll give a bunch of feedback
[1476s] on the front end experience through the
[1477s] lavish
[1479s] artifact once we have it.
[1483s] Right, so now we are kicking off another
[1487s] work stream to get the front end kind of
[1490s] prototyped so we can really start to
[1493s] nail the experience. This is something I
[1495s] do a lot uh where I try to prototype
[1498s] multiple things uh at the same time, uh
[1500s] so that we can very quickly make
[1502s] progress on this kind of full stack um
[1504s] projects. So, now we can see FirstMate
[1506s] has spun up uh another tab here uh to do
[1509s] the UX prototypes, uh and it's coming
[1511s] back to me. Um so, FirstMate is always
[1514s] ready for interaction because it's
[1516s] delegated all the tasks to uh crewmates.
[1519s] Yeah, so maybe we can think about what
[1520s] else can we do? Um so, uh I actually
[1523s] want to better understand uh the other
[1526s] similar products, right? Uh because we
[1527s] have already done the market research.
[1530s] Um FirstMate, uh while we wait for those
[1532s] investigations, can we go back to the
[1534s] market research and uh can you analyze
[1537s] the market research and figure out what
[1540s] are some of the interesting concepts the
[1542s] other products have that maybe we should
[1544s] uh draw as inspiration um and uh should
[1548s] consider in our product as well.
[1551s] Yeah, so let's uh get FirstMate to uh
[1554s] just keep working. Uh don't stop. Um and
[1557s] uh the market research probably has some
[1559s] interesting uh ideas that we should take
[1561s] into account. Um so, yeah, I think um
[1565s] here maybe I showed a little bit of my
[1567s] uh thought process for this kind of new
[1569s] projects. Um I try to understand the
[1571s] market, try to understand uh the product
[1573s] requirements, um and and then uh figure
[1576s] out the technical aspects in uh in the
[1578s] same time, uh and try to prototype the
[1580s] front-end experience as well. So, let's
[1582s] see um what's the market research
[1584s] suggest uh suggest?
[1586s] A read-only kids view. Yeah, uh I I
[1589s] talked about that as well. Um money
[1591s] buckets. What is that?
[1593s] Uh spend, save, give, goals. Hmm. Okay.
[1598s] Uh okay, interesting.
[1601s] Um a meaningful activity timeline. Uh
[1606s] okay, that's cool.
[1608s] Uh that I think we should have.
[1610s] Approval requests.
[1613s] Um
[1614s] uh okay.
[1615s] Um
[1616s] withdrawals
[1618s] needs parents' approval.
[1620s] But this is not real money, so
[1624s] yeah.
[1625s] They can propose actions. Okay, okay.
[1627s] Interesting concept. Lessons attached to
[1630s] real actions.
[1632s] Um
[1634s] Ah, okay. After deposit, explain
[1636s] balance. Before spending, explain
[1639s] trade-offs.
[1640s] Uh
[1641s] when borrowing, explain principle. Ah,
[1644s] okay. This is basically the educational
[1646s] aspect that we talked about.
[1648s] That's definitely something I want to
[1650s] have.
[1651s] A virtual loan simulator. Yep.
[1653s] That's I want to have as well.
[1656s] Uh flexible allowance rules.
[1659s] Um okay. That is good because this is
[1664s] something that we currently do manually.
[1667s] So it's good to have that managed by by
[1669s] the app. Gentle gamification.
[1673s] Okay.
[1675s] Uh Gamification is something that's
[1677s] interesting for kids' apps because I I
[1679s] have mixed feeling about that.
[1682s] I think on one hand, it definitely gets
[1684s] the kid more interested. But on the
[1686s] other hand, it feels a little bit
[1688s] manipulative to kids. So we'll see.
[1691s] Uh what we should avoid.
[1694s] Yeah, yeah. Heavy ads.
[1697s] >> [laughter]
[1697s] >> Um recommended inspiration mix. Um
[1702s] Privacy, iPad first design, read-only
[1705s] child mode, family ledger, recurring
[1707s] allowance. Yep. Con- contextual lessons.
[1711s] Uh
[1712s] Oh, yeah. This is actually really good
[1714s] judgment, right? These are the things
[1715s] that I said I wanted to have. And it
[1718s] actually
[1720s] only kept the things that I also thought
[1723s] was going to be relevant.
[1725s] So that's great.
[1727s] Yeah. I think we'll probably like take
[1729s] this into our product requirements.
[1733s] So, that combination com virtual family
[1736s] ledger. Yep.
[1738s] Okay, let's see. I think something just
[1741s] came back the back end.
[1743s] So, here we can see we were previously
[1746s] looking at the tabs, right? Herder also
[1749s] give us this agents side panel where we
[1751s] can see all the agents as well. We can
[1753s] see which directory is running etc. etc.
[1756s] which agents pie agents. That becomes
[1758s] really helpful when we have a large
[1760s] number of agents. We can just quickly
[1762s] switch around.
[1763s] Herder also give us this
[1765s] key bind where we can just do this.
[1768s] And it will bring up this agent search
[1771s] pane.
[1772s] And we can very quickly jump to
[1773s] different sessions from here as well.
[1776s] We can also search by the title etc.
[1778s] etc. So, basically Herder the biggest
[1782s] benefit of Herder is that it understands
[1785s] agents.
[1786s] Whereas the traditional terminal
[1788s] multiplexers
[1790s] don't really understand agents. They
[1791s] only understand terminals and panes
[1794s] and shells like those kind of things.
[1797s] Okay,
[1798s] there is a lavish artifact being brought
[1801s] up to me in my browser. So, this is when
[1804s] the agent has done some planning and
[1806s] generated a artifact in lavish. And this
[1809s] is the lavish editor.
[1811s] It's fixing some layout issues because
[1813s] sometimes when the agent generates
[1814s] artifacts it will have some UI problems.
[1817s] So, it gets fixed before it's presented
[1819s] to me. So, okay. Back end review. This
[1822s] is the back end review. The short
[1824s] version buy operational simplicity
[1826s] before buying infrastructure. Okay, I
[1828s] like that. What is really saying?
[1831s] Recommended hosted Superbase Pro. Okay,
[1835s] interesting. virtual money only those
[1840s] sound right.
[1841s] MVP scale, hosted baseline $25 a month.
[1847s] $25, that's still a lot.
[1850s] Let's see, identity, that's good.
[1853s] Okay.
[1856s] Which back end should carry the family
[1858s] ledger? Okay, hosted Superbase, that's
[1860s] the recommendation.
[1863s] The cost is really the thing that I just
[1865s] like feel like this is way too much for
[1869s] just three users, right?
[1871s] Three users would not pay for this much.
[1874s] Self-hosted VPS,
[1877s] roughly $30
[1879s] a month, really?
[1881s] Um
[1883s] No, that's wrong. It shouldn't take this
[1885s] much.
[1887s] But that's a knowledge I have.
[1889s] Self-hosted
[1890s] Superbase,
[1892s] CloudKit, iCloud.
[1895s] Apple developer membership, I already
[1897s] have this. So, yeah, this is the nice
[1899s] thing about Lavish is that I can give
[1901s] feedback on this. So, given that I think
[1905s] this is wrong, I can just say this is
[1908s] wrong. I think I have used Hetzner
[1912s] before.
[1913s] Um
[1915s] I think Hetzner offers really low cost
[1918s] VPS that can handle
[1921s] handle
[1923s] what we need. Why am I typing? I should
[1925s] be talking. Okay, so I'll queue this
[1927s] feedback and it's queued. So,
[1931s] what else?
[1932s] I think it's probably like made the
[1935s] recommendation based on this assumption
[1938s] that this is so expensive. Um I think I
[1941s] probably want to give this feedback as
[1943s] well.
[1945s] $25 to $40 a month is still way too
[1948s] expensive.
[1950s] Right now, we we don't really have many
[1952s] users. I don't want to spend this much.
[1955s] I think a low cost VPS can give us
[1957s] somewhere around like $5 a month.
[1961s] Maybe a little bit more but around that
[1963s] ballpark. I think we should look for
[1965s] options that can allow us to get to that
[1967s] level of cost.
[1971s] All right, cute those feedback. Now, the
[1974s] authority boundary, okay. The phone is a
[1977s] client. Postgres is the referee. Yeah,
[1979s] that's right. That sounds right.
[1982s] So, it it drew this diagram here. So,
[1984s] let's see full screen. This is something
[1987s] that's also really nice about Lavish is
[1989s] that it can just draw diagrams for me to
[1991s] see. Let's zoom in a little bit. iPad
[1995s] app. Local cash,
[1998s] native app sign in, the provider.
[2002s] Retry
[2004s] and reconcile with a narrow domain RPCs
[2007s] going to the membership checks Postgres.
[2011s] Okay.
[2013s] Okay.
[2015s] I think on a high level this is Yeah,
[2017s] right. This is not nothing too
[2019s] controversial.
[2020s] Immutable ledger.
[2024s] Audit event. Okay.
[2027s] Hmm.
[2028s] Do we need audit events encrypted
[2031s] export?
[2032s] I think it's likely over-engineering a
[2035s] little bit.
[2036s] Right?
[2037s] I I don't think I will need this.
[2040s] So, let's just delete.
[2043s] Let's maybe give some like feedback. Um
[2047s] I'll delete this. I'll delete this. Uh
[2052s] I don't think right now we need to worry
[2054s] about auditing and export
[2057s] all those requirements. Let's keep the
[2060s] initial scope minimal.
[2064s] All right, cute feedback about this
[2066s] diagram as well. It's really useful to
[2068s] like look at the architecture here,
[2070s] right? Otherwise, we wouldn't have
[2071s] discovered that there are some of the
[2073s] hidden requirements being baked in
[2075s] um to the plan. Um Apple now, this is
[2078s] right. Yeah, I don't think I need to
[2079s] worry about that. Google later.
[2082s] But,
[2083s] uh
[2085s] yeah, let me look through this. Parent
[2087s] has native sign with Apple
[2090s] uh exchanges this. Uh okay. So, it's uh
[2092s] it's writing this plan with the
[2094s] assumption that I will use Superbase, uh
[2096s] but I will change that.
[2098s] Um
[2100s] keep an auth identities table.
[2103s] Yeah, that's right. That's what I want.
[2107s] Um because that can allow me to um allow
[2109s] users to link uh different accounts, uh
[2112s] different authentication uh identities
[2114s] into the same account.
[2116s] Um
[2118s] recovery
[2120s] uh manage daily backup uh privacy. Okay.
[2125s] Um okay.
[2127s] So, this uh I think I'm not ready to
[2130s] make this decision right now because uh
[2133s] I have this feedback. I I I think we
[2135s] need to uh make sure we understand the
[2137s] cost, the real cost of the VPS options,
[2141s] right? Um so, how should a child sign
[2144s] in?
[2145s] Uh yeah, it's the parent. Uh this I
[2148s] think is something we can decide. Parent
[2150s] manage profile. Um but, I think uh
[2155s] parent
[2157s] The parent should be able to set a PIN
[2160s] to gate the access uh for parents only
[2164s] actions.
[2166s] Right? Uh so, that's going to be good.
[2169s] What recovery promise do we need?
[2172s] Um
[2174s] yeah.
[2176s] Point in time.
[2178s] Hm.
[2180s] This this is very expensive.
[2183s] Uh daily backup 90 exports. Uh yeah,
[2186s] let's uh start with that.
[2189s] But um
[2192s] But I think we will need to revisit
[2193s] these options once we better understand
[2196s] the cost the real cost of going with
[2199s] VPS.
[2202s] Okay.
[2203s] All right, sequence. Okay, so let's send
[2207s] this back. Maybe let's
[2211s] um
[2212s] revise this whole artifact based on my
[2215s] feedback there.
[2218s] Okay, let's send it back. So, the nice
[2220s] thing about Lavish, you can see here is
[2223s] that I can just interact with the agent
[2225s] interactively here, right? I can queue
[2228s] the choices I make on the the decisions.
[2231s] I can give feedback by annotating every
[2233s] element here. I can look at the diagram
[2237s] here as well. So, everything is
[2238s] interactive. This is much much more
[2241s] friendly than reading a long wall of
[2243s] text and then tell the agent, "Hey, I
[2246s] want to modify that part of the plan."
[2249s] Um so, this is just a better experience.
[2252s] Let's go back to the terminal. We can
[2253s] see here First Mate is doing some work.
[2255s] It's probably
[2257s] taking my feedback
[2258s] into account. So,
[2261s] yeah, it's doing some search. It's yeah,
[2263s] searching for the cloud pricing now,
[2265s] right?
[2267s] It's now anchoring its answer for the
[2270s] cost based on some real data.
[2273s] Key findings.
[2276s] Yeah, I think it's probably found
[2278s] what we were looking for.
[2280s] Um what else? Here we can also see
[2283s] follow-up First Mate up watcher. This is
[2288s] what's happening here
[2290s] is that the UX prototypes crewmate has
[2293s] also done its work already
[2296s] and it's giving its status updates to
[2299s] First Mate. This is how First Mate
[2301s] receives those status updates from the
[2303s] crewmates. Um and because First Mate is
[2305s] working, it's trying to do this um
[2308s] work by itself,
[2311s] it's now stuck. Um but it's okay because
[2313s] this uh status updates will just queue
[2316s] uh in these follow-ups.
[2317s] Uh and once First Mate is freed up, it
[2319s] will read the status updates from the
[2321s] crewmates to know uh okay, there's
[2324s] another task that's also done. If I
[2326s] really don't want to wait, I can always
[2327s] go into uh the crewmates window uh and
[2331s] look at what is done. Uh it's completed
[2333s] a report. Um includes
[2336s] uh this uh prototype scope. Okay.
[2341s] Um
[2343s] Okay.
[2346s] It's basically uh it's written in a
[2347s] markdown file, right? So, it's not real
[2350s] prototypes. I cannot play with it. Uh
[2352s] but it's defined the scope, uh which is
[2355s] okay. Um but uh let's see.
[2358s] Um I think I will likely uh I will
[2361s] likely I think I will ask it to um
[2365s] build some real prototypes that I can uh
[2367s] play with.
[2368s] Um yeah, I think I will really want to
[2370s] play with some real prototypes. Um so,
[2373s] once First Mate is freed up, I'll tell
[2375s] First Mate to do that.
[2379s] Uh so, here I will uh just tell First
[2381s] Mate uh about that.
[2384s] Hey First Mate, uh the UX prototypes
[2386s] crewmate has already done his work, uh
[2388s] but it's written uh the results in a
[2391s] markdown file. So, that is like the
[2393s] scope definition for the prototypes, uh
[2395s] but it's not real prototypes. Uh I want
[2398s] you to um ask for real prototypes
[2402s] um that I can play with in a HTML
[2404s] artifacts in Lavish.
[2406s] Um it should be possible without
[2407s] building any iOS code. Uh I just want
[2410s] you get a HTML uh prototype um and
[2414s] focusing on like wireframes, uh like
[2417s] just the screens, the concepts, the user
[2419s] flow, not real polished UX mocks.
[2423s] So, let's do that.
[2427s] Okay. So, I killed another message here.
[2431s] Once
[2432s] First Mate is freed up, it will see all
[2433s] these updates. First Mate just revised
[2437s] this proposal. So, let's see.
[2441s] At this scale, a low-cost Hetzner VPS
[2444s] can fit the budget. Okay. It's changed
[2447s] its recommendation now.
[2449s] Let's see. Budget VPS 5.5. That's nice.
[2453s] That I like.
[2458s] Budget first. Ops light. Yeah, so hosted
[2462s] Superbase has lighter ops.
[2467s] Okay.
[2469s] Okay, maybe
[2471s] maybe there's some truth to it, but I
[2473s] just think this is too much. I don't
[2475s] want a MVP at this stage to cost me that
[2478s] much.
[2479s] So, cost is this. Yeah, I I think this
[2482s] is realistic. This is more aligned with
[2484s] my experience.
[2485s] So, I I think this is right.
[2490s] Backups at 20%. Okay.
[2493s] Yeah, so I think I'm just going to go
[2495s] with the VPS. This is This cost is a lot
[2498s] easier to manage. Okay, decision A, I
[2501s] will go with the VPS.
[2505s] This was already chosen.
[2508s] This was uh
[2509s] This was
[2511s] okay.
[2512s] This is also This is applicable to
[2518s] Okay.
[2519s] Uh
[2520s] Are we sure this is applicable for VPS
[2524s] as well?
[2526s] Uh
[2527s] Yeah, I think at this point we I'm
[2529s] already very confident with uh the whole
[2532s] back end part of this. Uh so, I will
[2534s] just send and end. Uh and this uh this
[2537s] is done.
[2539s] Uh so, I come back to FirstMate. And
[2541s] FirstMate is now uh seeing all the
[2543s] feedback along with the message I queued
[2546s] uh earlier. Uh so, now he's going to
[2548s] process everything now. FirstMate
[2550s] brought up another um lavish artifact.
[2553s] And this one is interactive wireframes.
[2556s] Um parent writes, "Eddie understands."
[2560s] Uh
[2561s] Okay. Uh let's see.
[2563s] Journey map, welcome family setup.
[2567s] Pair Eddie.
[2568s] Uh pair, hm.
[2570s] Roll gate,
[2572s] uh parents dashboard, child wallet,
[2575s] activity detail.
[2577s] Uh allowance rule, loan and repayment,
[2580s] lesson path. Okay, this all makes sense.
[2582s] These are uh
[2584s] except for this pair Eddie. I don't know
[2586s] what pair means. Uh let's see. Prototype
[2588s] controls, go offline, sync pending
[2591s] changes, reset prototype.
[2593s] Uh okay.
[2597s] Uh captain's choice. Where are the
[2600s] prototypes?
[2602s] Uh oh, okay. Playable prototype is here.
[2604s] Okay.
[2605s] Uh okay, what choices?
[2607s] Try the screens first. Uh queue
[2609s] feedback. Okay.
[2610s] Uh so, let me try the prototype first,
[2613s] okay.
[2614s] Um
[2615s] Start here. This is the prototype. Uh a
[2618s] wallet for practice. Um virtual money
[2620s] only, create a family. Okay.
[2623s] Create family.
[2625s] Uh set up Eddie's practice wallet.
[2628s] Uh family name is Chen.
[2631s] Eddie,
[2633s] uh
[2634s] unit name.
[2635s] Tokens.
[2637s] >> [laughter]
[2637s] >> Don't use tokens. Uh points.
[2640s] Um create family.
[2643s] Um
[2643s] Use this iPad for Eddie. Oh, pairing
[2646s] means another device. Okay. Uh that's
[2649s] actually pretty thoughtful because I may
[2651s] be setting this up on my iPhone and
[2653s] Eddie's going to use his iPad.
[2656s] I'll just assume it's on the same iPad
[2658s] for now.
[2660s] Who's using this iPad? Eddie.
[2663s] Uh
[2665s] Wait, prototype has a pin already. Okay.
[2668s] Um
[2669s] Eddie, it's read only. Your balance is
[2672s] here. Virtual balance only. Recent
[2675s] activity, my loan, next lesson.
[2678s] Uh okay.
[2680s] Recent activity is already here, right?
[2683s] Um
[2684s] Okay, interesting.
[2686s] Next lesson, borrowing and repaying. Mm.
[2690s] Uh
[2691s] Uh okay.
[2693s] Um
[2695s] My loan.
[2697s] Uh
[2700s] Why does it already have a loan?
[2702s] Uh okay.
[2703s] Maybe it's mock data. Right. So, uh
[2706s] switch person. How do I
[2709s] go to a parent? Okay, here.
[2711s] Tw
[2713s] Unlock parent mode.
[2716s] Uh okay. So, in parent's mode, I look at
[2718s] his wallet, I can see the balance, I can
[2721s] add points. Um
[2723s] Uh set allowance. Okay.
[2725s] Okay. So, there's already a few things
[2728s] that I I have reactions
[2731s] to. So, let's see whether the questions
[2733s] already covered that. Should Eddie be
[2735s] able to ask for points?
[2737s] No request. Yeah, no request. If Eddie
[2740s] wants to ask for points, he comes to me
[2742s] in person, right? Um where should loans
[2746s] live?
[2748s] Uh card and wallet details for the top
[2751s] level.
[2753s] Yeah, this is okay. Um how should
[2755s] lessons open?
[2757s] Short linear starter path.
[2759s] Uh uh
[2762s] Yeah, Linear is probably better here.
[2766s] Okay, so we made some choices. But I
[2769s] also have some feedback, right? So
[2772s] I think first when we were setting this
[2774s] up, we selected
[2776s] what kind of currency it is.
[2780s] I actually think this should just be the
[2782s] local currency of the user like US
[2786s] dollars because that's
[2788s] what Eddie already uses as his
[2791s] allowance.
[2794s] What else?
[2796s] Set allowance, create loan. I think in
[2799s] the Eddie view uh
[2802s] uh here
[2804s] Next lesson, borrowing and repaying.
[2808s] Uh, yeah, this is weird. Um
[2812s] The recent activity list is already on
[2815s] the Eddie's wallet view, but there is
[2818s] another button that says recent
[2820s] activity, which is odd.
[2823s] Um okay. Yeah, just give some feedback
[2826s] for now, but this looks like looks okay.
[2829s] The UI is not really like the UI is not
[2833s] very pretty or anything, but that's why
[2836s] I asked. I asked for wireframes only so
[2838s] that we can actually get this prototype
[2840s] very quickly and give this feedback. I
[2843s] will do UI polish later.
[2846s] So the prototype is probably already
[2849s] okay for now.
[2851s] Uh just address my feedback and that's
[2854s] probably okay for now. We don't need to
[2857s] update this prototype. Just take my
[2860s] feedback into account and write down a
[2863s] PRD document
[2865s] as a markdown file in the repo.
[2868s] Probably as the
[2870s] readme file for now.
[2874s] Okay, so this is ended.
[2877s] Let's come back to first mate. Uh so,
[2879s] now first mate should be able to see all
[2882s] my feedback um and know that the next
[2885s] step is to write down the product
[2887s] requirements.
[2888s] So, one thing we can see here is that
[2890s] the context window is already um getting
[2892s] filled, right? It's now 70% of the 272K.
[2897s] Um so, once this reaches 800% it will do
[2900s] a compaction automatically. Uh
[2903s] compaction basically summarizes the
[2905s] current uh context window into a much
[2908s] more concise uh summary and then
[2911s] restarts uh the session. Um so, a few
[2914s] things that uh you want to know about
[2916s] compaction, um if you are running GPT
[2919s] models in Codex, Codex has a server-side
[2923s] compaction capability, uh which works
[2925s] better than any other compaction that we
[2927s] know about. Um but, when you run GPT
[2931s] models in other harnesses like Pi Agent,
[2934s] uh the server-side compaction does not
[2936s] automatically happen because Pi Agent by
[2938s] default uses another compaction
[2940s] algorithm implemented by Pi. Uh but,
[2943s] it's possible to uh use the server-side
[2945s] compaction from Codex as well. Uh what
[2948s] we can do here is here. Uh there's this
[2950s] plugin called Pi OpenAI server
[2953s] compaction. This is an extension you can
[2955s] install uh into your Pi Agent and will
[2958s] make your Pi Agent use the OpenAI
[2961s] server-side compaction for any GPT
[2964s] models that you run in Pi. That will
[2966s] perform better for long-running tasks.
[2968s] Uh so, when the task is very long, it
[2970s] runs out of context window, uh it will
[2973s] do the OpenAI's server-side compaction,
[2976s] which is uh the one that performs the
[2977s] best.
[2978s] Um so, here Captain, I captured the
[2981s] wireframe feedback. Okay. A worker is
[2983s] now updating uh this readme file. Okay.
[2986s] Um so, once the readme file is updated,
[2989s] something I will do uh is that um I will
[2993s] get this repo, uh, into a GitHub repo,
[2996s] uh, and I will open source this.
[2998s] So, something I want to do here is, um,
[3001s] hey FirstMate, ask the worker, uh, to,
[3004s] uh,
[3005s] commit the update into the repo, and
[3009s] then get this repo published into my
[3012s] GitHub, uh, as a public repo, uh,
[3014s] because we will need to, uh, do
[3016s] something else later on.
[3018s] Yeah, so, the nice thing about FirstMate
[3020s] is that, uh, you can just keep talking
[3021s] to FirstMate about what you want to do,
[3024s] and FirstMate will figure out, uh, how
[3026s] to actually get it done. So, here
[3028s] FirstMate will probably like talk to
[3029s] this other, um,
[3031s] uh, agent again, uh, to do this
[3033s] follow-up requirements that was not in
[3035s] the initial scope. Um, so, the, um, the
[3038s] crewmate should receive that message
[3041s] pretty soon.
[3044s] Um, so, if we come back here, uh, yeah,
[3047s] you you can see there's already
[3048s] steering, "Please finish the readme PRD
[3050s] update now, commit it, um,
[3053s] and then report." Um,
[3056s] that's the message FirstMate sent to
[3058s] this crewmate. Okay, FirstMate asked me
[3061s] a question.
[3062s] Uh, just use my GitHub account, uh,
[3064s] kunzhanguid, and uh, my
[3068s] uh, local GitHub CLI should have already
[3071s] authenticated and have permission to
[3072s] operate on it.
[3078s] Yep. Uh, so, yeah, it's good that it's
[3081s] asked, uh, because, uh, I might have
[3083s] multiple identities logged into my
[3085s] GitHub CLI.
[3086s] Um, so, yeah, let's see. One remaining
[3090s] choice before I create the remote.
[3092s] Should it stay local only with a public
[3094s] GitHub mirror?
[3096s] Mm.
[3097s] Good question.
[3099s] Uh, now, after we have the GitHub repo,
[3102s] then we switch to a PR-based workflow.
[3104s] Um, and, uh, we don't need no mistakes
[3108s] right now. Uh, this is still a very
[3110s] early stage product. Uh, so let's stay
[3112s] with uh, direct PR.
[3114s] Um, and later on once we have a MVP
[3117s] built, we will turn on no mistakes to
[3119s] have a stronger god rail.
[3123s] Okay. So I here I talked about no
[3125s] mistakes. Uh, no mistakes is another
[3128s] tool I have to have a local validation
[3130s] pipeline for every single code change
[3132s] uh, to just make sure uh, the change is
[3135s] really okay to merge. Uh, because you
[3137s] can see here I'm not really reviewing
[3139s] uh, the code myself too much. I'm just
[3142s] talking to Firstmate here. Um, so I kind
[3144s] of need uh, the additional set of god
[3146s] rails to help me build confidence that
[3148s] the code is going to be uh, of
[3151s] reasonable quality. Of course I we will
[3153s] test it end-to-end as well.
[3156s] Um, so uh, here I uh, the reason I asked
[3159s] Firstmate to not use no mistakes right
[3161s] now is because we don't have any code
[3163s] yet, right? Uh, all we have is
[3165s] prototypes. Um, so when we are building
[3167s] prototypes I uh, I usually don't really
[3170s] turn on no mistakes uh, for this kind of
[3173s] uh, god rails.
[3174s] So typically the way to think about when
[3176s] to turn on no mistakes is uh, if this is
[3178s] a code change, you would otherwise have
[3181s] a human review for you, then you should
[3183s] turn on no mistakes. Uh, if it's
[3185s] something that you work by yourself
[3187s] uh, and you don't really uh, want to uh,
[3190s] have another human peer review for you,
[3192s] then uh, you wouldn't want to turn on no
[3194s] mistakes either.
[3196s] Uh, so Captain, the public GitHub
[3198s] repository is live. Okay, that's nice.
[3200s] Um, but I actually noticed a problem
[3203s] here. Eddie's wallet uh, the Eddie's uh,
[3206s] spelled wrong. Um,
[3209s] Eddie uh, is with the wrong spelling.
[3211s] Uh,
[3212s] it should be e d d i e. That is uh, how
[3215s] Eddie spelled his name. So let's uh, get
[3218s] that corrected uh, uh both locally and
[3221s] on GitHub.
[3224s] Uh yeah, so now we uh sent this
[3228s] correction.
[3229s] Um so, FirstMate is going to figure out
[3231s] how to actually make the correction
[3233s] happen. This is something that's uh I
[3235s] just uh feel really good about uh
[3238s] because otherwise I would be uh be the
[3241s] person who's figuring out, "Oh, do I
[3243s] rename the local repo? Uh do I rename
[3246s] the upstream first? Uh how how do I make
[3249s] everything uh corrected?" Uh so, now
[3252s] FirstMate will just go ahead and do that
[3254s] for me. All right, "Captain, the public
[3256s] repository is now renamed. The local,
[3259s] remote, and project description are
[3261s] updated. The PRD worker is correcting
[3264s] every eddy spelling in the readme.
[3266s] Nice." This is the thing uh I really
[3269s] love about FirstMate. It takes care of
[3271s] things. Uh I don't need to think about
[3273s] what are all the things I have to do uh
[3276s] to get things like this corrected,
[3277s] right? Um so, the spelling correction is
[3279s] ready. It updates everything. Uh
[3283s] "Okay. Um
[3285s] no CI checks configured yet." Uh yeah,
[3287s] that's right. We don't have CI. Um
[3290s] "So, was this already merged?" Uh it
[3292s] updates readme.
[3294s] The project info
[3295s] uh corrected. Main remains unchanged un-
[3298s] uh until I approve the PR.
[3301s] Uh I'll tell FirstMate.
[3303s] Uh you don't need my approval for any
[3305s] PRs right now. Uh every PR uh once you
[3308s] reviewed it should be okay to merge. Um
[3311s] we will have stronger approval flow
[3314s] later on once we have a MVP built.
[3320s] Um okay. Um so, now FirstMate will
[3323s] probably just get that merged. Uh and
[3325s] then we have a proper repo set up. The
[3327s] re- the reason uh I had this repo set up
[3331s] uh is because I want to um show you
[3333s] something else. Uh but let's wait for
[3335s] this to be done first. First mate said
[3338s] the PR has been merged. So, let's take a
[3340s] look.
[3342s] Um what's in our repo now? The repo is
[3345s] here. Um and it only has a readme file,
[3348s] right? Um the readme file is a PRD
[3350s] document, which is exactly what we
[3352s] asked. Uh settled decisions, etc. etc.
[3355s] Okay, nice. Problems, target user.
[3358s] Uh okay. So, it basically captured
[3360s] everything we talked about uh into this
[3362s] document, right? The reason I created
[3364s] this repo and have it um
[3367s] capture this PRD is because now I want
[3370s] to work on the product design. Um so,
[3373s] what I will do is that I will use Cloud
[3375s] Design
[3377s] um to help us uh do that. And the way I
[3380s] go about this is to go to design systems
[3382s] and create a new design system. The
[3385s] reason I created a design system instead
[3387s] of just a design is that once the design
[3389s] system is established, later on we can
[3391s] build more UI components and more uh
[3394s] screens and change how things work
[3396s] without having to reinvent every single
[3399s] element and uh and we can ensure that
[3401s] there's going to be consistency from
[3403s] this point on. So, we'll create here
[3406s] and
[3407s] uh
[3408s] company name. It should be product name,
[3410s] right? Um so, the name is Eddie's
[3414s] wallet.
[3416s] And we will uh get the repo URL here.
[3420s] And I'll have it added. Um
[3424s] link code. Uh no. Uh there's only a
[3427s] readme file. There's no code. Uh
[3429s] nothing. Okay. So, here uh the notes are
[3432s] really important. Uh I'll give you some
[3433s] context.
[3435s] This repo doesn't have any source code
[3437s] right now. Uh we haven't really started
[3439s] building this project. Um this is going
[3442s] to be an iOS app. And you can read the
[3445s] readme file to understand the
[3447s] requirements.
[3449s] Um so, uh
[3451s] you will need to figure out the main
[3453s] screens and feel free to challenge any
[3456s] prescribed user experience in there.
[3460s] Use your judgement for what's going to
[3462s] be the best experience. I want this
[3464s] experience to be fun and educational and
[3467s] friendly for kids
[3469s] and for parents there's good control and
[3472s] transparency.
[3474s] Um.
[3475s] So, yeah.
[3481s] Okay.
[3482s] So, Claude design is now working on this
[3485s] design.
[3486s] It's overloaded. Oh, no.
[3489s] Let's see whether it can recover.
[3491s] Um, hm. Try with Sonnet. Do we dare
[3496s] go in with Sonnet? Um.
[3499s] Hm.
[3501s] Let's give Sonnet a try. It's okay.
[3504s] Um. Sonnet is not
[3508s] Sonnet is not going to be able to come
[3510s] up very very clever solutions,
[3513s] but here I also don't think the problem
[3515s] is too complex, right? So,
[3517s] I would say give it a try and see
[3519s] whether it can help us get it done.
[3521s] Sonnet is working.
[3523s] Uh, Claude design will basically look at
[3526s] the requirements and start to figure
[3530s] everything out. It's a pretty nice
[3532s] experience to figure out a design
[3533s] system, I would say. It will come up
[3536s] come up with concepts. It will ask me
[3539s] questions.
[3540s] It will listen to my feedback, etc. etc.
[3543s] So, I'll show you as we go, but it's
[3545s] going to take a while. So, right now for
[3548s] right now probably let's go back to
[3550s] Firstmate. So, here you can see
[3552s] Firstmate already did a compaction. So,
[3554s] now we're back to 9.5%, right? So, we
[3558s] have a lot more room to go.
[3560s] The compaction will actually not lose
[3562s] much context.
[3564s] I'm today I mostly just rely on the auto
[3566s] compaction for GPT models. It works
[3568s] really well. Um I really don't really I
[3572s] don't really proactively do compaction.
[3574s] I just let the
[3576s] context window run out and let the auto
[3579s] compaction do its job. Um um
[3582s] So here while Cloud Design is working on
[3584s] the design,
[3585s] we should actually be able to start
[3587s] working on the back end, right?
[3590s] Hey first mate.
[3592s] Um asking a designer to look at the UI
[3595s] design.
[3596s] In the meantime, can we spin up some
[3598s] work to get the back end built?
[3600s] What do we need to set up? If there's
[3602s] anything that needs me, for example,
[3605s] Apple sign in etc. etc. Let me know. But
[3608s] you should keep going on everything
[3611s] that's not blocked on me.
[3613s] Try to parallelize the work as much as
[3615s] possible.
[3617s] Um for Hetzner,
[3619s] I actually have an API token in my
[3622s] Atomic Vault.
[3624s] So you can use that to manage my Hetzner
[3627s] account.
[3632s] Uh
[3632s] the API token I have was called H Cloud
[3637s] token. So I'll just tell it.
[3639s] I mentioned something called Atomic
[3640s] Vault.
[3642s] It's It's something I use to manage my
[3644s] secrets. I'll show you here.
[3647s] Uh
[3649s] Atomic Vault. I manage all the secrets
[3652s] in here and it has a really nice uh
[3656s] authorization flow.
[3658s] So when the agent needs to access the
[3660s] secrets, I will see it and I can decide
[3663s] do I approve? Do I not approve?
[3665s] And that's really really useful for this
[3667s] kind of flow. Yeah, you can see. It's
[3669s] already asking for this token, right? So
[3672s] I'll just approve. It shows me Spy. So
[3675s] it's my agent here.
[3677s] Um so that is uh something that uh is
[3681s] better than uh environment files. Uh so,
[3683s] a lot of uh people just put secrets in
[3686s] those dot env files, right? Uh and those
[3688s] environment files really um
[3690s] uh can be quite uh easy to get stolen.
[3694s] Uh
[3694s] what is this doing? Uh oh, it's calling
[3696s] the API to get uh get the servers, etc.
[3700s] So, I'll approve.
[3701s] Um so, yeah, every time the agent needs
[3703s] to use a production secret, I can just
[3706s] uh see it here. I can see what commands
[3709s] uh are being proposed to run, uh then to
[3711s] use that to decide uh is that okay,
[3713s] right? Uh so, this is still uh calling
[3715s] the API. Um
[3718s] There are some rules I can set to just
[3720s] like blanket allow uh the agent to do
[3723s] this so that I don't get asked every
[3724s] single time. Uh but, uh I don't want to
[3727s] do that right now. Uh right now, I
[3728s] actually want to see every single
[3730s] command it's running to access uh my
[3733s] Hetzner account. Um this Atomic Vault uh
[3736s] it's a pretty new project. Uh maybe I'll
[3738s] I'll show you here.
[3739s] Um it's
[3741s] uh Atomic
[3743s] Uh it's a open source GitHub project. Um
[3746s] it's actually built by the legend uh
[3751s] who created Homebrew, haha, Max Howell.
[3754s] So, uh so, that's why I trust this
[3756s] project. Uh although it's a new project,
[3759s] uh I trust this a lot. Um and I have
[3761s] been
[3762s] uh giving feedback uh to Max as well uh
[3765s] for how this uh can be more useful uh
[3768s] through my own usage. Um and so far,
[3770s] it's been really helpful. Uh you can
[3772s] see, right? Um when the agent uh is
[3774s] accessing the secrets, I have a good
[3776s] dialogue where I can review. Uh this is
[3779s] something that just helps me uh like
[3781s] have confidence that my secrets are not
[3784s] being leaked to an unintended use. Um I
[3788s] think as we delegate more and more
[3789s] things to agents, uh this is going to
[3792s] become more uh more and more important.
[3794s] Um
[3795s] because otherwise, if you throw these
[3797s] secrets in a file, you really don't know
[3801s] when the agent has already given that
[3803s] away.
[3804s] Uh right? Uh because we're not looking
[3806s] at every single tool call the agent is
[3808s] making. Uh maybe the agent has published
[3810s] that secret to another public file or
[3814s] sent that as a part of a public API call
[3817s] that's uh got some other servers to
[3819s] capture the secret. Uh so, really having
[3822s] a um tight control on where the secrets
[3825s] are going, especially production
[3827s] secrets, uh is going to be increasingly
[3829s] important. Okay, FirstMate has created
[3833s] three parallel work streams.
[3835s] Uh okay, back-end API. Okay, uh the DB
[3838s] schema
[3840s] off boundary. Uh it's asking something.
[3843s] Okay, it's running a Python script. Um
[3846s] Yeah, for now I think everything uh it
[3848s] needs I'll just approve because uh I
[3850s] know it's like uh it's setting things
[3852s] up.
[3853s] Um the VPS foundation with backups and
[3856s] deployment automation.
[3858s] Uh
[3859s] Mm. I actually think
[3863s] we um
[3865s] So, something I like
[3867s] to do with VPS is that uh I want to
[3871s] actually make the deployment
[3873s] declarative. Um so, I typically do that
[3876s] with Terraform like things like that um
[3878s] to
[3879s] basically
[3880s] document um the infrastructure as code.
[3884s] Uh so, here let me maybe ask.
[3887s] Hey FirstMate, uh for the VPS
[3889s] foundation, how are we approaching it? I
[3892s] typically like to use things like
[3893s] OpenTofu
[3895s] uh um
[3896s] to make the infrastructure
[3898s] uh codified as code.
[3902s] Okay, uh so let's see what FirstMate
[3904s] will say. Um so, here um there are
[3907s] already three parallel agents running,
[3910s] uh each doing something different. Um
[3912s] which parts needs to change, right? Does
[3914s] this agent have to change? Does the VPS,
[3917s] uh, agent needs to do some work, uh, for
[3918s] the for what I'm saying? I don't need to
[3920s] worry about that now. Uh, I just talked
[3922s] to FirstMate and FirstMate will worry
[3924s] about that. Uh, so this is the really,
[3927s] uh, nice thing about working with
[3928s] FirstMate is that I don't have the
[3930s] mental load to worry about which agent
[3932s] needs to be steered versus not. Uh,
[3935s] okay. Yes, Captain, I've redirected the
[3938s] infrastructure work to use Open Toffu.
[3940s] Okay, cool.
[3942s] Um, I like Open Toffu, uh, because, uh,
[3945s] it's just
[3946s] uh,
[3947s] you will see later. Uh, once I, uh, once
[3949s] it's done, I'll show you the
[3950s] configuration. Uh, you will see that the
[3953s] machine and the resources that we need
[3955s] are all declared in a file, uh, which we
[3958s] can audit and we can commit and we can
[3960s] source control, uh, which is really
[3962s] nice. Okay, so, uh, three agents, let's,
[3965s] uh, just let it do its work, right? Uh,
[3967s] the back end is being built. Uh, let's
[3969s] go to the front end.
[3971s] Okay, design system is still being
[3973s] created. Um, so it's doing a lot of
[3976s] work.
[3977s] Um,
[3978s] typically Cloud Design would show me
[3980s] something for me to look at, uh, early
[3983s] on, but this time it doesn't. Uh, maybe
[3985s] it's something Sonnet has decided to do.
[3987s] Um,
[3989s] I kind of want to use Fable for this,
[3991s] um, but, uh,
[3994s] let's stay frugal for now.
[3996s] Um,
[3996s] Sonnet, uh, let's keep going and see
[4001s] whether we can get good enough results.
[4003s] Cloud Design has shown me Eddie's Wallet
[4006s] Design System. Okay, let's see. Uh, this
[4009s] is a read me. This is just like a bunch
[4011s] of descriptions.
[4012s] Uh,
[4013s] where are the the designs? Okay, here
[4015s] are the designs.
[4017s] Uh, brand, I can't, uh, these are the
[4019s] icons,
[4021s] uh, which look reasonable, right? Um,
[4025s] wordmark, Eddie's Wallet. That's okay,
[4027s] straightforward.
[4029s] Uh,
[4030s] I uh colors.
[4032s] Uh gold. Okay.
[4035s] Golden. Um my son likes golden.
[4038s] Um but this looks uh
[4041s] yeah, let's see maybe see a real screen.
[4043s] Neutrals. Uh okay. Um
[4047s] This look like these colors uh do look
[4051s] uh pleasant. Uh so maybe it's okay.
[4054s] Um
[4055s] Okay, this is not good.
[4058s] Right? It's uh not even centered
[4061s] correctly.
[4062s] Uh so we can give feedback.
[4064s] Um the text is not even centered.
[4068s] Um what else? Uh
[4070s] uh
[4072s] Yeah, maybe just that. Uh we will give
[4075s] other feedback elsewhere.
[4077s] Um
[4079s] Click-through. Okay. Oh, this is a real
[4082s] screen. Okay.
[4083s] Uh can I actually click?
[4086s] Uh
[4087s] sign in with Apple. Okay.
[4089s] Uh okay. So this is the um the current
[4093s] design. I think it looks too uh
[4097s] it doesn't look childish enough, right?
[4100s] Um I think I will want this to look more
[4104s] clearly a kids app. Uh so add this view.
[4107s] Mm.
[4109s] Uh this is the balance.
[4112s] Last updated, recent activity. Uh this
[4114s] all makes sense. Uh left to repay. Okay.
[4118s] Um hm.
[4121s] Okay.
[4123s] Uh other things haven't been built yet.
[4126s] Next lesson. Borrow and repay. Oh, okay.
[4129s] Um okay. My main feedback is that the
[4132s] overall feeling of this app does not
[4136s] feel like a children's app.
[4139s] Uh so I'll give the feedback here.
[4143s] The overall design of this app does not
[4145s] feel like an app for children
[4148s] and it's not enough. I think we should
[4151s] lean more into having the the app feel
[4154s] fun and
[4156s] friendly to children.
[4160s] Yeah, these are all okay. These
[4163s] uh
[4164s] But I think after Cloud Design addresses
[4167s] my previous feedback that this is not
[4169s] friendly
[4170s] enough for children,
[4173s] maybe it will make a lot of changes.
[4177s] We can also ask Cloud Design to do more
[4179s] here.
[4180s] I think besides what we have here, we
[4182s] also need to design
[4184s] the app icon, right? So, give me some
[4187s] options that I can review and decide.
[4191s] Okay. I just skip that as well.
[4194s] So, yeah, it's going to take some time
[4196s] to iterate on what we talked about.
[4198s] Um let's let it do its work.
[4206s] And now let's come back to the back end.
[4208s] Um here at Captain, the Apple sign-in
[4211s] investigation is complete.
[4213s] Confirm paid. Yep, I do have the I'll
[4216s] just talk to First Mate here.
[4218s] Yes, I do have a paid Apple Developer
[4220s] membership. Okay, for the steps that you
[4224s] need me to take, can you list out the
[4228s] exact steps and which URL else to go to?
[4232s] Uh then I will go do that myself.
[4238s] Uh
[4240s] The Hetzner setup has also provisioned
[4242s] one dedicated server.
[4244s] Uh okay. Wow, that's fast.
[4246s] Um current cost is like this much a
[4248s] month before taxes and traffic.
[4251s] Uh okay. That's okay. That's better than
[4254s] $30 to $60, right?
[4256s] Um existing servers, uh uh,
[4260s] okay, okay. Yeah, he's doing his work.
[4262s] Card design.
[4264s] Uh,
[4266s] it should have done some iterations. Uh,
[4269s] let's see if there is uh,
[4271s] uh, app icon options. Okay. Let's look
[4273s] at our icons first. Here are our icons.
[4277s] Uh, hm. So, it's using a piggy, uh, as
[4282s] the
[4283s] uh, analogy, piggy bank.
[4286s] Ew, that's not good.
[4288s] Uh, I I kind of like the piggy.
[4291s] Um,
[4293s] this is more like a wallet.
[4295s] Uh, these are coins. Okay. So,
[4298s] reasonable. Um, I think we go with
[4301s] piggy.
[4302s] Um,
[4305s] for icon,
[4306s] uh,
[4307s] for the icon, we'll go with the piggy.
[4309s] Um, but make it a piggy a little bit
[4311s] bigger in the icon.
[4313s] And make sure to create icon images that
[4316s] I can directly use in my iOS app.
[4321s] Um, that's because uh, iOS app has some
[4323s] like formatting requirements for what
[4325s] the icons need. Um, so okay, that's
[4327s] icon. Uh, thumbnail. Uh, okay, that's
[4331s] uh,
[4332s] let's go back to the design system.
[4334s] Uh, we should review.
[4337s] Uh, yeah, so this text centering is
[4339s] fixed.
[4340s] Uh, we should review the the
[4341s] click-through.
[4343s] Um, oh, it's it's bouncing. Okay, it's a
[4345s] little bit better. Uh, it's bouncing
[4347s] now.
[4347s] Uh, sign in.
[4349s] Add this view. Nice job. Uh, this is
[4352s] kind of a achievement. But where is the
[4354s] balance?
[4356s] Uh, something left to pay.
[4358s] Um,
[4365s] uh,
[4373s] Okay, uh, let me come back to First
[4375s] Mate. It said a lot of things. Captain,
[4379s] here are the exact steps. Choose the
[4381s] bundle ID. Okay, yeah, that's that's
[4383s] good. Confirm my Apple team.
[4389s] Register the app ID.
[4392s] Okay.
[4393s] Okay, you know what I'm going to do? I'm
[4398s] going to ask First Mate to do that for
[4400s] me.
[4401s] Hey First Mate, you can actually use
[4403s] Chrome DevTools XE to control my browser
[4406s] window. Can you just do all these steps
[4408s] for me in my browser? I have already
[4411s] signed in to my Apple
[4415s] Store Connect. Cool. Let's see whether
[4418s] First Mate can actually access my
[4421s] Chrome browser. Now, let's come back to
[4424s] Cloud Design. So, it needs a refresh to
[4428s] get the
[4430s] prototype reloaded.
[4432s] Sign in with Apple. Let's just confirm
[4435s] Eddie's view has a balance. Okay, yeah,
[4437s] the balance is here. This is much nicer.
[4439s] Has a nice job, has a bouncing piggy,
[4442s] the font is big. Okay.
[4445s] This is good enough, right? So, let's
[4448s] just get this built. So, what we do now
[4451s] is share. So, we will export this whole
[4454s] thing as a zip file.
[4456s] So, project archive, yep. Now that it's
[4460s] on my local machine, I can just come
[4461s] back to First Mate and ask First Mate to
[4463s] take it over.
[4465s] Hey First Mate, our design team has come
[4467s] back with a whole design system and
[4470s] mocks. So, let's follow that to build
[4474s] our iOS app now.
[4476s] The design system is in a file path I
[4479s] will give it to you here.
[4483s] It's in downloads.
[4485s] Eddie's
[4487s] wallet design.
[4491s] Uh please get the design system uh
[4494s] copied and set up in our repo and then
[4498s] follow the design system to build our
[4500s] actual UI.
[4502s] Uh the UI should be a um iOS app
[4506s] uh that can be used on both iPhone and
[4508s] iPad.
[4509s] Uh now that I think of it, uh I think we
[4512s] should not build the back end in the
[4516s] same repo. Uh the back end probably
[4518s] needs to be a private repo. Uh it's only
[4520s] the front end, the iOS app will be the
[4522s] in the open source repo.
[4527s] Okay. Uh let's give that instruction to
[4530s] FirstMate. Um FirstMate is busy doing
[4532s] something. Uh I'm actually not sure uh
[4535s] what he's working on, but I usually
[4536s] don't really care. Um I just keep
[4538s] dumping my thoughts, uh what I want to
[4540s] get done to FirstMate, and wait for
[4543s] FirstMate to process everything. Uh I
[4545s] know what FirstMate's doing. It's
[4546s] probably using the browser. Uh so let me
[4549s] actually go to my browser to see if
[4550s] Yeah, yeah, yeah. This is uh controlled
[4552s] by FirstMate right now.
[4554s] Uh it's uh getting to Yeah, it's running
[4557s] into some problem with uh not using a
[4560s] valid name. So these are the things that
[4562s] I would otherwise have to click through
[4564s] myself, uh but now I'm just letting uh
[4566s] FirstMate drive my browser. Um I'm
[4569s] actually okay with that um because uh
[4572s] these are the things that uh wouldn't
[4574s] have a disastrous outcome.
[4578s] FirstMate is uh
[4580s] telling me something. Front end UI work.
[4582s] Okay, I have started that. I can see
[4583s] there's an agent here doing the work. Uh
[4586s] okay.
[4587s] Yes, confirmed. This name is okay. Uh
[4589s] and this repo will stay private for now.
[4593s] Uh and direct PR workflow is also
[4595s] correct.
[4598s] All right. Here we can see uh the
[4599s] context window is uh running out again
[4602s] very soon.
[4603s] Uh GPT models right now this context
[4606s] window 272K is kind of short.
[4610s] If you're running Cloud you will have a
[4611s] million tokens as the context window.
[4614s] But actually it doesn't make too much
[4616s] difference in practice because how good
[4618s] the compaction is.
[4620s] So whenever it runs out it just does the
[4622s] compaction and then it keeps going. And
[4625s] earlier we did a compaction and it
[4627s] couldn't tell any difference, right? It
[4629s] knew what I was doing. It put everything
[4631s] together. Yeah, that's one thing that
[4633s] GPT models are really good at right now.
[4635s] And so far across this whole session the
[4639s] only place where I felt like Luna was
[4641s] not smart enough was the VPS cost
[4644s] decision, right? That was the only thing
[4647s] it made a recommendation that I didn't
[4649s] agree with because it was based on some
[4651s] wrong data. And I had to give some input
[4654s] to correct it. Otherwise everything else
[4656s] was running super smoothly here.
[4659s] First mate does the back end repo set up
[4661s] as well.
[4662s] But
[4663s] what was it waiting on me?
[4667s] Hey First mate
[4669s] did you get everything required on the
[4672s] Apple developer site?
[4674s] Or was there anything waiting on me?
[4678s] Not quite, okay.
[4680s] Um
[4681s] Team ID confirmed attempted Apple ID.
[4686s] Did not appear. Oh, I think it was
[4688s] because of the error about the app's
[4690s] name.
[4692s] I think you should try again. You should
[4694s] be able to do this.
[4696s] There was earlier an error that I saw
[4699s] about the app's display name not being
[4701s] valid. Something about that. So make
[4704s] sure the display name does not have any
[4708s] characters that are not allowed.
[4711s] Okay. Yeah, I think the agent has access
[4714s] to the browser. It may have missed
[4716s] that
[4717s] showing the error.
[4719s] So, let's just give it another try.
[4721s] Yeah, let's probably watch it work.
[4724s] Addy's wallet, okay.
[4726s] And it needs to choose the right
[4728s] capabilities. I think it needs to have
[4730s] Apple sign-in, yep.
[4732s] Sign with Apple. Is it going to add it?
[4737s] Uh
[4739s] No, not needed. Okay.
[4743s] Registered. Okay. Now, Addy's wallet is
[4745s] registered.
[4747s] Um that's good.
[4749s] So, it should now be able to do
[4752s] everything it needs except for like
[4755s] maybe downloading some keys or things
[4757s] like that.
[4758s] And by the way, the reason the agent was
[4761s] able to control everything was because I
[4763s] turned on this.
[4765s] Uh it's called inspect. What was it?
[4769s] Inspect.
[4770s] Um and there was this thing, remote
[4773s] debugging. This needs to be turned on
[4775s] before the agent can control your
[4778s] existing browser window. Or otherwise,
[4780s] the agent will be running an isolated
[4782s] browser window which may not have your
[4784s] credentials.
[4785s] So, this was turned on before I started
[4787s] the demo. I just leave this on all the
[4790s] time.
[4791s] And each time a new agent session tries
[4794s] to control the browser, it will actually
[4796s] ask for permission.
[4798s] Uh so, yeah, that's how the agent was
[4800s] able to control everything for me.
[4803s] Um
[4804s] I reached quite successfully. Okay,
[4806s] cool. The Apple The app ID now appears.
[4810s] Um
[4811s] Okay. Something I just thought of.
[4814s] How would we test this end-to-end,
[4815s] right?
[4816s] I think the shortest path is probably to
[4819s] make sure
[4820s] we test the iOS app in a simulator and
[4824s] points the simulator's app to our real
[4827s] back end so that we can play with the
[4829s] end-to-end experience to see whether we
[4831s] can actually sign in and everything.
[4834s] Okay, first mate just came back. It said
[4836s] both reviewed PRs are merged. Uh backend
[4839s] infrastructure is there. Uh native iOS
[4842s] and iPad OS app and design system is
[4844s] there. Uh the app passed iPhone
[4847s] simulator validation. Uh okay. Um
[4850s] so [clears throat] basically um
[4852s] everything's good. Uh
[4855s] but I don't um I need some evidence.
[4859s] Hey first mate, how would this end to
[4861s] end? Is our iOS app already connected
[4864s] with our backend?
[4865s] I really doubt it because
[4868s] uh
[4869s] yep, no. The iOS app is not connected
[4872s] backend yet. Uh it's a mock. So there's
[4875s] still a lot of work to be done, right?
[4877s] So we should continue with the
[4878s] implementation until we can actually uh
[4882s] test things end to end, at least uh in
[4884s] the simulator. Uh in the simulator I
[4886s] should do I should be able to do an
[4888s] Apple sign in and uh with my real Apple
[4892s] account and connect to my real backend
[4896s] in the VPS. Uh that is going to be what
[4899s] I consider as the MVP done. So let's uh
[4902s] figure out
[4903s] uh what's the implementation plan to get
[4905s] there and uh let's try to parallelize as
[4908s] much as possible.
[4912s] All right.
[4913s] Uh let's see. Um test on devices. I
[4917s] think eventually uh I can get to a test
[4919s] flight build. Right? Uh I can get a
[4921s] build into Apple's App Store's test
[4923s] flight and then I can use that on my
[4926s] real phone. But right now I think uh
[4928s] just a simulator-based end-to-end
[4931s] testing could be good. Um and this
[4933s] end-to-end testing basically pushed uh
[4935s] the first mate to figure out there's a
[4937s] lot of gaps still. Uh which we now
[4940s] should be able to fill, uh but there's
[4942s] quite some work to be done. Uh one thing
[4944s] that I'm really curious about is how
[4946s] well can Luna analyze all this work and
[4949s] the dependency graph and figure out a
[4952s] way to paralyze the work.
[4954s] So, let's see what it will do. And I
[4957s] just realized it said deploy a
[4959s] development back end. That implies it's
[4962s] going to be setting up different
[4964s] environments, which I think is going to
[4965s] be an overkill.
[4967s] GPT models, especially the 5.6, has this
[4970s] tendency to over-engineer. So, let's
[4973s] correct it.
[4974s] And I don't think we need different
[4977s] environments right now. I think we just
[4979s] need one production environment. We
[4982s] don't need to distinguish development
[4983s] versus versus production.
[4987s] All right.
[4988s] Yeah, so these are the places where we
[4991s] as the human still needs to give some
[4993s] judgment
[4994s] to really steer the model towards a
[4996s] direction that we feel is right.
[4999s] For this kind of a new app and the VPS
[5001s] that no one knows about, there is really
[5003s] not much reason to set up different
[5007s] environment tiers. Okay, first making
[5010s] back with something.
[5011s] Agreed. [clears throat]
[5013s] One production MVP environment. Yep.
[5018s] Two parallel implementation tracks. iOS
[5021s] integration.
[5022s] Real authentication service.
[5025s] Yep.
[5026s] Simulator configuration using this
[5029s] bundle ID. Yep. Back end deployment.
[5032s] Yep.
[5033s] A private API.
[5036s] Yep.
[5038s] Configure HTTPS.
[5042s] Cool.
[5043s] These seem right.
[5045s] After both are complete, the final MVP
[5048s] gate will be simulator signs in with
[5051s] your real Apple account. The only likely
[5053s] external input is an HTTPS host name. Um
[5059s] Yes, I actually do have uh domain names
[5062s] I can control. Okay, so let me tell it.
[5066s] I have a Cloudflare account and there is
[5069s] another um API key I think it's called
[5072s] Cloudflare {underscore} API {underscore}
[5074s] key uh in the same vault. So, you should
[5078s] be able to use it. Um and uh I have a
[5082s] domain name I control uh which is
[5085s] kunchengUID.com.
[5087s] So, we can probably create a subdomain
[5090s] uh that's like
[5091s] eddieswallet.kunchengUID.com
[5093s] to use for this purpose.
[5098s] Uh
[5099s] yeah.
[5100s] Uh so, let's uh do that. Uh there is a
[5103s] misspelling here eddieswallet. Uh so,
[5106s] let's see. Uh the transcription from uh
[5109s] the Whisper model is usually good enough
[5111s] um but sometimes can make mistakes like
[5113s] that. But, I think from all the previous
[5116s] context uh the Luna model should be able
[5119s] to figure it out. Uh it should be the
[5121s] right spelling of Eddie.
[5123s] Um yeah, let's see. Cloudflare uh
[5127s] Cloudflare is where I manage my domains
[5129s] and DNS. So, with the API key that I
[5132s] have in the vault, the agent should be
[5135s] able to set everything up. Uh it should
[5136s] be able to like basically add one more
[5139s] DNS record
[5140s] uh and point to the VPS and then get
[5144s] everything working end-to-end. So, uh
[5146s] let's see. Um my overall philosophy
[5149s] right now is to give a lot of
[5151s] permissions and uh capabilities to the
[5154s] agent
[5155s] um but when it needs to touch the
[5157s] production environment, uh it needs to
[5159s] get uh
[5161s] authorization from me. Uh which is why I
[5163s] used uh the Atomic vault.
[5166s] Um Luna is uh is smart, right? Uh it
[5169s] figured out the typo and it's going to
[5171s] be using the right domain name.
[5173s] Uh so, backend worker is continuing. Uh
[5177s] DNS setup is currently blocked.
[5180s] Um I can double-check here.
[5186s] Uh Cloudflare, where is it?
[5189s] Cloudflare API token. Oh, Cloudflare API
[5191s] token. Okay, I was wrong.
[5195s] Uh sorry, it was Cloudflare _api_token
[5200s] and
[5201s] uh all uppercase.
[5205s] Okay.
[5207s] Um why did I say sorry?
[5210s] Um this is something that uh I find
[5213s] interesting working with agents is that
[5216s] uh
[5217s] we actually waste a lot of tokens saying
[5220s] things that are not technically
[5222s] necessary, but it makes me feel good by
[5225s] saying it, uh if you know what I mean.
[5228s] Um
[5229s] so okay, it's now accessing this uh
[5231s] Cloudflare API token. I'll approve. Uh
[5234s] it's trying to probably just get an
[5236s] overview of what's in my account, um
[5238s] which is okay uh for the agent to get.
[5241s] Um the agent when the agent is using the
[5243s] token this way, uh it actually never
[5246s] sees the token. Uh it it it the token uh
[5249s] is passed through as an environment
[5251s] variable, uh so it can use that to call
[5254s] API uh call APIs, but it won't be
[5258s] exposed as plain text.
[5261s] Okay, Captain, that worked.
[5263s] All right, Captain, back end is now live
[5266s] at this uh address.
[5268s] Um verified, valid uh HTVS. Uh okay, it
[5272s] got everything done for me.
[5274s] Um
[5275s] so Apple ID and uh authentication on the
[5278s] back end is all good. Uh yeah, so really
[5281s] it's really only the front end that is
[5283s] missing. Um and it's talking about
[5286s] future automated deployments. Uh I'm
[5288s] going to uh I'm not going to worry about
[5290s] that today, but uh the way I typically
[5293s] do that is to do tailscale,
[5296s] which I might be able to show in another
[5298s] video where I just add all my devices
[5300s] and VPS into a same tailscale subnet,
[5304s] and then they can talk to each other and
[5306s] do deployments that way.
[5308s] I can even add GitHub actions runners
[5312s] into my tailscale as well.
[5316s] So, yeah, there are many options
[5318s] available to automate the deployment.
[5321s] You can see it just did another
[5323s] compaction. I think this was the third
[5325s] compaction that's happened.
[5327s] And
[5329s] if you ignore the concept of contest
[5331s] window and compaction, this was just a
[5334s] long session, right? We did so much
[5337s] work. First mate juggled through a lot
[5338s] of tasks for us
[5340s] and without really losing much
[5342s] knowledge.
[5343s] So, the compaction is really becoming an
[5346s] implementation detail that most people
[5348s] should not worry about anymore. Just let
[5351s] the agent run, let the agent compact
[5353s] when needed, and it will just keep
[5355s] going. First mate said it found an
[5357s] issue. The app was pointing to the wrong
[5360s] address, right? This was probably
[5362s] because the app was built while the back
[5365s] end was being hooked up. So, the the
[5367s] agent working on the front end didn't
[5369s] know this was the right DNS record. So,
[5373s] yeah, First mate already sent the worker
[5374s] to correct it. So, I don't really need
[5376s] to do anything.
[5378s] It just gave me an FYI. This is one of
[5380s] the nicest thing about having First
[5382s] mate, right? The First mate is juggling
[5385s] all this complexity for me, which I
[5387s] would otherwise have to coordinate
[5388s] between the different agents. We have a
[5391s] simulator brought up.
[5393s] There's an iPhone. There's an iPad.
[5398s] I guess this is
[5400s] this is either First mate doing some
[5403s] end-to-end testing by itself or it's
[5406s] First mate about to tell me to use this
[5409s] to validate uh things end to end. So,
[5412s] let's see um
[5413s] which one is it.
[5415s] I'll keep an eye on the terminal window
[5417s] as well. Uh so, if FirstMate says
[5419s] something, we'll see it here.
[5421s] Um exciting.
[5423s] Uh the app is coming together. Okay,
[5425s] this is uh the agent doing testing by
[5427s] itself. You can see uh it already tried
[5429s] to sign in and got this error, right? Uh
[5432s] so, this will basically tell the agent
[5434s] oh, something is wrong. Uh please uh go
[5437s] fix it. Uh so, I don't need to do
[5439s] anything. Um this is probably not for
[5440s] me.
[5441s] Something I did notice here uh is that I
[5443s] think the brand name is Eddie's Wallet,
[5446s] but Eddie should not be used as a uh
[5450s] replacement for the user, right? So,
[5452s] here it said Eddie does not need an
[5454s] account. Um it should not assume Eddie
[5458s] is the name of the user. So, um I think
[5460s] that's a uh a bug we need to fix. Uh
[5462s] I'll just tell FirstMate here.
[5464s] Um so, the thing about FirstMate is that
[5467s] you don't have to worry about what it's
[5468s] doing. Just talk to it. Just keep
[5470s] dumping your thoughts and it's fine.
[5473s] I noticed a problem that uh right now um
[5476s] the brand is Eddie's Wallet, which is
[5479s] right. But, we should not assume Eddie
[5482s] is the name of the user. So, uh this app
[5485s] may be used by other people whose name
[5488s] is not Eddie. I think we need to use uh
[5491s] more neutral
[5493s] uh terms when we are talking about the
[5495s] user.
[5500s] Yep. Uh so, I just killed this prompt.
[5503s] Um and FirstMate will figure out, oh,
[5505s] does it uh need to stop the current
[5508s] testing or does it uh do that after or
[5511s] does that do that in parallel? Uh so,
[5513s] actually, let's see uh what FirstMate
[5515s] will do. So, FirstMate just spun up
[5517s] another CrewMate here.
[5519s] Uh Uh, the name is like Wallet neutral
[5522s] something, uh, which is probably doing
[5524s] what I asked. Uh, yeah, it dispatched
[5526s] the implementation to a parallel agent.
[5529s] Uh, while it's still doing the testing
[5531s] in parallel. Okay, the neutral language
[5533s] update is completed. Uh, each family's
[5536s] configured child nickname. Okay, cool.
[5539s] Uh,
[5540s] and now it's the fourth auto compaction.
[5543s] Um, FirstMate has been doing so much for
[5545s] us. And the compaction really didn't
[5547s] have any visible effect on its
[5549s] performance, right?
[5551s] And this is partially because, uh, how
[5553s] good the server-side compaction from
[5555s] OpenAI is. Um, the other thing is
[5557s] because how well FirstMate actually
[5560s] persist important, uh, information. Uh,
[5564s] a lot of the tasks that, uh, were
[5566s] dispatched to crewmates were documented
[5568s] in a, um,
[5570s] file. So, everything that's got lost
[5572s] from the compaction can be retrieved
[5575s] when the agent actually needs them. The
[5577s] investigation is complete.
[5579s] Uh, it found a likely issue where
[5582s] Apple's AuthKit is not returning
[5584s] control.
[5585s] Uh, but it hasn't fixed it yet.
[5589s] Uh, so let's, um, probably, um, I think
[5592s] we should ask the agent to do some
[5594s] end-to-end testing, not myself.
[5597s] Uh,
[5598s] I think
[5599s] you should try to, uh, do some
[5601s] end-to-end testing and see if you can
[5604s] figure out what is the actual bug. Don't
[5606s] ask me unless there's something only I
[5608s] can do.
[5611s] All right.
[5612s] That is something I tell my agents a
[5614s] lot. Don't ask me unless something
[5617s] that's, uh, only I can do because the
[5618s] agents are actually very capable, uh, as
[5622s] long as they keep trying. So, they just
[5624s] need some encouragement. Something that
[5626s] we can do in the meantime is to
[5628s] understand what was actually built for
[5630s] the back end, right? Uh, cuz the back
[5632s] end was already deployed, uh, but we
[5634s] never look at the code. Um, so, uh, I'm
[5636s] not going to look at source code, uh,
[5639s] either, but I'm going to ask FirstMate.
[5643s] In the meantime, can we do a back-end
[5645s] architecture review? Um, I want to focus
[5647s] on what kind of API endpoints were
[5650s] exposed and how are we handling the, um,
[5655s] authentication?
[5656s] Um, and what kind of DB schema have we
[5660s] created? Those are the things that I
[5662s] most, uh, am most interested in looking
[5665s] at. Let's review that in lavish.
[5671s] Cool. Yeah, so, uh, this will basically,
[5673s] um,
[5674s] get some work, uh, going in the, uh,
[5677s] meantime, while we are fixing that bug.
[5680s] Uh, cuz I expect a bug fix can take a
[5682s] little while. Um, I try to parallelize
[5684s] this work as much as possible, so, um,
[5687s] FirstMate is always busy, not just
[5689s] sitting around. All right, lavish, uh,
[5692s] is here, uh, and this is the back-end
[5694s] architecture review.
[5696s] Uh, so, let's take a look.
[5698s] Uh, strong core, boundaries narrow.
[5702s] There is one parent identity, one
[5704s] family.
[5706s] Uh,
[5706s] okay.
[5709s] Where requests and authority flow.
[5714s] Let's take a look at this.
[5719s] Okay, iOS client will use HTTPS to call
[5723s] production and this gets routed through
[5725s] a Fastify API.
[5727s] Um, and, uh, there is the health.
[5730s] Uh, there is
[5733s] Okay, uh,
[5735s] the issuer, uh, this is where Apple
[5737s] passes all the tokens to us.
[5740s] Um, session service
[5743s] bearer hash, wallet service. Okay, there
[5746s] is a session service, there is a wallet
[5748s] service endpoint. These point to our DB
[5751s] and we store data in there. Okay, that's
[5754s] pretty straightforward actually. Um so
[5756s] there's nothing too complex. Um the
[5759s] thing I was looking for was whether
[5760s] there is any like over engineering
[5762s] that's not needed.
[5764s] Um
[5766s] domain operations not generic table
[5768s] rights. Okay.
[5771s] Yeah, so these are the API endpoints. Uh
[5773s] these are for Apple authentication, uh
[5776s] me, family, wallet, child view. These
[5779s] are basically different uh endpoints to
[5781s] render different screens, which makes
[5783s] sense. Loan. Okay, so so uh different
[5786s] data structures are being exposed uh
[5789s] through different endpoints, which is
[5791s] also uh very reasonable. Um okay, so
[5794s] those are quite reasonable.
[5796s] Authentication, authorization,
[5799s] uh okay, so this is the
[5801s] uh
[5803s] how the requests flow. Uh let's take a
[5805s] look.
[5807s] iOS app, identity token, uh
[5811s] post to the Apple auth endpoint.
[5814s] Um and there's the Apple's uh
[5817s] stuff.
[5820s] Uh yeah, this look pretty typical as
[5822s] well. Um
[5824s] so let's keep looking.
[5826s] Um
[5827s] database uh shape.
[5829s] Take a look.
[5831s] Uh
[5833s] here.
[5834s] Parent identities. Okay. And there are
[5838s] sessions. Uh
[5841s] families. Okay.
[5844s] Um the families are what connects the
[5846s] parents to the children.
[5848s] Um that's actually pretty good because
[5851s] uh it can have multiple children uh in
[5853s] the same family.
[5855s] Um and each children uh children have
[5857s] wallets.
[5859s] Um wallets can have loans.
[5862s] Uh okay.
[5865s] Ledger entries.
[5867s] Um okay, nothing over-engineered. Uh
[5870s] these are also
[5872s] um simply reasonable.
[5874s] Um let's get back to uh our firstmate.
[5878s] Okay. Uh started the Octocat review.
[5882s] Yeah, we have already reviewed. Uh it
[5884s] includes this, this, this. Uh Captain
[5887s] the Frix is merged. Okay, cool. All
[5889s] right, it's time to end-to-end test this
[5892s] whole thing. Uh the app should be
[5894s] working now. It should have been uh
[5895s] integrated. So, let's sign in. Uh this
[5898s] is Apple sign in. And let's see if we
[5901s] can actually get through.
[5906s] Ooh, it worked. Uh so, now we are in the
[5910s] wallet and this is the parent view. I
[5912s] think this UI um
[5914s] yeah, I'm not sure. I think we'll make
[5916s] some more iterations to make it more
[5919s] uh direct to the kids' view and make the
[5922s] parent view a little bit more hidden.
[5923s] So, let's uh see if we can like add $10.
[5927s] Um review, add.
[5930s] Okay, recorded. Um now the balance is
[5934s] $10 and in Eddie's view, uh he can see
[5936s] $10. Cool. So, this is uh it seems to
[5940s] actually work. Uh if I sign out
[5944s] uh and sign back in using my account, I
[5947s] should see the same data because the
[5950s] data is stored in the cloud.
[5952s] Let's see.
[5954s] Uh yep, I got back the data. So, uh the
[5958s] user ID and everything hitting our
[5959s] server back end, getting the data
[5961s] fetched, uh everything is working
[5962s] end-to-end correctly now. What I'll do
[5964s] is that I'll get this app built into our
[5966s] TestFlight and then I'll install this on
[5969s] my son's iPad and we can actually start
[5971s] to use this for real tomorrow,
[5973s] uh which is super exciting. So, today we
[5975s] have built this real app, uh full-stack
[5977s] app from scratch using GPT-4.6 Luna and
[5982s] uh and we couldn't even use Opus for
[5985s] cloud design. We used Sonnet.
[5987s] And it worked out pretty well, right? I
[5990s] hope this video gave you a real example
[5992s] of how I use my agentic engineering
[5995s] workflow to get a real project done
[5997s] end-to-end. Thank you for watching and
[6000s] see you next time.