{{ cheer.head }}
{{ cheer.line }}
// about_you

About You

Everything the app knows about you, and all of it editable. Your level sets how hard the tasks are, the questionnaire casts the rooms, and what you say here in your own words outranks the tick boxes wherever the two disagree.

your english
{{ me.lvl }} {{ me.lvlName }}
{{ me.lvlNote }}
how you behave under pressure
{{ me.type }} {{ me.typeName }}
{{ me.typeQuip }}
in your own words
{{ me.textNote }}
say it out loud
{{ me.answeredLabel }}
Four questions, spoken rather than typed. Nothing here is marked or scored: it is on file so the coach knows how you actually sound, and you can re-record any of it whenever you like.
This browser cannot hear, so the recorder is off. Chrome or Edge will do it, and nothing else on this page needs a microphone.
{{ me.aboutErr }}
0{{ q.n }}
{{ q.q }}
{{ q.hint }}
{{ q.interim }}
{{ q.said }}
on camera
{{ me.vidLabel }}
your answers
{{ row.label }} {{ row.value }}
{{ st.k }}
{{ st.v }}
previewing a first login
{{ demoStageLabel }}
The board is showing what a new learner sees. Nothing has been cleared and nothing is being written: your own profile, streak and history are exactly where they were, and a reload ends the preview.
// today's plan
{{ plan.title }}
{{ plan.dayCount }} · {{ plan.dayRule }}
i have {{ plan.budgetNote }}
{{ plan.restedLine }}
{{ loop.title }}
{{ loop.note }}
Check your personality, to be sure.
Twelve questions. It sets the habit your coach hunts for in every answer.
A category built for you is ready to draft.
speakmentor drafts three around your weak spots and you pick one.
{{ midweek.title }}
{{ midweek.who }}, {{ midweek.whoWho }}
opens Wednesday
Your next tailored category unlocks in {{ unlockNeedLabel }}, written from how you actually score.
{{ unlockCountLabel }}
Lv {{ level }} YOUR LEVEL
{{ xpTotal }} TOTAL XP
{{ streak }} DAY STREAK {{ streakNote }}
{{ gmQuota }} {{ gmQuotaLabel }}
$ speakmentor --start

Speak English like the engineer you already are.

Practice the real situations you hit at work, standups, PR reviews, conference calls, and get instant feedback split into grammar, vocabulary, and idioms.

// streak repair
Your {{ repair.lostLabel }} ended. Answer {{ repair.needLabel }} today and it comes back at {{ repair.restoredLabel }}.
{{ repair.countLabel }}
// your repeated mistake
You have got {{ fixRun.label }} wrong {{ fixRun.countLabel }} recently. {{ fixRun.sizeLabel }}, two minutes.
{{ fixRun.nodeLine }}
// this week
{{ week.days }}{{ week.partialLabel }}
days completed
{{ week.answers }}
answers reviewed
{{ week.xp }}
XP
{{ week.avg }}
average score
{{ week.retired }}
drills retired
{{ week.trend }} {{ week.note }}
{{ week.stopped }}
// jump back in
// weekly_video_challenge

Video Presentation

one take, once a week · {{ videoData.limitLabel }} max · +120 XP

You present yourself, then get a breakdown of eye contact, expression, body language, tone, hesitations, grammar and confidence, worth 120 XP.

