Language App
Parla, a language course you play: a complete Xcode project with a lesson path, chunky word exercises, a talking coach, passport stamps, streaks, widgets and three brand presets.
A language app on three tabs. First run is hosted by Pip, the coach: pick a language, why you're learning, your level and a daily goal, allow a reminder, then Parla Plus on StoreKit 2. Learn is the course as a winding path; a lesson is a run of word-tile exercises with instant feedback that ends in confetti, and the day's first one grows your streak; finishing a unit presses a stamp into your passport. Words reviews what you've met with spaced repetition, and Passport keeps your stamps, streak, settings and the subscription.
$199 once, every piece included. See how installing works · Sign in
What's inside
The screens this template wires together, in the order someone meets them.
First run
Pip asks for your language, your reason, your level and a daily goal, then the reminder permission and Parla Plus on StoreKit 2. Runs once, then records completion.
Tabs
Learn, Words and Passport on Parla's chunky tab bar. Learn is the Path; Words is every word you've met with a practice deck; Passport is your stamps and streak, with Settings behind its gear.
From the tabs
A stop plays as Practice exercises and ends on a confetti finish and the streak moment; Words runs its review rounds in the same exercises.
What's included
SwiftUI source you own, built on Apple frameworks only.
- The course as a winding path of lessons, with the next one bouncing
- Word-tile exercises with a talking coach and instant feedback
- A confetti finish, then a streak moment for the day's first lesson
- A stamp in your passport for every unit you finish
- Words to review, scheduled by spaced repetition
- Streak and Next lesson widgets
- Three presets: Confetti, Sol and Editorial
Implementation notes
How it behaves, what it handles, and the decisions behind it.
LanguageApp is one root view. On first launch Pip, the coach, hosts Parla's first run from a speech bubble at the top of each step: a hello in three languages, the language on tactile tiles with drawn flags, a daily goal, then Parla Plus on StoreKit 2. Closing, purchasing or restoring finishes first run and records it under a completion key, so the root switches to the app on its own.
The app sits on three tabs under Parla's own chunky tab bar: a white bar on a 2pt rule where the selected tab stands on a tactile tile with its icon in its own color. It is a TabView with the system bar hidden, so each tab keeps its own stack. Learn is the Path screen: the course as a wave of stops you press, unit banners that pin and hand over, Pip beside the current stop, and a card that pops from a stop with Start. A lesson is the Practice screen, full screen: build each sentence from word tiles, check it, and the last one ends in confetti with stars, XP, accuracy and time. The day's first round then ends on the streak moment, where the flame swells, the count rolls over and today's circle fills. Words lists everything you've met by unit, each with a strength meter, under a deck of the words due and Practice. Passport is the Passport screen: the streak, your totals, a stamp per unit, and a gear that pushes the Settings screen. Finishing a unit's checkpoint lands its stamp there with a thud.
Adapting it
- Products: pass your App Store Connect ids as
productIDs. Until they exist, the paywall shows Pip wincing over "Plans didn't load", and its close key still finishes first run. - Your course: units, stops and sentences come from
LanguageAppSampleat the top ofLanguageApp.swift. A unit is aPathUnitwith its block; each stop plays a list ofSentenceExercises (the prompt, the answer as it should read, distractor tiles and the words it teaches). - Progress:
LanguageAppModelkeeps it in memory, andfinish(_:result:)is the one place a round is recorded: the stop's stars, the next stop current, the day's XP, the streak and, at a checkpoint, the unit's stamp. Move it to your own store when you have one. - Theme: everything follows the theme you set on
LanguageApp. Without a brand it wears Parla Confetti;SPBrandTheme(.parlaSol)or.parlaEditorialchange the ground, blocks, type and motif at once, while the tactile keys and Pip stay.
The Xcode project
The download is a complete project on Tuist: Spanish for English speakers in full (three units of six stops, sixty words, every sentence written for the template) with a unit each of French and Italian, kept as data; progress in SwiftData behind a repository protocol, with five weeks of sample progress ending yesterday; spaced review of every word met (ReviewScheduler), with one free round a day; Pip's longer first run (why you're learning, your level, the reminder permission and its declined state); Parla Plus on AppCore's purchase store, which opens the third unit, unlimited review and the Sol and Editorial themes; speech in the course's voice at the speed you choose; Settings for voice speed, accents, sounds, haptics, the goal, the reminder and the course; Streak and Next lesson widgets with parla:// links; three presets; unit tests for scheduling, sentence checking, the course data, the stats and the store, and a first-run UI test.
Notes
- Not
@main: putLanguageApp()in your ownWindowGroup. - Enable the In-App Purchase capability before testing purchases.
- Sentence checking forgives case and punctuation, and accents when accent forgiveness is on. Ñ always counts.
- XP, a daily goal, a streak, stars, a combo and stamps are the whole reward system: a missed sentence comes back once at the end of the lesson, and that's all.
- Previews ship with the file: first run, home, and home in each Parla preset.
Keep building
Pieces that work well next to this one.