From d0f36766a3dc86a5eb4717769cc81fedf390a250 Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Tue, 2 Jun 2026 05:26:22 +0100 Subject: [PATCH 1/8] refactor(llm): optimize routing and format split for llms endpoints --- src/app/(llms)/llms-full.txt/route.ts | 37 ++++++++++++++++++++----- src/app/(llms)/llms.txt/route.ts | 40 +++++++++++++++++++++------ 2 files changed, 61 insertions(+), 16 deletions(-) diff --git a/src/app/(llms)/llms-full.txt/route.ts b/src/app/(llms)/llms-full.txt/route.ts index 41d7813..2754203 100644 --- a/src/app/(llms)/llms-full.txt/route.ts +++ b/src/app/(llms)/llms-full.txt/route.ts @@ -1,4 +1,5 @@ -import { getAllDocs } from "@/data/doc/documents" +import { execSync } from "child_process" +import { getDocsByCategory } from "@/data/doc/documents" import { EXPERIENCES } from "@/data/portfolio/experiences" import { PROJECTS } from "@/data/portfolio/projects" import { SOCIAL_LINKS } from "@/data/portfolio/social-links" @@ -9,7 +10,18 @@ import { format } from "date-fns" import { SITE_INFO } from "@/config/site" import { getLLMText } from "@/lib/get-llm-text" -const allPosts = getAllDocs() +function getLatestCommitInfo() { + try { + const info = execSync( + 'git log -1 --format="%s — by %an on %ad" --date=short' + ) + .toString() + .trim() + return info + } catch { + return "No recent git commit history available." + } +} const aboutText = `## About @@ -52,30 +64,41 @@ ${PROJECTS.map((item) => { }).join("\n\n")} ` -async function getBlogContent() { +async function getMDXContentSection(category: string, urlPrefix: string) { + const docs = getDocsByCategory(category) const text = await Promise.all( - allPosts.map( + docs.map( async (item) => - `---\ntitle: "${item.metadata.title}"\ndescription: "${item.metadata.description}"\nlast_updated: "${format(new Date(item.metadata.updatedAt), "MMMM d, yyyy")}"\nsource: "${SITE_INFO.url}/blog/${item.slug}"\n---\n\n${await getLLMText(item)}` + `---\ntitle: "${item.metadata.title}"\ndescription: "${item.metadata.description}"\nlast_updated: "${format(new Date(item.metadata.updatedAt), "MMMM d, yyyy")}"\nsource: "${SITE_INFO.url}/${urlPrefix}/${item.slug}"\n---\n\n${await getLLMText(item)}` ) ) return text.join("\n\n") } async function getContent() { + const latestCommit = getLatestCommitInfo() + const blogsContent = await getMDXContentSection("blog", "blog") + const projectsContent = await getMDXContentSection("projects", "projects") + return `This document contains comprehensive information about ${USER.displayName}'s professional profile, portfolio, and blog content. It includes personal details, work experience, projects, achievements, certifications, and all published blog posts. This data is formatted for consumption by Large Language Models (LLMs) to provide accurate and up-to-date information about ${USER.displayName}'s background, skills, and expertise as a Software Architect/Engineer. # wistant.me > A minimal, pixel-perfect dev portfolio, shadcn registry, and blog to showcase my work as a Software Architect/Engineer. +**Last Coded**: ${latestCommit} + ${aboutText} ${experienceText} ${projectsText} -## Blog +## Blog Posts + +${blogsContent} + +## Project Case Studies -${await getBlogContent()}` +${projectsContent}` } export const revalidate = false diff --git a/src/app/(llms)/llms.txt/route.ts b/src/app/(llms)/llms.txt/route.ts index 80fe2f0..3fee989 100644 --- a/src/app/(llms)/llms.txt/route.ts +++ b/src/app/(llms)/llms.txt/route.ts @@ -1,28 +1,50 @@ -import { getAllDocs } from "@/data/doc/documents" +import { execSync } from "child_process" +import { getDocsByCategory } from "@/data/doc/documents" import { SITE_INFO } from "@/config/site" -const allPosts = getAllDocs() +function getLatestCommitInfo() { + try { + const info = execSync( + 'git log -1 --format="%s — by %an on %ad" --date=short' + ) + .toString() + .trim() + return info + } catch { + return "No recent git commit history available." + } +} -const content = `# wistant.me +export const revalidate = false +export const dynamic = "force-static" + +export async function GET() { + const blogs = getDocsByCategory("blog") + const projects = getDocsByCategory("projects") + const latestCommit = getLatestCommitInfo() + + const content = `# wistant.me > A minimal, pixel-perfect dev portfolio, shadcn registry, and blog to showcase my work as a Software Architect/Engineer. +**Last Coded**: ${latestCommit} + - [About](${SITE_INFO.url}/about.md): A quick intro to me, my tech stack, and how to connect. - [Experience](${SITE_INFO.url}/experience.md): Highlights from my career and key roles I've taken on. - [Projects](${SITE_INFO.url}/projects.md): Selected projects that show my skills and creativity. - [Awards](${SITE_INFO.url}/awards.md): My key awards and honors. - [Certifications](${SITE_INFO.url}/certifications.md): Certifications and credentials I've earned. -## Blog +## Blog Posts -${allPosts.map((item) => `- [${item.metadata.title}](${SITE_INFO.url}/blog/${item.slug}.mdx): ${item.metadata.description}`).join("\n")} -` +${blogs.map((item) => `- [${item.metadata.title}](${SITE_INFO.url}/doc.mdx/${item.slug}): ${item.metadata.description}`).join("\n")} -export const revalidate = false -export const dynamic = "force-static" +## Project Case Studies + +${projects.map((item) => `- [${item.metadata.title}](${SITE_INFO.url}/doc.mdx/${item.slug}): ${item.metadata.description}`).join("\n")} +` -export async function GET() { return new Response(content, { headers: { "Content-Type": "text/markdown;charset=utf-8", From ad4fdbd7e6ea7f3450f0bee52a8bfe893577f187 Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Tue, 2 Jun 2026 05:26:34 +0100 Subject: [PATCH 2/8] feat(projects): add github repository links to list and case study pages --- src/app/(app)/(docs)/projects/[slug]/page.tsx | 40 ++++++++++++++++--- .../components/projects/project-item.tsx | 22 ++++++++++ src/content/docs/interlock-landing.mdx | 1 + src/content/docs/navi-landing.mdx | 1 + src/content/docs/pizza-landing.mdx | 1 + src/content/docs/propellent-landing.mdx | 1 + src/content/docs/shoperzz.mdx | 1 + src/content/docs/splyt-landing.mdx | 1 + src/content/docs/suburbia.mdx | 1 + src/content/docs/sunabase-landing.mdx | 1 + src/content/docs/wistantdotme.mdx | 1 + src/data/portfolio/projects.ts | 9 +++++ src/types/document.ts | 1 + src/types/projects.ts | 2 + 14 files changed, 78 insertions(+), 5 deletions(-) diff --git a/src/app/(app)/(docs)/projects/[slug]/page.tsx b/src/app/(app)/(docs)/projects/[slug]/page.tsx index f51cd20..a41a012 100644 --- a/src/app/(app)/(docs)/projects/[slug]/page.tsx +++ b/src/app/(app)/(docs)/projects/[slug]/page.tsx @@ -9,7 +9,8 @@ import { } from "@/data/doc/documents" import { USER } from "@/data/portfolio/user" import { getTableOfContents } from "fumadocs-core/content/toc" -import { ArrowLeftIcon, ArrowRightIcon } from "lucide-react" +import { ArrowLeftIcon, ArrowRightIcon, LinkIcon } from "lucide-react" +import { Icons } from "@/components/icons" import type { BlogPosting as PageSchema, WithContext } from "schema-dts" import type { Doc } from "@/types/document" @@ -238,12 +239,41 @@ export default async function Page({ params }: PageProps<"/projects/[slug]">) { /> -

- {doc.metadata.title} -

+

+ {doc.metadata.title} +

+ +
+ {doc.metadata.webUrl && ( + + )} + {doc.metadata.githubUrl && ( + + )} +
+ diff --git a/src/app/(app)/components/projects/project-item.tsx b/src/app/(app)/components/projects/project-item.tsx index 7bbea92..08d09cb 100644 --- a/src/app/(app)/components/projects/project-item.tsx +++ b/src/app/(app)/components/projects/project-item.tsx @@ -3,6 +3,7 @@ import Link from "next/link" import { getDocBySlug } from "@/data/doc/documents" import { addQueryParams } from "@/utils/url" import { BoxIcon, InfinityIcon, LinkIcon } from "lucide-react" +import { Icons } from "@/components/icons" import type { Project } from "@/types/projects" import { UTM_PARAMS } from "@/config/site" @@ -83,6 +84,27 @@ export function ProjectItem({ + {project.github && ( + + + + + } + /> + +

Open GitHub Repository

+
+
+ )} + Date: Tue, 2 Jun 2026 05:30:20 +0100 Subject: [PATCH 3/8] ui(projects): replace collapsible with link redirecting to projects page on home --- src/app/(app)/components/projects/index.tsx | 32 +++++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/app/(app)/components/projects/index.tsx b/src/app/(app)/components/projects/index.tsx index 07286b1..bdcf5c4 100644 --- a/src/app/(app)/components/projects/index.tsx +++ b/src/app/(app)/components/projects/index.tsx @@ -1,11 +1,15 @@ +import Link from "next/link" import { PROJECTS } from "@/data/portfolio/projects" +import { ArrowRightIcon } from "lucide-react" -import { CollapsibleList } from "@/components/collapsible-list" +import { Button } from "@/components/base/ui/button" import { Panel, PanelHeader, PanelTitle, PanelTitleSup } from "../panel" import { ProjectItem } from "./project-item" export function Projects() { + const visibleProjects = PROJECTS.slice(0, 5) + return ( @@ -15,11 +19,27 @@ export function Projects() { - } - /> +
    + {visibleProjects.map((project) => ( +
  • + +
  • + ))} +
+ + {PROJECTS.length > 5 && ( +
+ +
+ )}
) } From 04149e255c0e535215d5f73d184fd5e536e3b5f7 Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Tue, 2 Jun 2026 05:30:35 +0100 Subject: [PATCH 4/8] style(projects): format imports according to project conventions --- src/app/(app)/(docs)/projects/[slug]/page.tsx | 2 +- src/app/(app)/components/projects/project-item.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/(app)/(docs)/projects/[slug]/page.tsx b/src/app/(app)/(docs)/projects/[slug]/page.tsx index a41a012..a45e438 100644 --- a/src/app/(app)/(docs)/projects/[slug]/page.tsx +++ b/src/app/(app)/(docs)/projects/[slug]/page.tsx @@ -10,7 +10,6 @@ import { import { USER } from "@/data/portfolio/user" import { getTableOfContents } from "fumadocs-core/content/toc" import { ArrowLeftIcon, ArrowRightIcon, LinkIcon } from "lucide-react" -import { Icons } from "@/components/icons" import type { BlogPosting as PageSchema, WithContext } from "schema-dts" import type { Doc } from "@/types/document" @@ -36,6 +35,7 @@ import { LLMCopyButtonWithViewOptions } from "@/components/doc/doc-page-actions" import { DocPageRoot } from "@/components/doc/doc-page-root" import { DocShareMenu } from "@/components/doc/doc-share-menu" import { FramedImage } from "@/components/embed" +import { Icons } from "@/components/icons" import { MDX } from "@/components/mdx" import { TOCInline } from "@/components/toc-inline" import { TOCMinimap } from "@/components/toc-minimap" diff --git a/src/app/(app)/components/projects/project-item.tsx b/src/app/(app)/components/projects/project-item.tsx index 08d09cb..8dada09 100644 --- a/src/app/(app)/components/projects/project-item.tsx +++ b/src/app/(app)/components/projects/project-item.tsx @@ -3,7 +3,6 @@ import Link from "next/link" import { getDocBySlug } from "@/data/doc/documents" import { addQueryParams } from "@/utils/url" import { BoxIcon, InfinityIcon, LinkIcon } from "lucide-react" -import { Icons } from "@/components/icons" import type { Project } from "@/types/projects" import { UTM_PARAMS } from "@/config/site" @@ -22,6 +21,7 @@ import { TooltipContent, TooltipTrigger, } from "@/components/base/ui/tooltip" +import { Icons } from "@/components/icons" import { Markdown } from "@/components/markdown" export function ProjectItem({ From f3fce0a8988f68f7fd7960f0041338fab478d01a Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Tue, 2 Jun 2026 05:36:10 +0100 Subject: [PATCH 5/8] ui(footer): elevate and polish site footer layout and typography --- src/components/site-footer.tsx | 80 +++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/src/components/site-footer.tsx b/src/components/site-footer.tsx index 3492993..7ea1c42 100644 --- a/src/components/site-footer.tsx +++ b/src/components/site-footer.tsx @@ -8,39 +8,47 @@ import { SiteFooterInteractiveLogotype } from "@/components/site-footer-brand" export function SiteFooter() { return (