longa.dev

building AI startups in public

I Built 5 Startups in 2 Years

It was the summer of 2024. I just published my thesis chapters in NeurIPS and BMVC, having submitted my Oxford PhD thesis on deep learning a few months ago. The last few years of research have been very exhausting and I needed a change. The AI boom was at its beginning and the industries weren’t keeping up pace with the new AI breakthroughs - GPT finally became good enough at following instructions and generating coherent text, image generation started to move beyond simple drawings, and OpenAI was about to release its first speech-to-speech model. I thought there were too many opportunities to pass up on, and I decided to build my first AI startup.

Fluentary.com - Reading, Writing, Listening and Speaking Exercises in 53 Languages

I liked learning languages, and I thought AI was just becoming good enough to automate the creation of exercises similar to those in language textbooks. The idea was to use GPT to generate speaking passages with questions about them, correct essays written by students, generate listening exercises with text-to-speech (TTS), and mark speaking exercises with speech-to-text (STT).

Up until this time I’ve only done relatively simple coding projects (Python, JavaScript, PHP), but over the next few months I used ChatGPT to learn React, Node.js, MongoDB and Express, bought a domain, and deployed an MVP of the app on Heroku. I modeled the exercises on the IELTS exam, mimicking most of their reading, writing, listening and speaking exercise types. For example, a reading passage had sentences with some gaps and the task was to pick a word that fits. A writing exercise had a writing prompt for the student, and the LLM corrected their mistakes inline, crossing out incorrect phrases and replacing them with correct ones. Listening exercises had AI-generated sentences for each speaker which were converted to audio via TTS, and the student had to answer questions about the conversation. Finally, speaking exercises had a prompt or a generated image to talk about, and the user’s recorded response was converted via STT (Whisper) to text that was graded by the LLM. I then made a script to translate the website into all 53 languages GPT was available in, added Stripe for payments, and the MVP was complete.

I then gave the app to a few friends and family members to test, and made some improvements based on that. The talking about an image exercise was especially popular, correcting incorrect structures and suggesting phrases that could be used. However, with all the testing I realised that the exercise quality varied widely across all the 30+ exercise types. To fix this, I would have to take each exercise one-by-one, and iterate on the prompts and perhaps build an evaluation harness for each, which would take ages. I also realised the focus of the app was too wide, and there probably wasn’t any particular segment of customers that would be motivated enough to pay. Despite this, building Fluentary was a good exercise - I learned to build a startup from scratch, with text and image generation, STT, TTS, and billing. I concluded the next startup has to serve a niche.

Fluentious.com - Real-Time IELTS Speaking Simulator

After realising my previous startup’s focus was too general, I now wanted to make something serving a specific niche. Given what I’ve already built, I decided I could just narrow it down to simulating the speaking section of the IELTS exam - a specific, actual need people have, for a high-stakes exam. Around this time, OpenAI just released the first real-time speech-to-speech model, which I got really excited about, since I could use it to model the real-time interactions that are part of the interview and discussion parts of the IELTS speaking test.

I copied my React + Node + MongoDB + OpenAI + Stripe codebase from Fluentary, and I started building an MVP for the speaking simulator. This turned out to be harder than I thought, because OpenAI’s docs recommended method was to wire up their speech-to-speech model directly from the browser to their server via WebRTC. The alternative was to use the model via WebSockets which wasn’t documented very well. However, as I needed the speech to pass through my backend for scoring, I spent some time building one WebSocket stream between the browser and my server, and another one between my server and OpenAI’s server. The main issues to solve were with mic/audio support across browsers, tuning the interruptions in the model’s Voice Activity Detection, and mainly lots of passes refining the prompts so that the model matches the exam tasks exactly without steering off. I then added scoring the interactions according to IELTS criteria (fluency, vocabulary, grammar, pronunciation) with feedback on how to improve, together with an example high-scoring generated response, and the MVP was finished.

After testing the app with friends and family, I now wanted to distribute it to people who I didn’t know. So, I went to Reddit and posted about it to the IELTS community. This is something that I’ve never done before, so it was scary, but the response was mostly nothing with a few people commenting that it’s been something they’ve been looking forward to finding. I got a few signups out of this, but nobody gave any feedback and nobody paid for a subscription. I emailed a few people, but probably not enough to get useful information. At the time I concluded the experiment failed, whereas now I think I should have posted it to more groups, emailed more people who signed up for feedback, and measured how they use the app. However, now there already seem to be plenty AI-powered IELTS speaking simulators, so I decided to park the project and move onto the next one which seemed to be more promising.

Propia.mx - Real Estate WhatsApp Group Scraper

An acquaintance working in real estate told me about a problem they had - there were many WhatsApp groups where agents wrote messages to sell a property or buy a property for their client. There were hundreds if not thousands of these messages every day with details of the properties, and agents spent hours sifting through them every day. Can AI be used to organise this information?

