Lexborn: sluta plugga, börja prata
Röstträning för engelsktalande som lär sig ett annat språk. Sju språk, tre personligheter i varje, ett minne som överlever sessionen och flashcards byggda av orden du inte kom på.

Bakgrund
Lexborn är röstträning för engelsktalande som lär sig ett annat språk. Sju målspråk, tre personligheter i varje, och ett samtal som fortsätter där det förra slutade i stället för att presentera sig på nytt.
Det som skiljer den från en chattbot med mikrofon är minnet. Partnern minns vad ni pratade om i tisdags, minns att du hela tiden undviker preteritum, och minns orden du sträckte dig efter och inte hittade. De orden blir dina flashcards, på ett spaced repetition-schema, utan att du öppnar någon kortleksredigerare.
Den är inte lanserad än. Mer om det nedan, eftersom anledningen är pinsam.
Problemet
Jag har använt apparna. Jag har en streak i en av dem som mäts i hundratals dagar och jag kan inte beställa lunch.
Glappet handlar inte om kunskap. Varje stor språkapp är ett tryckspel, och att trycka på rätt ruta av fyra är en helt annan motorisk och kognitiv handling än att producera en mening högt, i realtid, medan någon väntar. Du kan vara utmärkt på det första och stum inför det andra, och appen fortsätter gratulera dig oavsett.
Det ärliga alternativet är en lärare, som kostar pengar och kräver kalendrar. Glappet mellan ett gratis tryckspel och en inbokad människa är där nästan alla som lär sig ett språk befinner sig.
Min roll
Allt, ensam. Nuits har aldrig anställt någon.
Produkt, gränssnitt, varumärke, röstloopen, minneslagret, schemaläggaren för flashcards, personlighetspipelinen, inloggning, betalningar. Också beslutet om vad personligheterna får rätta och när, vilket låter som en innehållsfråga och egentligen är produktens kärnbeslut.
Angreppssätt
Designfrågan var avbrott. En partner som rättar varje fel är outhärdlig och får dig att sluta prata, vilket är precis det misslyckande produkten finns till för att förhindra. En partner som inte rättar någonting är trevlig och oanvändbar.
Jag landade i uppskjuten rättning. Under samtalet håller partnern utbytet vid liv och griper bara in när ett fel blockerar förståelsen. Allt annat loggas tyst. Efteråt får du rättningarna i ett svep, grupperade, med meningen du sa bredvid meningen du menade. Flödet förblir intakt och återkopplingen kommer ändå.
De tre personligheterna per språk finns av samma skäl. De skiljer sig i tålamod, tempo och register, så att en nybörjare inte kastas in hos en snabb talspråklig person dag ett och en medelnivåelev inte fastnar hos någon som pratar med hen som med ett barn.
Så byggde jag det
Next.js med Turbopack. Clerk sköter autentiseringen, Polar sköter betalningarna som merchant of record, vilket för en finländsk enskild näringsidkare som säljer in i EU är skillnaden mellan att leverera och att göra momsregistreringar i all evighet.
Röstloopen är där ingenjörsarbetet ligger. En realtidsväg från tal till tal håller rundturen kort nog att pausen efter att du slutar prata känns som en människa som tänker snarare än en server som jobbar. Över ungefär en sekund läses det som eftersläpning och folk börjar överartikulera, vilket förändrar vad de säger. Att strömma i båda riktningar, och att starta uppspelningen på första ljudpaketet i stället för det sista, köper tillbaka den tiden.
Minneslagret är skilt från samtalet. Efter varje session extraherar en sammanfattningskörning bestående fakta om eleven (ämnen som berörts, grammatik som prövats, återkommande fel, ordförrådsluckor) och skriver dem till en profil. Nästa session matar in en komprimerad version av profilen i stället för rå transkriptionshistorik. Det är ett kostnadsbeslut lika mycket som ett kvalitetsbeslut: att spela upp fullständiga transkript i varje prompt växer utan tak, och en modell som får femtio sessioners rå historik ignorerar mitten ändå.
Schemaläggaren för flashcards läser ordförrådsluckorna direkt. Om du pausade, sa det engelska ordet eller cirklade runt ett begrepp i tre bisatser, hamnar posten i kortleken. Spaced repetition schemalägger den, och att använda ordet framgångsrikt i ett senare samtal räknas som en repetition, så att prata språket är i sig studiepasset.
Personlighetspipelinen genererar och validerar varje karaktärs röst, register och rättningströskel per språk, så att lägga till ett åttonde språk är en datauppgift snarare än en utvecklingsuppgift.
Felmoder, ärligt talat: taligenkänning på en tung brytning i ett språk du knappt talar är produktens svåraste indata, och den försämras exakt när eleven är som skörast. Bakgrundsljud tolkas som tal och avbryter partnern. Ett minneslager som minns fel sak om dig är sämre än inget minne alls, så profilposter bär tillförlitlighet och tynar bort om de aldrig bekräftas igen.
Resultat
Den är inte lanserad. Sajten är uppe, produkten fungerar, och den levererar fortfarande en publicerbar Clerk-nyckel med pk_test_ i produktion, vilket betyder att autentiseringsmiljön är en testinstans. Det är en lanseringsblockerare av min egen tillverkning, den ligger på listan, och att låtsas något annat skulle sitta illa bredvid en portfölj full av produkter som redovisar sina egna gränser.
Vad jag skulle göra annorlunda
Jag byggde personlighetspipelinen för sju språk innan jag validerat att ett språk var bra. Sex väntade i månader på att användas, och den kraften borde ha gått till röstloopen.
Jag skulle också ha kopplat miljönycklar genom en kontrollerad konfiguration från början. En testnyckel som överlever in i produktion är ingen svår bugg. Det är den sortens sak du bara fångar med en kontroll som fäller bygget, och jag skrev ingen.




