Drag a .fit or .gpx onto the page and you get splits, decoupling, your power curve, every climb and the route on a map. Runs read in min/km, swims in 100 m — each sport in its own units. It's free, there's nothing to install, and the file never leaves your machine.Drag a .fit or .gpx onto the page — rides, runs and swims, each in its own units. Free, nothing to install, and the file stays on your machine.
Routes departing from your home never leave your device — no accounts, no sign-ups
Already on Strava? Request your archive and drop the zip in — years of rides come across at once, with no login anywhereFrom a Strava archive zip — years of rides come across at once
One ride leads to the next — heatmap · streaks · weekly ranking keep it goingHeatmap · streaks · weekly ranking keep it going
Solo days and group days, both worth sharing — one link gets you brag cards · rival records · squad journeysOne link: brag cards · rival records
Optional, and on your own API key: an AI coach that answers "why did I fade?" in your own numbersOptional API key: an AI coach on your own key
Runs and swims come in too — kept out of your cycling numbers, counted on their own termsRuns and swims, counted on their own terms
When you'd otherwise forget, your assistant speaks up in your sport's words — and you can pull a friend into your planYour assistant keeps an eye out
All three are real demo reports — tap a sport. The same app reads each one in its own language.
A 62 km ride — distance, power, NP and TSS, heart rate, climbs graded. It also reads what kind of rider you are and turns the day into XP.
10 km in 53:51 — min/km pace and 1 km splits, cadence in spm. No converting km/h in your head, and power, FTP and TSS never appear (they are cycling yardsticks).
1,501 m open water — pace per 100 m, stroke rate in spm. There is no elevation-gain tile — metres climbed in water are GPS drift, not hills.
Drop a Strava bulk export and your runs and swims come in too. Each sport looks at different numbers, so the screen answers in that sport's language.
Read in pace, answered in pace. 1 km splits, min/km, cadence in spm — no converting km/h in your head.
It answers "was I faster today?" — against your own last five: 6:00/km → 5:34 today, 26 seconds faster. Same sport only, and silent until three records exist.
🤖 The AI coach answers as a running coach — targets in pace, heart rate and spm, not watts.
The run planner learns your pace from your own runs.
👟 Your shoes get a mileage counter — your knees notice somewhere past 500 km, but nobody actually knows the number. Register a pair, pick it on each run, and you're told when it's due (600 km by default, yours to change).
Run only, and the app becomes a running app — it works this out from your library instead of asking. The heatmap becomes your running heatmap, cycling cards step back, and your running card moves to the top.
On your first run, the app speaks first — it tells you right there why power and TSS aren't showing (they're cycling yardsticks).
Pace per 100 m, distance in metres. 1,500 m stays 1,500 m — and splits break at 100 m, the way you counted lengths.
Pool swims come in. Sessions with no route get dropped by most tools; here the distance, time and pace stay. The screen also says why there is no map.
No elevation gain anywhere — what looks like climbing in water is GPS drift, not a hill.
Strokes are spm, never called cadence.
🩱 Suits and goggles are tracked by hours in the water — it's chlorine that kills the elastane, not the distance you swam. The same 1,500 m wears your suit differently at 40 minutes than at 25. Fins and paddles get no replacement target at all — they barely wear out, and a made-up number just makes you buy things.
On your first swim, the app speaks first — no map and no video isn't a fault, there simply is no route.
Nothing changed for you. Power, NP, TSS, zones, FTP, the PR room, My courses and climbs, the weekly ranking — all as they were.
Other sports never mix into your cycling numbers. Distance, elevation, PRs, courses and the weekly km board count rides only — a 10 km/h "ride" dragging your average down would make every number a lie.
A winter of running will not break your streak. Grass, streaks and XP count intensity (MET) × time, so they cross sports.
Trainer rides are measured by power, not speed.
🏊 Swims come in too — pool and open water. A pool swim records no route, so there's no map, and the screen says so: "missing" and "broken" look identical otherwise. Sports we don't handle yet (strength, rowing…) are left out on import, and we tell you how many and why.
Not against some average rider, but against your own rides. What time you'll be back, where you'll stop, how many bottles to carry — you know before you leave.
Measured against your longest ride, biggest climb and longest time in the saddle, it gives you one of four verdicts. If it's too much yet, it says how far to build up first — the most expensive failure is the one halfway out.
Each rest point comes with the store, water fountain or toilet that is actually there. Water isn't "bring four bottles" either — it's "you can refill on route, so start with two".
Download it as GPX or a Garmin course (FIT) and your stops ride along as waypoints. No pulling your phone out mid-ride — the device shows "4.2 km to your next stop".
Relaying "store at 80 km, lunch at 112 km" is the tedious part. Open the link and your friend sees the same plan and downloads the same GPX/FIT.
Tap a couple of places on the map and the route follows real cycling paths. Tap a rest stop to route through it, and turn it into a round trip with one button.
That plan is actually computed from the demo ride — and the rest stops on it are real ones riders added.
Naajim reads the raw binary FIT files your Garmin or Wahoo records. No conversion, no upload queue.
A lot of features doesn't mean you have to see them all. Pick Casual, Balanced or Serious and the app folds away the game systems or deep analytics you don't use, leaving a screen that fits you. Your data stays; change it anytime.
Drop a FIT/GPX file and it's parsed instantly. Tens of thousands of track points, processed right in your browser.
Enter your FTP and get Normalized Power, Intensity Factor and Training Stress Score computed on the spot.
Move your cursor across the elevation, speed, power and heart-rate charts — all four charts and the map point to the same moment.
Your GPS track drawn as recorded, and your library organized as a gallery of route thumbnails — runs and open-water swims get a map too. Exporting FIT to GPX is one click.
A share image with your stats, route and elevation is rendered on your device — send it straight to Instagram or your group chat.
Climbs are detected automatically with length, gradient and VAM — and graded HC to Cat 4, Tour de France style.
Are you a climber or a sprinter? Your abilities are rated, and levels, XP and achievements stack up like you're raising a game character.
A one-year grid where every active day turns green, with a streak counter for consecutive weeks. It doesn't care which sport it was, so a winter of running keeps it alive. The empty squares will start calling you.
Your cumulative distance travels Korea's 633 km Incheon→Busan trail. "Passing Ihwaryeong now, 218 km to Busan" — finish it and start lap two.
Your annual distance as "Seoul→Busan × N" and climbing as "Everest × N" — a whole year of riding on one card, made to be shown off.
See how hard you've been riding on a 0–100 gauge (🔥 On fire to 🥶 Hibernating), and line up this month & year against last month and the same month last year (▲ up, ▼ down). Both turn into square brag cards for social — and you can split your rides by bike or purpose too.
Regions you ride get recorded in your atlas, passing a bike-path certification center earns a stamp, and weekly quests unlock limited gear.
"When did I last change that chain?", "How far have these shoes actually run?" — just pick what you used when you save a record and the rest adds up on its own. Bikes and shoes count kilometres; swimsuits and goggles count hours in the water (it's chlorine that kills them, not distance). Pro tells you before it's due.
Set "3 sessions a week" or "300 km a month" and every saved record counts toward it automatically. Each goal picks its own sport — rides never leak into a running goal. Hit the goal for XP rewards, keep it going for streaks — one more reason to ride consistently.
Enter distance and elevation (or a GPX course) and get an answer based on your own pace, learned from your own records — a running plan is paced from your runs, not from your bike — a 4-level finish-likelihood verdict, ETA, how often to rest, how much water and food to carry, and whether you'll be back before sunset. Or pick from curated regional routes and the community's most popular courses.
Toilets, water fountains, cafés, convenience stores and viewpoints good for a cycling break — the places Naver and Google Maps don't gather. Browse near your route, add your own, upvote the good ones. Han river toilets and water points come pre-loaded.
Trade links and battle across five ability stats, then share the result as a VS card. You can also race your past self — or your all-time PRs.
See what percentile your distance, elevation gain and average speed fall into among recreational riders, with the standout stat pulled into a square brag card. It's an estimate against a distribution built into the app — nothing is sent to a server.
Your next avatar tier appears as a locked silhouette with the XP left to reach it — Sprout all the way to Legend. Miss a week and Pro's 🧊 streak freeze covers it once a month so the streak survives.
Set your gran fondo date and the countdown starts. For Pro, the training-load card becomes a plan: TSS needed this week, when to taper, projected form (TSB) on the day — capped so it never prescribes a jump your body isn't already handling.
Bury today's numbers with a one-line note, and three months later the capsule reopens itself to put you then next to you now. Stored on this device only.
If a car-transported track sneaks in, you get an instant "6× your usual" warning — so bad data never pollutes your personal records.
GPS tracks reveal where you live; heart rate reveals your health. Naajim never sends that file anywhere, so there's nowhere for it to leak from — only when you create a share link is a summary kept for 30 days, then auto-deleted.
Rides living only on your device also means losing the device loses the rides. If that worries you — or you want your phone and laptop looking at the same history — sign in once with Google on Pro and it carries over, with no 15-character sync code to copy across. Google is only used to find your room; the key that opens it comes from a password you choose and never reaches our server, so we can't read it either. The account-free code method still works exactly as before.
No sign-up, no install, ten seconds — close the tab if it isn't for you
A ride file contains the route from your front door, your heart rate, your fitness level. By default Naajim only reads that file — it never sends it. (The one exception: Pro's optional cross-device sync, and only if you turn it on yourself.)
Raw GPX/FIT uploads consume massive tokens (~34s delay). Your private home coordinates travel to external cloud servers.
Engine computes metrics locally inside your browser. 0 Bytes uploaded for 100% private, instant analysis.
| Naajim | Cloud analysis services | |
|---|---|---|
| File uploaded to server | Never by default* | Required |
| Account sign-up | Not needed | Required |
| Price | Free · Pro ₩1,900/mo | ₩8,000–25,000/mo |
| Analyses per month | Unlimited (even free) | Capped by plan |
| Offline analysis | Yes | No |
| Time to your report | ~3 seconds | Upload + sync wait |
* Only if you turn on Pro's cross-device sync is data also stored on the server (optional, can be turned off anytime). The server only holds ciphertext locked with your sync code — without the code, even we can't read it.
Analysing and saving rides is unlimited and free — we don't count them. What Pro opens isn't "more", it's the things that grow more valuable the longer you ride: the training-load graph, your personal bests, chain, tyre and running-shoe life. All of them need history to mean anything. ₩1,900/month, cancel anytime, or skip subscriptions with the lifetime option. Billed in Korean won; international cards accepted.
LAUNCH50 is auto-applied — just tap the button and you pay the discounted price.
Analysis and storage are unlimited. The plans below add to this; they never take free features away.
Monthly, yearly and lifetime are identical in features. Everything below unlocks on all three.
Shared by all three — 3 devices · free features stay as they are · paste the key you receive into the app and it unlocks.
All seven Pro features above, exactly the same — only the price and the term differ here.
Start monthlyAll seven Pro features above, exactly the same — only the price and the term differ here.
Start yearly — ₩7,450 (50%↓)All seven Pro features above, exactly the same — only the price and the term differ here.
Buy lifetime — ₩19,950 (50%↓)Analysis, saving, 3D videos and the weekly ranking stay free without paying — Pro is there when you want it
Yes. Naajim is a static web page and all analysis code runs inside your browser. Open your dev tools' Network tab while analyzing a file — you won't see a single file upload request.
Full honest disclosure: when you open the app, at most once a day, an anonymous visit-count signal is sent to our server, and pressing a major button sends just that button's name (at most once a day). No cookies, no identifiers, no personal data, no ride data — only flags like "first visit today" — and no third-party analytics like Google Analytics.
And a map has to fetch pictures to draw itself — every map view pulls tiles from CARTO and the map library from unpkg. Those requests tell them which patch of the world is on your screen (the coordinates of a map tile, not your ride file). Tapping the map to draw a course sends the points you tapped to BRouter, and the weather lookup (on by default — you can switch it off in your profile) sends coordinates rounded to about 1 km to open-meteo. None of them ever receive your ride file, your name, or an identifier. Details are in the app under Help → Service Notice.
Yes — the main interface (home, report, library controls) is available in English (beta). If your browser isn't set to Korean it opens in English automatically, and you can switch anytime with the EN / 한국어 button in the header. Deeper content (help articles, quests, region names) is still being translated.
Any device that records standard FIT files — Garmin Edge, Forerunner, Fenix, Wahoo ELEMNT and more. GPX files exported from Strava, Komoot and similar services also work.
Both, yes. Drop a Strava bulk-export zip and your runs and swims come in with it. Runs are read as pace (min/km) with 1 km splits; swims as pace per 100 m, 100 m splits and distance in metres. Distance, PRs and the weekly ranking are counted separately so a run never drags your cycling averages down. The heatmap, streaks, XP and levels don't care which sport it was — a winter of running keeps them alive. Analyses that only mean something on a bike (power, FTP, TSS) are left out, and the report says what was left out and why.
Pool swims have no map — no route is recorded — and the screen says so; open-water swims with coordinates do get one. Sports we don't handle yet (strength, rowing, walking…) are skipped on import, and we tell you how many were skipped and why.
On the activity page, open the ⋯ menu → "Export GPX". If you need the original FIT, choose "Export Original". You can also plug your device into a PC and grab files straight from the GARMIN/Activity folder.
Analysing and saving rides is unlimited — we don't count them. NP/IF/TSS, climb grading, the rider card (abilities and levels), achievements, the heatmap, the virtual cross-country journey, year-in-review cards, exploration and stamp collecting, one item of gear per sport (a bike, a pair of shoes, a swimsuit), one goal, the ride planner (finish likelihood, rest and supplies), your library, the 3D story video, the weekly ranking and share cards — all free, with no time limit.
There used to be an 8-rides-a-month cap. We removed it: analysis runs entirely in your browser so it costs us nothing, and stopping you at ride number nine only meant you left before the things that need history — the heatmap, personal bests, the cross-country journey — had a chance to add up.
Pro unlocks "deeper" — multiple bikes with part replacement alerts and per-bike stats, three goals, growth quests, ride-over-ride comparisons, PDF reports, training load, and cross-device sync.
Throw a .fit file at ChatGPT and it can't read it. Naajim parses the file, computes the metrics and shapes them into the question a coach would actually ask. Copy that prompt into the ChatGPT, Claude or Gemini you already use (free), or add your own API key on Pro for answers inside the app.
Answers don't stop at the diagnosis — each one ends with [Next actions]: what to do on your very next ride, with target numbers ("open at 88W for the first 10 minutes, warm up to 135bpm"). Keep asking follow-ups, and that conversation stays on this device, so next time you pick it up where you left off.
The request goes from your browser straight to the provider you chose and never touches our server — we can't see your key or the answer. Billing is on your own account, and a single ride on a small model typically costs well under a cent. Only numbers are sent: distance, heart rate, power and so on. Never your route or the ride file.
Press Story video on a report: your route draws itself and then stands up in 3D by the elevation you climbed, with heart rate, speed, elevation, power and cadence flowing along the distance. It takes about 18 seconds, and the finished video is reused for both saving and sharing so you never wait twice.
It ends on the day's brag — a new longest ride, your VO2max or FTP estimate, how many km you rode into the wind, the highest point you reached. Up to five lines, and only what actually happened that day.
Send it straight to Instagram, KakaoTalk, LINE or X — on a phone the share sheet does it in one step. There's no limit on how many you make; free videos carry a short opening title and a logo, and Pro shrinks that to a small mark.
Yes. Add it to your home screen (Android and desktop get an install prompt; on iPhone use Safari's Share → Add to Home Screen) and it opens from an icon with no address bar. On desktop the installed app also becomes a file handler — double-click a .fit/.gpx and it opens straight into a report. Installing changes nothing else: your data still lives only on your device.
One tap on "📲 Move to another device" in your library creates a move link — open it on the new device and every ride, level, badge, bike, goal and your Pro license comes across intact. The link works once, within 48 hours, and the server only briefly holds ciphertext locked by a code that never leaves your link. Free for everyone.
There's nothing to wait for — when checkout finishes you're returned to the Naajim app automatically, and Pro turns on instantly with no key entry. Your license key is also shown on screen; jot it down if you plan to use other devices (3 devices total).
Within 14 days of purchase you get a full refund, no questions asked. One email is all it takes.
One click on the management link in your receipt email cancels the subscription. Even after cancelling, the free features and
everything in your library — rides, levels, badges — remain untouched, because the data was always on your device to begin with.
If subscriptions aren't your thing, pick Lifetime — during the launch it's 50% off:
₩39,900 ₩19,950 (one payment), with code
LAUNCH50 applied automatically at checkout (first 100 riders).
Riding together needs no account and no login
Competition and company without ever asking you to sign up: trade a code or a link, that's it. (The Google account link used to move between devices is an optional Pro feature, unrelated to this.)
⚔️ Rival record
Wins and losses against that one friend keep stacking up. "3–2, still ahead" is a reason to upload the next ride. Send the invite link and you both watch the same board.
👥 Squad cross-country
Your club's kilometres merge into one marker rolling from Incheon to Busan, with a contribution ranking showing who pushed it how far. A team finish you can actually see coming.
🥊 VS cards & invite bonus
Share a five-ability head-to-head as a VS card, and when a friend joins from your link you both get extra free analyses this month. You can also battle your past self.
🤖 AI coach (your own key)
Throw a .fit file at ChatGPT and it can't read it. Naajim parses the file and computes the metrics, then shapes them into the question a coach would actually ask. Paste it into the ChatGPT, Claude or Gemini you already use — or add your own API key for answers inside the app. The request goes from your browser to your provider; it never touches our server.
🧭 An assistant that speaks first
It never asks when to ping you — it reads the day and hour you usually train and follows that rhythm. Saturday-morning rider? It speaks up Friday evening. And only when there's something to say: a streak about to break, a goal or badge within reach, service due, a plan set for tomorrow. Add a key to the AI coach and it writes these too, tuned to your rider type and level.
🤜 Nudges & ride invites
Swap a 6-character code and you can put a line on a friend's phone — "haven't seen you out lately", "let's ride this weekend". Build a plan, tap invite a friend, and the plan itself opens on their phone: route, rest stops, supplies, GPX and FIT included. Nothing arrives at night, one nudge per friend per day, and blocking is one tap.
🎬 3D story video
Your route draws itself, then stands up in 3D by elevation — a vertical video with heart rate and speed flowing along the distance. When it's done, send it straight to Instagram, KakaoTalk or LINE. Rendered frame by frame on your device, never uploaded.
🏆 Weekly ranking
A board you can join alone, right now. It resets to zero every Monday, so starting late costs nothing, and even off the podium you see what percentile you're in and how many km separate you from the rider above. Pick an age group or gender and you get a board among your peers too.
All a squad or board ever sees is a display name and numbers like distance — routes and ride records never leave your device.