Monorepo playground for comparing four UI approaches against one shared API:
/react/svelte/htmx/vanilla-jsAll four frontends talk to the same Elysia + Bun backend and Notes data model.
server/ - Elysia API, data access, auth/guards, HTMX routesreact/ - React + Vite clientsvelte/ - SvelteKit clienthtmx/ - HTMX frontend assets/templates (served by server)vanilla-js/ - Vanilla JS frontend (static HTML/CSS/ES modules, served by server)When running locally, the backend serves a root landing page at / linking to:
/react/svelte/htmx/vanilla-js# Install root + workspace dependencies
bun run install:all
Create env files and fill values:
server/.envreact/.env (if needed for local overrides)svelte/.env (if needed for local overrides)Typical required server values:
CLERK_SECRET_KEYCLERK_PUBLISHABLE_KEYCLERK_FRONTEND_API (e.g. ample-garfish-72.clerk.accounts.dev)ADMIN_API_KEYFor frontend Clerk usage:
VITE_CLERK_PUBLISHABLE_KEY (React/Svelte as needed)CLERK_PUBLISHABLE_KEY and CLERK_FRONTEND_API indirectly from server/.env via a small /vanilla-js/env.js helper and does not hardcode any keys in the static assets.# Run multiple apps (default)
bun run dev
# Targeted combinations
bun run dev:react
bun run dev:svelte
bun run dev:htmx
bun run dev:server
# Run all workspace tests
bun run test
# Run server-only tests
bun run test:server
# Build all workspaces
bun run build
# Build specific workspaces
bun run build:react
bun run build:svelte
bun run build:server
GET /api/public-notes - list public notesPOST /api/public-notes - create anonymous public noteGET /api/notes - list signed-in user notesPOST /api/notes - create user notePUT /api/private-notes - create private noteGET /api/private-notes - list private notes for signed-in userGET /api/notes/all - admin list all notes (X-API-Key)MIT