1 allow camera 2 record one take 3 your breakdown
this week's scenario
{{ videoData.label }}
{{ videoData.brief }}
in the room {{ videoData.partnerWho }}
{{ videoData.partnerHow }}
{{ videoData.lockLabel }}
One recording a week keeps it a real performance. Work on the notes from your last take in the meantime.
{{ videoData.doneCount }} completed
Camera and microphone
Nothing is uploaded. The recording stays in this browser tab and is discarded when you leave.
your browser will ask next
{{ videoData.secsLabel }}
Look at the lens, not at yourself. One take, you can retake, but the first is the honest one.
{{ videoData.liveText }}
{{ m.k }}
{{ m.v }}
{{ m.note }}
watch it back, then rate yourself
Your honest self-review is half the feedback, the coach compares it against what the recording measured.
{{ c.label }} {{ c.valueLabel }}
{{ c.low }}{{ c.high }}
Submitting locks the challenge for a week.
reviewing your delivery…
{{ videoData.errText }}
ON-CAMERA PRESENCE
{{ videoData.fbScore }}%
{{ videoData.fbHeadline }}
+120 XP banked · next challenge in 7 days
{{ a.area }} {{ a.score }}
{{ a.note }}
keep doing this
{{ videoData.fbStrength }}
fix before next week
{{ f.n }}.{{ f.text }}
say it like this
"{{ videoData.fbRewrite }}"
Saved to your archive below, it survives a reload.
// your recordings
Nothing recorded yet. Your takes are kept on this device only, the last {{ videoData.maxTakes }} stay here so you can watch your eye contact and posture change week to week.
// your recordings
{{ videoData.takesLabel }}
{{ videoData.cmpHint }}
then vs now · {{ videoData.cmpGapLabel }}
{{ videoData.cmpDeltaLabel }}
{{ videoData.cmpLine }}
earlier {{ videoData.cmpA.score }}%
{{ videoData.cmpA.meta }}
later {{ videoData.cmpB.score }}%
{{ videoData.cmpB.meta }}
{{ t.label }} {{ t.score }}%
{{ t.meta }}
{{ t.headline }}
// {{ quizData.tierLabel }}

{{ quizData.unitName }}

{{ quizData.focus }}

{{ quizData.coachName }} {{ quizData.coachWho }}
{{ quizData.coachWhy }}
these lines are for
{{ quizData.rehearsalText }}
in today’s run · {{ quizData.rehearsalCat }}
{{ quizData.formatLabel }} {{ quizData.lvlLabel }}{{ quizData.stepLabel }}{{ quizData.tallyLabel }} {{ quizData.notGradedLabel }}
{{ quizData.fixPre }}{{ quizData.fixPart }}{{ quizData.fixPost }}
the underlined part is wrong, type the correction
{{ quizData.prompt }}
use this word {{ quizData.keyWord }}
{{ quizData.lead }}
type only the missing words
{{ quizData.prompt }}
one word only, {{ quizData.hintLabel }}
{{ quizData.prompt }}
{{ quizData.turn2From }}
{{ quizData.turn2Who }} says
{{ quizData.turn2Says }}
{{ quizData.prompt }}
{{ quizData.sayAsk }}
{{ quizData.mustHead }}
{{ mu.tick }} {{ mu.text }}
{{ quizData.wcLabel }}
how it lands {{ quizData.delVerdict }}
{{ quizData.delNote }}
{{ quizData.fbTitle }} · {{ quizData.answerCaption }} {{ quizData.answerLine }}
{{ quizData.sayNote }}
{{ quizData.why }}
{{ quizData.spentLine }}
{{ quizData.enterNote }}
marking your line…
{{ quizData.redoNote }}
{{ quizData.scoreLabel }}
{{ quizData.quip }}
{{ rw.label }} {{ rw.text }}
{{ quizData.xpLine }}
{{ quizData.ungradedLine }}
{{ quizData.missedLabel }}
{{ m.q }}
{{ m.answer }}
{{ m.why }}
// grammar

Grammar

Thirteen grammar disciplines, unlocked one at a time, plus a mix when you confuse two of them.

Start with the three tenses you use every day, then how to ask a question in the right order, the two things every conversation needs. Clearing a trial banks its XP; scoring 90% or better on it opens the next one, and every run draws a different set of exercises, so a near miss is worth re-running. Finishing a whole discipline opens the next one, and only that one: irregular verbs, the continuous and perfect forms, the small words that change what you promised, reporting what was said, and on through conditionals, modals, idioms, phrasal verbs and the soft skills the language is for.

