{
  "schema": "tesign-radar/item/1",
  "generated_at": "2026-09-17T01:56:13.055Z",
  "lang": "ko",
  "slug": "sparkyfitness",
  "url": "https://tesign.com/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": "가족용 자가호스팅 건강 추적",
  "one_liner": "영양·운동·수면·단식·기분·체성분을 한 앱에서 추적하는 자가호스팅 건강 트래커로, 데이터는 내가 띄운 서버에만 남습니다.",
  "text": {
    "why": "영양·운동·수면·생리주기·복약을 각각 다른 앱으로 추적하면 앱마다 구독료가 붙고, 그마저 하나로 모아 보는 화면이 없습니다. SparkyFitness는 이 전부를 자가호스팅 서버 하나로 모으고(도커 컴포즈로 직접 운영), 가족 여러 명이 권한을 나눠 쓸 수 있게 합니다. Apple Health·Fitbit·Garmin·Oura 등 8개 이상의 서비스와 연동해 걸음·운동·수면 같은 값을 자동으로 가져오고, 베타 단계의 대화형 AI(SparkyAI)로 음식 사진을 올려 식사를 기록할 수도 있습니다.",
    "take": "\"오픈소스가 아니라 소스공개\"라고 스스로 밝히면서도, 상업적 대안 여러 개의 구독료를 합친 것과 비교한 표까지 공개해 둔 점이 솔직합니다.",
    "build": [
      "여러 건강 앱 구독을 하나의 자가호스팅 서버로 통합해서 가족과 함께 쓰기",
      "웨어러블 데이터를 자동 동기화해서 영양·운동·수면을 한 화면에서 보기",
      "베타 AI 챗봇으로 사진 한 장으로 식사 기록해 보기(아직 베타임에 유의)"
    ],
    "who": [
      {
        "role": "여러 건강 앱을 따로 쓰며 구독료를 여러 번 내는 사람",
        "situation": null
      },
      {
        "role": "가족 단위로 건강 데이터를 한곳에서 관리하고 싶은 사람",
        "situation": null
      },
      {
        "role": "자기 데이터를 클라우드에 맡기고 싶지 않은 사람",
        "situation": null
      }
    ],
    "start": [
      {
        "command": false,
        "text": "자가호스팅(도커 필요):"
      },
      {
        "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": "→ http://localhost:8080 접속"
      },
      {
        "command": false,
        "text": "비기술 사용자는 PikaPods 같은 제3자 클라우드 호스팅도 가능"
      }
    ],
    "caveat": [
      "커스텀 비상업 라이선스입니다 — 소스는 공개되어 있지만 오픈소스는 아니고, 상업적 이용에는 저작자의 사전 허가가 필요합니다",
      "AI 챗봇·가족 공유·API 문서는 아직 베타로, 컨테이너 자동 업데이트는 권장하지 않습니다",
      "비교표는 SparkyFitness 쪽에서 직접 작성한 것이라고 README가 밝힙니다"
    ]
  },
  "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": "미확인 — 쓰기 전에 살펴보세요.",
    "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": "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다."
  },
  "ranks": {
    "as_of": "2026-09-16T21:00:00.000Z",
    "all_time": null,
    "rising": {
      "24h": null,
      "7d": null,
      "30d": null
    },
    "categories": [
      {
        "category": "data",
        "label": "데이터",
        "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.png",
    "cover": null,
    "cover_width": null,
    "cover_height": null,
    "gallery": [
      "https://tesign.com/img/sparkyfitness-abf91101ec.png"
    ],
    "alt": "SparkyFitness 대시보드. 오늘 먹은 칼로리·소모 칼로리·수분 섭취량과 14일 영양 추이 그래프가 표시되어 있습니다.",
    "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": [
    "이 파일은 tesign.com 항목 페이지와 같은 빌드에서 같은 데이터로 만들어졌습니다. 소개 글은 편집자가 쓴 것이고, 숫자는 저장된 관측값입니다.",
    "JSON의 null은 관측하지 않았다는 뜻입니다 — 0이 아닙니다. 마크다운에서는 [확인 필요]로 적습니다.",
    "별 총합 = GitHub에서 마지막으로 확인한 값(stars_checked_at) + 그 뒤 GH Archive에서 관측한 증가. 24h·7d·30d 증가는 GH Archive 시간별 이벤트를 기준 시각(as_of)까지 합한 값. 우리 점수는 없습니다.",
    "요약이며 법적 조언이 아닙니다."
  ]
}
