Private Bun/Turborepo monorepo for the Deskohub web properties and shared integrations. The repository currently contains two production Next.js apps, a small Astro portal, and shared packages for payments, reservations, email, media, i18n, and Effect-based backend services.
| App | Purpose | Stack |
|---|---|---|
apps/deskohub-boardgame-bar |
Public DeskoHub bar site at bar.deskohub.cz: home page, Dotypos-backed menu, gallery, board-game catalogue, contact, ChoiceQR table reservations, training room pages, cookie consent, and Dotypos admin setup flows. |
Next.js 16, React 19, Tailwind CSS 3, Paraglide, Effect, Dotypos, Cloudinary, Resend |
apps/deskohub-workspace |
Deskohub Workspace site at workspace.deskohub.cz: landing pages, pricing, gallery, legal pages, availability, checkout, Nexi payments, reservation holds, fulfillment, email notifications, and operational E2E tooling. |
Next.js 16, React 19, Tailwind CSS 4, Paraglide, Effect, Drizzle/Postgres, Nexi, Dotypos, Google Calendar, PostHog |
apps/deskohub-portal |
Localized portal at www.deskohub.cz that redirects/routes visitors into the Deskohub properties. |
Astro 6, Paraglide, Vercel adapter |
| Package | Purpose |
|---|---|
@deskohub/cloudinary |
Cloudinary server service, schema helpers, cache tags, errors, and expression helpers. |
@deskohub/cloudinary-image |
Cloudinary image URL and React/Next rendering helpers. |
@deskohub/dotypos |
Dotypos API client, Effect service, table map UI, and generated OpenAPI bindings. |
@deskohub/email |
Provider-independent email service with Resend and console providers. |
@deskohub/google-calendar |
Google Calendar Effect service and config for Workspace availability constraints. |
@deskohub/i18n |
Locale, pathname, translatable value, Next.js, and next-safe-action helpers. |
@deskohub/nexi |
Nexi payment API client, Effect service, webhook/payment interpretation, and generated OpenAPI bindings. |
@deskohub/next-effect |
Helpers for running Effect programs from Next.js/server-action boundaries. |
osm |
Static map/image helpers backed by Sharp. |
@deskohub/qr-code |
QR code generation helper package. |
@deskohub/reservation |
Shared reservation exports. |
@deskohub/standard-schema |
Standard Schema V1 helper utilities. |
- Package manager: Bun
1.3.14 - Workspace orchestration: Turborepo
2.9.x - Language: TypeScript with strict app/package configs
- Formatting and linting: Biome
- Backend composition: Effect
4.0.0-beta.85 - Deployment target: Vercel
- Generated clients:
@effect/openapi-generatorfor Dotypos and Nexi
Install dependencies from the repository root:
bun installRun project commands from the repository root through Turbo. This lets Turbo run task dependencies such as generated clients and Paraglide output before the target task.
# Boardgame Bar
cp apps/deskohub-boardgame-bar/.env.example apps/deskohub-boardgame-bar/.env.local
bun turbo i18n:compile --filter=deskohub-boardgame-bar
bun turbo dev --filter=deskohub-boardgame-bar
# Workspace
cp apps/deskohub-workspace/.env.example apps/deskohub-workspace/.env.local
bun turbo i18n:compile --filter=deskohub-workspace
bun turbo dev --filter=deskohub-workspace
# Portal
bun turbo i18n:compile --filter=deskohub-portal
bun turbo dev --filter=deskohub-portalThe two Next.js apps both use the default Next development port unless PORT is
set, so run them separately or assign different ports when developing multiple
apps at the same time. The portal dev server uses 127.0.0.1:4321.
From the repository root:
bun turbo dev --filter=<package-name>
bun turbo build --filter=<package-name>
bun turbo lint --filter=<package-name>
bun turbo typecheck --filter=<package-name>Workspace also provides:
bun turbo test --filter=deskohub-workspace
bun turbo db:generate --filter=deskohub-workspace
bun turbo db:migrate --filter=deskohub-workspace
bun turbo db:studio --filter=deskohub-workspace
bun turbo e2e:checkout --filter=deskohub-workspacePackages with generated clients or package-level checks expose their own scripts. For example:
bun turbo run generate --filter=@deskohub/dotypos
bun turbo typecheck --filter=@deskohub/nexiThe Boardgame Bar and Workspace apps each own their local env examples:
apps/deskohub-boardgame-bar/.env.exampleapps/deskohub-workspace/.env.example
Copy the relevant example to .env.local inside the app directory. Keep
developer-only secrets in app-local ignored files such as
.env.development.local.
Important integration groups:
- Boardgame Bar: Dotypos credentials, Dotypos webhook secret, Cloudinary,
optional Resend
EMAIL_API_KEY, and public domain/analytics settings. - Workspace: Postgres
DATABASE_URL, Nexi sandbox/production API settings, Dotypos fulfillment credentials, Google Calendar service-account settings, email provider settings, Cloudinary, PostHog, checkout token secrets, and Vercel callback/protection settings.
Do not commit real env files or quote secret values in logs, issues, or PRs.
- Paraglide output can be stale after editing
features/i18n/messages/*.json. Runbun turbo i18n:compile --filter=<app-package>from the repository root before trusting generated message code or updating tests that depend on copy. - Dotypos and Nexi OpenAPI clients are generated from
packages/dotypos/openapi/dotypos-api.yamlandpackages/nexi/openapi/nexi-api.yaml. - Workspace database migrations live under
apps/deskohub-workspace/db/migrations. Generate migrations with Drizzle tooling rather than hand-writing migration metadata.
.github/workflows/workspace-tests.ymlruns Workspace tests for pull requests that touch Workspace, shared packages, or root build inputs. Its checkout E2E job deploys a fresh Vercel preview, assignsnew.workspace.deskohub.cz, runs the Nexi checkout flow, and uploads artifacts on failure..github/workflows/mirror-repository.ymlmirrorsmainto the configured mirror repository as a squashed commit..github/workflows/cleanup-neon-preview-branch.ymlcontains the Neon preview branch cleanup job, currently guarded off withif: ${{ false }}.
For the full Workspace preview checkout procedure, see
apps/deskohub-workspace/docs/WORKSPACE_VERCEL_PREVIEW_E2E.md.
Start with docs/README.md for the documentation index.
Useful entry points:
docs/PROJECT_STRUCTURE.md- feature-based architecture and import conventions.docs/BEST_PRACTICES.md- TypeScript, React, styling, validation, i18n, and accessibility conventions.docs/CACHING_STRATEGY.md- cache tags, invalidation, and webhook revalidation.packages/dotypos/docs/OPENAPI_INTEGRATION.md- Dotypos OpenAPI generation and service architecture.
packages/nexi/docs/TESTING_API.md- Nexi sandbox API origin, public test keys, and test cards.apps/deskohub-boardgame-bar/docs/RESEND_SETUP.md- Boardgame Bar email setup.
apps/deskohub-workspace/docs/checkout-lifecycle.md- Workspace checkout lifecycle contract.