What each surface holds, the rule that shaped it, and the cost accepted. Ordered the way a buddy meets them: finding the feature, inviting, accepting, the Path, the quiz, the buddy view, the profile and menu, milestones and the badge, notifications, and ending. The rules the surfaces obey are in the previous strategy section; this section doesn't restate them.

1. Entry points

An entry point must be an addition to a screen the solo flow already has, never a new step in it, and never added attention on the common path. Click-counting isn't enough. An affordance repeated on every row of a scrolling list taxes a solo learner's attention even when never tapped, and "they can ignore it" isn't a defence.

Three entry points serve three moments. None is primary.

Course selection: a second button. The course list and its CONTINUE button are unchanged. A secondary full-width button, WITH A FRIEND, sits directly beneath. Both are disabled until a course is selected, matching CONTINUE's existing behaviour, and the disabled state does nothing when tapped; a label that needs a popup is the wrong label. Stacked rather than side by side, because primary buttons are full width throughout the app and side-by-side would read as two coequal choices, forcing every solo learner into a decision they didn't have before. Stacked, CONTINUE is the same button in the same place doing the same thing. Courses the learner already has still appear, and tapping one opens it rather than adding it, so this one entry serves both adding a course to learn together and learning one you already have together. It serves people whose course decision and buddy decision are the same decision.

Not a view toggle, which would ask for intent before seeing the list and reverse the order the decision happens in. Not a per-row action, which a solo learner would re-dismiss on every course as they scroll.

Course menu: LEARN WITH A FRIEND. A secondary full-width row beneath the course tiles in the menu opened from the flag. The menu is already course-specific, so the course is implied and opens straight to buddy selection. It serves the learner who already has the course and decides, one tap from the Path, in the place their courses live. Routing them to the profile to re-pick the course they're standing in would be a context switch and three taps.

Profile: the Course Buddies section. An always-present section on the learner's own profile with empty plus-slots. Tapping one starts the invite flow. It serves people who decide later, at a moment the app can't predict: lapsed learners restarting, ended pairs re-forming, anyone whose friend messaged them today. The profile rather than the Path because the quiz tile lives on a course's Path, and there is no Japanese Path to put anything on for someone who has never started Japanese.

Both labels are literal on purpose. Duolingo's button copy is translated into dozens of languages and read by a largely non-native-English audience, so an idiom is unreliable on a control that has to be unambiguous on first read. Two labels for the same action is correct: WITH A FRIEND reads as a modifier on CONTINUE beside it, and LEARN WITH A FRIEND has to carry the action alone in a list of courses.

All three lead to one sequence, course then buddy then start point, and differ only in how deep they start. Buddy selection can't come before the course, because whether someone is a good buddy is entirely a function of where they are in that course. The Add Course menu was rejected as a placement: adding a course is the umbrella action, and solo versus together isn't a meaningful distinction at that level.

2. The invite flow

There is no receiver-side invite screen. The invitee is reached by notification, and the invite lives as a row in the management menu. Friend Streaks has no dedicated invite screen either.

Empty state. The menu when the learner has no buddies and no invites: two characters, one line saying what the feature is for, one button at the bottom. The line is the same sentence used wherever the feature needs defining.

Course selection. The standard screen. Entering from WITH A FRIEND starts past it.

Friend selection. The densest screen in the flow, deliberately, so the flow stays short. It holds the course being learned, three ways to find someone that match the Friend Streak add-friend pattern (choose from contacts, search by name, share a follow link), and the list of people the learner follows. Each row shows avatar, name, their course score, and one INVITE button. Rows are uniform.

The list is sorted by proximity to the learner's own position: people at the same section and unit first, since no one is rewound in that pairing, then ascending distance in either direction, then people far away or not on the course. Proximity rather than "who gives up least," because whether two people make good buddies is mostly whether they'll be working similar material at similar times, and proximity predicts that directly. People who haven't started the course still appear; pairing with one is a legitimate and deliberate choice, served by search rather than by rank. The tier self-corrects: if the learner has no progress either, a friend who hasn't started is at their position and sorts first.

Rows show course score rather than position, because score is the number the app puts in the top bar constantly and nobody tracks "Section 1, Unit 1." Showing it also makes the sort legible; a learner can see why someone ranks where they do. Position is named exactly once in the feature, on the start-point sheet, where the sender is deciding what to give up.

Search sits alongside the sort and is required. Most senders already know who they're inviting and must find them in one step regardless of rank.

Anyone can be invited. Following isn't a prerequisite; sending creates the sender's follow and accepting creates the return follow, so a pair is mutually following by the time it exists. The follow requirement had been a spam guardrail doing less work than it appeared to. The real guardrails are a cap of five concurrent pending invites, one pending invite per person per course, silent clearing, and block, the same tools Friend Streaks relies on for the same exposure. The share-follow-link option is the most load-bearing of the three, because the commitment usually happened in a conversation and sending a link to the person you just agreed with is the natural next act. A learner with an empty list sees the finding options as the primary content, not an empty state with no way forward; a new account follows nobody, and new accounts formed because two people agreed to do this are a target population.

Someone already learning this course with a buddy appears greyed with a note that they already have a buddy for it, without naming who. Shown rather than hidden, because a sender scanning for a specific person who is simply absent can't tell whether they're ineligible or the search is failing. Per course only: someone paired in Japanese appears normally when inviting for Spanish.