Your sign-in changed
The previous session is closed. Reload to continue with the current account. Saved lessons and drafts stay with their original learner.
The previous session is closed. Reload to continue with the current account. Saved lessons and drafts stay with their original learner.
{{ learningData ? 'Welcome back, ' + learningData.user.name.split(' ')[0] + '.' : 'Welcome to LingoMitra.' }}
{{ studioResume.lang.name }} {{ studioResume.number ? 'Lesson ' + studioResume.number : 'Introduction' }}
{{ studioResume.reading ? 'Your written recap is saved.' : studioResume.complete ? 'Lesson complete. Listen again whenever you like.' : 'Saved at part ' + (studioResume.step + 1) + (studioResume.time ? ' · ' + audioClock(studioResume.time) + ' into this recording' : '') }}
Written recap
Hear a useful idea. Pause to build a sentence. Then listen to the reasoning and try it again.
Choose your languageAn opening recording from the course. AI-generated voice.
{{ studioSampleError }}
Checking for a listening sample…
Sign in to check listening samples. Written recaps are available now.
A listening sample is not available here yet. Course recaps are ready to explore.
Choose a course. Your lesson will do the teaching.
{{ courseFilter === 'started' && !courseQuery.trim() ? 'Open a course and it will appear here, with your place saved.' : 'Try another name or clear your filters to browse the full catalogue.' }}
{{ draftCourseCount }} courses are new foundation drafts. Fluent-speaker review is pending. Courses marked “Roman transcription” have native-script lessons pending.
Availability refers to each course’s opening lesson. Further lessons may need preparation. No course is labelled as fluent-speaker reviewed.
Your written recaps and practice, together.
{{ (languages.find(l => l.code === lesson.languageCode) || {}).name }} · {{ lesson.number ? 'Lesson ' + lesson.number : 'Introduction' }}
Open a lesson and its recap will be easy to find here. Practice reuses the words and patterns from your course.
Explore courses{{ learningData.user.name }}
Sign in to keep your learning streak, daily goal and lesson history together.
Sign in with ChatGPTLoading your learning history…
{{ learningError }}
{{ learningData.streak.current }} day{{ learningData.streak.current === 1 ? '' : 's' }}
{{ learningData.streak.current ? (learningData.todayParts ? 'You showed up today. Keep that curiosity going.' : 'Your streak is still going. Make a little time today.') : 'One lesson part is enough to begin.' }}
Best streak: {{ learningData.streak.best }} day{{ learningData.streak.best === 1 ? '' : 's' }}
{{ learningData.todayParts }} / {{ learningData.profile.dailyGoal }} lesson parts
{{ learningGoalMet ? 'Daily goal complete. Anything more is a bonus.' : 'Finish a listening section or a question to complete a part.' }}
{{ learningData.recentLessons.length ? 'Continue learning' : 'Choose a language' }}A day counts when you complete a lesson part. Opening the site does not add to your streak.
Your lessons will appear here when you start listening.
Daily activity is tracked from this update. Your earlier saved lessons are included in lesson totals.
{{ learningData.user.email || 'Signed in with ChatGPT' }}
{{ learningExportError }}
Saved for each language on this device. Available text is shown as supplied; missing transliterations are not invented.
Signed-in visits on this site, grouped into a new session after 30 minutes away. Earlier sign-ins aren’t available.
Started {{ learningDate(visit.startedAt) }}
Last active {{ learningDate(visit.lastSeenAt) }}
Your next signed-in visit will appear here.
Your latest 20 visits are shown. Device labels come from the browser; IP addresses and location are not stored.
{{ installStandalone ? 'You’re listening in the app.' : installComplete ? 'Added to your device. Open LingoMitra from your app launcher.' : 'Open your listening space straight from your home screen.' }}
{{ language ? language.name : 'Your course' }}
Loading the written course and lesson details.
{{ errorDetail }}
Sign in{{ language ? language.name : '' }} {{ lessonEyebrow }}
Opening the course…
{{ errorDetail }}
{{ audioError }}
Sign inYour listening space
Listen, then try a sentence in your own time. Each pause gives you space to think.
{{ studioReady[language.code] && studioReady[language.code].scriptAvailable ? 'Prepared audio is reused. Your place is saved as you go.' : 'Audio is prepared on first play when a recording is not available.' }}
{{ studioText(audioSegment.text, audioSegment.readingText) }}
Think or speak aloud. No microphone needed.
{{ audioSegment.text }}
{{ studioFirstThought(studioText(audioSegment.text, audioSegment.readingText)) }}
{{ audioFeedbackText('feedback') }}
{{ audioFeedbackText('hint') }}
{{ audioFeedbackText('answer') }}
{{ audioFeedbackText('explanation') }}
{{ audioFeedback[field] }}
Lesson complete
{{ audioCorrectCount }} answered correctly · {{ audioRevealedCount }} explored with an explanation
{{ audioBusy ? audioBusyText : audioBuffering ? 'Buffering audio…' : '' }}
Draft course · Fluent-speaker review pending.
{{ language.formatNote }}
Loading {{ pendingName }} lessons
{{ errorBody }}
{{ errorDetail }}
This course is still being written. The others are ready whenever you are.
Practice · {{ language.name }}
{{ practiceIndex + 1 }} / {{ practiceSet.length }}
Draft course · Fluent-speaker review pending. {{ language.formatNote }}
Lesson {{ currentItem.lessonNumber }} · {{ currentItem.instruction }}
{{ currentItem.prompt }}
{{ currentItem.hint }}
Your browser handles speech recognition, which may send audio to its provider.
{{ verdictHeadline }}
{{ verdictNote }}
{{ second.why }}
{{ second.from }} · the course’s answer stands where they disagree
{{ voiceNote }}
Time well spent
Every sentence is another chance to learn.
Compare these again
{{ r.item.answer }}
{{ r.item.prompt }}{{ language.name }} · lessons 1–{{ talkUpTo }}
{{ tutorState.local ? 'On this machine' : 'Your key' }}
Use the patterns you have learned.
Draft course · Fluent-speaker review pending. {{ language.formatNote }}
LingoMitra has no server, so the model is yours: one running on this machine through Ollama or LM Studio, or a provider you hold the key for. Either way nothing you type here reaches us.
The partner is asked to stay within lessons 1–{{ talkUpTo }} and help you work out an answer through smaller questions. Compare its replies with the course; model responses can be mistaken.
What shall we talk about?
{{ talkError }}
The lessons and the practice engine work on their own. This is only for the conversation view and for second opinions on a practice answer.
Guided audio uses LingoMitra’s server connection. This optional conversation partner uses your own provider account. A key you enter is held only in this tab’s memory and sent directly to that provider after checking your sign-in. It is cleared on sign-out, account change or leaving the page. Saved keys from older versions are removed. Your endpoint and model preferences are kept.
Sign in with ChatGPT before connecting a hosted partner. Local models still work without sign-in.
Start from
Ollama and LM Studio run the model on this machine — no key, no account, and nothing leaves the device. The rest are hosted and need a key.
Details
An OpenAI-compatible base URL. Ollama serves one at
localhost:11434/v1, LM Studio at localhost:1234/v1.
Whatever name your runtime or provider uses. A 7–8B instruct model is enough for conversation at this level.
From console.anthropic.com. Requests go from this page to Anthropic and are billed to your account.
Ollama and LM Studio ignore this. Hosted providers need it.
{{ tutorTest.body }}
Second opinion in practice
When your answer differs from the course’s, LingoMitra can ask the model whether yours also works. It sees both sentences, so it is comparing rather than inventing — which is why a small local model can do it. The course always wins where they disagree, and this is never asked for Kannada.
This lesson has no sub-sections.
{{ language.name }}
{{ doneCount }}/{{ lessons.length }}
Nothing matches “{{ query }}”.
{{ group.name }}