Interchange

interchange-screenshots.png

An iOS app for college transit, currently available for Chapman University. View routes, shuttle locations, and estimated arrival times in a sleek, easy-to-use interface. I built this app using SwiftUI, Node.js and Apollo GraphQL, with Redis as a primary storage mechanism.

Download on the App Store Join the TestFlight Website

Design and implementation

The server is built using Node.js. I designed a basic GraphQL schema and used Apollo’s GraphQL implementation to bring it to life.

In GraphQL, data is represented using a schema, which is then fulfilled with resolvers defined in code. Each resolver function gets some information like the parent object, arguments, and a server-defined shared context. Seeing the dependency injection that you could do with this context, I decided on an object-oriented approach consisting of loaders, repositories, and systems. Loaders load data from an external source, repositories store data, and systems are composed from a set of both loaders and repositories.

I then applied an event-driven pattern to implement the iOS notification sender, listening to updates on the shuttle repository. I would eventually reuse this pattern to implement a custom ETA system that could run independently of an external data source.