Inspiration
Ever since I was young, my grandpa has been my best friend and my companion. We will always head to our neighbourhood coffeeshop, which is Singapore's place to have a cup of 'kopi', or coffee, and he'd share his stories while we sipped our cups. I always looked forward to the days he'd shout "Kopi Time!" and off we'd go.
Since he passed on, I've missed those mornings, the stories and the shared kopi. After I moved house, I started going to a nearby coffeeshop alone, and I kept wishing there was someone with a story to share, or just someone to drink kopi with.
I realised I can't be the only one. Some meetup applications already exist, but they fail on one thing: people flake. Being stood up when you're already lonely hurts more than not trying at all. Hence, I've built something where showing up is rewarded, and flaking has a small cost.
What it does
Introducing KopiPal! This application offers a simple and friendly user interface that helps people find a kopi kaki (coffee buddy) for small, in-person café sessions. PayPal is the trust layer that keeps everyone honest: Join: you put a small show-up deposit on hold with PayPal. It is authorized, not charged. Show up: you enter the host’s 4-digit code at the café, and your hold is released. You pay nothing. No-show: the deposit is captured and 80% is paid out to the host who was left waiting, as “a kopi on us.” Match: an AI matchmaker reads how you’re feeling and what you like, picks the best open session, and gives you an easy first line to say, so shy people can walk in with something to talk about. Settle: hosts settle the session and get a printed receipt showing what was released, captured and paid out.
How we built it
Backend: Node.js and Express, calling the PayPal REST APIs directly: Orders v2 with intent=AUTHORIZE, and the PayPal JS SDK buttons for checkout. Payments v2 to void a hold when someone shows up and to capture it for a no-show. Payouts to send the no-show deposit to the host. Idempotent requests using PayPal-Request-Id. AI: Claude powers the matchmaker. I also used Claude as a coding assistant while building the project. Frontend: a single hand-styled page with dropdowns and chips so filling things in takes a few taps. It has kopi-themed animations, and a live PayPal activity feed that shows real authorization, capture and payout IDs. Hosting: Render, with all testing in the PayPal Sandbox.
Challenges we ran into
Making the money flow feel fair. Showing up had to always be free, and only flaking should cost anything. That meant chaining authorize, void, capture and payout into one session lifecycle. PayPal setup details, like enabling Payouts on the sandbox app and handling authorizations, which only last a limited time. Browser differences. The PayPal popup closed instantly in Chrome during testing, so I tested the full flow across browsers and documented what works. Keeping the demo simple. I had no login system, so I used per-session host keys to decide who can settle.
Accomplishments that we're proud of
PayPal is the core of the product. Without holds, voids, captures and payouts, the idea doesn’t work. A complete working loop: match, join, check in, settle, receipt, all against the PayPal Sandbox. A product that is personal to me. It started from a real loss and a real habit, and I designed the details around it: kopi lingo tooltips, a Singapore-time greeting, a mascot, and a hidden Easter egg. Turning a lonely feeling into something someone could actually use.
What we learned
The difference between authorizing and capturing a payment, and why holds are a better fit than charge-and-refund for deposits. How authorization honor periods, idempotency keys and Payouts work. How to keep secrets out of a public repo, and to rotate keys as soon as one leaks. That a small, clear problem told with a real story is easier to build and easier to explain than a big idea.
What's next for KopiPal!
Building a mobile application: Currently the application has been built on a web platform, and I have plans to build a mobile application for users, making it more convenient to use and match up with different pals! Kopi with a storyteller: an option to pair younger people with seniors who’d love to share their stories, which is what my grandpa gave me. Accounts and PayPal webhooks, so settlement happens automatically and the host role follows you across devices. Check-in that’s harder to fake, such as location-based check-in instead of only a code. Café partnerships through PayPal’s merchant tools, with kopi perks for reliable guests. PayPal Commerce Platform, so hosts get paid directly. Agentic booking, where an AI agent can find a session and place the deposit hold on your behalf.
Built With
- ai-matchmaking
- anthropic
- claude
- css
- express.js
- fintech
- html
- javascript
- node.js
- paypal
- paypal-js-sdk
- paypal-orders-api
- paypal-payouts
- paypal-sandbox
- render
- social
