# Fariz Wibisono > Fariz Wibisono is a full-stack software engineer (full-stack developer) in Cirebon, Indonesia, working with TypeScript, React, Next.js, Node.js and PostgreSQL. He led the modernization of Invictus, a multi-chain DeFi LP terminal serving 1,000+ concurrent users. Every page is also available as Markdown: add `.md` to the path, or request it with `Accept: text/markdown`. ## Pages - [Home](https://frzxw.me/index.md): introduction, experience, selected work, skills, writing, contact - [About](https://frzxw.me/about.md): background, experience, education, skills - [Work](https://frzxw.me/projects.md): products and websites - [Blog](https://frzxw.me/blog.md): posts - [Contact](https://frzxw.me/contact.md): How to reach Fariz Wibisono, a full-stack software engineer in Cirebon, Indonesia: email, GitHub, LinkedIn and X. - [Developers](https://frzxw.me/developers.md): The public, read-only API, MCP server, and agent discovery files of frzxw.me: endpoints, formats, errors, and versioning. - [Privacy](https://frzxw.me/privacy.md): What frzxw.me stores and sends: cookieless page statistics, no tracking cookies, two preferences in your browser, and a Spotify player that loads only when you press play. ## Case studies - [Invictus](https://frzxw.me/projects/invictus.md): Multi-chain DeFi LP terminal - [PDF to blog pipeline](https://frzxw.me/projects/content-pipeline.md): AI-assisted workflow that turns PDF documents into blog drafts - [Sakola](https://frzxw.me/projects/sakola.md): Modular multi-tenant school platform - [Rasain](https://frzxw.me/projects/rasain.md): Recipe and cooking app with a step-by-step cooking mode ## Posts - [A portfolio that agents can read](https://frzxw.me/blog/a-portfolio-for-agents.md): More people now meet my work through an AI assistant than through my home page. Here is what this site serves to agents, and why each piece is small. - [A shared brain for me and my AI tools](https://frzxw.me/blog/a-shared-brain-with-obsidian.md): My notes live in an Obsidian vault of plain Markdown files that both I and my AI assistants can read and update. How it is organised, and the rules that keep it useful instead of messy. - [How I use AI as leverage, not autopilot](https://frzxw.me/blog/ai-as-leverage.md): AI writes a lot of my first drafts now, in code and in content. This is where I draw the line between what the tool does and what stays my job, and the writing that shaped how I think about it. - [Context engineering: give the model the right information, not more of it](https://frzxw.me/blog/context-engineering.md): Better prompts only go so far. Most of the quality I get from AI tools comes from what they can see when they start: short rules, the right files, and nothing that distracts them. - [Designing for what you can't know](https://frzxw.me/blog/designing-for-what-you-cant-know.md): Good software is honest about uncertainty. A small example from a crypto terminal: when the data stops, we say so on screen instead of pretending everything is live. - [Harness engineering: the checks around the model matter more than the model](https://frzxw.me/blog/harness-engineering.md): If AI writes more of the code, the engineer's job shifts toward building the guardrails it works inside: tests, types, linters, review and safe limits. Here is the harness I use and why. - [Store the history, not just the number](https://frzxw.me/blog/ledgers-not-balances.md): Two very different products, a crypto terminal and a school savings app, ended up with the same rule for money: never edit a number, only add a record. Why that matters, and what it costs. - [Measure before you choose: why I start with boring technology](https://frzxw.me/blog/measure-before-you-choose.md): Data-heavy products attract exciting infrastructure. I usually start with the simplest setup that works, and I make that choice with numbers, so it is easy to explain and easy to revisit. - [Rebuild or refactor? How I decide](https://frzxw.me/blog/rebuild-or-refactor.md): The usual advice is never to rewrite a working product. Sometimes it is still the right call. These are the four questions I ask before choosing, and how they played out on a real product. - [Why strict languages and AI agents get along](https://frzxw.me/blog/rust-strictness-and-agents.md): AI tools fix mistakes fastest when the mistake is pointed out precisely. That is why strict languages like Rust, and strict TypeScript, make agent-written code easier to trust and debug. ## For agents - [Developer docs](https://frzxw.me/developers.md): API, MCP server, errors, versioning - [Content API](https://frzxw.me/api/v1/portfolio): the whole portfolio as JSON ([OpenAPI](https://frzxw.me/openapi.json)) - [MCP server](https://frzxw.me/mcp): read-only tools over Streamable HTTP ([server card](https://frzxw.me/.well-known/mcp/server-card.json)) - [ARD manifest](https://frzxw.me/.well-known/ard.json): Agentic Resource Discovery entries - [Resume](https://frzxw.me/cv.pdf): one-page PDF ## Optional - [Full text](https://frzxw.me/llms-full.txt): every page in one file