BookTeller: Subscription-based Library of Animated Children's Books
BookTeller.com is a subscription-based online library for animated and narrated children's books, available in both English and Chinese. Currently, there are over 200 books available for subscribers and more are being added. Its goals are to help parents and educators teach children how to read and to get them reading more often by giving them books that are both engaging and fun.
Besides being an online library, it is also a platform for authors and publishers who wish to transform their work into animated books and to monetize them. For that, we have a revenue sharing program and a team of award-winning animators to help out with the animation.
The consumer-facing website is used for, among other things, showcasing what books are in the library and to handle registrations/payments. The books are accessed via a client reader based on Adobe's AIR platform, which must be downloaded and installed.
The following is our experience in building out the website using Drupal. I hope it is useful as another example of what's possible.
Requirements & Challenges
Since BookTeller is a subscription-based online library, it has three major requirements: a method to store and display book data, a payment system, and a way for subscribers to access the books.
The interface for the people doing the data entry must be easy to use so that they can do their job quickly and efficiently. The payment system, at the minimum, needs to be able to keep track of registered users and their subscription status. And as for why we have client reader instead of a browser-based one, the reasons are simple. The Adobe AIR reader allows the books to be downloaded and read offline. This is ideal for situations when there are no internet connectivity, either by choice or not. It also allows the content creators to control how their work is accessed. A browser-based reader, while nice to have, does not meet all those requirements.
As with any project, time and money were things we could always have more of.
Why Choose Drupal?
To hit the ground running, we needed a framework in a LAMP (linux, apache, mysql, PHP) environment with as much of the requirements built-in as possible. We compared Drupal, Joomla, and a couple other frameworks, but finally decided on Drupal 6 for a several reasons.
They are:
- The flexible and modular based structure allows us to use what's already out there and just build out the pieces that are missing.
- The extensible content type oriented system abstracts everything into a node, allowing easy organization and display of data.
- The theming system allows us to quickly build out the look and feel of the site.
- SEO friendly. There are numerous modules to help with better ranking in search engines, such as Clean Urls, XML Sitemap, AddToAny, and Tell A Friend. Why spend money on marketing to get the same results?
- A very good role-based access system allows us to control who sees what on the site.
- News aggregation tools already included.
- Large and vibrant community to answer questions should any arise.
Design
Since BookTeller is a place for children's books, it has to appeal, first and foremost, to children. We decided on bright, pastel colors and a tree theme for the look and feel of the site. Cute animal children were added to the subpages to make them more welcoming -- like there's a living world within the website.
We used Raincity Studios' basic theme as the starting point because its simple layout is perfect for all the modifications we would eventually make to it.
The site has three main page types: homepage, book index, and book details.
The purpose of the homepage is used to quickly show what the site is about so a welcome message is included in the header next to the logo and flash demos of various animated children's books are displayed in the middle of homepage. Keeping with the goal of designing for children, the demos play automatically with sound to attract their attention.
The book index is equivalent to the taxonomy page. The site has books in English and Chinese so we have a separate index for those. Within the two index pages, books can be filtered by age group, subject, popularity, date added, or title. The results can be laid out in grid or list format.
The book details page is just a heavily modified node. It contains data like a book's author(s), publisher, description, images, etc. All this is made possible with a custom module we called Paid Picturebook.
Custom Modules
While there were tons of modules out there, we still had to make a couple of customs ones because we couldn't find any that solve our particular needs. I'll explain the important ones and just list the rest.
We needed a way to create book titles and enter in data about the books such as author(s), etc and as well as any images like cover shots. We made a module called Paid Picturebook to handle that. As stated above, it's just a node with lots of custom fields added.
While Ubercart is available, we ultimately rolled our own payment system based on Paypal's API because we wanted simplicity and Ubercart was a bit too complicated. We only need the payment system to handle three types of transactions: payments, discounts, and refunds. We made the Bookteller Payment Packages, Bookteller Coupon system, and Saving code modules to handle those respective transactions.
Since BookTeller is also a platform for authors and publishers, we need a way to track whether or not their books are read by subscribers and, from that, figure out the revenue split based on a pre-defined formula. This is where the Publisher Manager module comes in.
Xml Cache is used to cache all our picture book meta data into a xml file so our client reader, built upon Adobe's AIR platform, can update its local copy periodically.
The Child Accounts module allows different accounts to be tied to one main account, like when parents make separate accounts for each of their children or teachers make separate accounts for each of their students.
To exchange data between the website and the client reader, we used a module called Serve Reader.
Here are all the custom modules we created and used:
- Bookteller Coupon system
- BookTeller Free Trial
- Bookteller Payment Packages
- Bookteller Stats
- Change Mail Header
- Child Accounts
- Dedicated Password Changing
- Extend User info
- Paid Picture Book
- Publisher Manager
- Reader's Library
- Savings code
- Serve Reader
- Xml Cache
Third-Party Modules
Although the core features of the website were put together by custom modules, we did use a bunch of existing modules from the Drupal community to do miscellaneous things. Here they are in no specific order:
- Location
- AddToAny (Book details page)
- Advanced Forum (For later)
- Backup and Migrate
- Disable Password Strength Check
- Frequently Asked Questions (Customer service page)
- LoginToboggan
- Meta tags
- Profile Location
- Tell a friend (Homepage)
- CAPTCHA
- Wysiwyg
- Voting API
- Fivestar
- Workflow
- XML sitemap
Future
After building out the web framework and working out the kinks in the client reader software, the main focus for the near future is to build a community around kids, parents, educators, and publishers. Some of the social networking modules we plan to use are Advance Forum, User Relationships, PrivateMsg, Messaging, Notifications, Twitter, and User Points. Some of them have already been installed on the site, but not enabled yet.
In the immediate future, we're looking into adding incremental improvements - a company blog to announce new features, new books, and communicate with our users; subtle redesigns to bring out more content from the site; and an affiliate program to allow others to sell our products. Because we didn't use Ubercart for our payment system, we'll probably have to skip out on Ubercart Affiliate, and use a third-party affiliate program that works with PayPal's API.
Where we go from there will depend a lot on how users use the product and what kind of feedback we get from them.
Drupal version: Drupal 6.x