{{ treeProgress }}
{{ treeOverall }}
{{ treeXpLabel }}
{{ profile.headline }}
{{ pr.label }} {{ pr.countLabel }} {{ pr.avgLabel }}
{{ pr.note }}
How progression works

{{ treeFirstLine }}

{{ b.label }}
{{ b.kindLabel }}
{{ b.gateLine }}
{{ n.name }}
{{ n.useLabel }}
+{{ n.xp }} XP
{{ n.xpBankedLabel }}
{{ n.leakLabel }}
{{ n.staleLabel }}
finish this one
{{ b.weakLabel }}
{{ b.looseLabel }}
{{ treeMystery.n }}
?
{{ treeMystery.teaser }}
{{ tq.n }} {{ tq.label }}
{{ catLine }}
{{ catShownLine }}
{{ cr.cid }} {{ cr.level }} {{ cr.topic }} {{ cr.mapLabel }}
// soft_skills

Soft Skills

{{ softLine }}

Three levels, and they run on their own ladder rather than behind the grammar branches. Basic is open from the start: agreeing, asking for clarification, paraphrasing. Clear half of a level and the next one opens. Every drill is scored like any other trial, and one of them lands in Learn Today whether or not your grammar needs work.

{{ softLockLine }}
{{ b.softLabel }}
{{ b.kindLabel }}
{{ n.name }}
rehearse the real one
What is the hard conversation this week?

Who it is with, what you have to get out of it, and what you are dreading. Four lines from your own situation, marked the same way the trials are. No XP and no tier: this one is practice for Thursday.

{{ sfMatchLine }}
{{ sfRealErr }}
{{ sfLine }}
{{ sfShownLine }}
{{ sr.cid }} {{ sr.whoLabel }} {{ sr.topic }}
{{ sr.stateLabel }}
// materials

Łukasz's Materials

Articles and videos posted for you to work through.

Each one carries its own flashcard deck, and the pacer drops the oldest unread one into your daily plan.

{{ matsData.progressLabel }}
{{ matsData.countLabel }}
{{ matsData.formTitle }}
link
{{ matsData.urlKindLabel }}
title
{{ matsData.titleHint }}
note to students
topics
excerpt or transcript · optional
{{ matsData.err }}
Nothing posted yet

{{ matsData.emptyMessage }}

Nothing matches that. Clear the search or pick a different topic.
{{ g.label }}
// the shelf

Books Łukasz recommends

Books for working alone at the business end of IT: client work, scope, pricing, explaining a decision to people who do not read code. Standing recommendations, not assignments. Nothing here enters your daily plan or counts against the queue above.

{{ booksData.formTitle }}
title
reading up on it…
author
why I recommend it · one point per line
level
topics {{ booksData.suggestLabel }}
cover · optional
looking…
{{ booksData.coverNote }}
{{ booksData.err }}
The shelf is empty. Anything added here is a suggestion only. It never appears in the daily plan.
{{ b.initials }}
{{ b.levelLabel }}
{{ b.title }}
{{ b.author }}
{{ pt.text }}
{{ pt.text }}
{{ tg.label }}
That material is gone.
// {{ matData.takeInLabel }}
Player refusing to load? Some videos block embedding, {{ matData.watchLabel }}
{{ matData.kindLabel }} from Łukasz · {{ matData.author }}

{{ matData.title }}

{{ matData.note }}

{{ tg.label }}
// this material
{{ matData.openLabel }}
// practice questions
Four open questions on this topic, an opinion, a disagreement, how it matches your own workplace, and a decision. Answer them out loud and you have something to say when it comes up.
// flashcards {{ matData.cardCountLabel }}
{{ matData.draftNote }}
drafting ten cards…
No cards on this one yet. Draft a deck, or write the first card yourself.
{{ matData.err }}
{{ c.term }}
{{ c.def }}
"{{ c.ex }}"
draft ✓ in your deck
// flashcards

