Discuss a project
WODAO

Water-as-a-Service · Poland

Everyday delivery. Connected end to end.

A water delivery business with dedicated customer and courier apps, recurring orders and a connected operations workspace.

Everyday delivery. Connected end to end.

The business

The challenge

A recurring physical service has to work beyond checkout: the order, payment, delivery route, customer conversation and next delivery all need to stay connected.

The approach

Build the business and its operating system together. Customer and courier apps connect to administration, subscriptions, order workflows and analytics. WODAO is an independent operating business in Poland.

Commerce, Subscriptions & Delivery / WODAO

How the solution came together

Built and documented

01The business need

Recurring water delivery needs one operational chain from customer payment to subscription entitlement and the courier’s next stop.

02What needed to change

Keep subscriptions, payment events, orders and physical delivery in agreement when providers retry or an operation needs follow-up.

03How it works

Experience
Web storefront
Customer iOS · Courier iOS
Rules & processing
FastAPI · ordering
Stripe webhook handling
Delivery · notifications
Data & connections
PostgreSQL · order events
Stripe Checkout
Routes · bottle returns
Simplified architecture · selected implemented components

04What was built

  1. 01

    Stripe callbacks verify the signed payload before payment events reach order processing. Blocking provider and database calls run off the API event loop.

  2. 02

    Orders, order events and subscription periods are explicit data structures. Customer and courier journeys share the operational record.

  3. 03

    A worker dispatches notification events and outbox records. Delivery status and exceptions remain part of the service workflow.

The key decision

Stripe handles payment collection; PostgreSQL keeps checkout, order and subscription-cycle state. Notifications run in a separate worker so provider latency does not become part of the customer’s request.

How we checked it

The webhook verifies the signature and current Stripe state. Order and manual-renewal checkout completion use a provider-session lock and re-read status under that lock. Completed sessions return without repeating that completion branch; this is not an exactly-once guarantee for every event.

  • Python
  • FastAPI
  • PostgreSQL
  • Stripe
  • SwiftUI
  • Docker

One complete workflow

  1. 01Place an order
  2. 02Pay with Stripe
  3. 03Verify the event
  4. 04Dispatch the route
  5. 05Confirm delivery

05See the work

Customer and courier interfaces, the signed-webhook route, checkout-completion lock, order/subscription schema and worker/outbox source support the case. Implementation was reviewed; no new live payment was made for this portfolio.

06Result and responsibilities

Delivered

A digital operating system for an independent delivery business: commerce, recurring service, customer and courier work. This case describes the delivered workflow, not a claimed revenue uplift.

Role & scope

Founder & Product Owner · commerce, customer/courier applications and operations

Scope of the result

Ownership covers product direction, commerce and operating workflows. Provider services remain external dependencies. Revenue uplift, delivery SLA and universal event deduplication are not claimed.

A workflow in practice

One delivery. Every side connected.

A customer orders water. A courier knows the next stop. The operation keeps the order, payment and delivery record together.

Customer appCourier appOperations workspace
  1. 01

    Order

    Choose a plan or a one-off delivery, with an address and payment.

  2. 02

    Dispatch

    Organize orders into routes and give the courier the next stop.

  3. 03

    Deliver

    Record delivery, bottle returns or an issue that needs follow-up.

  4. 04

    Continue

    Keep the customer conversation and the next delivery in context.

What this makes possibleA delivery can be followed from the customer’s order through the courier’s work to its service record.

A useful foundation for local delivery, replenishment services, subscriptions and field teams.

Build on this pattern

02 / Inside the system

Designed around the work.

01

A customer app for every delivery

Choose water, manage a plan, order from its allowance and keep addresses, payments and support close at hand.

02

A dedicated courier app

A shift, a route and a clear next stop. Record delivery proof, collect empty bottles and handle a reschedule or an issue.

03

Commerce connected to service

Subscriptions and Stripe payments connect the purchase to orders, customer records and the next delivery cycle.

04

One operational picture

Administration brings orders, routes and service exceptions together. Customer and courier conversations stay connected to the delivery.

03 / Product in focus

Explore the interface.

Open a screen to take a closer look.

Actual product interfaces, shown with demonstration data or existing public marketing content.

The connected ecosystem

The tools you know. A more connected business.

Bring familiar software into the way you run your business. Connections are set up around your workflows.

Available data depends on your account and enabled services.

Discuss your software

Product names and logos belong to their respective owners.

Need a similar workflow?

Discuss a project