Testing Credentials /Use Coupon Code xprize100 for 100 percent off purchases. 50 of these coupons are available and can be used until Sept. 17. Let me know if more are needed.
App name was changed to Bonehead to try and be more recognizable with self-deprecating humor.
Inspiration
Every language app I'd ever tried demanded the same thing: sit down, give it your full attention, do a session. I don't have that kind of time to give reliably, and I don't think most people do either. What I do have is a commute, a workout, chores — dead time that's already happening whether I use it or not.
Bone-conduction headsets were the key. Unlike regular headphones, they transmit sound through your cheekbones instead of blocking your ear canal, so you hear your actual environment normally while also receiving audio. That's not a gimmick — it's the entire premise. If training can run underneath a life you're already living instead of requiring you to carve out separate time for it, the real barrier to consistency (not motivation, just literal available time) disappears.
The second track came from the same insight applied somewhere else. CBT-style behavioral training — road rage, workplace stress, social anxiety — usually asks you to actively practice a technique in the moment you need it least. What if the pattern (Trigger → Pause → Reframe → Action) could be pre-loaded through the same kind of ambient repetition, so it's already familiar before you ever need it?
What it does
BONEHEAD is a mobile-web audio app built around one shared playback engine, with two content tracks:
- Language Learning — spaced-repetition vocabulary and phrase drilling across six languages, delivered as background audio rather than a dedicated study session.
- Self-Improvement — ten CBT-inspired behavioral packs, structured around Trigger → Pause → Reframe → Action, covering everyday stressors like road rage and social anxiety.
Both tracks share a free tier, with paid packs and an All-Access subscription for the rest. There's also an AI Lab, powered by Gemini 2.5 Flash, that generates 20 custom spaced-repetition drill pairs from a free-text prompt in real time — so a user can ask for training tailored to something specific to them, not just pick from a static list.
How we built it
This was built entirely through AI-assisted development — I have no coding background. Replit's Agent did the implementation work; Claude and Gemini were used throughout for architecture decisions, debugging, and content generation. Every feature in this app exists because of that workflow, not despite it.
Structurally, the app is deliberately modular: a shared Playback Engine, separate Language and Self-Improvement libraries, an AI Lab, a Payment/Entitlements system, and an Auth system, each communicating only through defined interfaces. That constraint came from a real, costly bug early on (below) — and holding to it since is what made it possible to keep shipping fixes quickly without one change quietly breaking something unrelated.
Payments run on a standard entitlements-table pattern: a single product catalog, a single Postgres-backed entitlements store, and a Stripe webhook as the only writer to that store — the same architecture the App Store and Google Play use, chosen specifically because it's well-understood and hard to accidentally misuse. Identity is passwordless: a magic-link email flow lets a purchase made on one device follow a user to another, with no password ever required.
Challenges we ran into
The most instructive bug came early: a single language-pack purchase was granting access to every language pack. The root cause was a broad isPremium flag being set on any successful payment, with one screen having a shortcut that bypassed proper per-item checks while another screen didn't. Two screens, two different hand-built logic paths, no shared source of truth. That's what forced the entitlements-table rebuild and the hard modularity rule that followed it.
The trickiest bug to actually find was a paywall that wouldn't close. Tapping the X appeared to do nothing — except it visibly flickered for half a second before the screen returned. That detail turned out to be the whole story: the button wasn't broken at all, it was correctly dismissing the paywall — but the screen underneath was structured as a hard block that re-evaluated entitlement status on render and immediately threw the paywall back up. The fix wasn't a bug patch, it was bringing that one screen in line with the soft-lock pattern the rest of the app already used successfully: always render the real screen, gate only the action, show the paywall as a dismissible overlay rather than a replacement.
The most consequential discovery was quieter: a deployment configuration gap meant the frontend build was silently being skipped on every publish for several days, while a series of real fixes were being written, tested, and reported as "deployed" — because the server half of each fix genuinely was live. Confirming this required directly comparing build timestamps against source changes, not trusting a "publish successful" status alone.
Accomplishments that we're proud of
Going from zero real transactions to a live, working payments system — with an accurate, durable Postgres entitlement store, working promo codes, and cross-device purchase restoration — while catching and fixing the kind of subtle bugs above before they reached a real paying customer, feels like the actual accomplishment here. Not that it works in a demo, but that it held up under the kind of scrutiny a real product needs.
What we learned
The most valuable lesson wasn't a specific bug, it was a pattern: the deepest bugs weren't in the code that was obviously new or risky — they were in small inconsistencies between two things that were supposed to behave the same way and quietly didn't. A screen that gated access differently than its sibling. A deploy step that looked like it ran but didn't. Consistency, not cleverness, is what actually prevents the expensive kind of bug.
What's next
A third content track using near-subliminal audio and frequency entrainment for subconscious training and focus is already planned to ride the same shared playback engine. Beyond that: closing out a handful of known consistency gaps the same way AI Lab was brought in line with the rest of the app, and continuing to build out the language and Self-Improvement catalogs now that the underlying architecture is solid enough to extend without re-litigating it each time.
Built With
- 2.5
- api
- expo.io
- express.js
- flash
- gemini
- native
- node.js
- postgresql
- react
- replit
- resend
- stripe
- typescript
Log in or sign up for Devpost to join the conversation.