@geenius/waitlist
v0.16.1
Published
Geenius Waitlist — Self-hosted waitlist system for Convex apps (React + SolidJS)
Maintainers
Readme
@geenius/waitlist
FSL waitlist capture, referral loops, confirmation flows, and operator review surfaces for Geenius products.
Installation
pnpm add @geenius/waitlistImport Examples
import { buildReferralUrl, createWaitlistEntry } from "@geenius/waitlist";
import { WaitlistLandingPage, WaitlistConfirmPage } from "@geenius/waitlist/react";
import { WaitlistLandingPage as CssWaitlistLandingPage } from "@geenius/waitlist/react-css";
import { WaitlistLandingPage as NativeWaitlistLandingPage } from "@geenius/waitlist/react-native";
import { createWaitlist, createReferral } from "@geenius/waitlist/solidjs";
import { WaitlistLandingPage as SolidCssWaitlistLandingPage } from "@geenius/waitlist/solidjs-css";
import { api, schema, waitlistTables } from "@geenius/waitlist/convex";Usage
import { WaitlistLandingPage } from "@geenius/waitlist/react";
import { buildWaitlistStats } from "@geenius/waitlist";
const stats = buildWaitlistStats([]);
export function LaunchRoute() {
return (
<WaitlistLandingPage
productName="Antigravity Alpha"
productTagline="Referral-powered access for the next operator workspace."
stats={stats}
baseUrl="https://alpha.geenius.dev/waitlist"
/>
);
}React apps that need shared queue state can mount the provider and compose the operator surface from the same public subpath:
import { WaitlistAdminPage, WaitlistProvider } from "@geenius/waitlist/react";
import { createWaitlistEntry } from "@geenius/waitlist";
const entries = [
createWaitlistEntry({
email: "[email protected]",
name: "Ada Lovelace",
}),
];
export function AdminRoute() {
return (
<WaitlistProvider initialEntries={entries}>
<WaitlistAdminPage entries={entries} />
</WaitlistProvider>
);
}Package Surface
@geenius/waitlistexposes the framework-agnostic waitlist contract, including duplicate-safe entry creation and configuration-driven intake gates for signup caps and invite-only queues.@geenius/waitlist/reactand@geenius/waitlist/solidjsprovide Tailwind-based UI surfaces.@geenius/waitlist/react-cssand@geenius/waitlist/solidjs-cssprovide standalone vanilla-CSS implementations with package-ownedstyles.cssandwaitlist.cssassets.@geenius/waitlist/react-nativeprovides a self-contained React Native surface built with native primitives and the root shared waitlist contract.@geenius/waitlist/convexexposes the Convex schema, generated API helpers, queries, and mutations.@geenius/waitlist/convex/convex.configexposes SDK-free component identity metadata for host Convex projects.@geenius/waitlist/neonexposes the Neon/Postgres provider factory, SQL client contract, and concrete migration statements.@geenius/waitlist/cloudflareKVexposes the Cloudflare KV provider factory, namespace contract, key-prefix helpers, and cached stats TTL defaults.@geenius/waitlist/memoryexposes the deterministic in-process provider for tests, Storybook fixtures, and local demos. The subpath factorycreateMemoryWaitlistProvider()aliases the root sharedcreateMemoryBackedWaitlistProvider().
Scoped v1 runtime code is self-contained for strings, notifications, emails, and UI primitives. Host apps can compose @geenius/i18n, @geenius/notifications, @geenius/emails, or @geenius/ui around these surfaces, but this package does not ship those runtime adapters yet.
Framework subpaths intentionally do not re-export the root shared contract. Import helpers and types from @geenius/waitlist, then import UI from the selected framework subpath.
Framework prop types are exported with framework prefixes, such as ReactWaitlistFormProps and SolidWaitlistFormProps, so root shared prop contracts remain root-only.
Variant Status
The current Omega run scope is limited to the rows below. Deferred variants may remain in package.json exports for forward compatibility and currently resolve to the reference React or SolidJS surface as aliases, but they are not included in this run's build, type-check, Storybook, Playwright, a11y, visual, or perf matrix. Release readiness is determined by the command evidence in scorecard.yaml, not by the presence of a package folder.
| Variant | Status | Notes |
| --- | --- | --- |
| react | Scoped implementation | React 19 + Tailwind 4 surface. |
| react-css | Scoped implementation | React 19 + standalone BEM CSS. Import @geenius/waitlist/react-css/styles.css. |
| solidjs | Scoped implementation | SolidJS 1.9 + Tailwind 4 surface. |
| solidjs-css | Scoped implementation | SolidJS 1.9 + standalone BEM CSS. Import @geenius/waitlist/solidjs-css/styles.css. |
| react-native | Scoped native implementation | Self-contained React Native provider, hooks, components, and pages built with native primitives. |
| react-shadcn, react-mui, react-ant, react-chakra, react-mantine, react-heroui, react-daisyui, solidjs-ark, solidjs-kobalte, solidjs-solidui | Deferred | Existing folders stay on disk with inScope: false and are filtered out by scripts/_variants.mjs. |
| Provider | Status | Notes |
| --- | --- | --- |
| convex | Scoped implementation | Reactive schema, queries, mutations, and generated API helpers. |
| neon | Scoped implementation | Backend-owned Postgres adapter with migration SQL and injectable Neon-compatible client. |
| cloudflareKV | Scoped implementation | Backend-owned KV adapter with entry, email, referral, and stats keys. |
| memory | Scoped implementation | Deterministic in-process provider for tests and previews. |
Storybook
Local review apps are available for every in-scope UI variant:
STORYBOOK_VARIANT=react pnpm storybook
pnpm run test:storybook:build
pnpm run test:storybookTesting
The PR-blocking gauntlet command is:
pnpm test:gauntletIt runs source/app lint, packed publish checks, type-checking, unit/convention/export/dist/packed smoke tests, bundle budgets, supply-chain audit, license checks, and SBOM generation. The full pre-release replay command is:
pnpm test:allThat extends the gauntlet with Storybook build/test-runner, DB conformance and migrations, Playwright e2e, a11y, visual regression, perf smoke, aggregate coverage, and test:diff-coverage. scorecard.yaml separates commands verified during the current audit-fix wave from commands that must be replayed on a clean checkout before release.
Contributing tests
variants.json is the single source of truth for UI variants, DB providers, Storybook apps, e2e projects, coverage thresholds, and bundle budgets. Add a new variant there first, then add its package source and matching app/harness files.
Core gates:
pnpm run test:conventions
pnpm test:gauntlet
pnpm test:all
pnpm test:diff-coverage
pnpm test:visual --update-snapshotsEvery packages/<sub>/ workspace must keep the TypeScript config trio: tsconfig.json, tsconfig.typecheck.json, and tsconfig.build.json. Same-workspace @geenius/waitlist-* dependencies use workspace:*; cross-package Geenius dependencies use link: paths relative to the consumer package.json.
License
FSL-1.1-Apache-2.0. See LICENSE.
