React libraries by Jakub Antalik, and the sites that demo them.
| Package | npm | Demo |
|---|---|---|
border-beam — animated border beam |
npm install border-beam |
beam.jakubantalik.com |
liquid-gooey — liquid Morph & Move effects |
npm install liquid-gooey |
gooey.jakubantalik.com |
thinking-orbs — dotted thought-orb loaders |
npm install thinking-orbs |
orbs.jakubantalik.com |
packages/ published libraries — one folder per npm package
sites/ the demo site for each library
Each package owns its own README and LICENSE, because npm renders the readme from the package directory rather than the repo root.
npm workspaces, so one install at the root covers everything:
npm install
npm run dev -w @sites/beam # beam demo
npm run dev -w @sites/gooey # gooey demo
npm run dev -w @sites/orbs # orbs demoBoth sites alias the library to its source, so editing a library hot-reloads its site with no rebuild.
npm run build:beam # build one library
npm run build:gooey
npm run build:orbs
npm run build:site-beam # library + its site, as CI does
npm run build:site-gooey
npm run build:site-orbs
npm run typecheck # every workspacePublishing is per package, triggered by a GitHub release (publish.yml),
which runs npm publish -w <package>.
The two sites are hosted separately, because GitHub Pages serves one custom domain per repo:
- beam.jakubantalik.com — GitHub Pages via
.github/workflows/deploy.yml; the domain binding lives insites/beam/public/CNAME. - gooey.jakubantalik.com — Cloudflare Pages, built from this repo with
npm run build:site-gooey, outputsites/gooey/dist. - orbs.jakubantalik.com — Cloudflare Pages, built with
npm run build:site-orbs, outputsites/orbs/dist.
.node-version pins Node 20 for the Cloudflare builds, matching the version
the GitHub workflows use; Cloudflare's default is older.
Cloudflare's Retry deployment replays the same commit rather than fetching the branch tip, so a build that failed on an outdated commit keeps failing. Push a new commit to get a fresh one.
Only the beam site carries a public/CNAME; that file is a GitHub Pages
mechanism. The Cloudflare-hosted sites bind their domain in the Pages project
instead, and the DNS record itself lives at the registrar (inetadmin), not
Cloudflare — jakubantalik.com is not on Cloudflare's nameservers.
thinking-orbs arrived by git subtree, so its full history is in this
repo — but those commits touched src/…, not packages/thinking-orbs/src/….
git log -- packages/thinking-orbs therefore stops at the merge. To read the
real history, log from the commit the merge names:
git log --oneline 9c6d5c3 -- ports/ios/PillsDemo/Sources/PillsApp.swift
git log --follow packages/thinking-orbs/src/index.tsthinking-orbs also carries native ports under
packages/thinking-orbs/ports — a React
Native package and a SwiftUI package, kept in step with the web renderer by
the golden vectors in spec/. Neither is published yet.