Sign in

M 🏳️‍⚧️🦀🏴‍☠️

@msnook.xyz
897 followers 848 following 2.2K posts

I run a tiny web agency here in Bangalore, India: emju.in. DMs open. they/them 🍞🌹🏳️‍⚧️🏴‍☠️🇵🇸⌨️🚀 sober, dancing whenever I remember to dance.

PostsRepliesMedia
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 15/09/2026
It turns out, the reason your NextJS site tells you it's pre-rendering everything, but your Vercel bill is still high and your pages feel sluggish... is because they're fucking lying to you. (Run this prompt in your NextJS project -- prompt text in image alt) #BuildInPublic
We've recently become aware that the rendering strategies Next.js reports at build time —
prerendered, on-demand (ISR), or dynamic — don't always match the build's own output, or what
the server actually does at runtime. Please audit this for our production build.

1. Run the production build and capture the full log.

2. Record what the build CLAIMS: the strategy it prints for each route.

3. Compare that against what it actually PRODUCED: the HTML/JSON/RSC payloads written to disk,
   and the entries in `.next/prerender-manifest.json`. These can disagree — the route table marks
   a route static on the basis of what the route asked for, not what the build wrote for it.

4. Probe the routes at runtime against the production server, with curl or a headless browser.
   Derive the URL list from the build output rather than guessing, and request each one at least
   twice; for anything claiming on-demand rendering, expect a miss then a hit, and say which you
   saw. Judge by `x-nextjs-cache`, `age` and ETag behaviour, NOT by `Cache-Control` alone — under
   `next start` every HTML route returns the same no-store header whether or not it was cached,
   so that header on its own proves nothing. Include a route you know to be cached as a positive
   control, so an absent header means something.

Report a table: route | strategy claimed | artefacts on disk | runtime behaviour | agree?

Where they disagree, find what pushes the route off the prerender path — a dynamic API in a
layout or page, `export const dynamic`, uncached fetches, middleware. Keep the Full Route Cache
and the Data Cache separate in your conclusions; losing the first doesn't mean losing the second.
Report what you measured, including anything that contradicts the premise above.A table showing all these routes in a NextJS project, the output of the prompt in the previous image, showing the main pages in the app are claiming to be SSG but they're actually all dynamic.
160
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 14/09/2026
All work and no play makes Fable burn through your entire weekly budget overnight re-reading the same inactive PR... #BuildInPublic
My claude code chat window, with an entire screen full of the same 2 lines:

Used 5 tools
No change on 306. Next check-in armed for an hour out.
131
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 28/08/2026
recently I'm loving the way the LLM can give me these kinds of overviews, so I don't just move up the abstractions but down too: I can spend more time in reading-the-code mode. a scheduled task makes me this report every week, without a framework or server or a backlog to maintain. #BuildInPublic
a "Sunlo Issue Triage" dashboard for August 27. It shows open items, issues, PRs, critical, high, medium, duplicates. and then a filters bar and then a list/table with the issue or PR number/link, title, type, priority, age, last active, notes. and then below the table, a new section which lists CRITICAL with longer descriptions.
130
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 07/08/2026
I find this URL structure to be downright insidious
screenshot showing two github URLs, for an issue and a pull request. they end with "pull/206" and "issues/625" the user has highlighted the word "issues"
010
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 05/08/2026
❌ "Handlers write the ack." ✅ "Update/Insert handlers write the server acknowledgement back to the collection."
That hip hop teaching white lady, wearing black track pants and blue... urm... Rugby shirt, maybe? cropped hair, in a dance studio, caption "Keep your hip hop head up y'all. Boom bap!"
010
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 05/08/2026
since we are all sharing our claude writing guides this week...
screenshot of my claude.md, just the title and one line: "- No slam poetry"
120
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 04/08/2026
Migrating a site from NextJS -> Vinext and LOOK AT THIS DIFF 60% of package-lock.json is just gone; compiled Javascript is 40% less. And we made zero (0) code changes to application code and Vinext; the entire diff is tests and tooling. #buildInPublic
GitHub screenshot showing the diff on package-lock.json: plus 8,952 lines, minus 23,078 lines.
040
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 30/07/2026
me, before the meeting: okay I'm not gonna get all political about it... them, at the meeting: Vinext was full of security problems! me:
Screenshot from the opening of the recent video of NYC Mayor Zohran Mamdani, seated at his desk in a charcoal suit, in front of the flags of USA and NYC, with a serious look on his face and his hands clasped and resting on the des in front of him. the caption for the video says "Benjamin Netanyahu is a war criminal"
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 15/07/2026
why did they spend years making all the screens wider only to now just make them taller. like, they could have just zoomed out...
a still from The Odyssey -- showing the full picture in IMAX vs the heavily cropped picture on a regular screen
030
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 08/04/2026
what if we
image showing 2 charts, "year 2024" and "hypothetical". they're both bar charts with a bunch of big countries on the left hand side, starting with the US, then China, Russia, Germany, India, United Kingdom, Sauria Arabia + 8 more.

