<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<title>Bikelog — Cycling training log for road bike, MTB & gravel</title>
<meta name="description" content="Bikelog is an open cycling training log for road bike, mountain bike (MTB), and gravel bike riders. Upload GPX, TCX, or FIT files from any cycling computer or sports watch, map every ride, and own your training history."/>

<link rel="canonical" href="https://bikelog.de/"/>

<link rel="icon" type="image/svg+xml" href="/assets/icon.svg"/>
<link rel="apple-touch-icon" href="/assets/icon.svg"/>

<meta name="theme-color" content="#34b233"/>
<meta name="color-scheme" content="light"/>

<meta property="og:type"        content="website"/>
<meta property="og:site_name"   content="Bikelog"/>
<meta property="og:title"       content="Bikelog — Cycling training log for road bike, MTB & gravel"/>
<meta property="og:description" content="An open cycling training log for road bike, MTB, and gravel riders. Upload GPX/TCX/FIT from any device, map every ride, own your training history."/>
<meta property="og:url"         content="https://bikelog.de/"/>
<meta property="og:image"       content="https://bikelog.de/assets/screenshots/01-activities.webp"/>
<meta name="twitter:card"       content="summary_large_image"/>

<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link href="https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet"/>
<script>(function(){try{var t=localStorage.getItem("bk-theme");document.documentElement.setAttribute("data-theme",(t==="light"||t==="dark")?t:"system");}catch(e){}})();</script><link rel="stylesheet" href="/assets/app.css?v=1781173892"/>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Bikelog",
  "url": "https://bikelog.de/",
  "description": "Open cycling training log for road bike, MTB, and gravel riders. GPX/TCX/FIT ingest, route maps, public API, and a fediverse cross-post bridge.",
  "inLanguage": "en"
}
</script>
</head>
<body>
<header class="bk-topnav bk-topnav-public">
  <a class="bk-brand" href="/index.php">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="38" height="38" class="bk-logo" aria-hidden="true"><rect width="256" height="256" rx="56" fill="#34b233"/><rect x="48" y="34" width="160" height="190" rx="14" fill="#fafaf7"/><line x1="48" y1="78" x2="208" y2="78" stroke="#0f0f0e" stroke-width="3.5" stroke-linecap="round"/><circle cx="82" cy="56" r="4.5" fill="#0f0f0e"/><circle cx="174" cy="56" r="4.5" fill="#0f0f0e"/><rect x="64"  y="98"  width="20" height="20" rx="4" fill="#ececea"/><rect x="92"  y="98"  width="20" height="20" rx="4" fill="#9CD89B"/><rect x="120" y="98"  width="20" height="20" rx="4" fill="#ececea"/><rect x="148" y="98"  width="20" height="20" rx="4" fill="#67C566"/><rect x="176" y="98"  width="20" height="20" rx="4" fill="#34b233"/><rect x="64"  y="124" width="20" height="20" rx="4" fill="#67C566"/><rect x="92"  y="124" width="20" height="20" rx="4" fill="#34b233"/><rect x="120" y="124" width="20" height="20" rx="4" fill="#9CD89B"/><rect x="148" y="124" width="20" height="20" rx="4" fill="#ececea"/><rect x="176" y="124" width="20" height="20" rx="4" fill="#67C566"/><rect x="64"  y="150" width="20" height="20" rx="4" fill="#ececea"/><rect x="92"  y="150" width="20" height="20" rx="4" fill="#9CD89B"/><rect x="120" y="150" width="20" height="20" rx="4" fill="#67C566"/><rect x="148" y="150" width="20" height="20" rx="4" fill="#34b233"/><rect x="176" y="150" width="20" height="20" rx="4" fill="#34b233"/><rect x="64"  y="176" width="20" height="20" rx="4" fill="#9CD89B"/><rect x="92"  y="176" width="20" height="20" rx="4" fill="#34b233"/><rect x="120" y="176" width="20" height="20" rx="4" fill="#67C566"/><rect x="148" y="176" width="20" height="20" rx="4" fill="#34b233"/><rect x="176" y="176" width="20" height="20" rx="4" fill="#0f0f0e"/></svg>
    <div class="bk-brand-name">
      <strong>BIKELOG</strong>
      <span>CYCLING TRAINING LOG</span>
    </div>
  </a>
