
Jay Long
Software Engineer & Founder
Published September 23, 2025
Updated September 23, 2025
This post explores the development of a blog framework using Next.js and Jamstack, deployed on Vercel with Docker and Traefik for reverse proxy and SSL via Let's Encrypt. It highlights the advantages of storing content in flat files (Markdown with YAML frontmatter) over databases, how this setup leverages coding IDEs like Cursor for AI-assisted content analysis and generation, and its implications for SEO and generative search optimization.
Drawing from extensive experience in software engineering and AI integration, including early adoption of tools like Cursor and Claude for codebases, this approach aligns with industry shifts toward static site generators (e.g., Next.js on Vercel) as seen in reports from Jamstack Conf and Vercel's own case studies, which emphasize performance gains from flat files (up to 10x faster builds). Communities like Stack Overflow and Reddit's r/webdev frequently discuss IDE indexing for productivity, mirroring my observations of 2-3 second analysis scripts over hundreds of articles. Furthermore, emerging concepts like Generative SEO (as discussed in SEOmoz and Ahrefs blogs) validate the focus on LLM-friendly structures, positioning this as an authoritative method for future-proofing content in an AI-driven web landscape.
OK, once again, I have no idea what this is going to turn into, and I don't even know how much time I have. Let's see. So yeah, I'm working on the blog framework, how that's coming together. So it's Next.js. It's a Jamstack. I'm deploying it to Vercel. I've got a development server, that's not really important, but it's Docker composed with Traefik for a reverse proxy and to handle SSL certificates. I think it uses Let's Encrypt—Traefik uses Let's Encrypt. Yeah, all that stuff is pretty basic, just the normal Jamstack on Vercel, Tailwind CSS. So, okay, here's where it gets interesting, I think. There's something about having it all in files that I'm really enjoying, that I really like. I think it's powerful, and I think it may lead to a shift in doing this more, which seems strange because databases are so powerful and they've been so useful for so long. But something about having all of my blog articles, all of the files, all of the information, just in flat files—it seems really powerful. And I think it has to do with, well, I know it has to do with the fact that when I open up my IDE—it's Cursor—so it indexes all the files in the codebase into its vector store or whatever it is. I don't know much from a technical perspective, but there's some things that are pretty obvious what it's doing. It's got to have some kind of a vector store where it indexes your code and embeds your code into vector space so that it can load up chunks of context. But none of that really matters. It doesn't matter from a technical perspective what Cursor is doing. What does matter is the fact that it has access to all of your code and it can work meaningfully and effectively over all of the code in your codebase, and it can kind of, when it's generating code—anyways. Yeah, so I'll talk about that some. So the way it's able to generate quality code, like useful code—the way it's able to increase its usefulness with the generation of your code—is part of that is having access to all of the files in your codebase, okay. So the solution was developed around needing to understand all of your code and needing to be able to interpret logic and reusability and methods that might exist in some class and some other—the different programming patterns that you've chosen and what's going to break what here and there, like what's all interconnected. And that maps on in a very interesting way with creative efforts, particularly in this case, literary, like publishing blog articles. So when you're writing a piece of literature, it's actually really good at understanding what you're trying to say, and just like LLMs do, the more data it has, the better it is at doing that. So what you find is that it's very useful, very helpful to—when you have all—typically what most people do or what a lot of people do—everybody uses chatbots to help blog articles, right? If nothing else, it's helpful as an editor, where you can just dump your thoughts out and it can do basic blog editing work. But it only has the context of that one topic, right? If you do all your blog articles as code, then the LLMs—your coding agent becomes like an intern at your blog almost. Like it understands your voice better because it has more data. Just like you could generate a code snippet from ChatGPT or something, but it's not going to be near as powerful and insightful and accurate as if you have Cursor or Claude Code or one of these solutions that's designed for coding, designed to index your entire codebase so that when it's giving you ideas for code snippets, it understands everything in your entire codebase. And so it can give you better, more meaningful, more powerful answers. Well, the same is true about your voice and your blog, and this is not just in the creating of the content. It's actually just as powerful, if not more powerful, because if all of my words, if every last word that I say and write, every bit of data that is my voice is—if every bit of data that is my voice is committed to code, then that means that they're indexed, that the IDE has it indexed just like code. So I can do things like I can ask it questions and get it to do tasks that analyze everything. So just to give a specific example, if you want to do something with categories, like if you want to analyze all of your articles and say, what kind of categories are emerging out of all these articles? Well, then you just ask the agent and it can scan it instantly because it's not really as much data as you think. You can have hundreds and hundreds of articles with thousands of words of text, and that's nothing for a coding agent. And then also, you can swap out models too. That's another thing to play with, potentially in the future, is as we start gathering all this data, as I start producing all this content and gathering all this data on the content, well, then we may find that the most powerful coding agent is Claude. But it may be that in order to get the—you may want to actually flip over to Grok and you find that because Grok is maximally truth-seeking, that in a literary context, in a blogging context, in a content creation context, people just talking to each other about stuff—you may find that the maximally truth-seeking model that's trained on all the conversational data, the public square of the world, the community of Earth, of humans on Earth, you may find that you can turn your coding tool into a blogging platform. So essentially what we're doing here is it's really powerful and it's really beautiful, really, because it's an example of simplicity engineering. So blogging platforms are usually built for and by non-coders, non-technical people. It's pushing back against engineering. It's pushing back against coding. It's pushing back against all these more technical things. It's marketed at marketers. It's marketed at bloggers, digital marketing firms, people who specialize in branding and sales, like human communications, interacting directly with the customer on a very human level. These are not—basically what they've—the optimal, and I know I've talked about this before in other articles, but I really do feel like this is moving it forward in a very meaningful way. So most blogging platforms are really not developer-friendly, not engineer-friendly. They're bloated. They usually have WYSIWYG editors that produce formatted text that gets saved in a database, and so if you want to analyze all that content, you've got to query the database a whole bunch of times and explode out all of the text. And even then, there's yet another disadvantage that I haven't even really got to yet, which is the way that you can write articles for LLMs, right? And I'll get to more of that either later or in a future recording. But just to kind of stay on track. So historically, all these platforms have been developed. They're not developer-friendly, which makes sense because the people who are best at doing this job are not naturally technical people. So they have no interest in coding, they have no interest in software engineering. They don't care if your software is well-architected. What they care is the content that is output. Is it quality content? Are people going to care about it? Is it going to resonate with people? Is it going to get clicks? Is it going to get conversions? Is it going to get engagement? So naturally, you've got these big, bloated, non-technical user-friendly solutions that are overengineered and they're hacky and buggy and insecure and clunky, and they're just real heavy. There's nothing elegant about them. There's no simplicity engineered into them. They're a disaster from a technical standpoint, and they're a nightmare for developers. So what's happening here is because of the way that—what I'm doing here is repurposing tools that were designed for coding to do content creation. And I really think that the biggest change is going to be finding the right model to plug into them. But the coding models are actually very, very good at analyzing your content. Okay, so you can simplify your blogging platform down to almost nothing if you take all of your content out of the database, commit it into flat files in your codebase, and let your coding agent handle all of the formatting of your text—and not just the formatting of your text. Okay, I kind of want to separate out part of my workflow what I do because I record transcripts and then I have a whole separate generative stage where I have my transcripts processed. And really the content, the final content of the article is mostly generated in that step outside of the IDE. Within the IDE, what I'm doing is writing TypeScript code, building React components that like the actual data of the article that is generated is in Markdown format. It's actually become a hybrid of YAML and Markdown. So there's YAML at the top that has all the meta information about the article—the kind of things that you would put in database fields, like modified date, title, author, tags, categories, the URL, all these things. They get stuck in a YAML at the top. And then the entire article is in Markdown. And so what the React component does is it parses all this information and it creates the meta tags out of the YAML, and then it translates all the Markdown into HTML. And I forget how we did the CSS, but it nailed the CSS like really quick, really early on, and I haven't had to mess with it since. So I'm pretty sure what it does is it just passes style code into the React component. And so yeah, but basically what gets committed is Markdown files. And those Markdown files get interpreted by the React component and rendered as HTML. Okay. So this gives you the ability to have flat files that are formatted, so it makes it really easy for your coding agent to just index every bit of information, every word that you've ever published, gets indexed immediately and effectively so you can do things like periodically do things like, say—and look, bear with me because I'm learning a lot of these new SEO terms. But just to take the power with regards to SEO, and it's not just SEO, it's part of what I had in mind with this whole initiative is the changing landscape of SEO. It's not just about search engine optimization anymore. It's about generative search optimization. So I don't know if there's a buzzword for that yet or not—GSO or something like that. I know I've heard some people throwing some terms around. I don't know if anything has stuck yet. But the concept is sound: generative search optimization. How do you appear in people's ChatGPT or Perplexity AI queries, search queries—like when they're chatting with a chatbot that they trust, how do you get your answers to them through generative searches? So yeah, it's really powerful. In terms of SEO, you've got things like author schema and category. There's these different meta tags that you can add that tell the Google bots a lot of really useful information about your website. And so it's actually a really simple, straightforward, lightweight, and powerful way of analyzing your entire blog, updating the categories, updating all the schema meta, updating everything, updating as an author what your skill set is, because every time I publish one of these articles about things that I've done and things that I know, about past experiences and present experimentations, every time I tell a story about a new thing that I've done in a blog article, all I have to do is run this script that takes seconds—if it takes a full second and it analyzes—it takes about two or three seconds. Yeah. And all it does is it analyzes all of my blog articles all at once. It's not even a—it's a combination of—there's a script and there's a prompt. So I use a prompt to have my coding agent analyze all of my blog articles all at once. And then I get it to run a script that updates. And sometimes I don't even run the script—like usually it's just like the prompt does it all and then it's just a commit after the prompt. But it'll go in and say, okay, I picked up these new things. Like, it's like I'm crawling my own blog. And then I'm updating all of the meta to optimize for what the bots are looking for. And it also organizes the content in a way—like, there's so much more meta there. It's not just little simple keyword spamming. It's like, there's a whole sub-article that it's writing that the humans never even see. And so I get the best of both worlds. It's a combination of meaningful, valuable quality content that speaks to other people, that people will be interested in. But there's an entire meta—like there's a conversation happening underneath the surface that is a meta conversation between bots. And it's telling a whole different story. It's communicating the same information, but it's telling a whole different perspective to a whole different audience. So simultaneously, I am—it's me and my agent talking to you and your agent, right? So just like in a legal context, like you'll have one side of a legal dispute has like the plaintiff or the defendant and then they both got representation. This is like me as a communicator and you as a curious individual, we're communicating and we have representatives that understand more about the broader context. So I've got my representation—I've got my agent that's putting information out there to tell your agent why, like, what can be—what your human can expect to find in my content and why it's actually valuable and relevant so that you can take my claims and go validate them on the internet and determine whether or not I'm accurate about my claims. And if I'm accurate about my claims, then you can feel confident that in good faith, you can go back to your human and say, hey, I found this, and it sounds legit. You should probably check it out. And so that's why it's so important—like we're no longer—well, okay, I was going to say we're no longer directly in contact with each other. It's not that. We do get directly—we probably are on track to become more intimate than we ever have before and more directly connected because what the agents are doing is they're helping us navigate this huge vast ocean of information and figure out what's meaningful to us, what's important to us, what's valuable for us as an individual, and put us in contact with the other human. And like, in some cases, it's just going to be better at finding people that we're going to connect with on a deeper level. In some cases, it's going to be that like, you've got two people and they're at odds on nearly everything. So we really can't let them get too close. But they have this one thing in common that we've just got to—we got to facilitate an exchange of information here. It's like the key master and the gatekeeper. We've got to get these two together, but do we? Do we really want—you know, like, people shouldn't have to be intimate on all levels in order to communicate a very specific thing that they both have in common. But also, sometimes it's hard to find that perfect person to collaborate with, just because there's so many people and there's so much bullshit. So what the agents are doing is they're helping us quickly navigate through all the noise to find more of those people. Anyways, what else was I going to say? Yeah, get rid of the database. Put it all in flat files, and offload—I guess what I'm saying here is you can cancel out so much bloat and functionality in blogging platforms if you recontextualize the toolkit, if you repurpose the coding agent to be a blogging agent, then you really can put it all in flat files, and it's very powerful. Oh, and then one other thing that I wanted to say is I wanted to tie this into—I've been writing on paper a lot again, and it's been really helpful and really powerful. I feel like I'm learning so much faster and so much better and I'm getting so much more done because I take a pen and a marker and a pad of paper, and I just write. I take notes on everything that I'm doing, and then on another paper, on the other side, I have a list of to-dos and goals. So, like, at any given time, if I feel like I'm stuck or I feel like I don't know what to do, I just go write down to-dos on—or like, I write down everything that I'm doing. And if I ever get stuck, I review what all I've been doing, and then that inspires the to-dos. And so I start making a to-do list. And so if I don't have time to get fully immersed and actually execute on things, I will update the to-do. And so when later on, when I do have time to get immersed, but I'm having trouble focusing, I just look at the to-do list and it's like, do the next thing. Here's a whole list of things. Pick one and do it. If you don't know what to do, here's your list. Just do something. And then writing down what I do helps me retrace my steps with troubleshooting, too. So anyways, the point is, something about writing these things down on paper is it really helps me to remember. It really helps me to be able to navigate all this information, all my activities, all the things that I need to do. So I think there's a connection there. I think there's a connection between something about putting ink down on paper and moving my hand in a writing stroke—I think that there's a connection between what's happening there and what's happening when you type out literature as code versus jamming WYSIWYG editor formatted text data into a database. I don't know what it is, but I think there's some kind of a connection there, and I just wanted to make sure and illustrate that. But yeah, that's where the new blog is heading. And not just a blog, the blogging framework. And then another powerful part of it is, as I'm developing the thing, I'm sticking Markdown documents in a docs folder, which is what I do on all my software projects and it's very powerful. It really helps. I think the reason why I'm calling this a framework is because I really think that I'm about to do a second blog and I'm going to use all those docs and use all this architecture, all this framework of prompts, and documents to do a new blog. And I think every time I do a new blog, it's going to emerge more and more as what you could consider a framework—even if it's unlike anything we would consider a framework as software engineers from the past.
October 15, 2025
October 4, 2025
October 3, 2025