the "year 2024" chart shows the USA's bar going allll the way to the right side of the chart, far outstripping any other country, dwarfing every other except China, with Russia in a distant 3rd and all the others kind of trailing. The value for the USA's bar is almost 1,000; china's is around 320, Russia around 150, and all the rest being between 50 and 100. (hint, it represents military budget in billions of USD.)

In the second chart, labeled "Hypothetical", everything is the same except the US value is the same as china's. All the other bars look much bigger in this one.
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 08/04/2026
this is so stuppid. who do they think is using the AI?
ad on twitter for "@MechanizeWork" that says "We're hiring Junior software Engineers" and the ad says "AI isn't replacing engineers. it's replacing engineers who can't beat it. // junior SWE. $300k/year. SF, CA. Mechanize." Link text: We're hiring.
011
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 07/04/2026
because kids aren't born being okay with this kind of violence. it takes a lifetime of grooming, with culture, and family, and bad influences, (and yes, financial desperation) to create these conditions. and even then, there are limits
headline from navarro media, backdrop image shows silhouette of a soldier inside an air transport of some kind. text: "Number of US Soldiers mulling Conscientious objection rises by 1,000%. 'They're scared of killing people in a war they don't believe in.'
020
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 07/04/2026
I hope this means they are phasing out the TUI 🙏 just because I'm a hater and imo TUIs are bad software
a little info box in the claude chat that says:

Claude works directly with your codebase

Let Claude edit files, run commands, and ship changes right inside your terminal or IDE.
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 03/04/2026
I want to send PRs just for this list. +bruh
an image of the claude code list of negative words/phrases to make note of:

