I'm sharing an early look at something I've been quietly building: Northline, a native Apple practice and assessment platform for students, teachers, and tutors. This is an internal alpha — shippable to a small private group, deliberately narrow, built so the next layers have something solid to sit on.
The pitch is simple: most exam tools either feel like a learning management system that grew an exam tab, or a proctoring product that treats every student like a suspect. Northline tries to sit in between — calm for the student who just wants to take a quiz, focused for the teacher who just wants to ship one.
What's in this build
Northline is a single SwiftUI + SwiftData target that runs on iOS, iPadOS, and macOS 26.4+. Everything in the alpha is on-device — there's no backend yet, and that's intentional.
Two roles, picked at onboarding:
- Student — pack browser, practice mode, timed exam, review, a mistake notebook, and a progress chart.
- Teacher / tutor — classes with join codes, an exam builder, assignment codes, results with stat tiles, and a CSV export.
The build ships with one bundled original sample pack (AP Microeconomics Unit 1 — original practice content, not affiliated with College Board), and a JSON import flow with full schema validation and a preview step so teachers can bring their own packs without leaving the app.
The student side
When a student opens an exam, the app drops them into a focused session built around one question at a time:
- A distraction-reduced UI — progress, an optional timer badge, a flag toggle, prev/next, and an explicit submit confirmation. No sidebars competing for attention.
- Practice vs. timed exam as separate modes. Practice is untimed and lets the student toggle explanations after each answer. Timed exams randomize question order and run the clock.
- Multi-select and multiple-choice rendered with the right indicator (checkboxes vs. radios) so the interaction matches the question type.
- Submit-once semantics with confirmation, so the "did I actually submit?" anxiety goes away.
- After submission, a score summary with a topic breakdown, then a review mode that replays each question alongside the correct answer, the explanation, and a per-question save toggle.
- A mistake notebook that stays live via a SwiftData
@Query— missed and flagged questions appear without leaving and re-entering the screen. - A progress tab with session count, average %, best %, and a recent-trend bar chart.
The feel I'm aiming for: a sheet of paper that happens to know what time it is.
The teacher side
Teacher delivery is deliberately boring:
- Create a class — Northline generates a 6-character ambiguity-free join code.
- Build an exam in the exam builder: title, optional instructions, time limit, randomization, source pack, per-question selection.
- Assign the exam to a class — that produces a fresh assignment code and a
northline://assignment/<code>share link. - Watch results land. The results screen shows attempt count, average %, high %, per-attempt rows with student display names, and a CSV export with one column per question.
No seat licensing, no install rituals, no "please ask IT" — but also no marketplace, no payments, no proctoring, and no school admin. Those are later stages, on purpose.
Architecture, briefly
The codebase is organized by layer, not by feature:
- Domain is pure Swift with no SwiftUI or SwiftData dependency — models, the exam engine, scoring, and the pack parser. It's fully unit-tested without booting any view.
- Persistence is SwiftData behind repository protocols (
QuestionPackRepository,AttemptRepository,ClassRepository,ExamRepository,AssignmentRepository, ...). UI never touchesModelContextdirectly. - UI is design-system tokens plus reusable components, with student and teacher screens layered on top.
ExamEngine owns question order, per-question answer state, the timer, an autosave hook, and submit(at:) — and because it's UI-independent, scoring rules and attempt aggregation get tested directly.
What's intentionally not here yet
Calling this an internal alpha means being honest about the edges:
- No cross-device sync. Class and assignment codes resolve only against the local SwiftData store — a student on a different device can't yet find a teacher-created assignment. The lightweight backend is Stage 3 on the roadmap.
- No auto-grading for free response. Free-response answers are persisted with the rubric; scoring is left
niluntil a human grades them. - No identity beyond a local profile. Sign in with Apple shows up alongside the backend in Stage 3.
- No proctoring, marketplace, payments, ClassKit, or school admin. All later stages, all deliberately out of scope for the alpha.
If any of those are dealbreakers for your use case, that's useful signal — please tell me.
Why share it now
Internal alphas exist to find the wrong assumptions before they become load-bearing. The questions I'm trying to answer with this drop:
- Does the student session feel calm, or does it feel like a cage?
- Is the teacher exam builder fast enough that someone would actually use it for a Friday quiz, not just a midterm?
- Where does the local-only model start to hurt — and which Stage 3 backend feature do real users ask for first?
If you teach, tutor, or run assessments of any kind and you'd like an alpha build, reach out — I'm onboarding a small first wave on TestFlight as Stage 1 stabilization lands.
More to come as Northline matures.
