Inspiration
Arca Continental's B2B clients were receiving wrong products due to stock shortages, with no prior warning. We wanted to build a system that puts the client in control before the order ever leaves the warehouse.
What it does
It predicts substitution risk for every order line using a ML model trained on 3,434 real substitutions, then notifies the client via Tuali so they can approve or reject the substitute before dispatch. Operators get a real-time dashboard to coordinate the entire flow.
How we built it
We built a full-stack portal with FastAPI and SQLAlchemy on the backend, a vanilla HTML/JS frontend, and a LogisticRegression model trained on historical substitution data from over 1 million order lines. Business logic integrates mock Tuali and SAP services ready for production connection.
Challenges we ran into
Joining the three databases was tricky because order IDs were stored in scientific notation, making direct joins unreliable. We also had to carefully balance the ML training set by generating synthetic negatives, since real substitution events represent less than 22% of all order lines.
Accomplishments that we're proud of
We delivered a working end-to-end portal, from ML prediction to client survey to operator confirmation to Tuali loyalty points, in a single hackathon sprint. Every substitution now has a documented decision trail.
What we learned
We learned how to architect a real-time notification flow using WebSockets and how to translate a messy real-world dataset into a deployable ML pipeline. We also deepened our understanding of B2B supply chain pain points and how technology can resolve them without disrupting existing operations.
What's next for Arca Portal
Connect the live Tuali and SAP APIs to move from mock to production, and enrich the ML model with seasonal patterns, day-of-week signals, and per-client substitution history to push prediction accuracy even further.
Built With
- jws
- jwt
- python
- scikit-learn
- sqlalchemy
- sqlite
- websocket
Log in or sign up for Devpost to join the conversation.