Public web and customer flow
Website, booking, customer sessions, group sessions, and payment flow.
Faktorial.AI
Asynkron autonomous engineering
A real booking system, not a demo: public booking, admin, calendar, payments, CRM, CMS, integrations, auth, tenant scoping, migrations, and tests.
BokaBra consists of a public customer experience, a broad admin/backoffice, and a backend platform that ties together tenancy, the data model, integrations, and payments.
The numbers come from the repository, specs, routes, backend modules, migrations, and measured LOC across frontend, backend, and tests.
Each module is its own work surface, but they share the data model, tenant scope, auth, component patterns, API contracts, and verification.
Website, booking, customer sessions, group sessions, and payment flow.
Admin creation, lists, calendar, queue, availability, reports, and changes.
Service catalog, articles, resources, schedule editor, rules, and planning blocks.
Customer registry, history, comments, GDPR flows, tags, custom fields, and reviews.
Templates, logs, channel settings, message jobs, newsletter, and audit trail.
Stripe, Qvickly, payment events, gift cards, campaigns, batch invoicing, and Spiris.
Settings, home page, menu, news, image archive, and public website routes.
Vendor surfaces, credentials, access grants, and booking-linked time margins.
Google Calendar, iCal, webhooks, Mailchimp, metrics, AI assistant, and audit logs.
Clerk, tenant scope, customer magic link, local bypass, migrations, and admin shell.
The architecture is conventional enough to understand, but broad enough to test whether an AI-driven delivery model can handle real dependencies.
x-booking-tenant-id to tenant_id.The estimate assumes a sharp, highly driven senior web developer building the functionality that actually exists in BokaBra. The relevant comparison is cost basis: senior developer salary cost versus Faktorial's agent-assisted model.
| Area | Man-hours | Comment |
|---|---|---|
| Public website and customer flow | 270-510 | Public routes, booking flow, group sessions, customer session, and payment surface. |
| Booking operations | 750-1,350 | The heaviest operational surface: calendar, queue, availability, reports, and lifecycle. |
| Services, resources, and schedules | 430-760 | The core configuration that determines what can be booked, when, and by whom. |
| Customers and CRM | 500-900 | Customer registry, history, GDPR, tags, custom fields, reviews, and newsletter. |
| Messages and communication | 300-560 | Templates, logs, channel settings, jobs, and delivery trail. |
| Payments and finance | 700-1,250 | Stripe, Qvickly, gift cards, campaigns, batch invoicing, reporting, and Spiris. |
| Website/CMS | 300-520 | The tenant's public content, menu, news, images, and website settings. |
| Access control | 160-320 | Settings, grants, and vendor surfaces. Several vendors are mainly config/spec surfaces. |
| Integrations and automation | 470-850 | Calendar, iCal, webhooks, Mailchimp, metrics, AI assistant, audit, and protection. |
| Auth, tenancy, and operations | 260-515 | Clerk, tenant scope, customer auth, Supabase architecture, migrations, and admin shell. |
| Total build volume | 4,140-7,535 | Cost basis: 3,726,000-6,781,500 SEK at 900 SEK/hour. |
Faktorial source cost: 12 days x 4 hours/day x 1,500 SEK/hour = 72,000 SEK, plus 3,000 SEK in OpenAI + Claude subscription fees, for a total of 75,000 SEK. The agent/source window was 96 hours, but the priced senior developer input is 48 hours.
LOC in the detail tables is traced from files that clearly belong to each item across frontend, backend, and tests. A value of 0 means no separate implementation was found in the current codebase, or that the item only exists as configuration/spec.
| Item | Man-hours | LOC |
|---|---|---|
| Public company page with company profile, content, reviews, and booking entry points | 60-110 | 4,526 |
| Website home page, menu/pages, news articles, and image archive | 0-0 | 0 |
| Public APIs for services, availability, customer creation, and booking creation | 60-115 | 1,173 |
| Public booking configuration: color/theme, flow variant, list layout, time display, and allowed booking methods | 45-85 | 1,732 |
| Customer payment page for bookings that require online payment | 45-90 | 2,159 |
| Customer sessions via magic link/cookie, separate from admin auth | 25-50 | 326 |
| Public group sessions with booking flow for sessions/classes | 35-60 | 2,766 |
| Item | Man-hours | LOC |
|---|---|---|
| Booking creation in admin | 50-90 | 1,884 |
| Booking list with filtering, detail view/editor, and lifecycle actions | 90-160 | 9,274 |
| Booking report and payment report | 40-75 | 1,852 |
| Staff calendar and staff calendar editor | 100-180 | 2,166 |
| Group sessions with list, editor, publishing, cancellation, and participant booking | 95-160 | 3,709 |
| Queue/waitlist for fully booked slots, including queue settings and queue operations | 65-120 | 5,312 |
| Availability calculation across schedules, resources, services, and bookings | 145-260 | 2,479 |
| Unavailable times and planning blocks | 70-130 | 4,196 |
| Schedule exceptions and report of schedule deviations | 30-60 | 769 |
| Moving/changing/cancelling bookings and related backend side effects | 65-115 | 826 |
| Item | Man-hours | LOC |
|---|---|---|
| Service catalog with list, editor, prices, status, and relationships | 90-160 | 4,663 |
| Articles/products that can be used in finance and pricing flows | 35-65 | 1,925 |
| Resource list and resource editor for bookable resources | 55-95 | 3,002 |
| Schedule list and schedule editor | 100-180 | 4,382 |
| Schedule tabs for settings, linked resources, linked services, advanced rules, and exceptions | 55-110 | 456 |
| Booking intervals, validity periods, booking horizon, cutoffs, and timezone in the data model | 10-25 | 105 |
| Planning blocks for more advanced operational planning | 85-125 | 2,307 |
| Item | Man-hours | LOC |
|---|---|---|
| Customer list and customer editor | 70-125 | 5,267 |
| Customer comments, customer history, and links to bookings, payments, messages, and reviews | 80-145 | 1,994 |
| Customer import/export, GDPR export, and anonymization/deletion via the customer ownership surface | 95-170 | 1,526 |
| Tags for customers and bookings | 35-60 | 1,787 |
| Custom fields for bookings, customers, and services | 80-145 | 2,241 |
| Reviews with status/moderation | 45-80 | 1,992 |
| Newsletter: logs, templates, and segment/send surface | 65-120 | 2,106 |
| Mailchimp settings as integration surface | 30-55 | 1,570 |
| Item | Man-hours | LOC |
|---|---|---|
| Message templates with channel and language variants | 60-110 | 2,069 |
| Message log for SMS, email, and push | 35-70 | 1,216 |
| Settings for booking-related messages | 35-70 | 1,799 |
| Backend message jobs for tick/run and delivery work | 80-150 | 2,873 |
| Newsletter log and newsletter templates | 45-90 | 1,947 |
| Delivery and audit trail for communication | 45-70 | 1,633 |
| Item | Man-hours | LOC |
|---|---|---|
| Payment settings with provider selection and tenant configuration | 50-90 | 2,405 |
| Stripe configuration and Stripe checkout flows | 120-215 | 4,491 |
| Qvickly configuration and Qvickly checkout flows | 90-160 | 2,223 |
| Payment events linked to bookings and reporting | 75-140 | 1,160 |
| Payment deadline, paid/unpaid/pending/refunded status in the data model | 25-50 | 466 |
| Gift cards and campaign codes with transaction history | 95-170 | 4,861 |
| Batch invoicing with log of invoice runs | 90-160 | 3,140 |
| Spiris standard articles and integration status | 50-90 | 1,369 |
| Price-article mappings between services and accounting articles | 40-70 | 986 |
| Printable booking copies/templates | 65-105 | 891 |
| Item | Man-hours | LOC |
|---|---|---|
| Website home settings | 40-70 | 2,059 |
| Website booking settings | 35-65 | 1,606 |
| Website menu settings | 30-50 | 1,125 |
| Website news list and news editor | 50-85 | 1,661 |
| Website image archive with upload, metadata, usage, and delete/update | 75-140 | 2,772 |
| Public website routes that render the tenant's website content | 70-110 | 993 |
| Item | Man-hours | LOC |
|---|---|---|
| Access control settings with global enable/disable, selected vendor, and time margins around bookings | 55-110 | 5,158 |
| Access grants linked to bookings | 35-80 | 1,526 |
| Vendor surfaces/specs for RCO, Aptus, Axema, Parakey, Amido, Telkey, Accessy, and Zesec | 45-95 | 4,037 |
| API credentials and vendor-specific config fields | 25-35 | 1,262 |
| Rules for deleting old bookings and notifying via email/SMS | 0-0 | 0 |
| Item | Man-hours | LOC |
|---|---|---|
| Google Calendar OAuth | 25-50 | 220 |
| Calendar sync tokens and iCal flows | 75-135 | 4,293 |
| Webhook settings, URL list, event catalog, logs, retry/test/delivery jobs | 110-200 | 4,462 |
| Mailchimp settings | 45-80 | 2,557 |
| Spiris accounting settings | 35-65 | 1,369 |
| OpenTelemetry/metrics surface and /metrics | 35-65 | 1,228 |
| Health endpoint | 1-2 | 4 |
| AI chat/admin assistant surface | 85-150 | 5,488 |
| Audit logs | 25-45 | 718 |
| Rate limiting and CSRF | 34-58 | 544 |
| Item | Man-hours | LOC |
|---|---|---|
| Clerk admin auth with organization as tenant source | 50-100 | 687 |
| Tenant scope via x-booking-tenant-id and backend filtering | 50-110 | 724 |
| Customer magic-link auth separate from admin auth | 25-50 | 326 |
| Local admin bypass for agent/manual testing | 5-10 | 46 |
| Supabase/Postgres as database, while the frontend only talks to the Express backend | 10-25 | 73 |
| Migrations with down files and backend-first data model | 25-55 | 498 |
| Admin shell with dashboard, sidebar/navigation, settings areas, and support view | 95-165 | 5,841 |
It has enough dependencies to be an honest reference case: UI, API, auth, data, integrations, payments, migrations, tests, and product logic all have to fit together.
The specification is broken into narrow deliverable surfaces, such as booking list, webhook log, payment settings, or schedule editor.
Faktorial uses the codebase's own patterns, data contracts, and components instead of inventing parallel solutions.
Frontend, backend, migrations, and tests are connected within the same scope, making the result verifiable.
Knowledge from each delivery becomes new system material: specs, ADRs, test cases, and reusable implementations.
Important: external agreements, vendor certifications, brand identity work, and larger product-strategy rework are not included in the estimate. Access control includes several vendor surfaces where not everything is a full external integration in the current code.