kalya LIVE · kalya.app
SOVEREIGN SCHEDULING · MULTI-TENANT · MÉXICO

A scheduling instrument, not a calendar app.

kalya computes availability to the minute and the timezone, and makes double-booking impossible at the database level. Precise, multi-tenant, and yours — with export and transparency as visible affordances, not buried settings.

What it doesBring your center on
GUARANTEE
no double-booking
DB invariant
CLOCK
DST-correct
per-date instants
TENANCY
row-level security
fail-closed
STATUS
live
kalya.app


What it does today

Every item here is running in production and covered by tests. No promises stated as features.

INTEGRITY

Double-booking is impossible

Non-overlap is a database invariant — a Postgres exclusion constraint, not application logic. Two people racing for the same slot: one commits, the other is cleanly refused. Verified in CI against a real database, under concurrency.

TIME

Timezone- and DST-correct

Availability rules are wall-clock in the host’s zone and resolved to exact instants per date, so a 09:00 rule stays 09:00 across a DST boundary. The engine is a pure function with explicit spring-forward and fall-back tests.

ISOLATION

Every tenant’s data is walled off

Row-level security is forced at the database on every tenant table, fail-closed. Proven in CI as an unprivileged role that cannot bypass it — cross-tenant reads and writes are rejected, not merely filtered.

BOOKING

A hosted booking page, in Spanish

Each tenant gets a public page at kalya.app/<handle>, rendered in es-MX and branded to them. A visitor picks a service, a day, an exact slot, and confirms — end to end, tested end to end.

CONTROL

Self-service cancel + add-to-calendar

Every booking carries a private cancel link and a signed .ics feed. Cancelling is idempotent and frees the slot immediately. The booker never needs an account.

RECURRENCE

Standing schedules + a shared calendar

Weekly recurring commitments (a therapist’s standing slots) with holiday and cancellation exceptions, refused for conflict on both the resource and the subject — the clash is named, not hidden. Plus an org-wide calendar you publish once and everyone subscribes to.



Correctness is the product

23P01 → refused

A race for one slot returns a clean rejection, never a corrupt double-booking and never a 500. The database is the referee.

09:00 = 09:00

Across a daylight-saving change, a nine-o’clock rule is still nine o’clock. Tested against real spring-forward and fall-back dates.

your data, exportable

Your schedule exports in an open, documented contract. Sovereignty over lock-in — a visible affordance, not a support ticket.



On the instrument bench

Direction, stated as direction. These are being built — they are not claimed above because they are not shipped yet.

FISCAL · PLANNED

Payments + CFDI, built for Mexico

Paid bookings through Dhanam, and a CFDI issued through Karafiel — the fiscal step no foreign scheduler can do. The data model reserves the fields today; the charge-and-stamp flow is on the bench.

EMBED · PLANNED

An embeddable widget

Drop the booking flow directly into a site — the same engine, inline. Today the hosted page is the surface; the widget is next.

SYNC · PLANNED

Two-way calendar sync

Google Calendar first — read busy-time, write the booking, attach a Meet link. The hardest integration in this space, scoped as its own workstream.

SCALE · PLANNED

Teams, reschedule, reminders

Round-robin and collective team scheduling, first-class reschedule, and email/WhatsApp reminders. Sequenced deliberately after the core is proven.



Bring your center onto kalya

Onboarding is done with you today — we provision your services, hosts, and hours, and hand you a booking page at kalya.app/<your-handle>. Self-serve setup is on the way.

Talk to usSystem status