Behind Eclipse - The Technicals
We’re very grateful for all the feedback and support for Eclipse’s launch. This post is to outline some of the details about the technicals of Eclipse.
The App
We built the iOS app for Eclipse using the Swift programming language using a mix of SwiftUI and UIKit as our frontend. We also use various native Apple frameworks and some other UI packages.
Why not React Native? Flutter? Cross-platform? Well, our goal was to provide a fast, iterative, and optimal user interface and experience. Building with Apple’s native programming language and frameworks gives you a familiar feel for iOS devices, and cuts down on our update time.
Real-Time Optimization
Eclipse uses only the name of your location to recommend you cards from your wallet (This means that your exact location never goes through our servers). Using the cards which are in your wallet, your custom point values and custom points multipliers (if applicable), we rank your cards based on how much “value” they provide. Cash back cards are unaltered (i.e. 2% cash back is simply 2% value) while the value of rewards cards is the effective cash back of your card (e.g. 1x points with a point value of 1.5 cents / point is 1.5% value). If you are in a country which your card would consider ‘foreign’ we apply a foreign transaction fee (if applicable to your card) which we subtract from the ‘value’ of your card. For example a card with 1.5% cash back in a foreign country would be -1.5% value if the foreign transaction fee is 3%.
We also consider where your cards might not be accepted. To do this we have a database of location names which have limitations on which types of cards are accepted. We check the name of your location with our database and find cards in your wallet which may not be accepted. If this is the case we display the ‘value’ as 0.00% and let you know explicitly that the card is not accepted.
Recommendations for Your Wallet
Recommendations are a unique feature in Eclipse. We use your profile (eg credit range, income range, travel) to recommend you new cards which are not currently in your wallet. To do this we create a base ‘score’ for each card by applying a custom weight function based on its properties such as cash back/rewards multipliers. These ‘scores’ are then altered based on your custom point values and travel. The first rudimentary algorithm used a Jaccard Index regressor to support these recommendations, but we have since pivoted to something a bit more advanced. Credit range and income act as filters which filter out cards which you may not qualify for. However, in the future income may play a bigger role in recommendations.
Card of the Week
This is a relatively new feature which we’re still exploring. We currently have implemented a custom variant of the Metropolis Hastings algorithm, written in Rust, to seed a card of the week. This algorithm is a Markov chain Monte Carlo (MCMC) to draw samples from a probability distribution based off our card scorings. This also considers popular cards in your georegion.
Notifications
Certain specific actions in the app will trigger notifications with the app’s notification center. For remote notifications, we use FCM tokens after verifying your user authentication. We use this to let you know of updates or useful information when your app is not opened.
Autopilot
The Autopilot feature is something we’re still experimenting with, and it was built using the ActivityKit framework for both the live notifications and dynamic island. Basically, it schedules updates for location and backend API calls when activated, so you can receive updates from your lock screen.
Search Functionality
Our search functionality is built using MapKit with natural language input. It supports locations around you, names of locations, and categories to shop at. We’re working on improving it further.
Adding a Card
When you add a credit card, you essentially get a customizable template of the card which you can personalize to fit your needs. This does not require connecting bank accounts nor secure details. We update our database often, so please reach out to our team if there are any cards that are missing!
Future Plans
In the future we plan to revamp our card recommendations. This would entail features such as using monthly spending budgets to determine the best card for you and using LLMs and AI trained on Eclipse’s platform, making recommendations even more personalized.
In a future update, you will also be able to add coupons, loyalties, and debit cards to your Eclipse wallet, which would automatically trigger when you arrive at a specific location in real-time - on top of the credit card recommendation. Basically this allows your value-back at every transaction to compound across different forms of returns, which we will also make clear and transparent in our UI.
A cool follow up idea is to allow users to add photos of these coupons or loyalties (codes / barcodes). So when it gets recommended at a location, you can just easily show and use it directly with the Eclipse app. Other random location-based recommendations for stuff like transit cards might also be possible as we begin to generalize the Eclipse wallet.
Also, we’re looking into making an android Eclipse app and a web extension!
--
Thanks so much for reading! 🧡
Luke and Mingchung from Eclipse