YouTube2Text

Using GitHub Spec Kit with your EXISTING PROJECTS — Transcript

by Den Delimarsky · 8,311 words · 1,199 segments · language en · Watch on YouTube

Full transcript

  1. 0:00Hi, it's me again talking about SpecKit
  2. 0:02and I'm going to be addressing one of
  3. 0:04the biggest requests from the community
  4. 0:05and that is how do I use SpeckKit with
  5. 0:07existing projects? Well, you're in luck
  6. 0:10because today is the day we're going to
  7. 0:12learn how to do this and we're going to
  8. 0:13learn this selfishly on my blog because
  9. 0:15my blog is an existing project. I
  10. 0:17maintain it for close to a decade and
  11. 0:19this or statically close to a decade
  12. 0:22because if we look at the reality I've
  13. 0:24been writing on my blog for about I want
  14. 0:25to say 15 years. So I have my blog repo.
  15. 0:29It's a static site that's built with
  16. 0:31Hugo. It has no other frameworks. It
  17. 0:34uses Tailwind CSS for a bunch of
  18. 0:36styling. It is actually Congo mod, a
  19. 0:38modified version of that theme as my
  20. 0:40core theme because if we go to den.dev,
  21. 0:44that's that that's what it is. You'll
  22. 0:46see this beautiful website that I
  23. 0:48absolutely love how I customize with
  24. 0:50some of these things with the intros and
  25. 0:51the details. And I have the archives
  26. 0:54page which shows me all the posts that I
  27. 0:56published which is by the way a
  28. 0:57completely custom page format. So I've
  29. 0:59done some work on this. Like it looks
  30. 1:01nice. I like this. But one of the things
  31. 1:04that I wanted to do is introduce a
  32. 1:06concept of a reading list. And the
  33. 1:08reading list is I'm an avid reader. I
  34. 1:10love books. And I wanted to introduce
  35. 1:11the capability to actually track the
  36. 1:13books that I read and list them on this
  37. 1:16site. So somehow I want to embed that
  38. 1:18information in maybe like a separate
  39. 1:20page. This got inspired, by the way, by
  40. 1:22Molly White's book list. Molly is a
  41. 1:24fantastic writer. Check out her site at
  42. 1:26mollywhite.net. But if you look at her
  43. 1:29book page, this is where she documents
  44. 1:31all the books that she is reading, which
  45. 1:33is kind of cool. Like you you see that
  46. 1:35this kind of track list of items that
  47. 1:38you might discover, new books that you
  48. 1:39like, right? So, this is great. I wanted
  49. 1:41something very similar. And for that,
  50. 1:45I'm going to use specit. So, I have my
  51. 1:48site. We're going to go to VS Code here.
  52. 1:50You'll notice that I have my GitHub repo
  53. 1:53open. It's only typical Hugo content you
  54. 1:56would expect from any Hugo website. Like
  55. 1:58nothing here is specific to my blog,
  56. 2:00right? Like I have my config files again
  57. 2:01as any Hugo site has. It's just TOML. My
  58. 2:05content with all the index pages, blog
  59. 2:07pages, they're just markdown files.
  60. 2:09Again, not a lot of magic here. Themes,
  61. 2:12this is where my modified Congo mod
  62. 2:14lives. And I can modify different
  63. 2:16layouts and styles. And it's a package
  64. 2:18JSON because it's a node node managed
  65. 2:20theme. So I can actually go in and
  66. 2:22modify it and rebuild it. And that's
  67. 2:24kind of it, right? But nonetheless, like
  68. 2:26there's a lot of stuff that's defined
  69. 2:28here. Like there's also like layouts
  70. 2:30that you can track. There's all sorts of
  71. 2:32short codes that I've introduced and
  72. 2:33partials and it's just one of those
  73. 2:36things that you have to always be in the
  74. 2:39know about the things where they are,
  75. 2:41how they change, and how to change them
  76. 2:44to introduce any new functionality. So
  77. 2:46today we're going to experiment with
  78. 2:47specit and we'll try to add a reading
  79. 2:49list to our project. So for that I'm
  80. 2:52going to jump back here to our CLI to
  81. 2:56our terminal. We're going to use our
  82. 2:58specify CLI and I'm going to use the d-
  83. 3:02here command to actually bootstrap it
  84. 3:04directly into my project folder without
  85. 3:06me specifying a project name because I
  86. 3:08can do this. So we're going to use here
  87. 3:10and it's going to warn me that's going
  88. 3:12to overwrite existing files and I'll say
  89. 3:14sure, yeah, that's fine. There's not a
  90. 3:15lot there that needs to be overwritten.
  91. 3:17I'm going to use copilot with
  92. 3:19PowerShell, of course. And now it's
  93. 3:22done. I have the view of my slash
  94. 3:23commands here that you might already be
  95. 3:25familiar. The there's a constitution,
  96. 3:26specify, clarify, plan, task, analyze,
  97. 3:28and implement. We're kind of bloating
  98. 3:30the command list there. But I'll show
  99. 3:31you in a new release of CISFY soon of
  100. 3:34how this actually can be separated a bit
  101. 3:36more cleanly. But if we look at the
  102. 3:38GitHub desktop app here because that's
  103. 3:40what I used for diffing and to see like
  104. 3:42what changed.
  105. 3:44Nothing here is new. We have the
  106. 3:47prompts. We have our memory which is the
  107. 3:49constitution. We have our helper scripts
  108. 3:51and templates. And if I go to VS Code,
  109. 3:53you'll see this as well. Right? If I
  110. 3:55just collapse on these folders, you'll
  111. 3:56see that the GitHub folder where I had
  112. 3:58my workflows for GitHub actions is still
  113. 4:00there. But now I have a prompts folder
  114. 4:03and now I have a specify folder with the
  115. 4:06memory scripts and templates stuff
  116. 4:08you've seen before. So let's try and
  117. 4:11define the constitution first. And for
  118. 4:12this I'm going to use sonnet 4 because
  119. 4:14it's the model that I use for a lot of
  120. 4:16the coding. I will say that depending on
  121. 4:20the context you might want to iterate
  122. 4:23with different models. You might want to
  123. 4:25try GPD5. You might try Gemini 2.5. And
  124. 4:29you might be even try a local model.
  125. 4:31Maybe you're using Llama. It is helpful
  126. 4:34to go and experiment with different
  127. 4:36variations to see what the output is
  128. 4:38because the output can be varied. I'll
  129. 4:41say depending on the model that you
  130. 4:43choose. And some of the models, as you
  131. 4:45saw in other videos, can be overeager.
  132. 4:46Some of them can be a little bit more
  133. 4:48restrained and they're going to be
  134. 4:50waiting for your input to go and clarify
  135. 4:52things. So this is where it's helpful to
  136. 4:53get the experimentation going. For me,
  137. 4:55Cloud Sonnet 4 is typically the model
  138. 4:57that I choose to iterate on a lot of
  139. 4:59these things. But now let's go to the
  140. 5:02implementation. So for this, I'm going
  141. 5:06to switch back to VS Code. And inside VS
  142. 5:08Code, I'm going to start by defining the
  143. 5:10constitution. So here, constitution.
  144. 5:14And we already know what the
  145. 5:15constitution for this should be. It's a
  146. 5:17static site
  147. 5:20with no frameworks.
  148. 5:22whatsoever.
  149. 5:26This is built with Hugo.
  150. 5:31There is a theme in the themes folder.
  151. 5:37Always use that for styling.
  152. 5:42Even if adding new styles, which is
  153. 5:44critical because sometimes we might want
  154. 5:46to add new styles that do not exist in
  155. 5:47the theme.
  156. 5:51All right,
  157. 5:53let's see what else should we encode in
  158. 5:55the constitution. I think we should also
  159. 5:56mention that this uh always
  160. 6:00has to be without any extra
  161. 6:01dependencies. No extra dependencies
  162. 6:05at any point.
  163. 6:08No package.json or any other themes
  164. 6:12or components, right? Because I want the
  165. 6:16site to be exactly as it is right now.
  166. 6:18like I'm not rearchitecting the entire
  167. 6:19thing. It's an existing project. It
  168. 6:21works. I like it. Keep it that way. So,
  169. 6:24I'm going to go and let sonnet run and
  170. 6:27see if you can get a good constitution
  171. 6:29here. And the important part about the
  172. 6:32constitution definition is that you have
  173. 6:35to check it manually as well to make
  174. 6:37sure that it actually reflects the
  175. 6:39things you want to see there. Because in
  176. 6:41my experiments, what I've seen happen
  177. 6:42sometimes is you're going to end up at a
  178. 6:44constitution that says all your content
  179. 6:46is genuine and written by humans. Like,
  180. 6:48yeah, I know everything on my blog is
  181. 6:51actually written by me. I don't use AI
  182. 6:53to write content. I don't use AI for
  183. 6:55drawing or anything like that. Like to
  184. 6:57me, those things are irreplaceable by
  185. 6:58AI. What that means in practice is that
  186. 7:01I do not want those encoding
  187. 7:03constitution because they have nothing
  188. 7:04to do with the actual project. My actual
  189. 7:06project is code. It's the website. It's
  190. 7:08the infrastructure. I'm not asking it to
  191. 7:10go and write content. We're not using AI
  192. 7:12to write content. We're using AI to help
  193. 7:14us build out the code and the
  194. 7:16infrastructure around the site that I'm
  195. 7:17building. So you have to check the
  196. 7:19constitution that's being generated to
  197. 7:20make sure that it actually reflects the
  198. 7:22things that you care about when you're
  199. 7:25iterating on your project. So now let's
  200. 7:27take a look at what sonnet 4 has
  201. 7:30produced for our constitution.
  202. 7:34All right. So there is a bunch of
  203. 7:35changes being made. So I see my
  204. 7:36denomarks blog constitution. Great. It's
  205. 7:39It's always good to be reminded what
  206. 7:41this is about.
  207. 7:42All right.
  208. 7:44Static side generator only. Okay, that's
  209. 7:46reasonable. Hugo must be the sole built
  210. 7:48tool. Yeah. Yep. Absolutely. That makes
  211. 7:51sense. Theme based styling must ex Yep.
  212. 7:55That makes perfect sense. Content first.
  213. 7:59Mhm.
  214. 8:01Looks right. Zero external dependencies.
  215. 8:07Okay. Yep, that also makes sense to me.
  216. 8:10Performance and accessibility first.
  217. 8:12All right. Yeah,
  218. 8:16that makes sense. Accessibility makes
  219. 8:18sense. So, all these things make sense
  220. 8:20to me. Like looking at just these
  221. 8:21constraints like that seems reasonable
  222. 8:23for the site that we're building. And we
  223. 8:26also see some content standards here.
  224. 8:28Semantic HTML, perfect metadata,
  225. 8:31autonomy system, governance. Okay. All
  226. 8:35right.
  227. 8:37Great. So, this looks good. I think I'm
  228. 8:42going to go ahead and just keep it as
  229. 8:44is. This seems like the right strategy
  230. 8:48for what we're trying to do. And the
  231. 8:49Constitution again is going to be
  232. 8:50applicable to the entirety of the
  233. 8:52project. It's not focused on just one
  234. 8:54feature or a bug fix. Constitution is
  235. 8:58for everyone. So, we're going to keep
  236. 9:00this and say this is good. And I'm going
  237. 9:02to go ahead actually and yeah, actually
  238. 9:05it's already saved because I keep ke
  239. 9:07kept it. All right, so we're good. Now
  240. 9:10it's time for us to define our very
  241. 9:13first specification.
  242. 9:15So for this, I'm going to use the /
  243. 9:16specify command. And this is where, as I
  244. 9:19mentioned before, it's important to be
  245. 9:22very concrete about what you're trying
  246. 9:24to do. And before we do this, I could
  247. 9:27actually show you that my project builds
  248. 9:30so that we're not hypothesizing about
  249. 9:33the fact that oh, like you're you're
  250. 9:36clear, not seller. Uh it's not just
  251. 9:38about me showing you something that's
  252. 9:40like, oh, this magical thing is going to
  253. 9:42run eventually. I'm I'm in my blog
  254. 9:43folder. I'm going to go to CD Dennis
  255. 9:47Dell because this is the nested folder.
  256. 9:49And here I'm going to do Hugo
  257. 9:52server and then
  258. 9:55I think the D parameter is correct.
  259. 9:57Okay. And we'll see that this actually
  260. 10:00renders my website. This is the local
  261. 10:03copy of the website that I want to be
  262. 10:04able to iterate and test. It's a
  263. 10:06localhost 1313. So I'm just going to do
  264. 10:08this and we're going to go to the
  265. 10:10browser. And there we go. Local host
  266. 10:121313. I'm running this locally. So all
  267. 10:14of this content here is on my machine.
  268. 10:17Right. Right. So if I just scroll
  269. 10:18through this and some of this content
  270. 10:19loads from the CDN for the record like
  271. 10:21the the the the images, the photos that
  272. 10:23you see here, this is CDN based, but the
  273. 10:26content itself and the site runs
  274. 10:28locally. So this is great. I now have my
  275. 10:31local version. This is dendev blog which
  276. 10:33is remote. So we're going to minimize
  277. 10:34this. We don't need it. And we're going
  278. 10:36to cancel out of this because we don't
  279. 10:38need this either.
  280. 10:40Let's get back to VS Code. Now we're
  281. 10:41defining the specification for this new
  282. 10:43feature that we want for a website. So,
  283. 10:46I'm going to be very explicit about what
  284. 10:48I'm doing and
  285. 10:51going to get back to you looking at me
  286. 10:53once I type all of this out. A few
  287. 10:56moments later.
  288. 10:58>> Okay, so I wrote quite a bit here, but
  289. 11:01the gist of it is I am defining the
  290. 11:03specific requirements for my books page.
  291. 11:05I want to make sure that I'm building a
  292. 11:07reading list page. I want to make sure
  293. 11:09that it has a books route, right? This
  294. 11:11is where on my site I can actually see
  295. 11:13them. I want to make sure that the data
  296. 11:15is populated from a config folder
  297. 11:17similar to other TOML files, right? Like
  298. 11:19I want to be modifying TOML files and
  299. 11:20when I build the site with Hugo, I
  300. 11:23actually see those books render. Notice
  301. 11:24something that that that is key here,
  302. 11:27right? Like I I am thinking through a
  303. 11:28lot of these constraints and these might
  304. 11:30seem like constraints that like well you
  305. 11:33kind of have to know what you're doing.
  306. 11:34If I know how I want to maintain the
  307. 11:37books on my site, that's what I need to
  308. 11:40do. Like I don't just vibe code this
  309. 11:42stuff. like I have inherent knowledge
  310. 11:45about the infrastructure, about the
  311. 11:46tooling, the things that I have and I
  312. 11:49want them to work a certain way and I'm
  313. 11:50using AI to steer it in that direction.
  314. 11:52That's the superpower. So again, not
  315. 11:55negating the need for knowledge. People
  316. 11:56think that AI is going to just
  317. 11:58completely destroy the need for
  318. 11:59engineering knowledge. It's not true.
  319. 12:00You still need to know what you're
  320. 12:01doing. Uh you're not going to be
  321. 12:02introducing security vulnerabilities
  322. 12:04with vibe coding. Um that's for sure. So
  323. 12:08one of the things that also I'm defining
  324. 12:10here is again the what and the why.
  325. 12:11Remember the specify command is all
  326. 12:13about defining the specification. These
  327. 12:15are the requirements for this. We're not
  328. 12:17necessarily focusing on a technical
  329. 12:18stack. This is not yet the the pieces
  330. 12:21that need to be um I want to say like
  331. 12:23defined at this stage. We're just
  332. 12:25defining the experience. So this is good
  333. 12:28enough. Let's go and run it with Cloud
  334. 12:31Sonnet 4 and have it run the
  335. 12:33specification command. This is going to
  336. 12:35bootstrap a new branch. remember because
  337. 12:37when we create a new feature is going to
  338. 12:38actually go in and uh set this up for
  339. 12:41us. Let's run the script
  340. 12:44and the branch is created. We have our
  341. 12:47new specs folder with a branch name that
  342. 12:50by the way it I'm looking at changing
  343. 12:52this. I don't like the fact that it's a
  344. 12:53001 I want to like that means nothing to
  345. 12:55me like I want to what what does it
  346. 12:57actually mean? Uh so that's going to
  347. 13:00improve but in the meantime it's going
  348. 13:02to spin up the the new branch. So now
  349. 13:04we're operating in a in a new isolated I
  350. 13:07want to say uh environment that doesn't
  351. 13:09impact my main blog. I can actually
  352. 13:10safely check this in and see how it
  353. 13:13renders uh online or even locally
  354. 13:15without modifying the core side and
  355. 13:17breaking it on accident because we
  356. 13:19messed up some template file somewhere
  357. 13:20for for the theme. So uh while it's
  358. 13:23working you'll also notice here that in
  359. 13:25my now I'm on the 001 I want to in my
  360. 13:28GitHub desktop client right? So I'm
  361. 13:30clearly using a new branch and I can
  362. 13:32safely commit these things because now I
  363. 13:35can just say like yep this is the
  364. 13:36constitution these are the prompts I
  365. 13:38want to and blah blah blah whatever else
  366. 13:40I want to define here. So we're going to
  367. 13:41wait for the the spec to actually be
  368. 13:42defined. We'll see the spec file and
  369. 13:45we'll see the details pop up here in our
  370. 13:49filled out template. So we have our
  371. 13:50prompt and then all the details that are
  372. 13:53coming in and being filled out
  373. 13:55dynamically for us. The nice thing about
  374. 13:57this is again I gave it the prompt. I
  375. 14:00asked it to build a very specific kind
  376. 14:02of experience and that that experience
  377. 14:04is being defined for me in a PRD
  378. 14:06standard format because we want to make
  379. 14:09sure that if you're writing specs that
  380. 14:10are consistent and somebody reading them
  381. 14:12because specs are still good for humans.
  382. 14:14Like this is not just for AI. This is
  383. 14:15not just for computers. Specs are good
  384. 14:17for humans too. They can go here, read
  385. 14:19this and see how this works. So we're
  386. 14:21going to keep this and let's take a look
  387. 14:22here at what exactly is happening. So,
  388. 14:25we have our user scenarios. So, I'm on a
  389. 14:27blog homepage. When I navigate to books,
  390. 14:29then I see a pageent grid of books with
  391. 14:31cover images, titles. Okay, that makes
  392. 14:33sense. Mhm. Yep. A lot of these
  393. 14:36requirements make sense.
  394. 14:40Yep. Makes sense. All these things make
  395. 14:42sense. So, if we look at the functional
  396. 14:44requirements, so must display a reading
  397. 14:46list, page accessible books URI. Okay.
  398. 14:49Must books data. Yep. Must display books
  399. 14:52in a consistent grid. Makes sense. Book
  400. 14:54cover images rounded corners. Again, all
  401. 14:57these requirements are custom for what I
  402. 14:59want the page to look like.
  403. 15:01Book links must not create individual
  404. 15:03book detail pages because I don't want
  405. 15:05them for now. Like I I thought for a
  406. 15:06second I was like, well, maybe I want to
  407. 15:08have like a book overview. Maybe I do
  408. 15:09like a book review for a certain title.
  409. 15:11But that that's overkill. Like for now,
  410. 15:13I just want to have a reading list. Must
  411. 15:15handle responsive design across
  412. 15:17different screen sizes. That all of this
  413. 15:19makes sense. Now, the one requirement
  414. 15:21here that I kind of missed is I want to
  415. 15:23make sure that the actual book list or
  416. 15:27the reading list link is displayed only
  417. 15:29in the footer. And this this can be a
  418. 15:32little of a stretch here, but we'll
  419. 15:34include it anyway.
  420. 15:36I want the the reading listed
  421. 15:42in the footer
  422. 15:46along with other links.
  423. 15:49And let's take a look at what other
  424. 15:50links I have in a footer. So if I go
  425. 15:52here to my my website, you'll notice
  426. 15:54that I have let me just remove myself
  427. 15:56from the view. My tags, workstyle, and
  428. 15:59archives, right? So we want to make sure
  429. 16:01that alongs alongside these tags, work
  430. 16:04style and archive links, I also display
  431. 16:07the book list. So like
  432. 16:16was it how I work or working with me?
  433. 16:17Which one? Which one was it? Work style.
  434. 16:20Work style. That's what it was. And work
  435. 16:22style. This is controlled
  436. 16:28in an existing
  437. 16:30TOML config. And again, notice that I'm
  438. 16:33I'm guiding it specifically to what I
  439. 16:35want it to be within the constraints of
  440. 16:38my site. I don't let it guess. The more
  441. 16:40you let the LLM guess, the more likely
  442. 16:42it's going to go off the rails and do
  443. 16:44something that you did not actually
  444. 16:45want. So now I have a new requirement.
  445. 16:47must add a reading list navigation link
  446. 16:49at the footer alongside existing links
  447. 16:50tags archives work cell via TOML
  448. 16:53configuration that creates a hint for it
  449. 16:55to say if I go and add a link I don't
  450. 16:58actually need to go and rebuild the
  451. 17:01theme and start embedding some links and
  452. 17:03some footer HTML code like none of that
  453. 17:05I have a I have a tunnel config for this
  454. 17:07just just use that okay so this is great
  455. 17:10now I want to clarify I want to spot my
  456. 17:16blind spots
  457. 17:17For that, we're going to use the clarify
  458. 17:19command to go and be quizzed on this
  459. 17:22particular implementation. So, it's
  460. 17:24going to help and identify
  461. 17:25underspecified items relevant to me
  462. 17:28based on the stuff that I'm building.
  463. 17:30So, let's take a look at what the uh LLM
  464. 17:32in this case Cloud Sonnet 4 thinks that
  465. 17:34I might have underspecified.
  466. 17:36And let's see. Pageionation behavior and
  467. 17:39data organization needs clarification.
  468. 17:41All right. How should books be ordered
  469. 17:43on the reading list? Uh-huh. Notice
  470. 17:45right away that like in my initial
  471. 17:47initial prompt I did not actually talk
  472. 17:48about ordering and that's a very
  473. 17:50important one. They should be ordered by
  474. 17:54date finished reading.
  475. 17:57So most recently finished book first.
  476. 18:00Yeah, that makes sense. Yeah. So we're
  477. 18:02going to say a a is what I want. Notice
  478. 18:06again like I I did not think about it in
  479. 18:08the initial spec, but now that I'm
  480. 18:09actually working through the
  481. 18:10requirements here, I was like ah yes,
  482. 18:12that that must be that must be the case.
  483. 18:14I actually do need to embed that. Let's
  484. 18:16see what else is going to ask us. What
  485. 18:17did we not think about when we were
  486. 18:19creating the reading list? The
  487. 18:21pageionation size isn't specified. How
  488. 18:23many books should be displayed per page?
  489. 18:24Uh-huh. Yes, that's a good point because
  490. 18:27for posts, we have a limit, right? If I
  491. 18:29go to my website here and I have my
  492. 18:32sites or my my blog posts, I believe I
  493. 18:35set it to either 10 or 15. I believe
  494. 18:37it's 15. But for us, because we have a
  495. 18:40bunch of books, right? like they're not
  496. 18:43blog posts. We have to pageionate them
  497. 18:45properly. So I want to say 20 books. So
  498. 18:48let's do a C. I want 20 books per page
  499. 18:52and then we're going to pageionate from
  500. 18:54there. All right.
  501. 18:57Let's see what else. What else did we
  502. 18:58not think about? That's why I love this
  503. 19:00process is it allows me to actually
  504. 19:02clarify my thought and then realize that
  505. 19:04I did not have enough coffee today to
  506. 19:06think through all of these things. The
  507. 19:07star rating display format needs
  508. 19:08clarification. How should the stars
  509. 19:10rating be displayed? Visual star icons
  510. 19:12just numeric rating. Visual star icons
  511. 19:14only. No numeric text. H
  512. 19:18I I think just visual star icons is
  513. 19:22fine. Visual actually. Why am I typing
  514. 19:24this? I'll just say a or a and number,
  515. 19:28right? Because four out of five. That's
  516. 19:30fine.
  517. 19:32Okay, let's see what else. I I'm excited
  518. 19:35to see this. And this is by the way
  519. 19:36again the beauty of the process. Let let
  520. 19:38the AI question you. Don't question the
  521. 19:40AI all the time. How should books with
  522. 19:43start date but no finish date be
  523. 19:44handled? Show the topless currently
  524. 19:46reading with special styling.
  525. 19:49I like that. I like that idea. Show the
  526. 19:52top as currently reading.
  527. 19:54Don't display until finished. I I like
  528. 19:57that. I I Let's Let's show the currently
  529. 20:00reading. That's That's a good idea. And
  530. 20:01I think Molly White actually had that
  531. 20:03and I blanked on it when we were
  532. 20:06designing this project. This is great.
  533. 20:08So now the last question that needs
  534. 20:12clarification.
  535. 20:15What will this be? Toml data structure
  536. 20:18validation needs. What should happen
  537. 20:19when the tommo file has invalid or
  538. 20:21missing required data?
  539. 20:24Skip invalid entries. Silent display
  540. 20:26valid. Show error message.
  541. 20:30Error placeholders invalid entries. Hm.
  542. 20:33I think it should be fairly lax. Like
  543. 20:35I'm not if I forget to add like a finish
  544. 20:37date, I just wanted to ignore it. Like I
  545. 20:40don't Yeah, a is fine. All right, I
  546. 20:44think this is good. I think we we we
  547. 20:46actually brought some clarity to the
  548. 20:48specification as a product manager need
  549. 20:51to think about a lot of these scenarios
  550. 20:53and EI helped me think through these
  551. 20:55which is great.
  552. 20:57Again, we're fighting under under
  553. 20:59specifi under specification. We're
  554. 21:01fighting against underspecification
  555. 21:03because that's the way the a lot of
  556. 21:07these models get derailed is you
  557. 21:09underspecify things. Okay. So we have
  558. 21:13this now we can do plan. So plan
  559. 21:17or plan we can say consult the
  560. 21:19constitution. Well it's going to consult
  561. 21:21the constitution anyway but like consult
  562. 21:23the readme for details
  563. 21:26but we have no frameworks.
  564. 21:30do not introduce new ones.
  565. 21:34And we're adding a new template to the
  566. 21:40Hugo based website. So, because for my
  567. 21:43technical plan, like I'm not reinventing
  568. 21:44the wheel here. Like, it's the wheel has
  569. 21:46been invented. It's Hugo. I have
  570. 21:48templates. I just want to make sure that
  571. 21:49we're not reinventing anything new.
  572. 21:51We're adding a new template to the Hugo
  573. 21:53base template website. Um,
  574. 21:56we will not be
  575. 22:00using or writing any tests.
  576. 22:03I don't need these these this is my
  577. 22:04blog. Like I I literally do not care
  578. 22:07about tests for my blog because I can
  579. 22:09just debug this and diagnose this. It's
  580. 22:10not an enterprise app. It's fine if
  581. 22:13tests fail or something else because
  582. 22:15we're going to we're going to tweak that
  583. 22:16later if needed. So, okay, not using any
  584. 22:20using or writing any tests. What else?
  585. 22:22What else should we include in the plan
  586. 22:23here? Um,
  587. 22:25I think this is actually a good good
  588. 22:27good start. If I could spell read me,
  589. 22:30that would be helpful. But I think this
  590. 22:32is a good start. I I don't think this is
  591. 22:34a terrible set of decisions for this.
  592. 22:37And it's going to consult the
  593. 22:38constitution. Okay. So, let's take a
  594. 22:42look what is going to come up with the
  595. 22:43plan. And as with a lot of these
  596. 22:45commands, all of this is an iterative
  597. 22:47process. Like it's going to go ahead and
  598. 22:49create a bunch of artifacts that you
  599. 22:51have seen previously. It's going to be
  600. 22:53the plan. It's going to be the research.
  601. 22:54It's going to be the the data model. But
  602. 22:57you don't need to use all of them. It's
  603. 22:59an again because it's an iterative
  604. 23:01process. You pick and choose the things
  605. 23:02that are relevant for your project and
  606. 23:04the scale of your project. That's the
  607. 23:06most important part because the scale of
  608. 23:07the project can be different. You could
  609. 23:08be writing an enterprise app or you
  610. 23:11could be writing something that is going
  611. 23:13to be completely isolated to just
  612. 23:16yourself. It's a hobby project. It's a
  613. 23:18blog. It's a iPhone app. Right? So for
  614. 23:20those things, the scope is different. So
  615. 23:22the constraints are different. So don't
  616. 23:24feel intimidated by the templates doing
  617. 23:25a lot of things. You can always tweak
  618. 23:26it. You can always cut things that are
  619. 23:28unnecessary. And like in my case, I know
  620. 23:29that the plan for a fact in previous
  621. 23:32applications was always creating a bunch
  622. 23:34of stuff for tests. And I don't want
  623. 23:36tests here. I want this to move fast and
  624. 23:38I want it to just run and I want to see
  625. 23:40my beautiful book list on my website.
  626. 23:44And that's that's it. So, we're going to
  627. 23:46wait for our agent to go in and finish
  628. 23:50the work here and get us to exactly
  629. 23:52where we need to be.
  630. 23:54>> Don't let your dreams be dreams.
  631. 23:57>> Okay, so we now have a plan and that is
  632. 24:01great. So, I have my plan file. I have a
  633. 24:03bunch of other metadata documents here
  634. 24:05that are embedded that are maybe not as
  635. 24:07relevant here, but we'll check them out
  636. 24:08anyway. So, we're going to keep the
  637. 24:09changes. We're going to take a look
  638. 24:11here. We have the plan file that
  639. 24:13contains the details of our
  640. 24:14implementation. Right. So we have our
  641. 24:16constitutional checks static site
  642. 24:18themebased styling. Yep. Makes sense.
  643. 24:20Content first. Yep. Zero external
  644. 24:22dependencies. All right. And then we
  645. 24:24have the summary, right? The
  646. 24:26pageionation. It outlines some of the
  647. 24:28the actual context of the research done.
  648. 24:32So it has the config the default where
  649. 24:33the Hugo configuration is. It outlines
  650. 24:36the format of my blog. It actually sees
  651. 24:39the content. So it has like oh you have
  652. 24:40the theme you have the templates the
  653. 24:41layouts static and uh this is where the
  654. 24:43stuff is generated. So great it actually
  655. 24:45knows the structure. The fact that it
  656. 24:46has a structure at hand means that it's
  657. 24:49probably going to generate the right
  658. 24:50thing. I I am I am hopeful here that
  659. 24:52this is going to go the right way. So uh
  660. 24:55let's see generate contract test from
  661. 24:57contracts one test per file per
  662. 24:58endpoint. Like a lot of these things uh
  663. 25:00yeah I don't want to do that. So here
  664. 25:05because as I mentioned like this this is
  665. 25:07a tweakable project. We're going to say
  666. 25:09remove anything to do with tests
  667. 25:13from the plan. We do not want tests
  668. 25:18for this project
  669. 25:20because I don't want it to just overkill
  670. 25:22this with a bunch of stuff that I did
  671. 25:23not ask it to do. So, we're going to ask
  672. 25:25it to remove test related stuff from the
  673. 25:27plan. See, human in the loop. You still
  674. 25:29have to do this stuff. So, let's see.
  675. 25:32Generate template contracts from
  676. 25:34functional requirements. Hugo template
  677. 25:35specification. Yep, makes sense. output
  678. 25:37template contracts to contracts. Um,
  679. 25:41sure. Okay. Yeah, maybe. Maybe.
  680. 25:46And then I remove some test stuff.
  681. 25:50Yeah. Okay. Yeah.
  682. 25:53Make test pass. Yeah. We're just like
  683. 25:55test is just too much. We don't want
  684. 25:57test right now. We're we're kind of
  685. 25:59specking this in a way that fits my blog
  686. 26:01scenario. My blog has never used tests
  687. 26:03for better or for worse. So, let's take
  688. 26:05a look. So, um I'm going to actually
  689. 26:07take do do a very naive thing and I'm
  690. 26:10just going to search for test and let's
  691. 26:13see phase five validation execute quick
  692. 26:15start manual testing performance. All
  693. 26:16right, that that's fair. That stuff can
  694. 26:18can live there. No test and test per
  695. 26:19user specification. Okay, manual testing
  696. 26:23and validation. All right, so I think
  697. 26:24we're good. It did not actually
  698. 26:25overprovision this with a bunch of test
  699. 26:27related stuff. Let's see what what did
  700. 26:28it put in contracts uh configuration.
  701. 26:33Ah, look at that. It actually
  702. 26:34understood, remember the links, the toml
  703. 26:36files. It actually pulled this in. It's
  704. 26:38like, okay, this is how we're going to
  705. 26:39introduce this. Okay. Yeah. Nice, nice,
  706. 26:41nice, nice, nice. Books index. Okay.
  707. 26:44Yep. Yep. That's fair. So, it actually
  708. 26:46is going to introduce a new content
  709. 26:48page. The same way I have my archives,
  710. 26:49by the way, like right like you see this
  711. 26:51archives. If you look here, it has a
  712. 26:53custom layout that is used for archives.
  713. 26:55So, it did the same for books. It
  714. 26:57basically said like, oh, you're going to
  715. 26:58have a books. I'm going to have an
  716. 26:59index.md in the content folder, and this
  717. 27:01is where all the content is going to go.
  718. 27:03So just a template
  719. 27:06um
  720. 27:08reading directory structure uh for the
  721. 27:12required directory structure.
  722. 27:15This is where we can clarify because I'm
  723. 27:17reading the plan.
  724. 27:22I like the approach of the markdown file
  725. 27:24that we can then apply a template layout
  726. 27:28to.
  727. 27:30Right? because like that's that's what
  728. 27:33the beauty of this is. I like having a
  729. 27:34markdown file. I keep repeating that
  730. 27:36this there's a beauty in this, but there
  731. 27:38there really is a kind of a a nice
  732. 27:41approach to this process because it
  733. 27:43understands. So understand this might be
  734. 27:45a stretch for what we're actually doing
  735. 27:46here, but it actually has the context of
  736. 27:50the codebase that I'm working on and
  737. 27:52then it applies that context to the
  738. 27:54things that I'm working on throughout
  739. 27:56this new feature. So I'm going to keep
  740. 27:58this change and okay to clarify some
  741. 28:01things. Okay. So now that we have the
  742. 28:04plan, let's break this down into tasks,
  743. 28:08right? Because we we've we've looked at
  744. 28:10the plan. There's a bunch of stuff
  745. 28:11related to it. Let's take a look at what
  746. 28:14it sees as tasks. So we're going to do
  747. 28:15tasks and we don't need anything else.
  748. 28:17So, we're just going to run tasks
  749. 28:19because I want to see based on the
  750. 28:21details that we've provided what set of
  751. 28:25things it needs to go and build for us
  752. 28:28to be able to see the changes and see
  753. 28:30this book list that I want on my site.
  754. 28:33I'm in control of the process. I'm in
  755. 28:35control of the end to end experience
  756. 28:38here. And like I've had these questions
  757. 28:41asked on YouTube, on uh GitHub as It's
  758. 28:44like, well, if you do this one shot of a
  759. 28:46spec, one shot of a plan, and the plan
  760. 28:48is not right, does it mean I just have
  761. 28:51to redo the entire process from scratch?
  762. 28:53No, absolutely not. That's why they're
  763. 28:54markdown files. You go in, you change or
  764. 28:56you ask the LLM to change it, and then
  765. 28:59make sure that is reflected in the plan.
  766. 29:00You're operating on a branch. You're
  767. 29:02operating in an isolated specs folder
  768. 29:04that is dedicated for that project.
  769. 29:07That's it. Like, just make the change.
  770. 29:08You don't need to reset anything. You
  771. 29:10need to rebuild a bunch of stuff. So,
  772. 29:12it's it's kind of neat. I like I like
  773. 29:14this lightweight approach to it. It's
  774. 29:15like I'm not necessarily bound to the
  775. 29:17the first generated spec to be the
  776. 29:19source of truth forever. So it generated
  777. 29:22a task. Let's take a look. I'm going to
  778. 29:24scroll here so you can see that I'm
  779. 29:25going actually going to the tasks file,
  780. 29:27right? It's like I'm going to hide
  781. 29:29myself again. So we see the task file.
  782. 29:32Let's keep it. Let's take a look at the
  783. 29:33tasks. So it has some items here. Let's
  784. 29:35look at the sections. So I'm curious
  785. 29:37because this is what the breakdown is.
  786. 29:38So create data directory.
  787. 29:41Create books data file. Then I sell data
  788. 29:43books toml with sample book entries per
  789. 29:47data model MD structure. I think this is
  790. 29:49where
  791. 29:52yeah I think similar to this if it's
  792. 29:55going to I'm just cross-checking the
  793. 29:57folder. So we have my config default and
  794. 29:59maybe I'm going to have data here which
  795. 30:02I think is reasonable. I think that's a
  796. 30:04hug like it's an ideatic Hugo construct.
  797. 30:06I think that's fine. I think that should
  798. 30:07be okay. and create book data file books
  799. 30:11tunnel simple book entries per data
  800. 30:12model. Yep. Create book content
  801. 30:14directory content book. So it's going to
  802. 30:16go into here. Content books with a
  803. 30:19index.mdg. Yep. Hugo template and
  804. 30:22partials. Create bookcard partial.
  805. 30:25Uh yep. This makes sense. I think this
  806. 30:27is reasonable. Styling configuration
  807. 30:30navigation update footer menu
  808. 30:32configuration. Yep. Test Hugo build
  809. 30:34process. Hugo server to verify books
  810. 30:36page loads.
  811. 30:38validation and polish patchworks.
  812. 30:41Yeah.
  813. 30:44Okay. This this looks reasonable. This
  814. 30:47looks reasonable to me. Uh I want to now
  815. 30:50run analyze
  816. 30:52just to see if there's any kind of
  817. 30:54constitutional violations here and the
  818. 30:56the the cross of the documents that we
  819. 30:58have here. So we have task, we have a
  820. 30:59plan, we have the spec. I want to know
  821. 31:01if there's anything here that stands out
  822. 31:02that's like critical. So we're going to
  823. 31:05rerun this. There's a helper script that
  824. 31:08just gives me the path for the metadata
  825. 31:09documents that exist. And we're going to
  826. 31:11see what is out there that might be
  827. 31:14conflicting with the specification that
  828. 31:17we established in the constitution that
  829. 31:18we established for this project. Again,
  830. 31:19it sounds looking at the task list. It
  831. 31:22sounds reasonable. This sounds like it's
  832. 31:23a decent enough set of things to cover
  833. 31:27and I'm going to leave it at that. But
  834. 31:30maybe I'm missing something because
  835. 31:31again, humans are not perfect. Sometimes
  836. 31:33you're just going to read through this
  837. 31:34and you were tired and like me did not
  838. 31:36have enough coffee and all of a sudden
  839. 31:37you're looking at potential issues. So
  840. 31:40let's take a look at what the
  841. 31:41specification analysis like. There's a
  842. 31:42severity. So medium, right? And the spec
  843. 31:45says config data directory but plan
  844. 31:46consistently uses data standardize and
  845. 31:49data location standard. Uhhuh. Okay.
  846. 31:51Yeah, that makes sense. Standardize on
  847. 31:53data location. Hugo standard. Great.
  848. 31:55Yeah, this is what I mentioned before
  849. 31:56because I was looking at the folder here
  850. 31:57and I noticed that it was saying oh
  851. 32:00Dennisell content, right? And Dennisell
  852. 32:04uh the what is the configuration, right?
  853. 32:05Like the the config file was uh for
  854. 32:08data. Oh, there we go. There's Dennisell
  855. 32:10data and there's a config and I
  856. 32:13initially made that assumption like oh
  857. 32:15it's going to go in the config file
  858. 32:16because that's that's where all the TOML
  859. 32:17files are. But it correctly identified
  860. 32:19the fact that it's a Hugo standard. Max
  861. 32:22title length or truncation behavior in
  862. 32:24tasks. Add specific Hugo asset build
  863. 32:26instructions.
  864. 32:28Mhm.
  865. 32:30Add task to test empty missing data
  866. 32:32file. Defer to existing theme break
  867. 32:35points.
  868. 32:37You know some of these things are I
  869. 32:39think are valid.
  870. 32:41Like I I think this this might be
  871. 32:44reasonable.
  872. 32:46no constitutional viol violations.
  873. 32:48There's improvements, right? So, I want
  874. 32:49to do like the I1 and A1.
  875. 32:55Like these to me stand out as things
  876. 32:57that probably I should cover and the
  877. 32:58rest of them are like, eh, it's it's
  878. 33:00fine. So,
  879. 33:03A1 and I1, let's address them
  880. 33:09for truncation.
  881. 33:14Actually, let's address them. Let's use
  882. 33:16standard Hugo conventions
  883. 33:19and also
  884. 33:21and for truncation
  885. 33:26going to
  886. 33:29use standard
  887. 33:31or longer titles
  888. 33:34beyond the width.
  889. 33:43And notice that here I tell it to update
  890. 33:45spec plan and task as appropriate
  891. 33:47because I want to make sure that this
  892. 33:48change is properly reflected and
  893. 33:50captured in the specification because as
  894. 33:53I'm iterating with the AI, as I'm
  895. 33:55working with the LLM on this tasks, I
  896. 33:59want to make sure that whatever
  897. 34:00decisions I made, they're actually
  898. 34:02encoded back into the spec. Now there of
  899. 34:05course could be an easier way where I
  900. 34:07can just go through these tasks and then
  901. 34:08at the end of it say can you please go
  902. 34:12and summarize this and introduce this
  903. 34:14into the spec. But for now it's easier
  904. 34:16for me to just look at this and as I go
  905. 34:18through the process ask it to go and
  906. 34:21just plug it in into the spec because I
  907. 34:22know it's going to happen. So what means
  908. 34:24in the for me in the future is that if I
  909. 34:27decide to ever rebuild this book page
  910. 34:29because I moved my site from Hugo to
  911. 34:31some new static site generator that uses
  912. 34:34quantum computing in the future, I can
  913. 34:36just reuse the exact same spec and have
  914. 34:38my past decisions be reflected in that
  915. 34:41document. So I don't have to redo this
  916. 34:43from scratch over and over and over
  917. 34:44again because again I I look at the
  918. 34:46specification as a living document that
  919. 34:48encodes the specific feature capability
  920. 34:50in this case our book list for my site.
  921. 34:53It's completely detached from the
  922. 34:54implementation of the site because I
  923. 34:56could be using Hugo or I might not be
  924. 34:57using Hugo. I might need to rewrite this
  925. 35:00in a year or two or five or 10 and I can
  926. 35:02use the exact same spec to get the exact
  927. 35:05experience that I want. Even though that
  928. 35:07experience might look a little different
  929. 35:08or use different tooling underneath. So,
  930. 35:11for now, we're going to wait for the
  931. 35:13updates to propagate and get back to
  932. 35:16coding in just a little bit.
  933. 35:22do it.
  934. 35:23>> Okay, it finished the work. It has a
  935. 35:26bunch of changes here that we can take a
  936. 35:27look at. So, if we look at the spec,
  937. 35:30it describes some of the conventions. It
  938. 35:32updated the file. Great. It has our
  939. 35:34tasks. Yep. Book data. It's a Hugo
  940. 35:37standard directory. Makes sense. Makes
  941. 35:39sense.
  942. 35:41Styling. Okay. Ellipses for long titles.
  943. 35:44Yep. It it encoded the requirements that
  944. 35:45we wanted. So, let's keep the changes.
  945. 35:47This sounds great. Let me commit and say
  946. 35:50initial spec changes because this is
  947. 35:54what it is. We have our 26 files. We're
  948. 35:56going to commit here to our branch.
  949. 35:57We're going to publish the branch and
  950. 35:58push it
  951. 36:00not to production just yet because we
  952. 36:02are not yet ready get these things out
  953. 36:06the door. We need to we need to actually
  954. 36:07get the implementation going. So we're
  955. 36:09going to go here and now is the moment
  956. 36:12of truth. We're going to run implement.
  957. 36:15Going to be the most long riding command
  958. 36:16here. And once I start this, there's no
  959. 36:18going back. We're going to have this
  960. 36:20book page whether we want it or not. So
  961. 36:23there we go. Sonnet implement us the
  962. 36:25book page.
  963. 36:31[Music]
  964. 36:37All right, let's take a look here. So
  965. 36:39I'm going to keep the changes, right?
  966. 36:41And it made a bunch of them. If you look
  967. 36:43at the the diff, right? Right. So,
  968. 36:46there's the menus. They change the
  969. 36:47menus. Great. Here's the index. Yep.
  970. 36:50Books has books.css
  971. 36:54list, bookcard, a bunch of CSS files,
  972. 36:56and updated our task list. But the one
  973. 36:59thing that it did not do is actually it
  974. 37:01did not rebuild a theme. So, I'm going
  975. 37:02to go ahead here in my PowerShell. And
  976. 37:05remember, because this is iterative,
  977. 37:06we're learning as we go, sometimes it's
  978. 37:08going to produce things that are not
  979. 37:09correct, and that's fine. So, we're
  980. 37:11going to be seeing something go either
  981. 37:12horribly wrong or extremely well. Only
  982. 37:16those two options. So, now I'm going to
  983. 37:18run CD. Actually, I'm already in the
  984. 37:20folder. So, I can just do a Hugo server
  985. 37:24now that we actually have the things
  986. 37:26done and let's see what it produced.
  987. 37:29Let's take a look at the actual outcome
  988. 37:33of this experiment. The only way to do
  989. 37:35this is to build the site with Hugo. So,
  990. 37:36we're going to go here to the browser.
  991. 37:38Gonna scroll all the way to the bottom.
  992. 37:40We see the reading list which is kind of
  993. 37:42like what we expected. We see currently
  994. 37:44reading. Okay. Some of the things. All
  995. 37:48right. Like I see books. I don't see
  996. 37:51pages
  997. 37:53and I don't see the grid. Right. So like
  998. 37:55we we have this thing. We have the kind
  999. 37:58of the the the data being populated
  1000. 37:59based on the book data because if I look
  1001. 38:01here and we look at the books tunnel, we
  1002. 38:03have a bunch of them, right? Which is
  1003. 38:06great. It means the data model is bound
  1004. 38:10to the page, but it doesn't render the
  1005. 38:12way we want. It does not actually
  1006. 38:14produce the grid. So, we're going to go
  1007. 38:15back to VS Code. We're still using Cloud
  1008. 38:17Sonnet 4. Actually, I think that's fine.
  1009. 38:19And we'll mention that we do not
  1010. 38:21actually have the grid. And then we're
  1011. 38:24going to continue to iterate. We're
  1012. 38:26going to tell the AI what to do to bring
  1013. 38:29this up to the style and format that we
  1014. 38:31want. And at the same time, we'll make
  1015. 38:33sure that all that is being encoded back
  1016. 38:35to the specification. So let's iterate
  1017. 38:37on this a little bit.
  1018. 38:42[Applause]
  1019. 38:43[Music]
  1020. 39:03All right. So, we finished the
  1021. 39:05iteration. We've done quite a bit of
  1022. 39:07work and now I think it looks good. I
  1023. 39:09actually think that the work that's been
  1024. 39:11done here to iterate with Claude Sonnet
  1025. 39:144 and GBD5 I, by the way, I switched
  1026. 39:16between them just to get it to land on a
  1027. 39:19good place. And like I said, sometimes
  1028. 39:21you have to just test different models.
  1029. 39:23Uh, it landed on this. So, I have my
  1030. 39:26reading list here. And I'm going to
  1031. 39:27again remove myself because you do not
  1032. 39:29need to see my face to see the design.
  1033. 39:31So, uh, it fits the design of my blog,
  1034. 39:34which is as expected. I wanted that to
  1035. 39:36be this way. We now have this section
  1036. 39:39for currently reading titles. And these
  1037. 39:41are obviously fake titles. I'm not
  1038. 39:42actually reading any of these books
  1039. 39:43right now, but it gives you an idea for
  1040. 39:46what it would look like. I now
  1041. 39:47introduced a badge here that says must
  1042. 39:50readad. So, for books that I think like,
  1043. 39:52wow, this is great. Everybody should
  1044. 39:54read this. The books are going to be
  1045. 39:55labeled like that. So, we have this
  1046. 39:57consistent finished books headings with
  1047. 39:59a counter of titles and as well other
  1048. 40:01books. We have a nice rating display
  1049. 40:04here at the bottom. I love this just
  1050. 40:06stars and a counter the days when I
  1051. 40:08started and finished. And they're
  1052. 40:10presented in these nice little uh pill
  1053. 40:12format that I would expect from modern
  1054. 40:14websites. So, I I actually really like
  1055. 40:16this and I actually gave up on the idea
  1056. 40:20of pageionation. So this is something
  1057. 40:22that initially I was thinking about that
  1058. 40:23pageionation would be kind of nice but
  1059. 40:25then the more I thought about it the
  1060. 40:27more I realized like you know no I don't
  1061. 40:30think pageionation is actually what I
  1062. 40:32want because
  1063. 40:34I feel like for a lot of these scenarios
  1064. 40:37I'd rather get it on one page and
  1065. 40:40because I'm also using TOML and I
  1066. 40:41decided to go down the route of TML I
  1067. 40:44would have to implement some a bunch
  1068. 40:45custom JavaScript and I want to minimize
  1069. 40:47custom JavaScript on my site I want to
  1070. 40:48make sure that it just it's fast it's
  1071. 40:51flexible and it just runs as a static
  1072. 40:52site without too many JavaScript
  1073. 40:54dependencies. So that is the reason why
  1074. 40:56I just says you know what pageionation
  1075. 40:57maybe in the future like I don't really
  1076. 40:59care about it for now. Oh. Um, we have
  1077. 41:01this nice experience now. I can start
  1078. 41:03populating this with books that I've
  1079. 41:04read. It look at how it did this job.
  1080. 41:07Like it I had the spec. It analyzed the
  1081. 41:09code base. It actually read the readme,
  1082. 41:12the styles, the theming. It
  1083. 41:14contextualized that and bundled it into
  1084. 41:16the specification that I have here. And
  1085. 41:18then this is the output. This is the the
  1086. 41:20content here that I have uh that allows
  1087. 41:22me now to go and iterate in a way that
  1088. 41:27makes sense for this project. it makes
  1089. 41:28sense for this specific iteration of the
  1090. 41:31site. So, uh I'm very happy with how
  1091. 41:34this turned out and I still have my
  1092. 41:35artifacts for my spec and plan. Uh and
  1093. 41:38as I mentioned, as I'm iterating on
  1094. 41:39this, one of the things that I should
  1095. 41:41absolutely do is encode the learnings
  1096. 41:44into the spec. So, we're going to do
  1097. 41:45this now. So, look look at what I'm
  1098. 41:47doing. So based on the conversation,
  1099. 41:53encode the learnings and the experience
  1100. 41:57pieces,
  1101. 41:59not the technical details
  1102. 42:03into spec.md
  1103. 42:07for the current feature. That is
  1104. 42:10important because you have to make sure
  1105. 42:12that the learnings that you have been
  1106. 42:14working on are actually brought back
  1107. 42:16into the spec. And right now we're
  1108. 42:18iterating on one feature. But also keep
  1109. 42:20in mind that there might be multiple
  1110. 42:22features. So you might need to use
  1111. 42:23discretion as to how you're updating and
  1112. 42:25which spec because the LLM if you have a
  1113. 42:27library of seven or 10 or 20 different
  1114. 42:29specifications need to know which spec
  1115. 42:31to go and update. So you might want to
  1116. 42:33be precise here. But for now, because
  1117. 42:35this is just one spec on top of the
  1118. 42:36existing codebase, it's easy for me to
  1119. 42:38just tell it to just go and update the
  1120. 42:40spec based on uh the things that we've
  1121. 42:42iterated on. Let's see what it updated.
  1122. 42:44Right. So, uh focus on achieving visual
  1123. 42:46consistency and predictable behavior.
  1124. 42:48That is exactly right because initially
  1125. 42:50it created a whole bunch of UI that did
  1126. 42:52not quite look like the rest of the
  1127. 42:54site. Design evolution iterative
  1128. 42:56approach. Yep. Makes sense. Experience
  1129. 42:58assumptions rather than pursuing
  1130. 42:59theoretical completeness. Yes. So I
  1131. 43:02think a lot of this makes sense and what
  1132. 43:04we also want to do is from these
  1133. 43:06learnings because we we talked about the
  1134. 43:08experience learners and rational right
  1135. 43:10like this is a section that got added
  1136. 43:11here and I've iterated on this before as
  1137. 43:14I told you I am encoding things in the
  1138. 43:16spec as I go so for things that exist
  1139. 43:19here so we have let's see six learning 7
  1140. 43:228 9 10 12 14 typography and visual
  1141. 43:27hierarchy responsive and grid behavior
  1142. 43:29and what I can also do here is I I'll
  1143. 43:31keep the changes and let's transform
  1144. 43:36the learnings
  1145. 43:40into relevant functional requirements,
  1146. 43:45right? Because as I mentioned before,
  1147. 43:48the the goal of the spec is that it
  1148. 43:49becomes the executable artifact. If we
  1149. 43:51had a bunch of learnings that we went
  1150. 43:53through the process of iterating with
  1151. 43:55the LLM, we went through the process of
  1152. 43:56actually learning uh what the experience
  1153. 43:59should look like based on the iteration.
  1154. 44:01We want to make sure that that is also
  1155. 44:02captured in the spec properly. So now we
  1156. 44:05have these functional requirements that
  1157. 44:08are embedded along with the initial set
  1158. 44:09of functional requirements that we had,
  1159. 44:11right? Because we remember we created
  1160. 44:13functional requirements when we first
  1161. 44:14started down the path of this feature.
  1162. 44:16And now we have some extras
  1163. 44:18that allow me to go and recreate this
  1164. 44:20things like system must use identical
  1165. 44:22header styling. This is great. You have
  1166. 44:24to have this in the spec. Maybe even
  1167. 44:26something that can be extracted and put
  1168. 44:28in the constitution because you want to
  1169. 44:29have consistent visual design. Must
  1170. 44:31implement section counters with emoji
  1171. 44:33indicators. Yes. Yes. This exactly what
  1172. 44:35I did. Must use fixed width card
  1173. 44:37dimensions. Absolutely. I want that.
  1174. 44:40this is what what we did and media
  1175. 44:42queries screwed it out because cards
  1176. 44:44kept bouncing around, right? So like the
  1177. 44:46learnings that we had from this
  1178. 44:48experience need to be encoded back into
  1179. 44:49spec. So now if I go and delete the code
  1180. 44:51that existed for the the book experience
  1181. 44:54that I have here and I go and recreate
  1182. 44:56this, DLM should have a much easier time
  1183. 44:58recreating the exact experience that I
  1184. 45:00wanted because I don't need to go and
  1185. 45:02reiterate all these conversations back
  1186. 45:03and forth, back and forth, back and
  1187. 45:04forth. So there you go. This is how to
  1188. 45:07add a new feature to an existing code
  1189. 45:09project. I hope this has been helpful. I
  1190. 45:12am curious how you're iterating on your
  1191. 45:14projects and what works and what
  1192. 45:15doesn't. And as always, we are expecting
  1193. 45:17a lot of feedback. So, leave it in the
  1194. 45:20comments, go to GitHub, ping me, however
  1195. 45:23way you need to ping me to give me the
  1196. 45:25feedback, but we'd love to improve this
  1197. 45:26for you. So, uh, keep us posted on how
  1198. 45:29Speckit can be made better. Until the
  1199. 45:31next one.

About this transcript

This page contains the full transcript of Using GitHub Spec Kit with your EXISTING PROJECTS by Den Delimarsky, generated from the public captions YouTube serves with the video. The transcript has 8,311 words across 1,199 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.