Sign in

Jakob Norlin

@norlin.dev
110 followers 126 following 138 posts

Building endform.dev

PostsRepliesMedia
Jakob Norlin @norlin.dev · 07/10/2026
We wrote up how we do it on our blog: endform.dev/blog/playwri...
000
Jakob Norlin @norlin.dev · 07/10/2026
With the Endform MCP server, the agent can access history and trace data from your previous test runs. So it can tell what type of issue it is, whether it's worth rerunning, or quarantine the test directly if it's been causing a lot of trouble lately.
100
Jakob Norlin @norlin.dev · 07/10/2026
The data needed to make these calls is usually buried deep in CI logs that are hard to access and don't paint the whole picture.
100
Jakob Norlin @norlin.dev · 07/10/2026
Here's one from this week. 1 failing test. It has failed 3 times in 1,038 runs over the last 4 weeks, with the same error each time, and the commit only touched an unrelated email file. Verdict: recurring flake, rerun.
100
Jakob Norlin @norlin.dev · 07/10/2026
Lately we've set up an agent to review every test failure in CI. It decides one of three things: → it's a real failure → it should be rerun → it's been flaky enough to quarantine
100
Jakob Norlin @norlin.dev · 07/10/2026
Usually there's way too much to dig through to figure out whether a failure is real, or just a flaky test, check or service. So my default reaction is to rerun without checking what's wrong.
100
Jakob Norlin @norlin.dev · 07/10/2026
How many times did you press "Re-run failed jobs" this week? I haven't been coding much the last few days, and I still think I'm at 5 😅
100
Jakob Norlin @norlin.dev · 07/09/2026
Check it out here endform.dev/docs/guides/...
endform.dev
Performance tuning your Playwright suite for Endform
Tune Endform concurrency, network proxying, and runner regions for faster Playwright runs
000
Jakob Norlin @norlin.dev · 07/09/2026
Endform allows you to limit concurrent tests, which solves both these use cases. Configure a tag that you want to limit concurrency on, what the limit should be, and whether it should only apply within a specific run of your test suite, or globally across all runs happening at the same time.
111
Jakob Norlin @norlin.dev · 07/09/2026
What if the reason for the lock is limited performance, and we actually want to allow 5 out of a 100 tests to run at the same time for a specific lock? Playwright does not allow you that level of control.
110
Jakob Norlin @norlin.dev · 07/09/2026
What happens if you have several CI jobs running at the same time accessing that same shared resource? Playwright has no way to know there are other test suites running, so will allow them, which risks tests mutating data relied upon by other currently running tests.
110
Jakob Norlin @norlin.dev · 07/09/2026
Playwright v1.63 was just released, and it has a new feature called "Test locks". This means only a single test with the same lock name can run at any one time. Great for tests that mutate shared resources that can not reasonably be generated uniquely for each test, but it has some limitations.
110
Jakob Norlin @norlin.dev · 09/08/2026
Understandable! It was just so spooky you all three stopped at about the same time
010
Jakob Norlin @norlin.dev · 09/08/2026
What about @prune602.bsky.social and @delfoo.bsky.social? You guys all stopped posting at the same time, and you were my whole feed 😅
170
Jakob Norlin @norlin.dev · 29/07/2026
In Scandinavia, Moomin merch is top notch merch!
6 different Moomin branded mugs
250
Jakob Norlin @norlin.dev · 18/07/2026
Now called Doomsday Airport
040
Jakob Norlin @norlin.dev · 16/06/2026
Last week we shipped experimental Firefox support in Endform. This means you can now use the fastest Playwright test runner against twice as many browser targets! We're working on WebKit support to cover the whole suite of available browsers. endform.dev/changelog/20...
endform.dev
Experimental Firefox support - Changelog
Experimental Firefox support
000
Jakob Norlin @norlin.dev · 15/06/2026
Ark UI support @segunadebayo.bsky.social 🙄
000
Jakob Norlin @norlin.dev · 12/06/2026
That's not a bad idea. Any ideas for names?
000
Jakob Norlin @norlin.dev · 09/06/2026
Playwright is a great tool for keeping track of perf so you don't regress on perf metrics. You can integrate it with lighthouse and make sure the INP score is good for the interactions you want to stay fast. E2E tests are super versatile and can be used to test so many aspects of your application.
010
Jakob Norlin @norlin.dev · 09/06/2026
This is a fantastic read on how Linear keeps their application so fast performance.dev/how-is-linea.... We've already implemented a couple of these techniques in Endform, but we still have some ways to go.
performance.dev
How's Linear so fast? A technical breakdown
breakdown of the architecture behind Linear's speed: local-first sync, MobX observables, instant first loads, and a keyboard-first design.
100
Reposted by Jakob Norlin
Vite @vite.dev · 04/06/2026
Today, VoidZero joins Cloudflare. Vite remains MIT, vendor-neutral, and stewarded by the same wider team. The same goes for Vitest, Rolldown, and Oxc. Cloudflare is also committing $1M to an OSS fund to support independent development in the Vite ecosystem.
vite.dev
Cloudflare supports Vite's mission
The VoidZero team is joining Cloudflare. Vite remains MIT, vendor-neutral and stewarded by the same wider team.
521238
Jakob Norlin @norlin.dev · 02/06/2026
Love it when SolidJS gets more funding!
031
Jakob Norlin @norlin.dev · 01/06/2026
"Applies to jobs on my behalf" is one of the top promoted templates on Browserbase 😫
010
Jakob Norlin @norlin.dev · 30/05/2026
Example: “Use endform query to find failed checkout tests from the last 14 days, group them by error message, look for patterns across projects and branches, and suggest what in the test or app code is likely causing it.”
000
Jakob Norlin @norlin.dev · 30/05/2026
We just shipped endform query, a new CLI command for pulling Endform analytics data. A neat thing about this is that you can now ask your coding agent to help debug tests.
210
Jakob Norlin @norlin.dev · 29/05/2026
You don’t need to move your whole test suite into CI at once. Start by tagging up a few tests with "@ci" and then run "npm run playwright test --grep=@ci" in your CI pipeline. Tag up more tests as you go to increase confidence in what you ship.
010
Jakob Norlin @norlin.dev · 28/05/2026
2.5 megawatts of server rack space in MagasinX in Stockholm. Completely empty right now. What will they put in here? 🤔
000
Jakob Norlin @norlin.dev · 28/05/2026
Hello Mr Unitree robot 🤖 First one in Europe!
000
Jakob Norlin @norlin.dev · 17/05/2026
Or let others do it for you like in this case I guess
000
Jakob Norlin @norlin.dev · 17/05/2026
Keep your CI fast people!
100
Jakob Norlin @norlin.dev · 13/05/2026
Alchemy is being reimagined on effect.website v2.alchemy.run
v2.alchemy.run
alchemy — zero to production. TypeScript IaC on Effect.
Alchemy is the IaC tool that's actually TypeScript. Stand up your whole cloud in one program, type-check the IAM, hot-reload it locally, run tests against the real cloud, preview every PR, and ship da...
010
Jakob Norlin @norlin.dev · 13/05/2026
I guess Drizzle is actually going from v0 to v1, but it's a huge rewrite orm.drizzle.team/roadmap
orm.drizzle.team
Drizzle ORM - v1 Roadmap
Drizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.
110
Jakob Norlin @norlin.dev · 13/05/2026
Solid is innovating on Suspense and async github.com/solidjs/soli...
github.com
v2.0.0 Beta - The <Suspense> is Over · solidjs solid · Discussion #2596
I know you all probably weren't expecting this announcement next. But after reviewing the roadmap, we spent so long iterating in the Experimental phase, most of the goalposts within Alpha don't app...
110
Jakob Norlin @norlin.dev · 13/05/2026
So many v2 versions of the great tools we're building with brewing atm. Looking forward (with dread) to all the upgrades! @solidjs.com @drizzle.team alchemy.run are the ones I can come up with on the spot, but I'm probably missing one or two.
110
Reposted by Jakob Norlin
Ignacio Zsabo @izsabo.bsky.social · 29/04/2026
Zynth is a fine-grained reactive runtime for iOS and Android built on @solidjs.com principles. It enables an authentic native feel and smooth animations without blocking the JS thread, all from one codebase. Zend is now on the App Store. Open alpha: github.com/zynth-org/zy...
github.com
GitHub - zynth-org/zynth: Create cross-platform app using SolidJS
Create cross-platform app using SolidJS. Contribute to zynth-org/zynth development by creating an account on GitHub.
1184
Jakob Norlin @norlin.dev · 24/04/2026
Why is there so little content like this? I love seeing posts explaining problems solved, especially in the UI layer!
000
Jakob Norlin @norlin.dev · 13/04/2026
Yeah! Although we have a read-heavy dashboard, not many mutations, so Formisch-usage is very light
010
Jakob Norlin @norlin.dev · 13/04/2026
That's pretty much exactly our stack at @endform.dev, except for Hey API. The ecosystem has gotten so good!
110
Jakob Norlin @norlin.dev · 11/04/2026
Definitely pray
010
Jakob Norlin @norlin.dev · 18/02/2026
XAMPP! Didn't change the default login for phpmyadmin. You can never guess what happened next!
140
Jakob Norlin @norlin.dev · 12/02/2026
If true
010
Jakob Norlin @norlin.dev · 28/01/2026
Cool! I wonder what the fallback for that looks like 🤔 (not at a computer)
110
Jakob Norlin @norlin.dev · 01/01/2026
Yeah I agree. It was just a light hearted joke 😊 Although one that might have been pulled a few too many times
000
Jakob Norlin @norlin.dev · 01/01/2026
Oh look, it happened!
CSS code mimicking the tailwind code in the og post
110
Jakob Norlin @norlin.dev · 01/01/2026
media.tenor.com
a bald man in a red and black uniform is sitting in a chair looking at the camera .
Alt: Make it so
110
Reposted by Jakob Norlin
alex @astahmer.dev · 16/12/2025
technically it's been ready for mainstream adoption for a while now, since those were out and mostly stable: - tanstack (query / router / start / form) - ark-ui (ui lib) - shadcn distribution (copy/paste/dl from registries and adapt) so whats missing?
051
Jakob Norlin @norlin.dev · 25/11/2025
My LLM autocomplete just suggested the TS native type Exclude<...>. Didn't know about that, and it seems to be exactly what I needed. Almost like your DistributiveOmit, except it doesn't enforce "K extends keyof T", so it doesn't work for objects, like in your example. But good enough for unions!
Typescript Exclude type
140
Jakob Norlin @norlin.dev · 25/11/2025
Right on time! I just had to replace an omit with a manually specified subset of a union yesterday. I was very surprised the omit didn't just work. Will use this helper today to get some dignity back! 😆
130
Jakob Norlin @norlin.dev · 20/11/2025
And thanks! 😊
010