authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-03-17 00:04:50-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-03-17 00:08:14-07:00
log3b6fe249342235df612779f0593fccb3ee54970a
tree81af70581eca227b36df73add4a1614beef676dc
parent036947fa3f2e894814b59e0d5dd5470678905c9f
signature Signed by SSH key SHA256:xbd+BjjhyBfwk7GVoURf9Yx0gzDerHbvYv7SddNWmAs

feat: update log


1 files changed, 225 insertions(+), 2 deletions(-)

src/pages/log.mdo+225-2
......@@ -5,7 +5,6 @@ meta:
55import './log.css';
66static const repo = "${repo}";
77
8[go back to the home page](/)
98
109[git]: https://git.paperclover.net/
1110[home infra]: https://git.paperclover.net/clo/home-infra
......@@ -18,16 +17,240 @@ static const repo = "${repo}";
1817[evil inc]: https://evil.inc/
1918[history of japan reanimated]: /history-of-japan-reanimated
2019[react mutation]: /history-of-japan-reanimated
20[HOTEWIG reanimated]: /hotewig-reanimated
21[clover creative control]: https://git.paperclover.net/clo/creative-control
22[markodown]: https://git.paperclover.net/clo/markodown
2123
2224<main>
2325
26[go back to the home page](/)
27
2428# clover's log
2529
2630these are like mini blog posts, but more in generally just what the heck i'm up to.
2731
32## 2026-03-16
33
34just chilling. at work i replaced `bun install` with `pnpm`. pretty peak. in the
35night, i worked on [this page][this site], and worked a bit on [hexiflare]'s
36local llm system.
37
38## 2026-03-15
39
40tags: [clover creative control]
41
42this is sort of the new version of what i've called "creative toolkit." it's now
43a TypeScript library that controls REAPER and the DaVinci Resolve Speed Editor.
44the two layers are the library layer and the configuration layer. the config
45layer is meant to be trivial, editable and instantly-reloadable at a moments notice.
46
47```ts
48export default config.forApp("com.cockos.reaper", ({ speededitor: se, mac }) => {
49 const reaper = new Reaper();
50
51 // Sync state to LEDs
52 reaper.on("transport", (transport) => {
53 se.leds.cut = transport.recording;
54 se.leds.dissolve = transport.recording;
55 se.leds.smoothCut = transport.recording;
56 });
57
58 // Keyboard Actions
59 se.onPress("stopPlay", () => {
60 if (reaper.transport.recording) {
61 reaper.runAction("transport-stop-save-all-recorded-media");
62 } else {
63 reaper.runAction("transport-play-stop");
64 }
65 });
66 se.onPress("cut", () => {
67 if (reaper.transport.recording) {
68 reaper.runAction("transport-stop-delete-all-recorded-media");
69 reaper.runAction("transport-record");
70 } else {
71 reaper.runAction("transport-record");
72 }
73 });
74 se.onPress("dissolve", () => {
75 reaper.runAction("transport-stop-delete-all-recorded-media");
76 });
77 se.onPress("smoothCut", () => {
78 if (reaper.transport.recording) {
79 reaper.runAction("transport-stop-save-all-recorded-media");
80 reaper.runAction("transport-record");
81 }
82 });
83 se.onPress("videoOnly", () => {
84 if (mac.window?.title.startsWith("FX:") && mac.mainWindow) {
85 mac.focusMainWindow();
86 return;
87 }
88 reaper.runAction("track-view-fx-chain-for-current-last-touched-track");
89 });
90});
91```
92
93the winning workflow here for recording audio has been the bottom three keys being mapped to
94
95- start a recording. or if one is already going, delete and restart it
96- discard the currently recording take and stop
97- accept the currently recording and start a new one
98
99this is better than just having keys on the main keyboard, no modifiers! *and* i
100don't have to lose out on any existing keybinds.
101
102i used to have a setup like this with multiple external keyboards, but i am
103keeping that on hold until i run out of macro keys. what's also interesting to
104note is each app gets its own layer of bindings.
105
106## 2026-03-14
107
108tags: [album]
109
110i've made some beautiful progress on the album, i finished another song. it is
111one of my best creative works i've ever done. i'm personally very happy with my
112singing and vocal editing skills improving. will be holding it captive except in
113some small circles (who have all said it is amazing)
114
115## 2026-03-11
116
117tags: [react mutation]
118
119my coworker was working on something that needed a feature for react mutation. i
120also needed his approval on some code i was working on, but he wouldn't give me
121any attention. so as a bribe, i released a new patch of the library. my PR was
122reviewed, and everything was great. the changelog
123
124- tanstack query integration
125 - [feat: `arrayUpsert` and `objArrayUpsert`](https://git.paperclover.net/clo/react-mutation/commit/47304f56e98bf841b757d16e472fb64a01c99fd2)
126 - [fix: allow spreading `TanstackQueryOptimisticHelpers`](https://git.paperclover.net/clo/react-mutation/commit/4b09ff4dba5fad5b7e2b44a0bdc2789918f74561)
127- mutation buttons
128 - [pass `args={null}` to disable the button UI](https://git.paperclover.net/clo/react-mutation/commit/ec65067d04a72a51b71b63d3b4569843b8fd0dad)
129
130## 2026-03-10
131
132tags: [hexiflare]
133
134with the hexi bot with just two users eating my entire at-work anthropic
135subscription, i was messing with getting hexi to work as much on local models as
136possible. the results are very promising, but it is very much becoming a
137manually designed and written project, which is good (slop is bad). but that
138does mean i can't spent a lot of time on it, as i have other desires.
139
140anyways, the local model chat system works by having a qwen model with an insane
141"personality" prompt. and then it goes through another qwen model with an
142equally insane "review". the results are pretty good.
143
144```
145you> what u been up to?
146hexi> not much lol
147hexi> messing w/ some css animations rn breaking them is kinda fun though
148you> omg can i see?
149hexi> hold on lemme whip up a lil demo page real quick
150[triggers sandboxed agent task]
151```
152
153benefit of doing it this way instead of through a stupid wrapper, the latency
154can be brought down a ton. but the full system isn't wired up, and i frankly
155don't trust anyone but myself to do this task.
156
157## 2026-03-05
158
159tags: [work], [hexiflare]
160
161i wrote a beautiful dialog component for use at work and in the hexiflare
162template. the usage is like this:
163
164```ts
165showTextDialog({
166 title: "Hello hiii heelloooo.",
167 description: "Enter something important"
168 onConfirm: async (reason) => {
169 // do something with `reason`
170 },
171 onCancel: "close",
172});
173```
174
175it's certainly better than copying the Radix Dialog everywhere. that component
176is a great primitive but it isn't nice to spam it.
177
178
179## 2026-02-25
180
181tags: [hexiflare]
182
183i was starting to work on an ai project, a chatbot that is absurdly tuned to the
184format of texting. in addition to this, it has full access to a (sandboxed)
185computing environment where it can run any command, browser use, and also can
186deploy web apps.
187
188this whole thing is based on a friend's project, named "clungus", which was
189literally just a wrapper around claude code. his could deploy static websites,
190which was really cool since you could just ask it for some little thing and it
191would just make it. and you send your bug reports as text messages.
192
193in both bots, the interface is much more natural than using claude code,
194chatgpt, or another application. and with mine particularly, i was working on
195making the base app template as high quality as possible, so that the apps. so
196at a minimum, we now have one of the best tanstack start templates ever. at
197best, i might be able to automate some apps i never would've cared to write
198manually.
199
200## 2026-02-25
201
202## 2026-02-18
203
204tags: [this site], [markodown]
205
206i finally closed [issue #1](https://git.paperclover.net/clo/sitegen/issues/1) on
207my website, eliminating the MDX compiler in its entirety on my website.
208
209i don't think MDX is a great format to work with. and on top of that, it adds
210111 transitive dependencies to my website. and what, all for a medium markdown
211language. markdown is inherently concise, so pairing it with Marko felt like it
212would be a nicer format to work in. the answer: it is! i made "markodown", by
213using rust, a bit of llm slop, and used it a ton to ensure a good api. the
214result is beautiful.
215
216my favorite part of this language is automatic header tracking being built in.
217alongside Marko's id shorthand, i can type something like this:
218
219```ts
220<h2#technical-review>A Technical Review: What are Server Components?</>
221```
222
223and the compiler will track this properly, emitting it as
224`<Heading level=2 id="technical-review">` and including it in the generated
225table of contents. i can then include the table of contents with a
226`<table-of-contents />` element
227
228a little bit tough because i did spend a whole week on it. but it's done, and i
229love it. after this port, i also axed some other dependencies in favor of
230lighter alternatives:
231
232- `puppeteer` with `playwright`
233- `codemirror` with `<textarea />`
234- panning to replace `msgpackr` with a custom format that handles the types needed
235
236and the biggest of all, deprecating my HTML rendering framework, in favor of
237using Marko. this is technically a complexity increase, except for the part
238where i already supported Marko.
239
240## 2026-02-08
241
242tags: [HOTEWIG reanimated]
243
244i am on the team of people organizing "history of the entire world, i guess -
245reanimated." not much news yet, but it will be exciting. please fill out the
246form if you are interested, and please send it to anyone you may think would be
247interested.
248
28249## 2026-02-06
29250
30spent yesterday and today cathing up with this page and preparing to get
251tags: [this site]
252
253spent yesterday and today catching up with this page and preparing to get
31254writing heavy on the blog. i also fixed a bug on the video player where it
32255wouldnt work on latest chrome on non-av1 accelerated hardware.
33256