</header><main class="bk-landing">
  <div class="bk-landing-card">
    <!-- BETA rubber-stamp. Heavier strokes + fill-AND-stroke text
         so the mark reads as stamped ink even on the weight-700-
         capped Geist webfont. Positioned + rotated via .bk-beta-stamp. -->
    <svg class="bk-beta-stamp" viewBox="0 0 260 120" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">
      <rect x="8" y="8" width="244" height="104" rx="12"
            fill="none" stroke="currentColor" stroke-width="7"/>
      <rect x="20" y="20" width="220" height="80" rx="6"
            fill="none" stroke="currentColor" stroke-width="2.5"/>
      <text x="130" y="86" text-anchor="middle"
            font-weight="900" font-size="68" letter-spacing="10"
            fill="currentColor"
            stroke="currentColor" stroke-width="3"
            stroke-linejoin="round">BETA</text>
    </svg>

    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="64" height="64" class="bk-logo bk-landing-logo" aria-hidden="true"><rect width="256" height="256" rx="56" fill="#34b233"/><rect x="48" y="34" width="160" height="190" rx="14" fill="#fafaf7"/><line x1="48" y1="78" x2="208" y2="78" stroke="#0f0f0e" stroke-width="3.5" stroke-linecap="round"/><circle cx="82" cy="56" r="4.5" fill="#0f0f0e"/><circle cx="174" cy="56" r="4.5" fill="#0f0f0e"/><rect x="64"  y="98"  width="20" height="20" rx="4" fill="#ececea"/><rect x="92"  y="98"  width="20" height="20" rx="4" fill="#9CD89B"/><rect x="120" y="98"  width="20" height="20" rx="4" fill="#ececea"/><rect x="148" y="98"  width="20" height="20" rx="4" fill="#67C566"/><rect x="176" y="98"  width="20" height="20" rx="4" fill="#34b233"/><rect x="64"  y="124" width="20" height="20" rx="4" fill="#67C566"/><rect x="92"  y="124" width="20" height="20" rx="4" fill="#34b233"/><rect x="120" y="124" width="20" height="20" rx="4" fill="#9CD89B"/><rect x="148" y="124" width="20" height="20" rx="4" fill="#ececea"/><rect x="176" y="124" width="20" height="20" rx="4" fill="#67C566"/><rect x="64"  y="150" width="20" height="20" rx="4" fill="#ececea"/><rect x="92"  y="150" width="20" height="20" rx="4" fill="#9CD89B"/><rect x="120" y="150" width="20" height="20" rx="4" fill="#67C566"/><rect x="148" y="150" width="20" height="20" rx="4" fill="#34b233"/><rect x="176" y="150" width="20" height="20" rx="4" fill="#34b233"/><rect x="64"  y="176" width="20" height="20" rx="4" fill="#9CD89B"/><rect x="92"  y="176" width="20" height="20" rx="4" fill="#34b233"/><rect x="120" y="176" width="20" height="20" rx="4" fill="#67C566"/><rect x="148" y="176" width="20" height="20" rx="4" fill="#34b233"/><rect x="176" y="176" width="20" height="20" rx="4" fill="#0f0f0e"/></svg>    <h1 class="bk-landing-title">Bikelog</h1>
    <p class="bk-landing-tag">Cycling training log</p>

        
    <form class="bk-login-form" method="post" action="index.php" autocomplete="on">
      <label class="bk-field">
        <span class="bk-field-label">Username or email</span>
        <input type="text" name="identifier" autocomplete="username" required
               value=""/>
      </label>
      <label class="bk-field">
        <span class="bk-field-label">Password</span>
        <input type="password" name="password" autocomplete="current-password" required/>
      </label>
      <button type="submit" class="bk-btn bk-btn-block bk-btn-primary">Sign in</button>
      <p class="bk-landing-note"><a href="forgot.php">Forgot password?</a></p>
    </form>

    <div class="bk-landing-divider"><span>or</span></div>

    <a class="bk-btn bk-btn-block bk-btn-accent" href="join.php">Sign up</a>
  </div>

  <section class="bk-landing-intro">
    <h2>A home for your rides — for road, MTB, and gravel cyclists</h2>
    <p class="bk-landing-mission">
      Bikelog has one job: be a home for your rides. Apps for serious
      fitness analysis, structured training plans, and route planning
      already exist — and they're far better at those things than any
      single tool could ever be on its own. So Bikelog doesn't try to
      compete with them.
    </p>
    <p class="bk-landing-mission">
      Instead Bikelog focuses on what those apps don't do well:
      keeping every ride you've ever logged in one place, letting you
      follow the riders you actually want to follow, and — through a
      free public API — making your data available to any external
      app you choose to connect. Use the training analyser of the
      month, the route planner you love, the shiny new thing that
      came out yesterday. They work with your Bikelog data; you stay
      in control of who sees what.
    </p>
    <p>
      Drop in your GPX, TCX, or FIT files from any cycling computer
      or sports watch — road bike, mountain bike (MTB), gravel,
      commuter, tourer. Direct sync from Garmin, Wahoo, Coros, and
      Hammerhead is on the roadmap.
    </p>
    <ul class="bk-landing-bullets">
      <li><strong>Any bike, any discipline</strong> — road, MTB, gravel, cyclocross, e-bike.</li>
      <li><strong>Any device</strong> — Garmin, Wahoo, Coros, Bryton, Hammerhead, watch, phone.</li>
      <li><strong>Any format</strong> — GPX, TCX, FIT.</li>
      <li><strong>Your data</strong> — full export, public API, no third-party trackers.</li>
    </ul>
  </section>

  <section class="bk-landing-intro">
    <h2>My Routes — your re-rides, catalogued</h2>
    <p>
      Cycle the same loop a few times and Bikelog notices.
      <strong>My Routes</strong> groups every ride that follows the same
      physical path into a single "route" — your daily commute, the
      Saturday training lap, that gravel descent you keep going back to —
      with a count of how many times you've ridden it. Each route opens
      a detail page with the path on a real map plus every individual
      ride listed underneath, newest first.
    </p>
    <figure class="bk-landing-shots">
      <img src="/assets/screenshots/07-my-routes.webp"
           alt="My Routes page showing a list of recurring cycling routes with maps and ride counts"
           loading="lazy"/>
    </figure>
    <p>
      No manual tagging, no setup — Bikelog spots when two rides follow
      the same path and groups them for you.
    </p>
  </section>

  <section class="bk-landing-intro">
    <h2>My Bikes — kilometres per bike, automatically</h2>
    <p>
      Add a bike to your stable, ride it, watch the distance add up.
      <strong>My Bikes</strong> tags every new ride to the right bike
      based on what you rode — your MTB, your gravel bike, your road
      bike, your trainer setup — so "how many kilometres on the
      Stumpjumper this year?" is a glance at the page, not a
      spreadsheet exercise.
    </p>
    <figure class="bk-landing-shots">
      <img src="/assets/screenshots/08-my-bikes.webp"
           alt="My Bikes page showing per-bike totals: distance, time, ride count, first and last ride"
           loading="lazy"/>
    </figure>
    <p>
      Each bike shows total distance, total time on the saddle, ride
      count, and your first and last ride on it. Got it wrong on
      ingest? Re-assign any ride from its detail page. Retire a bike
      when it leaves the stable — the kilometres you logged on it
      stay with you forever.
    </p>
  </section>

  <section class="bk-landing-roadmap">
    <h2>Cross-post your rides to the fediverse — coming soon</h2>
    <p>
      If you're on Mastodon, Pleroma, GoToSocial or any other
      ActivityPub-compatible network, your new rides can land on your
      timeline automatically — title, distance, duration, route map,
      link back. Posted to <em>your</em> account, on <em>your</em>
      instance, with the visibility you choose.
    </p>
    <ul class="bk-landing-roadmap-grid">
      <li><strong>Bikelog never posts to the fediverse itself.</strong> The integration is a separate, open-source companion app — the "Bikelog fediverse bridge" — that talks to Bikelog over our public API, the same way any other third-party app would.</li>
      <li><strong>Run your own bridge.</strong> The bridge is meant to be self-hostable. Use the one we run if it's convenient, or stand up your own on your own server and keep the whole pipeline under your control.</li>
      <li><strong>Per-user opt-in.</strong> Nothing leaves your account until you click Connect, and you can revoke either side of the link at any time. The bridge never sees your Bikelog password and Bikelog never sees your fediverse password.</li>
    </ul>
  </section>

  <section class="bk-landing-roadmap">
    <h2>Take your training to any feed reader — RSS coming soon</h2>
    <p>
      RSS is the most user-respectful "use your data anywhere" channel
      we can offer: no API key, no app to install, works with any
      feed reader on any platform.
    </p>
    <ul class="bk-landing-roadmap-grid">
      <li><strong>Your own rides</strong> — one feed item per ride. Title, date, distance, duration, map, link back.</li>
      <li><strong>Your own rides + posts</strong> — adds text notes, photos, and routes you publish.</li>
      <li><strong>Your follow graph</strong> — same as above plus the same shape of items from every user you follow.</li>
    </ul>
   
  </section>

  <section class="bk-landing-intro">
    <h2>See it in action</h2>
    <figure class="bk-landing-shots">
      <img src="/assets/screenshots/01-activities.webp"   alt="Bikelog activity list with ride cards"           loading="lazy"/>
      <img src="/assets/screenshots/02-ride-map.webp"     alt="Ride detail page with route map"                 loading="lazy"/>
      <img src="/assets/screenshots/03-ride-detail.webp"  alt="Ride detail with speed, HR, and power charts"    loading="lazy"/>
      <img src="/assets/screenshots/04-stats.webp"        alt="Training stats and weekly volume overview"       loading="lazy"/>
      <img src="/assets/screenshots/05-profile.webp"      alt="Public rider profile page"                       loading="lazy"/>
      <img src="/assets/screenshots/06-activities-2.webp" alt="Bikelog activity feed for road, MTB, and gravel" loading="lazy"/>
    </figure>
  </section>

  <section class="bk-landing-roadmap">
    <h2>Direct sync from your GPS bike computer — coming soon</h2>
    <p>
      Manual uploads work today and will always keep working. On top of
      that, Bikelog is building one-click sync from the major GPS
      bike-computer platforms so your rides land here automatically the
      moment your head unit phones home:
    </p>
    <ul class="bk-landing-roadmap-grid">
      <li>Pending: <strong>Garmin Connect</strong> — Edge 540 / 840 / 1040 / 1050, Forerunner, Fenix, Epix, fēnix, Venu.</li>
      <li><strong>Wahoo Cloud</strong> — ELEMNT Bolt, Roam, Ace, Rival.</li>
      <li>Pending: <strong>Coros</strong> — Pace, Apex, Vertix, Dura.</li>
      <li>Pending: <strong>Bryton</strong> — Rider series.</li>
      <li>Pending: <strong>Hammerhead</strong> — Karoo 2 / 3. <em>Under evaluation.</em></li>
    </ul>
    <p class="bk-landing-roadmap-note">
      Securely allow and revoke access to your GPS computer. If you dont want Bikelog to read from Garmin or Wahoo any more, you can just make it stop.<br>
	  See the <a href="privacy.php">Privacy
      Policy</a> for the full data-flow description.
    </p>
  </section>

  <!-- End-of-page call to action. Mirrors the orange "Sign up" button
       inside the login card up top, but big and centred so a reader
       who scrolled to the bottom doesn't have to scroll back. -->
  <section class="bk-landing-cta">
    <h2>Ready to log your rides?</h2>
    <p>Bikelog is free, beta and you own every byte.</p>
    <a class="bk-btn bk-btn-accent bk-landing-cta-btn" href="join.php">Sign up</a>
  </section>
</main>
<footer class="bk-footer"><div class="bk-footer-inner"><a class="bk-footer-brand" href="index.php">Bikelog · cycling training log</a><nav class="bk-footer-nav"><a class="bk-footer-link" href="/news.php">News</a><a class="bk-footer-link" href="/impressum.php">Impressum</a><a class="bk-footer-link" href="/privacy.php">Privacy</a><a class="bk-footer-link" href="/terms.php">Terms</a><a class="bk-footer-link" href="/help.php">Help</a><a class="bk-footer-link" href="/contact.php">Contact</a><a class="bk-footer-link" href="/api.php">API</a><a class="bk-footer-link" target="_blank" rel="noopener" href="https://blog.bikelog.de">Blog</a></nav></div></footer></body>
</html>
