Skip to main content

Android app

SLC Companion

Real students can now sign in with their real school account. Every build from v0.6.0 to v0.6.5 shipped with the backend switch forced off, so the app carried no server address, accepted only a built-in demo login, and filled every screen from sample data baked into the app. A mobile API now exists on the school’s real Payload backend and this is the first build to point at it: real sign-in, your real classes, homework, attendance and published grades, and a calendar merging your class sessions, your due dates and the school’s live Microsoft 365 calendar. Most screens will still look empty — the school records no assignments, grades or attendance yet, and the app shows the truth rather than inventing data.

BetaVersion 0.7.0 · build 26 · 2026-08-08✓ Latest recommended
Download APK0.7.0 · 106.6 MB

Requires Android 8.0+. You may need to allow “install from unknown sources”.

Scan to open on your phone

Version
0.7.0
Build number
26
Release date
2026-08-08
Release time
04:42:38Z
Channel
Beta
Min. Android
8.0
Build size
106.6 MB
Git commit
4bcab23

What’s new in 0.7.0

  • Version: 0.7.0
  • Build number: 25
  • Release date: 2026-08-08
  • Channel: beta

Summary

Real students can now sign in with their real school account.

Every build before this one — v0.6.0 through v0.6.5 — shipped with its backend switch forced off. The app carried no server address at all, accepted exactly one built-in demo login, and filled every screen with sample data written into the app itself. A parent or student typing their actual Spanish Language Center details was turned away.

That is fixed at both ends. A mobile API was built on the school's real Payload backend, and this build is the first to point at it. Sign in with the email and password the school issued and the app shows your classes, your homework, your attendance and the school's real calendar — read live from the same database the portal uses.

The built-in demo login no longer works, and the demo-mode notice on the sign-in screen is gone, because neither is true any more.

New Features

  • Real authentication. Sign in with your school account. Sessions survive

closing the app and refresh silently in the background; "Remember me" keeps you signed in for 30 days, otherwise 1 day.

  • Your real classes on the Courses tab, from your actual enrolment.
  • Your real homework, with your own submission and its status folded in.
  • Your real attendance and grades — grades appear only once a teacher has

published them, exactly as in the portal.

  • A real calendar merging your scheduled classes, your homework due dates and

the school's live Microsoft 365 calendar.

  • Change your password from inside the app. Doing so signs every other device

out, so a stolen session cannot survive a password change.

  • Sign out now actually ends the session on the server, not just on the phone.

Improvements

  • The sign-in screen shows no backend notice at all on this build. The demo-mode

warning added in v0.6.5 appears only in a build with no backend, so the screen is accurate in both cases.

  • Errors are specific and human: a wrong password, an account that is not a

student, an account not yet linked to a student record, and being offline each say what actually happened.

Bug Fixes

  • The app could not sign in a real account at all. Root cause was the build

script, which hard-pinned EXPO_PUBLIC_USE_LIVE_API=false and cleared the API address on every build, then moved .env.local aside so nothing could override it. Builds now default to the live API; an offline demo build is still one environment variable away.

Known Issues

  • Most screens will look empty, and that is correct. The school's database

currently holds no assignments, no grades, no attendance records and no submissions. The app shows the truth rather than filling the gap with invented data. Screens populate on their own as staff start recording that work.

  • There are no enrolled students in the system yet. The account you sign in

with must have the student role and be linked to a student record. Staff accounts are refused with an explanation — the Companion has no teacher surface.

  • Messages is empty. Portal messaging is keyed on staff-oriented participant

rules; wiring it to the app safely needs its own pass, so the inbox returns nothing rather than something half-scoped.

  • Notifications are empty and there is no push. No device-token or FCM/APNs

infrastructure exists yet.

  • The six Jalapeño screens are still not a real AI. The tutor endpoint returns

an honest holding reply. Switching on the real tutor is a deliberate product and cost decision, not a plumbing one.

  • Homework file upload is not wired to the new API in this build.

Breaking Changes

  • The built-in demo login no longer signs in. This build talks to the real

school backend, which has never heard of it. Anyone who needs the offline demo can build with EXPO_PUBLIC_USE_LIVE_API=false.

Future Work

  • Student messaging, with proper participant scoping.
  • Homework upload against the real submissions collection.
  • Push notifications (device tokens + FCM/APNs).
  • Decide whether to switch on the AI tutor, or remove those screens.
  • Per-lesson curriculum, if the school starts modelling lessons — course progress

