← jeema.run
JEEMA
Updates
App release notes and changes.
Guided Tour for New Users
- New users now get a short guided tour the first time they use the app. A friendly tortoise mascot pops up in a card along the bottom of the screen and introduces Jeema — explaining that ranked runs pair you with an opponent at your level for a 5 km race, and that winning earns MMR to climb the leaderboard and divisions.
- The welcome walks through the home page — where you can start a ranked run to queue for a match, or start a normal run if you just want to run without racing.
- After that, the first time you open each main tab — Ranked, Activity Feed, Stats, and Profile — a card slides up explaining what that page does. Each tip is dismissed with the arrow, and the whole tour runs only once.
Design Refresh
- Jeema now uses Nunito — a rounded, friendlier typeface — across the whole app, from headings and big numbers to body text, for a warmer, more approachable look. Live run timers keep fixed-width digits so they stay steady as they tick.
- The Stats page has been reworked. It now opens with a streak card front and centre — a flame with your week-streak count, Duolingo-style — replacing the old season header. Tap it to expand a full breakdown of the runs in your current streak.
- Text, numbers, cards, and buttons are noticeably larger across the Stats page and the social feed, so everything's easier to read at a glance.
- The runs count on the Stats page is now tappable — it opens your full run history.
- Updated the profile tab icon to a cleaner filled-person glyph, consistent with the other tab-bar icons.
Ranked Results Reveal
- Finishing a ranked run now plays a results sequence: a VICTORY or DEFEAT banner lands with a haptic, then your rank panel appears — tier emblem, division, and MMR — with the promotion bar animating from your pre-run MMR to your new value while the number counts up or down.
- Crossing a division or tier boundary triggers a bigger moment: the bar fills (or drains) completely, then a full-screen burst reveals your new rank emblem with a PROMOTED or DEMOTED banner before the bar settles into your position in the new division.
- After the reveal, your run's stats page (route, splits, and totals) opens automatically, followed by the share-to-feed page — so the post-run flow is always result → stats → share.
- The same reveal now plays when you open the phone app after finishing a standalone Apple Watch ranked run. It's queued safely, so even if the run synced while the app was closed, the animation, stats page, and post-to-feed prompt play in order on your next open.
- Placement runs show the win/loss reveal without an MMR bar, since MMR isn't assigned until placement completes.
- Refreshed the VICTORY / DEFEAT typography on the reveal, the mid-run "ranked complete" card, and the share page to a bolder, cleaner display style.
Ranked Page
- Added a tier ladder card beneath your rank card. It lays out all five tiers in order — Tortoise, Rabbit, Gazelle, Cheetah, and Falcon — with your current tier highlighted in colour and the rest shown in muted greyscale, so you can see the whole climb at a glance.
- A segmented progress bar underneath fills through the tiers up to your position: tiers you've already passed are full, your current tier fills to how far you are through its MMR band, and the tiers ahead sit empty. It animates in on load and whenever your MMR changes.
Home Screen
- The distance and streak cards on the home screen now show a small chevron, so it's clear they can be tapped to expand — the distance breakdown or the streak calendar. The chevron flips to point up while a card is open, and the static win-rate card is left unmarked since it doesn't expand.
Social Feed
- Tidied the stats slide on ranked feed posts: the VICTORY / DEFEAT result now sits lower with more breathing room at the top of the card (its MMR change stays aligned beside it), and the run's date and time have moved to a footer pinned along the bottom of the card.
Elevation Accuracy
- Elevation gain and loss are now measured with your device's barometric altimeter — the same pressure sensor Apple's Workout app and Strava use — on both iPhone and Apple Watch. It reads altitude changes at a resolution GPS can't get close to.
- The measuring algorithm was rebuilt as well. The old approach compared each GPS fix to the previous one, which let random altitude wobble pile up as fake climb on flat routes while discarding real, gradual hills whose per-second rise was too small to register. The new approach smooths readings over a trailing window and only counts movement once it clearly leaves the noise band — flat runs now read near zero, and long steady climbs are captured in full.
- Devices without a barometer fall back to GPS altitude, run through the same smoothing so it no longer inflates.
- The Apple Watch previously counted every upward wobble with no filtering at all, so watch runs should see the biggest improvement.
- You may notice lower elevation numbers than before on flat and rolling routes — that's the phantom gain disappearing, not climbing going missing.
Sharing
- You can now take a photo with the camera directly from the share-to-feed screen — on normal runs, ranked runs, and watch-run prompts — alongside picking from your photo library. Camera shots get a small ✕ so you can retake them, and the existing five-photo limit covers both sources together.
- Runs you didn't post at the time can now be shared later: any run in Run History that isn't on your feed shows a POST TO FEED button (and a swipe shortcut) that opens the full share screen — caption, photos, camera, route, and stats included. Handy if you accidentally closed the share page after a run.
- Once a run is posted, the button disappears from its history card.
Account
- You can now delete your account from Profile → Delete Account. This permanently removes everything server-side — your profile, runs, posts, ranked history, photos, and sign-in — and can't be undone. A confirmation step guards against accidental taps.
Privacy & Analytics
- Screens are now named in analytics, so usage and friction can be traced to a specific page instead of a generic container. This also makes rageclick reports actually point at the page involved.
- Fixed sign-ups via Apple being recorded as sign-ins, so new-user numbers are now accurate.
- Added session replay (with text, images, and inputs masked for privacy) to help diagnose UI issues like mis-taps.
- Expanded the app's privacy manifest to declare the data Jeema collects — account info, location, fitness, photos, and usage analytics — none of it used for cross-app tracking.
App Store Release
- Housekeeping for the public release: marked the app as using only exempt encryption (standard HTTPS), so submissions no longer prompt for export compliance, and aligned build numbers across the app, widget, and watch.
Run Splits
- Runs now show per-kilometre split graphs on their stats screen: a bar for each kilometre's pace, with your average heart rate for that kilometre drawn as a line over the top on its own scale, so you can see how your effort and pace tracked across the run.
- Your fastest kilometre is highlighted, and a final part-kilometre (when your run isn't a whole number of km) is shown separately.
- Heart rate is only shown for runs recorded with an Apple Watch; phone-only runs show the pace graph alone.
- Splits appear on runs recorded from this update onward — older runs didn't capture the per-point data needed to draw them, so their stats screen shows the map and totals without the graphs.
Run Stats
- You can now open a run's full stats — route map, distance, pace, time, elevation, heart rate, and the new split graphs — straight from the run-complete screen with a new "View Splits & Stats" button, on both normal and ranked runs.
- Tapping any run in Run History now opens that same stats screen. Previously a run's detailed stats could only be seen from the social feed.
Social Feed
- Ranked posts now show a head-to-head: the runner's 5 km race time against their opponent's, with the faster runner marked. The MMR gained or lost in the match is shown alongside the VICTORY or DEFEAT result.
- The always-visible card beneath each ranked post now shows the two race times side by side with the MMR change, so you can read the result without swiping across to the stats slide.
- The runner's row is labelled with their name (not "you"), so the comparison reads correctly when you're viewing someone else's post.
- When an opponent's time isn't available for an older run, the post falls back to showing just the runner's race time as before.
Friend Profiles
- Redesigned the profile page top to bottom. A new header leads with a larger profile photo, name, and quick chips for when they joined and how many runs they've logged. As you scroll, the header shrinks into the navigation bar so the person's photo and name stay visible the whole way down.
- Rebuilt the rank card into a clear dashboard: tier emblem and MMR up top, a wins / losses / win-rate strip, and a promotion bar that fills toward the next division. The bar now reads clearly (the old one was nearly invisible).
- New career bar shows total distance, total runs, and total hours at a glance.
- New "you vs them" card compares your stats against theirs — this week's distance, fastest 5 km, and total distance — with the leader marked on each row. (Only shown when viewing someone else's profile.)
- Recent runs now show a small route preview on each row.
- Ranked runs in the recent runs list show the MMR gained or lost alongside the WIN or LOSS badge and opponent name, and tapping one opens a head-to-head card comparing both runners' 5 km times with a dedicated MMR change row.
- Removed the duplicate username that previously sat at the very top of the page.
Maps
- Every map in the app now uses a light style with a deep-blue route line, replacing the previous dark map with a white line. This covers the social feed, ranked match history and match detail, friend-profile run detail, run history and post route previews, and the Apple Watch share-to-feed prompt — so routes look consistent everywhere.
Ranked Data Visibility
- Opponent finish times and MMR changes now appear on other players' ranked posts and profiles, not only your own. Previously this information could only be read for your own runs, so it stayed hidden whenever you viewed a friend's post.
- This applies to existing ranked posts as well as new ones, wherever both runners' 5 km times and the MMR change were recorded. (A number of older runs recorded before these details were saved will still show the simpler view.)
Ranked Page
- Redesigned the Ranked page to match the cleaner look used across the rest of the app. The rank card now leads with your tier emblem and MMR on a soft tier-tinted card, with a wins / losses / win-rate strip and an easy-to-read promotion bar that animates toward your next division.
- Match history is now a list of clean cards — each shows a WIN, LOSS, or PLACEMENT badge, your opponent, your 5 km time against theirs, and the MMR gained or lost, all at a glance.
- Tapping a match opens a redesigned detail sheet with a head-to-head time card (the winner marked), your run stats, and a dedicated MMR change card.
- The placement progress card and the "About ranked" info sheet were refreshed to match, and the "Queue for Ranked Run" button is now a single clean action.
Stats Page
- The Stats page has a new time-period picker — Week, Month, Season, or All Time — that filters the whole page, so every number and chart reflects the window you choose.
- A new summary card leads with your total distance for the period, with runs, average pace, time run, and elevation beneath it. Each figure shows how it compares to the previous period (for example "▲ 12% vs last week") — green when you've improved, amber when you've slipped. All Time shows no comparison, as there's no prior period to measure against.
- A new distance chart you can switch between the last 4 weeks, 12 weeks, or the past year — weekly bars for the shorter ranges, grouped into months for the year — with total, best, and average figures above it. Tap any bar to read its exact distance, and tap anywhere else to dismiss it. Before you've logged any runs it shows a clear empty state instead of placeholder data.
- Restyled the whole page to a clean monochrome look — the old pastel cards are gone, replaced by white cards with soft shadows and a small splash of colour kept just on each metric's icon.
- Removed the side-to-side scrolling — your personal bests sit in a tidy grid. The streak is now a single Weekly Streak card you can tap to expand a full breakdown of your current streak: total runs, morning / midday / evening runs, total distance, total time, and your longest run, along with the date it began.
- Removed the mileage goal card.
- Replaced the Insights grid's ranked win-rate stat with Average Climb — your average elevation gain per run for the selected period. Win rate is a competitive number that already lives on the Ranked page; average climb is a running stat that fits here and is always populated.
- The floating "Start a Normal Run" button has moved to the home screen (see Home Screen).
Home Screen
- The home screen now opens with a greeting and your two run actions front and centre — Start a Ranked Run (primary) and Start a Normal Run — so you can begin a run the moment you open the app. Starting a run now lives here: the "Start a Normal Run" button on the Stats page and the "Queue for Ranked Run" button on the Ranked page have been removed, with both actions consolidated onto Home.
- Refreshed the rank, stats, and leaderboard cards with softer rounded corners, lighter borders, and subtle shadows for a cleaner look on both themes.
- Sharpened the rank card's tier name to the same bold display type used on the Ranked page.
- The "RUNS THIS WEEK" counter on the rank card now counts all of your runs for the week, not just ranked ones. It resets on Monday, with Sunday counting as the last day of the week.
- Profile photos on the home screen and leaderboard now use the shared image cache, falling back to your initial while they load and no longer flashing as you scroll.
Your Profile, Run History & My Posts
- Redesigned your profile page to match the friend profile: the header now carries a soft, rank-tinted background with your tier colour ringing your photo, and the settings cards use lighter hairline borders and gentle shadows for a calmer, more cohesive look.
- Rebuilt the Run History and My Posts cards. The old dark header band is gone — each run is now a clean white card with a rounded route preview, a RANKED or NORMAL pill, and clear stats, with soft shadows throughout.
- Both screens now show a tidy light empty state when you have no runs or posts yet.
Run Screens & Apple Watch
- The Apple Watch ranked race screen now shows your distance. It sits large, right under the elapsed time at the top of the screen, so you can see how far you've run at a glance.
- Live pace during a run is now your average pace for the whole run (total time over total distance) instead of a jumpy real-time reading, on every run screen — the Apple Watch normal and ranked runs and the phone's normal and ranked runs.
- The Apple Watch no longer buzzes every time the lead changes during a ranked race. It now only vibrates on a decisive lead change (more than 20 metres), so a close, back-and-forth race no longer taps your wrist constantly.
- Apple Watch runs now record their location, so they show their place name in Run History like phone runs do. Previously watch runs were saved without one. (Applies to watch runs recorded from this update onward.)
Distance Accuracy
- iPhone runs now measure distance using Apple's fused motion sensor — the step counter blended with GPS, the same source the Fitness app uses — instead of adding up raw GPS points. Summing raw GPS tends to read long on longer runs, because GPS jitter adds zig-zags that never cancel out, so distances could come out several percent over; the fused measurement is far steadier and brings iPhone distances much closer to dedicated GPS watches. (Applies to runs recorded from this update onward.)
- If motion data isn't available, or you decline the Motion & Fitness permission, runs fall back to the previous GPS measurement so nothing breaks.
Appearance
- The app is now light throughout. The run detail, comments, and social feed screens — the last places still using the old dark theme — now match the clean light look used everywhere else in the app.
- The run-type label now reads "NORMAL" everywhere; the older "quest" wording has been removed.
Image Loading
- Avatars and feed photos now persist to disk between app launches. An image that loaded on a previous run appears instantly on the next cold start instead of being downloaded again — previously images were only kept in memory for the current session.
- If the system clears stored images to free up space, the app simply re-downloads them as needed.
Run Time Formatting
- Run and race times now use one consistent format across the app — for example "25m 04s", or "1h 02m 15s" once past an hour — on the Stats page, match history, the ranked match detail, and the Apple Watch run summary.
- Simplified the "Queue for Ranked Run" button.
Apple Watch Ranked Runs
- The Apple Watch app can now run ranked races completely standalone, without your phone nearby. It races against a pool of cached real-player ghosts pushed from your phone, falling back to local bots when needed.
- The watch home screen has been reworked into two clear buttons — Start Ranked and Start Normal — with a tortoise mark. Ranked stays disabled with a hint until you have completed your placement run.
- Starting a ranked run now follows a proper flow: tap Ranked, a "finding opponent" search, a ready-up, a 10-second countdown, then the run. Phone-initiated matches share the same ready and countdown.
- Bonus mode lets you keep running past the ranked 5 km. A finish banner shows your result while tracking continues, and your exact 5 km split is captured so bonus distance never corrupts your race time.
- The watch theme now mirrors the iPhone app (cream monochrome or forest night) via a synced palette, and the watch app icon matches the phone icon.
- Opening the watch app now pulls a fresh ghost pool, placement status, and theme from your phone rather than waiting on push timing.
Apple Watch Race Screen
- Redesigned the ranked race screen. The two player progress bars have been removed in favour of a single hero number showing how far ahead or behind your ghost you are.
- Pace is now larger, and the "remaining" readout has been replaced with your live heart rate.
- The ahead indicator is now green to match the red behind indicator.
- Redesigned the free-run watch screen too: a larger time and distance, plus a live heart-rate and pace row so heart rate, pace, distance, and time are all visible at once. The stats page now leads with those four metrics, with elevation as a slim footer.
Heart Rate
- Apple Watch runs now capture average and max heart rate and sync them to your phone, where they are saved with the run.
- Average and max heart rate now appear on the post-run summary, in match history detail, and on feed run detail. Tiles only show when heart-rate data exists, so phone-only runs without a sensor stay clean.
- Live heart rate is now shown on the watch free-run and ranked race screens, with average and max styled in red on summaries to match.
Lock Screen Live Activity
- Ranked races now show a Live Activity on your Lock Screen and in the Dynamic Island. It displays you versus your ghost opponent with dual progress bars to 5 km and your live lead and elapsed time.
- The activity persists through bonus mode and ends with a WIN or LOSS and your finish time.
Push Notifications
- Likes, comments, comment replies, and friend requests now arrive as real push notifications even when the app is closed, replacing the old in-app polling that only worked while the app was open.
- A reply notifies the author of the comment you replied to, while a new top-level comment still notifies the post owner.
Comment Replies
- You can now reply to a comment from the feed's comment sheet. Replies appear indented beneath the comment they answer.
- A "Replying to @user" banner appears above the composer so it is clear who you are replying to.
Apple Health
- Phone-recorded runs (both normal and ranked) now save to Apple Health as workouts, including distance, an estimated active-energy burn, and your GPS route.
- Jeema asks for Health permission once after onboarding, and it is entirely optional.
- Watch runs are intentionally excluded here because the watch already writes them to Health, avoiding duplicates.
- Fixed the Apple Health badge on your profile always showing "Not Linked"; it now reflects your real connection status.
My Posts
- A new My Posts page on your profile lets you view, edit (caption and photos), and delete runs you have shared to the feed.
- My Posts and Run History cards now show a route preview map of each run.
- Fixed multi-photo feed posts dropping photos when you shared before they had finished loading.
Social Feed
- Fixed the feed route map appearing stretched and misaligned from the streets. Routes are now projected through MapKit just like match history, so they are correctly proportioned and aligned to the roads. This fix applies retroactively to every run already in the feed.
- Runs shared from this build now upload their full-resolution route, so feed maps match the match-history detail exactly.
- Feed and comment avatars now cache and retry transient network failures, fixing avatars getting stuck on the fallback initial after a flaky connection or while scrolling.
- Feed post photos now use the same cached image loader, so they no longer fail to load on a flaky network or while scrolling and keep their spinner and fallback states.
Ranked & MMR
- Ranked MMR now gently pulls toward the rating your actual 5 km pace implies, blended with the usual win/loss change. Misplaced players now reach their true rank in around 10–15 runs instead of 100 or more.
- The pull self-zeroes as you converge on your true rating, and DNFs or interrupted runs earn no pace credit so they stay pure losses.
- Fixed your fastest 5 km stat not updating from ranked runs. It now uses the exact 5 km crossing time rather than overall average pace, which was diluted when you continued past 5 km in bonus mode. The fix also applies to friend profiles.
Local Leaderboard
- Fixed the local leaderboard reverting to your device region after you ran abroad. Jeema now caches your GPS-derived country and reuses it, instead of letting a location-less sync overwrite it with the device region.
- On launch, the app reverse geocodes your most recent run's last GPS coordinate, so the local board follows where you actually ran even for runs recorded before this fix.
GPS & Pace Accuracy
- Watch distance now uses HealthKit's fused GPS and pedometer distance instead of summing raw location deltas, with the old method kept as a fallback.
- The phone now records every GPS fix and adds a stationary-jitter guard, so standing still no longer adds phantom distance.
- Live pace on both phone and watch is now a smoothed ~20-second rolling average rather than an instantaneous or whole-run figure, so it reacts naturally without jumping around.
Privacy & Analytics
- Restructured how Jeema handles analytics behind the scenes, with a cleaner internal setup and more reliable configuration in shipped builds.
Photo Sharing
- You can now attach up to 5 photos from your camera roll when sharing a run to the feed.
- Photos appear below the description field in the share composer on both the normal run and ranked run result screens.
- A thumbnail strip previews selected photos before you post.
- On the feed, swipe left on any post to browse the stats slide and then any attached photos. The map is always the first slide.
Social Feed
- Swiping left on a feed post now shows a stats slide before the photos, displaying distance, pace, duration, elevation, and race duration for ranked runs.
- The feed card always opens on the map slide when scrolling to a new post, even if you previously swiped to stats or photos on an earlier post.
- Like and comment buttons have moved below the map card so they no longer overlap the route view.
- The map and stats card now have a subtle black border for better definition.
- Stat labels updated: DIST is now DISTANCE, RACE is now RACE TIME, and TOTAL is now TOTAL TIME.
- Race and total times are now displayed in a cleaner minutes-and-seconds format (e.g. 36m 16s).
- Elevation is now labelled in metres (m) rather than gain.
- Removed the position indicator pip strip that appeared on the left side of the feed.
Friend Profiles
- Ranked runs in a friend's recent runs list now show a WIN or LOSS badge in green or red alongside the opponent's name.
- Tapping any run in a friend's recent runs list opens a detail sheet showing the route map and full run stats.
- The run detail sheet now respects the app's monochrome or colour theme instead of always appearing dark.
- The Add Friend button is no longer shown when viewing your own profile from the social feed.
Ranked Distance
- Removed elevation compensation from the ranked finish trigger. The 5 km finish now fires at real GPS distance, matching how Strava and other apps measure your run. Previously, elevation gain was adding up to several hundred metres of credit, causing Jeema to record faster times than your actual GPS distance warranted.
- Removed the elevation credit breakdown from match history rows and match detail sheets, as elevation no longer contributes to ranked distance.
Local Leaderboard
- Fixed the local leaderboard incorrectly grouping all players under the same country. The app now reverse geocodes your GPS location at the end of a ranked run to determine your country, rather than reading the device's region setting. Players whose phone is set to a different region than where they actually run will now appear on the correct local leaderboard after their next ranked run.
Bot Improvements
- Expanded the bot roster from 7 bots to one bot every 50 MMR, covering the full range from Tortoise through Falcon (MMR 50–14,000).
- Bot paces are interpolated from known pace-to-MMR anchors, so each bot runs at the speed a real player at that rating would run.
- The closest bot is now never more than 25 MMR away from any player, meaning races against bots should feel genuinely competitive rather than one-sided.
- Each bot still has a small per-match pace variance so no two races feel identical.
Run History
- Refreshed the run history screen to better match Jeema's current monochrome theme.
- Removed the large
Run History title from the sheet.
- Updated the
Done button to match the compact style used across other profile sheets.
- Added stronger black accents to each run card so distance, time, pace, and run type are easier to scan.
- Kept the page background light so the screen feels consistent with the rest of the app.
Friends
- Refreshed the Friends tab with a cleaner monochrome look.
- Replaced the old dark green styling with light grey backgrounds, white cards, black buttons, and clearer row borders.
- Search results, pending requests, and friend rows now use a more consistent card layout.
- Friend avatars and action buttons now better match the current Jeema theme.
Friend Requests
- Jeema can now show a notification when a new friend request is detected while the app is running.
- Friend request notifications use the sender's username so it is clear who wants to connect.
- Foreground notifications can now show as banners instead of being silently hidden while the app is open.
Ranked Match History
- Match history now shows when elevation has added ranked distance credit.
- Match details now include a clearer breakdown of GPS distance, elevation credit, and ranked effort distance.
- This should make hilly ranked runs easier to understand when the GPS distance appears slightly under 5 km.
- Fixed a race condition where match history could reload before the ranked result had finished writing to the server, causing the latest run to appear missing until the next app launch.
Ranked Data Reliability
- Fixed a bug where wins and losses could revert to a stale count after a ranked run if the result failed to write to the server. Wins and losses now always keep the highest value seen, so a network hiccup can no longer undo a recorded result.
- Fixed app launch sync to use the higher of two data sources when reconciling wins and losses, so a missed write on one path cannot overwrite a correct count from the other.
- Ranked results that fail to upload due to poor signal are now saved locally and retried automatically the next time a connection is available. No ranked run result should be permanently lost due to a bad connection.
Ranked System Info
- Added an info button to the top-right corner of the ranked card. Tapping it opens a sheet explaining what MMR is, how the 5 km ghost race format works, how MMR changes are calculated, and the full tier structure from Tortoise to Falcon.
- The ranked info sheet now includes a "FINISHING & DNFs" section explaining that you must physically complete the full 5 km to finish a race, that stopping before 5 km is a DNF and counts as a loss, and that continuing to run after 5 km still tracks all stats.
Ranked Race Times
- The bonus running screen now shows your locked 5 km race time on the result card while you continue running.
- The end-run result screen now shows a RACE TIME / TOTAL RUN split when you ran past 5 km, so your finish time is never confused with your total run time.
- The social feed now shows RACE TIME for ranked posts. If the runner continued past 5 km, both RACE and TOTAL times are shown.
- Match history rows now display the locked 5 km finish time instead of the total run duration.
- Match history detail view now shows RACE TIME (and TOTAL TIME when applicable). Pace is now calculated from the 5 km race time rather than the full run duration.
Social Feed
- Like and comment buttons on the social feed now use white for better contrast against the dark reel background.
- Liking a post now triggers haptic feedback. The same feedback fires when double-tapping to like.
- Fixed an issue where some users' avatars were not showing on the social feed even though the user had a profile photo set. Avatar and username lookups are now handled by separate focused queries, which avoids a PostgREST behaviour where fetching both columns together could silently drop the avatar for some rows.
Member Duration
- Fixed the "MEMBER FOR X DAYS" counter showing one day short. A user who joined today now correctly shows "MEMBER FOR 1 DAY".
Friend Profiles
- An "ADD FRIEND" button now appears on a user's profile when you are not yet friends. Tapping it sends a friend request.
- If a request is already pending, the button changes to "REQUEST SENT · TAP TO CANCEL" so you can withdraw it.
- If the other person has already sent you a request, a banner makes that clear.
GPS Distance Accuracy
- Fixed a bug where runs could show an extra 30–50 metres of false distance at the start. iOS delivers stale cached location fixes immediately when tracking begins, and these were being counted as real movement. The app now discards any fix whose timestamp predates the moment tracking started.
- The same stale-fix protection now applies after unpausing a run, preventing a burst of false distance from a cached location being measured against the pre-pause position.
- Tightened the GPS accuracy filter so only fixes with less than 25 metres of horizontal uncertainty are used for distance calculations (previously up to 50 metres was accepted). This reduces the path zigzag that caused Jeema to read ahead of other apps like Strava over longer runs.
Permissions
- Location and notification permissions are now handled during first-launch setup.
- Run screens no longer trigger surprise permission popups when starting a run.
- If location permission is not fully enabled, the setup screen now lets users retry or open Settings.
- If iOS does not show the
Always Allow popup, Jeema now gives clearer instructions to enable it from Settings.
- Notifications remain optional, but
Always Allow location is required for reliable run tracking.
Ranked Runs
- Players now appear on the leaderboard after completing their first placement run.
- Your first placement run now counts toward your running stats.
- Ranked runs now save to your stats as soon as the 5 km ranked result is completed.
- If you continue running after the ranked 5 km, the extra distance still updates the saved run.
- Apple Watch ranked completions now count toward stats even when only the ranked finish time is received.
Post-Run Results
- The ranked post-5 km screen has been simplified.
- Result cards now show a clear
VICTORY or DEFEAT state instead of comparing your time against the opponent's time.
- Win and loss cards now use softer theme-friendly green and red colors.
- Defeat text and supporting text are easier to read.
- The post-run copy now uses Jeema branding.
- The share-to-feed ranked result screen no longer uses the old gold theme.
Leaderboards
- Leaderboard visibility now starts after one placement run.
- Global, regional, friends, and division leaderboards all use the updated placement requirement.
- Tapping players from the leaderboard now opens their public profile view, not just friend profiles.
Player Profiles
- Player profiles now include a fuller stats view.
- Profile stats now show mileage, season/all-time stats, elevation, time run, streaks, and personal bests.
- The mileage card on player profiles now matches the stats page design.
- Public player profiles no longer show private or editable goal controls.
Previews And Development Fixes
- Fixed ranked run previews that were failing because they depended on live location tracking.
- Fixed run history previews that were crashing from missing preview environment data.
- Added a preview for the ranked share-to-feed result screen.
Visual Cleanup
- Removed more of the old gold styling from ranked result screens.
- Updated ranked result colors to better match the current app theme.