R2-D2
Dashboard
Node Red
Restreaming
The Force
UpdatedNever
v1.0.0

Overview

Loading…
R2-D2
Dashboard
Node Red
Restreaming
The Force
UpdatedNever
v1.0.0
DDroidspeak / Docs
Operator handbook
Droidspeak
What is R2-D2?
Runtime architectureAuth — Keycloak migration plan
FleetRestreamingGalaxy MapThe RepublicTemple ArchivesSTANAG 4817The Force
Tech StackNext.js 15 + React 19Tailwind v4ZustandTanStack Table + DataViewhls.jsLow-latency playerreagraphoglreact-grid-layoutMonacoScalar API Referencefumadocs
Cluster InfraTrailBaseReductStoreRestreamer (datarhei/core)TBMQKeycloakLonghornkube-vipIngress (Caddy + nginx-ingress + Traefik)Netbird
Operator QA Runbook
Install — RKE2Install — Dokploy
Contributor guideRelease Notes
Tech Stack

Tailwind v4

Design tokens, the HUD palette, and the dark-only design language.

Tailwind v4 (^4.2.2) via @tailwindcss/postcss. The dashboard is dark-only by design — there is no light theme and no prefers-color-scheme switch. Operators work in low-light rooms; a light theme would actively work against the use case.

Where the tokens live

FileRole
src/styles/globals.cssToken definitions (--bg, --surface, --accent, …), base resets, JetBrains Mono import, HUD-specific keyframes
postcss.config.*Wires @tailwindcss/postcss into the Next.js build

Tailwind v4 reads tokens directly from CSS — there's no tailwind.config.ts. Add a new token by declaring it under :root in globals.css; it becomes bg-[var(--token)]-accessible automatically.

Palette

The palette mirrors the Keycloak R2-D2 theme so the login screen and dashboard read as one app:

TokenValueUse
--bg#0a0e1aPage background
--surfacergba(17, 24, 39, 0.78)Card / panel surface
--accent#2dd4bfPrimary action, focused links, "online" pulse
--accent-warm(see globals.css)Secondary action / brand bar tri-tone
Brand barteal → blue → violet3px gradient under the top chrome

Type

  • JetBrains Mono is the operator font — every numeric, every status pill, every Monaco surface.
  • Inter is the prose font (this docs site, paragraphs in the Republic page, slide-over body copy).

Effects

The login backdrop and a few hero surfaces use radial-gradient blooms + SVG-tile starfield layers with a 240s parallax drift. Implemented purely in CSS via body::after / body::before — no JS, no canvas. The drift respects prefers-reduced-motion.

A11y rules in CSS

  • :focus-visible rings are teal on dark, white on primary surfaces.
  • @media (prefers-reduced-motion: reduce) disables the starfield drift, the brand-bar shimmer, and the R2D2 "online" pulse.
  • @media (prefers-contrast: more) and forced-colors modes have explicit rules.
  • @media print strips backgrounds (the docs section needs to be printable).

What Tailwind does not do here

  • No theme switching. Don't add dark: variants — the whole app is dark.
  • No design-system component library. The primitives live in src/components/ — Tailwind is utility-only.
  • No arbitrary color literals in JSX. Use tokens; if you need a new color, add it to globals.css.

See also

  • Next.js + React — how Tailwind is wired in
  • Components — the primitives that consume tokens

Next.js 15 + React 19

App Router, RSC vs client, dev-server invariants, and where state actually lives.

Zustand

The four stores that hold cross-page client state — and why there are only four.

On this page

Where the tokens livePaletteTypeEffectsA11y rules in CSSWhat Tailwind does not do hereSee also