Native experiences are superior in many ways. Using Swift was the right choice. I did try to implement it using SwiftUI but found it to be too unstable and unfinished for production use.
The app is architected using:
- Combine with Publishers as the way communication happens between layers.
- Views are made entirely in code using AutoLayout.
- No Objective-C code. No warnings either. SwiftLint as the linter, with all flags enabled 👮♀️.
- View model layer leverages IGListkit to abstract presentation from data.
Because it’s the best for quick iteration and great defaults. Performance is not much of an issue because most rendered content is cached. Done work is done asynchronously using background jobs. Currently in memory soon they’ll be migrated to a more robust solution like SideKiq.
The web experience uses React with Typescript which works around a lot of the issues you get when using vanilla JS. CSS styling is done via .scss files.
It’s the most versatile database out there. It also offers some features we’ll need soon like better search, and complex queries.
While it has a high complexity learning curve, once you overcome it, iteration becomes much faster. It gives me autoscaling based on load, cron jobs, containerization of services, metrics, etc.
It also made it very easy to offer domain hosting with automatic SSL provisioning using https://letsencrypt.com
To support domain hosting we’re generating certificates on The fly and do some path rewriting to route to the right place on the rails app.