Knegis — two roommates who build things
Knegis builds digital systems that shape how work is seen, shared and understood. Software is never neutral: every interface decides what is visible, what is easy and what is possible. A form field is a policy. A default is a decision someone else now lives inside. A dashboard is an argument about what deserves attention, dressed up as a neutral pane of glass.
We treat that responsibility as the actual brief. The feature list comes second. The stated requirements come second. What a system does to the people who sit in front of it every day comes first, and everything else is negotiation. We have shipped things we are proud of and things we would quietly rewrite tomorrow, and the difference was almost never talent — it was whether anyone had time to sit with the problem before the solution arrived. So we make the time. Slow understanding, fast execution, in that order.
The aim is not to aestheticize technology but to make it legible. Tools should explain themselves, data should carry its context, and automation should leave a trail a person can follow. When a machine makes a call, the reasoning should be inspectable by the person who has to answer for it — not buried in a model, not hidden behind a score, not summarized into harmlessness. The interface is not decoration on top of the system; it is the part of the system you can be held to, and we design it like testimony. Most explanations arrive too late, after the decision has hardened into infrastructure. We try to move them earlier: name the tradeoff in the commit, put the assumption in the interface, let the person holding the tool feel where it will bend. A system that can be argued with is worth ten that can only be obeyed.
Legibility is not documentation. It is a property of the system itself: names that mean what they say, states that can be seen, failures that announce themselves before someone else does. By clearly defining conditions, logic exposes interactions, limits and inconsistencies that would otherwise remain implicit. A good log line is a love letter to whoever is on call. We write a lot of them, and we mean every one. When something breaks at a distance, the first question is never who did this — it is what did the system let them believe. Blame is a design smell. Almost every outage we have ever caused was an interface telling a perfectly reasonable story that happened to be false, and we fix the story along with the bug.
A prototype is a question asked in material form. We ask a lot of them. Some become products, some become warnings, and the difference is rarely visible on day one — so we keep both around, labeled honestly, until the answer arrives.
Nothing here is precious. Precious is what happens right before something stops being true. We archive the failures next to the wins, because the failures are where the information is, and we would rather be embarrassed than uninformed. The graveyard folder is the most visited folder we have. Old experiments get exhumed monthly, stripped for parts, and quietly resurrected inside newer work that finally has a reason for them. Nothing teaches architecture like watching your own decisions age at high speed.
We like small tools with sharp edges: a script that does one thing completely, a page that loads before you notice, a queue you can read like a sentence. Scale is a consequence, not a goal. Most good systems start embarrassingly small and survive by being easy to change. When something grows past what one person can hold in their head, we split it, name the halves honestly, and let each one earn its keep again from scratch. Dependencies are promises made by strangers, so we keep the list short and read the changelogs like weather reports. Everything we can own outright, we do — fonts, pipelines, deploy scripts — not from pride but because the second something breaks upstream, ownership is the only version of luck you can arrange in advance.
Half of this site is an excuse to learn something — a renderer, a codec, a font pipeline, an effect we saw once and could not stop thinking about. The1 other half is the learning showing. We publish the seams on purpose, and we read them back like a diary. If a trick survives three projects it stops being a trick and becomes a tool; if it survives five, it gets a name and a page of its own. The effects on this page took an evening to copy and a month to understand, which is the correct order of magnitude for anything worth stealing. Imitation is how craft enters the building; understanding is what lets it stay. We cite our sources and then we out-tinker them.
Some of these projects make money. Most of them make sense only to us, and a few no longer even do that — they stay anyway, as reminders of what a particular month felt like. An archive is more honest than a portfolio: a portfolio says look what we chose, an archive says look what happened. This page is an archive wearing a portfolio's clothes. Some months the output is a product, some months it is a single graph that changes an argument, and some months it is nothing anyone can point at — just a set of mistakes we will not make twice. All three count. The ledger we keep is measured in lessons per attempt, not launches per quarter.
The tools change constantly and the habits barely at all. Read the error message. Reproduce before fixing. Delete the clever version. Write the note you wish you had found. Every stack we adopt eventually turns into these same five habits with new syntax, and we are fine with that — syntax is cheap, habits are compound interest. The other habit, the one that took longest to learn, is stopping. A tired evening produces negative code: work that must first be deleted before progress can resume. We log off mid-thought on purpose, leave a note where the thought ends, and let the morning version — the smarter one — pick it up.
None of this is a company. There is no roadmap, no OKR, no standup — there is a group chat, a shared server, and the standing question of what would be fun to be wrong about next. If that ever stops sounding like a good Tuesday night, we will do something else. It has not stopped yet. The server bill is the only KPI, and the rule is that curiosity has to pay its own rent. Projects that stop earning attention get archived with full honors: a screenshot, a paragraph, a line in the index. Retirement is not failure; it is what completion looks like for things built to teach.
We work in small loops: prototype, measure, throw away, keep the part that survived. Most of what we make is invisible — pipelines, agents, glue — and invisibility is exactly why craft matters. Nobody applauds the migration that didn't corrupt anything. Nobody screenshots the queue that simply drained. The reward for infrastructure done well is silence, and we have learned to hear that silence as praise. The best compliment our work gets is that nobody remembers installing it — it was just there, doing its job, the whole time. There is a particular joy in a cron job that has run every night for two years, in a webhook that has never once been thought about since the day it was written. Boring is a compliment of the highest order. We collect boring the way other people collect trophies, and we polish it just as often.
So we test the boring paths, we log the embarrassing cases, and we assume the three a.m. version of ourselves will be the one reading it. The results of a process are provisional. Any output is a draft of the next one, and a temporary outcome is treated as primitive, not as a verdict. Deadlines are rumors we choose to believe strategically. What ships is what stood up straight when we leaned on it. Estimates are fiction, but useful fiction: they tell you what the author was afraid of. We estimate in fear units — how scared are we of this migration, this API, this font rendering — and the number is wrong in size yet right in shape almost every time. Fear maps beat Gantt charts.
Everything here is under construction, permanently. That is not an apology; it is the method. A finished system is a system nobody is learning from anymore.
If a system stops being questioned it has already started to fail. So we keep questioning, and we keep shipping — in that order, on purpose, every week that we are lucky enough to get to do this. Come back in a month; something will be different, and something will finally be gone. The last line of this page is allowed to change without notice, which is the whole point. If you read this twice and it was identical both times, tell us — something has gone wrong, or worse, something has gone finished.
We are two roommates who enjoy building stuff, if you have any ideas for a new thing that should be built, contact us -->