From ffbdd91a9c206a4d5761021fbdd753e8c0670243 Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Wed, 3 Jun 2026 02:13:35 +0100 Subject: [PATCH 01/13] feat(sponsors): add sponsors preview panel to home page --- src/app/(app)/components/sponsors.tsx | 90 +++++++++++++++++++++++++++ src/app/(app)/page.tsx | 3 +- 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 src/app/(app)/components/sponsors.tsx diff --git a/src/app/(app)/components/sponsors.tsx b/src/app/(app)/components/sponsors.tsx new file mode 100644 index 0000000..112c366 --- /dev/null +++ b/src/app/(app)/components/sponsors.tsx @@ -0,0 +1,90 @@ +import Link from "next/link" +import { SPONSORS } from "@/data/sponsor-data" +import { addQueryParams } from "@/utils/url" +import { ArrowUpRightIcon, HeartIcon } from "lucide-react" + +import { SPONSORSHIP_URL, UTM_PARAMS } from "@/config/site" +import { Button } from "@/components/base/ui/button" + +import { + Panel, + PanelContent, + PanelHeader, + PanelTitle, + PanelTitleSup, +} from "./panel" + +export function Sponsors() { + const featuredSponsors = SPONSORS.slice(0, 6) + + return ( + + + + Sponsors 💖 + [{SPONSORS.length}] + + + + +

+ Grateful to the partners and individuals supporting this open-source + work. You can sponsor my projects by choosing a tier (Platinum, Gold, + Silver, or Spark Supporter) directly on GitHub. +

+ + {featuredSponsors.length > 0 && ( +
+
+
+
+
+
+ +
    + {featuredSponsors.map((item) => ( +
  • + + + +
  • + ))} +
+
+ )} + +
+ + + +
+ + + ) +} diff --git a/src/app/(app)/page.tsx b/src/app/(app)/page.tsx index d2d5b2b..c25e20e 100644 --- a/src/app/(app)/page.tsx +++ b/src/app/(app)/page.tsx @@ -10,6 +10,7 @@ import { Insights } from "./components/insights" import { ProfileHeader } from "./components/profile-header" import { Projects } from "./components/projects" import { SocialLinks } from "./components/social-links" +import { Sponsors } from "./components/sponsors" import { TechStack } from "./components/tech-stack" export const metadata: Metadata = { @@ -56,7 +57,7 @@ export default function HomePage() { - {/**/} + From 47546167a3c22f1853bfa7db53a28a4dca8f07d5 Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Wed, 3 Jun 2026 02:27:35 +0100 Subject: [PATCH 02/13] release: 1.0.5-alpha.0 --- .changeset/release-1780450053.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/release-1780450053.md diff --git a/.changeset/release-1780450053.md b/.changeset/release-1780450053.md new file mode 100644 index 0000000..53c5a71 --- /dev/null +++ b/.changeset/release-1780450053.md @@ -0,0 +1,5 @@ +--- +"portfolio": patch +--- + +- feat(sponsors): add sponsors preview panel to home page From 870f9a6357497fe3c08fb4d9839fb4385e154641 Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Wed, 3 Jun 2026 02:41:54 +0100 Subject: [PATCH 03/13] ui(projects): fallback to github avatar for projects and update OG assets --- .../(app)/components/projects/project-item.tsx | 9 ++++++--- src/app/og/domain/route.tsx | 17 +++++++---------- src/app/og/simple/route.tsx | 17 +++++++---------- src/data/portfolio/user.ts | 1 + src/types/user.ts | 2 ++ 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/app/(app)/components/projects/project-item.tsx b/src/app/(app)/components/projects/project-item.tsx index 8dada09..2759820 100644 --- a/src/app/(app)/components/projects/project-item.tsx +++ b/src/app/(app)/components/projects/project-item.tsx @@ -1,6 +1,7 @@ import Image from "next/image" import Link from "next/link" import { getDocBySlug } from "@/data/doc/documents" +import { USER } from "@/data/portfolio/user" import { addQueryParams } from "@/utils/url" import { BoxIcon, InfinityIcon, LinkIcon } from "lucide-react" @@ -36,17 +37,19 @@ export function ProjectItem({ const isSinglePeriod = end === start const hasLocalPage = !!getDocBySlug(project.id) + const logoSrc = project.logo || USER.logo || USER.avatar + return (
- {project.logo ? ( + {logoSrc ? ( {project.title} diff --git a/src/app/og/domain/route.tsx b/src/app/og/domain/route.tsx index e65a82c..3b06fb2 100644 --- a/src/app/og/domain/route.tsx +++ b/src/app/og/domain/route.tsx @@ -1,6 +1,7 @@ import { readFileSync } from "node:fs" import { join } from "node:path" import { ImageResponse } from "next/og" +import { USER } from "@/data/portfolio/user" const geistMedium = readFileSync( join(process.cwd(), "src/assets/fonts/Geist-Medium.ttf") @@ -56,17 +57,13 @@ export async function GET(request: Request) {
- - - + style={{ borderRadius: 8 }} + />
, { diff --git a/src/app/og/simple/route.tsx b/src/app/og/simple/route.tsx index e8ce16b..02455b9 100644 --- a/src/app/og/simple/route.tsx +++ b/src/app/og/simple/route.tsx @@ -1,6 +1,7 @@ import { readFileSync } from "node:fs" import { join } from "node:path" import { ImageResponse } from "next/og" +import { USER } from "@/data/portfolio/user" const geistSemiBold = readFileSync( join(process.cwd(), "src/assets/fonts/Geist-SemiBold.ttf") @@ -24,17 +25,13 @@ export async function GET(request: Request) {
- - - + style={{ borderRadius: 8 }} + />
diff --git a/src/data/portfolio/user.ts b/src/data/portfolio/user.ts index 7dbff2a..d83380f 100644 --- a/src/data/portfolio/user.ts +++ b/src/data/portfolio/user.ts @@ -59,6 +59,7 @@ for TypeScrit & serious builders. darkOn: "https://github.com/wistant.png", }, ogImage: "https://github.com/wistant.png", + logo: "https://github.com/wistant.png", namePronunciationUrl: "", timeZone: "GMT", keywords: [ diff --git a/src/types/user.ts b/src/types/user.ts index 75afbae..aefe622 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -38,6 +38,8 @@ export type User = { avatarVariants: AvatarLightsVariants /** Open Graph image URL for social sharing */ ogImage: string + /** Public URL to logo image */ + logo?: string /** Audio URL for name pronunciation */ namePronunciationUrl: string /** SEO keywords list for metadata */ From 7d51cdf09e4f73ff8b840ca6942072434f617885 Mon Sep 17 00:00:00 2001 From: Wistant Kode Date: Wed, 3 Jun 2026 02:48:56 +0100 Subject: [PATCH 04/13] ui(tech-stack): fetch technology logos dynamically from GitHub repos --- src/app/(app)/components/tech-stack.tsx | 11 +++++++++- src/data/portfolio/tech-stack.ts | 28 ++++++++++++++++++------- src/types/tech-stack.ts | 2 ++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/app/(app)/components/tech-stack.tsx b/src/app/(app)/components/tech-stack.tsx index 6fff691..8dd87d0 100644 --- a/src/app/(app)/components/tech-stack.tsx +++ b/src/app/(app)/components/tech-stack.tsx @@ -20,6 +20,9 @@ export function TechStack() {