Flashcards

// your decks
{{ cardIO.msg }}
sort
{{ newDeckLabel }}
{{ cr.term }} {{ cr.def }} “{{ cr.ex }}” {{ cr.stateLabel }} {{ cr.scoreLabel }}
Nothing matches that.
sort decks
{{ cardIO.msg }}
your deck · empty
Nothing saved yet
Save a term from any review and it starts filling up, or import a CSV above.
delete {{ md.count }} cards?
{{ d.ioMsg }}
No deck has a card matching that.
{{ studyData.title }} · {{ studyData.indexLabel }} · from {{ studyData.srcLabel }}
No cards saved yet
Cards land here from your reviews, most answers come back with one term worth keeping, and saving it takes one tap.
term
{{ studyData.term }}
click the card to flip →
meaning
{{ studyData.def }}
// example {{ studyData.ex }}
deck finished
{{ studyData.doneScore }} {{ studyData.doneLine }}
{{ mc.term }} {{ mc.def }}
{{ studyData.hitLabel }} {{ studyData.missLabel }} {{ studyData.leftLabel }} {{ studyData.dueLabel }}
space flips · ← → move
// task_category

{{ catData.label }}

{{ catData.usesLeftLabel }}
// {{ catData.archKicker }} attacks {{ catData.attacks }}

// built for you, {{ catData.blurb }}

Same place, same people throughout: {{ catData.world }}

{{ catData.winLabel }}
{{ catData.winNote }}

Choose a task, respond by typing or speaking, and get grammar, vocabulary and idiom feedback, with a score at the end.

A drill's level sets three things at once: who you are talking to, how hard the task itself is, and how long you get.

show · {{ catData.addCountLabel }}
{{ catData.rotationLine }}
{{ catData.rotNote }}
{{ catData.filterEmptyText }}
yours {{ t.stateLabel }}
new drill
{{ catData.addErr }}
{{ catData.addHint }}
level · room, stakes and clock
{{ catData.addLvlNote }}
{{ catData.addLvlRoom }}
{{ catData.addLvlClock }}
// speaking

Speaking Practice

Every task in the app, spoken.

Today's run mixes your categories, small talk, then an interview, then a client call, climbs slowly from easy to your hardest room, and casts a different person for each one. Start at the top and don't choose; clear one and a new task takes its place.