currently reports attendance and homework completion only, because that is all the school actually records.

Developer Notes

API base URL: https://spanishlanguagecenter.com/mobile/v1

Served by the same Next.js app as the website and portal, so there is no separate deployment and no extra certificate. api.spanishlanguagecenter.com resolves to the same app and serves the same routes; the apex is baked into this build because the URL cannot change for already-installed copies and the apex cannot be removed without taking the website down with it.

Changed in this repo:

`` .env.production scripts/build-apk.sh ``

Backend added in the Payload repo (commit c2b9915):

`` src/lib/mobile/{auth,http,serialize,data}.ts src/collections/MobileRefreshTokens.ts src/app/(frontend)/mobile/v1/** (22 route files) ``

Access tokens are 15-minute HS256 JWTs; refresh tokens are opaque, stored only as a SHA-256 hash, rotated on every use, and a replayed token revokes the whole family. Verified end to end against the real database with a temporary student that was deleted afterwards: 33/33 checks, including cross-student isolation.

Known issues

  • Most screens will look empty and that is correct - the school currently records no assignments, grades, attendance or submissions, and the app shows the truth rather than inventing data. The account you sign in with must have the student role and be linked to a student record; staff accounts are refused with an explanation because the Companion has no teacher surface. Messages and notifications are empty (not wired yet, no push infrastructure). The six Jalapeno screens are still not a real AI - the tutor returns an honest holding reply. Homework file upload is not wired to the new API in this build. The built-in demo login no longer works. Installs as an update over v0.6.5 (same signing keystore).

Previous releases

Every past build stays available. Newest first.

  • v0.6.5Beta2026-08-08 · build 23Download (106.6 MB)
    Release notes
    • Version: 0.6.5
    • Build number: 23
    • Release date: 2026-08-08
    • Release time: 03:53:00Z
    • Git commit: 26357e5
    • Channel: beta

    Summary

    Honesty fix. Until this build the Sign-In screen displayed the line *"Connected to the SLC staging backend"* on every launch. That statement was hardcoded and unconditional — it was never checked against anything, and in every APK ever published it was false. The shipped app carries no backend address at all and talks to no server; it runs entirely on sample data built into the app. Anyone who tried to sign in with a real Spanish Language Center account was told their details did not match, with no explanation of why.

    This release replaces that message with the truth and makes it impossible for the misleading version to come back. The notice is now driven by the app's own backend switch: when there is no backend it reads "Demo mode — sample data only" in amber and states plainly that school accounts will not work and that nothing is saved. The moment a live backend is wired in, the notice disappears on its own and real accounts sign in normally — no demo wording can ever appear on a connected build.

    Nothing else changed. No screen, layout, colour, icon or piece of artwork was touched, and no data behaviour was altered.

    New Features

    • _None. This is a correctness release._

    Improvements

    • The Sign-In backend notice is now conditional on appConfig.useLiveApi

    instead of being hardcoded, so the screen can no longer contradict the build it ships in. A live build shows no notice and no demo credentials whatsoever.

    • The notice now uses the warning palette (amber) rather than the information

    palette (blue). A build that cannot reach the school's system is a caveat, not a neutral status line, and it should not look reassuring.

    • Both the sign-in screen header comment and the httpAuthService demo-credential

    comment now record why the gate exists, so the unconditional version is not reintroduced by a future edit.

    Bug Fixes

    • Sign-In screen claimed a backend connection that does not exist. Every

    published build (v0.6.0 through v0.6.4) displayed "Connected to the SLC staging backend" and "Real sign-in against synthetic staging data" while running fully offline against two hardcoded strings. Both lines are gone.

    • Rejecting a real school account gave no usable explanation. The screen now

    states up front that school accounts will not work in this build and why, instead of letting the user discover it through a failed login.

    Known Issues

    • This build still cannot sign in a real Spanish Language Center account. That

    is now stated honestly on the screen rather than hidden, but it is not fixed. The only accepted login remains the demo account shown on the sign-in screen.

    • Every screen is still filled with sample data built into the app. Homework,

    grades, attendance, classes, messages and progress are invented and are not read from the school's system.

    • The six Jalapeño screens (Today, Chat, Flashcards, Practice, Achievements,

    History) run on scripted replies. No AI model is contacted. The full AI backend exists in server/src/ai/ but has never been switched on.

    • "Forgot password" and "Change password" are placeholders — they validate input

    and then do nothing.

    • The "Explore Our School" web view still opens the legacy host

    site.spanishlanguagecenter.com. It works (the host permanently redirects to the apex) but is one hop longer than needed. Queued for the next build.

    Breaking Changes

    • _None._

    Future Work

    The real blocker is a backend, and it is a project rather than a build:

    1. Build a mobile API on the live Payload backend. It currently has none — no /auth/login in the shape the app expects and none of the twelve /my/* data endpoints. Either implement them on Payload, or repoint the existing server/ facade at the production database. 2. Publish `api.spanishlanguagecenter.com`. The address is referenced by .env.production but has no DNS record and no Caddy entry, so it resolves to nothing today. 3. Enrol real students. The school database currently holds no real student records — only demo and test-harness rows. A student companion app has nobody to sign in until that changes. 4. Then rebuild with `EXPO_PUBLIC_USE_LIVE_API=true`. The notice added in this release disappears automatically at that point; no further edit to the sign-in screen is required. 5. Decide whether to switch on the written-but-dormant AI tutor, speaking partner and study coach, or remove those six screens so scripted replies are not mistaken for a real tutor.

    Developer Notes

    Changed files:

    `` src/app/(auth)/sign-in.tsx src/services/auth/httpAuthService.ts ``

    The notice is gated on IS_PROTOTYPE, exported from src/constants/config.ts as !appConfig.useLiveApi. scripts/build-apk.sh pins EXPO_PUBLIC_USE_LIVE_API=false and moves .env.local aside for the duration of the build, so IS_PROTOTYPE is true in this APK and the demo notice shows. A build produced with EXPO_PUBLIC_USE_LIVE_API=true and a reachable EXPO_PUBLIC_API_BASE_URL renders no notice at all.

    Verified before release: tsc --noEmit clean, ESLint clean on both changed files, and a repository-wide search confirms no remaining occurrence of "staging backend", "Connected to", or "synthetic" in any user-facing string.

  • v0.6.4Beta2026-07-23 · build 16Download (106.6 MB)
    Release notes

    The welcome screen now uses the approved artwork itself. Until this build the front door *recreated* the approved design in code. It now ships the approved image as the production asset — cropped for Android, never redrawn.

    What changed

    Three pieces are cropped verbatim out of the approved welcome artwork (App Image landing page.png) and shipped as app assets:

    | Asset | What it is | |---|---| | assets/brand/slc-logo.png | the "Spanish Language Center" wordmark | | assets/brand/welcome-hero.png | the mascot circle + both petal fans | | assets/brand/welcome-bottom-curves.png | the layered gold + red bottom curves |

    Nothing decorative is drawn in code any more:

    • the petal fans were previously RN Views generated from a spec table of

    angles, lengths and colours — they are now the artwork's own petals;

    • the bottom curves were three overlapping rounded Views — they are now the

    artwork's own curves;

    • the mascot was a separate cut-out PNG re-composited into a drawn circle —

    it now arrives inside the artwork, in its own frame;

    • the logo was an old low-resolution copy with a washed-out fringe — it is

    now the crisp wordmark from the approved art.

    The canvas colour was set to the artwork's own background (#FEF6ED) so the crops sit on it with no visible seam.

    What was preserved

    Layout, logo placement, button geometry and labels, typography and spacing are unchanged. The headline (*¡Bienvenido!*), tagline, both buttons (Sign In, Explore Our School) and the footer wordmark remain real components, so they stay tappable, screen-reader accessible and translatable — they were not flattened into the image. The hero keeps the width footprint it had before and takes its height from the crop's own proportions, so the artwork is never stretched or squashed.

    One deliberate difference from the mockup: the second button keeps its existing label "Explore Our School" (the mockup reads "Visit Our Website"), because the brief was to preserve the existing buttons. It is a one-line change if the mockup wording is preferred.

    Also fixed

    The cropped curve strip is much shorter than the oversized shapes it replaced, so it is now offset by the bottom safe-area inset — otherwise an opaque system navigation bar swallowed almost all of it.

    What did NOT change

    Only the welcome screen's artwork. No other screen, feature, navigation, backend, permission or configuration change. The launcher icon shipped in v0.6.3 is untouched.

    Install

    Same signing keystore as every prior beta, so this installs straight over v0.6.3 (build 15) as an update — no uninstall needed.

    Verified

    • TypeScript 0 errors · ESLint 0 errors · Jest 51/51 pass.
    • APK signed (apksigner v2, CN=Spanish Language Center) — same certificate

    SHA-256 as builds 12–15, so upgrades work.

    • Web render at 360×800, 390×844 and 430×932: 0 horizontal overflow,

    0 page errors.

    • Installed and launched on a real Android 13 device (Redroid): versionCode 16 /

    versionName 0.6.4, 0 FATAL exceptions; the welcome screen renders the approved artwork with the full gold + red curve visible above the navigation bar; Sign In opens the sign-in screen and Explore Our School opens the live school website in the in-app browser.

  • v0.6.3Beta2026-07-23 · build 15Download (106.2 MB)
    Release notes

    New launcher icon. The app's home-screen icon is now the newly approved round Spanish Language Center badge — red ring, cream field, the sombrero mascot, and *LEARN · SPEAK · CONNECT* around the bottom.

    What changed

    • Launcher icon replaced on every Android density, in all four forms the

    system can ask for: - adaptive (Android 8+) — the badge sized to the 72/108 mask viewport, so a round launcher mask lands exactly on the badge's red ring and a squircle/rounded-square mask leaves the badge sitting on the brand cream; - round and legacy (Android 7 and below) — the badge full-bleed; - monochrome — a black silhouette for Android 13+ themed icons.

    • The Expo source PNGs (assets/images/*) and the web favicon were regenerated

    from the same artwork, so a future expo prebuild reproduces these icons.

    What did NOT change

    Nothing else. No screen, feature, navigation, backend, permission or configuration change — Sign In, Explore Our School, the Jalapeño Smart Coach, homework, grades, attendance, messaging and calendar all behave exactly as in v0.6.2.

    Install

    Same signing keystore as every prior beta, so this installs straight over v0.6.2 (build 14) as an update — no uninstall needed.

    Verified

    • TypeScript 0 errors · ESLint 0 errors · Jest 51/51 pass.
    • APK signed (apksigner v2, CN=Spanish Language Center) — same certificate

    SHA-256 as build 12/13/14, so upgrades work.

    • The launcher foreground packaged in the APK is byte-identical to the freshly

    generated art (sha256 match).

    • Installed and launched on a real Android 13 device (Redroid): versionCode 15 /

    versionName 0.6.3, 0 FATAL exceptions, App info shows the new icon, welcome screen renders normally.

  • v0.6.2Beta2026-07-22 · build 14Download (106.3 MB)
    Release notes
    • Version: 0.6.2
    • Build number: 14
    • Release date: 2026-07-22
    • Git commit: bfc1660
    • Channel: beta
    • Package: com.spanishlanguagecenter.companion
    • Minimum Android: 8.0 (Oreo)

    Summary

    A user-experience polish of the app's front door. The welcome screen now matches the approved Spanish Language Center artwork, the built-in demo is hidden from users, and a new Explore Our School button opens the official school website *inside* the app. The launcher icon was redesigned from the approved icon art. No student features, authentication, or backend behavior changed.

    Improvements

    • Welcome screen matched to the approved design. Warm cream canvas, official

    SLC colors and typography, the Jalapeño mascot centered in a soft circular frame, and symmetric colorful splash-petal side-fans (red · green · gold · cream · olive) replacing the previous decorative burst. Corrected spacing and button geometry; responsive with full safe-area support.

    • New "Explore Our School" button with a globe icon (replaces the old

    "Explore Demo (Phase 1)" button).

    • In-app website experience. Tapping *Explore Our School* opens the official

    Spanish Language Center website in a native in-app browser — a branded green header with Back and Close, a loading progress bar, graceful network-error handling with retry, and natural scrolling. It never leaves the app or exposes browser chrome; only genuinely external links (email, phone, off-site) open in the system browser.

    • Redesigned launcher icon built from the approved icon artwork: a clean

    rounded-square adaptive icon (foreground/background/monochrome layers) plus legacy and round variants, crisp at small launcher sizes.

    Changes

    • Demo mode is hidden from users. Every visible demo button and all "Phase 1"

    wording were removed from the welcome and sign-in screens. All demo code and navigation are preserved and can be re-enabled at any time with the EXPO_PUBLIC_DEMO_MODE=true configuration flag.

    Bug Fixes

    • Fixed a startup crash path in the new WebView screen (Fabric prop type

    mismatch) — the embedded website now opens reliably.

    Unchanged

    • Sign In goes to the real SLC portal login every time (no placeholder or

    demo pages); the authentication flow is exactly as before.

    • No changes to Jalapeño AI, the student portal, homework, grades, attendance,

    messaging, calendar, Smart Coach, backend APIs, or the public website itself.

    Known Issues

    • Ships with demo data (EXPO_PUBLIC_USE_LIVE_API=false); live sign-in to the

    school backend is pending a public API endpoint.

    • The app is portrait-locked and light-themed by design.

    Installation (testers)

    1. On your Android phone, open the download page and tap Download APK (or scan the QR). 2. If prompted, allow installing apps from this source (Settings → Install unknown apps). 3. Open SLC Companion. Tap Explore Our School to browse the school site in-app, or Sign In to reach the portal login.

  • v0.6.1Beta2026-07-22 · build 13Download (105.5 MB)
    Release notes
    • Version: 0.6.1
    • Build number: 13
    • Release date: 2026-07-22
    • Git commit: d85ce3b
    • Channel: beta
    • Package: com.spanishlanguagecenter.companion
    • Minimum Android: 8.0 (Oreo)

    Summary

    Redesigned the welcome screen with the official Spanish Language Center visual style, improved Jalapeño presentation, corrected the mascot transparency issue, and refined the mobile layout. No application features or backend behavior were changed.

    Improvements

    • New warm-cream welcome screen in the official SLC style: centered logo on

    the cream canvas, Jalapeño in a soft circular frame with colorful splash artwork, an elegant serif *¡Bienvenido!* greeting, a red Sign In pill and a red-outline Explore Demo (Phase 1) button, and layered decorative curves at the bottom.

    • Fixed the mascot transparency. The waving Jalapeño now uses a genuinely

    transparent asset — the gray-and-white checkerboard that showed behind the old image is gone.

    • Refined, responsive layout. The whole screen fits on common Android phones

    with proper status-bar / navigation-bar safe-area handling, and scrolls only on unusually short devices.

    Bug Fixes

    • Removed the baked-in fake-transparency checkerboard from behind the welcome

    mascot.

    Known Issues

    • Ships with demo data; live sign-in to the school backend is pending a

    public API endpoint.

    • AI replies in this beta use built-in sample responses (the live server-side

    Gemini tutor runs when the app is pointed at a live facade).

    Breaking Changes

    • None.

    Future Work

    • Public API endpoint + real sign-in for testers.
    • Play Store internal-testing track.

    Installation (testers)

    1. On your Android phone, open the download page and tap Download APK (or scan the QR). 2. If prompted, allow installing apps from this source (Settings → Install unknown apps). 3. Open SLC Companion and explore — no login required in this beta.

  • v0.6.0Beta2026-07-21 · build 12Download (105.4 MB)
    Release notes
    • Version: 0.6.0
    • Build number: 12
    • Release date: 2026-07-21
    • Git commit: 959c24e
    • Channel: beta
    • Package: com.spanishlanguagecenter.companion
    • Minimum Android: 8.0 (Oreo)

    Summary

    First public beta of the SLC Companion — the Spanish Language Center's student mobile app. This build packages the full Phase 6 experience for real-device testing: the daily dashboard, courses, calendar, messaging, grades, attendance and progress, and Jalapeño, your AI Spanish study coach. So testers can explore everything without a login server, this beta ships with a built-in demo student (María González, B1) — every screen is fully interactive offline.

    What to try

    • Home — today's class, homework, progress and quick actions.
    • Jalapeño Smart Coach (tap the floating chili) — the Today briefing with

    your daily goal, study plan, classes, homework due soon and quizzes.

    • Practica Español — a conversation held entirely in Spanish with gentle

    corrections.

    • Flashcards — spaced-repetition vocabulary review.
    • Achievements & streak — study-streak tracking and milestone badges.

    Improvements

    • Signed, installable release build with in-app version/build info (Profile → About).
    • Offline demo mode so the app is fully usable on any device for evaluation.

    Bug Fixes

    • None (packaging release — no application feature changes this phase).

    Known Issues

    • Ships with demo data; live sign-in to the school backend is pending a

    public API endpoint (planned next).

    • AI replies in this beta use built-in sample responses (the live server-side

    Gemini tutor runs when the app is pointed at a live facade).

    Breaking Changes

    • None.

    Future Work

    • Public API endpoint + real sign-in for testers.
    • Play Store internal-testing track.
    • Push notifications (class/homework/streak reminders).

    Installation (testers)

    1. On your Android phone, open the download page and tap Download APK (or scan the QR). 2. If prompted, allow installing apps from this source (Settings → Install unknown apps). 3. Open SLC Companion and explore — no login required in this beta.