I built an MVP that that connected to the WhatsApp group and scraped the messages, passing each one through an LLM to extract whether the poster was buying or selling, and the details of the property such as the number of bedrooms, bathrooms and parking spots. During the year that I spent on this project, I built a website in React + Node.js and Android and iOS apps in React Native, that automatically matched an agent selling a property with another agent looking for a property if the property details coincided. The property locations extracted from messages were converted into coordinates using geolocation API, and the most popular areas in which agents searched properties in were converted to polygons using a tool I built. Then the matching would correspond to finding all points lying inside a polygon, or all polygons overlapping a point, in addition to the other requirements such as the number of bedrooms matching.

This was a very technically interesting project, and we managed to get a few thousand dollars per month in revenue selling to agents, even though total profit was negative after paying for services. Due to a souring relationship with the acquaintance, I decided to leave the project and he copied the apps and transferred the users to himself. I was left with zero income, but with the freedom to be my own boss and with many technical and customer skills I acquired. I realised people would pay for apps that I build, but that my bottleneck was sales. I concluded I want to build solo, and that I need to become my own salesman.

Subastas24.com - Spanish Public Auctions Document Analyser

When I lived in Spain, my landlord told me he bought my apartment in a government auction for much cheaper than the market price. I never heard of public property auctions before but it got me intrigued. A few years later I was browsing through the government auctions portal and noticed their interface is horrible - information spread out across multiple tabs, no location on a map, and most importantly, legal documents attached to each auction. The documents were legal proceedings and notarial documents containing the charges and details of the ownership of the properties, that can be used to determine whether there was a mortgage that would subsist an auction or whether there was someone living there illegally.

I started with my standard MERN+Stripe stack, and built a pipeline that periodically scrapes the Spanish government’s auction portal (BOE) and social security portal, and extracts the auction fields to my database. It then downloads the attached PDFs, extracts their contents, classifies each document into judicial or notarial using an LLM, and based on the document type it extracts different fields. Finally, I used geocoding API to give me the coordinates of each property, and made a website showing a listing of all auctions on a map, with their details and summaries of the legal documents, all of which can be viewed with a subscription.

This time, I decided to run Google Ads, and created a 20€/day campaign that I ran over 2 months for a total of around 600€. This was the first time I ran ads, and it was very revealing. Firstly, I started tracking the whole funnel from landing page to payment, and realised that many people were dropping off at the login screen - I changed it from an email+password login to an email magic link login, which improved drop-off substantially. The funnel stats also taught me the principles of good UX - to make the flow as simple as possible for the users, ideally with one CTA button on each screen, leading them to the actions I wanted - to create email alerts, and to subscribe. I ended up getting a few hundred free signups, of which two people paid, one for a 10€ monthly subscription and one for a 90€ yearly subscription. This was disappointing, but it was also the first money a stranger paid me for my product. I also learned that maybe I targeted the ads to the wrong group - instead of any casual person browsing for properties, perhaps I should be targeting auction firms. Or, instead of ads maybe I should do B2B sales directly. However, after building it I realised my app already has a lot of existing competition that hasn’t surfaced before, with more functions than what I had.

Examisto.com - CELPIP Speaking Simulator for Spanish Speakers

With this startup I decided to research my competition thoroughly before building anything. I had an idea to build an AI Speaking simulator for an exam, but there were already many simulators for the most popular exams such as IELTS. After asking AI to do a competitive analysis, it surfaced that the CELPIP exam was a better fit, since it had high urgency being used for admission to Canada. To narrow it down even more, I decided to only focus on the speaking part of the exam, and made it specifically for Spanish speakers, focusing on their specific errors. According to AI, there wasn’t any Spanish-focused CELPIP speaking simulator yet, so it seemed like a good niche.

This time I decided to upgrade my MERN stack to the latest technology, and I chose the popular Vercel + Next.js + Postgres + Supabase stack. I used Claude Code to help me build the app, walking me through the setup for all the technologies. I mirrored the 8 speaking tasks of the CELPIP exam, with in-browser voice recording, and using OpenAI for speech-to-text transcription, Azure for pronunciation assessment, Claude for grading and feedback, and Stripe for payments.

I was about to post this to a Reddit community for CELPIP, but realised the only relevant Reddit community has my competitor as the admin, and so I held off. My plan this time is to directly contact immigration agencies and language schools in Latin American and Canada for shared deals, in an attempt to try B2B sales in a market where ads and SEO would be expensive and a constant recurring cost. I’ll keep you updated on the experiment.

Conclusion

Having built 5 startups in the last 2 years, here is what I learned:

  1. Don’t build products for everyone - focus on a niche where the problem is painful enough for people to pay.
  2. Research your competition thoroughly before building something that already exists and is better.
  3. Simplify your UX, making it obvious what you want users to do at each step - people are lazy.
  4. Get as much feedback as possible - from testers, by posting to groups, emailing your users, or talking to them directly.
  5. Think about your best distribution channel - online ads, B2B sales, YouTubers, etc - people won’t come on their own.

Thanks for reading! Next up I want to learn sales and will be trying to sell licenses to Examisto to immigration agencies and language schools. Stay tuned!