{{ speakData.countLine }}
{{ speakData.emptyText }}
{{ sessionData.tag }} · {{ sessionData.taskText }}
your partner : {{ sessionData.layerTally.text }}
{{ sessionData.chipPop.title }}
{{ sessionData.chipPop.curTitle }}
{{ sessionData.chipPop.curNote }}
pass {{ sessionData.heat.pass }} | {{ sessionData.turnLabel }}
{{ sessionData.heat.name }} {{ sessionData.heat.sum }}
{{ hr.k }} {{ hr.v }}
{{ sessionData.heat.legend }}
{{ sessionData.heat.pinLabel }}
tip · {{ sessionData.tipText }}
this task is {{ sessionData.moveLabel }}
{{ sessionData.moveRule }}
{{ ms.text }}
not · {{ sessionData.moveNot }}
casting the room…
{{ sessionData.sceneWho }}
your mission · {{ sessionData.sceneGoal }}
{{ sessionData.sceneOpener }}
the coach could not write their opening line, this one is generic
{{ turn.user }}
speakmentor · review
{{ turn.summary }}
{{ turn.score }}/100
likely outcome
{{ turn.gauge.label }}
{{ turn.gauge.note }}
// clean answer, grammar, word choice and phrasing all landed. Nice.
// nothing to mark here, no XP for this one. Answer the task and it counts.
grammar & structure
-{{ g.original }}
+{{ g.improved }}
// {{ g.note }}
+you fix this one, quick check below
vocabulary, swap for something sharper
{{ v.original }}{{ v.suggestion }}
// {{ v.note }}
cultural register · {{ turn.cultureLabel }} {{ turn.cultureRead }}
{{ turn.cultureNote }}
{{ cr.original }}
{{ cr.adapted }}
// {{ cr.why }}
read the room
{{ r.tag }} {{ r.note }}
idioms you could reach for
"{{ id.idiom }}"
{{ id.meaning }}
use when: {{ id.when }}
“{{ id.exampleText }}”
✓ {{ id.savedLabel }}
save to
{{ turn.xp }} pts{{ turn.indexLabel }} {{ turn.bonusLabel }} {{ turn.carriedLabel }} {{ turn.graspLabel }} {{ turn.capNoteLabel }} {{ turn.dlvLabel }} // {{ dn }}
{{ turn.partnerName }} {{ turn.partnerMood }}
{{ turn.partnerSays }}
✓ they gave you what you came for
{{ turn.replyName }} {{ turn.replyRole }}
{{ turn.reply }}
quick check · {{ challengeData.patternLabel }}
you said
{{ challengeData.saidLine }}
{{ challengeData.prompt }}
{{ challengeData.reply }}
{{ challengeData.why }}
{{ sessionData.pendingText }}
speakmentor · reviewing
{{ sessionData.errText }}
{{ spotData.kicker }}
{{ spotData.title }}
-{{ spotData.saidLine }}
+{{ spotData.betterLine }}
// {{ spotData.noteLine }}
{{ spotData.formatLabel }}{{ spotData.stepLabel }}
{{ spotData.fixPre }}{{ spotData.fixPart }}{{ spotData.fixPost }}
type the correction
{{ spotData.prompt }}
use {{ spotData.keyWord }}
{{ spotData.lead }}
{{ spotData.prompt }}
use: {{ spotData.hintLabel }}
{{ spotData.fbTitle }} · answer: {{ spotData.answerLine }}
{{ spotData.why }}
{{ spotData.doneLine }}
session report
{{ sessionData.report.outLabel }}
{{ sessionData.report.outTurns }} · mission was {{ sessionData.report.outGoal }}
{{ sessionData.report.outLine }}
{{ sessionData.report.outBonus }}
SESSION SCORE
{{ sessionData.report.avg }}%
{{ sessionData.report.stamp }}
{{ sessionData.report.quip }}
{{ rw.label }} {{ rw.text }}
{{ sessionData.report.taskDone }} · the whole conversation
{{ sessionData.report.taskVerdict }}
✓ {{ cv.text }}
✗ {{ mg.text }}
Next time: {{ sessionData.report.taskNext }}
// {{ sessionData.report.bandTag }}
{{ sessionData.report.roomReadText }}
{{ sessionData.report.trialText }}
{{ sessionData.report.turnsCount }}RESPONSES
{{ sessionData.report.grammarCount }}GRAMMAR FIXES
{{ sessionData.report.vocabCount }}VOCAB SWAPS
+{{ sessionData.report.xp }}XP EARNED
{{ sessionData.report.leak.line }}
carried in {{ sessionData.report.carryText }}
delivery {{ sessionData.report.dlv.score }} {{ sessionData.report.dlv.line }}
{{ sessionData.report.dlv.wpm }} {{ sessionData.report.dlv.pace }} {{ sessionData.report.dlv.fillers }} {{ sessionData.report.dlv.restarts }} {{ sessionData.report.dlv.clarity }}
· {{ dn }}
{{ sessionData.report.dlv.coverage }}
your next session · already set up
{{ sessionData.report.plan.headline }} {{ sessionData.report.plan.chip }}
{{ sessionData.report.plan.why }}
-{{ sessionData.report.plan.fixOriginal }}
+{{ sessionData.report.plan.fixImproved }}
// {{ sessionData.report.plan.fixNote }}
{{ sessionData.report.plan.footnote }}
up next {{ sessionData.upNext.bandLabel }} {{ sessionData.upNext.kindLabel }} {{ sessionData.upNext.catLabel }}
{{ sessionData.upNext.text }}
{{ sessionData.upNext.personaName }} {{ sessionData.upNext.personaWho }} {{ sessionData.upNext.memLine }}
{{ sessionData.quotaHeadline }} daily limit
{{ sessionData.quotaResetLine }} {{ sessionData.quotaStreakLine }}
still open right now
{{ sessionData.quotaFootnote }}
{{ sg.label2 }} {{ sessionData.capBar.countLabel }}
{{ sessionData.timerLabel }}{{ sessionData.liveText }} {{ sessionData.capMeta }} {{ sessionData.composerMeta }} Enter to send · Shift+Enter for a new line
{{ nodeModal.label }}
{{ nodeModal.name }}
{{ nodeModal.kindLabel }} {{ nodeModal.limitLabel }} reward +{{ nodeModal.xp }} XP {{ nodeModal.passLabel }}
the mission
{{ nodeModal.task }}
why you are here
{{ nodeModal.leakNote }}
worth re-running
{{ nodeModal.staleLine }}
basepastparticiple
{{ vg.label }}
{{ vg.note }}
{{ vr.base }} {{ vr.past }} {{ vr.part }}
✓ {{ vg.ok }}
✗ {{ vg.no }}
{{ nodeModal.rulesLabel }} {{ nodeModal.rulesLead }}
these words signal it
{{ cue }}
{{ grp.label }}
· {{ r.text }}
{{ r.ok }}
{{ r.no }}
{{ nodeModal.gradeNote }}
✓ {{ nodeModal.doneLabel }}
🔒 {{ nodeModal.lockText }}
{{ nodeModal.passNote }}
$ speakmentor --layers
{{ layers.countLabel }}
the room {{ layers.roomShort }}