const negativePattern = /\b(wft|wth|ffs|omg|shit(ty|tiest)?|dumbass|horrible|awful|(piss(ed|ing)? off|piece of (shit|crap|junk)|what the (fuck|hell)|fucking? (broken|useless|terrible|awful|horrible)|fuck you|screw (this|you)|so frustrating|this sucks|damn it)\b/
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 03/04/2026
I'm not a philosopher but I continue to think that lots of western ethics is getting something wrong: too many layers. Abstractions that only make sense when you're removed from The Thing. Here's an example: What is "peace through strength?" (fig. 1) It's an abstraction, made to separate...
MemeText over an image: a rudimentary drawing of a pyramid of cards, with the base layer having 5 triangles, and 5 layers reaching up to the top.

three lines of text, starting from the bottom:
1. people want peace
2. peace through strength
3. 4-6 genocides at a time
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 03/04/2026
Seriously though Claude 4.6 is getting stupider by the day. I continue to believe that these models are far better at writing complete feature-sets once, rather than doing surgery on existing code. it's a different "build -> simplify" lifecycle that I'm still figuring out how to articulate
me asking claude: "why no highlight when the dialog is covering it? this is logic we're doing just to special-case the styling on a covered-up image? and styling that will change the border width and cause a reflow? why?"



claude replying: "You're right, that's pointless complexity. Just use isFocused for highlighting too."
210
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 02/04/2026
I love stuff like this 🤷‍♀️ #software #javascript #claude #react
some output from a claude code session showing:

> Show squashed commit history

17 commits → 5 clean phases. Now force push since we rewrote history.


> Force push squashed history

Done. 17 commits squashed into 5:

1. Edit comment form parity — markdown hints, flashcard support, delete RLS policy
2. Consolidate components — 6+ components → CommentDialog + ReplyDialog, URL-driven
3. Simplify URL state — 7 params → focus + mode, fix query compiler crash
4. Unify focus styling — consistent borders, scaled-down replies
5. Reply thread UX — keep focus on close, reply prompt placement, toggle fix

> 1 step
020
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 11/03/2026
this chart is called "bullying your way to stability"
a chart showing gas prices hopping around a little between 3.00 and 3.20 per calling, dropping in Jan to 2.80 and then SKYROCKETING off the top of the chart in March.
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 25/02/2026
I love that they ran out of villains so hard they just went ahead and made goku evil and gay
image of "dragonball super" character Goku Black in the Rosé form. wearing black turtleneck, pink hair because of the red powerup, big smirk, 1 earring.
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 18/02/2026
Why is the Scaler masterclass ad negging me?
screenshot of this "scaler masterclass" ad where the guy is looking real smug and saying "still enjoying those production crashes? how's that going for you?"
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 17/02/2026
tag urself I'm the malding nerd in the middle, about to go to degoba to kill the unnecessary buttons that are holding me back
the bell curve meme, where 

- the low-intelligence person is saying: "I added a 4th button type to buttons.css"
- the nerd in the middle of the bell curve says: "my new design system generates button classes for 3 different brand hues, 4 semantic intents, different pre-sets for outline, emphasis, contrast and context"
- the jedi looking one on the high end says "primary, soft, destructive, neutral"
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 17/02/2026
I just love it
screenshot of a colour utility showing "hues" for "primary, accent, success, warning, danger, info" showing a slider for each one, and a little colour swatch and the value in degrees like "233" means "blue" and so on.
then a section called "luminance range" where you can set the base and fore values for luminance, currently set to "0.12 to 0.92", and showing 5 different luminance stops for the selected colour (accent).
then finally a section called "chroma stops" showing 5 different chroma values with the leftmost being gray and the rightmost being a bright pink.the same LCH colour view as the other one, but a desktop-sized layout. also shows a little legend at the bottom that shows the different tailwind class utilities you could use to generate the colour having the selected hue, luminance, and chroma (selected in the 3 sections above). this one says "bg-8-mhi-info" which corresponds to the "luminance contrast level 8 (of 10)" and "medium high chroma" for the "info hue". the result is a relatively bright robin's egg blue.
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 17/02/2026
you know the "scaler masterclass" people are targetting wannabes in particular because every working software engineer I know is reskilling EVERY DAY
image from this youtube ad saying "+80% of Software Engineers will need reskilling by 2027"
120
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 12/02/2026
a tweet from Toni Purgatory (@spirituallock) that reads: "Nobody said taking out a 6,000 yr old death cult would be easy"
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 12/02/2026
Let's all read this one together
book cover for Ursula K Le Guin's "The Ones Who Walk Away From Omelas". some shadowy figures seen walking away over a horizon with a bright sun shining over an idyllic hilly expanse.
010
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 10/02/2026
no joke, this is my best advice for prompting
prompting claude: "it's too many clicks to add a new card on the edit playlist screen" (it's the claude web/cloud view, app called "sunlo" branch named "next")me, prompting claude: "mcp server for devs writing tests?" in claude web view, in the repo "scenetest" on the branch "develop"
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 10/02/2026
does anyone know where i was going with this...
sorry i cannot help you much with this image... it's kind of like three different little diagrams?? but very squiggly and unsure
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 09/02/2026
Gandalf saying, "I would use this Ring from a desire to [FIND PUPPIES], but through me it would wield a power too great and terrible to imagine."
020
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 08/02/2026
"mistreating others, i can understand, but mistreating ME?! that's where i draw the line"
tweet sowing JD Vance saying "when i took my kids to disneyworld, individuals were shouting horrible things at my small children"
010
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 29/01/2026
okay now i'm p happy with this. write your specs in markdown and you can almost SEE the javascript instructions they map onto 🤤 coming soon to a VSCode extension near you! #BuildInPublic
screenshot showing vscode window open to `example.spec.md` with a markdown heading and subheadings with lists, but it's all javascript-flavoured syntax highlighting, where the lines are written as `see some-document-selector` and the syntax highlighting displays `see` looking like a function and the `some-document-selector` looking the colour of a string literal like a className or ID from writing HTML or JSX. There are some interpolated values like `typeInto email [primary-user.email]` and the latter part is syntax-highlighted as if it were ES6 template literal string interpolation. and so on.
011
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 29/01/2026
oops now we have syntax highlighting #BuildInPublic
131
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 28/01/2026
I LOVE IT #BuildInPublic scenetest.msnook.xyz #Javascript #Testing
screenshot of the claude code chat:
**Macro argument mapping:**

Instead of `role new-user` (which is ambiguous about what name the macro uses), use explicit mapping:

```
send-friend-request target=new-user other=alice
```
The macro can then reference `[target.username]` and `[other.email]`.
020
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 28/01/2026
Okay because this is my package and I'm in charge apparently I just have to decide things so I have decided THIS is the easiest format for describing test specs! 🙌 scenetest.msnook.xyz/reference/te...
Screenshot from my docs site, showing a heading "Exampe" and code block of markdown text:

# User friend requests

## new user signs up and gets a friend request
new-user:
- openTo /
- see welcome-box
- click continue-button

primary-user:
- openTo /friends
- click main-navbar search
- typeInto search-input [new-user.username]
- see search-results-section
- click friend-request-button

new-user:
- seeToast friend-request
- see navbar notifications-badge
- click
- see notifications-menu-expanded new-friend-request
- click

## old user re-activates account
returning-user:
- openTo /login
- see login-form
- typeInto email [returning-user.email]
- click submit
100
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 28/01/2026
I think this is my fave approach (top half of thie image) but I don't know any good reason not to let people do wonkier things -- actually even in this screenshot you can see some same-line chaining of actions `- prev - see ...` -- the parser has no need for this `-` but is it a useful human hint?
code editor showing markdown, 18 lines:

// top level is scope, then actions
actor: best-friend-user
- openTo /
- see welcome-box
  - click continue-button
- see onboarding-step
  - click agree-checkbox
  - click agree-button
- prev see something-else

// easier to tell that an `- if` will revert
// why not `-` to separate actions? idk
actor: best-friend-user
- openTo /
- if cookie-alert
	- click continue-button
- see onboarding-step
  - click agree-checkbox - click agree-button
- prev - see something-else
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 27/01/2026
But/so who knows what is the best grammar for this thing... fr srs- check out "loose mode" (fig 1), where kind of any order of kebab-cased scrings will compile into a valid script (seriously). or w a linter-assisted "scope tracking" punctuation that helps authors understand the mechanics of the spec
screenshot of code editor, line 18 - 30:

// loose 1 - any symbol order
actor best-friend-user
openTo: /
welcome-box click continue-button
see onboarding-step

// loose 2 - same parsing rules as 1
actor best-friend-user
openTo: /
- welcome-box continue-button click
- onboarding-stepcode editor, lines 31-55:
// tracking the scope with the dashes
actor: best-friend-user
- openTo: /
- see: welcome-box
  click: continue-button
- see: onboarding-step
  click: agree-button
- prev // takes me back to `welcome-box`
// `- prev prev` would have gone back to the `openTo /` scope
  see something-else

^^ does tracking the scope help you or no? I mean we can lint this easily
can't we? ^^ so then people run the linter once and it TELLS THEM or our
intellisense for the DSL can do it easy, right?

// indented actions; no punctuation
actor best-friend-user
- openTo /
- see welcome-box
  - click continue-button
- see onboarding-step
  - click agree-checkbox
  - click agree-button
// only creates one new scope
- prev see something-else
100
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 27/01/2026
And because the synchronous/declarative model is so simple (it just stacks operations ontop of a queue and advances as far as it can and then waits) it makes it super easy to write multi-actor scenes without race conditions or `Promise.all`. So then it wasn't too hard to make this DSL for it...
screenshot from 17 lines of markdown/code editor:
# User Setup Specs

## User logs in and gets first friend request

// no-punctuation, verb-object grammar
actor best-friend-user
openTo /
see welcome-box
click continue-button
see onboarding-step

// high structure
actor: best-friend-user
- openTo: /
- see: welcome-box
- click: continue-button
- see: onboarding-step
100
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 27/01/2026
I can't tell what's better sort of grammar / ergonomics for this DSL. Right now everything compiles to playwright driver statements anyway through this traditional async model... but we have this mm I think nice and very ergonomic synchronous/declarative model, seen in second screenshot...
screenshot showing three tabs of a code sample block from the website: "Declarative flow" "Text DSL" and the highlighted tab "Async spec". Code contents of the "Async spec" code block: 
import { scene } from '@scenetest/cli'

scene('user completes onboarding', async ({ actor }) => {
  const user = await actor('new-user')

  await user.openTo('/')
  await user.see('welcome-box')
  await user.click('continue-button')
  await user.see('onboarding-step')
})screenshot showing three tabs of a code sample block from the website: the highlight first tab is called "Declarative flow"; the other two are called "Text DSL" and "Async spec". Contents of the Declarative flow code block: 
import { flow } from '@scenetest/cli'

flow('user completes onboarding', ({ actor }) => {
  const user = actor('new-user')

  // Declarations — nothing executes until the function returns
  user.openTo('/')
  user.see('welcome-box')
  user.click('continue-button')
  user.see('onboarding-step')
})
100
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 27/01/2026
Imagine if writing specs were just writing a markdown file of who does what... -- SOON MAYBE IT WILL BE #BuildInPublic (I made writing scene specs to easy you can do it in markdown, e.g. `friend-request.spec.md` 🎬)
# New user logs in and gets a friend request
actor new-user
- openTo /
- see welcome-box
- click continue-button
- see onboarding-step

actor primary-user
- openTo /friends
- click main-navbar search
- typeInto search-input [new-user.username]
- see search-results-section 
click friend-request-button [new-user.id]
// optional space line
// comments okay! spit them out as console.log if you wanna?
150
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 26/01/2026
I HAVE AN ESLINT PLUGIN NOW. this week is about to have me saying sh** like "the only limit is your imagination" (the plugin looks for time where you use `data-testid` on an interactive element that should have an `aria-label` and recommends you use an accessible label instead of a test ID)
screenshot of my claude code session adding a "scenetest" eslint plugin, showing:
```
// eslint.config.js
import scenetest from '@scenetest/eslint-plugin'

export default [
  scenetest.configs.recommended,  // enables the rule as "warn"
]
```
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 25/01/2026
I know I said I would be doing unhinged things but also some extremely reasonable things?
new code block in a git commit:

two JSON blocks, one labeled "actors/team-maria.ts" and the other labeled "actors/team-john.ts" (second team for parallel execution). 

Full code is:
// actors/team-maria.ts
export default {
  'primary-learner': {
    email: 'maria@test.com',
    password: 'test123',
    nativeLanguage: 'english',
    targetLanguage: 'spanish',
  },
  'existing-friend': {
    email: 'carlos@test.com',
    password: 'test123',
  },
  'random-stranger': {
    email: 'stranger@test.com',
    password: 'test123',
  },
}
```

```typescript
// actors/team-john.ts — second team for parallel execution
export default {
  'primary-learner': {
    email: 'john@test.com',
    password: 'test123',
    nativeLanguage: 'english',
    targetLanguage: 'french',
  },
  'existing-friend': {
    email: 'pierre@test.com',
    password: 'test123',
  },
  'random-stranger': {
    email: 'stranger2@test.com',
    password: 'test123',
  },
}
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 25/01/2026
I love this little alias. When I am having a productive day it feels _really_ satisfying.
screenshot of a highlighted section of my .zshrc file:

```
# switch to a branch and delete the current one
function gdone() {
  local current_branch=$(git branch --show-current)
  git checkout "$1" && git branch -D "$current_branch"
}
```screenshot of my zshell prompt, starting on one branch and then a command is entered: "gdone main", and it says:

Switched to branch 'main'
Your branch is up to date with 'origin/main'.
Deleted branch add/jiti-ts-in-cli (was c05597a).
➜  scenetest-js git:(main)
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 24/01/2026
I had no idea I had so many opinions about devtools until I was building one. see the little "1 repeat + 1 resolved" I LOVE IT
100
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 24/01/2026
this may be my favourite feature. it's... you can hear your assertions passing (or not)... doing a synesthesia to the reporting tool (you can see it for real at scenetest.msnook.xyz)
screenshot of the the different test assertions from different parts of the app and the number of times they've run and when they passed and failed, laid out in a list but also, at the top, a narrow-ish band, showing a timeline like the notes in a song, coming through red or green; you can hear the difference; assertions that run in the same tick are played as a chordAfter clicking one of the sometimes-passing-sometimes-failing assertions, we see a chronology of this same event each time it has fired, and hovering over one we see the 2 other events that fired during that same tick (and we get to hear the chord)
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 23/01/2026
the real secret to my method
000
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 23/01/2026
And then zoom in on that event and see, is the error persisting or is it just momentary? I think(!) this kind of thing can really help you test and hone your _mental model_ of what's going on in the code you're writing or debugging, help you find those intermediate states & race conditions.
A detail page showing all the assertions that took place at App.tsx:87:13 "DOM email should match saved value" showing a green check 3 and a red x 1. you can see them listed chronologically; the one at the bottom of the list is the red X one. it says "first event" at the bottom.
100
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 23/01/2026
Okay so I got tired of looking at this stream of events going past pass fail pass fail, so I asked it to group by the location in the code where the assertion is made. I like it! #BuildInPublic
scenetest events panel, showing a different sort order, instead of "timeline" it's using "by location" and it's a bunch of entries like "App.tsx:86 - DOM name matches saved value". the screen is full of entries with a bunch of little green dots and summaries that say "8 runs" with a checkmark and 7 in green and an x and 1 in red.
130
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 22/01/2026
This is so beautiful and I absolutely hate having to shelve it fttb but it's so big and opinionated AHHHH I have to come back to it later #BuildInPublic #LettingGo #BreatheDeeply
Screenshot of the same test harness overlaid over a website, with a panel in the bottom right listing like passing tests scrolling by as the user uses the site, and then a larger panel that shows at the bottom a scrolling timeline of user-triggered/code-triggered tests getting passed and failed as the user clicks around the site, and in the main area, showing a kind of 3D graph of the different nodes / places in the component tree where these events passes/fails are firing from and showing how sometimes they light up in the same tick and sometimes in the next one, and so on, how they fire almost like neurons in a brain.
131
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 22/01/2026
do you ever just want to make sure two values end up matching within a few ticks of each other? I'm not sure what to call it yet: useWatch( 'state and props should sync within a vew ticks, match( [state, props, form.values], ['created_at', 'username', 'user.email'] ) )
screenshot of my updating todo list "add useWatch to Vue" is crossed off, then there's pending items for 
- Adding createWatch to Solid
- Add watch helper to Svelte (for use in $effect)
- Add documentation for useWatch in README
- Test the feature works end-to-end
110
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 22/01/2026
my approach for the last week or so #RALPH #LisaSimpsonMethod
simpson's screenshot with Ralph and Lisa at a movie. He looks very enthused and she looks skeptical.Ralph kneeling before Lisa and throwig himself off the side of the hillRalph walking Lisa home while she looks tired of his presence and he smiles nervouslyRalph opening a valentine's day card Lisa made for him
100
M 🏳️‍⚧️🦀🏴‍☠️ @msnook.xyz · 22/01/2026
Oops I accidentally made packages for vanilla JS/core + react, vue, solid, svelte
showing a git commit where about 7 lines of code are being added "All scenetest packages" reads the comment. it's an array called SCENETEST_PACKAGES and the values are 'scenetest', 'scenetest-react', 'scenetest-vue', 'scenetest-solid', 'scenetest-svelte',
120