Astro site for NEXUS — Portland's All Alternative Tango Weekend. Hero wordmark via @celilo/visualizer; ships a celilo module (celilo-module/) that deploys it via Caddy. https://nexus.lunacycle.net
  • Astro 51.3%
  • TypeScript 29.2%
  • CSS 18.3%
  • JavaScript 1.2%
Find a file
Peter Banka e257733f74
All checks were successful
release / version (push) Successful in 1s
release / publish (push) Successful in 17s
Merge pull request 'chore: version tango-nexus' (#21) from changeset-release/main into main
2026-08-05 15:10:59 +00:00
.forgejo/workflows Give CI bun — @celilo/cli refuses to run under node 2026-08-03 17:06:48 -07:00
.vscode Initial commit: NEXUS tango-weekend Astro site + celilo module 2026-07-18 13:02:23 -07:00
celilo-module chore: version tango-nexus 2026-08-05 15:10:22 +00:00
public Make calendar dates jump, and give each session its own .ics 2026-08-04 18:55:11 -07:00
src Merge pull request 'Add Azalea Jane's bio and photo' (#20) from azalea-bio into main 2026-08-05 15:08:09 +00:00
.gitignore Initial commit: NEXUS tango-weekend Astro site + celilo module 2026-07-18 13:02:23 -07:00
AGENTS.md Initial commit: NEXUS tango-weekend Astro site + celilo module 2026-07-18 13:02:23 -07:00
astro.config.mjs Add a link-preview card so shares stop showing a barn 2026-08-04 13:04:22 -07:00
CLAUDE.md Initial commit: NEXUS tango-weekend Astro site + celilo module 2026-07-18 13:02:23 -07:00
mise.toml Give CI bun — @celilo/cli refuses to run under node 2026-08-03 17:06:48 -07:00
package-lock.json Depend on @celilo/visualizer 0.3.0 — unblocks the pulse 2026-08-05 07:57:53 -07:00
package.json Depend on @celilo/visualizer 0.3.0 — unblocks the pulse 2026-08-05 07:57:53 -07:00
README.md Initial commit: NEXUS tango-weekend Astro site + celilo module 2026-07-18 13:02:23 -07:00
tsconfig.json Publish the module from CI on merge to main 2026-08-03 16:09:31 -07:00

tango-nexus

Astro site for NEXUS — Portland's All Alternative Tango Weekend (Sept 1113).

npm install
npm run dev        # localhost:4321
npm run build
npm run lint:css   # lasertag — find dead CSS
npx astro check    # types

The hero mark

NEXUS is generated by @celilo/visualizer: a word rendered as the negative space in smooth flowing water.

The whole look lives in src/nexus-mark.json — nothing else needs editing. Tune it in the visualizer's /flow route (cd ../celilo/packages/visualizer && bun run dev, then http://localhost:3000/flow), hit EXPORT JSON, and paste the result over that file. It's a CeliloMarkOptions, which is exactly what renderCeliloMark() takes — no conversion step.

The canvas is decoration: the accessible name is a visually-hidden <span> in the <h1>, and a render failure is caught so the heading still reads.

Fonts are copied into public/fonts/ and declared in BaseLayout.astro. A font name alone is not enough — an undeclared family silently falls back to sans-serif and the mask comes out the wrong shape.

Conventions

@celilo/visualizer is linked by relative path (file:../celilo/packages/…), so this repo expects celilo checked out as a sibling. It ships TypeScript source, which Vite compiles — no build step or config needed.

CSS follows lasertag: each component has a same-stem .module.css, and its root is its own kebab-case custom element carrying class={css.class}. A module exposes only class — one per component. Style everything inside with nested element / custom-element selectors, not extra local classes. *Layout components are exempt (lasertag treats them as transparent slot wrappers).

Gotchas

  • TypeScript is pinned to ^6. typescript@latest is now 7.x, which astro check can't use (it needs a programmatic API that TS 7's native compiler doesn't ship yet). lasertag depends on an exact typescript@7.0.2; npm nests that copy, so both tools work. Don't "upgrade" TypeScript here without re-running astro check.
  • lasertag pins engines to node 26.5.0 / pnpm 11.13.0 exactly. It installs and runs fine on node 24 under npm, with an EBADENGINE warning.

TODO

  • The signup form has no endpoint — the submit button is disabled on purpose, so a signup can't be silently dropped. Wire ENDPOINT in SignupForm.astro when there's somewhere to post.
  • The "Volunteer for the event?" option text was truncated in the source screenshot; verify the real wording.