Wist
Smart universal wishlist tracker
The Problem
I wanted a single, unified wishlist app that worked seamlessly across all my devices (Android, iOS, Desktop, and Web). The core feature needed to be “magic”: a user just pastes a shopping URL, and the app automatically extracts the product title, price, currency, image, and metadata.
Hardest Technical Hurdles
Building for four platforms usually requires four codebases, which is impossible for a solo developer to maintain. Additionally, parsing unstructured HTML from thousands of different e-commerce sites to consistently extract product data is incredibly brittle if done with traditional DOM scraping.
How I Solved Them
To solve the platform issue, I adopted Kotlin Multiplatform (KMP) and Compose Multiplatform, allowing me to share a single Kotlin codebase across UI, business logic, and API networking. On the backend, I built a Ktor server with PostgreSQL. For the data extraction, I integrated the Firecrawl API, leveraging LLMs to intelligently parse product details from any URL regardless of the site’s underlying HTML structure.
Lessons Learned
KMP is powerful but requires rigorous architecture. I learned the value of cleanly layered architecture (Routes -> Services -> Repositories) and resilient client-side error handling using Result<T> types. It also proved to me that using AI for structured data extraction is significantly more reliable than writing regex or CSS selectors for hundreds of different websites.