Rxova
← All repos

Website

Updates mentioning Website. See the repository ↗ for commits and releases.

  1. @rxova/astro-ui 0.1.0

    WebsiteBrandreleasefeature@rxova/astro-ui@0.1.0

    @rxova/astro-ui is a new package, and the first release is everything on rxova.org that renders: the chrome (SiteShell, Header, SiteFooter, ProjectSwitcher, ThemeToggle, ThemeScript), the Starlight preset and its overrides, the stylesheets, and the primitives (PageHeader, BackLink, ShowMore, VisuallyHidden) that the landing, the blog and the updates stream used to copy around. Until now these lived in @rxova/brand.

    A docs site spreads sharedStarlightConfig from @rxova/astro-ui/starlight. A plain Astro site imports @rxova/astro-ui/styles/document.css and the components from @rxova/astro-ui/components/*. There is no barrel: each component has its own path, so a page only loads the CSS of the components it imports. The package depends on @rxova/brand for the tokens, so a site installs both.

    Jonatan Kruszewski

  2. The brand moves into the website, and the landing gets a walkthrough

    WebsiteBrandfeatureinfra

    @rxova/brand has moved out of its private repository and into rxova-website, which is public. Its source, its history from here on and its release process sit next to the landing, the blog, the updates stream and the tooling that assembles rxova.org. One workspace, one gate: the pre-push verify list and CI run the same steps, and every app and package is held to a coverage floor. Playwright now checks the built site’s behaviour, and a local visual check catches layout drift.

    On the landing, each project has a before/after walkthrough: the code a problem usually ends up as, and the same thing written with the library, one note at a time. Pick a project from the rail and step through it on the stage.

    Jonatan Kruszewski

  3. A new rxova.org landing page

    WebsiteBrandfeature

    The rxova.org landing page now opens straight on the projects. The old hero and its stacked list are replaced by a rail beside a stage: pick a project from the rail, and the stage shows what it does, how to install it and where its docs live.

    Every project is tagged zero-dependency, and the page says what that means: each package declares no third-party dependency, which npm view <pkg> dependencies confirms. The page only links to docs that are live.

    Jonatan Kruszewski

  4. ts-extended-errors is on npm and rxova.org

    ts-extended-errorsWebsiteBrandreleasedocsts-extended-errors@0.4.4

    ts-extended-errors is public. It is a zero-dependency error model for TypeScript applications that throw native exceptions but need more from them:

    • typed context: defineError, with a message option that writes the message from the context;
    • cause-chain inspection;
    • JSON round trips: serializeError and deserializeError rebuild errors as their own classes, including AggregateError.

    Install it with npm install ts-extended-errors. Every version is on npm under that name, so no .npmrc line is needed. Its docs are at /packages/ts-extended-errors/, and it appears on the rxova.org landing page.

    0.4.4 hardens the part that matters most in an error handler: a getter, proxy trap or prototype check that throws while inspecting an unknown value no longer replaces the original failure.

    Jonatan Kruszewski

  5. The use-everywhere demo is linked from rxova.org

    Websiteuse-everywheredocs

    Every explanation of this library ends with “open a second tab and watch”, and until now there was nothing to open unless you cloned the repo. There is now, and rxova.org links it — so a reader meets the thing before the install line rather than after.

    Ten pages behind a sidebar, each one a live thing you operate with the code that is running printed above it. The order is how someone meets the library rather than how the API is organised: shared state first, then the two questions it immediately provokes — what happens when two tabs write the same key, and what happens when the value is a count rather than a fact — then persistence and the coordination primitives, then the parts that matter once it is load-bearing: namespaces, transports, devtools. The demonstrations are the claims that are hard to believe without seeing them. Two counters side by side running the same race, one losing concurrent increments and one that cannot. A version clock table showing which write won and who made it. A sign-out that reaches four tabs in the same millisecond.

    It sits on its own origin rather than under /packages/use-everywhere/ with the docs, which is deliberate. The docs are composed into rxova.org under a base path; this has to be opened in two tabs, so it wants an origin, and GitHub Pages gives it one. Routing is hash-based for the same reason — on Pages a path route is a 404 until you add a 404.html that impersonates the app, and a deep link that works on first load is the whole point of a page you are asked to open twice.

    Jonatan Kruszewski

  6. Two new contracts, and Storybook on rxova.org

    WebsiteBrandreact-inputsuse-everywhereinfrafeature@rxova/website-schemas@0.6.0

    @rxova/website-schemas grew two contracts. Page-component bundles: a producer’s artifact now carries only its page bodies, and the website supplies the header, footer, global head and analytics at deploy time. The docs sites moved onto it through one shared mode instead of each repo keeping a copy.

    And a storybook source kind: a project’s workshop ingests like any other source and nests under one /storybook/ tree. The react-inputs workshop is the first through — live at rxova.dev/storybook/react-inputs/.

    Jonatan Kruszewski

  7. Shared chrome, two new sections, and analytics on rxova.org

    WebsiteBrandfeature@rxova/brand@0.8.2

    One header and one footer across every page now, both from @rxova/brand.

    The landing gains a “Why Rxova” section and a maintainer block, with a longer /about page behind them.

    Traffic is measured by Cloudflare Web Analytics, chosen because it sets no cookies and does not track the reader — page path and referrer, in aggregate, and nothing else.

    Jonatan Kruszewski

  8. The blog and this feed go live

    WebsiteBrandfeature@rxova/brand@0.5.0

    /blog and /updates are built in the brand repo and mounted on rxova.org as two more sources, through the same ingest path the project docs use.

    Both now sit under one shared layout with a real menu, and the components rxova.org had duplicated were deleted in favour of the ones @rxova/brand already exports.

    Jonatan Kruszewski

  9. The docs ingest contract

    Websitejourneyuse-everywherereact-inputsinfra

    rxova.org used to check out three repos and build their docs itself, which meant one project’s broken build took the whole site down with it.

    Each repo now builds its own docs and ships them as a release asset; the site ingests the artifact. A project either publishes something valid or the site keeps serving the last good copy.

    Jonatan Kruszewski

  10. Rxova.org gains a blog and an updates feed

    WebsiteBrandfeatureinfra

    I want to document how Rxova gets built, not only ship it. Two pieces were missing.

    The blog is for reasoning — why a design went one way instead of the obvious other way, and what broke on the way there.

    This feed is for what actually moved. It filters by repo and by tag, so you can follow one project without reading about the rest.

    Jonatan Kruszewski

  11. rxova.org goes up as an aggregator

    Websitefeatureinfra

    One origin, several projects. An Astro landing sits at /, and each project’s docs are built in its own repo and mounted as a static tree under /packages/<name>/.

    That keeps every project owning its own docs while readers only ever learn one domain. It also means every cross-project link has to be absolute, which is the first thing the shared chrome had to get right.

    Jonatan Kruszewski