- Programme data is static JSON, refreshed on a timer/app-foreground/manual pull — there's no push-based "the schedule just changed" signal.
- User settings and favorites are stored locally with no cross-device sync.
- Local notifications are fully cancelled and rebuilt on every relevant change (favorites/settings/data), not incrementally diffed — fine at the current
MAX_SCHEDULED_NOTIFICATIONScap (180) but worth knowing if that cap or the rebuild frequency ever becomes a real cost. - The "Push notifications" toggle in
SettingsScreenis a disabled placeholder (value={false},disabled) — there's no push notification backend or token registration anywhere in the app; only local (on-device) notifications are implemented. Alert.alerton web is a monkey-patch (src/utils/webAlertPolyfill.ts) overwindow.confirm/window.alert, which only supports a binary confirm/cancel — any call site written with 3+ buttons would degrade to picking one "action" button and one "cancel" button, silently dropping the others.usePwaInstallPrompt's iOS detection (/iPhone|iPod/) excludes iPad, which reports a desktop Safari user agent — iPad Safari users won't see the manual "Add to Home Screen" instructions.AppTabs.native.tsxrendersnullbriefly on non-iOS native platforms while tab icons are resolved asynchronously (resolveAndroidIcons) — a momentary blank tab bar on cold start.WIFI_INFO_URLinsrc/config/conference.tsis a per-event URL (currently pointing at a specific hash-looking path underep2026.europython.eu) that needs manual updating for each new conference — it isn't derived fromCONFERENCE_YEARS/year like the programme data URLs are.CoCScreen'sWebViewonly allows the first same-origin navigation (onShouldStartLoadWithRequest), so any in-page links on the CoC site beyond the initial load won't work inside the app — this is deliberate (keeps the WebView scoped to the CoC page) but worth knowing if the CoC site's structure changes.
- New conference years require updates to
src/config/conference.ts(CONFERENCE_YEARS,CONFERENCE_METAincluding time zone, andWIFI_INFO_URL), plus validatingpreferredRoomOrderagainst the new venue's room names. - If the upstream programme JSON shape changes, update
src/types/raw.tsandsrc/services/conferenceTransform.tstogether, and bumpSCHEMA_VERSIONinsrc/config/conference.tsso old cached payloads aren't reused (see Data and state). - If push notifications are ever implemented, they'd need a backend (token registration + a push service) — nothing in this repo currently talks to one; the Settings UI slot already exists but is a no-op.
- Navigation may expand if new tabs or deep-linked entry points are introduced — remember there are three navigation-fallback systems (
useAppNavigation,useNotificationDeepLink,useUrlDeepLink) to keep in sync (see Architecture). useUrlDeepLink's universal links (https://ep{year}.europython.eu/...) won't actually reach the app until EuroPython hostsapple-app-site-association/assetlinks.jsonfor those hosts — this is coordination outside this repo, not something to fix here (see Configuration).- A test runner could be added (see Testing) —
src/services/conferenceTransform.ts,src/utils/schedule.ts, andsrc/services/guards.tsare pure and would be the easiest first targets.
- UI polish in
src/components/and theming viasrc/theme.ts. - Home screen content and onboarding copy in
src/data/. - Additional session type labels/colors in
src/data/sessionTypes.ts. - Notification lead-time options (
NOTIFICATION_LEAD_OPTIONSinsrc/config/constants.ts). - New screens added through the existing stack configuration flow (see Navigation).