Who's on the other side?

// every change applies the moment you make it, close whenever you like

Same sentence, different room, different verdict. Each layer you switch on sharpens what the coach grades.

the room you are about to walk into
{{ layers.partnerText }}
tip · {{ layers.tipText }}
rooms you land, rooms you miss where your reads actually fail
{{ r.label }} {{ r.count }}
{{ layers.levelName }} {{ layers.levelNote }}
{{ dial.kicker }}
{{ dial.value }} {{ dial.meta }}
{{ dial.note }}
{{ layers.dialsSum }}
{{ mrow.t }}
{{ mrow.d }}
your level · {{ layers.levelLabel }}
{{ layers.tierLine }}
{{ layers.suggestionText }}
Your conversation partner who is on the other side today
what decides this room
{{ layers.roomModeNote }}
Talk to someone specific sets every layer below at once
{{ layers.personaName }} {{ layers.personaWho }}
{{ layers.personaNote }}
{{ layers.memLine }} {{ layers.memTimes }}
{{ ps.label }}
tier 1 · Be understood A2+
Who they are to you, whether they are a woman or a man, and roughly how old they are, the three things you know before they open their mouth.
{{ layers.t1.teaser }}
Who they are to you {{ layers.sw.power.valueLabel }} {{ layers.sw.power.lockLabel }}
{{ layers.powerHint }}
A woman or a man? {{ layers.sw.gender.valueLabel }} {{ layers.sw.gender.lockLabel }}
{{ layers.genderHint }}
Roughly how old are they? {{ layers.sw.gen.valueLabel }} {{ layers.sw.gen.lockLabel }}
{{ layers.genHint }}
tier 2 · Read the room B2+
Whether they know your domain and how technical they are, what decides how much you explain, and how much jargon survives.
{{ layers.t2.teaser }}
Do they know your domain? {{ layers.sw.domain.valueLabel }} {{ layers.sw.domain.lockLabel }}
{{ layers.domainHint }}
How technical {{ layers.sw.tech.valueLabel }} {{ layers.sw.tech.lockLabel }}
{{ layers.techHint }}
tier 3 · Where they are from C1+
Their culture, the same sentence is well judged in Germany and rude in Japan.
{{ layers.t3.teaser }}
Their culture {{ layers.sw.culture.valueLabel }} {{ layers.cultureCtx }} {{ layers.sw.culture.lockLabel }}
{{ layers.cultureHint }}
tier 4 · Play the person C2+
Their psychology, the top rung of the layer ladder. The temperament dial below it is the other axis, not a layer: it is always available, at every level.
{{ layers.t4.teaser }}
Their personality {{ layers.sw.roomMbti.valueLabel }} MBTI · four taps {{ layers.sw.roomMbti.lockLabel }}
{{ layers.roomTypeLabel }}
{{ layers.roomQuip }}
{{ layers.roomAdapt }}
how hard they are · the second dial any level
Not a rung on the ladder above. How hard they are to talk to is the other dial, available at every layer level, the two add up to the room.
How hard do they make it? {{ layers.sw.diff.valueLabel }} {{ layers.sw.diff.lockLabel }}
{{ layers.diffHint }}
{{ layers.diffTurns }}
About you answered once, travels with you into every room
Your personality {{ layers.sw.meMbti.valueLabel }} {{ layers.sw.meMbti.lockLabel }} the habit the coach hunts for
{{ layers.meTypeLabel }}
{{ layers.meQuip }}
{{ layers.meTell }}
Your first language {{ layers.sw.l1.valueLabel }} {{ layers.sw.l1.lockLabel }} accent & interference
{{ layers.l1Note }}
Switch layers mid-session from the chips above the task. Nail every read in one answer and you bank bonus XP.
$ speakmentor --profile
{{ surveyStepLabel }}

