Bilingual books for language learning.
After two and a half years of using Duolingo, I still felt far from fluent in Spanish and decided to look for new ways to incorporate more practice into my daily routine. Reading Spanish books seemed like a great idea, but constantly looking up unfamiliar words made it difficult and time-consuming. That’s when I discovered parallel text books—Spanish text paired with English translations. Unfortunately, there were only a few options on the market, and those books were still too difficult to enjoy.
That's when I had an idea: I could use AI to create simplified versions of books and present them in a parallel text format. Excited by the thought, I wanted to see if others would be interested in the idea too.
To gauge interest, an engaging landing page was essential to explain the concept and collect sign-ups.
The brand name "Simpli" and domain readsimpli.com were chosen to convey the ease of learning a language through reading simplified books.
The brand was designed to be simple, smart, and playful. A clean, geometric logo was chosen, complemented by the modern Inter font. To introduce a touch of playfulness, a curved "l" ligature was used, adding a bit of flair to the uniformity of the other characters.
Framer was chosen for designing and building the landing page due to its user-friendly interface and wide range of animated components.
For the hero, animated book covers were prominently displayed to convey the site’s purpose and add visual interest, with popular titles selected to engage a broad audience.
Following this, an example of a translated page in multiple languages illustrated the concept of parallel text.
Different reading formats were also highlighted, informed by data showing that 65% of readers preferred paperbacks, while 35% chose eBooks.
Testimonials showcased the various ways language learners could benefit from parallel text books.
And finally, a high-contrast call-to-action was placed at the bottom of the page, making it easy for users that reached the end to sign up.
To extend the prelaunch campaign's reach, Viral Loops was utilized to create a viral incentive system. The strategy offered a free eBook to users upon signing up and an additional eBook for each successful referral they made. This not only encouraged direct participation but also fostered organic word-of-mouth growth as users shared the campaign with their network to claim more rewards.
To get the ball rolling, Meta Ads were used to drive initial traffic. This also provided an opportunity to test different messaging to see which resonated most.
With a modest $150 budget, over 300 email addresses we gathered from interested customers. This was enough positive, early feedback to justify investing the time and effort into translating and formatting the books.
Interestingly, the ad "Bilingual Books for Language Learning," which didn’t mention simplified editions at all, garnered the most signups, leading to the decision to launch with the original, unsimplified translations.
The plan was to launch with four public domain titles: The Great Gatsby, Frankenstein, Alice’s Adventures in Wonderland, and The Metamorphosis—all popular books with relatively low word counts.
Texts were sourced from Project Gutenberg, an online library of free eBooks. ChatGPT was used to break the text into small, meaningful clauses, making it easier for readers to follow the translations when compared to translating complete sentences.
Each clause was saved in a row in Google Sheets, where the =translation()
function generated translations for each language. Once the translations were completed, the text was formatted into HTML using formulas.
To speed up the formatting process, custom GPTs were created to generate files for each book, covering elements such as the cover, title, chapters, and copyright pages across eight languages.
You are given an Excel file with multiple sheets. Some represent chapters, and others represent languages. The task is to generate a ZIP folder containing folders for each language, with XHTML files generated for each chapter. Follow these steps:
### Task Breakdown:
1. **Identify Language Sheets**:
- Process only sheets named after languages (e.g., Spanish, French), ignore sheets like 'Chapters'.
2. **Create a Folder for Each Language**:
- For each language sheet, create a folder named after the language (e.g., `Spanish`, `French`).
3. **Generate XHTML Files for Each Chapter**:
- For each column:
- Use **Row 1** for the file name (e.g., `chapter-001` becomes `chapter-001.xhtml`).
- Use **Row 2** for the **target chapter title**.
- Use **Row 3** for the **translation chapter title**.
- Use **Row 4 onward** for the **chapter content**.
4. **XHTML Template**:
Use the following XHTML template to generate each file:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xml:lang="en" xmlns:epub="http://www.idpf.org/2007/ops" xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>{Target_Chapter_Title} - {Translation_Chapter_Title}</title>
<link rel="stylesheet"
type="text/css"
href="css/style.css" />
<link rel="stylesheet"
type="text/css"
href="css/media.css" />
</head>
<body>
<div class="element element-bodymatter element-container-single element-type-chapter element-with-heading">
<div class="heading heading-container-single heading-size-full heading-format-full heading-alignment-flexible heading-without-image">
<div class="heading-contents">
<div class="title-subtitle-block title-block-without-element-number">
<div class="element-number-block">
</div>
<div class="title-block">
<h1 class="element-title case-upper">{Target_Chapter_Title}</h1>
</div>
<h2 class="element-subtitle case-upper translation">{Translation_Chapter_Title}</h2>
</div>
</div>
</div>
<div class="text">
{Contents}
</div>
</div>
</body>
</html>
```
5. **Save XHTML Files**:
- Each XHTML file should be saved in the respective language folder inside the ZIP.
6. **Structure**:
The final ZIP should have the following structure:
```
- ZIP file:
- Spanish/
- chapter-001.xhtml
- chapter-002.xhtml
- French/
- chapter-001.xhtml
- chapter-002.xhtml
...
```
The files were compiled into EPUB format, and Calibre was used to convert them into PDFs for paperback editions.
For the book covers, AI-generated images were used for the front, spine, and back of the book. These images were then upscaled and refined in Photoshop using generative fill and brush tools to achieve a flat, illustrated style. Photoshop variables and scripts were utilized to efficiently generate covers for all eight languages.
To avoid Amazon's 40% commission on book sales and retain customer data, the books were to be sold directly from the website using Shopify. Shopify was integrated with the Framer landing page using Cloudflare Workers, which routed traffic between the custom landing page and Shopify’s checkout process.
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
let url = new URL(request.url)
// Only apply this logic if the path is the root "/" or "/shop"
if (url.pathname === '/' || url.pathname === '/shop') {
url.hostname = 'simpli.framer.website'
// Preserve the query string and pass the modified URL
return fetch(url.toString(), {
method: request.method,
headers: request.headers,
body: request.method === 'POST' ? request.body : null, // Preserve the body if it's a POST request
redirect: 'follow' // Handle redirects if necessary
})
}
return fetch(request)
}
This integration enabled users to learn about Simpli on the custom Framer landing page while adding books to their cart and completing transactions through Shopify.
To deliver the eBooks, BIG Digital Downloads was integrated with Shopify. This automated the the email delivery process with links to download the eBook when a customer made a purchase on the website.
Lulu, an on-demand printing service for self-published authors, was used to deliver paperbacks. When a paperback order was placed on Shopify, it was automatically routed to Lulu, where the book was printed and shipped directly to the customer. Customers received automated emails with tracking, shipping updates, and delivery notifications.
To boost website traffic and drive sales, a range of marketing channels were explored, including paid ads and influencer partnerships. The primary objective was to identify a channel with the potential for consistent scalability to generate a sustainable stream of sales without rapidly escalating costs.
A key metric guiding this process was Cost Per Acquisition (CPA), which needed to stay below the Lifetime Value (LTV) of a customer. Achieving this balance would ensure that each new customer brought in more revenue over time than it cost to acquire them.
Ads on Meta got decent engagement and plenty of traffic, but the clicks didn’t translate into meaningful conversions. Despite tweaking the audience, ad copy, and creatives, the CPA remained stubbornly high.
Reddit Ads offered access to niche communities and seemed like a great platform to engage passionate users. You can target specific subreddits, getting more personalized exposure. Even though the ads received decent clicks, the CPA was still too high, making it an unsustainable option.
Google Ads had promise because of the high-intent traffic from search campaigns. However, competing in a crowded market meant paying premium prices for keywords. While the search traffic was highly relevant, even this wasn’t enough to bring down the CPA.
When paid advertising fell short, influencer marketing was explored as an alternative to drive sales. 10 Instagram influencers in the language-learning niche were selected, each with an engaged audience that aligned with our target customer.
To keep costs manageable and incentivize results, a revenue-sharing model was set up: for every follower that used an influencer's unique promo code to make a purchase, the influencer earned a $2 commission.
While these campaigns succeeded in generating some profit, the results were modest. Between negotiating terms, tracking results, and ensuring accurate payouts, the administrative overhead proved to be more time-intensive than anticipated. Ultimately, the revenue gained didn’t fully offset the time, coordination, and resources required to manage the partnerships.
Due to the inherent challenges in direct-to-consumer sales, the books were eventually listed on Amazon, which holds a commanding 50% share of the paperback market and an impressive 80% of the eBook market. This shift allowed the books to reach a much larger and more diverse audience. To further increase visibility among Amazon's vast catalog, ads were run, strategically boosting the books’ rankings in search results and helping to capture the interest of potential readers. Although sales remained modest, they were profitable.
While the outcome may not have reached initial hopes, receiving an email notification for each new sale still brings a unique sense of accomplishment. Knowing that someone, somewhere, chose to purchase a book you poured countless hours of hard work, creativity, and passion into is incredibly gratifying. There’s a profound satisfaction in realizing that your work is out in the world bringing joy to a reader.
Looking back, I’ve been reflecting on how I could have failed faster.
Although the prelaunch campaign collected over 300 email signups, only 4 came through referrals. This might have been an early red flag that, while the product sparked some interest, it wasn’t compelling enough for people to share with others—possibly indicating it wasn’t worth the time and effort to fully develop.
In hindsight, a better approach would of been to try selling the books before producing them and then refunding the money. This would of allowed for more accurate insights into customer acquisition costs before committing significant resources to the project.
That said, the experience was valuable. I learned to use Framer, applied AI to tackle complex tasks, and discovered new strategies for validating product-market fit early. These skills will be indispensable for future projects.