Rxova
← All repos

Brand

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

  1. @rxova/brand 1.0.0

    Brandreleasebreaking@rxova/brand@1.0.0

    @rxova/brand is 1.0, developed in the open for the first time: the package moved from a private repository into the public rxova-website one. It is also smaller than 0.15: design tokens, typefaces and project data, nothing else. The components, astro.css, chrome.css, starlight.css and sharedStarlightConfig have moved to @rxova/astro-ui, which shipped alongside it.

    That move is the breaking change. A site that imported a component or a stylesheet from @rxova/brand takes it from @rxova/astro-ui now; tokens.css, fonts.css, the assets and the project data stay where they were. chrome.css no longer defines the short aliases (--bg, --fg, --max, …), so styles read the --rx-* tokens directly. projectFromBase is now exported from the entry point.

    Jonatan Kruszewski

  2. @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

  3. 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

  4. 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

  5. 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

  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. Images in posts, validated before they merge

    Brandfeature@rxova/website-schemas@0.3.0

    Posts can carry a cover and embed images, optimised through sharp on the way out.

    Alt text is required rather than encouraged, and a missing one is a failed build, not a review comment. Every embedded path is checked to resolve on the pull request that writes it — a typo’d image should not survive until the deploy.

    Jonatan Kruszewski

  9. 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

  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. One Turborepo standard across every repo

    journeyuse-everywherereact-inputsBrandinfra

    Four repos had drifted into four ways of running the same six checks. They now share one Turborepo pipeline and one CI shape, so a fix to the build order is made once.

    Node 24, TypeScript 6 and pnpm 11 across all of them, which also got pnpm audit working again.

    Jonatan Kruszewski

  12. A design system for rxova.org

    Brandrelease@rxova/brand@0.1.0

    Four surfaces on one origin only feel like one site if they share their tokens. @rxova/brand holds the colours, type and spacing, a Starlight theme built on them, and the header, footer and project switcher every surface mounts.

    Social cards are generated from the same tokens rather than drawn by hand, so a palette change reaches the previews too.

    Jonatan Kruszewski