{{ surveyTitle }}

{{ surveySub }}

// how new categories get built
Your profile sets the direction; your practice record sets the difficulty. {{ progressLine }}
$ speakmentor --read-the-person

Who are you actually dealing with?

Paste their LinkedIn About, an email thread, your own notes, or a call transcript. You get a read on their type and how to talk to them, saved as a person you can practise with by name.

{{ describeData.fileName }}
{{ describeData.errText }}
{{ describeData.resType }} {{ describeData.resTypeName }} {{ describeData.resConf }}
{{ describeData.resWho }}
{{ describeData.resNote }}
{{ describeData.resEvidence }}
$ speakmentor --who-am-i {{ testData.stepLabel }}
{{ testData.question }}
Agree Disagree
No wrong answers, answer as you actually are, not as you would like to be.
{{ testData.type }}
{{ testData.typeName }}
{{ testData.typeQuip }}
{{ testData.typeTell }}
{{ b.label }} {{ b.pctLabel }}
// built for you · choose one

Three ways to go after it

{{ candData.line }}

Each one climbs from your easiest room to your hardest, and every task is written against a mistake you have actually made.
$ speakmentor --explain-plan
{{ pacerData.sessionsLabel }}

Rank {{ pacerData.rankLabel }} · {{ pacerData.phase }}

{{ pacerData.phaseLine }}

{{ z.label }} · {{ z.floorLabel }}
{{ pacerData.nextLine }}
{{ pacerData.seedLine }}
{{ pacerData.moveLabel }}
{{ pacerData.moveNote }}
{{ pacerData.queueLine }}
{{ pacerData.weekLabel }} · {{ pacerData.avgLabel }}
difficulty mix at this phase
{{ m.label }} {{ m.pctLabel }}
skill tracks · measured from your feedback
{{ sk.label }} {{ sk.valLabel }}
{{ sk.tag }} · {{ sk.drives }}
where every drill in the app sits
{{ c.n }} {{ c.label }} {{ c.note }}
when a drill appears
{{ r }}
when it disappears
{{ r }}
recent decisions
{{ e.whenLabel }} {{ e.text }}