Show HN: Phantom UI – Skeleton that measures your real DOM (Web Component, 8kb)

5 pointsposted an hour ago
by Aejkatappaja

6 Comments

fraywing

28 minutes ago

Gave you a star as well. Love the idea and the demo/configurator is very slick.

Looked at the "how it works" -- is there a way to manually specify leaf element sizing? Thinking about dynamically sized elements that don't have markup-level specified sizes yet via bounding boxes.

Aejkatappaja

19 minutes ago

Thanks! Right now it relies entirely on getBoundingClientRect(), so if an element has no dimensions yet the block gets skipped.

For images/videos I added a load event listener that re-measures once the media loads and takes up space.

For elements that are truly dynamic with no initial size, the best workaround today is setting explicit dimensions via CSS (min-height, aspect-ratio, etc.) which is good practice for CLS anyway.

That said, something like data-shimmer-width / data-shimmer-height attributes to manually override sizing could work well for that use case.

Adding it to the backlog!

flogy

39 minutes ago

Looks very promising, one more star from me! What looks a bit odd is the React component being kebab-case instead of typical CamelCase.

Aejkatappaja

35 minutes ago

Thanks! That's just how custom elements work in React, you use the HTML tag name directly.

React 19 has native custom element support so <phantom-ui> works as-is, no wrapper needed.

Keeping it as a single HTML tag across all frameworks is the whole point.

hahooh

19 minutes ago

this is amazing. i will try this