Written over, not erased.

A palimpsest is a page scraped and written again, the first text still showing through. Nabu is built by one person and an AI. This is how the two layers fit.

Today’s library (src/lib), by line: 25,409 lines in 163 files. The bottom layer is what was already there at 0.1.0-beta.0 and is still there, unchanged: 6,456 lines. The top layer is everything written since. Rough count from the repository history: files are compared one by one and a line that moved counts as new. That beta commit was itself co-signed by Claude, so “before October” is not the same as “by hand”.

The record.

Whose hand made each change. K. is Killian, C. is Claude, working under his direction. The large lines are the moments where he steered.

  • K. Init + Base Relation Blocks + Loro System
  • K. feat(engine): complete Phase 1 - Single CE, Selection Bridge & Structural Input
  • K. fix(selection): solve cursor jumping by synchronizing SvelteSelection with DOM on mutation
  • K. feat(list): implement nested lists with dynamic indentation and hoist/carry logic
  • K. feat: implement Loro-backed undo/redo system
  • K. prepare alpha publication + add presets system
  • K. feat: implement HtmlPasteExtension with decentralized block architecture (3.5.7)
  • C. feat: beta milestone (0.1.0-beta.0)
  • July, August, September: nothing.
  • C. fix(security): escape clipboard HTML and sanitize URLs everywhere (P-42)
  • C. feat(markdown): CommonMark/GFM inline parser for paste and import (P-48)
  • K.

    “No. Regions are boxes in Loro. Markers only on screen.”

  • C. refactor!(regions): regions are containers in the Loro tree (ADR 018, lot A)
  • C. perf(core): batch tree events (one root refresh per batch), O(1) paragraph guard, scoped list normalizer (P-104..P-106)
  • K.

    “It’s not that clean… it’s heavy. Don’t you think?”

  • C. feat(site): website shell (direction B): tokens, self-hosted fonts, header, footer, theme toggle, mobile menu, stub pages; old home moved to /playground
  • C. fix(selection): several editors on one page no longer steal each other's selection
  • K.

    “Okay, go for 0.1.0.”

An excerpt. His lines are translated from French and condensed.

Counts from the repository history: From February to June: 50 commits by Killian, 9 by Claude (co-signed, or authored by Claude Code on GitHub). The 0.1.0-beta.0 commit, authored 11 June, was co-signed. Since October, all 94 commits are co-signed by Claude.

A commit counts as C. when its message carries a “Co-Authored-By: Claude” line, or when Anthropic’s address is its author (Claude Code on GitHub). That records a choice made at commit time, not who wrote what, and a commit without these marks does not prove that no AI was used.

The whole log on GitHub →

In Killian’s own words

These past few weeks, this whole project has made me think a lot. I started Nabu alone. I explored its architecture, then its engine, with my own head, my little brain. I wrote a lot of it by hand (with some help from Claude on a few features back in the spring, like bold and italic, or autosave). I chose object-oriented programming, I came up with the Block and MegaBlock system, I built the original event bus. I chose Loro CRDT and taught myself how to use it. I really enjoyed all of it! And I know that the shape Nabu has today was set by the choices I made back then. That wasn't the AI.
Today, things are different. Without AI, without Claude, I would never have done all this in so little time. And at a time when my creativity is kind of dead, I probably wouldn't have such a nice website either, even if in places it feels a bit AI, haha!
When I picked the beta back up, because I needed it to move forward for some personal projects, I told myself I'd just ask Claude to do the most tedious part: the test suites. If there was one job to give it, that was it! Little by little, so many problems got "batch-resolved" that I started throwing instructions at it, supervising, steering the changes. Claude had picked up the way I code, and it imitated it: that was the holy grail for moving insanely fast. So I kept going.
Do I feel guilty for letting Claude code in my place like that? You have no idea! But guilty of what, exactly? I mean, the beta is out, it works, it's fast, I can keep moving quickly on it. Next stop: the RC! Isn't that the best of all worlds?
I think what I feel guilty about is feeling like an impostor… Losing the feeling of having crafted all of this entirely by hand. Does that make me a worse developer? Lazy? Someone who doesn't belong in the amazing world of crafters and builders? These are the questions that keep nagging at me, and honestly, I don't have the answers.
What I do know is that the day I need to add a feature by hand, or make new architecture decisions, I'll still know how. In fact, I did it during these weeks: when Claude went in the wrong direction on regions, I'm the one who stopped it and redrew the model. The day I decide I can improve the current site and strip out everything that makes it look generic-AI, I'll still know how, and I want to. For now, I just want to have fun, ship the tools I need, and someday, when my head is less full, go back to purely creative craft and love it from start to finish.
Until then, one thing: Nabu's logo is me. Not Claude, haha! Okay, fine: it suggested a few fonts, I picked Syne, and it helped place the wordmark. But the logomark is my own design, made in Affinity, and I'm proud of it!

