-
-
Lexora: 1024 x 1024 px full HD app icon.
-
Lexora: Homepage.
-
Lexora: User Typing Crossword Topic i.e "Coding Principles"
-
Lexora: AI Crossword Generating Screen.
-
Lexora: AI Crossword being solved, in endless mode.
-
Lexora: Premium Screen.
-
Lexora: Premium Offerings.
-
Lexora: Coin Shop Items.
-
Lexora: Coins Purchase via RevenueCat SDK.
-
Lexora: Coin Purchase Payment Modal powered by RevenueCat.
-
Lexora: Coin Purchase Cancelled Alert.
-
Lexora: Global Leaderboard displaying ranked users.
-
Lexora: Live Global Challenge for all Lexora users.
Inspiration
Every word game I loved eventually ran out of content. You finish the pack, and then you wait for the developers to ship more. That always felt backwards - the puzzles are just words and rules, and we now have models that are very good at words and rules. So the idea for Lexora was simple and a little stubborn: what if the puzzle never ran out? What if you could type anything - your favourite show, your city, the subject you studied - and get a real, solvable puzzle built around it, on the spot?
What it does
Lexora turns any topic into a playable word game in seconds. You type a topic, pick a mode, and the AI generates the puzzle live. There are eight modes - AI Crossword, Word Connect, Word Search, Quiz, Codeword, Rebus, Language Match, and Jumble - plus an Endless mode for crosswords that genuinely never stops. It is gamified the way good arcade games are: coins, XP and levels, streaks, a daily global challenge, a spin-the-wheel reward, achievements and leaderboards. It works offline with a bundled library, speaks ten languages, and lets you play as a guest before ever creating an account, so nothing stands between a new player and their first puzzle.
How I built it
Lexora is a React Native app built with Expo and TypeScript, shipped to Google Play through EAS. Puzzle generation runs on Supabase Edge Functions (Deno) that call Anthropic's Claude, with strict schema validation and retries so a malformed puzzle never reaches a player. Auth is Clerk; data and the economy live in Supabase Postgres behind row-level security. The economy is deliberately server-authoritative - the client never gets to name its own reward - which turned out to matter a lot once real money entered the picture. Also, as part of our online safety and creating a safe environment for our players, we have added gates around the AI puzzle generation so that some topics won't get AI-generated puzzles, like topics around sexual assault, rape, pornography, child pornography, and violence-related topics. This is well documented in our privacy policy.
RevenueCat - the part that made monetization sane
Lexora monetizes three ways at once, and RevenueCat is what makes running all three at the same time actually manageable:
- Subscriptions - a Gold plan in weekly, monthly, and yearly terms, plus a yearly Family plan. Gold removes ads, unlocks unlimited AI generations and the smartest model, and opens exclusive themes.
- A one-time Lifetime unlock - a non-consumable purchase that grants Gold forever, for players who dislike subscriptions.
- Consumable coin packs - seven tiers from $0.99 to $27.99 that feed hints, extra generations, and streak freezes.
Everything resolves to a single RevenueCat "premium" entitlement, so the rest of the app only ever asks one question - is this player premium? - regardless of whether they subscribed, bought Lifetime, or are mid-trial. RevenueCat's offerings drive live, localized pricing; its webhooks (alongside Google's Real-Time Developer Notifications) reach my verify-purchase Edge Function, which is the only place an entitlement is actually granted. That let me keep the economy server-authoritative without hand-writing receipt validation for Google, and it means a refund or a lapse is reflected correctly without me babysitting it.
Challenges I ran into
The hardest problems were not the AI - they were the seams. Making purchases trustworthy meant never trusting the client, which pushed every grant server-side and made RevenueCat's webhook the source of truth. Free-trial eligibility had to be read from RevenueCat's customer info so returning users are not offered a trial twice. And shipping a release build surfaced things debug builds hide - a fragmented-MP4 quirk here, a native/JS mismatch there. Building in public during Shipaton actually helped: posting the rough edges kept me honest about fixing them. Another challenge I faced was my test users telling me the puzzles were hard, so I ventured into explaining to them how the generations actually worked. I also shipped 7 difficulty modes so that the user can select which one they want; over time, they got to enjoy the games. Some users complained of not knowing how to do the generations, so I implemented a react native reanimated animation as part of the onboarding screen so that users can be guided appropriately.
Accomplishments I am proud of
An AI word game that ships eight modes, ten languages, and full offline play, with a real three-legged monetization model - subscriptions, a lifetime unlock, and consumables - all running through one clean entitlement. And I used my own analytics powered by PostHog to find that most new players never finished onboarding, then shipped an interactive "type a topic, generate, play" tutorial to fix it. That loop - measure, ship, measure - is the thing I am most proud of.
What I learned
That monetization is a product surface, not a bolt-on. Where you ask, when you ask, and how honest the paywall is matter as much as the price. RevenueCat took the plumbing off my plate so I could spend that attention on the parts players actually feel. Also, I learned that keeping your users in the loop is the most important thing to have as an indie developer. My users suggested that even though the games were fun, they would be more thrilled to compete with other users worldwide, so I researched and built a global challenge in Lexora that refreshes daily and displays all 6 AI-generated game modes; users participate and get ranked on the global leaderboard. Although I am still struggling to get a huge audience to play, I am grateful that the one I have has been a core part of helping me ship features people want, not what I think should be there.
What is next
More modes, a proper web-to-app funnel, and turning the daily challenge into a reason to come back every single day.
Built With
- admob
- anthropic-claude
- clerk
- deno
- eas
- edge-functions
- expo-router
- expo.io
- google-play-billing
- node.js
- postgresql
- posthog
- react-native
- react-native-reanimated
- revenuecat
- sentry
- supabase
- typescript
- zustand
Log in or sign up for Devpost to join the conversation.