How this MVP is wired.
The phone preview on the left is the staff app. The PDF preview on the right is what the guest receives. This panel is a short engineering note about where each integration plugs in.
Restoring your session…
The app couldn't reach Villa Savina's records. Check your connection and try again.
Select a guest booking
No accepted receipts in the last 30 days.
Add a receipt
Tap to take a photo or choose an image or PDF.
Drag & drop or paste a receipt image or PDF
No reconciliations yet. Tap “Create New Recon” to start.
Loading your reconciliations…
No cash receipts in the queue.
No manual debits added.
No payouts added.
Review the reconciliation below. Edit to change anything, or Submit & Send to record it and share the PDF.
The phone preview on the left is the staff app. The PDF preview on the right is what the guest receives. This panel is a short engineering note about where each integration plugs in.
villa-savina-reimbursements-staging today. OwnerRez or Savina CRM can later populate the same bookings table.
src/integrations/ocr.js, then applies receipt rules for vendor, date, total, and rewards/wallet exclusions.
src/integrations/fx.js. The guest PDF only ever shows the adjusted customer rate.
create-stripe-checkout Supabase Edge Function (capped to a single completed payment). The hosted URL is embedded in the guest PDF as a clickable “Pay Invoice” link, and the stripe-webhook function reconciles paid/expired/failed status. Setup notes in docs/stripe-payments.md.
db/migrations/0001_initial.sql.
—
—
—
—
* At SAVINA, your grocery pre-stocking is complimentary. Additional trips incur a fee of $25.00 USD per trip.
Choose how you'd like to continue. Cancelling clears the current receipt and image.
Add up to 20 receipts or invoices, review each, then submit individually.
Drag & drop, paste, or choose receipts
Images or PDFs · up to 20 files at once
No files added yet. Choose, drag, or paste receipts to begin.
This area is restricted. Enter the access code to continue.
Incorrect access code.
Safe Cash Reconciliation is restricted. Enter the access code to continue.
Incorrect access code.
SAVINA CRM is restricted. Enter the access code to continue.
Incorrect access code.
This removes the recon from the list. This cannot be undone.
This removes the receipt from the Safe Recon queue only. The original receipt in its workflow is not deleted.
Marking the invoice paid will take it out of the unpaid invoice list. You should do this only if they paid the invoice using cash or something other than credit card.
Are you sure you want to change the exchange rate?
Uploading and recording your receipt.