Killian Di Vincenzo

Read the original in French
Pendant les dernières semaines, tout ce projet m'a fait énormément réfléchir. J'ai commencé Nabu seul, j'ai exploré son architecture, puis son moteur, avec mon crâne, mon petit cerveau. J'ai codé beaucoup de choses à la main, avec déjà, au printemps, un coup de main de Claude sur quelques fonctionnalités, comme le gras et l'italique ou la sauvegarde automatique. J'ai choisi une programmation orientée objet, j'ai imaginé le système de Block et de MegaBlock, j'ai construit le bus d'événements originel. J'ai choisi Loro CRDT et j'ai appris à m'en servir seul. J'ai vraiment pris beaucoup de plaisir dans tout ça ! Et je sais que la forme que Nabu a aujourd'hui est façonnée par les choix que j'ai faits à ce moment-là. Ce n'était pas l'IA.
Aujourd'hui, la donne a changé. Sans IA, sans Claude, je n'aurais jamais accompli tout ça en si peu de temps. Et dans une période où ma créativité est un peu morte, je n'aurais sans doute pas eu un site internet aussi beau, même si par moments il respire un peu l'IA ahah !
Lorsque j'ai repris le développement de la bêta, parce que j'avais besoin que ça avance pour des projets personnels, je m'étais dit que je voulais juste demander à Claude de faire la partie la plus rébarbative : les suites de tests. Je savais que s'il y avait un job à lui donner, c'était ça ! De fil en aiguille, tant de problèmes ont été « batch-resolved » que je me suis mis à balancer les instructions, à superviser, à piloter les modifications. Claude avait compris ma façon de coder, et il l'imitait : c'était le graal pour avancer à une vitesse dingue. Alors j'ai continué.
Est-ce que je culpabilise d'avoir laissé Claude coder à ma place comme ça ? Vous n'imaginez même pas ! Mais de quoi je culpabilise, au juste ? Je veux dire, la bêta est sortie, elle est fonctionnelle, elle est performante, je peux continuer à avancer vite dessus, direction la RC ! C'est le meilleur des mondes, non ?
Je crois que je culpabilise de me sentir un imposteur… D'avoir perdu l'impression d'avoir crafté tout ça entièrement à la main. Est-ce que ça fait de moi un moins bon développeur ? Un fainéant ? Quelqu'un qui n'a pas sa place dans le monde extraordinaire des crafters et des builders ? Ce sont toutes ces questions qui me taraudent, et à vrai dire, je n'ai pas les réponses.
Ce que je sais, c'est que le jour où j'aurai besoin d'ajouter une feature à la main, ou de prendre de nouvelles décisions d'architecture, je saurai encore le faire. D'ailleurs, je l'ai fait pendant ces semaines : quand Claude est parti dans la mauvaise direction sur les régions, c'est moi qui l'ai arrêté et qui ai redessiné le modèle. Le jour où j'estimerai pouvoir améliorer le site actuel pour enlever tout ce qui le rend générique IA, je saurai encore le faire, et j'ai envie de le faire. Pour l'instant, je veux juste m'amuser, sortir les outils dont j'ai besoin, et un jour, quand j'aurai la tête moins pleine, refaire du craft purement créatif en kiffant ça de A à Z.
D'ici là, juste une info : le logo de Nabu, c'est moi. Pas Claude ahah ! Bon d'accord, il m'a proposé quelques polices, j'ai choisi Syne, et il a aidé à placer le textmark. Mais le logomark, c'est ma conception sur Affinity, et j'en suis fier !

Killian Di Vincenzo