Inspiration
Business contracts already contain the payment details companies need: amounts, due dates, milestones, receiver names, and IBANs. But in practice, someone still has to read the PDF, copy the data, manually schedule, and track every payment. We wanted to turn that slow, error-prone workflow into a simple upload–review–confirm and track flow.
What it does
Candance lets users upload PDFs, extracts structured payment information such as amounts, dates, and frequency using Claude, displays the results for review, and schedules the payments through the bunq Sandbox API.
Users can also view all upcoming payments on a timeline dashboard, including recurring payments expanded into future events, and track all upcoming financial obligations in one place.
We also added notifications for unpaid payment requests based on their current status, as well as reminders showing how many days are left before money needs to be sent for a contract. In addition, users can cancel a contract or manually edit the scheduled payment details if the extracted information still needs correction.
How we built it
We built the frontend with React, Vite, Tailwind CSS, Framer Motion, and Lucide React.
The backend uses Python, FastAPI, Pydantic, and an AWS Lambda deployment package. Claude processes the uploaded PDFs and returns structured contract data. The backend then validates the extracted data, checks IBANs, manages bunq sessions, signs requests with RSA, and schedules the payments using the bunq Sandbox REST API.
Challenges we ran into
AI reliability and consistency: One of the biggest challenges was making AI extraction consistent across different contract formats. Contracts do not all follow the same structure, some have missing fields, unusual payment schedules, unclear dates, or differenet ways of describing milestones. To handle this, we had to design strong Claude prompt, enforce a clear JSON schema, and add validation so the system could stay reliable even with edge cases.
Frontend–backend integration: Connecting the frontend to the backend deployed on AWS introduced challenges around request handling and environment configuration.
Edge cases: We also had to handle contract edge cases carefully, such as missing receiver names, missing IBANs, invalid payment dates, recurring payments, unpaid requests, manual edits, and contract cancellation. These details made the project more realistic, but also much harder to make it stable at the end.
Accomplishments that we are proud of
We managed to build a complete end-to-end system that goes from contract upload to AI extraction, to payment scheduling and then dashboard visualization.
We successfully integrated Claude with the bunq API to turn unstructured documents into real financial actions, while designing a clear and intuitive user flow with a review step, giving users control before automating payments.
Furthermore, we implemented a dashboard that makes future financial obligations easy to understand, turning raw data into a usable timeline.
What we learned
- AI systems require strong validation and human-in-the-loop design to be reliable in real-world applications
- Integrating external APIs introduces constraints that significantly shape system architecture
- Clear UX and transparency are essential when automating sensitive financial actions
- Handling edge cases early is critical for building a robust system
What’s next for Candance
Next, we want to simulate future contract scenarios and analyze payment risks based on user habits. By comparing upcoming contract obligations with historical spending patterns, balance behavior, and recurring expenses, the system could warn users before they commit to contracts that they may struggle to afford.
We also want to add risk indicators for contracts and personalized insights such as:
“This payment date may conflict with your usual rent and subscription payments.”
This would turn Candance from a payment scheduler into a financial planning assistant for contract-based commitments.
Built With
- amazon-web-services
- amplify
- api-gateway
- bunq-api
- claude
- lambda
- python
- react
- tailwind
Log in or sign up for Devpost to join the conversation.