Look! It's me! ๐ ๐ผ๏ธ ๐
Building main character illustrations, an admin tool, and try again
Introducingโฆ ๐ฅโฆ Main character illustrations!
Anyone using Wanderly can now choose how the child appears in each story illustration. Iโve created over 60 avatars for users to choose from, and each avatar has a suite of different expressions to make the story come to life. I think they look really pretty. ๐คฉ
I prioritized this feature to to increase the appeal of buying physical books and to reduce steps to purchase a book.ย
Until now, users had to take a leap of faith to imagine what their published book would look like. Books feature children in the illustrations, but the app only showed non-named-character images, like books, animals, and objects, and I would add the childrenโs illustrations as part of the offline publishing process. And before buying a book, a user would have to choose an avatar via an email exchange with me. Unsurprisingly, I lost a few sales during this follow-up phase.
However, to add main character images in the โWanderly wayโ andย keep image quality and safety a top priority, I had to make some big investments.
The first big investment was to build an admin tool. Initially, I built the appโs user interface that allowed users to pick an avatar, but as soon as I began to populate the UI with real images, I realized that my prior method for uploading images was brittle (basically run a script and ๐ค, then verify). After launching main character illustrations, I knew I would frequently change the images as I added and updated avatars. I needed a way to make these changes quickly without breaking the whole system.ย
I wasn't a stranger to admin tools. In myย Grasshopperย days, we built one to deploy and update coding lessons quickly. At first, I wasnโt sure if this investment was worth it for Wanderly: building a whole tool to support a new feature felt like overkill at first. But over the last year, I have felt the friction of updating assets and it has prevented me from quickly responding to user feedback and behavior, and I knew I would need an admin tool to build some features I want to release later this year. So, I bit the bullet. Overall, it took me 3 weeks to build (it would have been less, but I had to wrestle with some build issues), and the result feels worth it.ย I can deploy new assets and avatars with confidence within minutes. The admin tool also makes it possible for friends and family to help build out Wanderlyโs image library, which theyโve been doing, and itโs a huge help. ๐
The other big investment was building out the library of avatars. Deciding to build out a library of diverse avatars was a daunting task, and at one point, I seriously considered pivoting away entirely from โrealisticโ representations of children. My process and thinking progressed like this:
My overall goal: I want kids to see themselves as the main character.
I knew I didnโt want to deal with people uploading images of their children (after years at Google, I knew what a privacy hazard that would be).ย
I asked Alanna, my 6-year-old daughter, to describe herself in a Wanderly story, and she described โSapphire,โ a girl with rainbow hair and a lot of very specific fashion guidance.
I then asked friends and family to have their children pick themselves from a grid of possible candidates and got a mix of responses:
Some aimed for realistic representation.
Some picked a realistic avatar with some fictional โflair,โ e.g., rainbow hair was popular with several young girls.
Some non-human avatars.ย
Surprisingly, some kids had more personal resonance with features like hair (e.g. curls or bangs) than eye color or skin tone.ย
I then started to build out a representative slate of characters. I realized that:
Doing every possible combination of characteristics was too many options.
Midjourney struggles with darker skin tones and less common combinations of features, as do most other AI image generators.
I then started to revisit only using non-human avatars. This is pretty commonplace with childrenโs mobile apps. It seemed so simplifying and would have easily side-stepped representation issues.
I then realized that if my main go-to-market strategy was book sales, going with exclusively non-human avatars would make it much harder to sell books. There are many different custom book companies out there that offer personalized characters, and it would be difficult to differentiate. My marketing would also end up looking more abstract and be less likely to connect with future customers.
This turned me back towards maximizing coverage with a fixed set of representative avatars (both human and non-human) and then an option to request an avatar. Itโs been hard to bend Midjourney to the level of diversity and quality I want, but not impossible. It just takes time, and Iโve found the more avatars I make, the more I can leverage them to create new avatars.
So far, the investment has been going pretty well. ~96% of the users who have browsed avatars found one to choose from, and ~4% requested a missing avatar. A good mix of realistic and non-human avatars has been selected. Since I launched, I have also gotten a few more sales, both books and subscriptions. It's still small potatoes, but it feels like a step in the right direction from both a product, revenue, and ops perspective. Anecdotally, I've made several books as Christmas gifts for kids for my customers; knowing I've made something good enough that people want to give to children for Christmas is a wonderful feeling. ๐ ๐ฅฐ
I also took the time to build out the โTry Againโ functionality to recover a story when requests for a story page experienced an error. I launched on the app stores in July, thinking I could cut this corner, partially because OpenAI and Anthropic had been so stable. But in early August, Anthropic had an outage during bedtime, and I heard about it immediately from some high-priority users. I decided to ship โTry Againโ quickly to keep my most loyal users happy.
Doing this required completely ripping out the guts of my app page fetching logic. I tried to future-proof it for my roadmap, but it was gnarly, and it's the kind of thing I needed to get right (otherwise, the bugs are really confusing)!
Since outages from my AI partners are infrequent, it was hard to know if my investment was too prudent. However, last week, as Anthropic updated to the new version of Claude 3.5 Sonnet, there were several outages, and at one point, I got to see my investment paying off live. Bedtime was saved!
From here, Black Friday looms on the horizon, and I will build on my gift card experiment from last year and try to learn more about Wanderly + gift giving this year, especially now that Iโm selling personalized books. This means improving my checkout flow and trying a bunch of new marketing angles. Onwards and upwards!
P.S. If you think thereโs a marketing angle or an advertising channel that you think I should try this coming holiday season, please let me know! Iโm all ears and interested in experimenting with new things. ๐