Skip to content

feat(playground-lynx): add a Lynx playground app - #469

Merged
V3RON merged 1 commit into
mainfrom
feat/playground-lynx
Aug 31, 2026
Merged

feat(playground-lynx): add a Lynx playground app#469
V3RON merged 1 commit into
mainfrom
feat/playground-lynx

Conversation

@V3RON

@V3RON V3RON commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Description

Adds apps/playground-lynx, a Lynx counterpart to apps/playground:

  • Scaffolded with pnpm create rspeedy@latest (react-ts template) and adopted into the pnpm/Turborepo workspace (private, typecheck, lint).
  • The generated template screen is replaced with a Rozenite splash: the gem mark rebuilt from its pixel rows (Lynx has no inline SVG element), styled with the same tokens apps/playground uses.
  • Wires up Rozenite via @rozenite/lynx-dev (lynx.config.ts) and @rozenite/lynx (src/index.tsx).
  • Installs every official plugin that declares lynx in its rozenite.config.ts integrations — Controls, Feature Flags, React Hook Form, TanStack Query — each with a minimal playground under src/plugins/.

Supporting changes: playground-lynx added to the commitlint scope enum and to the Changesets ignore list, matching how @rozenite/playground is handled.

Related Issue

None — this was requested directly, with no issue asked for.

Context

Rozenite's Lynx support already exists (packages/lynx, packages/lynx-dev), but nothing in the repository exercised it. This app gives that path a home the same way apps/playground does for React Native.

Plugin selection is not a judgement call made here: it is exactly the set that declares lynx in integrations. The remaining plugins depend on React Native or Metro internals and are deliberately not installed.

Two Lynx-specific shapes are worth flagging for review:

  • The logo is a stack of view rows sized by pixel count rather than a 7×10 grid of blocks. Every row of the mark is a centred contiguous run, so widths reproduce it exactly with less markup.
  • Lynx's input element is uncontrolled (no value prop), so the RHF field is driven through useController's field.onChange on bindinput. The field must be registered — with only setValue, the panel finds the form but reports no fields.

No version plan: nothing in a publishable package changed.

Testing

Automated, from the repository root after git fetch origin main:

  • pnpm checks:affected — 107 tasks passed
  • pnpm test:affected — 69 tasks passed
  • pnpm --filter @rozenite/playground-lynx build — production build clean

Manual verification on the running iPhone 17 Pro simulator (agent-device), with the app loaded in LynxExplorer from pnpm --filter @rozenite/playground-lynx dev:

  • The dev server discovered all 4 plugins and logged a DevTools URL as soon as LynxExplorer connected.
  • Controls — pressed Increment in the panel; the device counter went 0 → 1.
  • Feature Flags — toggled new-splash in the panel; the device value went truefalse.
  • React Hook Form — typed into the field on the device; the panel showed email = qa@lynx.dev, dirty and valid.
  • TanStack Query — the ["lynx-demo"] query appeared in the panel.

@V3RON
V3RON force-pushed the feat/playground-lynx branch from ccd99d4 to 3799864 Compare August 31, 2026 13:59
Scaffold apps/playground-lynx with create-rspeedy, replace the template
screen with a Rozenite splash styled after apps/playground, and wire up
every official plugin that declares a lynx integration.
@V3RON
V3RON force-pushed the feat/playground-lynx branch from 3799864 to 84f2259 Compare August 31, 2026 15:32
@V3RON
V3RON merged commit 7e672f6 into main Aug 31, 2026
3 of 4 checks passed
@V3RON
V3RON deleted the feat/playground-lynx branch August 31, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant