docs: refresh README for current state

README described an old blue palette and no product features. Now lists
the actual feature surface (booking, waitlists, schedules, intake,
metrics, exports, feeds, notifications, i18n, Stripe/SMS), correct demo
tenant slug, and the real warm-cream/terracotta token palette.
FRONTEND_ISSUES open-items count updated to current (~60 ternaries).

Authored By: TDvorak <[email protected]>

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Tomas DvorakandDevin committed 2026-09-22 19:53:29 +02:00
1 parent c3325354f8
commit 27e0feaed6
2 files changed
+85 -42

No files matched your search

+1 -1
View File
@@ -25,7 +25,7 @@
## Still Needs Frontend Polish ## Still Needs Frontend Polish
- Many dashboard inline i18n ternaries remain (~280). Systematic extraction to `i18n.t()` keys is an ongoing task. - Dashboard inline i18n ternaries remain (~60 as of M30). Systematic extraction to `i18n.t()` keys is an ongoing task.
- Registration cannot be fully customer-tested locally until Neon Auth environment variables are configured. - Registration cannot be fully customer-tested locally until Neon Auth environment variables are configured.
## Fixed This Session (platform audit pass) ## Fixed This Session (platform audit pass)
+84 -41
View File
@@ -1,6 +1,10 @@
# Bookra # Bookra
Remote-first booking SaaS aligned to the `tdvorak-fullstack` profile with these overrides: Booking operating layer for small local service businesses. Public booking
pages for customers, a dashboard for owners, and the scheduling, reminder, and
billing machinery underneath.
Deployment targets:
- frontend on Vercel - frontend on Vercel
- backend on Railway - backend on Railway
@@ -8,12 +12,45 @@ Remote-first booking SaaS aligned to the `tdvorak-fullstack` profile with these
- Stripe billing (checkout, customer portal, webhooks, SMS usage invoices) - Stripe billing (checkout, customer portal, webhooks, SMS usage invoices)
- no Docker-based local runtime - no Docker-based local runtime
## What it does
**Public booking**
- Embeddable booking page per tenant (`/book/:tenantSlug`) — services, staff,
locations, real availability
- Customer self-service via manage token: view, reschedule, and cancel bookings
- Class sessions with capacity and waitlists — customers see their waitlist
position
- Structured intake fields per service (text / yes-no, required flag), asked at
booking time and shown to staff
**Dashboard**
- Calendar with day-level booking modals, bookings, customers, staff, services,
locations, working hours, blocked days
- Recurring class schedules — weekly rules that materialize sessions 28 days
ahead
- Waitlist management — capacity-aware promotion, session-to-session moves
- Staff performance metrics — bookings, completion/cancellation, revenue,
capacity-based utilization
- CSV exports — bookings, customers, staff and service reports
- Activity feed — persistent notification center with a per-user read cursor
- ICS calendar feeds — read-only tenant and staff feeds with token rotation
- CS/EN localization throughout
**Platform**
- Stripe subscriptions (monthly/yearly, CZK/USD), customer portal, webhooks
- Email reminders; optional SMS add-on via SMS Manager.cz, metered through
Stripe invoices
- Admin API for tenant/plan operations
## Workspace ## Workspace
- `apps/frontend` SolidJS frontend - `apps/frontend` — SolidJS frontend
- `apps/backend` Go API - `apps/backend` — Go API (Gin, pgx, Goose migrations)
- `packages/api-client` generated TypeScript client/types from OpenAPI - `packages/api-client` — generated TypeScript client/types from OpenAPI
- `packages/shared-types` shared frontend constants and helpers - `packages/shared-types` — shared frontend constants and helpers
## Local development ## Local development
@@ -24,6 +61,8 @@ npm install
npm run dev:frontend npm run dev:frontend
``` ```
Runs on `http://localhost:3000`.
### Backend ### Backend
```bash ```bash
@@ -31,20 +70,24 @@ cd apps/backend
go run ./cmd/api go run ./cmd/api
``` ```
Both apps expect remote services: Runs on `http://localhost:8080`.
Both apps expect remote services when not in demo mode:
- Neon Postgres - Neon Postgres
- Neon Auth - Neon Auth
- Stripe - Stripe
See `.env.example`, `apps/frontend/.env.example`, and `apps/backend/.env.example`. See `apps/frontend/.env.example` and `apps/backend/.env.example` for the full
variable list.
### Demo mode ### Demo mode
Set `BOOKRA_DEMO_MODE=true` to run the backend with an in-memory repository and Set `BOOKRA_DEMO_MODE=true` to run the backend with an in-memory repository and
pre-populated demo data — no database, Neon Auth, or Stripe required. All pre-populated demo data — no database, Neon Auth, or Stripe required. All
requests are authenticated as the `demo-owner` principal. Pair with requests are authenticated as the `demo-owner` principal. Pair with
`VITE_BOOKRA_DEMO_MODE=true` on the frontend. `VITE_BOOKRA_DEMO_MODE=true` on the frontend. The seeded demo tenant slug is
`studio-atelier`; its public page is `/book/studio-atelier`.
## CI/CD ## CI/CD
@@ -75,45 +118,45 @@ npm run verify
Runs API-client generation, frontend typecheck, backend tests, and both builds. Runs API-client generation, frontend typecheck, backend tests, and both builds.
Run this before pushing. Run this before pushing.
## Brand Colors ## Design system
Bookra uses a sophisticated color system designed for modern booking interfaces with support for both light and dark themes. Bookra uses a warm, editorial palette implemented as CSS custom properties in
`apps/frontend/src/styles/index.css`, with light and dark themes.
### Primary Palette ### Surfaces
- **Canvas** (`--color-canvas`): #FFFFFF (light) / #0A0A0A (dark)
- **Canvas Elevated** (`--color-canvas-elevated`): #F8F9FA (light) / #1A1A1A (dark)
- **Canvas Sunken** (`--color-canvas-sunken`): #F1F3F4 (light) / #252525 (dark)
### Accent Colors - **Canvas**: warm cream `hsl(40 25% 97%)` light / dark counterpart per theme
- **Primary** (`--color-primary`): #3B82F6 - **Canvas elevated/subtle/sunken**: stepped warm neutrals
- **Primary Hover** (`--color-primary-hover`): #2563EB
- **Primary Active** (`--color-primary-active`): #1D4ED8
### Semantic Colors ### Ink (text)
- **Success** (`--color-success`): #10B981
- **Warning** (`--color-warning`): #F59E0B
- **Error** (`--color-error`): #EF4444
- **Info** (`--color-info`): #06B6D4
### Text Colors - **Ink**: `hsl(25 15% 12%)` — primary text
- **Text Primary** (`--color-text-primary`): #111827 (light) / #F9FAFB (dark) - **Ink muted**: `hsl(25 10% 42%)`
- **Text Secondary** (`--color-text-secondary`): #6B7280 (light) / #D1D5DB (dark) - **Ink subtle**: `hsl(25 8% 58%)`
- **Text Muted** (`--color-text-muted`): #9CA3AF (light) / #9CA3AF (dark)
### Border & Surface ### Accent
- **Border** (`--color-border`): #E5E7EB (light) / #374151 (dark)
- **Surface Glass** (`--color-surface-glass`): rgba(255, 255, 255, 0.8) (light) / rgba(0, 0, 0, 0.8) (dark)
### Shadow System - **Accent**: `hsl(17 55% 42%)` — deep warm terracotta
- **Shadow XS** (`--shadow-xs`): 0 1px 2px 0 rgba(0, 0, 0, 0.05) - **Accent hover/active/subtle/soft/muted**: stepped variants
- **Shadow SM** (`--shadow-sm`): 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.06)
- **Shadow MD** (`--shadow-md`): 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)
- **Shadow LG** (`--shadow-lg`): 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)
- **Shadow XL** (`--shadow-xl`): 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)
- **Shadow 2XL** (`--shadow-2xl`): 0 25px 50px -12px rgba(0, 0, 0, 0.25)
### Animation Timing ### Semantic
- **Ease Out Expo** (`--ease-out-expo`): cubic-bezier(0.16, 1, 0.3, 1)
- **Ease Spring** (`--ease-spring`): cubic-bezier(0.68, -0.55, 0.265, 1.55)
These colors are implemented as CSS custom properties and are used throughout the frontend application for consistent theming and accessibility. - **Success** `hsl(145 45% 38%)`, **Warning** `hsl(38 80% 50%)`,
**Error** `hsl(0 60% 52%)`, **Info** `hsl(210 60% 50%)`
### Typography
- **Space Grotesk** — display/headings
- **Newsreader** — serif accents
- **DM Sans** — UI body
- **JetBrains Mono** — code/mono
### Motion
- **Ease out expo**: `cubic-bezier(0.16, 1, 0.3, 1)`
- **Ease spring**: `cubic-bezier(0.68, -0.55, 0.265, 1.55)`
## Roadmap
Milestone history and the curated future-phase shortlist live in
[project.md](/home/tdvorak/Desktop/PROG+HTML/Bookra/project.md).