Reinventing Dugout to bring fans the best experience of their favourite clubs.
CrownEffect was an AI service for generating hashtags and captions based on uploaded images. With custom built AI models, users were able to upload an image via the CrownEffect app, and within seconds have human quality hashtags and captions.
My role as co-founder was to build the app, the backend systems and the microservice infrastructure. CrownEffect was co-founded with Peter Bonac who created and trained the AI models, and Sara Prestley who designed the app and website experiences.
While we had a successful launch and modest early growth, we decided to shut down the project 8 months after starting it.
Concept and model development
The concept for CrownEffect came initially from hashtags. We realised that it's generally pretty difficult for the average user to understand what is a 'good hashtag'. This being a hashtag that balances specificity and value with an appropriate audience size. We also saw that feature recognition in images was becoming fairly mature, and realised there may be an opportunity overlap between the two.
We began building some early models which we tested and trained rigorously with real people. Within a few months we were able to get remarkable results, beyond simple image feature listing. However, while testing we also realised that there was a user demand for writing captions. While this was a significantly harder challenge, we began building and training models that could write captions. Again, within a few months we had very good results.
Building and testing
Once we had working AI models I began building these into an API based web service. The aim was to build a modern and scalable backend, that could be quickly iterated on without impacting stability for the user.
The result was a system made up of four distinct micro-services;
- A backend service built on Django that controlled the API, authentication, and hosted all user data,
- Task queuing, orchestration and monitoring via Redis,
- A Python and Tensor service running a lightweight API (built on Flask) for communicating with and interpreting the AI models,
- Tensor Serving that hosted and ran the AI models, working via API.
These services were hosted in Google Cloud Services using Kubernetes for automated orchestration. The development of these services included a CI/CD pipeline for rapid development and testing, without impacting users.
The app was built using React Native and deployed through the App Store. Development of the app was highly iterative, and involved frequent testing with real people using Test Flight. We went through three distinct builds before release, each addressing an important evolution in the application.
The first version of the app simply provided users with what it considered to be the best hashtag and caption results. However, we found from testing that people wanted more options and control. The solution was a balance between speed and customization, giving users the option to choose from the best results and then edit it further if they desired. However this change was a complete redesign of the upload flow, which was not previously done in stages.
This staggered process involved a large backend rewrite to address the asynchronous nature of the new flow. It required the addition of states on images, while also implementing watchers to make sure an image never got trapped in a state that would prevent it being edited. If a process did get stuck, it would be automatically re-added to the processing queue.
The third build of the app was focussed on UX changes, and included adding custom hashtags, Instagram login and an improved sharing flow. This was the build that we launched with.
Launch, growth and closure
We launched the app in April 2019 and gradually began gaining users, with a ~1% rate of users upgrading to premium. This growth continued organically without any paid promotion over the next 3 months, peaking at just over 1000 users. Despite this modest growth, we were still unable to cover server costs and realised we would need to pivot into something more profitable.
While we explored many promising avenues, ultimately we decided to close the project. We realised that to grow in the direction we wanted, we'd need to begin integrating the share workflow much more closely with social networks at scale. However, most social networks (particularly Facebook and Instagram) have closed API's which they do not accept applications for. This meant that to pivot successfully we would have needed to pivot further away from social media.
We closed the project in July of 2019. Despite being unsuccessful, we agreed that what we'd learnt was enough value for it not to be considered a loss.