Skip to content

Latest commit

 

History

130 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Move sketch

캐주얼하게 조깅과 라이딩을 즐기는 사람들을 위한, 부담 없는 세션 트래킹 앱

캐주얼하게 조깅·라이딩을 즐기는 사람들을 위한, 부담 없는 세션 트래킹 앱입니다. 운동 결과를 수치와 순위 대신, 한 컷 이미지로 남기고 아카이빙합니다.

목표

기존 러닝/라이딩 앱(Strava, Nike Run Club 등)은 기록 단축과 경쟁에 초점이 맞춰져 있어 가볍게 운동을 즐기는 사람에게는 진입 장벽이 높고 피로감을 유발합니다. 반대로 캐시워크류의 만보기 앱은 완전히 수동적인 걸음 수 누적에 그쳐, 목적을 가진 능동적 운동 세션을 다루지 못합니다.

이 앱은 그 사이의 빈틈을 겨냥합니다.

  • 세션 기반: '시작'과 '종료'가 있는 명확한 운동 단위
  • 부담 없는 목표: 목표치를 사전에 강제하지 않고, 결과에 따라 사후에 보상
  • 비교하지 않는 기록: 수치보다 그날의 경험을 한 컷으로 아카이빙

네 가지 원칙

원칙 뜻
비교하지 않는다 리더보드·랭킹·순위 정렬 화면 없음. 친구에게는 응원만 보냄
강요하지 않는다 미션은 최대 2개까지 고르는 참고용 넛지. 세션 중 달성 판정 없음
실패를 지적하지 않는다 미달성이어도 카드는 남음. 결과 화면은 못 한 것을 세지 않음
프라이버시가 기본값 거리·시간은 공유 시 폐기, 동네명만 노출. 수치는 친구에게 안 보임

핵심 기능

1. 축 기반 미션 시스템

세션 시작 시 목표 수치를 미리 정하지 않고, 오늘 신경 쓸 미션 축만 최대 2개 선택합니다. 각 축 카드에는 최근 5세션 이동평균이 참고용으로 표시됩니다.

  • 공통 축: 거리, 페이스/속도, 지속시간, 경로(새로 지나간 도로)
  • 조깅 전용: 인터벌 (빠르게-천천히 반복 감지)
  • 라이딩 전용: 스프린트 (순간 속도 버스트 감지)

세션 종료 후, 실제 도달한 값을 구간에 매핑해 보상을 사후 지급합니다.

2. 스케치 파츠 보상

선택한 축의 결과에 따라 스케치 파츠를 지급하고, 세션 종료 시 자동으로 한 컷 이미지를 합성합니다. 유저가 직접 배치를 조정하지 않는 Zero-Intervention 방식으로, 미션을 고르는 행위 자체에 게임성을 둡니다.

미션 축에 따라 파츠 슬롯이 정해져 있고 달성 정도에 따라 구체적인 에셋이 결정됩니다. 색상은 고정 팔레트에서 런타임에 랜덤 틴트를 적용해 다양성을 확보합니다.

3. 자동/수동 일시정지

GPS 속도가 임계값 이하로 일정 시간 지속되면 자동으로 일시정지되어 타이머가 멈추고 천천히 깜빡입니다. 수동 일시정지 시에는 오버레이 패널에서 "지금 종료하면" 미션 결과 프리뷰와 응원 메시지를 보여줍니다. 자동 일시정지에는 이 패널이 뜨지 않습니다.

4. 프라이버시 우선 소셜

세션 데이터는 본인 전용 컬렉션에 전체 저장되어 기기 변경 시에도 복구됩니다. 공유를 선택한 세션만 별도 컬렉션에 최소 데이터로 업로드되어, 친구 피드에는 구조적으로 수치가 노출될 수 없습니다.

화면 구성

하단 탭 구성
홈 오늘 날씨, 마지막 기록, 세션 시작 CTA, 지난 일주일 기록 여부
피드 친구들의 운동 기록이 출력되는 소셜 영역
기록 공유 여부와 상관 없이 나의 세션 기록이 모두 담긴 월별 기록 목록
나 프로필과 공유된 기록, 친구 관리 및 설정

기술 스택

영역 스택 비고
UI / 상태관리 Flutter, Riverpod 세션 상태, 미션 판정 로직을 StateNotifier + 위치 스트림으로 관리
백그라운드 GPS (for Android) Kotlin (Foreground Service) Doze 모드 대응, OS 강제 종료 시에도 로컬 DB에 즉시 append 후 재실행 시 복구
백그라운드 GPS (for iOS) Swift (iOS Background Modes) CLLocationManager 백그라운드 위치 업데이트, 앱 종료 후 위치 이벤트 발생 시 UIApplication.LaunchOptoinsKey.location으로 재실행
로컬 저장소 Drift 세션 원본 데이터, 오프라인 우선
경로 처리 Ramer-Douglas-Peucker GPS 노이즈 필터링/압축, 새 경로 판정 정확도 향상
이미지 합성 RepaintBoundary + GlobalKey 웹툰 레이어를 픽셀 유실 없이 PNG로 캡처
백엔드 Firebase (Auth, Firestore, Storage) 서버 직접 구축 대신 채택해 Flutter 개발에 시간 집중
지도/위치 geolocator, flutter_map

About

무브스케치 — 캐주얼하게 조깅과 라이딩을 즐기는 사람들을 위한, 부담 없는 세션 트래킹 앱

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages