Inspiration

Two friends can be flexible about a pottery class date while being firm about attending together. Bookwhen's documentation describes course waitlists covering only the selected date, without alerts for other dates. Together addresses that specific limitation with one request across acceptable dates, preserving the whole group. The first version manages a small ceramics studio's own schedule so the complete workflow is runnable and testable.

What it does

A customer describes their group, acceptable dates, and total budget. Local Qwen proposes preferences, which they review and edit before joining. When enough seats open, Together considers eligible requests in arrival order and holds every seat for ten minutes. One free seat cannot split a two-person request.

The offer shows the session, group total, and deadline. The customer approves that booking in PayPal sandbox; confirmation follows server-verified capture. Expired offers release the seats. A studio screen shows booked, held, and available places. Six sessions use Los Angeles time and USD prices. A clearly labeled simulation supports exploring the workflow without provider credentials.

How we built it

React and Vite provide responsive customer and studio screens. Node.js owns matching, holds, receipts, and locally persisted state. Warm pottery photography, readable date rows, and a focused booking panel make the group request easy to inspect.

Ollama runs Qwen 3.5 locally. Its constrained proposals use the actual schedule; server validation and customer review precede enrollment. PayPal Orders v2 creates sandbox orders and captures approved payments. The server supplies prices, verifies the expected booking and amount, and reconciles uncertain capture responses. The MIT-licensed repository includes complete local setup instructions.

Challenges we ran into

Scheduling and payment states must agree: holds immediately reduce availability, expiry frees seats, and retries must preserve one booking. A PayPal return alone cannot prove payment completed, so confirmation requires server verification.

Language requests also exposed missing group sizes, ambiguous dates, and per-person versus total budgets. Restricting proposals to six sessions and requiring review kept interpretation errors from allocating seats. Testing production routes caught a root-page issue that development mode did not expose.

Accomplishments

Together completes the request, match, hold, and booking workflow with 80 passing automated tests and three successful actual local Qwen checks. Automated provider tests use controlled stubs; live integration evidence is separate.

A real sandbox buyer approved a two-person Wheel basics booking for $64.00 USD. The server verified capture, an independent PayPal lookup confirmed it, and the receipt survived a server restart. Desktop and 390-pixel mobile layouts were checked. A fresh source archive installed, built, and passed the tests without copying private credentials or existing dependencies.

What we learned

Flexible preferences become useful when the customer can inspect a small, concrete decision. Intent interpretation, seat allocation, and payment authorization need clear boundaries. Provider stubs establish failure behavior; an actual sandbox checkout establishes that the integration works. Both evidence lanes matter.

What's next for Together

The next step is testing the request and offer flow with studio operators and small groups before deciding on booking-platform integrations. The current prototype remains one studio and one timezone. Production account roles, refunds, messaging, and operational monitoring are future work; customer adoption has not been established.

Built With

Share this project:

Updates

Submission history