Splash Lease
Business management system for student equipment rental
Over 8 years, I've built 30+ features for this platform — from in-house accounting to automated invoice processing. This case study highlights three of the more technically interesting challenges: real-time customer communication via WhatsApp, an intelligent search system that predicts what users are looking for, and a duplicate detection service to clean years of messy data.
The Challenge
Splash Lease ran on a legacy Microsoft Access system that was being deprecated. They needed a modern replacement that could handle their growing business operations.
The Solution
A complete rebuild covering all business operations with many new features. A full API powers the back-office, their website splash.nl, and a mobile app in development.
My Role
Lead developer for 8+ years and ongoing. Full-stack: database design, backend, frontend, and DevOps (Docker, servers). Close collaboration with the owner for rapid iteration.
01.Unified Communication
Problem
Employees constantly switched between WhatsApp, email, and the CRM. Customer context was lost across tools. Response times suffered because staff had to manually look up customer information for every conversation.
Solution
Built an integrated communication hub connecting CM.com's WhatsApp Business API, Microsoft Graph API for email synchronization, and Voys API for phone calls. All channels unified in one view with full customer context. When a message arrives, the system instantly identifies the customer and surfaces their complete history — contracts, payments, previous conversations across all channels. Staff can compose messages using customer data directly, automate routine communications, and respond faster with full context at their fingertips.
Example: CM.com WhatsApp integration flow
Technical Details
- Webhook endpoint receives incoming messages from CM.com in real-time
- Reliable phone number lookup using E.164 format — all numbers normalized via Google's libphonenumber
- WebSocket connection pushes messages to the UI without polling
- Smart reply templates auto-populate with customer data (name, contract details, balances)
Result
No more app-switching. Staff see the full customer context immediately. Response times improved significantly. 135,000+ messages processed through the system.
02.Intelligent Customer Search
Problem
Finding customers required staff to navigate a complex dialog with dozens of searchable fields. A naive approach — taking the input and searching all fields — proved too slow for a responsive experience. We then tried pattern detection to identify input types (emails, phone numbers, postal codes), but hit another wall: ambiguous inputs that could match multiple field types still required querying all possibilities, negating our performance gains.
Solution
We built an intelligent input recognition system directly in the search bar. As users
type, the system analyzes the input in real-time and suggests what type of field it
might be — last name, first name, phone number, postal code, organization name — ranked
by confidence. Instead of technical filter syntax like field:value,
we designed an intuitive UI where suggestions appear alongside the input. Staff can use
arrow keys to select a different field type if needed, transforming the input into a
visual "search element tag."
The key insight: live search results update based on the highest-confidence field type, so most of the time users don't need to explicitly select anything — they just see their results appear. This makes the search efficient for both the user experience and database performance, as we only query the most likely field rather than all possibilities.
These tags can be combined for complex queries: searching for a customer named "Kievits" at house number "53" becomes two tags that work together. The system also auto-formats input appropriately — names are capitalized, phone numbers normalized. The result is powerful search capability wrapped in an interface that requires zero training.
Confidence-based search flow with tag combination
Technical Details
- Real-time pattern analysis with confidence-based ranking of possible field types
- Live search queries the highest-confidence field type automatically
- Visual "search element tags" (pills) for confirmed field selections
- Combinable tags enable complex multi-field queries
- Auto-formatting per field type (capitalization, number formatting)
- Keyboard-first navigation: arrow keys to browse suggestions, enter to confirm
Result
Staff find customers in seconds using whatever information they have — a partial name, phone number, or address fragment. Live results appear immediately based on the predicted field type, eliminating the need to manually select filters in most cases. Complex combination queries that previously required navigating multiple filter dialogs now happen naturally in a single search bar. No training needed; the interface guides users to the right field type intuitively.
03.Duplicate Resolution
Problem
Years of data entry created duplicate customer records. Some customers existed 3-4 times with slight variations — different phone formats, typos in names, old addresses. Merging manually was error-prone and time-consuming. Worse: some duplicates were linked indirectly (A matches B, B matches C, but A doesn't match C).
Solution
Built a dedupe service with fuzzy matching and custom similarity scoring. Records are compared across multiple fields (name, email, phone, address) with weighted scores. The tricky part: handling multi-way duplicates where transitive relationships don't hold.
Once duplicate groups are identified, staff review them through a merge dialog. The interface displays both records side-by-side, highlighting differences and allowing staff to select which value to keep for each field. With one click, the selected record becomes the master — all references throughout the system (contracts, invoices, communications) are automatically updated to point to the merged record.
Technical Details
- Pairwise comparison with Levenshtein distance for string similarity
- Weighted scoring: exact email match (high weight), similar name (medium), same postal code (low)
- Threshold-based grouping with configurable sensitivity
- Graph analysis for multi-way matches: if A-B and B-C are linked but A-C score is below threshold, split into separate groups
- Review UI shows confidence scores and lets staff approve/reject merge suggestions
Result
Automated detection of duplicate clusters with confidence scores. Staff review and merge with confidence. Clean data enables reliable reporting and prevents customers receiving duplicate communications.
Tech Stack
Also: Microsoft Graph API · Voys API · Various payment & shipping integrations
Other Notable Work
- → In-house accounting module — eliminated dependency on external accounting software
- → Automated message parsing — invoices, track & trace codes, and work orders automatically routed and processed
- → 10+ external integrations — payment providers, shipping carriers, communication channels unified in one system
- → OpenAI sentiment analysis — automated classification of customer review sentiment
"Dennis is an outstanding software engineer who was instrumental in designing and building our entire platform. He combines strong technical execution with thoughtful advice and support. Any company would benefit from his broad expertise."