Jake Lazaroff
@jakelazaroff.com
2.7K followers 450 following 1.4K posts
nyc-based programmer and designer. alum @recursecenter.bsky.social. public transit enjoyer. thoughts on local-first software, javascript frameworks, web components, css and other web minutiae. 🌐 https://jakelazaroff.com
Posts Media Videos Starter Packs
Pinned
jakelazaroff.com
hi new friends! i’m jake, a programmer & designer based in NYC. i talk a lot about local-first apps & the web.

if you followed me from a starter pack & don’t know who i am, here are some (imo) cool things i’ve done/written. these are all on my website which you can follow via RSS:

jakelazaroff.com
jakelazaroff.com
Just a programmer trying to make a home for myself on the WWW.
jakelazaroff.com
Reposted by Jake Lazaroff
ryanmulligan.dev
Container queries and CSS make it simple to smoothly transition an element to the other side of its parent container without knowing exact dimensions or distance.

Read more in my latest post: ryanmulligan.dev/blog/transit...
jakelazaroff.com
every day we stray further from god's light
jakelazaroff.com
sorry, i meant fine-grained oauth scopes should mitigate it by preventing appviews from accessing *other* private data (e.g. the bluesky appview couldn't access leaflet drafts, and vice versa).

for private data *within* an oauth scope i don't think there's a way around trusting the appview!
jakelazaroff.com
ah posted this before i saw your follow up
jakelazaroff.com
the leaflet is about how the protocol might come to support private in a PDS. fine-grained oauth scopes should mitigate the appview trust issue
jakelazaroff.com
it's a shame, because i think "user-controlled auth and private persistence" is already a huge unlock for building small apps without needing to maintain any infrastructure. i get why they'd wait to figure out shared private data first though.
jakelazaroff.com
huh, i was under the impression that private data in atproto was tricky for protocol reasons. turns out that's mostly about *shared* private data (e.g. DMs, posts visible to a specific group of people). *personal* private data (e.g. drafts, bookmarks) is actually fairly simple.
Private data: developing a rubric for success - Paul's Leaflets
What will an effective solution look like?
pfrazee.leaflet.pub
jakelazaroff.com
where the heck did all these come from???
jakelazaroff.com
ahhh makes sense. in that case i'd probably start with react and just rewrite sluggish parts to be imperative and manual as needed. worry about the performance problems as they happen, not in advance. if you have a very tight loop, worse comes to worst you can drop to imperative DOM manipulation.
jakelazaroff.com
you can still shoot yourself in the foot there (e.g. by interleaving DOM reads and writes) but yeah, ultimately you'll always be able to beat framework perf by using plain JS.

may i ask why you're learning react? fwiw for interactive blog posts i just use web components and manual DOM manipulation.
Avoid large, complex layouts and layout thrashing  |  Articles  |  web.dev
Layout is where the browser figures out the geometric information for elements - their size and location in the page. Each element will have explicit or implicit sizing information based on the CSS th...
web.dev
jakelazaroff.com
1 and 2 scale with the size of your component, so it helps performance to keep components small and keep state toward the leaves of the component tree.

none of this is an issue with fine-grained reactive frameworks like svelte/solid (though they have their own issues; no such thing as a free lunch)
jakelazaroff.com
what do you mean by "get rerendered"? when its state changes, react will
1. generate a new virtual DOM by calling the render function
2. diff with the existing virtual DOM, and then
3. apply any updates to the actual DOM

the actual changes applied to the DOM by step 3 can be small
jakelazaroff.com
fwiw you should be able to polyfill level two using level one, i think that's what astro's doing
jakelazaroff.com
just level one! (which is already great)

level two is cross-document view transitions 😈
jakelazaroff.com
view transitions are ridiculously good
astro.build
Happy "View Transitions Level 1 support in all major browsers" Day! 🎉

With Firefox 144 now stable, everyone gets beautiful transitions with Astro ClientRouter

Learn how: docs.astro.build/en/guides/vi...
jakelazaroff.com
they would work really well with upcoming standards!
jakelazaroff.com
first impression is it could be much nicer if they used classes rather than functions. with decorators and class auto-accessors they could use "unboxed" variables for state and still automatically update on assignment.
class Counter extends FakeRemixComponent {
  @state accessor count = 0;
  
  inc = () => {
    this.count += 1;
  }
  
  render() {
    return (
      <div>
        <p>{this.count}</p>
        <button on={dom.click(this.inc)}>increment</button>
      </div>
    );
  }
}
jakelazaroff.com
about ~40mins into the demo and my first impressions are:

- the events abstraction is very cool, i like leaning into EventTarget
- i am so over components as functions that use closures for state. just use a class!
Reposted by Jake Lazaroff
justinfagnani.com
inherit() is going to be absolutely huge for working with CSS custom properties. Two big things it'll enable:

Nested indentation:

--indent: calc(inherit(--indent, 0) + 1);

Overridable design token defaults:

--primary-color: inherit(--primary-color, blue);
jakelazaroff.com
first impression is it could be much nicer if they used classes rather than functions. with decorators and class auto-accessors they could use "unboxed" variables for state and still automatically update on assignment.
class Counter extends FakeRemixComponent {
  @state accessor count = 0;
  
  inc = () => {
    this.count += 1;
  }
  
  render() {
    return (
      <div>
        <p>{this.count}</p>
        <button on={dom.click(this.inc)}>increment</button>
      </div>
    );
  }
}
Reposted by Jake Lazaroff
davatron5000.bsky.social
📝 New Post: The Killer Feature of #webcomponents

A quick dive into the Custom Elements Manifest and why this community standard is a 10x effort multiplier.

daverupert.com/2025/10/cust...
The killer feature of Web Components
The personal blog of Dave Rupert, web developer and podcaster from Austin, TX.
daverupert.com
jakelazaroff.com
oh. well for whatever it's worth when i do what you're doing i just call it vibe coding
jakelazaroff.com
is that not just… vibe coding? does vibe coding have to mean you *never* look at the code?
jakelazaroff.com
sorry, WHAT this playlist??
Screenshot of a Spotify menu with an item that reads "Eat this playlist"