YouTube2Text

How Senior Engineers Actually Build with AI in 2026 | Build a Full Stack Job Applications Platform — Transcript

by JavaScript Mastery · 29,691 words · 4,267 segments · language en · Watch on YouTube

Full transcript

  1. 0:00Something changed this year. Every
  2. 0:02developer I know is quietly asking the
  3. 0:04same question. Do the skills I spent
  4. 0:07years building still matter? It's a fair
  5. 0:10question. AI writes better code every
  6. 0:13month. The gap between junior and senior
  7. 0:16is closing. And the more you delegate,
  8. 0:18the more the output starts to look the
  9. 0:21same. Generic and inconsistent. It's
  10. 0:24impressive for 5 minutes of glory on X,
  11. 0:27but becomes impossible to maintain by
  12. 0:30the third feature. But that's not the
  13. 0:32real story. AI doesn't make developers
  14. 0:35less valuable. It makes the gap between
  15. 0:38developers with a system and developers
  16. 0:40without one larger than it's ever been.
  17. 0:43Anyone can open up Clawude and get code
  18. 0:45out. That's easy. What almost no one
  19. 0:48figures out is how to give the agent
  20. 0:50enough context, structure, and direction
  21. 0:53to build something that holds together,
  22. 0:55something you can ship, maintain, and
  23. 0:58trust. That's the actual skill, and it's
  24. 1:02completely learnable. This is Job Pilot,
  25. 1:05a full stack AI agent that finds jobs,
  26. 1:09scores each role against your profile,
  27. 1:12and then sends real browsers across the
  28. 1:15open web to research the company behind
  29. 1:18every listing. It writes your cover
  30. 1:20letter and tailor your resume to match.
  31. 1:23This application would have taken a team
  32. 1:26of developers at least a month to build.
  33. 1:29Now, I built it on my own in a couple of
  34. 1:32days. without writing a single line by
  35. 1:35hand. And by the end of this video,
  36. 1:37you'll have built it, too. Same stack,
  37. 1:40same way I did. If you know basic
  38. 1:42JavaScript, you can follow along. But
  39. 1:45the app isn't why you're here. You're
  40. 1:48here for this. Five open-source agent
  41. 1:50skills: architect, remember, review,
  42. 1:54recover, and imprint. They'll give your
  43. 1:57agent memory, focus, and the ability to
  44. 2:00ship without drifting. You install them
  45. 2:02once and then use them on every project
  46. 2:04after today. They're free, open- source,
  47. 2:08and completely yours after this video.
  48. 2:10You can get them from a GitHub repo down
  49. 2:12below. And I also took the time to write
  50. 2:14a full guide covering exactly how to use
  51. 2:17each one of these skills in more detail.
  52. 2:19I'll put it in the description, too.
  53. 2:21Now, the stack next.js GS16, INSForge
  54. 2:25for the back end, browser base and stage
  55. 2:27hand for real browser automation, GPT40
  56. 2:31for intelligence, PostHog for analytics.
  57. 2:34By the end, you won't just have a
  58. 2:36working AI agent. You'll have a system
  59. 2:39for building anything. A system that
  60. 2:42doesn't get replaced by the next model,
  61. 2:44but instead gets stronger every time you
  62. 2:46use it. We are now at a time where one
  63. 2:49engineer with the right system has no
  64. 2:51ceiling on what gets shipped. So let's
  65. 2:55build.
  66. 3:06Before we touch a single tool, give me 5
  67. 3:09minutes to tell you about the part that
  68. 3:12decides whether your build ships or
  69. 3:15falls apart halfway through. There's no
  70. 3:17quote in this section yet. It's the most
  71. 3:20important one in this entire video
  72. 3:22because this is the process of how I
  73. 3:24think before I write a single prompt.
  74. 3:27Without it, even the best model will
  75. 3:29drift. It'll start contradicting itself
  76. 3:32and just break your codebase. If you've
  77. 3:35felt that, you know what I mean. And if
  78. 3:37you haven't, first of all, you're crazy.
  79. 3:40Great job. But you [music] most likely
  80. 3:42will. The problem is that most
  81. 3:44developers using AI do the same thing.
  82. 3:48They open up the editor, describe what
  83. 3:50they want, the code appears, and they
  84. 3:53react to whatever comes out. Sometimes
  85. 3:55it's great, sometimes it's broken. Fix
  86. 3:58it, move on, and repeat. That's great
  87. 4:01for demo apps, but that workflow has a
  88. 4:05ceiling, and most devs hit it fast. The
  89. 4:08problem is that AI has no idea of what
  90. 4:11you're building. It knows what you said
  91. 4:13in the last message, maybe a few
  92. 4:15messages back, but it doesn't know the
  93. 4:18decisions you made 3 days ago, what you
  94. 4:21decided not to build, your conventions,
  95. 4:24your folder structure, or where your
  96. 4:26project stands today. So, it guesses and
  97. 4:30those guesses compound. 3 weeks in, your
  98. 4:33database is full of contradictions that
  99. 4:36nobody can fully explain. So, here's how
  100. 4:39to fix it. The first half of the fix is
  101. 4:43context. Not just telling the agent what
  102. 4:46to build, but giving it a complete
  103. 4:48picture of the system it's building
  104. 4:50inside of. For job pilot, I wrote nine
  105. 4:53context files before the agent touched
  106. 4:56the line. What the product is and who is
  107. 4:58it for? architecture, folder structure,
  108. 5:02code standards, UI rules, design tokens,
  109. 5:06library specific patterns, a build plan,
  110. 5:09and a living progress tracker that
  111. 5:11updates as we go. Nine files so that the
  112. 5:15agent never has to guess. It is some
  113. 5:18real time upfront, but you only have to
  114. 5:20write them once. And then these files
  115. 5:23travel with the project for its entire
  116. 5:25life. And if you keep watching, I'll
  117. 5:26show you how we can set them up together
  118. 5:28when we start the project. Now, the
  119. 5:31second half of the fix are agent skills.
  120. 5:34In my previous video, I used spec files.
  121. 5:37One spec per feature each build session.
  122. 5:41It worked, but it was pretty heavy as
  123. 5:44every feature needed a new document. But
  124. 5:47this time, I improved that workflow.
  125. 5:50What you're watching today is the latest
  126. 5:52workflow I'm working with after years of
  127. 5:55improving it. This time I replaced specs
  128. 5:58with something better. Five agent skills
  129. 6:02built from real production builds, real
  130. 6:04failures I've encountered, and real
  131. 6:06sessions where the agent drifted and I
  132. 6:09had to figure out why. Each skill came
  133. 6:11from a specific problem that I kept
  134. 6:13hitting until I refined the solution.
  135. 6:16And each one is just a command you run
  136. 6:19inside of your AI session. Here's what
  137. 6:21they do and what they prevent. First one
  138. 6:23on the list is architect, which you run
  139. 6:27before any complex feature. Without it,
  140. 6:30you start typing a prompt, the agent
  141. 6:33builds, and then halfway through you
  142. 6:35realize you never decided how O would
  143. 6:38work for this. Your agent just made a
  144. 6:40guess, and now you're refactoring with
  145. 6:43it. When you run architect, it reads
  146. 6:45your context files, asks focused
  147. 6:48questions one at a time, surfaces the
  148. 6:50decisions you haven't made yet, and
  149. 6:52produces a plan. That's the conversation
  150. 6:55you should be having before every
  151. 6:57serious feature. And now it happens
  152. 7:00automatically. The second skill is
  153. 7:02called remember. You use it at the end
  154. 7:05of every session. Without it, every new
  155. 7:08session starts from zero. You spend 10
  156. 7:11minutes reexplaining what was decided
  157. 7:13yesterday or you don't and the agent
  158. 7:16contradicts itself by lunch with it. You
  159. 7:19run remember when you wrap up it
  160. 7:22compresses what happened, decisions
  161. 7:24made, patterns established, progress
  162. 7:26completed into a memory file. Then the
  163. 7:28next session loads it on open which
  164. 7:31gives you continuity without
  165. 7:33reexplaining.
  166. 7:35Then there's review which you run after
  167. 7:38a feature is built. Without it, the
  168. 7:41agent finishes a feature 400 lines. You
  169. 7:44skim, you commit, and 3 days later you
  170. 7:47find a bug. With it, you run review. It
  171. 7:51checks if the implementation matched the
  172. 7:53plan, if it respects your architecture
  173. 7:55boundaries, and if it's production
  174. 7:57ready. It then returns issues by
  175. 8:00severity, critical, important, minor,
  176. 8:04and it never autofixes things, so you
  177. 8:06stay in control. I also came up with
  178. 8:09recover for when things break. Without
  179. 8:12it, something's wrong. You're 4 hours
  180. 8:15into a session. You don't know if it's a
  181. 8:18targeted bug, a polluted context, or a
  182. 8:21wrong assumption from earlier. So, the
  183. 8:24AI starts spiraling, and you spiral,
  184. 8:26too. With it, you run recover. It
  185. 8:30diagnoses which failure mode you're in
  186. 8:33and gives you the right correct
  187. 8:34response. That's one prompt instead of a
  188. 8:37very frustrated afternoon. And finally,
  189. 8:41there's imprint, which I use after
  190. 8:43building any UIs because without it,
  191. 8:47three sessions in your buttons all look
  192. 8:50different. spacing is a tiny bit off and
  193. 8:53your design system has mistakes that you
  194. 8:56didn't really notice with it. When you
  195. 8:59run imprint, it captures the new
  196. 9:01components patterns into your UI
  197. 9:03registry. So you run it across the
  198. 9:05codebase, it finds the inconsistencies
  199. 9:08and produces a fixed list. That way the
  200. 9:11design system stays coherent across
  201. 9:14every sessions. Five skills handles
  202. 9:18every serious failure mode developers
  203. 9:20hit when building with AI agents. Drift,
  204. 9:24inconsistency, broken sessions, UI
  205. 9:27chaos, and lost memory. One skill for
  206. 9:31each one of them. It took a lot of trial
  207. 9:33and error and frustration to come up
  208. 9:36with them, but here they are, and
  209. 9:38they're open source, not just locked to
  210. 9:41this project or this stack or this
  211. 9:43agent. You can install them once and use
  212. 9:46them anywhere. So, I'll leave the link
  213. 9:48in the description. And to make it even
  214. 9:51easier, I've also put together a guide
  215. 9:54covering exactly how to use each skill
  216. 9:57in more detail, when to run them, and
  217. 10:00how to set up your own context files for
  218. 10:02any project you build. I'll put it in
  219. 10:04the description, too. So, here's the
  220. 10:07full loop. Start every project by
  221. 10:10writing context files. nine documents
  222. 10:13that give the agent complete knowledge
  223. 10:15of what you're building. That's the
  224. 10:17foundation. And I just realized that I
  225. 10:19didn't go into too much depth about the
  226. 10:21nine files in this crash course, but I
  227. 10:24did write more about them within the
  228. 10:26guide that I just mentioned. So you can
  229. 10:28check it out there. But these files are
  230. 10:30the foundation. Then you build feature
  231. 10:33by feature. Before any complex feature,
  232. 10:36run architect. After you implement it,
  233. 10:39run imprint if it's UI. review if it's
  234. 10:43complex and at the end of the session
  235. 10:45remember and when something breaks call
  236. 10:48recover context makes sure the agent
  237. 10:52knows your system and the skills make
  238. 10:54sure that every session is focused every
  239. 10:57feature is reviewed and that nothing
  240. 10:59gets lost between conversations. That's
  241. 11:02the system and it is simple on paper,
  242. 11:06but what matters is using it on a real
  243. 11:08project under real pressure. And that's
  244. 11:11what the rest of this video is for. Here
  245. 11:14you just heard about some new skills and
  246. 11:16new concepts that you might end up
  247. 11:18using. But if you continue watching
  248. 11:20until the end, I'll show you how you can
  249. 11:23actually use them to build job pilot.
  250. 11:26every feature, every session, same
  251. 11:28workflow and to also be able to use them
  252. 11:31across all of your future projects. And
  253. 11:34if you want to go deeper, the Agentic
  254. 11:37Dev course teaches all of this from the
  255. 11:40ground up, the fundamentals, the
  256. 11:42architecture thinking, and the patterns
  257. 11:44that made me come up with these five
  258. 11:47skills in the first place. So, within
  259. 11:49the course, I'll take these skills apart
  260. 11:51and show you how you can make yours.
  261. 11:54Those are the patterns that make AI work
  262. 11:56on serious projects. So, I'll leave the
  263. 11:59weight list link in the description so
  264. 12:01you can know when the course is out. So,
  265. 12:04now that you understand the workflow,
  266. 12:06let's learn it and practice it in
  267. 12:08action. Time to build.
  268. 12:13That's the system and the product you
  269. 12:15build with it is almost beside the
  270. 12:17point. If you swap job pilot for
  271. 12:20anything else, the workflow won't
  272. 12:22change, but you still need a stack to
  273. 12:24build on. So here's what we are using
  274. 12:27for this build and why each piece earns
  275. 12:30its spot in an app like this. For the
  276. 12:32entire back end, we'll use ins. Job
  277. 12:36pilot needs three things on day one. O,
  278. 12:40a database and file storage. Almost
  279. 12:43every single app needs this. Google and
  280. 12:46GitHub login, tables for profiles and
  281. 12:49jobs, and a bucket to hold resume PDFs.
  282. 12:52Ins gives you all of this in one
  283. 12:55platform. And the part that matters for
  284. 12:57this is the MCP server because your
  285. 13:00agent connects straight to your backend,
  286. 13:02reads the live schema, and wires things
  287. 13:05all on its own instead of guessing
  288. 13:07against an API it half remembers. And
  289. 13:10the free tier covers everything that we
  290. 13:12built today. So, while we're here, let's
  291. 13:14immediately create an account. Click the
  292. 13:16Ins link down in the description, sign
  293. 13:19up, and you'll be redirected to your
  294. 13:21dashboard so that later on we can
  295. 13:23immediately start using it. For browser
  296. 13:25automation, you'll use browserbase along
  297. 13:28with their AI browser SDK, Stage Hand. A
  298. 13:32big chunk of Job Pilot runs in a real
  299. 13:34browser, reading any job URL you paste
  300. 13:38in and sending an agent across the web
  301. 13:41to research a company before you apply.
  302. 13:43You don't want that running on a
  303. 13:45headless browser on your own machine
  304. 13:47because it crashes and some companies
  305. 13:49can detect it as a bot. Browserbase
  306. 13:51instead gives you a real managed browser
  307. 13:54in the cloud with session recording and
  308. 13:57a live view. You can drop straight into
  309. 13:59the app so users watch the agent work.
  310. 14:02Stage hand sits on top of that and lets
  311. 14:05the agent read and pull data from any
  312. 14:07page in plain language instead of using
  313. 14:10the brittle CSS selectors. Once again,
  314. 14:13it's free to start and everything we'll
  315. 14:15do will fall under that free plan. Click
  316. 14:18the special link down in the description
  317. 14:20so you can follow along and see exactly
  318. 14:22what I'm seeing later on when we set it
  319. 14:24up. For now, just creating an account is
  320. 14:27enough. And for analytics, you'll use
  321. 14:30Post Hog. Once people are searching,
  322. 14:32researching companies, and tailoring
  323. 14:34resumes, you want to see what's actually
  324. 14:36happening, which actions get used, what
  325. 14:39lands, and where people drop off.
  326. 14:42Posthog roles analytics, session
  327. 14:45replays, and feature flags into one
  328. 14:47tool. And it's super quick to wire up
  329. 14:49thanks to their Post Hog wizard. It'll
  330. 14:51power your full analytics and help you
  331. 14:53use this new workflow that I'm teaching
  332. 14:55in this video with so much more
  333. 14:57potential because you'll make educated
  334. 14:59decisions on what you want to build now
  335. 15:01that you can actually build super fast,
  336. 15:04allowing you to build the features that
  337. 15:05your users actually want. Once again,
  338. 15:08their free tier is super generous and
  339. 15:11I'll leave the link down in the
  340. 15:12description so you can create an account
  341. 15:14and later on we can just one-click
  342. 15:16install it with a wizard. So, if you
  343. 15:18haven't, pause the video and create
  344. 15:20accounts as we'll be using them within
  345. 15:22the first couple of lessons. If you've
  346. 15:24done that, perfect. Now we are ready to
  347. 15:27build job pilot feature by feature while
  348. 15:30following this workflow that I taught
  349. 15:32you in the crash course but that we'll
  350. 15:34now together explore throughout the full
  351. 15:37build. So let's go.
  352. 15:42Okay, I hope you're ready to get started
  353. 15:44developing our application in this new
  354. 15:47agentic workflow that I want to teach
  355. 15:49you. We'll start straight from the
  356. 15:52beginning by creating a new empty folder
  357. 15:54on our desktop. And you can go ahead and
  358. 15:57call it something like job pilot, which
  359. 15:59is going to be the name of our
  360. 16:01application. And then simply drag and
  361. 16:03drop it into your VS code or cursor or
  362. 16:06any other text editor or IDE that you
  363. 16:09use nowadays. I mean, even the concept
  364. 16:11of what a text editor is is changing
  365. 16:14nowadays. Cursor and Codeex for some
  366. 16:17time have been using this view where on
  367. 16:19the left side you have a list of
  368. 16:20conversations you have with your agents.
  369. 16:22In the middle you have the actual
  370. 16:24conversation contents and then on the
  371. 16:26right you can have either code or a
  372. 16:28preview of the browser. Recently VS Code
  373. 16:30came up with that option as well. You
  374. 16:32just need to search for the agents
  375. 16:34window or click the button in the top
  376. 16:36right and it'll open up something that
  377. 16:38looks like this where no longer you have
  378. 16:40the files on the left side and then the
  379. 16:42code in the middle and that's it. where
  380. 16:44you have a list of sessions on the left
  381. 16:45side and then the actual conversation in
  382. 16:48the middle. Love it or hate it, what it
  383. 16:50means to be a developer or an engineer
  384. 16:52is changing. And that's exactly the goal
  385. 16:55of this video to guide you through that
  386. 16:57transition smoothly and to help you stay
  387. 16:59on top of it. So now that we have an
  388. 17:01empty project, go ahead and open up your
  389. 17:03integrated terminal while that still
  390. 17:05exists. Jokes aside, I think there's
  391. 17:08always going to be place for a terminal
  392. 17:10and create a new Nex.js application. You
  393. 17:13can do that by running mpx create next
  394. 17:16app at latest and then just dot to
  395. 17:18create it within the current directory.
  396. 17:20It'll ask you whether you want to
  397. 17:21install the create next app installer.
  398. 17:24So just go ahead and say why yes. And
  399. 17:26it'll ask you some questions such as
  400. 17:28would you like to use the nextgs
  401. 17:29defaults. In this case, we're going to
  402. 17:31proceed with that as it's going to turn
  403. 17:33on TypeScript, ESLint, no React
  404. 17:36compiler, T1 CSS, no source directory,
  405. 17:39app router, and the default agents.mmd
  406. 17:42file. So, let's go with the recommended
  407. 17:45options. Give it a minute to set
  408. 17:46everything up. Once that's done, you
  409. 17:48can, of course, go ahead and run mpm
  410. 17:50rundev to spin up the project on
  411. 17:53localhost 3000 and then open it up
  412. 17:55within your browser. This is new. I
  413. 17:57commandcllicked it expecting that it's
  414. 17:59going to open it up in my default
  415. 18:00browser like it used to do for years,
  416. 18:03but instead it actually opened up the
  417. 18:05app as a tab in my VS Code window. This
  418. 18:07is pretty cool. It's an integrated
  419. 18:09browser within which local host links
  420. 18:11automatically open up. Pretty cool. You
  421. 18:13can use it just as a regular browser or
  422. 18:16you can also turn on the inspect element
  423. 18:19so you can select specific elements and
  424. 18:21then it automatically puts them within
  425. 18:24your agentic chat session. I love this.
  426. 18:28So far, you had to use a third party app
  427. 18:30or a browser extension in order to be
  428. 18:32able to do that, but now it's integrated
  429. 18:35directly within your VS Code. This is
  430. 18:38amazing. So, it knows that this is
  431. 18:40referring to your app, that is referring
  432. 18:42to an H1, and it even passes a
  433. 18:44screenshot to the part that you're
  434. 18:46trying to fix. So, now you can just say
  435. 18:48modify this, and it'll immediately do
  436. 18:50it. Love it. We'll definitely use this
  437. 18:53later on. You can also add element to
  438. 18:56chat, add screenshot to chat, or add
  439. 18:58console logs to chat. Pretty cool stuff.
  440. 19:01And there's a full browser console and
  441. 19:03elements tab right here. Love it. Now,
  442. 19:06let's go ahead and modify some of the
  443. 19:08default files right here by heading over
  444. 19:10into the app and then page. We can clean
  445. 19:13this page up by just running rafc. If
  446. 19:16that isn't working for you, you can head
  447. 19:18over to extensions and install React
  448. 19:22snippets. There's a couple of different
  449. 19:24packages. Uh there's the simple React
  450. 19:26snippets that I have right now within
  451. 19:28which you can simply say sfc to create a
  452. 19:31stateless functional component, but
  453. 19:32there's also this ES7 react redux react
  454. 19:35native snippets that allows you to use
  455. 19:37the RAFCE keyword. So you can either use
  456. 19:41that or you can use the sfc from the
  457. 19:44other one. Either way works for me.
  458. 19:47Let's call this page home. And then
  459. 19:49within the home, we can simply return an
  460. 19:51H1 that says job pilot. And I think I'm
  461. 19:55zoomed in a bit too much. So I'll zoom
  462. 19:58out a bit. And you can hopefully still
  463. 19:59see everything on the screen. Now let's
  464. 20:02head over into the globals.css
  465. 20:04where we have the default styling. Right
  466. 20:07now we want to remove all of that
  467. 20:09default styling, but just keep the
  468. 20:11import to tailwind CSS so we can use all
  469. 20:14of its utilities. Later on, we will fill
  470. 20:16in this root as well as the theme in
  471. 20:20line as well as some media where it
  472. 20:23prefers the color scheme set to dark.
  473. 20:26So, we can specify the dark mode of our
  474. 20:29application where we'll be able to
  475. 20:31modify some root classes and then of
  476. 20:33course there is the body uh in case we
  477. 20:36want to do some resets. Later on, I'll
  478. 20:38provide you with the styling so that we
  479. 20:40can focus on what matters and that is
  480. 20:42learning about this agentic workflow.
  481. 20:44Let's also head over into our public and
  482. 20:47remove everything from it. The only
  483. 20:49thing we'll keep is the empty public
  484. 20:51folder because later on we'll fill it in
  485. 20:53with additional assets. So now that we
  486. 20:55have an empty slate of our application
  487. 20:57like it's completely empty, there's
  488. 20:59nothing there. We want to set up our
  489. 21:01agentic skills and context files that
  490. 21:03we'll use in all of the upcoming lessons
  491. 21:05of this video, but also in every
  492. 21:08upcoming project that you work on.
  493. 21:12To start setting up our agentic
  494. 21:14workflow, we'll need some context files.
  495. 21:17And just so you don't have to create one
  496. 21:19by one by hand, down in the description,
  497. 21:21I'll leave a video kit link which is
  498. 21:24going to look something like this. Here
  499. 21:25you have different useful links such as
  500. 21:27the link to the open source codebase of
  501. 21:29this project, the deployment, the
  502. 21:31assets, and some guides, Discord
  503. 21:33channels, and so on. And on the right
  504. 21:35side, you have some snippets that I'll
  505. 21:36refer to throughout this video. So, I've
  506. 21:39put all that neatly in one place so that
  507. 21:41you can refer to it as we go through the
  508. 21:43build. Let's start off with the assets
  509. 21:45part. So, click on this. It'll lead you
  510. 21:48to this Google Drive where you can
  511. 21:50download the public folder zip as well
  512. 21:52as the context zip. Once you get them,
  513. 21:55you can unzip them, remove this public
  514. 21:57folder, and then simply drag and drop
  515. 22:00both of these folders right here at the
  516. 22:03root of your application. And you can
  517. 22:05say copy folders.
  518. 22:07public is going to be simple. Here we
  519. 22:09have our job pilot logo as well as the
  520. 22:12images we'll be using later on for our
  521. 22:14agents dashboard and so on. And then the
  522. 22:17context is where the magic happens. But
  523. 22:20before I go through each one of these
  524. 22:22individually and explain them in this
  525. 22:25video, I'll teach you how to take your
  526. 22:26agentic development workflow even
  527. 22:28further by using custom skills. I've
  528. 22:31been writing code using AI for many
  529. 22:34years now, but especially throughout the
  530. 22:36last 6 to 12 months, I doubled down on
  531. 22:38it. Ever since Claude Opus 46 came out,
  532. 22:41and since then, I've been improving my
  533. 22:43workflows, but I didn't feel like
  534. 22:45rewriting all my rules for every single
  535. 22:48project. So, skills made a lot of sense.
  536. 22:51I created a series of skills that
  537. 22:54combine all of my workflows and
  538. 22:56learnings and struggles of years of
  539. 22:58working with agents into a set of skills
  540. 23:00that you can install into any project.
  541. 23:02And installing them is super simple. You
  542. 23:04just have to run MPX skills at latest
  543. 23:07add JavaScript Mastery Pro skills or you
  544. 23:10can install them individually. Below you
  545. 23:12can find some info on each one of these
  546. 23:14skills. But don't worry as that's
  547. 23:16exactly the point of this video to teach
  548. 23:18you how to use these skills. If you want
  549. 23:20to know how I created these skills in
  550. 23:22the first place, how I came up with the
  551. 23:24ideas, and why I thought these specific
  552. 23:26workflows need to be turned into skills,
  553. 23:28you'll likely be interested in the
  554. 23:30agentic development course that I'm
  555. 23:32working on. That's going to be a
  556. 23:33collection of all of my learnings over
  557. 23:35the years of trying to tell AI to write
  558. 23:38code. Now, it actually can, and I'm
  559. 23:41ready to compile it into a single
  560. 23:43course. So, for now, you can only join
  561. 23:45the wait list, but it's going to be out
  562. 23:47soon. Now with that in mind, you can
  563. 23:49head back over into a terminal and you
  564. 23:51can open up a second window and within
  565. 23:54it run MPX skills add latest add
  566. 23:57JavaScript Mastery Pro skills. It'll ask
  567. 24:00you whether you want to install the
  568. 24:01skills installer. So you can say Y.
  569. 24:03Proceed. And then it'll ask you which
  570. 24:05skills you want to install. In this
  571. 24:07case, you can select all of them.
  572. 24:09There's just five. It'll ask you for
  573. 24:11which agents you want to install those
  574. 24:13skills. You can select the one you're
  575. 24:15using. You have a lot of options right
  576. 24:17here. Um, we can use clot code or we can
  577. 24:20use something like codeex or gemini.
  578. 24:24That's going to be completely up to you.
  579. 24:26Of course, there's also cursor, but you
  580. 24:28can see for it that's universal and it
  581. 24:30works right out of the box. So, press
  582. 24:32enter. Install it either on the project
  583. 24:34or globally through sim link and proceed
  584. 24:38with installation. Now, after now, after
  585. 24:41you install it, if you would be so kind,
  586. 24:43you can also give this repo a star. So,
  587. 24:46as more of us use these skills, we'll
  588. 24:48get more issues and pull requests to
  589. 24:50improve them even further and make them
  590. 24:53better. Once installed, you'll see these
  591. 24:56skills appear directly within your
  592. 24:57project right within agents. And here
  593. 25:00they are. In the crash course, you
  594. 25:02already learned about when and how we'll
  595. 25:04be using these skills. And very soon,
  596. 25:07we'll start putting that to practice.
  597. 25:09Now, before we start using our context
  598. 25:11files, which are going to work together
  599. 25:13with our skills, I want you to think
  600. 25:16about something. Imagine you're a
  601. 25:18developer and a client comes to you and
  602. 25:20says, "Build me a website." With no
  603. 25:23brief, no requirements, no design, just
  604. 25:27that. What do you do? I mean, you make
  605. 25:29guesses, right? Assumptions. You build
  606. 25:31something that made sense to you, but
  607. 25:33not necessarily what they wanted. That's
  608. 25:36exactly what happens when you open up a
  609. 25:38chat window like I do right here and
  610. 25:41then you tell it something like build me
  611. 25:43a SAS app. The model, whichever one
  612. 25:46you're using nowadays, isn't stupid. It
  613. 25:48just has no idea what you actually want.
  614. 25:50So, it fills the gaps with its best
  615. 25:52guesses. And three sessions in, those
  616. 25:54guesses compound into something that,
  617. 25:57well, nobody asked for. So, before we
  618. 26:00write a single prompt, we want to give
  619. 26:02our agent everything it needs to know.
  620. 26:04And that's coming in form of these nine
  621. 26:07files. Each one of which gives the agent
  622. 26:10a specific layer of knowledge that it
  623. 26:12would otherwise have to guess. It starts
  624. 26:14with the big picture, which is the
  625. 26:17project overview. Here we tell the agent
  626. 26:20what job pilot or whatever project
  627. 26:22you're working on. Actually, it's a full
  628. 26:25stack AI powered job hunting assistant.
  629. 26:27The user sets up their profile once,
  630. 26:30uploads their resume, and the agent
  631. 26:31automatically discovers relevant jobs
  632. 26:34from LinkedIn, scoring each one against
  633. 26:36the user's profile using GPD40 or later
  634. 26:39on we can switch this. So, we tell it
  635. 26:42what it is and what problem it solves,
  636. 26:44and we tell it about the problem it
  637. 26:47solves. Job hunting is one of the most
  638. 26:49repetitive and timeconuming tasks a
  639. 26:51developer faces.
  640. 26:53So, the goal here is to eliminate all of
  641. 26:56that. Now, why are we telling it that?
  642. 26:59Well, the more context it has, the
  643. 27:01better decisions it'll be able to make
  644. 27:03with the limited context that we give it
  645. 27:05through the prompts. Then, we also give
  646. 27:08it every single page and the full user
  647. 27:11flow, how the user moves from page to
  648. 27:13page and exactly what happens. We also
  649. 27:16give it some more information about the
  650. 27:18specific functionalities of the app,
  651. 27:20which in this case is finding actual
  652. 27:23jobs and provide more info. Then a bit
  653. 27:26below we talk about what's in scope but
  654. 27:29also at the same time and this is
  655. 27:31important what's out of scope for this
  656. 27:34application. The agent reads this file
  657. 27:36once and knows exactly what we're
  658. 27:39building and more importantly what we're
  659. 27:42not. That way there's no scope creep.
  660. 27:45It's simple for it to understand our
  661. 27:47success criteria. So once it knows what
  662. 27:50we're building, it also needs to know
  663. 27:52how it's built. And for that there's
  664. 27:55another context file called
  665. 27:57architecture.mmd.
  666. 28:00You can also open it up in markdown.
  667. 28:03It's going to look something like this.
  668. 28:04And this file is all about the stack as
  669. 28:08well as the folder structure of the
  670. 28:09application. The system boundaries and
  671. 28:12data flow as well as database schemas
  672. 28:15and a set of rules that our AI agent
  673. 28:18must never violate. For example, API
  674. 28:21routes contain no UI logic. Components
  675. 28:24contain no DB logic. Agent code in agent
  676. 28:28never imports from components or
  677. 28:30actions. Server actions never call
  678. 28:32agents. And you you get the idea. That's
  679. 28:35the architecture. That was the
  680. 28:37architecture. But now it needs to know
  681. 28:40what to build and in what order. And
  682. 28:43that's what the build plan is for.
  683. 28:46Within the build plan, we tell it how we
  684. 28:48want to split this build into phases.
  685. 28:51For example, we're going to have 25
  686. 28:54total features across five phases with
  687. 28:57every feature being defined, scoped, and
  688. 29:00sequenced correctly. So that way, the
  689. 29:03agent never has to decide what comes
  690. 29:05next because it already knows it. This
  691. 29:07is the road map that we follow for the
  692. 29:10entire build. And if you're wondering,
  693. 29:12but hey, how do I actually come up with
  694. 29:14all of this? or do I have to prompt my
  695. 29:17AI agent to create this before we even
  696. 29:20begin? The answer is yes. That's
  697. 29:23something that we'll dive much deeper
  698. 29:24within in the agentic development
  699. 29:26course.
  700. 29:28But yeah, through the conversation with
  701. 29:30AI before you even begin with the build,
  702. 29:32you come up with these rules and
  703. 29:34different things that you want to build.
  704. 29:36It can easily split it into different
  705. 29:38features one by one for you and then
  706. 29:40that's the plan that we can follow. Of
  707. 29:42course, we can choose to deviate from
  708. 29:44it, but more or less we're going to
  709. 29:46stick with it. So once we know what to
  710. 29:48build, then it needs to know how to
  711. 29:51write the code. And that's what the code
  712. 29:53standards file is for. Here we tell it a
  713. 29:57bit about the TypeScript rules. For
  714. 29:59example, the naming conventions or NexJS
  715. 30:0316 conventions, the file and folder
  716. 30:05naming, the component structure, how we
  717. 30:08handle specific errors or server
  718. 30:11actions.
  719. 30:12Basically, every single convention that
  720. 30:14you follow that you can think of, write
  721. 30:17it down once. And this is what keeps the
  722. 30:20agent consistent across every session
  723. 30:23instead of simply drifting away into its
  724. 30:25own style by week two. And it also needs
  725. 30:28to know how to use the tools. So for
  726. 30:31that, we have the library docs.md.
  727. 30:35This file is not just generic
  728. 30:37documentation.
  729. 30:38It's on exactly how we use each library
  730. 30:42in a specific project like job pilot in
  731. 30:45this case. So before using any library
  732. 30:48check if an MCP server is configured for
  733. 30:50that library read that file and only
  734. 30:54then act. In this case we'll be using
  735. 30:56ins. So we tell it how we can use it and
  736. 30:59some rules that it can follow. Same
  737. 31:01thing for o dbqueries and browser base
  738. 31:04which we'll be using later on to
  739. 31:06actually scrape the data. check for the
  740. 31:08MCP of this library that we want to use
  741. 31:11and some examples of how we can use it.
  742. 31:13Of course, I was super detailed right
  743. 31:15here, but these context files are
  744. 31:17something that you can build along the
  745. 31:19way as you're building the application,
  746. 31:21but of course, the more you prepare at
  747. 31:23the start, the better. Now, for the UI
  748. 31:26layer, there's three files, each
  749. 31:28handling a different part. Let's start
  750. 31:31with UI tokens. Here we define every
  751. 31:34single color, spacing value, border
  752. 31:37radius or typography scale and we pull
  753. 31:40it directly from the design defined as
  754. 31:42CSS variables. The agent will use these
  755. 31:46exact values with no hard-coded hex
  756. 31:49values or no inconsistency between the
  757. 31:51pages. So once it knows the primitives,
  758. 31:54we can head over into the UI rules.mmd.
  759. 31:58Here we tell it how the UI behaves. uh
  760. 32:02things like the font, the layout and how
  761. 32:05cards should look like, the button
  762. 32:08styles too, the badges and everything.
  763. 32:11And this is what keeps every page
  764. 32:13feeling like it belongs to the same
  765. 32:15product. You know that if you're
  766. 32:16building with AI, very often the AI will
  767. 32:19start deviating from the general design.
  768. 32:22But with this in place, you can
  769. 32:23essentially consider it your entire
  770. 32:25design system. write the visual rules
  771. 32:28here once and then the agent will follow
  772. 32:30them across every page. And if you
  773. 32:32already have a Figma design, you can use
  774. 32:34a Figma MCP or just feed it over into AI
  775. 32:38and it'll generate this for you.
  776. 32:40Finally, there's the UI registry. This
  777. 32:43is a living document, so we're
  778. 32:45essentially starting it empty. Later on,
  779. 32:47I'll teach you how to use the import
  780. 32:49scale, which fills it automatically as
  781. 32:51we build components. So, as soon as you
  782. 32:53create some of the components, it'll
  783. 32:56check if a similar component exists. If
  784. 32:58yes, it'll match its exact classes. If
  785. 33:01no, it'll build it following the UI
  786. 33:03rules and UI tokens and then add it
  787. 33:05here. This is super powerful if you're
  788. 33:08building without a design, and it's what
  789. 33:10keeps your components consistent across
  790. 33:12the entire codebase. There's also
  791. 33:14another file called progress tracker,
  792. 33:16which also begins kind of empty. None of
  793. 33:19the check boxes have been checked, but
  794. 33:21it'll be automatically updated after we
  795. 33:24complete every new feature. So, at the
  796. 33:26start of any new session, the agent
  797. 33:28knows exactly where we left off with no
  798. 33:31reexlaining needed. That's it. These are
  799. 33:34the nine files that give the agent the
  800. 33:36full picture of what we're building, how
  801. 33:39the system works, what to build next,
  802. 33:41how to write the code, how to use the
  803. 33:44tools, and how the UI should look and
  804. 33:46behave. In this case, I was super
  805. 33:49detailed. When you're building these for
  806. 33:51your projects, you can start slow and
  807. 33:53then keep adding things as you go. And
  808. 33:56you'll most likely keep adding things as
  809. 33:58you switch it from a project to another
  810. 34:00project because you'll figure out what
  811. 34:02works and you'll want to stick with it,
  812. 34:04but then modify just slightly to suit
  813. 34:06that new project. In this case, I took
  814. 34:09the time and I made it very detailed for
  815. 34:11two reasons. First of all, you can
  816. 34:14browse these files and try to understand
  817. 34:16the process that I follow while writing
  818. 34:18them. Again, within the agentic
  819. 34:20development course, I'll give you the
  820. 34:22full uncut version of me actually
  821. 34:24generating these files with AI. And the
  822. 34:27second reason is that since we're
  823. 34:28building this application together, I
  824. 34:30want both of our agents to give us more
  825. 34:32or less the same output. The less
  826. 34:34specific you are, the less similar and
  827. 34:37less perfect output you're going to get.
  828. 34:39But with this detailed context files, we
  829. 34:42should be getting almost the same output
  830. 34:44so that you can easily follow along
  831. 34:46until the end of this course. So how do
  832. 34:48we tie all of this together? Well, it
  833. 34:51has to do with the agents.mmd file,
  834. 34:53which right now is completely empty. If
  835. 34:56you head back over to your video kit,
  836. 34:58you'll see a final agents.md file right
  837. 35:01here, which you can copy and simply
  838. 35:04paste it right here. It's simple. It
  839. 35:06just ties everything together. Here
  840. 35:08we're speaking directly to the agent. We
  841. 35:10tell it to read in this exact order
  842. 35:13before any implementation.
  843. 35:15Read all of these nine files. And if you
  844. 35:18think that making it read these files is
  845. 35:21going to consume a lot of tokens, trust
  846. 35:23me, it's going to consume significantly
  847. 35:25less tokens than it would take it to
  848. 35:28generate some stuff that you'll end up
  849. 35:29scrapping and never using and going back
  850. 35:32and forth and fixing it. This workflow
  851. 35:35is made for the highest speed of
  852. 35:37development, but also the lowest token
  853. 35:39cost. Trust me on that, and you'll see
  854. 35:42for yourself as you continue following
  855. 35:44along. There's also some rules that
  856. 35:46never change, like no hard-coded hex
  857. 35:48values, update the progress tracker
  858. 35:50after every feature, load the skill
  859. 35:53before touching any third party
  860. 35:54libraries, and it lists all the skills
  861. 35:57and exactly when to use them. Think of
  862. 36:00it like this. The context files are the
  863. 36:03knowledge
  864. 36:05and the agents. MD file is the
  865. 36:07instruction manual that tells the agent
  866. 36:10how to use that knowledge. Without it,
  867. 36:12the agent might skip a file, read them
  868. 36:15in the wrong order, or miss a rule. With
  869. 36:18it, every session starts exactly the
  870. 36:21same way, consistent, focused, and fully
  871. 36:24loaded. If you're using Claude, you'll
  872. 36:26need a claw.md file, which in this case
  873. 36:29should automatically point to the
  874. 36:31agents.mmd file. So, this should be good
  875. 36:34no matter which agent you're using.
  876. 36:35You'll also notice that under context,
  877. 36:38there's this designs folder. This is to
  878. 36:40make sure that every page has a visual
  879. 36:42reference so that when the agent builds
  880. 36:44UI, it's not inventing. It's simply
  881. 36:47trying to match what's already there.
  882. 36:49That's how you get consistent and
  883. 36:51polished UI without correcting it every
  884. 36:54session. And if you're finding all this
  885. 36:55overwhelming, just follow along with
  886. 36:58this video, build it with me, and I
  887. 37:00think you're going to get a pretty good
  888. 37:02idea of how you can use this workflow
  889. 37:04for your own projects. Of course, if you
  890. 37:06want to dive deeper and learn how to
  891. 37:08create these files from scratch, you can
  892. 37:10join the weight list for the full Aente
  893. 37:12course. But while that's not out, I
  894. 37:15actually already prepared the full AI
  895. 37:18development starter kit, including these
  896. 37:21context files, workflows, and the skills
  897. 37:24that we talked about, all within a
  898. 37:26single reference book that you can
  899. 37:27always go back to and look at when
  900. 37:30you're crafting these for your own
  901. 37:31projects. So, now that the context is
  902. 37:33ready and our agents MD file is here,
  903. 37:36we're officially ready to start
  904. 37:38developing our application.
  905. 37:41Now, just before we run our first
  906. 37:44prompt, I want to tell you about the
  907. 37:46workflow that we'll be using. So, no
  908. 37:48matter which agent you go with, the
  909. 37:50interface is more or less the same. You
  910. 37:53can open it up by pressing command
  911. 37:55shiftp and then search for chat. At
  912. 37:57least that's how it's called in VS Code.
  913. 38:00Here you'll see that you have the
  914. 38:01regular chat belonging to VS Code,
  915. 38:04Microsoft, and Copilot. There's also
  916. 38:07claude code and Codex. And these right
  917. 38:09here are just extensions. So if you head
  918. 38:12over to extensions and search for Codex,
  919. 38:15you can see it right here. It has almost
  920. 38:1710 million downloads. And as soon as you
  921. 38:20install it, it'll appear right here.
  922. 38:22Same situation is happening with Claude
  923. 38:24or any other agent you decide to use.
  924. 38:26You install them and they appear right
  925. 38:29here. So this video is completely
  926. 38:32agnostic when it comes to the tool
  927. 38:33you're using. The thinking and the specs
  928. 38:36are what actually matters. the tool is
  929. 38:39your call.
  930. 38:41That said, here's what I'd recommend.
  931. 38:43Claude Code is amazing and you can
  932. 38:45totally use it on the sonnet model which
  933. 38:48is cost effective and that's what I've
  934. 38:50done for the past two videos. In this
  935. 38:52one, I'll be using Codex. Lately, I was
  936. 38:55able to achieve a lot with very little
  937. 38:58token spent and that's what most people
  938. 39:00are running these days. It's also the
  939. 39:02most budget option available as they
  940. 39:04have the go plan for only about eight
  941. 39:07bucks per month, a plus plan, and
  942. 39:09they're usually giving away a month for
  943. 39:11free depending on your region. In my
  944. 39:13case, I'll go with plus. Either way,
  945. 39:15I'll make sure you don't burn through a
  946. 39:17ton of tokens regardless of what you
  947. 39:19pick. And sure, you can also use a Codex
  948. 39:23app or cursor or whatever you want or
  949. 39:25this agent window in VS Code. everything
  950. 39:28works. The context and the workflow that
  951. 39:31we're going to go through and use
  952. 39:33together throughout this video is
  953. 39:35agnostic to whichever tools you or your
  954. 39:38team are using. So, go ahead and open up
  955. 39:40your agent of choice. You can do that by
  956. 39:42pressing commandshift I, which
  957. 39:44automatically opens up the chat window,
  958. 39:47and you can just select the agent you
  959. 39:48want to use. So, let's start with
  960. 39:51setting up our design foundation.
  961. 39:54Everything we defined within UI tokens,
  962. 39:57we also need to put within our
  963. 39:59globals.css before the agent touches a
  964. 40:02single component. We want to do this
  965. 40:04first and then every page we build after
  966. 40:07will be consistent from the start. If
  967. 40:09you skip it, the agent will just start
  968. 40:11guessing. So, open up CEX or your agent
  969. 40:13of choice. Moving forward, when I say
  970. 40:15codex, you can think of that as your own
  971. 40:17agent. And let's tell it something like
  972. 40:20this. Read the agents.mmd file
  973. 40:26and follow the reading order specified.
  974. 40:30Confirm once you've read all context
  975. 40:33files and are ready to build. With this
  976. 40:37prompt, the agent will read everything,
  977. 40:40confirm it's loaded, and then we build.
  978. 40:42So let's run it once to see what it has
  979. 40:44to say. And here you'll also be able to
  980. 40:47watch it do its things like read the
  981. 40:50agents MD and then finally moving
  982. 40:53through the files that we gave it UI
  983. 40:55token UI rules UI registry and so on.
  984. 40:59Now, we want to make sure that the agent
  985. 41:01uses Tailwind CSS V4, not V3. And for
  986. 41:06these types of situations, there's a
  987. 41:08package called context 7, which has
  988. 41:10up-to-date docs for LLMs and AI code
  989. 41:13editors.
  990. 41:15For example, the NexJS docs was changed
  991. 41:1754 minutes ago, better raw 20 hours ago,
  992. 41:21and here's Tailwind CSS changed 20 hours
  993. 41:24ago. You want to click on it and then we
  994. 41:26want to give this info over to our agent
  995. 41:29so that it has the latest data
  996. 41:30available. We can do that right here
  997. 41:32within our terminal by running mpx ctx7
  998. 41:36context 7 skills search tailwind CSS.
  999. 41:41It'll ask us whether you want to install
  1000. 41:42the context and then you can select some
  1001. 41:45of the skills. There's going to be many,
  1002. 41:47but you can go with Tailwind CSS,
  1003. 41:50Tailwind CSS patterns, Tailwind CSS
  1004. 41:54utility components, I think, is going to
  1005. 41:56be another one that we want to use. Yep,
  1006. 41:59utility classes right here. And finally,
  1007. 42:01the best practices. So, that's going to
  1008. 42:03look something like this. And then press
  1009. 42:06enter. You can install them right here.
  1010. 42:08And now the agent will have both our
  1011. 42:10project tokens and up-to-date Tailwind
  1012. 42:13CSS v4 knowledge which means that we are
  1013. 42:15ready to write the globals.css prompt.
  1014. 42:19In this case we don't have to use the
  1015. 42:21architect skill because there's no
  1016. 42:23logic. It's just straightforward setup.
  1017. 42:26So I'll tell it to read the UI tokens.m
  1018. 42:30MD file and use Tailwind installed
  1019. 42:35skills to check the correct Tailwind v4
  1020. 42:39setup and then set up the globals.css
  1021. 42:44file. This fairly detailed context and
  1022. 42:47skill setup allows us to write very
  1023. 42:49short and quick prompts. So you'll see
  1024. 42:52now that the setup is done how we can
  1025. 42:54very quickly progress through the
  1026. 42:55application given that the right context
  1027. 42:58has already been put into place. Give it
  1028. 43:00some time to think about it. And you
  1029. 43:03might want to pause this video for a
  1030. 43:05couple of minutes until the agent does
  1031. 43:06this on your end. For me, it took about
  1032. 43:083 minutes. It first checked the Tailwind
  1033. 43:11skills, verified the Nex.js docs, and
  1034. 43:14only once it understood which
  1035. 43:16technologies it's working with, it made
  1036. 43:19sure that the CSS matches the token
  1037. 43:21specification cleanly. Then it made sure
  1038. 43:23that the build is running, that the
  1039. 43:26fonts are being set up properly, and
  1040. 43:28that's it. It set up Tailm for globals
  1041. 43:31in app.globals globals using the token
  1042. 43:33pattern from the context UI tokens a
  1043. 43:36full theme and it also aligned the
  1044. 43:39layout with the project font rule by
  1045. 43:41switching it to enter. Great. So now if
  1046. 43:43you want to check out the
  1047. 43:44app.globals.css,
  1048. 43:46it's going to look something like this.
  1049. 43:48We get all of these new styles that now
  1050. 43:50we can use within our application. So,
  1051. 43:52back within the homepage, if you head
  1052. 43:54over here and give it a class name of
  1053. 43:58something like let's head over into our
  1054. 44:00globals to see which fonts can we use,
  1055. 44:03there's going to be the font text color
  1056. 44:07info dark for example. So, you can give
  1057. 44:09it a class name of something like bg
  1058. 44:12info dark and also text dash white as
  1059. 44:17well as text dash 3xl.
  1060. 44:21And then if you head back, you can see
  1061. 44:22that all of these styles got applied.
  1062. 44:24This means that our globals.css
  1063. 44:27had been set up properly, at least for
  1064. 44:29the initial primitive colors that we can
  1065. 44:30use across our application to have
  1066. 44:33consistent styling. So now that the
  1067. 44:34globals file has been set up,
  1068. 44:36immediately in the next lesson, let's
  1069. 44:38build the homepage.
  1070. 44:42Now that our design tokens are in place,
  1071. 44:44we're ready to build the first page. And
  1072. 44:47this is where everything we set up
  1073. 44:48starts to pay off. Since we're going to
  1074. 44:51start a new session, so you can head
  1075. 44:53over into codeex and exit the current
  1076. 44:56session, want to start a new context for
  1077. 44:58every new feature we're building. Start
  1078. 45:00with a new chat. And whenever you do so,
  1079. 45:03I always like to tell it to read the
  1080. 45:05agents.md file and follow the specified
  1081. 45:07reading order and then confirm once it's
  1082. 45:10actually read out. You can think of this
  1083. 45:12as a pre-step that I always like to do
  1084. 45:14before I start working on more complex
  1085. 45:16features. And then while it's doing its
  1086. 45:18thing, we can already start prompting it
  1087. 45:20to build a feature. So I'll tell it to
  1088. 45:23build the complete homepage exactly as
  1089. 45:27shown in and then here we can utilize
  1090. 45:30our design images under context
  1091. 45:34landing page.png.
  1092. 45:36I want to provide it with an image of
  1093. 45:38the design that you can either find
  1094. 45:40online or design it using Figma or some
  1095. 45:44other design tools. So as shown in and
  1096. 45:47this is going to be the landing page.png
  1097. 45:50file and want to say use images from the
  1098. 45:55public folder when needed
  1099. 45:59and run it just at the right time when
  1100. 46:02it finished reading the agents MD file
  1101. 46:04and all the other context files. And
  1102. 46:06notice just how short that prompt is. No
  1103. 46:10stack explanation, no folder structure,
  1104. 46:13no UI rules because the agent already
  1105. 46:16has all of that from the context files.
  1106. 46:18We just tell it what to build and where
  1107. 46:21the visual references. That's it. And
  1108. 46:23this is where the magic happens. Codex
  1109. 46:26immediately started treating this as
  1110. 46:28phase 1 feature 01 homepage. So it's
  1111. 46:32loading the relevant build skills, the
  1112. 46:34current homepage layout files, the
  1113. 46:36Nex.js local docs and available assets.
  1114. 46:39So we can match the design cleanly
  1115. 46:41before touching the code. The app is
  1116. 46:44still very small which is good for
  1117. 46:46matching the design precisely. It got
  1118. 46:48the design loaded. It's going to also
  1119. 46:50take a look at some images. It dissected
  1120. 46:52it and it's loading the front-end design
  1121. 46:55guidance. It's using the architect skill
  1122. 46:58for the homepage structure and the
  1123. 47:00imprint after implementation so we can
  1124. 47:02keep this first feature deliberate and
  1125. 47:05consistent with the project rules. And
  1126. 47:07all of this is happening from a single
  1127. 47:10short prompt that we gave it. We're
  1128. 47:12building a fully designed marketing
  1129. 47:14homepage that matches the landing page
  1130. 47:17design with a topnap bar, hero, and
  1131. 47:20everything else. The language that it's
  1132. 47:22locking in exactly as shown. Use images
  1133. 47:25from public complete homepage decisions
  1134. 47:28that it's making. It made a decision to
  1135. 47:31split the code into components to stay
  1136. 47:34within the existing project token system
  1137. 47:37and to make sure that it works on
  1138. 47:38desktop but also mobile. It made some
  1139. 47:41assumptions which is good and then it
  1140. 47:43created a stepbystep list of how it can
  1141. 47:46start doing it. Finally, after all of
  1142. 47:49that, it's moving into implementation
  1143. 47:52and it'll keep the component shapes
  1144. 47:54close to the architecture docs.
  1145. 47:57Now it's editing creating one component
  1146. 47:59after another. The homepage structure is
  1147. 48:02done and then it'll even lint it to
  1148. 48:05check for any TypeScript or app router
  1149. 48:07issues before it does the required
  1150. 48:10registry or progress updates in the
  1151. 48:12visual cleanup. There we go. Lint is
  1152. 48:15clean. It's going to do another compile
  1153. 48:18level check to catch any server errors
  1154. 48:20or next images issues by running mpm run
  1155. 48:23build. Looks like the production build
  1156. 48:25failed, which is amazing that we ran it.
  1157. 48:27So, we're able to notice this issue. And
  1158. 48:29that's because Next Font couldn't reach
  1159. 48:31Google Fonts from the sandbox. So, it's
  1160. 48:33going to rerun that build with network
  1161. 48:35approval so we can verify the homepage
  1162. 48:37compiles end to end. The build is
  1163. 48:41passing. It's doing the final repo
  1164. 48:43required bookkeeping next, such as
  1165. 48:46marking the phase one feature homepage
  1166. 48:4801 complete in the tracker and
  1167. 48:51imprinting that homepage patterns into
  1168. 48:53the UI registry so future pages stay
  1169. 48:56visually consistent. It's updating the
  1170. 48:59two live docs right now, both the
  1171. 49:02feature completion and the exact
  1172. 49:04homepage class patterns we established.
  1173. 49:07This is great. And I think even at this
  1174. 49:09point, while we haven't yet checked out
  1175. 49:11the output, you can see why that initial
  1176. 49:15grunt work that we needed to do to set
  1177. 49:17everything up is paying off
  1178. 49:19significantly. While it's finishing, you
  1179. 49:22can review the modified files starting
  1180. 49:25from the globals where it added some new
  1181. 49:27component specific styles to the layout
  1182. 49:30where it updated the title and the
  1183. 49:32description, which is amazing. We didn't
  1184. 49:35even ask it to do that, but it did it.
  1185. 49:37Here is the homepage and check just how
  1186. 49:40clean that is. There's a navbar, there's
  1187. 49:43a hero, there's a how it works, there's
  1188. 49:45the features, success stories, call to
  1189. 49:48action session exactly as I would have
  1190. 49:50coded it. So to people who say that the
  1191. 49:53AI generated code isn't clean and
  1192. 49:56readable and scalable, simply share them
  1193. 49:58this part of the video. So after the
  1194. 50:00homepage, there are the individual
  1195. 50:02components like the call to action
  1196. 50:04section which is also super clean. the
  1197. 50:07features section where it even extracted
  1198. 50:09the data before the actual output. The
  1199. 50:13hero section, how it works, success
  1200. 50:15stories, footer, logo, all of these are
  1201. 50:18just some representational components.
  1202. 50:20And on top of changing these, it also
  1203. 50:22updated the progress tracker.md. So we
  1204. 50:26can go ahead and preview it. It simply
  1205. 50:28marked the homepage as complete as well
  1206. 50:32as the UI registry where now it added
  1207. 50:34some new files like the landing footer
  1208. 50:38so that if it needs to be reused later
  1209. 50:40on, it knows exactly how a footer should
  1210. 50:43look like within our application or
  1211. 50:45maybe a call to action banner or maybe a
  1212. 50:48testimonial section. All of these are
  1213. 50:50likely to appear on other pages. And
  1214. 50:53now, believe it or not, our agent
  1215. 50:56documented these features for us. And
  1216. 50:59thanks to the context system we have put
  1217. 51:01in place, it'll simply refer to this UI
  1218. 51:04registry whenever it needs to do
  1219. 51:06something similar in the future. So, I
  1220. 51:09guess this is the moment of truth. We
  1221. 51:12have to run our application and see how
  1222. 51:15does this homepage look like. I'll open
  1223. 51:17it up right here in the preview. Zoom it
  1224. 51:20to a proper size. And check this out.
  1225. 51:23Besides these buttons, which are fully
  1226. 51:25dark, which we're going to fix, and I'm
  1227. 51:27super happy that there's something this
  1228. 51:29obviously wrong, we're going to fix it.
  1229. 51:31Don't worry. Take a look at the rest of
  1230. 51:34the application. I mean, you can hover
  1231. 51:36over these buttons and they move. The
  1232. 51:38hero section and the font size and
  1233. 51:40colors are done incredibly well. The
  1234. 51:42subheading as well. It used this image
  1235. 51:45from the assets and displayed it nicely.
  1236. 51:48There's a second section right here.
  1237. 51:50Manage your job search with ease.
  1238. 51:52Another section apply with more
  1239. 51:54confidence where it used another image.
  1240. 51:57A full page success stories using Tom
  1241. 52:00Wilson and its image from the public
  1242. 52:02folder as well as a little ending part
  1243. 52:05and then the footer. It did about a 99%
  1244. 52:09match on the first try with no back and
  1245. 52:12forth, no corrections, and no
  1246. 52:14reexplaining the design system. The
  1247. 52:17context files did the work up front, so
  1248. 52:20we don't have to do it here. But I
  1249. 52:22definitely want to fix the buttons. And
  1250. 52:24thanks to our design system, we only
  1251. 52:26have to fix it once. This is actually a
  1252. 52:29situation where I'm going to use this
  1253. 52:30new VS code add element to chat feature
  1254. 52:34where I'm going to select a button and
  1255. 52:36add a corrective prompt
  1256. 52:39saying that all the buttons on the
  1257. 52:41screen right now appear fully black
  1258. 52:44background and dark text which is not
  1259. 52:47visible on the dark background. Make
  1260. 52:49them match the actual design and updated
  1261. 52:52within the registry and the globals. So,
  1262. 52:55all the buttons on the screen look
  1263. 52:57great. And you can see that now we're
  1264. 52:58passing it all the info and the
  1265. 53:00screenshot. In the screenshot, I can
  1266. 53:02actually see the text right here, which
  1267. 53:04is too dark. But, as I said, the
  1268. 53:06contrast just isn't good. So, we have to
  1269. 53:09fix it. It's going to trace where button
  1270. 53:11colors and tokens are defined.
  1271. 53:14Collect all the project rules. Confirm
  1272. 53:16the token intent for the button. And all
  1273. 53:19of this is happening super quickly right
  1274. 53:21now. It's basically doing it in real
  1275. 53:22time as I'm speaking. It identified the
  1276. 53:25button class usage. It found a
  1277. 53:28conflicting token definitions in the
  1278. 53:29repo. So, it's going to inspect it
  1279. 53:31further by allowing it access to the
  1280. 53:34browser. It'll now take a look at the
  1281. 53:36application and see why it hasn't been
  1282. 53:38done properly. It pinpointed the root
  1283. 53:41cause. The text accent foreground
  1284. 53:44utility is not taking effect on those
  1285. 53:46dark CTAs, so they inherit dark text.
  1286. 53:50It'll simply fix the globals.css, CSS,
  1287. 53:52which is now super simple, modify it
  1288. 53:55across all the buttons and update the UI
  1289. 53:58registry so that mistake doesn't happen
  1290. 54:00again. But after some time, it found
  1291. 54:04that the approach wasn't being emitted
  1292. 54:05into compiled CSS properly. So it tried
  1293. 54:08switching back to a more reliable
  1294. 54:10approach, but then at the end of the day
  1295. 54:12just brought it back to dark buttons.
  1296. 54:16And it told me that Copilot has been
  1297. 54:18working for a while and that it can
  1298. 54:20continue to iterate, but maybe we need
  1299. 54:22to refine the prompt. And then I figured
  1300. 54:25that in this case it did it using
  1301. 54:27Copilot because when we added this
  1302. 54:30inspect element, it only works with VS
  1303. 54:34Code's native chat application. But
  1304. 54:36instead, we can copy this prompt and
  1305. 54:38paste it as a corrective prompt directly
  1306. 54:41into the codeex agent or whichever agent
  1307. 54:43you used because this one already has
  1308. 54:46all the info from our context and it
  1309. 54:48should be able to fix it without
  1310. 54:49necessarily pointing to it. It knows
  1311. 54:51what the buttons are. So, this was
  1312. 54:54actually a good experiment. Let's see
  1313. 54:56how much more powerful this agent is
  1314. 54:59considering that it has the context from
  1315. 55:01before when we gave it the task to
  1316. 55:03actually create this landing page. Oh,
  1317. 55:06wait. It actually did it super quickly.
  1318. 55:08It found that the homepage was styling
  1319. 55:11CTA's ad hoc and it replaced that with
  1320. 55:14the landing button primary and landing
  1321. 55:16button secondary classes in globals.
  1322. 55:19Updated it and now it looks great on the
  1323. 55:22navbar as well as on the hero section
  1324. 55:25and everywhere else where the buttons
  1325. 55:27are being used. I think that's right
  1326. 55:29here in the footer. So you can see that
  1327. 55:31one corrective prompt, even without
  1328. 55:34pointing to it with our finger, was able
  1329. 55:36to immediately make a huge difference to
  1330. 55:39our landing page. And that's it. The
  1331. 55:42homepage is now done. The only thing
  1332. 55:44that you need to do if you want to stay
  1333. 55:46consistent with my workflow is to save
  1334. 55:49the session before we move on. So open
  1335. 55:52up your chat and simply run forward
  1336. 55:54slash remember. What this does is it'll
  1337. 55:57save only the most important parts of
  1338. 55:59the session so that the agent can refer
  1339. 56:01to them later on. For example, about the
  1340. 56:04buttons not being correct. And how can
  1341. 56:06you know exactly what got saved? Well,
  1342. 56:09it's simple. You can just head over into
  1343. 56:11the memory.md file which it now created.
  1344. 56:14If we preview it in markdown, you can
  1345. 56:17see right here that the current state is
  1346. 56:20that the homepage is fully implemented
  1347. 56:22and matches the design and it knows that
  1348. 56:24the next session should start with the
  1349. 56:27second feature of the phase one which is
  1350. 56:30the authentication. Perfect. So in the
  1351. 56:33next lesson, let's implement the O.
  1352. 56:37Now, just before we start adding
  1353. 56:39authentication to our project, let me
  1354. 56:41introduce you to the tool that's going
  1355. 56:43to be powering the entire back end of
  1356. 56:45this project, including the O. It's
  1357. 56:48called Ins. And if you haven't heard of
  1358. 56:50it, pay attention because it changes how
  1359. 56:53you build backends with AI. Ins gives
  1360. 56:57your agent a complete backend in one
  1361. 56:59platform that includes authentication,
  1362. 57:03database, storage, edge functions, model
  1363. 57:06gateways, real-time functionalities, and
  1364. 57:08the vector search and embeddings. And
  1365. 57:10all of it working directly with your
  1366. 57:12coding agents, which makes it the
  1367. 57:14perfect fit for this video and the
  1368. 57:16workflow that I want to teach you. It's
  1369. 57:18not retrofitted for AI workflows, but
  1370. 57:21rather built for them from the ground
  1371. 57:23up. What that means in practice is
  1372. 57:25instead of your agent guessing how to
  1373. 57:27wire up authentication for example or
  1374. 57:30writing database queries against an API
  1375. 57:32that it half knows ins ships with an MCP
  1376. 57:36server. Your agent then connects
  1377. 57:38directly to your backend reads live
  1378. 57:40schemas manages tables and configures
  1379. 57:42authentication based on all of these
  1380. 57:45tools and knowledge that it has. That's
  1381. 57:47the difference between a copilot and an
  1382. 57:49agent that actually builds things for
  1383. 57:51you from the ground up. And for our job
  1384. 57:54pilot project, InsForge is going to
  1385. 57:56handle everything behind the scenes,
  1386. 57:57including the O, the entire database,
  1387. 58:00resume storage, and all of it. It's a
  1388. 58:03single platform, one connection, and no
  1389. 58:05configuration that we have to manage
  1390. 58:07ourselves. To start hooking it up, open
  1391. 58:09up your agents, start a new chat, and
  1392. 58:12run the remember command. This is the
  1393. 58:15first time we're using it. Specifically,
  1394. 58:17we want to say restore what it
  1395. 58:19remembered before. This is only going to
  1396. 58:21pull up the most important history so
  1397. 58:23that it can use that data to do better
  1398. 58:25work in the future. Now, before we go
  1399. 58:27ahead and set up ins, go ahead and copy
  1400. 58:30your entire agents.m MD file as it is
  1401. 58:34and save it somewhere safe. That's
  1402. 58:36because when ins
  1403. 58:38writes its own instructions into agents
  1404. 58:40and sometimes it may overwrite your
  1405. 58:42custom content and we need that content
  1406. 58:44back after the setup. So, make sure to
  1407. 58:46copy everything that is in here. Then
  1408. 58:48head back over to InsForge. I'll leave
  1409. 58:50the link down in the description that
  1410. 58:52you can click on to follow along and see
  1411. 58:55exactly what I'm seeing and start
  1412. 58:57building today. You can log in through
  1413. 58:59either GitHub or Google. And when you're
  1414. 59:01in, you can create your project. You can
  1415. 59:03start with JSM
  1416. 59:06call it something like job pilot or
  1417. 59:09maybe your own name and choose the
  1418. 59:10region that is closest to you. Once you
  1419. 59:12create it, it's going to load the
  1420. 59:14interface and you can either install it
  1421. 59:16through the CLI or you can install it in
  1422. 59:19agent mode. You can proceed with the CLI
  1423. 59:21or select any of the agents here. I'll
  1424. 59:23go ahead and click install on the codeex
  1425. 59:26part since that's what we're using.
  1426. 59:28It'll give you the option of the CLI.
  1427. 59:30So, you can simply copy and paste this
  1428. 59:32or an MCP, which is what I want to teach
  1429. 59:34you how to implement. Simply copy the
  1430. 59:36installation prompt. Open up a new Codex
  1431. 59:39chat and simply paste what you copied.
  1432. 59:42I'm using InsForge as my backend
  1433. 59:44platform. Please run this command to
  1434. 59:46install the Ins MCP server. And I
  1435. 59:48believe for this the medium reasoning
  1436. 59:50model is going to be fine. And I'll be
  1437. 59:52using GPT 5.5. This should do the trick.
  1438. 59:54It'll now install the Ins MCP server
  1439. 59:57with the exact command we provided. Now
  1440. 59:59it said that the install command failed
  1441. 1:00:01in sandbox because network access to mpm
  1442. 1:00:04is blocked. So we can either run it
  1443. 1:00:06manually or we can approve the
  1444. 1:00:09permissions. So I'll say approve and
  1445. 1:00:12it'll try it once again with these added
  1446. 1:00:15permissions. Either way is totally fine.
  1447. 1:00:17The next step is to restart the coding
  1448. 1:00:19agent to check whether it has been
  1449. 1:00:21installed properly. So to verify the
  1450. 1:00:24connection we can simply start a new
  1451. 1:00:26session and tell it something like I'm
  1452. 1:00:29using ins as my backend platform call
  1453. 1:00:32ins MCP's fetch docs to learn about ins
  1454. 1:00:36and now we can see whether it'll
  1455. 1:00:38actually call the ins mcp and confirm
  1456. 1:00:41the connection. You can see that right
  1457. 1:00:44here fetch docs. There we go. And it has
  1458. 1:00:47the full info. Now open up the
  1459. 1:00:48agents.mmd file. You can see that ins
  1460. 1:00:51added its own contents into the
  1461. 1:00:53agents.mmd file. Thankfully, I told you
  1462. 1:00:56to copy your previous agents.mmd. So, we
  1463. 1:00:59can still bring it back. So, right on
  1464. 1:01:01top of the insk documentation, you can
  1465. 1:01:03bring back what was previously within
  1466. 1:01:05your agents.mmd. These instructions are
  1467. 1:01:08important because they tell the agent
  1468. 1:01:10how to use the backend. Your custom
  1469. 1:01:12instructions tell it how to build this
  1470. 1:01:14specific project, but both need to be
  1471. 1:01:16here. Neither replaces one another. So
  1472. 1:01:18now with ins set up we are ready to
  1473. 1:01:21implement authentication. Go ahead and
  1474. 1:01:24open up your agent by heading over to
  1475. 1:01:26codex and within a new chat we can tell
  1476. 1:01:29it something like check the progress
  1477. 1:01:32tracker and also the build plan right
  1478. 1:01:36because there we listed everything we
  1479. 1:01:38want to do. then use the INSF forge MCP
  1480. 1:01:43to fetch the latest ins
  1481. 1:01:47documentation before we start
  1482. 1:01:50implementing O. So again, you'll see me
  1483. 1:01:53ask it to pull all the data together
  1484. 1:01:56before it starts implementing things so
  1485. 1:01:58that we know it's going to do it in the
  1486. 1:02:00proper way. It'll read the progress
  1487. 1:02:01tracker to figure out where we are right
  1488. 1:02:04now in the process of developing the
  1489. 1:02:05project. Then it'll check out the build
  1490. 1:02:08plan to know what it needs to build next
  1491. 1:02:11and finally fetch the ins docs via the
  1492. 1:02:14MCP. So notice what's happening here.
  1493. 1:02:17The agent is checking where we are in
  1494. 1:02:19the build, what the O requires, and then
  1495. 1:02:22pulling live ins documentation through
  1496. 1:02:25an MCP, not some outdated data. So now
  1497. 1:02:28it's going to confirm the build plan.
  1498. 1:02:30The next feature is O covering UI,
  1499. 1:02:33Google GitHub, OOTH, callback handling,
  1500. 1:02:35and so on. It has the latest ins docs
  1501. 1:02:37and the only thing you have to do now is
  1502. 1:02:39to say something like start or go ahead
  1503. 1:02:42given all the context we have that's
  1504. 1:02:44enough to spin it up and give it the
  1505. 1:02:46permission to start developing the
  1506. 1:02:48feature O2 in this case O since this one
  1507. 1:02:52touches routing middleware client server
  1508. 1:02:55boundaries and the login UI it's going
  1509. 1:02:57to use the architect skill to form the
  1510. 1:03:00blueprint it knows that it has to be a
  1511. 1:03:02custom ins flow and it pulled the latest
  1512. 1:03:04nextGS6 16 docs where it noticed that
  1513. 1:03:07middleware was replaced with proxy.
  1514. 1:03:09Since most of the codebase online has
  1515. 1:03:12been written with older versions of
  1516. 1:03:13Nex.js, if we didn't have these very
  1517. 1:03:16detailed instructions on pulling the
  1518. 1:03:17latest docs and using them, it is highly
  1519. 1:03:19likely that the agent would have used
  1520. 1:03:22the older version of the middleware and
  1521. 1:03:24placed it at the wrong spot, therefore
  1522. 1:03:26breaking the app. But since we have all
  1523. 1:03:28of this setup done, it did it properly.
  1524. 1:03:31So, let's give it some time and see the
  1525. 1:03:33implementation. Feel free to pause the
  1526. 1:03:35video um as this actually took 8 minutes
  1527. 1:03:38for me on medium reasoning. But yeah,
  1528. 1:03:41after 8 minutes or so, it implemented
  1529. 1:03:43the full O feature includes the insk O
  1530. 1:03:48setup, the OOTH start routes with Google
  1531. 1:03:51and GitHub, server routes for OOTH
  1532. 1:03:54callback exchange, refresh and logout
  1533. 1:03:56routes, Nex.js 16 route protection via
  1534. 1:03:59proxy. So definitely make sure that you
  1535. 1:04:01have a proxy right here in the root of
  1536. 1:04:03the application and not a middleware
  1537. 1:04:05file because this changed in next.js
  1538. 1:04:08version 16 and our agent caught it.
  1539. 1:04:11Added login UI which we'll check out
  1540. 1:04:13soon. Minimal protected placeholders and
  1541. 1:04:16it updated the progress tracker and UI
  1542. 1:04:18registry. We also have to add thev file
  1543. 1:04:21to our application because currently
  1544. 1:04:23doesn't exist. And in there we have to
  1545. 1:04:25add the next public ins URL and ins add
  1546. 1:04:28an add-on key. So, let's do that right
  1547. 1:04:30away. We don't want the agent to handle
  1548. 1:04:33our environment variables. We're going
  1549. 1:04:34to do it ourselves by creating a
  1550. 1:04:37new.env.local.
  1551. 1:04:38Heading back over to our ins dashboard
  1552. 1:04:42under install at the bottom there's
  1553. 1:04:44going to be API keys. It's always great
  1554. 1:04:46to fetch them in case we need to use
  1555. 1:04:48them later on. So, I'll look at the
  1556. 1:04:50project URL. That's going to be ins
  1557. 1:04:54project URL. And after that we'll have
  1558. 1:04:57the next public ins URL as well as the
  1559. 1:05:00next public inson key. So prep both of
  1560. 1:05:04them and then simply paste the keys you
  1561. 1:05:07can get directly from the dashboard. We
  1562. 1:05:09can revisit this later on in case we
  1563. 1:05:11need to update them. But yeah, let's go
  1564. 1:05:13ahead and check it out. If you head over
  1565. 1:05:15to your localhost 3000, either open it
  1566. 1:05:17locally or you can open it up in your
  1567. 1:05:19browser. Click get started and it'll
  1568. 1:05:22redirect you to this beautifully
  1569. 1:05:24designed authentication page. And now
  1570. 1:05:27one thing that I want to point out here
  1571. 1:05:29is that we never actually gave it a
  1572. 1:05:32design for the o page itself. Keep that
  1573. 1:05:35in mind. We did give it a design for the
  1574. 1:05:38landing page and that included some
  1575. 1:05:40primitives, some assets that it can use
  1576. 1:05:42and the general idea of where we want to
  1577. 1:05:44take the design of this application. But
  1578. 1:05:47off page we didn't give it a design for.
  1579. 1:05:50And take a look at just how polished and
  1580. 1:05:53on brand this looks like. But now the
  1581. 1:05:55big question is can we actually log in?
  1582. 1:05:57I'll go ahead and proceed with Google.
  1583. 1:05:59And it says we could not start that
  1584. 1:06:01signin method. Please try again. And I'm
  1585. 1:06:04actually super glad this happened
  1586. 1:06:06because I get a chance to show you
  1587. 1:06:08another one of the skills that I created
  1588. 1:06:10and that'll become a huge part of your
  1589. 1:06:12workflow. It's called recover. So go
  1590. 1:06:15ahead and open up the chat that you were
  1591. 1:06:18within and in the same window use the
  1592. 1:06:21recover skill. So when something goes
  1593. 1:06:24wrong during build, it's going to
  1594. 1:06:26diagnose the problem and fix it properly
  1595. 1:06:29and not just lose its way around it. So
  1596. 1:06:31in most cases, it's going to be just
  1597. 1:06:33enough for you to pass the error message
  1598. 1:06:35that you're seeing. But you can also add
  1599. 1:06:37some additional context like
  1600. 1:06:38authentication is not working properly.
  1601. 1:06:41Press enter and just watch how it'll
  1602. 1:06:43recover itself.
  1603. 1:06:45figure out exactly what the issue is,
  1604. 1:06:47diagnose the problem, and then make only
  1605. 1:06:50one targeted change once the root cause
  1606. 1:06:53is clear. Looks like failure mode one, a
  1607. 1:06:55specific thing is broken. And it was
  1608. 1:06:57able to find it within a second. Root
  1609. 1:07:00cause next public ins for URL is set to
  1610. 1:07:02an IK key value, not the ins backend
  1611. 1:07:05URL. So, we have to make the next public
  1612. 1:07:07ins for URL this one right here. So
  1613. 1:07:10simply head over into ourv and make sure
  1614. 1:07:12that the next public infford URL is set
  1615. 1:07:14to an actual URL and not a key that I
  1616. 1:07:17had right here. This was on me, but
  1617. 1:07:20again I'm glad to show you just how
  1618. 1:07:22powerful the recover skill is. So once
  1619. 1:07:24you fix the envitize
  1620. 1:07:29and you'll be redirected back to your
  1621. 1:07:31profile.
  1622. 1:07:33Currently there is nothing there but
  1623. 1:07:35just the fact that we are logged in is
  1624. 1:07:37perfect.
  1625. 1:07:39You can go ahead and log out if you want
  1626. 1:07:41to. That's working as well. Now, if you
  1627. 1:07:44go to the profile, it's going to bring
  1628. 1:07:45you back to the O. And once again, you
  1629. 1:07:48can just log in. And that's it. We're
  1630. 1:07:51in. So, now that we know that the
  1631. 1:07:53feature has been implemented properly,
  1632. 1:07:55we can make use of another skill called
  1633. 1:07:57review. So, after building a feature, we
  1634. 1:08:00want to verify that it matches what was
  1635. 1:08:02planned, respecting the system
  1636. 1:08:04architecture and design standards, and
  1637. 1:08:07is ready to proceed. The skill is super
  1638. 1:08:09quick, less than a minute. It gives us
  1639. 1:08:11back the findings. The critical one that
  1640. 1:08:13oath wasn't able to start without the
  1641. 1:08:16proper env. That's on me. Uh that the O
  1642. 1:08:19route handlers do not follow the
  1643. 1:08:21required error handling. Okay. Do not
  1644. 1:08:24wrap the route logic in try catch as
  1645. 1:08:26project standards require every route
  1646. 1:08:28handler to catch log errors and return
  1647. 1:08:30human safe responses. The ooth buttons
  1648. 1:08:33use a link to sideffecting API routes.
  1649. 1:08:37In production link behavior can include
  1650. 1:08:39pre-fetching, navigation optimizations,
  1651. 1:08:41side effects and so on. So that's
  1652. 1:08:43something that we can fix. So it found
  1653. 1:08:45the issues. The plan pieces are mostly
  1654. 1:08:47present. Login UI, Google GitHub oath
  1655. 1:08:50routes and so on. Some issues that we've
  1656. 1:08:52seen. So now before we move on to
  1657. 1:08:54implementing the next feature and you
  1658. 1:08:56can see it already knows what it is
  1659. 1:08:57because of our context files, we can
  1660. 1:08:59tell it to fix it. It quickly noticed
  1661. 1:09:02that we fixed the env issue oursel and
  1662. 1:09:05then it also fixed the following review
  1663. 1:09:07issues and updated the UI registry for
  1664. 1:09:09the button and the pattern. So that's
  1665. 1:09:11great. We'll need to restart the Nex.js
  1666. 1:09:14server to pick up the corrected env. But
  1667. 1:09:17yeah, now that everything is done, I
  1668. 1:09:19also want to run the imprint skill. So
  1669. 1:09:21after building any UI components, we
  1670. 1:09:23want to extract the visual patterns that
  1671. 1:09:25matter for consistency and save them to
  1672. 1:09:28the UI registry. In this case, it looks
  1673. 1:09:30like it already updated the UI registry,
  1674. 1:09:32but just in case it missed some stuff
  1675. 1:09:34while doing the review, I'll run this
  1676. 1:09:36skill manually. And in about 10 seconds,
  1677. 1:09:38it imprinted the login card. So, the
  1678. 1:09:41final thing we need to do is run the
  1679. 1:09:43remember skill to save what matters at
  1680. 1:09:45the end of the session because this was
  1681. 1:09:47a good one. And you can also run save.
  1682. 1:09:50And finally, it saved it all in the
  1683. 1:09:52memory. So that in the next session, we
  1684. 1:09:54can simply run remember restore to pick
  1685. 1:09:56it up from here. Let's keep building.
  1686. 1:10:00Now that we have the landing page, the
  1687. 1:10:03auth
  1688. 1:10:04page, I think this is the right point to
  1689. 1:10:07start tracking what's happening within
  1690. 1:10:10your application. Because that's the
  1691. 1:10:12question that most developers never ask
  1692. 1:10:14until it's too late. How do you know
  1693. 1:10:16that your app is actually working the
  1694. 1:10:18way you think it is? Not does it
  1695. 1:10:20compile, but are users actually finding
  1696. 1:10:23the jobs within the platform? Are they
  1697. 1:10:25generating the cover letters or creating
  1698. 1:10:27their accounts and profiles? Without
  1699. 1:10:30that data, you're just guessing. And
  1700. 1:10:32guessing on a product you just shipped
  1701. 1:10:34is how you end up optimizing the wrong
  1702. 1:10:36things. That's why I want to introduce
  1703. 1:10:38Post Hog in this stack. It's open-
  1704. 1:10:41source, built for engineers, not
  1705. 1:10:43marketers. And it includes event
  1706. 1:10:46tracking, funnels, session replays,
  1707. 1:10:48feature flags, all within one platform.
  1708. 1:10:51As we continue developing Job Pilot,
  1709. 1:10:53you'll see exactly what it does, but
  1710. 1:10:55basically it tracks every meaningful
  1711. 1:10:57user action and it powers the three
  1712. 1:11:00analytics charts that we'll show on the
  1713. 1:11:02dashboard. Every job search, every cover
  1714. 1:11:04letter generated, and every resume that
  1715. 1:11:07we created for our users, and Posthog
  1716. 1:11:10will capture it. So, let's set it up.
  1717. 1:11:13Click the Post Hog link down in the
  1718. 1:11:14description and create your free account
  1719. 1:11:16if you don't have one already. You can
  1720. 1:11:18choose your region and sign in with any
  1721. 1:11:21platform that you prefer. If you're
  1722. 1:11:22creating it for the first time, you need
  1723. 1:11:24to create a new organization. You can
  1724. 1:11:26call it something like JSM_. And then
  1725. 1:11:28enter either your name or the name of
  1726. 1:11:31your organization. And then also select
  1727. 1:11:33your role. Most likely it's going to be
  1728. 1:11:35an engineering. And if you have a second
  1729. 1:11:38also you can say JavaScript mastery
  1730. 1:11:40right here in where did you hear about
  1731. 1:11:42us? So let's create the organization.
  1732. 1:11:45and it's going to ask you what do you
  1733. 1:11:47want to do with Post Hog. In this case,
  1734. 1:11:50we want to understand how our users
  1735. 1:11:52behave. That's the closest match to what
  1736. 1:11:54we're building. We can turn on the
  1737. 1:11:56product analytics, the session replay,
  1738. 1:11:58the web analytics, and later on we'll be
  1739. 1:12:00able to add all of this additional stuff
  1740. 1:12:02as well. So, let's go. I'll say it out
  1741. 1:12:05loud. Post Hog has the best iname setup
  1742. 1:12:09wizard. You just used one single command
  1743. 1:12:11and no matter which framework you use,
  1744. 1:12:14it'll install and set up Post Hog and
  1745. 1:12:17also add the initial event tracking
  1746. 1:12:20specifically tailored to the application
  1747. 1:12:22that you're building. So back within the
  1748. 1:12:24application, you can open up a new
  1749. 1:12:25terminal and run MPX-Y
  1750. 1:12:28add post hog wizard at latest and you
  1751. 1:12:30can also add the region. I'll expand
  1752. 1:12:32this so we can see what's happening.
  1753. 1:12:34It'll likely ask you whether you want to
  1754. 1:12:36install the post hog wizard installer.
  1755. 1:12:39And as it says, let's do 2 hours of work
  1756. 1:12:41in 8 minutes. Directory recognized.
  1757. 1:12:45Framework is here. And we want to do the
  1758. 1:12:47post hog integration. So continue.
  1759. 1:12:50It's going to ask us to authenticate
  1760. 1:12:52within our browser. That was quick. And
  1761. 1:12:55now on the left side, it'll keep telling
  1762. 1:12:57us some stuff about the agent and how it
  1763. 1:13:00works, like some helpful tips in a game
  1764. 1:13:02while it's loading the next level. Here,
  1765. 1:13:05it's not loading the next level, but
  1766. 1:13:06rather analyzing our project and setting
  1767. 1:13:09up its own tasks. First, it needs to
  1768. 1:13:12plan which event it's going to track.
  1769. 1:13:14Then, it needs to install Post Hog,
  1770. 1:13:16initialize the Post Hog client, capture
  1771. 1:13:18the events, identify users, and finally
  1772. 1:13:22create the Post Hog dashboard. This is
  1773. 1:13:24going to take a couple of minutes. So,
  1774. 1:13:26go grab some coffee and pause the video
  1775. 1:13:29and I'll be right back. And after the
  1776. 1:13:32setup is done, it'll detect all of the
  1777. 1:13:34agents we have. And it's asking us
  1778. 1:13:36whether we want to install the Post Hog
  1779. 1:13:38MCP server and plugin as well. I'll
  1780. 1:13:40proceed with doing that and I'll do it
  1781. 1:13:42for Visual Studio Code and Cloud Code.
  1782. 1:13:44And we'll give it access to everything.
  1783. 1:13:47Now, what this does is it allows you to
  1784. 1:13:49just ask your agent plain text questions
  1785. 1:13:52about some of the funnels or features
  1786. 1:13:54within your application and then it can
  1787. 1:13:56access all of the data from your Post
  1788. 1:13:59Hog dashboard and make more intelligent
  1789. 1:14:01decisions on implementing some things
  1790. 1:14:03within the codebase. For example, you
  1791. 1:14:05can ask it what are the top five errors
  1792. 1:14:07in my project this week. is going to
  1793. 1:14:09return it and then you can continue
  1794. 1:14:11speaking with your agent to fix them or
  1795. 1:14:13show me a full stack trace for the most
  1796. 1:14:15recent crash and then propose a fix. You
  1797. 1:14:18can go deeper across many different use
  1798. 1:14:20cases, but yeah, definitely go ahead and
  1799. 1:14:22install it. So now that Post Hog has
  1800. 1:14:24been initialized, I'll head back over to
  1801. 1:14:26our agent. We'll start a new codec
  1802. 1:14:29session. We can tell it to use Post Hog
  1803. 1:14:32to track some events within our current
  1804. 1:14:36application.
  1805. 1:14:38Even though we don't have a lot
  1806. 1:14:39happening right now, it should be able
  1807. 1:14:41to use the MCP and our current codebase
  1808. 1:14:44and figure out a couple of things it can
  1809. 1:14:46track already just so we can verify
  1810. 1:14:48everything is working. The agent nicely
  1811. 1:14:51understands that the current UI is still
  1812. 1:14:53in the O foundation phase. So most of
  1813. 1:14:56the approved business events don't have
  1814. 1:14:57live workflows yet. It's going to add it
  1815. 1:15:00just for initialization, user identify
  1816. 1:15:02and reset, and a typed server tracking
  1817. 1:15:05helper for the approved event names for
  1818. 1:15:07the profile job flows later on. That's
  1819. 1:15:11all that I need for now. And there we
  1820. 1:15:12go. It added a couple of events that
  1821. 1:15:14allow us to identify our users on logout
  1822. 1:15:18or when they visit the dashboard and so
  1823. 1:15:20on. So, let's quickly test it out by
  1824. 1:15:22heading back over here. I'll sign out.
  1825. 1:15:25I'll continue with GitHub one more time
  1826. 1:15:27to log in.
  1827. 1:15:29visit the homepage, the profile, the
  1828. 1:15:31find jobs, and the dashboard. And back
  1829. 1:15:34within the onboarding, you should be
  1830. 1:15:35able to see installation complete. If
  1831. 1:15:38for you, for some reason, it still says
  1832. 1:15:40that it's waiting for some events to
  1833. 1:15:42happen, what you can do is click need to
  1834. 1:15:44set up manually, choose Nex.js, and then
  1835. 1:15:48right here under the second step, you
  1836. 1:15:50can manually copy the env.local.
  1837. 1:15:54then restart the application, log out
  1838. 1:15:57and log in one more time and switch a
  1839. 1:15:59couple of pages. And at that time, it
  1840. 1:16:01should say that it auto captured
  1841. 1:16:03something new. Either way, you can click
  1842. 1:16:05skip or next to continue setting up our
  1843. 1:16:08configuration. I'll leave all of these
  1844. 1:16:10three options turned on, such as auto
  1845. 1:16:12capturing front-end interactions so that
  1846. 1:16:14we automatically track clicks, submits,
  1847. 1:16:17and more. I mean, a couple of years ago,
  1848. 1:16:19I wouldn't know what to do with that
  1849. 1:16:20data. But now that we have the AI, it
  1850. 1:16:23can make sense of it. So, you're
  1851. 1:16:25immediately getting so much more
  1852. 1:16:26valuable info. Heat maps are useful if
  1853. 1:16:29you can capture generally where people
  1854. 1:16:31are clicking, moving their mouse, and
  1855. 1:16:33scrolling to. And then also web vitals,
  1856. 1:16:36super useful info to have. While we're
  1857. 1:16:38here, you can also enable session
  1858. 1:16:40replays because sometimes it might not
  1859. 1:16:42be clear what's happening just from the
  1860. 1:16:44clicks. If a user stops scrolling and
  1861. 1:16:46just stares at one portion of the
  1862. 1:16:48screen, you want to get in their shoes
  1863. 1:16:50and see what they're seeing. That's what
  1864. 1:16:52the session replays are for. So, I'll
  1865. 1:16:54enable them, too. And finally, you can
  1866. 1:16:56choose between one of the two free
  1867. 1:16:58plans, either pay as you go, starting
  1868. 1:17:00completely for free, giving you up to 1
  1869. 1:17:02million events, 5,000 session
  1870. 1:17:05recordings, and 1 million feature flag
  1871. 1:17:07experiments, or for now, you can just
  1872. 1:17:09start completely for free. That'll bring
  1873. 1:17:11you directly into your Post Hog
  1874. 1:17:13dashboard. There's a quick start that
  1875. 1:17:15you can start off with, but also under
  1876. 1:17:17browse, you can head over into activity
  1877. 1:17:19and check out exactly what is happening
  1878. 1:17:21within your application. You can see
  1879. 1:17:23that we're trying to identify some
  1880. 1:17:25users. Those users are clicking the form
  1881. 1:17:28and moving across our application. This
  1882. 1:17:31is just the start. We've started
  1883. 1:17:33collecting the data. But later on, as we
  1884. 1:17:35implement some actual features of our
  1885. 1:17:37app, we'll start making sense of the
  1886. 1:17:39data. And the biggest help for that is
  1887. 1:17:41going to be Post Hog AI. So stay with
  1888. 1:17:44me. Let's implement a couple features
  1889. 1:17:45together and then we'll come back to
  1890. 1:17:47Posthog to show you how to truly
  1891. 1:17:49understand what your users are actually
  1892. 1:17:51using your app for and how you can
  1893. 1:17:54improve it based off of the data that
  1894. 1:17:56we're now tracking.
  1895. 1:17:58Great work. Once that is done, you can
  1896. 1:18:00get back to one of your agent chats and
  1897. 1:18:03tell it that I've initialized PostHog
  1898. 1:18:05using the Post Hog wizard. So review it
  1899. 1:18:09by using the review skill
  1900. 1:18:12and remember
  1901. 1:18:14save what we did. That way we'll update
  1902. 1:18:17our context and we'll be able to move
  1903. 1:18:19directly to the next feature. And this
  1904. 1:18:22is also a cool little tip that shows you
  1905. 1:18:24that you can use multiple skills in the
  1906. 1:18:26same prompt. This took less than a
  1907. 1:18:28minute. It provided us with a review.
  1908. 1:18:31Everything passed and it saved it to
  1909. 1:18:33memory. So in the next lesson, let's
  1910. 1:18:35focus on maybe the most important part
  1911. 1:18:37of the app, and that is the database
  1912. 1:18:39schema.
  1913. 1:18:42The database schema is the foundation
  1914. 1:18:45everything else sits on top of. If you
  1915. 1:18:47get this wrong, you'll be tracing bugs
  1916. 1:18:49all the way to bad column decisions you
  1917. 1:18:52made at this point. So this is exactly
  1918. 1:18:54the moment to use our architect skill
  1919. 1:18:56before touching anything. So go ahead
  1920. 1:18:58and open up your agent. And in this
  1921. 1:19:00case, I actually want to switch over to
  1922. 1:19:02cloud code to show you that these
  1923. 1:19:04context files and the workflow that I'm
  1924. 1:19:07teaching you is completely agent
  1925. 1:19:09agnostic. I'll use something like sonnet
  1926. 1:19:11on a high effort within it. You also
  1927. 1:19:14want to make sure that you have access
  1928. 1:19:15to the skills. So if you run something
  1929. 1:19:17like remember, it needs to be there. If
  1930. 1:19:19it's not, you can open up the terminal
  1931. 1:19:22in a new window and run MPX skills add
  1932. 1:19:25latest add JavaScript mastery pro
  1933. 1:19:28skills. Add all five skills and make
  1934. 1:19:31sure to add them for cloud code. Once
  1935. 1:19:33that is done, you can run remember like
  1936. 1:19:36this and say restore to restore the
  1937. 1:19:38previous session. It'll automatically
  1938. 1:19:41figure out what we want to do. Reading
  1939. 1:19:43the memory file and project context to
  1940. 1:19:45restore the session state.
  1941. 1:19:47Perfect. Post hog got implemented wired
  1942. 1:19:50up. And now we have to do the database
  1943. 1:19:52schema. Now we can use the architect
  1944. 1:19:55skill to tell it to architect the
  1945. 1:19:58feature number four. It'll read all the
  1946. 1:20:02relevant context files before it talks
  1947. 1:20:04to us and produce a full implementation
  1948. 1:20:07plan for the database schema, tables,
  1949. 1:20:10columns, types, relationships,
  1950. 1:20:12absolutely everything. And it'll give us
  1951. 1:20:14that plan so that we can actually review
  1952. 1:20:17it and tell it whether it's a go or a
  1953. 1:20:19nogo. And pretty quickly, actually in 30
  1954. 1:20:22seconds, the agent came back to me and
  1955. 1:20:25it looks like it wants to have a
  1956. 1:20:26conversation. First, it's making sure
  1957. 1:20:28that we're speaking the same language.
  1958. 1:20:31Rowle security policy. I understand this
  1959. 1:20:33as posgress RLS rule attached to the
  1960. 1:20:36table that automatically filters every
  1961. 1:20:38query to only the current user's rows
  1962. 1:20:41using o ID. Users can never read or
  1963. 1:20:44write another user's data even if they
  1964. 1:20:47craft a direct API call. Is that right?
  1965. 1:20:50Yeah, that is right. Authenticated
  1966. 1:20:52access only. Yep, that is pretty clear.
  1967. 1:20:55And then schema creation. Yep, this is
  1968. 1:20:57exactly what we want to do against the
  1969. 1:21:00ins posgress database not generating
  1970. 1:21:02migration files. I think the reason why
  1971. 1:21:04it's asking me all of these decisions is
  1972. 1:21:06because I had not the plan mode, but I
  1973. 1:21:09think I had the thinking turned on. It
  1974. 1:21:12might not even be necessary. So for now,
  1975. 1:21:13I'll simply tell it to proceed with
  1976. 1:21:16suggested decisions and then it'll get
  1977. 1:21:19the implementation plan and start
  1978. 1:21:21working on it. There we go. This is a
  1979. 1:21:23pretty hefty plan, 12 steps. Confirm and
  1980. 1:21:26I'll start building. And I'm super glad
  1981. 1:21:28it asked me to confirm because we
  1982. 1:21:31installed the Ins MCP for Codeex. But to
  1983. 1:21:34make it truly agnostic, you also have to
  1984. 1:21:36install it for the other agent you're
  1985. 1:21:38using. So back within InsForge, you can
  1986. 1:21:40click install. Go ahead and choose cloud
  1987. 1:21:42code which is the first version and you
  1988. 1:21:44can do it either through CLI or MCP.
  1989. 1:21:47Either way works. Let's do CLI this
  1990. 1:21:49time. I'll just tell it I confirm. But
  1991. 1:21:52before do the following
  1992. 1:21:56and then paste what we have. So that way
  1993. 1:21:58it'll get all the information about ins
  1994. 1:22:01and it'll know how to set up our Ins
  1995. 1:22:03database properly. The ins cli is now
  1996. 1:22:06installed and linked and now it'll load
  1997. 1:22:08the ins skills before proceeding. That's
  1998. 1:22:10exactly what I meant when I said that
  1999. 1:22:12Ins was built agentic from the ground
  2000. 1:22:15up. So agents can work with it so
  2001. 1:22:18naturally and build entire backend
  2002. 1:22:20systems with o databases and more. There
  2003. 1:22:23we go. Clean slate, no tables, no
  2004. 1:22:26migrations. Let's proceed with the full
  2005. 1:22:28implementation. I'm assuming this one
  2006. 1:22:30will take a bit longer. So pause the
  2007. 1:22:33video and I'll be right back. And after
  2008. 1:22:36doing some thinking and implementing and
  2009. 1:22:38then thinking and reading and writing it
  2010. 1:22:42finalized the feature updated the
  2011. 1:22:44progress tracker in the UI registry. So
  2012. 1:22:46phase one with features from 0 to 4 for
  2013. 1:22:50being the database schema are now
  2014. 1:22:52completed. It updated the progress
  2015. 1:22:54tracker and it applied the migrations.
  2016. 1:22:57The backend through ins is now built.
  2017. 1:23:01Four tables applied via CLI migrations.
  2018. 1:23:04There is tables for profiles, agent
  2019. 1:23:06runs, jobs, and agent logs. All of which
  2020. 1:23:09are going to start making sense very
  2021. 1:23:10soon as soon as we start adding the
  2022. 1:23:12features. Only the authenticated users
  2023. 1:23:14can perform operations and the rest of
  2024. 1:23:16the stuff has been completed. Now, if
  2025. 1:23:18you head back over to InsForge,
  2026. 1:23:21specifically under database, you'll see
  2027. 1:23:23four different tables, which means that
  2028. 1:23:25all of them have been successfully
  2029. 1:23:27created. The agent didn't write a
  2030. 1:23:29migration file or configure a connection
  2031. 1:23:32string. It created all four tables
  2032. 1:23:35directly through the INSForge MCP. And
  2033. 1:23:38that's what agent native infrastructure
  2034. 1:23:40looks like in practice. Agent logs is
  2035. 1:23:43going to be the agents paper trail. Like
  2036. 1:23:46every step that it takes during a run
  2037. 1:23:48will get written right here with info,
  2038. 1:23:50success, warnings, errors. So if
  2039. 1:23:52something goes wrong during a job
  2040. 1:23:54search, this is where you find out
  2041. 1:23:56exactly what happened and why. But
  2042. 1:23:59again, that's going to start making more
  2043. 1:24:00sense soon. agent runs. Every LinkedIn
  2044. 1:24:04search the agent performs gets logged
  2045. 1:24:06right here. Job title, searched,
  2046. 1:24:08location, how many jobs were found, when
  2047. 1:24:11it started and completed. This is how
  2048. 1:24:13the dashboard knows what searches
  2049. 1:24:15happened. Finally, the jobs, every job
  2050. 1:24:18discovered or imported, match score,
  2051. 1:24:21cover letter, specifically made for each
  2052. 1:24:24user. That's the entire job hunting
  2053. 1:24:26history in one table. And then there are
  2054. 1:24:29the profiles. Every user's career data
  2055. 1:24:32will live right here. Name, skills,
  2056. 1:24:34experience, resume, LinkedIn contact ID.
  2057. 1:24:38This is what the agent reads when it
  2058. 1:24:40scores a job against you. And if you
  2059. 1:24:42open up storage here, you'll see just
  2060. 1:24:45empty résumés. Every ré operation in
  2061. 1:24:48this app will read and write to this
  2062. 1:24:51bucket. And since we can already see the
  2063. 1:24:53four database tables and the storage
  2064. 1:24:55bucket, that tells us that everything
  2065. 1:24:57has been implemented properly. So you
  2066. 1:25:00can run forward sl remember
  2067. 1:25:03to use the remember skill and say save.
  2068. 1:25:06It'll figure out that we wanted to use
  2069. 1:25:08the remember skill and update the
  2070. 1:25:11memory. So if you check it out, you'll
  2071. 1:25:14see that the phase one foundation is
  2072. 1:25:15100% complete, features one to four,
  2073. 1:25:18live ins backend has all four tables, 20
  2074. 1:25:21RLS policies, two triggers, and one
  2075. 1:25:24private storage bucket types exists.
  2076. 1:25:28No app level code touches the DB yet.
  2077. 1:25:31That's going to start soon in phase two.
  2078. 1:25:33And it says that these open questions
  2079. 1:25:34from previous sessions haven't been
  2080. 1:25:36resolved. I didn't consider them that
  2081. 1:25:37important, but it's good that it's
  2082. 1:25:39keeping track. So from the next lesson
  2083. 1:25:41onward, we'll start focusing on the
  2084. 1:25:43profile page UI. And considering that
  2085. 1:25:46the phase one is now done, I think it's
  2086. 1:25:48due time to actually push this code over
  2087. 1:25:50to GitHub. So head over to
  2088. 1:25:53github.com/new
  2089. 1:25:55and create a new repo which you can call
  2090. 1:25:58job pilot or whichever name you prefer.
  2091. 1:26:01Then just create it. And you can push
  2092. 1:26:04over to it
  2093. 1:26:06by opening the terminal. And we can do
  2094. 1:26:09this manually. And even though you don't
  2095. 1:26:10have to do this manually, you can just
  2096. 1:26:12copy and paste all that into your agent.
  2097. 1:26:14Old habits die hard. So I'll say get
  2098. 1:26:16init
  2099. 1:26:18add dot get commit-m
  2100. 1:26:21implement everything up to phase one get
  2101. 1:26:26branch
  2102. 1:26:28dash m main get remote add origin and
  2103. 1:26:33finally get push u origin main.
  2104. 1:26:38Perfect.
  2105. 1:26:39Now, if you go back and reload, you'll
  2106. 1:26:42be able to see your code appear right
  2107. 1:26:43here. And I always like to clean it up a
  2108. 1:26:46bit. So, you can hide the releases,
  2109. 1:26:47deployments, and packages. Give it some
  2110. 1:26:49topics such as agentic workflows because
  2111. 1:26:52that's what we're working on right here.
  2112. 1:26:55Later on, we'll be able to add the
  2113. 1:26:57deployed version or deployed link of our
  2114. 1:26:59application. And for now, we can give a
  2115. 1:27:02quick description of the app. I believe
  2116. 1:27:04our agent or the wrote that for us right
  2117. 1:27:07here in the root of the application
  2118. 1:27:11AI powered job search assistance for
  2119. 1:27:14matching roles, tailored resumes and
  2120. 1:27:16faster applications. You never know
  2121. 1:27:18who's looking at your profile and it's
  2122. 1:27:20always good to tidy it up a bit and to
  2123. 1:27:22stay consistent. So now that the latest
  2124. 1:27:25changes have been pushed, we are ready
  2125. 1:27:27to start focusing on phase two of the
  2126. 1:27:29application. Great job coming this far.
  2127. 1:27:35And let's dive right into the phase two.
  2128. 1:27:38If you head over into the build plan,
  2129. 1:27:40you'll see that our database schema is
  2130. 1:27:42done and we are ready to begin phase
  2131. 1:27:44two, which is the profile page. Starting
  2132. 1:27:46with the UI, you always want to separate
  2133. 1:27:49the concerns. Do the UI first and then
  2134. 1:27:52the logic second. So in this case, we'll
  2135. 1:27:54first build a complete profile page with
  2136. 1:27:56UI with mock data without save logic.
  2137. 1:28:00Within the UI, the profile will need the
  2138. 1:28:02attention banner at the top, completion
  2139. 1:28:04percentage ring, missing field tags
  2140. 1:28:06highlighted, and so on, connected
  2141. 1:28:08account section, resume section, profile
  2142. 1:28:11information form with clearly labeled
  2143. 1:28:13sections, and then save profile button
  2144. 1:28:15at the bottom. So, let's simply open up
  2145. 1:28:17a new window. I'll head over to clot
  2146. 1:28:20code, and I'll tell it to remember, but
  2147. 1:28:23specifically restore what we remembered
  2148. 1:28:25before. It'll read the memory file and
  2149. 1:28:28restore our session.
  2150. 1:28:30There we go. Now it knows exactly what
  2151. 1:28:32we focused on.
  2152. 1:28:34So the next thing we have to do is
  2153. 1:28:35simply tell it to build a profile UI.
  2154. 1:28:38And just so it stops asking these open
  2155. 1:28:39questions, I'll say you can close the
  2156. 1:28:43open questions. And then we can tell it
  2157. 1:28:45to build the complete profile exactly as
  2158. 1:28:49shown in the profile.png.
  2159. 1:28:53That's going to be within context
  2160. 1:28:55designs profile. And run it. Let's give
  2161. 1:28:58it some time to implement it and then
  2162. 1:29:00we'll go over it together. After getting
  2163. 1:29:02the full context, it's going to start
  2164. 1:29:03building the profile page components.
  2165. 1:29:05It'll start by writing some to-dos for
  2166. 1:29:07itself. Looking at the design, it needs
  2167. 1:29:09to build these components, the profile
  2168. 1:29:11attention banner, the connected
  2169. 1:29:13accounts, resume section, profile form,
  2170. 1:29:15and then update the page to compose
  2171. 1:29:17everything. Then it formed that into a
  2172. 1:29:19list of to-dos, and it'll proceed
  2173. 1:29:22working on them one by one. And after a
  2174. 1:29:24couple of minutes after it implemented
  2175. 1:29:26it, it also updated both context files
  2176. 1:29:29in parallel. The progress tracker where
  2177. 1:29:32it now says that it implemented the
  2178. 1:29:34profile page UI as well as it marked it
  2179. 1:29:37as complete right here. It also modified
  2180. 1:29:40the UI registry to add the components
  2181. 1:29:42that now it knows how to build and it
  2182. 1:29:44gave us a quick rundown of everything
  2183. 1:29:46that was implemented. So what do you say
  2184. 1:29:48that we go ahead and check it out? Back
  2185. 1:29:49within the application, if you head over
  2186. 1:29:51to the profile page, you should be able
  2187. 1:29:53to see something that looks like this.
  2188. 1:29:55Oh, and before, as I was building the
  2189. 1:29:57application, I first experienced an
  2190. 1:29:59issue with the redirect to the profile
  2191. 1:30:01page. This specifically happens when you
  2192. 1:30:03sign out and then try to sign back in.
  2193. 1:30:06If that happens to you, you can very
  2194. 1:30:07easily fix it by telling the agent
  2195. 1:30:10what's happening. Run the review, fix
  2196. 1:30:12the homepage button, and make sure that
  2197. 1:30:14the profile page is accessible after
  2198. 1:30:16login. So take a look at how well this
  2199. 1:30:18matches the design of our application.
  2200. 1:30:20Even without comparing it to the
  2201. 1:30:22original, it's looking amazing. But if
  2202. 1:30:24there's something that is off, you can
  2203. 1:30:26simply take a screenshot from here and
  2204. 1:30:28also take a screenshot from the final
  2205. 1:30:30design and tell it to fix it. So profile
  2206. 1:30:33is 70% done. We need to insert some more
  2207. 1:30:36information for better matches. We'll
  2208. 1:30:38soon need to connect our LinkedIn
  2209. 1:30:40account. Then here we'll be able to
  2210. 1:30:42upload our resume, enter our profile
  2211. 1:30:44information, and with all of that info,
  2212. 1:30:47soon enough, this application will
  2213. 1:30:49simplify our job application process
  2214. 1:30:51significantly. In this case, it already
  2215. 1:30:54updated the UI registry. But in case you
  2216. 1:30:58want to be sure, you can just run
  2217. 1:30:59imprint manually, and then it'll check
  2218. 1:31:01whether it added some new components
  2219. 1:31:03that we might want to reuse later on. It
  2220. 1:31:05says this was already done during the
  2221. 1:31:07build session, so that's amazing. With
  2222. 1:31:09that in mind, you can simply run
  2223. 1:31:10remember save to save what we did in
  2224. 1:31:13this session. That'll save it to our
  2225. 1:31:15memory, which means that immediately in
  2226. 1:31:17the next lesson, we can start working on
  2227. 1:31:19the profile save logic. So, let's do
  2228. 1:31:23that next.
  2229. 1:31:25Now that the UI is done, let's wire it
  2230. 1:31:28up. The profile form looks good, but it
  2231. 1:31:31doesn't do anything yet. No saves, no
  2232. 1:31:34database rights, and no file uploads. So
  2233. 1:31:37let's change that. First we want to open
  2234. 1:31:40up the chat and we want to restore the
  2235. 1:31:43latest session or in this case since
  2236. 1:31:45we're working just on the profile the UI
  2237. 1:31:47first and now the logic we can keep it
  2238. 1:31:49within the same page. What we want to do
  2239. 1:31:51in this lesson has some real logic
  2240. 1:31:53behind it through server actions file
  2241. 1:31:56uploads through ins for storage
  2242. 1:31:58completion tracking and path
  2243. 1:32:00revalidation. So before the agent
  2244. 1:32:02touches any of it we need to plan it. So
  2245. 1:32:05switch over to the plan mode. You can do
  2246. 1:32:08that right here from edit to plan mode
  2247. 1:32:11and then use the architect skill that we
  2248. 1:32:15have and tell it to architect the
  2249. 1:32:17feature 06
  2250. 1:32:20and press enter. Feature 06 is obviously
  2251. 1:32:23coming from the build plan. So if you
  2252. 1:32:25take a look at right here, you'll see
  2253. 1:32:27that we need to wire up the profile form
  2254. 1:32:30to insb
  2255. 1:32:31through server actions. Resume uploaded
  2256. 1:32:34to ins storage. Resume PDF saved to
  2257. 1:32:37profiles is complete set to true.
  2258. 1:32:40Completion percentage and missing fields
  2259. 1:32:42calculated form prefilleds with existing
  2260. 1:32:44data and revalidate on save. So let's
  2261. 1:32:49see how well it's going to plan the
  2262. 1:32:50feature and then we can actually start
  2263. 1:32:52executing it. and it thought through all
  2264. 1:32:55the key decisions and wrote the plan.
  2265. 1:32:57The plan is thorough and aligns with the
  2266. 1:33:00project architecture. So, it's just
  2267. 1:33:01going to verify in sport storage SDK
  2268. 1:33:04types and any existing usage and then it
  2269. 1:33:07has everything it needs. It created its
  2270. 1:33:09plan right here under feature 06 profile
  2271. 1:33:12save logic. You can even review it. This
  2272. 1:33:15is the full plan and we can open it and
  2273. 1:33:18preview it in markdown. So, think of
  2274. 1:33:20this as a more detailed version of our
  2275. 1:33:23build plan right here. Using the
  2276. 1:33:25architect skill in plan mode makes it
  2277. 1:33:27super powerful and I think it started
  2278. 1:33:29building it out on its own. So, after
  2279. 1:33:31you review the plan, you can switch back
  2280. 1:33:34to the editing mode. Again, sonnet with
  2281. 1:33:37medium or high thinking is going to be
  2282. 1:33:38enough because it doesn't have to do the
  2283. 1:33:40thinking. It has to just write code
  2284. 1:33:43which has become a commodity nowadays.
  2285. 1:33:45It's all about the thinking. So now we
  2286. 1:33:47can simply say to implement the feature
  2287. 1:33:5006. So picking exactly where we left
  2288. 1:33:52off, it'll start implementing the full
  2289. 1:33:55logic. Couple of minutes after the
  2290. 1:33:57feature 06 is now complete. And here's
  2291. 1:34:00what was built. It added the actions
  2292. 1:34:02file. Under actions, it added a
  2293. 1:34:04profile.ts action file with two actions.
  2294. 1:34:08Save profile and upload resume. And then
  2295. 1:34:11under profile util it added a calculate
  2296. 1:34:14completion shared between page and
  2297. 1:34:16server action. It also modified five
  2298. 1:34:19additional files. So now we want to test
  2299. 1:34:21the form by saving some real info and
  2300. 1:34:23then reload the page to check whether
  2301. 1:34:25it's working properly. Make sure your
  2302. 1:34:27application is running on localhost
  2303. 1:34:293000. You can see that now we're at 0%.
  2304. 1:34:34And we can start filling in some info.
  2305. 1:34:36I'm Adrian at JSMy. For some reason, I
  2306. 1:34:40cannot enter my email most likely
  2307. 1:34:42because it should be picked from my
  2308. 1:34:44account, but okay, we're going to look
  2309. 1:34:45into this later. Here, you can enter the
  2310. 1:34:48phone number. For now, I'll enter some
  2311. 1:34:50random numbers. Location, let's go with
  2312. 1:34:53New York, maybe one day. Then you can
  2313. 1:34:57enter your LinkedIn URL as well as your
  2314. 1:34:59GitHub one. For work, you can choose
  2315. 1:35:02your work authorization, some
  2316. 1:35:03professional info, experience level,
  2317. 1:35:05years of experience, technologies you're
  2318. 1:35:08proficient in. Notice how nicely it adds
  2319. 1:35:11these chips as you type, industries
  2320. 1:35:13worked in, and then you can add work
  2321. 1:35:15experience. I mean, this is a pretty
  2322. 1:35:17hefty form and it would take a lot of
  2323. 1:35:19time to design and develop it, but here
  2324. 1:35:22it just feels so natural. We can do JS
  2325. 1:35:25mastery. Of course, here you would
  2326. 1:35:28actually be entering the data for
  2327. 1:35:29yourself. I don't remember when we
  2328. 1:35:31started it, but it's going to be about
  2329. 1:35:3210 years now. Oh, and there's no end
  2330. 1:35:35date in sight. Key responsibilities,
  2331. 1:35:37I guess, everything. Of course, you can
  2332. 1:35:40be a bit more detailed, so you give your
  2333. 1:35:41AI a bit more info to work with. You can
  2334. 1:35:43go ahead and fill in your education,
  2335. 1:35:46which year you graduated, institution
  2336. 1:35:48name, and so on. And which position are
  2337. 1:35:50you seeking, whether you want it to be
  2338. 1:35:52remote or on site, and then an optional
  2339. 1:35:55salary expectation.
  2340. 1:35:57Cover letter, we can make it concise,
  2341. 1:36:00and prefer locations if you have any. Go
  2342. 1:36:03ahead and save the profile.
  2343. 1:36:05It says profile saved successfully,
  2344. 1:36:07which is great. So now if you reload,
  2345. 1:36:10oops, it looks like it didn't save what
  2346. 1:36:13we just wrote. I guess I should have
  2347. 1:36:14tested it by filling it just a couple of
  2348. 1:36:16spots and not everything. But that's
  2349. 1:36:18fine because this is the perfect place
  2350. 1:36:20to use the review skill. I'll simply
  2351. 1:36:22turn on the review and tell it form
  2352. 1:36:26saving doesn't
  2353. 1:36:28work. And now it'll review the type of
  2354. 1:36:30bug we're experiencing, figure out
  2355. 1:36:32exactly where it's coming from, and
  2356. 1:36:35figure out a way to fix it. So, let's
  2357. 1:36:37give it a minute. Very quickly, it came
  2358. 1:36:39back with a full review. Developer
  2359. 1:36:41reports form saving doesn't work. It
  2360. 1:36:43figured out there's a couple of
  2361. 1:36:44mismatches.
  2362. 1:36:46Server actions are called directly from
  2363. 1:36:48client components. They require being
  2364. 1:36:50imported and called as functions, which
  2365. 1:36:52is what the code does. So, this part
  2366. 1:36:54should work. Server actions inside start
  2367. 1:36:57transition in XJS must be called
  2368. 1:36:59differently. Okay, I'm pretty sure this
  2369. 1:37:01is going to be the fix. So, it posed
  2370. 1:37:03some other issues that it found. a
  2371. 1:37:05couple of critical ones, a couple of
  2372. 1:37:06important ones, and then a minor one.
  2373. 1:37:08Resolve issues one, two, and three
  2374. 1:37:10before moving on. So, I'll simply say
  2375. 1:37:13resolve
  2376. 1:37:16and then we'll retest it. And very
  2377. 1:37:18quickly, it applied all three fixes. So,
  2378. 1:37:21now if I try changing my name right here
  2379. 1:37:24to something like Adrian and then click
  2380. 1:37:26save profile, it's going to say save
  2381. 1:37:29profile successfully. the name is going
  2382. 1:37:31to remain there, but then when I reload,
  2383. 1:37:33it's actually gone. So, it still didn't
  2384. 1:37:36fix it. I'll add review one more time
  2385. 1:37:40and tell it that even though we get
  2386. 1:37:44profile saved successfully after
  2387. 1:37:46clicking the button, after reloading,
  2388. 1:37:50the data is still
  2389. 1:37:53not being saved. Let's give it a second
  2390. 1:37:55chance. This is the first time it
  2391. 1:37:58actually didn't fix it right after the
  2392. 1:37:59first one. And about 2 minutes after
  2393. 1:38:01it's back with another solution. The
  2394. 1:38:04proxy.ts file exists with the correct
  2395. 1:38:07route protection logic, but it is not
  2396. 1:38:09wired as a Nex.js middleware. Next
  2397. 1:38:12middleware must be in a file named
  2398. 1:38:14exactly middleware.ts
  2399. 1:38:16at the project root. Proxy is therefore
  2400. 1:38:20never executed. But I'm not sure whether
  2401. 1:38:22this is correct because if you take a
  2402. 1:38:24look at the latest page of the docs
  2403. 1:38:26directly in Nex.js, it's now called a
  2404. 1:38:28proxy. Starting with NexJS16, middleware
  2405. 1:38:31is now called a proxy. The functionality
  2406. 1:38:34remains the same. So the way it works,
  2407. 1:38:36you create a proxy file instead of a
  2408. 1:38:38middleware file. And if you go ahead and
  2409. 1:38:40search for middleware, rewrites you to
  2410. 1:38:43proxy. So in this case, I think the AI
  2411. 1:38:45made a mistake. So what we can do next
  2412. 1:38:47is tell it once again to review its
  2413. 1:38:49implementation by checking the
  2414. 1:38:51documentation page that we found and
  2415. 1:38:53then verifying his claim about the issue
  2416. 1:38:56number one that it specified. Sometimes
  2417. 1:38:59you still have to take the wheel and
  2418. 1:39:01immediately in a matter of seconds it
  2419. 1:39:04retracted what it thought was wrong
  2420. 1:39:06about the code. So third times the
  2421. 1:39:08charm. Let's see if it can actually fix
  2422. 1:39:10it now or will I have to teach you some
  2423. 1:39:12other way to fix these types of issues
  2424. 1:39:14where AI really loses its mind. Either
  2425. 1:39:17way works for me and that's because
  2426. 1:39:19these videos are unscripted as it's the
  2427. 1:39:21only way you can really learn a lot from
  2428. 1:39:23them. Okay, so now it came back with two
  2429. 1:39:26fixes. backfill the missing profile row.
  2430. 1:39:29So, it's going to insert some of the
  2431. 1:39:31info that was missing from before and
  2432. 1:39:33then detect the zero rows updated in
  2433. 1:39:35save profile. Okay, sure. That's a very
  2434. 1:39:38simple fix. So, let's see whether that's
  2435. 1:39:40going to make a big change. Very
  2436. 1:39:42quickly, both fixes got applied. So, if
  2437. 1:39:45we head back over here, you'll see that
  2438. 1:39:48now our email is getting prefilled from
  2439. 1:39:50our authentication info, which is great.
  2440. 1:39:52And if I enter my name and click save
  2441. 1:39:55profile, it actually jumped up to 22%
  2442. 1:39:58and my name is filled in. And it's there
  2443. 1:40:01even after I reload. So, let me go ahead
  2444. 1:40:03and fill out some more fields. For
  2445. 1:40:04example, the full personal info part and
  2446. 1:40:07click save. It's still here. And we're
  2447. 1:40:09now at 44%. So, just so you don't have
  2448. 1:40:12to watch me refill everything I've done
  2449. 1:40:14before, I'll go ahead and pause the
  2450. 1:40:16recording and then you can do the same
  2451. 1:40:17thing on your end and we can continue
  2452. 1:40:19then. And finally, we are at 100.
  2453. 1:40:22Potentially, after we upload the resume,
  2454. 1:40:24it's going to say that the profile
  2455. 1:40:26doesn't need any more attention. But
  2456. 1:40:27right now, it says 100%. So, it is a bit
  2457. 1:40:30misleading. I'll simply take a
  2458. 1:40:32screenshot, go back to the code, and
  2459. 1:40:34hold shift to be able to drag and drop
  2460. 1:40:37files into it. And then I'll tell it
  2461. 1:40:40when at 100%. It shouldn't say profile
  2462. 1:40:46needs attention. Fix it. This is just a
  2463. 1:40:49very simple corrective fix. There we go.
  2464. 1:40:52It is done. So now when you're at 100,
  2465. 1:40:54that banner will simply disappear. So
  2466. 1:40:57let's update the progress tracker and
  2467. 1:41:01run remember
  2468. 1:41:03save to save all of it to the memory.
  2469. 1:41:06After that is done, the profile now
  2470. 1:41:08saves. And if I'm not mistaken, the résé
  2471. 1:41:11form should allow us to upload them
  2472. 1:41:13already. So I'll simply Google for a
  2473. 1:41:16fake ré.pdf. PDF and I'll download it as
  2474. 1:41:19a PDF and then you can simply drag and
  2475. 1:41:22drop it. Notice how nice this looks
  2476. 1:41:24like. It'll upload it.
  2477. 1:41:27Resume uploaded successfully. And if you
  2478. 1:41:29reload, we'll also be able to view the
  2479. 1:41:31current resume if we had the permissions
  2480. 1:41:33to do so. That's a little fix that we
  2481. 1:41:35can make. When we click on that button,
  2482. 1:41:37we can't actually see it. So, I'll copy
  2483. 1:41:40this error and say review. When clicking
  2484. 1:41:45on view current resume, it leads to and
  2485. 1:41:50then you can paste the URL that it leads
  2486. 1:41:52to and then say what it shows. It'll
  2487. 1:41:55analyze it, figure out what the issue is
  2488. 1:41:58and allow us to preview the resume that
  2489. 1:42:00we just uploaded. The diagnosis is
  2490. 1:42:02thankfully very straightforward as it
  2491. 1:42:04says right here. The issue is that the
  2492. 1:42:06get public URL was used on a private
  2493. 1:42:09bucket which was architecturally wrong.
  2494. 1:42:12as the build plan states to create
  2495. 1:42:13résumés storage bucket with
  2496. 1:42:15authenticated access only and feature 04
  2497. 1:42:19explicitly created it as private. So we
  2498. 1:42:21should instead use the download via
  2499. 1:42:23server route handler instead. So let's
  2500. 1:42:25just say resolve. There we go. The
  2501. 1:42:28changes got applied. So now if we view
  2502. 1:42:30the current resume, it'll simply
  2503. 1:42:32downloaded and displayed in the browser.
  2504. 1:42:34Wonderful. Profile saved, résumé
  2505. 1:42:37uploaded, URL written back to the
  2506. 1:42:40database. And there was zero
  2507. 1:42:42infrastructure that we had to manage.
  2508. 1:42:44Ins handled the storage, the database,
  2509. 1:42:47write, the RLS policies, and we just
  2510. 1:42:50told the app what to save. Most back-end
  2511. 1:42:52platforms were built for humans clicking
  2512. 1:42:55through dashboards. Ins was built from
  2513. 1:42:58the ground up for the agents. The MCP
  2514. 1:43:01gives codecs or cloud code direct access
  2515. 1:43:04to your schema, migrations, o and
  2516. 1:43:07storage, all without leaving the
  2517. 1:43:09session. They just relaunched as the
  2518. 1:43:11open-source AWS for coding agents and
  2519. 1:43:15shipped backend branching, git style
  2520. 1:43:17branching for your entire backend. So
  2521. 1:43:19your agent can experiment safely without
  2522. 1:43:22touching production. It's open- source Y
  2523. 1:43:25Combinatorbacked and again I'll leave
  2524. 1:43:28the link down in the description to
  2525. 1:43:29check it out. But yeah, this is great.
  2526. 1:43:31With that, the full profile page is
  2527. 1:43:34done. So in the next step we have to
  2528. 1:43:36make AI extract the additional profile
  2529. 1:43:38data from the resume. So let's do that
  2530. 1:43:41next.
  2531. 1:43:44The profile form now works. So let's
  2532. 1:43:47make it smart. Right now users have to
  2533. 1:43:50fill in all of this information
  2534. 1:43:52manually. And let's be honest nowadays
  2535. 1:43:54people have troubles filling in just
  2536. 1:43:56their first, last name, and maybe the
  2537. 1:43:58age, let alone this many fields. So
  2538. 1:44:01instead, with the feature that we're
  2539. 1:44:03going to implement right now, they will
  2540. 1:44:05upload their resume, hit one button, and
  2541. 1:44:08an AI will read that PDF and fill every
  2542. 1:44:11field that it can automatically find.
  2543. 1:44:13Name, skills, work experience,
  2544. 1:44:16education, all populated within a couple
  2545. 1:44:18of seconds. The user just has to review
  2546. 1:44:20it, edit it if needed, and save it. So,
  2547. 1:44:24let's dive right in. Let's open up one
  2548. 1:44:27of our chats that we had right before.
  2549. 1:44:30start a new one. And we're going to use
  2550. 1:44:33the remember restore skill to load up
  2551. 1:44:36the memory. Now, for this feature, I
  2552. 1:44:39chose gp40 to extract all of this info,
  2553. 1:44:42which means that we'll need an API key.
  2554. 1:44:44So, head over to platform.openai.com
  2555. 1:44:48and sign in. Once you're in, you can
  2556. 1:44:50create your API key, call it something
  2557. 1:44:53like job pilot,
  2558. 1:44:56and create it. Then, copy it. And back
  2559. 1:44:59within our application under env.local,
  2560. 1:45:03you can write open AAI
  2561. 1:45:05API_key
  2562. 1:45:07and paste the key you just copied. Make
  2563. 1:45:09sure that you have at least some kind of
  2564. 1:45:10a subscription over an open AI or
  2565. 1:45:13whichever other AI API key you decide to
  2566. 1:45:16use. I'm sure you'll find one somewhere
  2567. 1:45:18because nowadays it's always useful to
  2568. 1:45:20have your AI API key on top of the
  2569. 1:45:23agents that we chat with such as chat
  2570. 1:45:25GPT or that we code with such as Claw
  2571. 1:45:27Code. Again, you can use any model from
  2572. 1:45:29Enthropic, Gemini, or whatever you're
  2573. 1:45:31comfortable with. It's the same pattern.
  2574. 1:45:33Just grab the key. Once you have it,
  2575. 1:45:35let's go back to our chat and tell it
  2576. 1:45:37that the OpenAI API key is already
  2577. 1:45:40inv.local.
  2578. 1:45:42And we simply want it to architect the
  2579. 1:45:45feature 7. You can see that it even has
  2580. 1:45:47that in mind. It says run architect for
  2581. 1:45:49feature 7 AI profile extraction from
  2582. 1:45:52resume flow button download PDF from ins
  2583. 1:45:56then PDF parse extracts text then GPT40
  2584. 1:46:00returns structure JSON form fields
  2585. 1:46:02populate and user reviews and saves it
  2586. 1:46:04manually. So this is exactly correct.
  2587. 1:46:08I'll say correct. Open AAI is there.
  2588. 1:46:11Architect feature 07. Again, you can run
  2589. 1:46:14this in plan mode so that it gives you
  2590. 1:46:16back the plan, but it doesn't touch the
  2591. 1:46:18codebase yet until you verify how it
  2592. 1:46:20looks like. So that once it actually
  2593. 1:46:22comes back with a plan, we can say
  2594. 1:46:24implement feature07
  2595. 1:46:26and we can turn it to edit automatically
  2596. 1:46:29mode. But again, let's see what it comes
  2597. 1:46:32back with. And it came back with a
  2598. 1:46:34complete plan. I thought switching it
  2599. 1:46:36from plan to edit mode midprompt, it's
  2600. 1:46:39not going to switch it immediately, but
  2601. 1:46:41it looks like it did. So, it already
  2602. 1:46:42started implementing that plan. If
  2603. 1:46:44that's the case, that's okay with me.
  2604. 1:46:46I'll just occasionally give it
  2605. 1:46:47additional permissions. If it didn't
  2606. 1:46:49automatically start working for you on
  2607. 1:46:51the feature, instead, if it gave you a
  2608. 1:46:53plan, then you can simply tell it to
  2609. 1:46:55implement feature 07. And then it'll
  2610. 1:46:57proceed going through the steps. And in
  2611. 1:46:59about 2 minutes, feature 7 is now
  2612. 1:47:01complete. It added only one new file,
  2613. 1:47:04the profile page client, which is a thin
  2614. 1:47:07client wrapper that owns the ref
  2615. 1:47:09bridging the resume section and the
  2616. 1:47:11profile form. And then it went ahead and
  2617. 1:47:14modified a couple of file such as the
  2618. 1:47:16profile actions file inside of which it
  2619. 1:47:19added the extract profile server action
  2620. 1:47:22which takes it from ins storage,
  2621. 1:47:24extracts it, sends it over to GPT40 and
  2622. 1:47:28then returns the extracted profile. And
  2623. 1:47:30then in the resume section, there's now
  2624. 1:47:32an extract profile button. So, let's go
  2625. 1:47:35ahead and test it by heading back to
  2626. 1:47:37your application. Uploading your resume.
  2627. 1:47:40Looks like here I uploaded a fake
  2628. 1:47:42profile, but it might be better to
  2629. 1:47:44upload your real developer profile. I
  2630. 1:47:47found something like this. This is John
  2631. 1:47:49Doe. So, I've downloaded it in PDF and
  2632. 1:47:52uploaded it right here. So, now click
  2633. 1:47:54extract profile. And it'll tell you
  2634. 1:47:56failed to extract profile from resume.
  2635. 1:47:58Back within the application, it looks
  2636. 1:48:00like we get an error, which is great.
  2637. 1:48:02Setting up fake worker failed with a
  2638. 1:48:05reason message. So, what we can do is
  2639. 1:48:08open up the chat and tell it to use the
  2640. 1:48:12review feature and say when clicking
  2641. 1:48:15extract profile, I get this message. And
  2642. 1:48:18in the console, and now we can copy and
  2643. 1:48:21paste what it says right here. I get
  2644. 1:48:23this. And now based on the review skill
  2645. 1:48:27and the additional info that we pass it,
  2646. 1:48:29it should be able to figure out what
  2647. 1:48:30went wrong and fix it. So let's give it
  2648. 1:48:33some time. And very quickly, the fix is
  2649. 1:48:36in. Here's what changed. PDF parse v2 is
  2650. 1:48:39built on PDFJS disc and always spawns a
  2651. 1:48:43web worker. When the server action runs
  2652. 1:48:46inside of the Nex.js bundle, Webpack
  2653. 1:48:48can't resolve their worker file path
  2654. 1:48:50because it only exists at a browser
  2655. 1:48:52relative URL, not in server chunks. So,
  2656. 1:48:55what it needed to do is remove the PDF
  2657. 1:48:58bars from the actions and replace it
  2658. 1:49:00with the direct usage. Set the global
  2659. 1:49:04worker, add the server external
  2660. 1:49:06packages, and we should now be able to
  2661. 1:49:08extract the profile properly. Let's
  2662. 1:49:09check if it's uploaded, and then click
  2663. 1:49:11extract profile. Once again, it says
  2664. 1:49:14fail to extract. And if we open up the
  2665. 1:49:16terminal, the issue seems to be more or
  2666. 1:49:19less the same. Before it happened right
  2667. 1:49:22here under actions profile, but now it's
  2668. 1:49:25happening right here under API resume
  2669. 1:49:27download and then the error happens. So
  2670. 1:49:30I'll once again provide all of that info
  2671. 1:49:32to it and tell it review. Still the same
  2672. 1:49:36issue. And I'll paste it in. And let's
  2673. 1:49:39see what it says now. And very quickly,
  2674. 1:49:41it says that resolves the correct
  2675. 1:49:43absolute path. Restart your dev server
  2676. 1:49:46for the changes to take effect. So stop
  2677. 1:49:49it from running and rerun mpm rundev.
  2678. 1:49:52Then head back and reload the page. If
  2679. 1:49:55needed, re-upload the resume and then
  2680. 1:49:58click extract profile. Once again, it
  2681. 1:50:00fails. Now with the reason of invalid
  2682. 1:50:03URL. So I'll copy it one more time and
  2683. 1:50:06tell it to review it and paste the
  2684. 1:50:08error. Two things are still wrong. So,
  2685. 1:50:11it'll try to fix them. And in about half
  2686. 1:50:13a minute, we have another try. Uh, once
  2687. 1:50:16again, we'll stop the server from
  2688. 1:50:18running and then rerun it on localhost
  2689. 1:50:203000 and try to extract it again. This
  2690. 1:50:24time, we're hit with an even nastier
  2691. 1:50:26error, a full page one. But thankfully,
  2692. 1:50:28it is just as easy to copy it and pass
  2693. 1:50:31it over to our review skill. Hopefully,
  2694. 1:50:34this time it gets it right. And in about
  2695. 1:50:375 seconds it says clean. Restart the dev
  2696. 1:50:40server and try again. The profile page
  2697. 1:50:42will now load without error and extract
  2698. 1:50:45profile will call GPT40 and populate the
  2699. 1:50:48form. Okay, it is very confident that
  2700. 1:50:51this is going to work. So let me try to
  2701. 1:50:53rerun it. Go back on the page. Just for
  2702. 1:50:58good measure, I will re-upload the
  2703. 1:51:01resume by heading over into job pilot
  2704. 1:51:03and uploading it here.
  2705. 1:51:05I think it's going to get uploaded
  2706. 1:51:07successfully. And now let's extract the
  2707. 1:51:09profile. First of all, we don't get an
  2708. 1:51:12error. Rather, there's a loading segment
  2709. 1:51:14right here where it says extracting. And
  2710. 1:51:17check it out. It extracted it. Profile
  2711. 1:51:19fields filled in. Review and save below.
  2712. 1:51:23Yep, here is our John Doe with the phone
  2713. 1:51:27number, location set to Certino,
  2714. 1:51:29California. LinkedIn URL. The portfolio
  2715. 1:51:33URL is also picked up correctly, but
  2716. 1:51:35this was a dummy resume, so that's why
  2717. 1:51:36it says your website.com. For you, it's
  2718. 1:51:39going to be correct. We are a midlevel
  2719. 1:51:41software engineer with 19 years of
  2720. 1:51:44experience. And take a look at how tap
  2721. 1:51:46on all of these different skills,
  2722. 1:51:48industries worked in, as well as the
  2723. 1:51:51work experience, including the company
  2724. 1:51:53name, job title, start date, and end
  2725. 1:51:56date, as well as the key
  2726. 1:51:58responsibilities. This is going to be
  2727. 1:52:00super useful when matching it to job
  2728. 1:52:03postings. So, it'll be able to take your
  2729. 1:52:06previous work experience and then match
  2730. 1:52:08it against your potential new jobs to
  2731. 1:52:10tell your employers just why you would
  2732. 1:52:12be the perfect fit. We also worked at
  2733. 1:52:14Microsoft, high school, computer
  2734. 1:52:16science. Yep, all of this is great. And
  2735. 1:52:20some of the stuff also got filled in.
  2736. 1:52:22So, I'll go ahead and click save
  2737. 1:52:23profile. And this is it. That's the
  2738. 1:52:26feature that we wanted to implement. So,
  2739. 1:52:28we can simply tell it it's working now
  2740. 1:52:31and then it can update the progress
  2741. 1:52:33tracker and run remember save to save
  2742. 1:52:38the session. With that, now that our
  2743. 1:52:41resume uploads, GBT40 or whichever AI
  2744. 1:52:44you chose extracts it, the forms fill
  2745. 1:52:47automatically and you can verify it and
  2746. 1:52:50save it. In the next lesson, we'll build
  2747. 1:52:52the resume generation feature from the
  2748. 1:52:55profile info. So you can also do it the
  2749. 1:52:58other way around. This is going to be a
  2750. 1:53:00full job application platform. So I
  2751. 1:53:03wanted to make it feature-packed to help
  2752. 1:53:05you with your job search. There we go.
  2753. 1:53:07The memory updated. Feature 7 is
  2754. 1:53:10working. So in the next lesson, let's
  2755. 1:53:12focus on getting it to generate the
  2756. 1:53:14résumés.
  2757. 1:53:17Now we're going to implement the ré
  2758. 1:53:20generation feature. So, quickly head
  2759. 1:53:23over into the build plan, preview it in
  2760. 1:53:26markdown, and then head over to 08 ré
  2761. 1:53:31generation from profile. Since I didn't
  2762. 1:53:34write these nine detailed technical
  2763. 1:53:36documents by hand, I worked with AI to
  2764. 1:53:39define them based on the project
  2765. 1:53:40requirements, which means that
  2766. 1:53:42occasionally something gets missed as
  2767. 1:53:44you build. And this is one of those
  2768. 1:53:46moments. If you take a look at the logic
  2769. 1:53:49for feature08,
  2770. 1:53:51it says React Renderer right here.
  2771. 1:53:54Technically correct, but something
  2772. 1:53:56critical is missing. A resume isn't just
  2773. 1:54:00a formatted list of data. It needs a
  2774. 1:54:02professional summary, polished work
  2775. 1:54:04experience, bullet points, coherent
  2776. 1:54:07language throughout, right? So if we
  2777. 1:54:09implement this as written without AI,
  2778. 1:54:12the agent will just dump all the raw
  2779. 1:54:14data into a PDF layout. Name here,
  2780. 1:54:17skills here, bullet points here, all of
  2781. 1:54:20it is technically correct but completely
  2782. 1:54:22useless as an actual resume. So before
  2783. 1:54:25we implement it, we need to fix the
  2784. 1:54:27build plan to include GPT4.0.
  2785. 1:54:32So you can tell it something like let's
  2786. 1:54:35go to the edit mode. Generate a clean
  2787. 1:54:38professional PDF resume from current
  2788. 1:54:40profile data using GPT40.
  2789. 1:54:43Below the read point, you can say GPT40
  2790. 1:54:47generates professional resume context, a
  2791. 1:54:50summary paragraph, polished work
  2792. 1:54:52experience, and clean professional
  2793. 1:54:54language throughout. That's the fix. And
  2794. 1:54:56you can update these context files
  2795. 1:54:58during the implementation or whenever
  2796. 1:55:00you're adding a new feature. That way
  2797. 1:55:02you can maintain the codebase and
  2798. 1:55:04continuously build new features using AI
  2799. 1:55:07in an existing codebase. So once we're
  2800. 1:55:10done with the current features, you can
  2801. 1:55:11always go down and simply add phase 5
  2802. 1:55:16feature 26. Now go ahead and open up a
  2803. 1:55:19new session. I'll proceed with claude
  2804. 1:55:22code and simply tell it to restore what
  2805. 1:55:25we previously worked on. This feature
  2806. 1:55:27will have some real logic and AI work
  2807. 1:55:30involved. GPT40 content generation, PDF
  2808. 1:55:33rendering, and so on. So, we need to
  2809. 1:55:35plan before we build, tell it to
  2810. 1:55:38architect the feature 08 in plan mode.
  2811. 1:55:41And let's give it some time for it to
  2812. 1:55:43actually plan it out. And in a couple of
  2813. 1:55:45minutes, the full plan is right here.
  2814. 1:55:48And I just noticed this. You can
  2815. 1:55:50actually review it, select text, and add
  2816. 1:55:53comments directly on the plan. Pretty
  2817. 1:55:55cool. But yeah, the idea is to add the
  2818. 1:55:58resume PDF generation from profile. Here
  2819. 1:56:00it defines the language, what it means
  2820. 1:56:02to generate, download and so on. The
  2821. 1:56:05decisions that it's going to take, the
  2822. 1:56:07files which you want to change, and then
  2823. 1:56:08the implementation steps. You can go
  2824. 1:56:11through it, review it all in detail,
  2825. 1:56:13leave some comments if you want to, and
  2826. 1:56:15then that's it. Thankfully, it also
  2827. 1:56:18provides a list of things that it'll
  2828. 1:56:20verify before it calls it finished. So,
  2829. 1:56:23if you open up your chat right here,
  2830. 1:56:26it'll say the plan is now done, which
  2831. 1:56:28means that you can just either tell it
  2832. 1:56:30to implement it or it'll have already
  2833. 1:56:32started implementing it on its own. And
  2834. 1:56:34there we go. In about a minute, the
  2835. 1:56:37feature 8 is now complete. It built the
  2836. 1:56:40API route to generate it post handler
  2837. 1:56:43and a serveron PDF component with the
  2838. 1:56:47header, summary, skills, work
  2839. 1:56:48experience, and so on. as well as it
  2840. 1:56:51modified the résé section to add a
  2841. 1:56:53generate resume from profile button. So
  2842. 1:56:56if you go back to your profile and click
  2843. 1:56:58generate résé from profile. Now it'll do
  2844. 1:57:01it the other way around. It'll take this
  2845. 1:57:03data and generate a nice looking resume.
  2846. 1:57:06And check this out. John Doe, software
  2847. 1:57:11engineer, Certino, California.
  2848. 1:57:13Professional experience right here.
  2849. 1:57:16Skills, work experience, and the
  2850. 1:57:19education. This is amazing. And if you
  2851. 1:57:21think that you should have some kind of
  2852. 1:57:22dots, lines, colors, no, no, and no,
  2853. 1:57:27this concise, simple, black and white
  2854. 1:57:30textonly document is what professional
  2855. 1:57:32developers use to get hired. And now you
  2856. 1:57:35can do that, too. Of course, as you fill
  2857. 1:57:37it in with more work experience,
  2858. 1:57:39education, and some other information,
  2859. 1:57:41it'll perfectly fit on a single page,
  2860. 1:57:44which is what you want. So, that's
  2861. 1:57:45amazing. This feature has been completed
  2862. 1:57:47properly. Now, if this didn't work for
  2863. 1:57:49you for whatever reason, AI is
  2864. 1:57:52unpredictable, you can always use the
  2865. 1:57:54review skill and tell it that there's no
  2866. 1:57:56download button for the generator
  2867. 1:57:58resume. Or if something else is not
  2868. 1:58:00working, you can just tell it to recover
  2869. 1:58:02the feature 08, ask it to read the
  2870. 1:58:04context build plan, and then implement
  2871. 1:58:06it properly. Sometimes some back and
  2872. 1:58:09forth will be needed, but as you saw,
  2873. 1:58:11for me, it worked perfectly on the first
  2874. 1:58:13try. So don't forget to just update the
  2875. 1:58:17context progress tracker and the UI
  2876. 1:58:19registry if needed. And in the same
  2877. 1:58:21command, you can also run remember save.
  2878. 1:58:24With that in mind, the ré generation is
  2879. 1:58:27now done. GPT40 writes the content.
  2880. 1:58:30React PDF renderer renders it and ins
  2881. 1:58:34storage holds it. So if you go back to
  2882. 1:58:36your Ins dashboard, you'll be able to
  2883. 1:58:38find your resume right here and either
  2884. 1:58:41preview it or just download it. Great
  2885. 1:58:43stuff. And that's phase two done. The
  2886. 1:58:47whole profile side is built from the
  2887. 1:58:50form, the resume upload, AI extraction,
  2888. 1:58:54and resume generation. Job Pilot now
  2889. 1:58:57knows who the user is and what they're
  2890. 1:59:00looking for. Phase three is where the
  2891. 1:59:03app starts earning its name, actually
  2892. 1:59:05finding jobs. But one small cleanup
  2893. 1:59:08first. When I built a profile page, I
  2894. 1:59:11dropped in a connected accounts
  2895. 1:59:13placeholder. This thing right here. But
  2896. 1:59:15I decided not to use it for this build.
  2897. 1:59:18That's because scraping LinkedIn jobs is
  2898. 1:59:20actually against their terms of service.
  2899. 1:59:22So, not to get your account banned, I
  2900. 1:59:25decided to switch it up a bit. And
  2901. 1:59:27that's the whole point of this workflow,
  2902. 1:59:28to show you how we can pivot the app
  2903. 1:59:30idea while we're building it. Because
  2904. 1:59:32you'll never be able to know exactly
  2905. 1:59:34where you want to take this app as
  2906. 1:59:35you're building it. So, a simple cleanup
  2907. 1:59:37is going to look something like this.
  2908. 1:59:39You can open up a clawed window and then
  2909. 1:59:42tell it to remove the connected account
  2910. 1:59:44section from the top of the profile
  2911. 1:59:46page. Leave the LinkedIn URL field in
  2912. 1:59:48personal info. Don't touch anything
  2913. 1:59:50else. We essentially want to get rid of
  2914. 1:59:53this connected accounts part and only
  2915. 1:59:55focus on the resume and the profile
  2916. 1:59:57information. This change should be
  2917. 1:59:59pretty simple because it just removes a
  2918. 2:00:02single piece of UI. You can see it it
  2919. 2:00:04removed it as I was speaking and then
  2920. 2:00:06reloaded the page to show without it
  2921. 2:00:08which allows us to move to phase three
  2922. 2:00:11of our application. So let me tell you a
  2923. 2:00:14bit more about that in the next lesson
  2924. 2:00:18and welcome to phase three of our
  2925. 2:00:21application. The goal is to develop a
  2926. 2:00:24find jobs page first starting with a
  2927. 2:00:27full UI and then in the next lesson
  2928. 2:00:29we'll hook it up with the functionality.
  2929. 2:00:31So the goal is to build a full find jobs
  2930. 2:00:34page UI with mock data. No logic yet.
  2931. 2:00:37Again, that's coming in the next lesson.
  2932. 2:00:39And wanted to have search controls card
  2933. 2:00:41at the top with a job title label plus
  2934. 2:00:44location label and then find jobs button
  2935. 2:00:46with a search icon. And then we want to
  2936. 2:00:48list the section allowing people to
  2937. 2:00:51filter them. Show the jobs within a
  2938. 2:00:53table that says company ro match score
  2939. 2:00:56based on your resume. And then allow the
  2940. 2:00:58users to pageionate it. So that's going
  2941. 2:01:00to be pretty simple. We can go ahead and
  2942. 2:01:03open up a new session within it. Run
  2943. 2:01:06remember restore so it knows what we
  2944. 2:01:08last worked on. And once it remembers,
  2945. 2:01:11we can now tell it to build feature09
  2946. 2:01:14exactly as shown in. And now we're
  2947. 2:01:17passing a design. So if you head over to
  2948. 2:01:19designs and we're looking at the find
  2949. 2:01:21jobs page, we want it to look something
  2950. 2:01:23like this. So there's a search card at
  2951. 2:01:26the top and then there's a table where
  2952. 2:01:28we can see all the jobs that we can
  2953. 2:01:30find. First starting as I said with mock
  2954. 2:01:33data and then immediately in the next
  2955. 2:01:35lesson we'll make it fully functional by
  2956. 2:01:37using an API.
  2957. 2:01:39So let's give it some time to read
  2958. 2:01:41through it and then get it implemented.
  2959. 2:01:43And in about 2 minutes, it collected
  2960. 2:01:45everything it needs, gave itself a list
  2961. 2:01:48of reduces to implement, and slowly but
  2962. 2:01:51surely in the next minute or so, it
  2963. 2:01:54built the full UI. It also updated the
  2964. 2:01:58progress tracker as well as the UI
  2965. 2:02:00registry. And with that, feature 09 is
  2966. 2:02:03now complete. Let's go ahead and check
  2967. 2:02:05it out. Back within our application,
  2968. 2:02:06there's now a second page we can check
  2969. 2:02:08out, the find jobs page. And would you
  2970. 2:02:11look at that? The design is looking
  2971. 2:02:14perfect. I would actually say this is a
  2972. 2:02:16real application that we can now check
  2973. 2:02:18out. And if I search by job title, maybe
  2974. 2:02:21filter it by versel. Eight jobs and four
  2975. 2:02:24strong matches. But of course, this is
  2976. 2:02:27not yet fully functional. So if I search
  2977. 2:02:29for design as in design engineer, it's
  2978. 2:02:32not going to filter it yet properly. But
  2979. 2:02:34as soon as we implement the
  2980. 2:02:35functionality in the next lesson, it'll
  2981. 2:02:37work just fine. What's working now is
  2982. 2:02:40the sort oldest and newest or by the
  2983. 2:02:43match score. As you can see right here,
  2984. 2:02:45this is going to be a pretty useful
  2985. 2:02:46application. As soon as the jobs are
  2986. 2:02:47here and they don't lead to a 40 or
  2987. 2:02:50four. So with that, the UI is now done.
  2988. 2:02:53Search controls, the jobs table,
  2989. 2:02:55filters, pagionation, all of it sitting
  2990. 2:02:57on mock data. Next, we need to make it
  2991. 2:03:00real so that the agent goes out and
  2992. 2:03:03actually finds jobs for the user search.
  2993. 2:03:06Don't forget to run remember save so it
  2994. 2:03:09knows what we just did. And let's
  2995. 2:03:11implement the job discovery
  2996. 2:03:13functionality as that's where the real
  2997. 2:03:15work starts.
  2998. 2:03:18The find jobs page looks the part with
  2999. 2:03:21the profile and rest of the app, but
  3000. 2:03:24it's empty. So, it's time to fill it
  3001. 2:03:26with real jobs. And we'll use the Azuna
  3002. 2:03:30jobs API to pull the listings from all
  3003. 2:03:32across the web. You know, an API is good
  3004. 2:03:35when there's like four different paid
  3005. 2:03:37ads competing directly for your name.
  3006. 2:03:39But yeah, we definitely want to go with
  3007. 2:03:41the original one. What it does is it
  3008. 2:03:44searches through thousands of job sites
  3009. 2:03:46so that you don't have to. You can go on
  3010. 2:03:48it, zoom in to verify that you are a
  3011. 2:03:51human and uh I guess you have to select
  3012. 2:03:54a couple of different buckets. You just
  3013. 2:03:56have to give it a title and a location
  3014. 2:03:58and it'll give you back real jobs. Then
  3015. 2:04:01we'll use GPT40 to score each one of
  3016. 2:04:03these jobs against your profile. It's
  3017. 2:04:06clean, simple, and has no scraping. So
  3018. 2:04:09wait, is this thing that we are building
  3019. 2:04:12basically just an API wrapper? Well, not
  3020. 2:04:15at all. Aduna will handle the discovery,
  3021. 2:04:18but once a user finds a job they like,
  3022. 2:04:20they still need to research the company.
  3023. 2:04:23What do they actually build? What's
  3024. 2:04:24their engineering culture like? And is
  3025. 2:04:26this even a place worth applying to? And
  3026. 2:04:28that's exactly what BrowserBase is built
  3027. 2:04:30for. Browserbase is a cloud browser. It
  3028. 2:04:33opens up a real browser session in the
  3029. 2:04:35background, visits the company's
  3030. 2:04:37websites, and then pulls back everything
  3031. 2:04:39worth knowing. We'll use it to build a
  3032. 2:04:41full company research feature right on
  3033. 2:04:43the job details page. So before the user
  3034. 2:04:46clicks apply, they already know exactly
  3035. 2:04:48who they're applying to. More on that
  3036. 2:04:50soon, but for now, create a free account
  3037. 2:04:53on developer.adzuna.com.
  3038. 2:04:55So that's not this website, it's their
  3039. 2:04:57developer version that looks something
  3040. 2:05:00like this. Outdated, I know, but this is
  3041. 2:05:03typically how all the API websites look
  3042. 2:05:05like. You can head over to registration
  3043. 2:05:06page and fill in your info, such as the
  3044. 2:05:10username, the email right here, the
  3045. 2:05:13password, and some additional details.
  3046. 2:05:16For the organization, you can enter JS
  3047. 2:05:18Mastery. It's going to be for personal
  3048. 2:05:21research, and I think we're not going to
  3049. 2:05:23have a lot of monthly visitors. So, go
  3050. 2:05:25ahead and sign up. Or at least you'll be
  3051. 2:05:28able to sign up after you enter a
  3052. 2:05:30password that is more than 15 characters
  3053. 2:05:32long. At least they think about
  3054. 2:05:33security.
  3055. 2:05:36And then when you sign up, you'll have
  3056. 2:05:38to verify it via email. And then you'll
  3057. 2:05:40be able to log in with your email and
  3058. 2:05:42password. Then head over to dashboard.
  3059. 2:05:45Go to API access details and here you
  3060. 2:05:48can find your application ID and the
  3061. 2:05:50key. Go ahead and copy both. Starting
  3062. 2:05:53with the application ID, we'll paste it
  3063. 2:05:55here under our enenv.local
  3064. 2:05:58right here by saying atuna app id. And
  3065. 2:06:03then after that, we're going to have the
  3066. 2:06:05atuna app key.
  3067. 2:06:09So let's also copy the key and paste it
  3068. 2:06:13here. That's the entire setup. No SDK to
  3069. 2:06:17install, no package to add. Aduna is
  3070. 2:06:19just a plain REST API, just a fetch
  3071. 2:06:22call. So don't forget to restore a
  3072. 2:06:24session because now we're going to
  3073. 2:06:26actually use that API and build on top
  3074. 2:06:28of it. So run remember
  3075. 2:06:32and then restore.
  3076. 2:06:34And since this is going to be a logic
  3077. 2:06:36heavy feature at Zuna API call then
  3078. 2:06:39GPT40 to score per job DB writes post
  3079. 2:06:44hog events we need to plan before we
  3080. 2:06:46build. So switch over to plan mode right
  3081. 2:06:50here and then tell it to check the
  3082. 2:06:53library docs for the Adzuna API patterns
  3083. 2:06:57and then architect the feature number
  3084. 2:06:5910. This is going to take some time
  3085. 2:07:01until it comes up with a plan. Then
  3086. 2:07:03we'll be able to check it out and
  3087. 2:07:05provide some feedback or just tell it to
  3088. 2:07:07implement it. And in about a minute the
  3089. 2:07:10plan is in. I like how Claude auto opens
  3090. 2:07:13the full plan, allows us to add comments
  3091. 2:07:16or just auto accept it right here. So
  3092. 2:07:18the goal right here is now that the find
  3093. 2:07:20jobs page is complete with UI and mog
  3094. 2:07:23data to implement feature 10 which wires
  3095. 2:07:26it to Aduna's job discovery API. It'll
  3096. 2:07:29go and edit a couple of files, then use
  3097. 2:07:32GPD40 to match it against our current
  3098. 2:07:34resume or the details that we have left
  3099. 2:07:36in. So let's go ahead and auto accept
  3100. 2:07:39the updates and give it another minute
  3101. 2:07:41to implement them. And after a while,
  3102. 2:07:43feature 10 is now complete. And here's
  3103. 2:07:46what was built. Aduna lib file. This is
  3104. 2:07:49a single file that simply searches for
  3105. 2:07:52jobs. Just a very simple API call. Then
  3106. 2:07:55it created a post handler that matches
  3107. 2:07:58and scores the jobs and also adds that
  3108. 2:08:01as a post hook event and finally
  3109. 2:08:03displays it all on the page.
  3110. 2:08:05So, what do you say that we test it out?
  3111. 2:08:07Back on local host 3000, if you reload,
  3112. 2:08:10there's going to be no jobs found yet.
  3113. 2:08:12So, let's test it. Let's search for a
  3114. 2:08:15back-end developer job in the US. Find
  3115. 2:08:18jobs and internal server error with a
  3116. 2:08:23green background. Okay, not something we
  3117. 2:08:25want to see, but hopefully we get more
  3118. 2:08:27information back right here in the
  3119. 2:08:29terminal. It looks like we got a 401.
  3120. 2:08:32Okay, auna API error. Maybe if I reload
  3121. 2:08:35the application so that it gets the
  3122. 2:08:37proper env keys. That might be a good
  3123. 2:08:40start. And I'll try it one more time,
  3124. 2:08:43which is going to give me unfortunately
  3125. 2:08:44the same error. We're going to take this
  3126. 2:08:49and simply paste it over to our agent
  3127. 2:08:51using the recover skill. Looks like it
  3128. 2:08:54went without the additional info. So
  3129. 2:08:56I'll pass the info and let's see what it
  3130. 2:08:58says. This is failure mode one. root
  3131. 2:09:01cause 401 unauthorized.
  3132. 2:09:04Oh, it's a Zuna app Lee instead of a
  3133. 2:09:07key. That's a mistake on my end. Or no,
  3134. 2:09:10wait, it's not. Why did it actually
  3135. 2:09:13refer to it as a rename Aduna app Lee?
  3136. 2:09:17Oh, maybe while I was viewing that file
  3137. 2:09:19that it created, this one right here, I
  3138. 2:09:22might have accidentally switched it or
  3139. 2:09:25maybe it actually misspelled it. Either
  3140. 2:09:27way, it should be good now. So, we need
  3141. 2:09:30to restart our developer server.
  3142. 2:09:33Head back over here, search for a
  3143. 2:09:35backend developer position in the US,
  3144. 2:09:39and click find jobs.
  3145. 2:09:42This time it's loading for a bit of a
  3146. 2:09:44longer duration, and hopefully we'll see
  3147. 2:09:46some real jobs start appearing in the
  3148. 2:09:49table. It was loading for some time, but
  3149. 2:09:52we actually got back the response. These
  3150. 2:09:54are real jobs appearing in a table with
  3151. 2:09:57company names, roles, most importantly
  3152. 2:10:00the match score which matches against
  3153. 2:10:03our actual profile data, the source and
  3154. 2:10:05the date found as well as a salary
  3155. 2:10:08estimate. You can also search for one.
  3156. 2:10:10For example, I see vantor right here.
  3157. 2:10:12You can see there's two. Or maybe I can
  3158. 2:10:15search for the Java keyword right here,
  3159. 2:10:18which it picks up from the RO. So with
  3160. 2:10:20that in mind, the find jobs page is now
  3161. 2:10:23alive with real jobs and real scores
  3162. 2:10:26pulled from Aduna and matched against
  3163. 2:10:28the user's profile by GPT4.
  3164. 2:10:31Every job at Zuna return got scored and
  3165. 2:10:34saved to ins.
  3166. 2:10:37But I went ahead and queried it three
  3167. 2:10:39times. So that's 30 jobs, 30 database
  3168. 2:10:43rights, and all scoped to the current
  3169. 2:10:46user. RLS policies make sure that users
  3170. 2:10:49can only see their own data and we
  3171. 2:10:52define that once in the schema but ins
  3172. 2:10:55will now enforce it across every query
  3173. 2:10:57automatically. Next, we need to wire up
  3174. 2:11:00the filters sort and pagionation so the
  3175. 2:11:03job list actually becomes useful. Don't
  3176. 2:11:05forget to run remember and then save so
  3177. 2:11:09that we can focus on pagionation
  3178. 2:11:11filtering and sorting. Next,
  3179. 2:11:15now that the jobs are loading, let's
  3180. 2:11:17make the list actually useful. Right
  3181. 2:11:19now, everything shows in one flat list
  3182. 2:11:21with very little way to filter it, sort
  3183. 2:11:24it, or pageionate it. This feature will
  3184. 2:11:27wire all of that to real ins data. So
  3185. 2:11:31let's go ahead and open up a new chat
  3186. 2:11:34window and let's restore the previous
  3187. 2:11:37session by telling it remember restore.
  3188. 2:11:41This one is straightforward pure DB
  3189. 2:11:44queries already fully defined in the
  3190. 2:11:46build plan. So if you want to check it
  3191. 2:11:47out, you can open up the build plan and
  3192. 2:11:50check out the phase number three
  3193. 2:11:54specifically the filtering pagionation
  3194. 2:11:56and sorting feature. We simply need to
  3195. 2:11:58wire the filter tabs. sort dropdown text
  3196. 2:12:01search and pagionation to real ins data.
  3197. 2:12:05Let's do it. You can just tell it to
  3198. 2:12:07implement the feature 11 and let's give
  3199. 2:12:10it a second. In about 2 minutes, feature
  3200. 2:12:12now is now complete um with the get
  3201. 2:12:15handler that queries inforge data.
  3202. 2:12:19So if you head back over here, you'll
  3203. 2:12:21now see that we have 10 posts still.
  3204. 2:12:23Let's go ahead and search for something
  3205. 2:12:25like front-end developer in the US
  3206. 2:12:28again. and it found some jobs and it
  3207. 2:12:31added them right here to the list. So
  3208. 2:12:32now we have one out of 20. I think the
  3209. 2:12:35pagionation is actually set to 20. So
  3210. 2:12:37that's why it says that we don't have
  3211. 2:12:38more pages. But we can still sort it by
  3212. 2:12:41low match. You can see right here as
  3213. 2:12:44well as a high match.
  3214. 2:12:47So those are the 70s and above. That's
  3215. 2:12:49the filtering story. And then if we show
  3216. 2:12:51all matches, we can also sort it by
  3217. 2:12:54match score or sort it from newest to
  3218. 2:12:58oldest as well. And you can also search
  3219. 2:13:00for a specific title. So if we go with
  3220. 2:13:03Java, you can see here it is. Or maybe
  3221. 2:13:06we go with something like React, you can
  3222. 2:13:08see we have two React opportunities, but
  3223. 2:13:11unfortunately zero that are a high
  3224. 2:13:13match. So now that that is done, you can
  3225. 2:13:15also run remember save to save it. And
  3226. 2:13:18in the next lesson, we'll implement the
  3227. 2:13:20page that opens up when you click on a
  3228. 2:13:23specific job because right now it goes
  3229. 2:13:26to a 40 or4. So let's do that next.
  3230. 2:13:31In this lesson, we're building the page
  3231. 2:13:33where everything comes together, the
  3232. 2:13:35full job description, how well it
  3233. 2:13:37matches the user's profile, and which
  3234. 2:13:39skills they have and which they're
  3235. 2:13:41missing, as well as the company research
  3236. 2:13:43section. That's going to be the star of
  3237. 2:13:45the build. For now, if you click on a
  3238. 2:13:47job, you'll get to a four or four. So,
  3239. 2:13:50let's build a page that'll show right
  3240. 2:13:51here. You can open up a new chat. Feel
  3241. 2:13:54free to use codeex or cloud code or
  3242. 2:13:56whatever. I'll randomly switch back to
  3243. 2:13:58codec just to show you that this
  3244. 2:13:59workflow is fully agnostic. I'll tell it
  3245. 2:14:01to build the feature 12 exactly
  3246. 2:14:06as shown in job details. This is
  3247. 2:14:10actually going to be coming from designs
  3248. 2:14:12job details right here. So, we want to
  3249. 2:14:14build a page that looks something like
  3250. 2:14:16this. We want to know why it's matching
  3251. 2:14:18as well as fetch all the additional data
  3252. 2:14:20about that. And then this company
  3253. 2:14:22research part is going to be the star of
  3254. 2:14:24the show. We'll do that with browser
  3255. 2:14:26base, but more on that soon. So, let's
  3256. 2:14:29tell AI to build the feature number 12.
  3257. 2:14:31And after researching it all, in about 2
  3258. 2:14:34minutes, it figured out what it needs to
  3259. 2:14:36do and it's applying the edits. And even
  3260. 2:14:40though in about two minutes it was
  3261. 2:14:42already more or less done, it took
  3262. 2:14:44another four to verify that it did
  3263. 2:14:46everything correctly. I guess that's the
  3264. 2:14:48difference between claude and CEX if you
  3265. 2:14:50want to compare them. Codex always tries
  3266. 2:14:52to be a bit too sure and then it checks
  3267. 2:14:55everything and make sure that it is
  3268. 2:14:56done. If you want to stay on the safe
  3269. 2:14:58side, well that's good. And I also like
  3270. 2:15:01how it gives me the progress tracker
  3271. 2:15:03update as well as the UI registry
  3272. 2:15:04tracker updates right here and then all
  3273. 2:15:07the edited files below. So you can
  3274. 2:15:08quickly check out what it did. So what
  3275. 2:15:10do you say that we go ahead and test it
  3276. 2:15:12out? Oh, this is actually looking uh
  3277. 2:15:15amazing. The 404 that I was on
  3278. 2:15:17immediately transitioned over to a
  3279. 2:15:19fullon page. Uh this is a back-end
  3280. 2:15:22developer job at Trioptus LLC. 75% match
  3281. 2:15:26score. A pretty hefty salary. And I
  3282. 2:15:28noticed that most of these backend
  3283. 2:15:30developer jobs have above 100k salary
  3284. 2:15:34which I guess makes the ultimate backend
  3285. 2:15:36course uh one of the best courses to
  3286. 2:15:38take. I'll finalize it and prepare some
  3287. 2:15:40lessons as soon as I finish the agentic
  3288. 2:15:43development course. So both of these
  3289. 2:15:45courses are currently in progress. The
  3290. 2:15:48weight list is going to be down in the
  3291. 2:15:49description. The AI course is coming
  3292. 2:15:51soon as that's the most needed skill
  3293. 2:15:54right now. And then once you master
  3294. 2:15:56that, getting better at foundations of
  3295. 2:15:58backend is going to be the next thing
  3296. 2:16:00that's going to significantly increase
  3297. 2:16:01your salary. So that's the next thing to
  3298. 2:16:03focus on. Now here we can see the AI
  3299. 2:16:06match reasoning where the candidates
  3300. 2:16:08Java and SQL skills are a good match for
  3301. 2:16:11this position. Requires Java 11 and
  3302. 2:16:13database experience also requires cloud
  3303. 2:16:16and microservices which are not
  3304. 2:16:18explicitly stated in the candidates
  3305. 2:16:19profile. So that's something that we can
  3306. 2:16:21continue working on. you have these
  3307. 2:16:23skills and these are the gap. There's a
  3308. 2:16:26job description right here that you can
  3309. 2:16:27check out. We can make it so that you
  3310. 2:16:29can expand the job description to check
  3311. 2:16:31it out in more details. And I think
  3312. 2:16:33that's a quick review that we can give
  3313. 2:16:35it by quickly heading back and telling
  3314. 2:16:37it review and then say job description
  3315. 2:16:41is being cut off mids sentence. If it's
  3316. 2:16:44longer than what the preview allows,
  3317. 2:16:48find a way to display it. And then I'll
  3318. 2:16:52provide an example right here of how it
  3319. 2:16:54gets cut. This should be pretty simple
  3320. 2:16:56for it to fix. So I'll just go here and
  3321. 2:16:58wait for the website to update. And
  3322. 2:17:00there we go. The reason why we actually
  3323. 2:17:02cut it is because I believe the API
  3324. 2:17:05provides it cut. So there's this view
  3325. 2:17:08full job post which takes us to the full
  3326. 2:17:11job where we can actually open up the
  3327. 2:17:13description and then apply to that job.
  3328. 2:17:15And if we check out some other jobs, you
  3329. 2:17:17can see how they look like too. With
  3330. 2:17:19that in mind, here we definitely created
  3331. 2:17:21some new components. So we can run
  3332. 2:17:23imprint to update our UI registry if
  3333. 2:17:26that hasn't happened already. And then
  3334. 2:17:29once that is done, we can save the
  3335. 2:17:30session by running remember and then
  3336. 2:17:34save.
  3337. 2:17:36I like how on codeex it actually figures
  3338. 2:17:38out that this is an active skill so you
  3339. 2:17:40know what you're calling. Again, it's
  3340. 2:17:41pretty cool to be able to use these
  3341. 2:17:43different tools and then notice the
  3342. 2:17:45differences. But once you figure out how
  3343. 2:17:47the workflow works, you'll be able to
  3344. 2:17:49optimize it no matter the agent that you
  3345. 2:17:51use.
  3346. 2:17:54This lesson and the feature we'll
  3347. 2:17:56implement within it is the part that I'm
  3348. 2:17:58most excited about. Instead of you
  3349. 2:18:00opening 10 tabs to figure out what a
  3350. 2:18:03company actually does, like Rayomine
  3351. 2:18:06Software Solutions LLC, let's create an
  3352. 2:18:08agent that when you click this research
  3353. 2:18:10company button, opens a real browser,
  3354. 2:18:13visits the company's website, reads what
  3355. 2:18:16it finds, and pulls all of it into a
  3356. 2:18:19clean research file. What they do, their
  3357. 2:18:22tech stack, their culture, and any
  3358. 2:18:24talking points for your interview, all
  3359. 2:18:27before you ever click apply. By doing
  3360. 2:18:28that research, comparing it against the
  3361. 2:18:31job description that you then compare
  3362. 2:18:33against your profile is what's going to
  3363. 2:18:35give you the upper hand when applying
  3364. 2:18:37for jobs. And this is exactly where
  3365. 2:18:39browser base and stage hand do the heavy
  3366. 2:18:42lifting. Browserbase gives us a real
  3367. 2:18:45managed browser running in the cloud,
  3368. 2:18:48not a headless scraper, an actual
  3369. 2:18:50browser session just like you'd open
  3370. 2:18:52Chrome. And then if you head over to
  3371. 2:18:54docs and search for stage hand, you'll
  3372. 2:18:57see that it sits on top of it and lets
  3373. 2:18:59the agent interact with and extract the
  3374. 2:19:02content from any page using plain
  3375. 2:19:04English instructions instead of brittle
  3376. 2:19:07CSS selectors. And together they'll
  3377. 2:19:09handle the part of job hunting that's
  3378. 2:19:12genuinely timeconuming researching who
  3379. 2:19:15you're actually applying to. And
  3380. 2:19:17honestly, that's just scratching the
  3381. 2:19:19surface of what browser base can do. On
  3382. 2:19:22the paid plan, you get something called
  3383. 2:19:24a stealth mode that bypasses bot
  3384. 2:19:27detection on sites like LinkedIn. You
  3385. 2:19:30also get parallel browsing sessions for
  3386. 2:19:32running multiple agents at once and
  3387. 2:19:35session persistence that keeps your
  3388. 2:19:37login state across runs. that opens up
  3389. 2:19:39the possibilities which allows you to
  3390. 2:19:41add additional features to this
  3391. 2:19:43application such as the ability to auto
  3392. 2:19:46apply for jobs by automating form
  3393. 2:19:48submissions. Again, the free plan is
  3394. 2:19:51more than enough to follow along with
  3395. 2:19:52this build, but if you want to take it a
  3396. 2:19:54step further later on, you can give it a
  3397. 2:19:57shot. So, to follow along and see
  3398. 2:19:59exactly what I'm seeing, click the
  3399. 2:20:01browserbased link down in the
  3400. 2:20:02description and then create your free
  3401. 2:20:04account. Then, when you're in, you'll be
  3402. 2:20:06able to see something that looks like
  3403. 2:20:08this. So you can head over to your
  3404. 2:20:09project dashboard under overview or you
  3405. 2:20:13can immediately head over to settings
  3406. 2:20:15and grab your project ID and API key.
  3407. 2:20:19Head back within your env.local.
  3408. 2:20:22Create a new browserbase
  3409. 2:20:25API key and browser base project ID. I
  3410. 2:20:32believe that's the first one we copied.
  3411. 2:20:34And the second one is going to be the
  3412. 2:20:36API key starting with letters BB as in
  3413. 2:20:39browser base. So once you have the keys,
  3414. 2:20:42we can restore the session by heading
  3415. 2:20:45over to our agent. Again, feel free to
  3416. 2:20:48use whichever one you like. Start a new
  3417. 2:20:49session on it to clear the context,
  3418. 2:20:52but still make it remember what it saved
  3419. 2:20:55before by running remember restore. And
  3420. 2:20:58it knows that the next feature is
  3421. 2:21:00feature 13. So, if you head back over to
  3422. 2:21:03our context under build plan and you
  3423. 2:21:06check out 13, you'll be able to see that
  3424. 2:21:09this one is a bit longer.
  3425. 2:21:12Here, the agent researches the company
  3426. 2:21:15using their public website and builds a
  3427. 2:21:17structured research report using a
  3428. 2:21:19single browserbased session. Three data
  3429. 2:21:22sources fused together. The company
  3430. 2:21:24website content, the job description
  3431. 2:21:26from DB, and the user profile from DB.
  3432. 2:21:29Here we do the logic and then what I
  3433. 2:21:31actually took some more time on is
  3434. 2:21:34telling stage hand what it needs to do.
  3435. 2:21:36It needs to capture what the company
  3436. 2:21:38actually does and any concrete signals
  3437. 2:21:41like funding, customers, scale, mission,
  3438. 2:21:44recent launches and then find the
  3439. 2:21:46internal links most worth visiting to
  3440. 2:21:49research them as an employer. What does
  3441. 2:21:52the company do? What do they build or
  3442. 2:21:54sell and who is it for? Funding notable
  3443. 2:21:56customers. I mean just imagine if you
  3444. 2:21:59did all this research and you came to
  3445. 2:22:01the meeting prepared. Then it'll extract
  3446. 2:22:03the subpages that helps a candidate
  3447. 2:22:06understand the company before applying.
  3448. 2:22:08Finally, we give it a prompt as a sharp
  3449. 2:22:10career strategist to prepare a candidate
  3450. 2:22:13for a specific role. We will give the
  3451. 2:22:16research, the job posting, and the
  3452. 2:22:18profile. And then it'll tell the user
  3453. 2:22:20everything it needs to maximize their
  3454. 2:22:22chances. And this is actually the most
  3455. 2:22:24complex feature in the entire build
  3456. 2:22:26where we have real browser sessions
  3457. 2:22:28through browser base company page
  3458. 2:22:30navigation, GPD40 synthesis and database
  3459. 2:22:34rights through insch. So the goal is to
  3460. 2:22:36plan before we touch anything. So switch
  3461. 2:22:39over to the plan mode once again. You
  3462. 2:22:41can see we were using plan mode on cloud
  3463. 2:22:44code, but on codeex it's just in a
  3464. 2:22:46different spot, but you can still turn
  3465. 2:22:48it on. And you can tell it to check the
  3466. 2:22:50browser
  3467. 2:22:52as well as the fetch skills and use the
  3468. 2:22:56library docs context
  3469. 2:22:58and then architect the feature 13. Let's
  3470. 2:23:02give it a shot and see what it does.
  3471. 2:23:06Once it comes back with a plan, we'll be
  3472. 2:23:08able to implement it. It already made a
  3473. 2:23:10useful discovery by reading the library
  3474. 2:23:13docs as it has a newer stage hand
  3475. 2:23:15initialization shape rather than the
  3476. 2:23:17older architecture snippet for feature
  3477. 2:23:1913. The plan should follow the model
  3478. 2:23:22structure. It's going to check the
  3479. 2:23:24actual code. Currently everything is
  3480. 2:23:26empty. Then it's going to look into the
  3481. 2:23:28Nex.js docs as well as stage hand and
  3482. 2:23:31browser base. Then it's going to check
  3483. 2:23:33the insort skill to confirm the SDK
  3484. 2:23:36pattern. It's actually doing a ton of
  3485. 2:23:38work behind the scenes on making all
  3486. 2:23:40this happen. And this is the difference
  3487. 2:23:43between vibe coding and agentic
  3488. 2:23:46development. So if what you're seeing
  3489. 2:23:48right here is impressive, definitely
  3490. 2:23:50check out the agentic development weight
  3491. 2:23:52list as the full course is coming soon.
  3492. 2:23:55But yeah, very quickly it went through
  3493. 2:23:58it and it asked us a couple of questions
  3494. 2:24:01to make sure that it planned it
  3495. 2:24:02properly. It's asking whether the
  3496. 2:24:04company research means a one-time
  3497. 2:24:07doseier generated for one save job
  3498. 2:24:09stored on jobs.co company research not a
  3499. 2:24:13reusable company profile. Yep, that
  3500. 2:24:15works. And doier means the updated nine
  3501. 2:24:18field JSON shape from contextu plan with
  3502. 2:24:21overview text stack culture. Yep, that's
  3503. 2:24:23exactly what it means. The browser
  3504. 2:24:25research means browser base plus stage
  3505. 2:24:28hand visiting the company's own public
  3506. 2:24:30website profile. fallback synthesis to
  3507. 2:24:3240 and research company buttons. That's
  3508. 2:24:35the interaction on the client side. Yep,
  3509. 2:24:37that's exactly what all of these mean.
  3510. 2:24:39So, we can just say go ahead and
  3511. 2:24:41proceed. Then it came back with the
  3512. 2:24:43follow-up. Should feature 13 resolve the
  3513. 2:24:46company homepage before opening stage
  3514. 2:24:48hand. And in this case, I'll go with the
  3515. 2:24:50browserbased fetch API as it includes
  3516. 2:24:53the redirects which will allow us to
  3517. 2:24:55handle tougher sites than the regular
  3518. 2:24:57fetch API. And then the second question
  3519. 2:24:59is what should happen when a job already
  3520. 2:25:01has a company research saved. In this
  3521. 2:25:04case, we can go with the recommended
  3522. 2:25:05approach which is to just render it.
  3523. 2:25:08Show the saved one and hide the generate
  3524. 2:25:11action to avoid duplicate paid runs.
  3525. 2:25:15Perfect. With this in mind, it should be
  3526. 2:25:17able to build it out. And the plan is
  3527. 2:25:20officially here. Build feature 13 as a
  3528. 2:25:23user triggered research flow on the job
  3529. 2:25:25details page. A clientside research
  3530. 2:25:28company action calls the post API agent
  3531. 2:25:31research which authenticates the user
  3532. 2:25:34loads the user scope job and profile
  3533. 2:25:36from ins resolves the likely company
  3534. 2:25:39homepage with browserbased fetch API
  3535. 2:25:41visits the company's site with one
  3536. 2:25:43browserbase or stage hand session and
  3537. 2:25:45then synthesizes a candidate specific
  3538. 2:25:48dosier with GPT40 saves it to jobs
  3539. 2:25:52company research tracks the company's
  3540. 2:25:54researched and then refreshes the job
  3541. 2:25:57details page. This is amazing and you
  3542. 2:26:00can go over all of the details on how
  3543. 2:26:02it's going to do it. Now, in this case,
  3544. 2:26:04it looks like I'm out of Codex messages.
  3545. 2:26:06So, that's why it's super useful to have
  3546. 2:26:08two subscriptions active, like one from
  3547. 2:26:11Claude and Codex. And then using this
  3548. 2:26:13workflow, you can always switch between
  3549. 2:26:16the two. That's another pro tip because
  3550. 2:26:18two subscriptions of $20 are still
  3551. 2:26:21cheaper than a single Mac subscription
  3552. 2:26:23that's about 100 bucks. So, let's see if
  3553. 2:26:26it can actually proceed with
  3554. 2:26:27implementing this plan. If not, we'll
  3555. 2:26:30just copy this MDX and paste it over
  3556. 2:26:33into another coding agent. It looks like
  3557. 2:26:35it doesn't want us to do that. So, it'll
  3558. 2:26:37listen to us and try to implement the
  3559. 2:26:39plan. Let's give it some time. And in
  3560. 2:26:42about 7 minutes, it's done. Implemented
  3561. 2:26:44feature 13 and to end. Build a company
  3562. 2:26:48research agent flow across agent
  3563. 2:26:50research route files company research
  3564. 2:26:52and research company button which now
  3565. 2:26:54resolves the URLs via browserbased fetch
  3566. 2:26:57runs stage hand extraction synthesizes
  3567. 2:27:00this nine field GPT dosier saves it logs
  3568. 2:27:03progress and refreshes the details. So
  3569. 2:27:06what do you say that we give it a shot?
  3570. 2:27:08Back on localhost 3000, I'll go ahead
  3571. 2:27:11and choose a back-end developer job that
  3572. 2:27:14is maybe not the best fit, but that I
  3573. 2:27:16really much like this front-end
  3574. 2:27:18developer with Cloudflare with a huge
  3575. 2:27:21salary. Let's go with Optino. The role
  3576. 2:27:24requires JavaScript, which the candidate
  3577. 2:27:26has also has specific Cloudflare
  3578. 2:27:28services. So here we have some job
  3579. 2:27:31description but below we can do full
  3580. 2:27:33company research but I don't see a
  3581. 2:27:36research company button even though it
  3582. 2:27:38says that it implemented it. Research
  3583. 2:27:40company button. Let's see where does
  3584. 2:27:42this button actually appear. Research
  3585. 2:27:45company button. It looks like it appears
  3586. 2:27:49right here.
  3587. 2:27:51If there's no research, it should appear
  3588. 2:27:54under the company research card. So
  3589. 2:27:56maybe it thinks that this company was
  3590. 2:27:58already researched. Let me see if I
  3591. 2:28:00manually remove this check right here.
  3592. 2:28:03The button is here. So for some reason,
  3593. 2:28:06it thinks that the company has been
  3594. 2:28:07researched beforehand. Let's go ahead
  3595. 2:28:09and run a review
  3596. 2:28:12and tell it that the research company
  3597. 2:28:16button is not
  3598. 2:28:19visible. But unfortunately for now, we
  3599. 2:28:22are really out of credits. So I'll copy
  3600. 2:28:24this message. And this is going to be a
  3601. 2:28:27real proof that this workflow is fully
  3602. 2:28:29agent agnostic even within working on
  3603. 2:28:31specific features. And I'll tell it that
  3604. 2:28:34the research company button is not
  3605. 2:28:37visible. And I'll tell it to review it.
  3606. 2:28:40Even though Claude wasn't the one who
  3607. 2:28:42worked on this feature, it's actually
  3608. 2:28:44checking out its competitors Codex's
  3609. 2:28:46code. It immediately was able to find a
  3610. 2:28:48button visibility bug where the button
  3611. 2:28:51visibility specifically has research is
  3612. 2:28:54broken. So the fix is pretty
  3613. 2:28:56straightforward. Let's go ahead and tell
  3614. 2:28:58it to apply the fix.
  3615. 2:29:01And there we go. In about a second, the
  3616. 2:29:03research company button is now rendered
  3617. 2:29:05inside the empty state panel directly
  3618. 2:29:08below the candidate specific briefing.
  3619. 2:29:11So if we come back, there's a big
  3620. 2:29:12research company button. So let's give
  3621. 2:29:15it a shot. It says researching, but
  3622. 2:29:17since this is the biggest feature in the
  3623. 2:29:19entire application, I assume that it's
  3624. 2:29:21not going to work on the first try. It
  3625. 2:29:23says fail to load job. And if we open up
  3626. 2:29:26the terminal, we get a bit more info. So
  3627. 2:29:29I'll copy it and tell it to review it.
  3628. 2:29:32Specifically, when I click research
  3629. 2:29:35company, this is what I get. And we can
  3630. 2:29:39also provide this failed to load job
  3631. 2:29:41message. The more context you provided,
  3632. 2:29:44the better. Thankfully, the error is
  3633. 2:29:46super clear. The company research column
  3634. 2:29:49doesn't exist in the database. So, it's
  3635. 2:29:51going to check the migration files to
  3636. 2:29:53understand what actually happened. That
  3637. 2:29:55column was never added to the migration
  3638. 2:29:57file. So, it'll likely ask us to just
  3639. 2:30:01run it via the InsForge CLI, which
  3640. 2:30:04thankfully makes it super simple. And
  3641. 2:30:06the way that InsForge interacts with
  3642. 2:30:08agents is just so seamless and makes it
  3643. 2:30:11the best way to develop a backend for
  3644. 2:30:13any kind of application that I'm
  3645. 2:30:15building with AI. So, let's give it a
  3646. 2:30:17moment. There we go. The migration
  3647. 2:30:19applied successfully. The column now
  3648. 2:30:22exists. So the research company button
  3649. 2:30:24should now work end to end. Well, let's
  3650. 2:30:26see whether that's really the case. I'll
  3651. 2:30:28once again click research company. It'll
  3652. 2:30:31load and say researching. And since this
  3653. 2:30:34is a long process, another update that
  3654. 2:30:36we can do is make some kind of a loading
  3655. 2:30:38card with a multi-step process to give
  3656. 2:30:41the user a bit of an idea of what is
  3657. 2:30:44currently happening. Actually, that's a
  3658. 2:30:47feature that's not a part of the initial
  3659. 2:30:49build plan, but a perfect one for you to
  3660. 2:30:51test how this workflow works when you
  3661. 2:30:53want to add some new features. So, very
  3662. 2:30:55soon we'll be done with the build. Just
  3663. 2:30:57a few more features to go. Go ahead and
  3664. 2:30:59implement that full modal multi-step
  3665. 2:31:02loading system. It'll be a nice quality
  3666. 2:31:05of life change for the users so that
  3667. 2:31:06they don't have to stare at the screen
  3668. 2:31:08and think whether something went wrong.
  3669. 2:31:10But with that in mind, in about 20
  3670. 2:31:12seconds or so, we got a full company
  3671. 2:31:15research. It includes the tech stack
  3672. 2:31:17that the company works with, the
  3673. 2:31:19culture, certified women's business
  3674. 2:31:22enterprise. Okay, that's good. So, if
  3675. 2:31:24you're a woman, you might have an edge
  3676. 2:31:26here. uh your edge specifically is
  3677. 2:31:28extensive experience in software
  3678. 2:31:30engineering particularly JavaScript
  3679. 2:31:32which aligns well with the core
  3680. 2:31:34requirements of the role. The history of
  3681. 2:31:36optimizing performance and implementing
  3682. 2:31:38prediction algorithms at Apple
  3683. 2:31:40demonstrates your capability to handle
  3684. 2:31:42CDN optimization gaps to address while
  3685. 2:31:45you lack direct experience with
  3686. 2:31:46Cloudflare. Emphasize your quick
  3687. 2:31:48learning ability and past experience
  3688. 2:31:50with similar technologies and leverage
  3689. 2:31:52your JavaScript expertise to bridge the
  3690. 2:31:54gap in Typescript.
  3691. 2:31:56Smart questions. How does Optinino's
  3692. 2:31:59integrate Cloudflare edge computing
  3693. 2:32:00capabilities? And then it gives you some
  3694. 2:32:02smart questions that you can ask as well
  3695. 2:32:04as some points for your interview
  3696. 2:32:06preparation. And then it gives you some
  3697. 2:32:08info on why this role is a good fit for
  3698. 2:32:10you. So now you can very easily click
  3699. 2:32:12this button and apply through the direct
  3700. 2:32:15site. If you experienced any issues on
  3701. 2:32:17implementing this feature, just use the
  3702. 2:32:19recover functionality and tell it what
  3703. 2:32:21went wrong. Don't forget to update the
  3704. 2:32:23progress tracker if it hasn't been
  3705. 2:32:25updated yet to tell it that this feature
  3706. 2:32:28was completed. This means that the agent
  3707. 2:32:31just researched a company for you
  3708. 2:32:33through a real browser getting real data
  3709. 2:32:36and creating a real research report. And
  3710. 2:32:39now to be implemented what I believe is
  3711. 2:32:41one of the most important
  3712. 2:32:42functionalities of the app. We want to
  3713. 2:32:44make sure that our users actually use
  3714. 2:32:46it. So it's time to head back over to
  3715. 2:32:49your Post Hog dashboard. Under browse
  3716. 2:32:52activity, you'll be able to see a lot of
  3717. 2:32:55different events that were fired such as
  3718. 2:32:57web vitals, company researched, page
  3719. 2:33:00views, page leaves, research company,
  3720. 2:33:02and so on. If you click on this company
  3721. 2:33:04researched, you'll also be able to get
  3722. 2:33:06more data on exactly what company that
  3723. 2:33:09was. So if you open up Posthog AI from
  3724. 2:33:11the right side, instead of getting lost
  3725. 2:33:13in all of these events, you can simply
  3726. 2:33:16ask it a question like which companies
  3727. 2:33:18have been researched so far and it'll
  3728. 2:33:20look for the company related data in the
  3729. 2:33:22project. It figured out that we're
  3730. 2:33:24looking for a company researched event.
  3731. 2:33:27So, it's going to pull all the
  3732. 2:33:28properties and sample values to find
  3733. 2:33:31which companies have been researched.
  3734. 2:33:33For now, there's only one value. It
  3735. 2:33:35switch the agent to the SQL mode to
  3736. 2:33:37extract it from our database and it gave
  3737. 2:33:40us back the table. Optino was the only
  3738. 2:33:43company that was researched. Of course,
  3739. 2:33:45right now we're the only user that has
  3740. 2:33:46been using the app and this is the only
  3741. 2:33:48company that we researched, but with
  3742. 2:33:50time I'm sure that you can see how
  3743. 2:33:52useful this is going to become. So, this
  3744. 2:33:54is just the start of what POS can do. In
  3745. 2:33:57production, you'd use this to understand
  3746. 2:33:59how users are actually behaving, which
  3747. 2:34:02jobs did they research, where they drop
  3748. 2:34:04off, and which match scores lead to
  3749. 2:34:06applications. There's also other things
  3750. 2:34:08like feature flags, web analytics,
  3751. 2:34:11session replays, where you can see
  3752. 2:34:13exactly how users are using your app,
  3753. 2:34:15which is great if just looking at the
  3754. 2:34:17data is unclear. So here you can filter
  3755. 2:34:20by specific events for example web
  3756. 2:34:23vitals clicking different buttons or you
  3757. 2:34:26can also use AI to summarize what
  3758. 2:34:28happened in this session. So it's
  3759. 2:34:30actually going to render the video
  3760. 2:34:32upload it for analysis analyze the
  3761. 2:34:34segments and tell you what the user is
  3762. 2:34:36doing on the page. And while it's doing
  3763. 2:34:39that I'm just also noticing this
  3764. 2:34:41notification here saying that Posthog is
  3765. 2:34:43now available in Slack. And this is what
  3766. 2:34:46I've been waiting for for a long time.
  3767. 2:34:49The ability to ask Post Hog questions
  3768. 2:34:52about your product data, debug issues,
  3769. 2:34:54and generate PRs directly within Slack
  3770. 2:34:57is something that my team will find
  3771. 2:34:59super useful. So, let's click on this.
  3772. 2:35:01And you know what? Since this is the
  3773. 2:35:03first time that I'm seeing this, let me
  3774. 2:35:05actually go ahead and hook it up to our
  3775. 2:35:08real company Slack channel because I'm
  3776. 2:35:10certain that this is something that both
  3777. 2:35:11our engineers, designers, and marketers
  3778. 2:35:14are going to abuse. So, let's click
  3779. 2:35:16connect Slack right here. I'll select my
  3780. 2:35:18workspace and give it permissions. And
  3781. 2:35:22is that it? I just opened up the JS
  3782. 2:35:24Mastery official Slack on marketing.
  3783. 2:35:27Sundus here is asking some questions
  3784. 2:35:29about pulling some specific data. And
  3785. 2:35:31this is no joke. This happened
  3786. 2:35:32yesterday. Frank said that we should
  3787. 2:35:35keep everything up to date. And now I'm
  3788. 2:35:37just testing Post Hog here. It tells me
  3789. 2:35:39that it can answer any data questions or
  3790. 2:35:42help with code. What should it dig into?
  3791. 2:35:44Well, let me ask it right here. Hey,
  3792. 2:35:47Post Hog, can you tell me how many users
  3793. 2:35:51we have on jsmastery.com?
  3794. 2:35:56Let's see if it can answer that. Okay, I
  3795. 2:35:58guess this means that it's starting to
  3796. 2:36:00work on it. Immediately, I get a
  3797. 2:36:02response saying working on a task stage
  3798. 2:36:05in progress. And in about a minute, it
  3799. 2:36:08came back with a response. It's looking
  3800. 2:36:10at our jsmastery.pro project, which now
  3801. 2:36:12that I'm looking at, we should have
  3802. 2:36:14changed the name to jsmastery.com
  3803. 2:36:16because that's the real domain, which we
  3804. 2:36:18finally have. But yeah, it's taking a
  3805. 2:36:20look at the number of users based on the
  3806. 2:36:22page view events that exist on the page.
  3807. 2:36:25And it looks like there were almost a
  3808. 2:36:28million of you visiting jsmastery.com
  3809. 2:36:32recently.
  3810. 2:36:34This goes back to late February 2025.
  3811. 2:36:36And I'm super grateful for so many of
  3812. 2:36:39you visiting the site. Now, of course,
  3813. 2:36:41it can further break that down by a
  3814. 2:36:43monthly trend, by country, or just
  3815. 2:36:46active users over the last 30 days. But
  3816. 2:36:48let me instead ask it another question.
  3817. 2:36:51Let's ask it which is the best course on
  3818. 2:36:54JSMy.pro.
  3819. 2:36:57Obviously, best is subjective, but I
  3820. 2:36:59want to see how it'll approach it. We
  3821. 2:37:01can maybe tell it just give me the
  3822. 2:37:03ranking 1 2 3 without listing the
  3823. 2:37:06specific sale numbers, but you can do it
  3824. 2:37:08by page visits instead. And let's not
  3825. 2:37:11forget to tag the hog at the start.
  3826. 2:37:14Funny enough, this time it actually put
  3827. 2:37:16the eyes emoji instead of the seed. So,
  3828. 2:37:20I'm guessing that it is working on it.
  3829. 2:37:23While it is working on it, we can head
  3830. 2:37:25back to session replays where it
  3831. 2:37:27successfully analyzed the video session
  3832. 2:37:30that we had. And I'm not sure if you
  3833. 2:37:31heard that. I just got a Slack
  3834. 2:37:33notification. And it said, I'll rank the
  3835. 2:37:36courses by page visits based on the
  3836. 2:37:38total page visits across jsmastery.com.
  3837. 2:37:41Here's the top three. Ultimate NextJS15
  3838. 2:37:44course, then the GEP animations course,
  3839. 2:37:47and then the Ultimate Next.js course.
  3840. 2:37:49I'm guessing this is the older version
  3841. 2:37:50when we had versions 13 and 14 which we
  3842. 2:37:53later updated to 15 and then later on
  3843. 2:37:5616. And then the GUP course is following
  3844. 2:37:58along nicely. And of course the next
  3845. 2:38:00goal is to completely change this list
  3846. 2:38:03to make the agent coursees the number
  3847. 2:38:05one and then the backend course that
  3848. 2:38:07we're working on follow closely on the
  3849. 2:38:09second spot. But yeah, this is super
  3850. 2:38:12useful. I think you can already see how
  3851. 2:38:15if you're working within a team or if
  3852. 2:38:16you just use a Slack for yourself or
  3853. 2:38:18your partners, it's super useful to be
  3854. 2:38:21able to speak with it and it's going to
  3855. 2:38:23come back with useful data directly from
  3856. 2:38:25your app. So, finally, let's take a look
  3857. 2:38:27at what it researched. The user
  3858. 2:38:29successfully browsed job listings,
  3859. 2:38:32generated company research for a
  3860. 2:38:33specific role despite initial errors,
  3861. 2:38:36review the research, and then proceeded
  3862. 2:38:38to apply. This is super useful data. So
  3863. 2:38:42it was able to figure out what we were
  3864. 2:38:44clicking and that the user actually
  3865. 2:38:46proceeded to apply after getting the
  3866. 2:38:48company research and then also how long
  3867. 2:38:51they were staying at each part of the
  3868. 2:38:53journey and how many issues they
  3869. 2:38:55experienced. This info is incredibly
  3870. 2:38:58valuable and as a developer working on
  3871. 2:39:01your product, especially if you're doing
  3872. 2:39:02it solo or as a part of a small team
  3873. 2:39:05where you can have a full marketing
  3874. 2:39:07department, the amount of decisions that
  3875. 2:39:08you can make based on the data that Post
  3876. 2:39:11Hog gives you is just astounding. So
  3877. 2:39:13yeah, what do you say that we go ahead
  3878. 2:39:15and build out a few more features and
  3879. 2:39:17then we come back to Post Hog one last
  3880. 2:39:20time once the full features have been
  3881. 2:39:22implemented. Oh, and I just finished
  3882. 2:39:24recording the last lesson and a couple
  3883. 2:39:26of minutes ago, Sundus, our marketing
  3884. 2:39:29person, just replied, "Crazy amazing how
  3885. 2:39:32we can just do that easily now." And
  3886. 2:39:34then proceeded to tag Post Hog and asked
  3887. 2:39:38how many signups JSM comm has. So, the
  3888. 2:39:42fact that she was able to figure out
  3889. 2:39:44that the only thing she needs to do is
  3890. 2:39:45just tag this Slack app and ask it a
  3891. 2:39:48question is great. It then proceeded to
  3892. 2:39:51find the signup events, measured all of
  3893. 2:39:54them together, and told her that JSM has
  3894. 2:39:57about 160K total signups. I think this
  3895. 2:40:00is the best and most honest showcase of
  3896. 2:40:03how I'm personally using Posthog for
  3897. 2:40:05jsmastery.com.
  3898. 2:40:07But yeah, with that in mind, let's
  3899. 2:40:09proceed with the build.
  3900. 2:40:12We're getting very close to finalizing
  3901. 2:40:14the application. The landing page is
  3902. 2:40:16here. Profile page is done. finding jobs
  3903. 2:40:19page is done as well. So, what's
  3904. 2:40:22remaining is the dashboard. That's
  3905. 2:40:24because finding jobs doesn't take just
  3906. 2:40:26an hour. You're done and you'll be out
  3907. 2:40:28of the app. No, you'll likely apply to a
  3908. 2:40:31couple of different companies, compare
  3909. 2:40:33the salaries and the match scores, track
  3910. 2:40:36when interviews are happening and so on.
  3911. 2:40:38So, we can do all of that within the
  3912. 2:40:40dashboard. Thankfully, within the
  3913. 2:40:42designs, we have a very simple dashboard
  3914. 2:40:45design. total jobs found, average match
  3915. 2:40:48rate, companies researched, jobs this
  3916. 2:40:51week, as well as the recent activity,
  3917. 2:40:54and a couple of different graphs. So,
  3918. 2:40:56opening up one of our chats, I'll switch
  3919. 2:40:58back to Claude code. Open up a new chat
  3920. 2:41:02and say remember restore to restore the
  3921. 2:41:06latest session. And then we can tell it
  3922. 2:41:09to build feature 14 exactly as shown in
  3923. 2:41:13the context designs dashboard.png image.
  3924. 2:41:17In this case, since this is just the UI,
  3925. 2:41:19we don't have to run the architect
  3926. 2:41:21feature. We can just build the UI. So
  3927. 2:41:24let's tell it to build it. And let's see
  3928. 2:41:26what it comes back with. To do it, it'll
  3929. 2:41:28first install Recharts, which it'll use
  3930. 2:41:31to create some charts, and then create
  3931. 2:41:34separate components for the stats bar,
  3932. 2:41:36recent activity, analytics, charts, and
  3933. 2:41:38finally wire it all up within the same
  3934. 2:41:41page. So, let's see how well it does it,
  3935. 2:41:44and most importantly, how well will it
  3936. 2:41:46follow the rest of the design language.
  3937. 2:41:49And would you take a look at this? I
  3938. 2:41:53mean before this would be a video on its
  3939. 2:41:55own. Just creating this UI would take a
  3940. 2:41:58couple of hours to teach it properly
  3941. 2:42:00with charts and displaying it and
  3942. 2:42:02hovering over the charts. This recent
  3943. 2:42:05activity section, the cards with the
  3944. 2:42:07badges and the numbers right here. I
  3945. 2:42:10mean, this is just out of this world.
  3946. 2:42:13But in the next lesson, let's see if we
  3947. 2:42:16can actually make this data dynamic
  3948. 2:42:19coming from the ins backend and the
  3949. 2:42:21database.
  3950. 2:42:24In the previous lesson, we just created
  3951. 2:42:27these mock components. And since this
  3952. 2:42:29one contained a lot of components, I can
  3953. 2:42:32see that it is still adding them as
  3954. 2:42:34parts of the UI registry. So in the
  3955. 2:42:36future, it immediately knows how these
  3956. 2:42:39kind of dashboard cards and charts look
  3957. 2:42:41like. But now it's time to wire them up
  3958. 2:42:44to real data. The goal here is to wire
  3959. 2:42:47up the four stat cards to real ins
  3960. 2:42:50database for current user. This one
  3961. 2:42:53doesn't actually require the architect
  3962. 2:42:55mode. So I think it's even safe to do it
  3963. 2:42:58in the previous session right here where
  3964. 2:43:00we did the UI. I'll simply tell it
  3965. 2:43:02implement feature 15.
  3966. 2:43:07it'll figure out that it has to wire up
  3967. 2:43:09the four stats card. Yep, there we go.
  3968. 2:43:13To real database. So, it'll query
  3969. 2:43:15insorgge directly and update them. Let's
  3970. 2:43:18give it a second to do that. And in
  3971. 2:43:20about half a minute, it is done and it's
  3972. 2:43:22already updating the progress tracker.
  3973. 2:43:24So, if we come back, total jobs found is
  3974. 2:43:27now set to 20. Average match rate is 43.
  3975. 2:43:31We definitely got to bump those numbers
  3976. 2:43:32up. Company's research this is done
  3977. 2:43:35using browser base is set to one and
  3978. 2:43:38then jobs this week is set to 20. What
  3979. 2:43:41do you say that we implement the recent
  3980. 2:43:43activity next so we can see what the
  3981. 2:43:45user is doing? Since this is just two DB
  3982. 2:43:48queries through Ins and thankfully our
  3983. 2:43:51agent knows everything that is happening
  3984. 2:43:53with Ins and backend and database
  3985. 2:43:56systems because it's built from the
  3986. 2:43:57ground up to work with it. We can simply
  3987. 2:44:00tell it to implement feature 16 and
  3988. 2:44:02it'll know what it needs to do. The goal
  3989. 2:44:05here is to run agent runs plus jobs with
  3990. 2:44:09company research. Merge them and then
  3991. 2:44:12say what happened and then give it some
  3992. 2:44:13kind of time frame like 10 minutes ago,
  3993. 2:44:15an hour ago or yesterday. It figured out
  3994. 2:44:18that we already have a format date. It's
  3995. 2:44:21going to update the dashboard page to
  3996. 2:44:23fetch those agent runs plus research
  3997. 2:44:26jobs and build the activity list. Of
  3998. 2:44:29course, we have some errors while it
  3999. 2:44:30actually fetches it. And believe it or
  4000. 2:44:32not, and I was doing this real time as I
  4001. 2:44:35was speaking, it was able to build a
  4002. 2:44:37real recent activity list where it found
  4003. 2:44:4110 jobs for back-end developer job. Then
  4004. 2:44:43we researched the Optino company and
  4005. 2:44:46then it gave us 10 more jobs. We can
  4006. 2:44:48verify that this data is real by heading
  4007. 2:44:51over here, searching for some front-end
  4008. 2:44:53jobs in New York, for example. And in
  4009. 2:44:57this case, it looks like we found 10
  4010. 2:44:59jobs, one matching almost perfectly. So
  4011. 2:45:03what I'll do is I will sort it by only
  4012. 2:45:05high matches. Looking for a front-end
  4013. 2:45:09position. Oh no, looks like all of our
  4014. 2:45:11front-end positions are very low match
  4015. 2:45:13score because the developer info that we
  4016. 2:45:16filled in for this currently logged in
  4017. 2:45:18developer matches that of a back-end
  4018. 2:45:21engineer. Let's say that we wanted to
  4019. 2:45:22make a switch to a front-end engineering
  4020. 2:45:25position. What would we have to learn
  4021. 2:45:27about to make it in this company? I will
  4022. 2:45:30click research company. Commencing the
  4023. 2:45:33browser base which will start the
  4024. 2:45:35browserbased browser behind the scenes
  4025. 2:45:37doing all the research for us opening
  4026. 2:45:40many different pages. And if I'm not
  4027. 2:45:42mistaken, there's even an option to show
  4028. 2:45:44you what is happening. So you can look
  4029. 2:45:47into that and implement that as an
  4030. 2:45:49additional feature to the app so the
  4031. 2:45:51user knows what's happening behind the
  4032. 2:45:53scenes. But again kind of the point of
  4033. 2:45:55this is so that you can go away do
  4034. 2:45:57something else and then very soon the
  4035. 2:46:00agent comes back and gives you the full
  4036. 2:46:02research like this. This is a
  4037. 2:46:04venture-backed company focusing on
  4038. 2:46:06building operational infrastructure for
  4039. 2:46:08sensitive technologies. It seems that I
  4040. 2:46:11lack direct experience with AI and
  4041. 2:46:13modern front-end frameworks,
  4042. 2:46:16but we should emphasize our strong
  4043. 2:46:18problem solving and adaptability. And of
  4044. 2:46:21course, since we're not focused on
  4045. 2:46:22React, we should practice our modern
  4046. 2:46:25front-end frameworks and prepare
  4047. 2:46:27examples that we worked on in the past.
  4048. 2:46:30Perfect. So now, if you head back under
  4049. 2:46:33our dashboard, you can see total jobs
  4050. 2:46:35found 30, found 10 jobs for front end,
  4051. 2:46:38and researched Linero. So finally if we
  4052. 2:46:42go back the last feature we need to
  4053. 2:46:44implement for now is going to be feature
  4054. 2:46:4717 analytics charts and post hog data.
  4055. 2:46:51So now the goal is to wire three
  4056. 2:46:53dashboard charts to real post hog event
  4057. 2:46:56data for the current user. Since this
  4058. 2:46:59one is using post hog I actually want to
  4059. 2:47:01plan it properly. So I will run remember
  4060. 2:47:04save right here and then open up a new
  4061. 2:47:08chat window and tell it to check the
  4062. 2:47:11post hog MCP and the library docs and
  4063. 2:47:15then architect the feature 17 in plan
  4064. 2:47:18mode. And what's cool about claude code
  4065. 2:47:21is that it does these things in
  4066. 2:47:23parallel. So one agent is exploring the
  4067. 2:47:26project context files for feature 17
  4068. 2:47:28while the other is exploring the
  4069. 2:47:30existing codebase structure. Let's give
  4070. 2:47:32it a second to come back with a plan and
  4071. 2:47:34then we'll see whether it's ready to be
  4072. 2:47:36implemented. And very quickly, feature
  4073. 2:47:3917 is in. The dashboard already renders
  4074. 2:47:42three chart components, but all three
  4075. 2:47:45components use hardcoded mock data.
  4076. 2:47:48Feature 17 replaces that mock data with
  4077. 2:47:51real per user event data fetched server
  4078. 2:47:54side from Post Hog's query API using
  4079. 2:47:58Post Hog node. Posog MCP is installed
  4080. 2:48:02but requires OATH. We don't need it for
  4081. 2:48:05implementation since post node SDK
  4082. 2:48:08already has what we need and the
  4083. 2:48:10projects lib post hook server is
  4084. 2:48:13established. So we want to track four
  4085. 2:48:15different events. Job search started,
  4086. 2:48:17job found, profile completed, company
  4087. 2:48:20researched. So let's go ahead and accept
  4088. 2:48:23it
  4089. 2:48:24and see how it does. As soon as it
  4090. 2:48:26implements it, this will have concluded
  4091. 2:48:29our fivephase build where we started
  4092. 2:48:32with foundations, moved over into the
  4093. 2:48:34profile, then find jobs functionalities
  4094. 2:48:37with browser base, job details and
  4095. 2:48:40company research and finally the
  4096. 2:48:42dashboard. So, this is actually an
  4097. 2:48:44interesting way of using PostHog because
  4098. 2:48:46we're directly using the events that are
  4099. 2:48:50typically used on the backend side where
  4100. 2:48:51you track what your users are doing, but
  4101. 2:48:54now we're going to use them to display
  4102. 2:48:56them to our users as well, which is the
  4103. 2:48:58first time that I'm using Posthog in
  4104. 2:49:00that way, but I guess it makes sense
  4105. 2:49:03with dashboard style applications. In
  4106. 2:49:05any other kind of application, you would
  4107. 2:49:07just go to your Post Hog dashboard and
  4108. 2:49:09take a look at all the events right here
  4109. 2:49:11and then create some kind of dashboards
  4110. 2:49:13either manually or with Post Hog AI or
  4111. 2:49:16just ask it questions through Slack like
  4112. 2:49:19what I've just showed you. But there's
  4113. 2:49:20also a possibility of using its data to
  4114. 2:49:23display it within your own application.
  4115. 2:49:26So, let's see how it does. And the build
  4116. 2:49:29comes back cleanly. Here's a summary of
  4117. 2:49:31what was done. The three hard-coded mock
  4118. 2:49:35data arrays were removed and now it's
  4119. 2:49:38pulling the data from Posthog to display
  4120. 2:49:41real data. Interestingly, it decided not
  4121. 2:49:44to use Posthog query API because the
  4122. 2:49:46Post Hog node V5 SDK doesn't expose the
  4123. 2:49:50query and the query API requires a
  4124. 2:49:52personal API key. So, what we could have
  4125. 2:49:55done is provided it the personal API key
  4126. 2:49:58and that would be good. but instead it
  4127. 2:50:00said you can take a look at that data
  4128. 2:50:02within your post dashboard or give me
  4129. 2:50:05your personal key if you want to. But
  4130. 2:50:08hey, I already have all of that data
  4131. 2:50:10through the ins jobs table and that is
  4132. 2:50:13the authoritative source anyway because
  4133. 2:50:15post hook events are derived from it. So
  4134. 2:50:18querying the DB directly is more
  4135. 2:50:20reliable and cheaper. So that's what it
  4136. 2:50:23did. Take a look at this company
  4137. 2:50:25research activity. Today is Friday. We
  4138. 2:50:28get two new companies, jobs found over
  4139. 2:50:31time. Today we did 30, but you can of
  4140. 2:50:33course research more over time. And now
  4141. 2:50:36that I'm looking at this graph, maybe
  4142. 2:50:38it'll be useful if we were hitting some
  4143. 2:50:40limits. So if you wanted to implement
  4144. 2:50:43billing to the users, you can let them
  4145. 2:50:45know that maybe their limit is 30 per
  4146. 2:50:47day, so they can come back tomorrow or
  4147. 2:50:50they can upgrade to another plan to use
  4148. 2:50:53this SAS. Because if you think about it,
  4149. 2:50:56what you just developed is a job
  4150. 2:50:58searching SAS platform. So with a few
  4151. 2:51:01more additions, I'm sure you'll be able
  4152. 2:51:03to charge some money for it. And
  4153. 2:51:04finally, there's the match score
  4154. 2:51:06distribution, and it looks like we are a
  4155. 2:51:09great fit for a lot of jobs, but for
  4156. 2:51:12none, we're perfect. So maybe we still
  4157. 2:51:14have to do some search and find the jobs
  4158. 2:51:16that we are really the perfect match
  4159. 2:51:18for, and definitely not apply for jobs
  4160. 2:51:21like these. And yeah, talking about
  4161. 2:51:23Posthog, let's see what it can actually
  4162. 2:51:26tell us about how the app is being used.
  4163. 2:51:28In this case, I prefer using the AI
  4164. 2:51:31chat. So, let's ask it, what's the
  4165. 2:51:33average match score of jobs found this
  4166. 2:51:36week? Again, this is a pretty vague
  4167. 2:51:39search term, especially since we're not
  4168. 2:51:41mentioning any specific event names, but
  4169. 2:51:45it did found the job found event, and
  4170. 2:51:48it's going to check some properties to
  4171. 2:51:49see whether it includes the match score.
  4172. 2:51:52There we go. Match score is a numeric
  4173. 2:51:55property on job found. So, that's all it
  4174. 2:51:57needs to create an insight. And there we
  4175. 2:51:59go. Here it is. The average match score
  4176. 2:52:02is 40. So after a couple of days, if the
  4177. 2:52:05user keeps improving their score, then
  4178. 2:52:08it might be better tomorrow and the day
  4179. 2:52:10after. Now what you can do is open this
  4180. 2:52:12up as a new insight and then even save
  4181. 2:52:15it to your dashboard. So now when you go
  4182. 2:52:17back to the insight list, you can see
  4183. 2:52:19this is a new insight which you can then
  4184. 2:52:22add to one of your dashboards. But okay,
  4185. 2:52:25what else can we ask it? Maybe like
  4186. 2:52:28what's the gap between finding a job and
  4187. 2:52:30researching the company? A pretty vague
  4188. 2:52:33question and also very specific to the
  4189. 2:52:36business logic of this specific app. Oh,
  4190. 2:52:39and while it's running that, another
  4191. 2:52:41interesting question might be what
  4192. 2:52:43percentage of found jobs get company
  4193. 2:52:46research run on them? Okay, here it
  4194. 2:52:50created a funnel of jobs found and then
  4195. 2:52:52the companies researched. But I want to
  4196. 2:52:54run this question because it'll tell us
  4197. 2:52:57exactly how engaged our users are. Out
  4198. 2:53:00of every job the agent finds, how many
  4199. 2:53:03actually gets researched? This is the
  4200. 2:53:05kind of behavioral insight that would
  4201. 2:53:07normally take hours to set up in a
  4202. 2:53:10traditional analytics tool. Here we get
  4203. 2:53:12it in one question. So it looks like it
  4204. 2:53:15is about 6.7%.
  4205. 2:53:18So in practice only one out of 15 found
  4206. 2:53:21jobs get company research run on it.
  4207. 2:53:24That's a significant drop off and likely
  4208. 2:53:26a big opportunity. So we have to answer
  4209. 2:53:29a couple of questions. Is the company
  4210. 2:53:31research hard to find or access or is
  4211. 2:53:34this event firing correctly or are there
  4212. 2:53:37certain types of users more likely to
  4213. 2:53:39research? And then you can dig further
  4214. 2:53:41into some of these angles with Post Hog.
  4215. 2:53:44What would be cool is some kind of a
  4216. 2:53:46coding agent that understands these post
  4217. 2:53:49hog insights as well as our code that
  4218. 2:53:52would then be able to develop the
  4219. 2:53:54features to improve upon what this
  4220. 2:53:57insight is saying is not ideal. Maybe in
  4221. 2:54:00the future. But yeah, this was pushog in
  4222. 2:54:03production. Not just tracking something
  4223. 2:54:06that happened, but understanding what it
  4224. 2:54:08means. Oh, and this Slack thing which
  4225. 2:54:11looks like Sundus is having a field trip
  4226. 2:54:14with asking it even more questions and
  4227. 2:54:17it's giving back very useful insights.
  4228. 2:54:19So yeah, that's Job Pilot, a full stack
  4229. 2:54:23AI agent that finds jobs, scores them
  4230. 2:54:27based on your resume or profile data,
  4231. 2:54:30and gives your users a genuine edge
  4232. 2:54:32before they click apply. It's built in a
  4233. 2:54:34couple of days, not months, by directing
  4234. 2:54:37an AI agent instead of fighting one. And
  4235. 2:54:40what helped significantly is the fact
  4236. 2:54:43that we used insch because it's built
  4237. 2:54:46from the ground up to communicate with
  4238. 2:54:48the agent and allow it to build a full
  4239. 2:54:51back-end system including o databases,
  4240. 2:54:55storage, functions, and more directly
  4241. 2:54:57from within your agent chat. So, it was
  4242. 2:55:00the key part of our entire Agentic
  4243. 2:55:02workflow in this video. And if you want
  4244. 2:55:04to go deeper on all of this, there's an
  4245. 2:55:07Aentic development course coming soon.
  4246. 2:55:09I'll leave the weight list link down in
  4247. 2:55:11the description. It'll cover everything
  4248. 2:55:14from the ground up. How to research and
  4249. 2:55:16plan a project with AI before you write
  4250. 2:55:19a single line of code. How to build
  4251. 2:55:21context files for any project. How to
  4252. 2:55:23create your own custom skills like the
  4253. 2:55:26ones we had here. how to use AI in a way
  4254. 2:55:28that actually holds together across
  4255. 2:55:31features and across entire production
  4256. 2:55:33databases, not just for one impressive
  4257. 2:55:36demo. Once again, the weight list is now
  4258. 2:55:38open and you can join it by clicking the
  4259. 2:55:40link in the description. If this video
  4260. 2:55:42helped,
  4261. 2:55:44leave a like, comment, and subscribe and
  4262. 2:55:47share it with other developers who are
  4263. 2:55:49still fighting their AI agent instead of
  4264. 2:55:51directing it. Or maybe don't. Maybe keep
  4265. 2:55:54it just for yourself. Either way, I'll
  4266. 2:55:56see you in the next one. Thank you for
  4267. 2:55:58watching and have a wonderful day.

About this transcript

This page contains the full transcript of How Senior Engineers Actually Build with AI in 2026 | Build a Full Stack Job Applications Platform by JavaScript Mastery, generated from the public captions YouTube serves with the video. The transcript has 29,691 words across 4,267 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.

What you can do with it

Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.

Free YouTube transcript tool

YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.