# Reviq Publisher Dashboard A modern publisher dashboard for managing organizations, members, and sites. Built as a monorepo with SvelteKit frontend and oRPC API server. ## Tech Stack ### Frontend (`apps/publisher-dashboard`) - **SvelteKit** with Svelte 5 (runes) - **Tailwind CSS v4** for styling - **TanStack Query** for data fetching - **bits-ui** for accessible UI primitives - **Lucide** for icons - **WebAuthn/Passkeys** for passwordless authentication ### Backend (`apps/api-server`) - **Bun** runtime - **oRPC** for type-safe API (contract-first) - **Kysely** for type-safe SQL queries - **PostgreSQL** database - **Postmark** for transactional emails ### CLI (`apps/cli`) - **Stricli** for command parsing - API token-based authentication - User, organization, and site management commands ### Shared Packages - `@reviq/api-contract` - Shared API contract (oRPC) - `@reviq/db` - Database client and queries - `@reviq/db-schema` - Database schema and codegen - `@reviq/utils` - Shared utilities ## Project Structure ``` publisher-dashboard/ ├── apps/ │ ├── api-server/ # Backend API server │ ├── cli/ # Command-line interface │ └── publisher-dashboard/ # SvelteKit frontend ├── packages/ │ ├── api-contract/ # Shared oRPC contract │ ├── db/ # Database client │ ├── db-schema/ # DB schema & codegen │ ├── testing/ # Test utilities │ └── utils/ # Shared utilities └── db/ # Database migrations ``` ## Setup ### Prerequisites - [Bun](https://bun.sh/) v1.1.42+ - [devenv](https://devenv.sh/) for development environment management ### Environment Variables Copy `.env.dev` to `.env` for local development: ```bash cp .env.dev .env ``` | Variable | Description | |----------|-------------| | `DATABASE_URL` | PostgreSQL connection string | ### Development Start the development environment: ```bash devenv up ``` This starts: - PostgreSQL database - Publisher dashboard dev server (port 6827) - API server - Package build watcher The database is automatically initialized with: - Database: `reviq-dashboard` - User: `reviq` - Password: `reviq` ### Manual Development If not using devenv, start services individually: ```bash # Install dependencies bun install # Build packages first bun run build:packages # Start dev server bun run dev ``` ## Scripts | Script | Description | |--------|-------------| | `bun run dev` | Start all dev servers | | `bun run build` | Build all packages and apps | | `bun run typecheck` | Run TypeScript type checking | | `bun run lint` | Run Biome and ESLint | | `bun run lint:fix` | Fix linting issues | | `bun run test` | Run tests | | `bun run db:codegen` | Generate database types | | `./scripts/db-dump` | Dump database schema (strips `\restrict` lines) | | `./scripts/db-migrate` | Run migrations (strips `\restrict` lines) | ## CLI The `@reviq/cli` package provides a command-line interface for managing users, organizations, and sites. See [apps/cli/README.md](apps/cli/README.md) for detailed usage. Quick start: ```bash # Build the CLI bun run --cwd apps/cli build # Login with an API token ./apps/cli/dist/reviq auth login --token # Check status ./apps/cli/dist/reviq auth status ``` ## Features ### Authentication - Passwordless login with passkeys (WebAuthn) - Email verification - Session management with device tracking ### Organizations - Create and manage organizations - Member management with roles (owner, admin, member) - Invite members via email - Organization settings ### Dashboard - Organization switcher - Performance metrics - Reports (coming soon) - Site management (coming soon) ## Architecture ### Frontend Routes ``` / # Landing page /login # Login page /dashboard # Organization list /dashboard/[slug] # Organization home /dashboard/[slug]/performance # Performance metrics /dashboard/[slug]/reports # Reports (placeholder) /dashboard/[slug]/settings # Organization settings ├── /members # Member management └── /sites # Sites (placeholder) /account # User account settings ├── /security # Security settings └── /sessions # Active sessions /admin # Admin panel ``` ### API Structure The API uses oRPC with a contract-first approach. Routes are defined in `@reviq/api-contract` and implemented in `apps/api-server`. Key API namespaces: - `auth` - Authentication (passkeys, sessions) - `me` - Current user profile - `orgs` - Organization management - `orgs.members` - Member management - `orgs.invites` - Invitation management