For everyone who rode, ran or swam today v1.248.0

A day better than yesterday
you keep going when you can see it

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.

120,000+ Sessions Analyzed · Ride · Run · Swim · 0 Byte Server Upload · 100% On-Device Privacy

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

1
Drop .fit or .gpx Garmin · Wahoo · Strava files
2
3-Sec Local Analysis 0 Bytes uploaded · 100% in browser
3
3D Story & AI Coach Personal metrics & action plan
🤖 Ask an AI coach about today's ride “Why did I fade in the second half?” — answered in your own numbers, with what to do next. Sample answers — the real ones are built from your ride. No key needed: copy the prompt and paste it into whatever ChatGPT · Claude · Gemini you already use. Or put in your own API key and the answers arrive inside the app — billed to your key, never through our server.Sample answers — real ones come from your ride. No key needed — copy the prompt into the chatbot you already use, or add your own API key.
drawn by this page, right now
Every ride is experience
🚴
Climber Lv.8
0 XP
Today's ride +1,311 XP
LEVEL UPLv.9 Ridgeline Runner
Riding grass 0-week streak
lessmore
What you pick up along the way
🚲
Incheon0kmBusan 633km
🎬 Today's ride becomes a 3D video Your route draws itself, then stands up by elevation — the hills you climbed become mountains. Five traces flow along the distance: heart rate · speed · elevation · power · cadence. Whatever your file has, it shows. The real map sits underneath, and you pick the title and how the day felt (😌 easy · 😤 hard · 🤩 fun). It ends on the day's brag — 🏅 a new longest ride, 🫁 your VO2max estimate, 🌬️ how many km you rode into the wind. Only what actually happened that day. About 18 seconds to make, rendered on your own phone, not a server. It's 9:16, so it goes straight to Reels, Shorts or Stories. Free with no limit on how many you make — free videos carry a short opening and logo; Pro leaves only a small mark.
🖼️ Visual Preview

Drop the file, and three seconds later — this

All three are real demo reports — tap a sport. The same app reads each one in its own language.

Naajim 3D Cycling Telemetry Dashboard Naajim 9:16 Story Video Preview
Naajim ride report — distance, power and heart rate tiles, region banner, rider card attributes

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.

Play with this demo yourself

Run · Swim · Ride

Runs in min/km, swims per 100 m, rides in watts

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.

🏃 If you run

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).

🏊 If you swim

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.

🚴 If you ride

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.

Together

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.

Before you go

"Can I actually finish this route?" — answered in numbers

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.

🚦 It tells you first whether it's too much

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.

🛋️ Not "rest at 68 km" but "rest at the store at 68 km"

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".

⌚ The plan goes onto your head unit

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".

🔗 One link for whoever's coming along

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.

🗺️ No course file needed

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.

Plan your own route

Features

We only removed the waiting and the sign-up form — the analysis is all here

Naajim reads the raw binary FIT files your Garmin or Wahoo records. No conversion, no upload queue.

🧑 Tailored to your type — a simpler screen

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.

Analysis done in 3 seconds

Drop a FIT/GPX file and it's parsed instantly. Tens of thousands of track points, processed right in your browser.

NP · IF · TSS

Enter your FTP and get Normalized Power, Intensity Factor and Training Stress Score computed on the spot.

Synced interactive charts

Move your cursor across the elevation, speed, power and heart-rate charts — all four charts and the map point to the same moment.

Route map & gallery

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.

Share cards for social

A share image with your stats, route and elevation is rendered on your device — send it straight to Instagram or your group chat.

Automatic climb analysis

Climbs are detected automatically with length, gradient and VAM — and graded HC to Cat 4, Tour de France style.

Rider card & growth system

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.

Heatmap — rides, runs and swims

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.

Virtual cross-country journey

Your cumulative distance travels Korea's 633 km Incheon→Busan trail. "Passing Ihwaryeong now, 218 km to Busan" — finish it and start lap two.

Year-in-review card

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.

Riding barometer & monthly recap

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.

Exploration log · gear · stamps

Regions you ride get recorded in your atlas, passing a bike-path certification center earns a stamp, and weekly quests unlock limited gear.

Gear locker — bikes, shoes, swimsuits

"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.

My goals — rewards for hitting them

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.

Planner — "can I make it?"

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.

Rest stop map — shared by riders

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.

Virtual battles with friends

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.

Where does this ride land?

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.

Next evolution · streak freeze

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.

Peak planner — built around race day

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.

