{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "en",
  "slug": "sparkyfitness",
  "url": "https://tesign.com/en/item/sparkyfitness/",
  "alternates": {
    "ko": {
      "html": "https://tesign.com/item/sparkyfitness/",
      "json": "https://tesign.com/item/sparkyfitness/index.json",
      "markdown": "https://tesign.com/item/sparkyfitness/index.md"
    },
    "en": {
      "html": "https://tesign.com/en/item/sparkyfitness/",
      "json": "https://tesign.com/en/item/sparkyfitness/index.json",
      "markdown": "https://tesign.com/en/item/sparkyfitness/index.md"
    }
  },
  "name": "SparkyFitness",
  "use_label": "Self-hosted family health tracking",
  "one_liner": "A self-hosted health tracker for nutrition, exercise, sleep, fasting, mood and body metrics — all on a server you run yourself.",
  "text": {
    "why": "Tracking nutrition, exercise, sleep, cycle and medication separately usually means paying for several different subscriptions with no single view across them. SparkyFitness puts all of it on one self-hosted server (run via Docker Compose) and lets a family split access with granular permissions. It syncs steps, workouts and sleep automatically from 8+ services (Apple Health, Fitbit, Garmin, Oura and more), and a beta conversational AI (SparkyAI) can log a meal from an uploaded food photo.",
    "take": "It openly admits it's source-available, not open source — and backs its value claim with a public comparison table against several paid alternatives' subscription costs.",
    "build": [
      "Consolidate several health-app subscriptions into one self-hosted server the whole family shares",
      "Auto-sync wearable data to see nutrition, exercise and sleep on one screen",
      "Try logging a meal from a single photo with the beta AI chatbot (still beta)"
    ],
    "who": [
      {
        "role": "Someone paying for several separate health-app subscriptions",
        "situation": null
      },
      {
        "role": "A family that wants one shared place for everyone's health data",
        "situation": null
      },
      {
        "role": "Anyone who doesn't want their health data in someone else's cloud",
        "situation": null
      }
    ],
    "start": [
      {
        "command": false,
        "text": "Self-host (needs Docker):"
      },
      {
        "command": true,
        "text": "mkdir sparkyfitness && cd sparkyfitness"
      },
      {
        "command": true,
        "text": "curl -L -o docker-compose.yml https://github.com/CodeWithCJ/SparkyFitness/releases/latest/download/docker-compose.prod.yml"
      },
      {
        "command": true,
        "text": "curl -L -o .env https://github.com/CodeWithCJ/SparkyFitness/releases/latest/download/default.env.example"
      },
      {
        "command": true,
        "text": "docker compose pull && docker compose up -d"
      },
      {
        "command": false,
        "text": "→ open http://localhost:8080"
      },
      {
        "command": false,
        "text": "Non-technical users can use a third-party cloud host like PikaPods instead"
      }
    ],
    "caveat": [
      "Custom non-commercial licence — the source is visible but this is not open source, and commercial use needs the author's prior permission",
      "The AI chatbot, family sharing and API docs are still beta; auto-updating containers isn't recommended",
      "The README states the comparison table is written by the project being compared, i.e. by SparkyFitness itself"
    ]
  },
  "cta": {
    "type": "self_host",
    "label": "SELF-HOST",
    "url": "https://codewithcj.github.io/SparkyFitness"
  },
  "ready": "self-host",
  "categories": [
    "productivity",
    "data"
  ],
  "categories_confirmed": true,
  "tags": [
    "self-hosted",
    "health-tracker",
    "nutrition",
    "family",
    "docker"
  ],
  "platform": [
    "web",
    "ios",
    "android"
  ],
  "license": {
    "spdx": null,
    "scope": "unknown",
    "scope_text": "Unconfirmed — check before use.",
    "url": "https://github.com/codewithcj/sparkyfitness?tab=License-1-ov-file",
    "note": null,
    "open_source": null
  },
  "language": "TypeScript",
  "source_urls": {
    "canonical": "https://codewithcj.github.io/SparkyFitness",
    "github": "https://github.com/codewithcj/sparkyfitness",
    "huggingface": null,
    "app_store": null,
    "sightings": [
      {
        "source": "github",
        "url": "https://github.com/codewithcj/sparkyfitness",
        "posted_at": "2026-09-15T22:00:00.000Z",
        "hn_url": null
      }
    ]
  },
  "numbers": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "stars": 6051,
    "stars_unit": "GitHub stars",
    "stars_checked_at": "2026-09-16T03:34:26.158Z",
    "stars_observed_since_check": 4,
    "star_delta_24h": 13,
    "star_delta_7d": 13,
    "star_delta_30d": 13,
    "star_delta_unit": "GitHub stars gained in the window, GH Archive events summed to as_of",
    "spark_14d": [
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      7,
      6
    ],
    "hf_likes": null,
    "hf_likes_observed_at": null,
    "hn_points": null,
    "hn_points_observed_at": null,
    "store": null,
    "method": "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours."
  },
  "ranks": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "all_time": null,
    "rising": {
      "24h": null,
      "7d": null,
      "30d": null
    },
    "categories": [
      {
        "category": "data",
        "label": "DATA",
        "rank": 17
      }
    ]
  },
  "activity": {
    "pushed_at": "2026-09-16T01:05:10.000Z",
    "owner_type": null,
    "open_issues": null,
    "contributors": null,
    "releases_count": null,
    "latest_release": null,
    "checked_at": null,
    "core_checked_at": "2026-09-16T03:34:26.158Z"
  },
  "signals": [],
  "images": {
    "og": "https://tesign.com/img/og/sparkyfitness.en.png",
    "cover": null,
    "cover_width": null,
    "cover_height": null,
    "gallery": [
      "https://tesign.com/img/sparkyfitness-abf91101ec.png"
    ],
    "alt": "SparkyFitness's dashboard: today's calories eaten and burned, water intake, and a 14-day nutrition trend chart.",
    "tier": 2
  },
  "dates": {
    "first_seen_at": "2026-09-16T03:33:35.410Z",
    "source_created_at": "2025-06-21T14:00:39.000Z",
    "discovery_hours": 10837.549002777778,
    "launch_signal_at": "2026-09-15T22:00:00.000Z",
    "kept_at": "2026-09-17T01:24:00.729Z",
    "first_published_at": "2026-09-17T01:24:00.858Z",
    "updated_at": "2026-09-17T01:26:30.188Z",
    "ingestion_mode": "live"
  },
  "notes": [
    "This file was produced by the same build, from the same data, as the tesign.com item page. The text is editorial; the numbers are stored observations.",
    "null in the JSON means not observed — never zero. The Markdown writes [unconfirmed] for it.",
    "Star total = the value last checked on GitHub (stars_checked_at) + increases observed via GH Archive since. The 24h · 7d · 30d gains are GH Archive hourly events summed to the reference time (as_of). No score of ours.",
    "A summary, not legal advice."
  ]
}
