mirror of
https://github.com/hanzoai/waitlist.git
synced 2026-10-30 18:18:18 +00:00
Drops the Next.js + Upstash Redis stack. The viral waitlist now ships as a brand-neutral React widget against a Hanzo Base Go plugin. What changed - packages/widget/: new @hanzo/waitlist — React component, framework-free fetch client, drop-in <hanzo-waitlist> custom element. Zero brand colors, zero logos, zero brand names. Consumer brings logo via `logo` prop or `<slot name="logo">`. Theming via --hw-* CSS variables with fallback chain at usage so ancestor selectors win cleanly. - apps/web/: Next.js demo rebuilt monochrome. Five generic presets (Neutral, Preset A/B/C/D) prove brand swap works without per-brand builds. Demo's placeholder logo lives in the demo, not the package. - apps/api/: removed. Backend logic now lives in ~/work/hanzo/base/plugins/waitlist (committed separately). - packages/sdk/: removed (Preact + Vite). Replaced by packages/widget. - docs/: collapsed to architecture / api / widget. Old planning docs moved to docs/archive/. - Latest deps: Next 16, React 19.2, Vite 8, TS 5.9, vite-plugin-dts 5, @vitejs/plugin-react 6, eslint-config-next 16. Build output - ESM 6.76kB, CJS 5.22kB, IIFE 196.99kB / 62.65kB gzip - Widget styles: 3.89kB / 1.18kB gzip - Demo first-load: 106kB
27 lines
690 B
TypeScript
27 lines
690 B
TypeScript
import { defineConfig } from 'vite'
|
|
import react from '@vitejs/plugin-react'
|
|
import dts from 'vite-plugin-dts'
|
|
import { resolve } from 'node:path'
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
react(),
|
|
dts({ entryRoot: 'src', include: ['src'], rollupTypes: false }),
|
|
],
|
|
build: {
|
|
lib: {
|
|
entry: {
|
|
waitlist: resolve(__dirname, 'src/index.ts'),
|
|
client: resolve(__dirname, 'src/client.ts'),
|
|
},
|
|
formats: ['es', 'cjs'],
|
|
fileName: (format, name) => `${name}.${format === 'es' ? 'js' : 'cjs'}`,
|
|
},
|
|
rollupOptions: {
|
|
external: ['react', 'react-dom', 'react/jsx-runtime'],
|
|
},
|
|
cssCodeSplit: false,
|
|
sourcemap: true,
|
|
},
|
|
})
|