The National Gallery of Art commissioned Guidekick to produce a mobile location-based experience for their visitors based on the core engine which I had developed for them. Since the NGA wanted to make major changes to the way data is published and used by the app, Guidekick asked me to take on development duties.
Whereas most of our location-based apps for museums and galleries were based on Guidekick's in-house content management system, Quipu, the NGA wanted to use their own web-based API to provide all of the data for the app. This was a major departure from all our other apps as Quipu exported content to a zip which could then be downloaded by the app. Thus, once the download had taken place, content no longer needed to be streamed and the app would function in offline mode if the user did not have an internet connection. The NGA's own CMS was entirely online and they insisted that we not cache any data beyond that necessary to make the app function.
My first task was to create an abstract version of all of our content model classes and then begin developing a new subclass for the NGA's new API. The second task was to create an abstract version of all of the content management classes and then begin developing a new subclass which was specifically for streaming content. Due to this, it was necessary to change a lot of the UI (view) classes in order to behave correctly even when data it would normally have had immediately could not be used until it had been received from the API. These tasks were particularly challenging because there was no way to keep the app fully functional while all of this was in progress. So while I could test certain small sections of the code in isolation, I was not able to have an overview of the state of the app.
Once the core of the app had been revamped, and the app was broadly functional again, I began work on switching over to the IIIF API to implement images, thumbnails, etc and SoundCloud to implement the audio functionality. The NGA API had thousands of points of interest, many of which were not on view or were not intended to be displayed in the app so I had to develop a cache system to ensure that we could only look for POIs which had changed and not re-stream the same content over and over.
The on-site, location-based aspects of the project were also challenging, as neither the team or I were close enough to be able to test on-site at the NGA. I implemented a fake location system which simulated paths over all of the floors of both NGA buildings and made all of the location-based functionality rely on this fake data. This allowed me to reproduce some very obscure and unpredictable location scenarios which did not behave as expected and for me to fix those.
The final step was to implement detailed analytics for all of the app's functionality. The app went live on March 27th 2019.