This site did not start from the usual question.
Not "what should my portfolio look like?"
Not "what is the cleanest way to present my skills?"
Not even "what pages should a personal website have?"
It started from a more annoying question:
Why do so many personal sites reduce real work to cards, logos, and vague claims?
That question mattered because the missing piece was not simply a website.
It was a public form capable of carrying the work.
Before this project, what existed online was too thin for the actual range of the work.
It did not make it easy to centralize ongoing projects, connect them to notes, or show how technical, editorial, and operational choices relate to one another.
The idea of a site-manifest came from that gap.
Not a louder portfolio.
Not a visual CV.
Not a content machine dressed up as identity.
Something else:
a public system that can hold projects, decisions, notes, and technical choices in one readable structure without flattening them.
The problem was not visibility alone
Visibility was part of it, but not in the shallow sense.
The issue was not simply "be seen more." It was "be seen more truthfully."
A lot of personal sites are optimized for a first glance that says very little. They can look polished and still fail to communicate anything durable about the person behind them. You learn the stack. You learn the job title. You learn a few categories. You rarely learn the operating logic.
That was exactly the dead end this project had to avoid.
What needed to become public was method as much as output: the way projects are framed, constrained, written, shipped, and connected to a broader body of work.
So the site had to do three things at the same time:
- show real projects
- make thought visible through notes
- create a coherent bridge between technical execution, editorial choices, and product logic
Without that bridge, the site would have become either decorative or abstract.
Projects without notes feel decorative. Notes without projects feel ungrounded.
The useful form is the link between both.
Why "site-manifest" is the right frame
Calling it a portfolio would have pushed the project in the wrong direction from the start.
A portfolio usually implies a few habits I explicitly wanted to avoid:
- a sales-like homepage
- a stack of isolated case studies
- too much emphasis on presentation over structure
- a generic sequence of reassuring modules
- biography sludge pretending to be identity
The manifesto frame changes the center of gravity: the site is not only here to display finished work, but to state a way of building, make choices legible, and let proof accumulate over time.
That changes almost everything:
- the home becomes a compact editorial hub instead of a pitch deck
- projects become proof surfaces rather than "case studies"
- blog posts stop being side content and become part of the actual architecture
- technical choices matter because they support the reading experience, not because they look advanced on paper
In other words, the site stops performing confidence and starts exposing structure.
That was the target.
The public structure had to stay minimal
One of the earliest decisions was also one of the most important: the visible navigation would stay minimal.
Home and Blog.
Nothing more in the main public navigation.
That sounds almost trivial until you compare it to the standard personal-site reflex:
About, Uses, Now, Projects, Lab, Speaking, Contact, and a few more weak pages added just because that is what these sites usually do.
The problem with that expansion is not only clutter. It is dilution.
The more pages a personal site adds by reflex, the more likely it is to create weak surfaces. Weak surfaces do not make a site feel generous. They make it feel under-convinced.
So the better move was to keep the public structure dense and clear:
- a home that identifies the builder and the working logic
- a blog index that holds notes, essays, and technical writing
- project pages that exist contextually, without turning into a giant public project catalog in V1
That decision made the site sharper.
The home had to do real work. Projects had to carry weight. Notes had to justify their place.
Documentation came before components
The most important technical choice in the project happened before a single component mattered: the project started docs-first.
That was not bureaucracy. It was a way to make the concept hard enough to build.
Before real implementation, the project was pushed through:
- a product brief
- a technical strategy
- a design direction
- editorial notes and constraints
- infrastructure choices
- decision logs
- risk framing for a shared VM context
That layer of documentation did two things.
First, it prevented drift. If the site was going to be a manifesto instead of a generic personal page, every later decision had to stay attached to that intention.
Second, it changed the build process itself. Once the architecture, anti-goals, and hosting constraints were clearly written down, implementation stopped being a sequence of disconnected UI moves. It became a system with explicit rules.
The site feels more deliberate than a lot of fast personal builds because of that early pressure. The public surface may stay compact, but the concept under it was pressure-tested before the interface existed.
Why this exact stack
The stack was not chosen to sound modern. It was chosen because it matched the shape of the product.
The current foundation is straightforward on purpose:
- Next.js App Router
- TypeScript
- local MDX
- Bun
- Ultracite with Biome
- targeted Pretext surfaces
- static export
- Coolify for deployment transport
- Cloudflare at the edge
Each part solves a concrete problem.
Next.js App Router
The site needed clean support for local content, metadata, route structure, and static generation. Next.js fit that well, especially for a project that needs project pages, article pages, feed generation, sitemap generation, and deterministic metadata without inventing a backend.
TypeScript
The content model could not stay loose. If projects and notes were going to relate to one another cleanly, then metadata, slugs, related content, and content contracts had to stay explicit. TypeScript helps keep those relationships honest.
Local MDX
This was non-negotiable for V1.
The content belongs with the site. It should be versioned with the code. It should stay portable. It should not require a CMS just to publish a project page or refine an essay.
MDX gives the right balance: local ownership, structured metadata, and the option to integrate custom components when the content really benefits from them.
Bun and Ultracite
The build chain had to stay simple and fast. Bun keeps the workflow compact. Ultracite with Biome keeps linting and formatting opinionated enough to reduce noise.
Again, sophistication was not the aim. The aim was reducing friction so the system remains easy to keep sharp.
Why no CMS
This decision deserves its own section because it is one of the easiest places to drift.
A CMS sounds reasonable very quickly. It sounds scalable. It sounds mature. It sounds like the "real" way to publish.
But for this project, it would have solved the wrong problem.
The site did not need a content admin. It needed editorial coherence.
The practical reason is even simpler: the whole site already moves through local files and Codex CLI.
Writing, rewriting, metadata, structure, internal links, and page-level edits all move faster in that workflow than they would through a CMS. On a site with no products, no image-heavy publishing workflow, and no need for a separate editorial back office, a CMS would mostly add latency.
The V1 corpus is not large enough to justify the complexity of a CMS. The editorial system benefits more from versioned content, explicit registries, and strong local contracts than from a detached interface that turns publishing into form-filling.
The docs-first approach also made the tradeoff clearer: the site is not a newsroom, not a media operation, and not a multi-author publication. It is a precise personal publishing system.
That means the right default is:
- content close to code
- Codex CLI as the real publishing cockpit
- no backend dependency
- no admin panel by reflex
- no fake scalability layer before a real editorial need exists
The result is leaner, clearer, and easier to reason about.
Why static was the right constraint
The site also had to respect a real operational fact: it does not live on an empty machine.
It shares a VM with other production workloads.
That single fact changes the technical conversation. It means the project cannot behave like it owns the server. It means the build path has to stay disciplined. It means runtime surface area should stay small. It means rollback and failure modes matter more than technical theater.
Static generation was therefore not only a nice option. It was the right posture.
The site now benefits from that in several ways:
- the final artifact stays deterministic
- routes are fully knowable at build time
- metadata outputs remain stable
- deployment is simpler to reason about
- the runtime stays light
- the blast radius stays lower on a shared VM
This also explains why the project produces a real static artifact while still using a controlled Dockerfile path through Coolify. The goal is simplicity of output with explicit control of transport.
Static is the artifact. Controlled deployment is the discipline.
Why Pretext had to stay targeted
Pretext is one of the most interesting pieces of the stack, but it also had one of the clearest guardrails.
It was never supposed to become the theme.
The temptation with a typographic engine like that is obvious: once you see what it can do, you want to use it everywhere.
That would have been a mistake.
The project needed Pretext to behave like a signature layer. It should improve a few surfaces enough to change perception:
- balanced hero treatments
- exact chips
- controlled excerpt blocks
- selected editorial reflow surfaces
Everywhere else, plain CSS should keep winning.
That restraint protects the visual direction. The goal is not "look how experimental this is." It is closer to clean textual futurism: restrained, precise, typographic, almost ascetic.
Too much typographic machinery would have pushed the whole thing toward spectacle. The site had to feel authored, not theatrical.
Where Codex actually fits
Codex deserves to be named because it genuinely changed the speed and shape of the project.
But it needs to be named correctly.
The concept did not come from the tool. The target stack did not come from the tool. The editorial standard did not come from the tool. The product direction did not come from the tool.
Those came first.
What Codex changed was compression.
It became the execution layer I could challenge, redirect, pressure-test, and accelerate across documentation, prototyping, implementation, and rewriting. That compression is especially powerful on a project like this because the site sits in a useful middle ground:
- serious enough to demand real structure
- small enough to iterate fast
- public enough to matter
- low-risk enough to move without a long organizational chain
AI-native building becomes genuinely interesting at that point. The distance between idea and implementation collapses. A docs-first concept can move into code faster. A prose change can become a published refinement quickly. A technical exploration can be tested without turning into a month-long detour.
The important point, though, is governance.
Codex changes the slope of execution. It does not replace direction.
That distinction matters more, not less, as these tools become stronger.
What the site is already doing
Even in its current state, the site is already more than a shell.
Under the public surface, it is doing real structural work:
- projects and articles are typed and validated
- relationships between notes and projects stay explicit
- slugs behave like contracts
- metadata is generated with intention
feed.xml, sitemap.xml, and canonical URLs are part of the system, not afterthoughts
- project pages act as proof surfaces rather than decorative entries
- the home works as a compact editorial map rather than a self-description page
This is the key shift.
The site is not just presenting content. It is organizing evidence.
That difference is why it reads differently from a generic portfolio. Its job is not to list capabilities. Its job is to make a way of building legible.
Why it remains a public prototype
One more thing matters here: this site is not being described as finished.
It is live, useful, and already coherent. But it is also a living prototype.
That does not downgrade it. It is part of the point.
The site was designed to stay close to the work as the work changes. That means it should remain revisable:
- project pages can sharpen as the corpus grows
- notes can become more explicit and more connected
- signature surfaces can become more precise over time
- new tools can change how quickly the system evolves
The right model is not "launch once, freeze, and maintain." The right model is "publish a strong base, then keep it aligned with reality."
That makes more sense for a personal editorial system than pretending the final form is already known.
What this project is really for
At the highest level, the site exists to solve a simple but surprisingly stubborn problem:
how do you make a body of work feel coherent in public without reducing it to branding?
This is the answer I currently trust:
build a structure where projects, notes, technical choices, and visual discipline reinforce each other. Keep the public shape minimal. Make the proof denser. Let the writing explain the work. Let the work justify the writing.
That is what a site-manifest means here.
Not a prettier container. A better public system.
At the highest level, the site exists to solve a simple but surprisingly stubborn problem:
how do you make a body of work feel coherent in public without reducing it to branding?
This is the answer I currently trust:
build a structure where projects, notes, technical choices, and visual discipline reinforce each other.
Keep the public shape minimal.
Make the proof denser.
Let the writing explain the work.
Let the work justify the writing.
That is what a site-manifest means here.
Not a prettier container.
A better public system.