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.
Requires Android 8.0+. You may need to allow “install from unknown sources”.
Scan to open on your phone
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.
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
httpAuthServicedemo-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/loginin the shape the app expects and none of the twelve/my/*data endpoints. Either implement them on Payload, or repoint the existingserver/facade at the production database. 2. Publish `api.spanishlanguagecenter.com`. The address is referenced by.env.productionbut 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 fromsrc/constants/config.tsas!appConfig.useLiveApi.scripts/build-apk.shpinsEXPO_PUBLIC_USE_LIVE_API=falseand moves.env.localaside for the duration of the build, soIS_PROTOTYPEis true in this APK and the demo notice shows. A build produced withEXPO_PUBLIC_USE_LIVE_API=trueand a reachableEXPO_PUBLIC_API_BASE_URLrenders no notice at all.Verified before release:
tsc --noEmitclean, 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.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.
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 prebuildreproduces 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.
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=trueconfiguration 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.
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.
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.