A time capsule to your future self

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.

Outlier detection

If a car-transported track sneaks in, you get an instant "6× your usual" warning — so bad data never pollutes your personal records.

Analysis without the leak worry

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.

New phone, same history (Google account)

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

Privacy

Your heart rate and GPS history
have no business piling up on someone's server

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.)

Traditional Cloud / Full Uploads
~120,000 Tokens

Raw GPX/FIT uploads consume massive tokens (~34s delay). Your private home coordinates travel to external cloud servers.

VS
⚡ Naajim Local Engine
~800 Tokens (150× Smaller)

Engine computes metrics locally inside your browser. 0 Bytes uploaded for 100% private, instant analysis.

NaajimCloud analysis services
File uploaded to serverNever by default*Required
Account sign-upNot neededRequired
PriceFree · Pro ₩1,900/mo₩8,000–25,000/mo
Analyses per monthUnlimited (even free)Capped by plan
Offline analysisYesNo
Time to your report~3 secondsUpload + 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.

Pricing

Today's workout is free.
Pro is for when they add up.

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.

🎉 Launch deal · 50% off Pro first 100 riders
Yearly effectively ₩532/mo — ₩14,900 → ₩7,450 + 2 bonus months (14 months)
Lifetime ₩39,900₩19,950 (one payment)
Code LAUNCH50 is auto-applied — just tap the button and you pay the discounted price.
Start free — everything here stays free, forever
₩0
Free forever

Analysis and storage are unlimited. The plans below add to this; they never take free features away.

  • FIT / GPX analysis — unlimited (saving too)
  • NP · IF · TSS · climb grading (HC–Cat 4) basic summary
  • Rider card — type, level (Max Lv.5), ability ratings
  • Achievement badges · exploration log · gear · stamps
  • Heatmap (rides, runs, swims) · virtual cross-country · year-in-review card
  • 1 goal — XP rewards & streaks
  • Ride & run planner — finish likelihood (traffic light signals)
  • 4 synced charts + route map + gallery (every sport)
  • 🎬 Story video · 🏆 Weekly ranking · share cards for Instagram & chat apps
  • 🧭 Assistant reminders (in your sport's language) · 🤜 Nudge friends · invite them to a plan
Start now
There is one Pro — you're only choosing price and term

Monthly, yearly and lifetime are identical in features. Everything below unlocks on all three.

  • 📈 Training load graph — whether you're overreaching or fresh (CTL/ATL/TSB)
  • 🏆 PR records room — personal bests per metric, with alerts when you beat one
  • 🧰 Unlimited gear — chains and tyres, plus running shoes and swimsuits, all tracked to replacement, per-bike stats
  • 🤖 AI coach — connect your own API key for in-app answers, with your 4-week trend
  • 🎯 3 goals (pick the sport) · growth quests · growth reports vs your past records
  • 🔗 Cross-device sync · overlay ride comparison · PDF reports
  • 🎬 Minimal story-video branding — no opening title, just a small mark

Shared by all three — 3 devices · free features stay as they are · paste the key you receive into the app and it unlocks.

Monthly
₩1,900 /mo
Cancel anytime · 3 devices

All seven Pro features above, exactly the same — only the price and the term differ here.

Start monthly
Most popular · 2 months free + 2 Months Bonus!
Yearly
₩14,900 ₩7,450 /yr
≈ ₩532/mo
🎉 50% off + 2 bonus months (14 months) · 3 devices

All seven Pro features above, exactly the same — only the price and the term differ here.

Start yearly — ₩7,450 (50%↓)
Lifetime
₩39,900 ₩19,950
🎉 Launch 50% off · one payment · not a subscription · 3 devices

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

FAQ

Frequently asked questions

Does my file really go nowhere?

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.

Is the app available in English?

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.

Which devices are supported?

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.

Does it handle running and swimming?

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.

How do I export a file from Strava?

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.

How far does the free tier go?

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.

🤖 What is the AI coach — does it cost money?

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.

🎬 How do I make a story video?

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.

Can I install it as an app?

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.

What happens to my records when I switch devices?

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.

How do I get my key after buying Pro?

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).

What if I buy Pro and don't like it?

Within 14 days of purchase you get a full refund, no questions asked. One email is all it takes.

How do I cancel? Do I lose my records?

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).

After you ride, run or swim,
skip the upload — just drag the file in

Start Naajim for free
🚴 Drop your .fit file for an instant report in 3 seconds Analyze Free