When I published the first version of this post on December 3, 2022, its entire message was essentially “Hello World” and a welcome to my personal website. That date stays here because it marks the post’s actual beginning. Rewriting the words should not rewrite the history.
The original entry also described the site as something that would keep changing while I learned web development. The current repository is evidence that this part held up. What began as a simple introduction is now a terminal-inspired portfolio with a searchable blog, a filterable projects page, games, an activity feed, and a dashboard that combines data from GitHub, Spotify, Steam, and the site itself.
What stayed the same
The site is still personal, and it is still deliberately small enough to understand. It uses the Next.js Pages Router rather than hiding the structure behind a large framework layer. Routes live in pages, shared UI lives in components, integrations live in lib, and posts remain ordinary Markdown files in posts.
That plain structure matters. A post does not require a database record or a content-management dashboard. The blog build reads frontmatter with gray-matter, turns Markdown into HTML with remark, and generates every post route ahead of time. The current app shell is similarly direct:
function MyApp({ Component, pageProps }) {
return (
<div className={`${spaceMono.variable} ${spaceMono.className} min-h-full`}>
<SWRConfig value={defaultSWRConfig}>
<Layout>
<Component {...pageProps} />
</Layout>
<Analytics />
</SWRConfig>
</div>
)
}
Layout gives every page the shared terminal presentation, while SWRConfig gives live widgets a common fetcher and conservative defaults. Static writing and changing external data can therefore coexist without making every page request wait on third-party services.
What changed
The visual language is much more specific now. Terminal bars, command-like labels, monospace typography, cards, and small status indicators connect the pages. The home page is no longer just an entry point to a generic portfolio; it establishes the interface that continues through projects, posts, and metrics.
The content also became part of the application rather than an afterthought. Post metadata feeds the blog index, search, reading-time labels, RSS, sitemap entries, SEO tags, and previous/next navigation. Code blocks gain copy buttons in the browser, while headings receive anchor links after the generated HTML mounts. Removing the old placeholder social image from this post also lets the site’s /api/og route create a matching terminal-style preview.
The dynamic side grew without replacing the static core. The architecture write-up explains that boundary, and the GitHub metrics post follows one integration from server helper to API route to SWR-powered UI. The older notes on pre-rendering and SSG versus request-time work have also been rewritten around this repository instead of repeating framework documentation.
A better first post
This is still a hello-world post, just an honest one. It does not claim that the 2022 site already had today’s design or integrations. It records the small starting point and uses the current codebase to show where the project stands now.
The best way to continue from here is not through a list of promises. Browse the projects, inspect the live dashboard, or read the rest of the blog. Those pages are the current record of the site’s evolution, and future changes can speak through the repository in the same way.