Skip to content

Latest commit

ย 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

HabitBridge โ€” Intentional Friction & Micro-Swap

HabitBridge

Intentional Friction & Micro-Swap ยท ํ•ด๋น—๋ธŒ๋ฆฟ์ง€

๋„ํŒŒ๋ฏผ์„ ๋ฌด์ž‘์ • ๋ง‰์ง€ ๋งˆ์„ธ์š”. ๊ฐ€์น˜ ์žˆ๋Š” ๋งˆ์ดํฌ๋กœ ํ–‰๋™์œผ๋กœ ์Šค์™‘ํ•˜์„ธ์š”. ๋กœ์ปฌ ์šฐ์„  ์•ˆ๋“œ๋กœ์ด๋“œ ์Šคํฌ๋ฆฐํƒ€์ž„ ์•ฑ โ€” ์„ค๊ณ„์„œ(PRD/SDD), ๋ธŒ๋ผ์šฐ์ € ํฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ(v1.0.0) ์ด ํ•œ ์ €์žฅ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

Release Live Demo PRD/SDD

Android CI Web CI License: MIT


์ด ์ €์žฅ์†Œ๋Š” ๋ฌด์—‡์ธ๊ฐ€

ใ€ŠOpalใ€‹, ใ€ŠOne Secใ€‹, ใ€ŠScreenZenใ€‹ ๊ฐ™์€ ๋””์ง€ํ„ธ ๋””ํ†ก์Šค ์•ฑ์ด ์™œ ํผ์ง€๊ณ  ์™œ 2์ฃผ ์•ˆ์— ์ง€์›Œ์ง€๋Š”์ง€๋ฅผ ๋ถ„์„ํ•˜๊ณ , ๊ทธ ๊ฒฐํ•จ์„ ๋„˜๋Š” ์ œํ’ˆ์„ ์„ค๊ณ„ยท๊ตฌํ˜„ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

+ฮฑ ํ•œ ์ค„
์ฐจ๋‹จ โ†’ ์Šค์™‘ ์ธ์Šคํƒ€ยท์œ ํŠœ๋ธŒยทํ‹ฑํ†ก์„ ์ผœ๋Š” ์ˆœ๊ฐ„ 3~5์ดˆ ๋ฉˆ์ถค. ๊ทธ ํ™”๋ฉด์—์„œ 1๋ถ„ ์ž์„ธ ๋ฆฌ์…‹ ยท ๋‹จ์–ด 1๊ฐœ ยท ์˜๊ฐ ํ€ต ๋ฉ”๋ชจ ยท ๊ฐ์ • ์ฒดํฌ์ธ ์ค‘ ํ•˜๋‚˜๋ฅผ 1ํƒญ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  ํ™ˆ์œผ๋กœ
์ƒํ™ฉ ์ธ์ง€ํ˜• ์Šค๋งˆํŠธ ์‰ด๋“œ ์ทจ์นจยทํšŒ์˜ ์ค‘์€ ์šฐํšŒ ๋ถˆ๊ฐ€, ์—…๋ฌด ์‹œ๊ฐ„์€ 5์ดˆ, ์ผ์ƒ์€ 3์ดˆ. ์šฐํšŒํ•˜๋ฉด 10๋ถ„์€ ์กฐ์šฉํžˆ, ํ•œ ์‹œ๊ฐ„์— 6๋ฒˆ ๋„˜๊ฒŒ ์—ด๋ฆฌ๋ฉด ์˜คํžˆ๋ ค ์™„ํ™”(๋งˆ์ฐฐ ํ”ผ๋กœ ๋ฐฉ์ง€)
100% ๋กœ์ปฌ ยท ์„œ๋ฒ„ ์—†์Œ INTERNET ๊ถŒํ•œ ์ž์ฒด๊ฐ€ ์—†์Œ. Room DB์—๋งŒ ์ €์žฅ, ๋ฉ”๋ชจ๋Š” Documents/HabitBridge/*.md๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
1ํšŒ ๊ฒฐ์ œ ยท ์˜คํ”ˆ์ฝ”์–ด ๊ตฌ๋…ยท๊ด‘๊ณ ยท๋ฐ์ดํ„ฐ ํŒ๋งค ์—†์Œ. ์ •์ฑ… ์—”์ง„๊ณผ ์•ฑ์€ MIT ๊ณต๊ฐœ ์†Œ์Šค

์„ธ ์‚ฐ์ถœ๋ฌผ์€ ๊ฐ™์€ ๊ทœ์น™์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ… ์—”์ง„์€ ์›น(src/engine.js)๊ณผ ์•ˆ๋“œ๋กœ์ด๋“œ(android/core/policy)์— ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ 1:1 ํฌํŒ…๋˜์–ด ์žˆ๊ณ , ๊ฐ™์€ 12๊ฐœ ํ…Œ์ŠคํŠธ ๋ฒกํ„ฐ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ (v1.0.0)

์„ค์น˜: Releases์—์„œ habitbridge-1.0.0.apk๋ฅผ ๋ฐ›์•„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค(Android 8.0+, minSdk 26). Play ์Šคํ† ์–ด ๋“ฑ๋ก ์ „ ๋‹จ๊ณ„๋ผ ์‚ฌ์ด๋“œ๋กœ๋“œ์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„๋œ ๊ฒƒ

  • ๊ฐ์ง€: UsageStatsManager 1์ดˆ ํด๋ง ํฌ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค(ํ™”๋ฉด ์ผœ์ง ์‹œ๋งŒ, specialUse) + ์„ ํƒ์  ์ ‘๊ทผ์„ฑ ์„œ๋น„์Šค(๋” ๋น ๋ฅธ ๊ฐ์ง€, ํ™ˆ ๋ณต๊ท€)
  • ๊ฐœ์ž…: TYPE_APPLICATION_OVERLAY ์ธํ„ฐ์…‰ํ„ฐ โ€” 3/5์ดˆ HOLD ์ง„ํ–‰ ๋ฐ”, ์Šค์™‘ 4์ข…, ์šฐํšŒ ๋ฒ„ํŠผ(HARDCORE์—์„œ๋Š” ์ž ๊น€), ์šฐํšŒ ํ›„ 10๋ถ„ ์ฟจ๋‹ค์šด, ์‹œ๊ฐ„๋‹น 6ํšŒ ์ดˆ๊ณผ ์‹œ ์™„ํ™”, ์ผ์ผ ํ• ๋‹น ์†Œ์ง„ ์‹œ ์šฐํšŒ ๋ถˆ๊ฐ€
  • ์Šค์™‘ 4์ข…: 1๋ถ„ ์ž์„ธ ๋ฆฌ์…‹(6๋‹จ๊ณ„ ํƒ€์ด๋จธ), ๋‹จ์–ด ์นด๋“œ(12๊ฐœ ์‹œ๋“œ ๋ฑ, ํšŒ์ „), ํ€ต ๋ฉ”๋ชจ(280์ž), ๊ฐ์ • ์ฒดํฌ์ธ(5์ข…)
  • ๋ฐ์ดํ„ฐ: Room 7ํ…Œ์ด๋ธ”(๋Œ€์ƒยทํ—ˆ์šฉ ๋ชฉ๋กยท๊ฐœ์ž… ๋กœ๊ทธยท๋ฉ”๋ชจยท์ผ์ผ ์‚ฌ์šฉ๋Ÿ‰ยท์„ค์ •ยท๋‹จ์–ด), ์Šคํ‚ค๋งˆ ๋‚ด๋ณด๋‚ด๊ธฐ, ์ž๋™ ๋ฐฑ์—… ํฌํ•จ
  • ์•ฑ UI: ์˜จ๋ณด๋”ฉ(๊ถŒํ•œ 6๋‹จ๊ณ„, ๊ฑฐ๋ถ€ ์‹œ ์ด์œ  ์„ค๋ช…), ๋Œ€์‹œ๋ณด๋“œ(Focus Score ๋งยท์˜ค๋Š˜/7์ผยท์ตœ๊ทผ ๊ธฐ๋ก), ๋Œ€์ƒ ์•ฑ ๊ด€๋ฆฌ(์„ค์น˜ ์•ฑ ๊ฒ€์ƒ‰ยท์‰ด๋“œยทํ• ๋‹นยทํ—ˆ์šฉ ๋ชฉ๋ก), ๋ฉ”๋ชจ(.md ๋‚ด๋ณด๋‚ด๊ธฐ), ์„ค์ •(์ทจ์นจยท์—…๋ฌด ์‹œ๊ฐ„ยท์š”์ผยท์ฟจ๋‹ค์šดยท์บ˜๋ฆฐ๋”)
  • ๊ณต์œ  ์นด๋“œ 1080ร—1920(๊ฐœ์ธ์ •๋ณด ์—†์Œ) โ†’ ๊ณต์œ  ์‹œํŠธ, ๋ถ€ํŒ…/์—…๋ฐ์ดํŠธ ํ›„ ์„œ๋น„์Šค ์žฌ์‹œ์ž‘, ํ•œ๊ตญ์–ด/์˜์–ด
  • ์—†๋Š” ๊ฒƒ(์˜๋„์ ): INTERNET ๊ถŒํ•œ, ๋ถ„์„ SDK, ํฌ๋ž˜์‹œ ๋ฆฌํฌํ„ฐ, ์•ฑ ์‚ญ์ œ ๋ฐฉ์–ด

๊ฒ€์ฆ(์—๋ฎฌ๋ ˆ์ดํ„ฐ Pixel 7 ยท API 36): ์˜จ๋ณด๋”ฉ โ†’ ๋Œ€์ƒ ์ถ”๊ฐ€ โ†’ ๊ฐœ์ž… โ†’ ์Šค์™‘ โ†’ ํ™ˆ ๋ณต๊ท€ โ†’ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ˜์˜, NORMAL 5์ดˆ ํ›„ ์šฐํšŒ โ†’ ์ฟจ๋‹ค์šด ํ†ต๊ณผ, ํ€ต ๋ฉ”๋ชจ โ†’ Notes_YYYYMMDD.md ์ƒ์„ฑ๊นŒ์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ˆ์ฐจ๋Š” RELEASE.md ยง3 ์ฒดํฌ๋ฆฌ์ŠคํŠธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์„ค์ • ์•ฑ์ฒ˜๋Ÿผ ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ˆจ๊ธฐ๋Š” ์•ฑ(HIDE_OVERLAY_WINDOWS)์€ OS ์ œ์•ฝ์œผ๋กœ ๊ฐœ์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ

cd android
./gradlew :core:policy:test        # ์ •์ฑ… ์—”์ง„ ํ…Œ์ŠคํŠธ 12๊ฑด
./gradlew :app:assembleDebug       # app/build/outputs/apk/debug/app-debug.apk

๋ฆด๋ฆฌ์Šค ์„œ๋ช…ยทํƒœ๊ทธยทActions ํŒŒ์ดํ”„๋ผ์ธ์€ RELEASE.md.

์›น ๋ฐ๋ชจ(ํฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ)์—์„œ ํ•ด๋ณผ ๊ฒƒ

https://jeiel85.github.io/habitbridge-android/

  1. ํฐ์˜ Instagram ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด ํ„ฐ๋ฏธ๋„ํ’ ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋œน๋‹ˆ๋‹ค. 5์ดˆ ๋Œ€๊ธฐ ํ›„ [>] ์•ฑ ๊ณ„์†ํ•˜๊ธฐ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค.
  2. ์˜ค๋ฅธ์ชฝ ์ƒํ™ฉ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์‹œ๊ฐ์„ 00:40์œผ๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ "ํšŒ์˜ ์ค‘"์„ ์ผœ ๋ณด์„ธ์š”. ์‰ด๋“œ๊ฐ€ HARDCORE๊ฐ€ ๋˜์–ด ์šฐํšŒ ๋ฒ„ํŠผ์ด ์ž ๊น๋‹ˆ๋‹ค.
  3. ์Šค์™‘ 4์ข… ์ค‘ ํ•˜๋‚˜๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ๋Œ€์‹œ๋ณด๋“œ์˜ Focus Scoreยท์ ˆ์•ฝ ์‹œ๊ฐ„์ด ์˜ค๋ฆ…๋‹ˆ๋‹ค.
  4. ์šฐํšŒํ•ด์„œ ์•ฑ์— ๋“ค์–ด๊ฐ€๋ฉด 10๋ถ„ ์ฟจ๋‹ค์šด์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. +10๋ถ„์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์‹œ ๊ฐœ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  5. ์•ฑ๋ณ„ ํ• ๋‹น๋Ÿ‰์„ ๋„˜๊ธฐ๋ฉด ๋ชจ๋“œ๊ฐ€ "ํ• ๋‹น ์†Œ์ง„"์œผ๋กœ ๋ฐ”๋€Œ๋ฉฐ ์šฐํšŒ๊ฐ€ ๋ง‰ํž™๋‹ˆ๋‹ค.
  6. ๊ณต์œ  ์นด๋“œ PNG์™€ Notes_YYYYMMDD.md๋ฅผ ๋‚ด๋ ค๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋””๋กœ๋„ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ

๋ฌธ์„œ ๋‚ด์šฉ
docs/PRD-SDD.md ์„ค๊ณ„์„œ v1.1 โ€” ์‹œ์žฅ ๋ถ„์„, ๊ฐ€์น˜ ์ œ์•ˆ, ๊ฐœ์ž…ยท์‰ด๋“œยท์ƒํ™ฉ ๊ทœ์น™, ์Šค์™‘ ๋ช…์„ธ, Focus Score, ๊ถŒํ•œ ํ”Œ๋กœ์šฐ, ์—ฃ์ง€์ผ€์ด์Šค, Room ๋ชจ๋ธ, ์•ˆ๋“œ๋กœ์ด๋“œ ์•„ํ‚คํ…์ฒ˜(๊ฐ์ง€ ๊ฒฝ๋กœยท์˜ค๋ฒ„๋ ˆ์ดยทํ™ˆ ๋ณต๊ท€ยท๋ฐฐํ„ฐ๋ฆฌยทํ”„๋ผ์ด๋ฒ„์‹œ), ์ˆ˜์ต ๋ชจ๋ธยทPlay ์ •์ฑ…, ๊ฒ€์ฆ ๊ณ„ํš, ๋ฆฌ์Šคํฌ. v1.1.1์— ๊ตฌํ˜„ ์ƒํƒœ(๐Ÿ“ฑ) ๋ฐ˜์˜
docs/CHANGELOG.md ์„ค๊ณ„์„œ ์ •์ • ๋ชฉ๋ก๊ณผ ์•ฑยทํ”„๋กœํ† ํƒ€์ž… ๋ณ€๊ฒฝ ์ด๋ ฅ
docs/DECISIONS.md ๋˜๋Œ๋ฆฌ๊ธฐ ์–ด๋ ค์šด ๊ฒฐ์ • 7๊ฑด
docs/BACKLOG.md ๋ฏธ๋ค„๋‘” ๊ฐœ์„ ์ 
RELEASE.md ์•ˆ๋“œ๋กœ์ด๋“œ ๋นŒ๋“œยท์„œ๋ช…ยท๊ฒ€์ฆยท๋ฆด๋ฆฌ์Šค ์ ˆ์ฐจ
docs/archive/ 2026-09-09 ์›๋ณธ ์„ค๊ณ„์„œยทํŒจํ‚ค์ง€ README (๋‚ด์šฉ ๋ฌด์ˆ˜์ • ๋ณด๊ด€)

์ €์žฅ์†Œ ๊ตฌ์กฐ

index.html, styles.css, src/     ์›น ํฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (GitHub Pages ๋ฃจํŠธ) ยท tests/ node:test
android/
  core/policy/                   ์ˆœ์ˆ˜ Kotlin ์ •์ฑ… ์—”์ง„ + PolicyTest (์›น engine.js์™€ 1:1)
  app/                           ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ (data / detect / overlay / ui / util)
  gradle/libs.versions.toml      AGP 9.1 ยท Kotlin 2.2 ยท Compose BOM ยท Room 2.7
docs/                            ์„ค๊ณ„์„œ์™€ ๋ถ€์† ๋ฌธ์„œ
.github/workflows/               web CI ยท Android CI(APK ์•„ํ‹ฐํŒฉํŠธ) ยท Release(ํƒœ๊ทธ โ†’ ์„œ๋ช… APK/AAB)

๋กœ๋“œ๋งต

  • P0 (์™„๋ฃŒ): ์ •์ฑ… ์—”์ง„ยทUX๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ ๊ฒ€์ฆ, ๋ผ์ด๋ธŒ ๋ฐ๋ชจ ๊ณต๊ฐœ
  • ์Šคํ”„๋ฆฐํŠธ 1~4 (์™„๋ฃŒ, v1.0.0): ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ ๊ตฌํ˜„ + ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๊ฒ€์ฆ + ๋ฆด๋ฆฌ์Šค ํŒŒ์ดํ”„๋ผ์ธ
  • P1 (๋‹ค์Œ): ์‹ค๊ธฐ๊ธฐ 5๋ช… 7์ผ โ€” ๊ฐ์ง€ ์ง€์—ฐ, OEM ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ œํ•œ, ๋ฐฐํ„ฐ๋ฆฌ(ํ•˜๋ฃจ โ‰ค 1%), ์ ‘๊ทผ์„ฑ ๊ฒฝ๋กœ
  • P2: ํด๋กœ์ฆˆ๋“œ ํ…Œ์ŠคํŠธ 20๋ช… 14์ผ โ€” 2์ฃผ ์œ ์ง€์œจ โ‰ฅ 60%, ๊ถŒํ•œ ์œ ์ง€ โ‰ฅ 80%, ์Šค์™‘ ๋น„์œจ โ‰ฅ 40%, ๊ฐ€๊ฒฉ ์„ค๋ฌธ
  • P3: Play ์ •์ฑ… ์ฒดํฌ๋ฆฌ์ŠคํŠธยท๊ฒฐ์ œ โ†’ ํ”„๋กœ๋•์…˜ 100๋ช…

๊ณ ์ง€

ใ€ŠOpalใ€‹, ใ€ŠOne Secใ€‹, ใ€ŠScreenZenใ€‹์€ ๊ฐ ๊ถŒ๋ฆฌ์ž์˜ ์ œํ’ˆ์ด๋ฉฐ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ด๋“ค๊ณผ ๋ฌด๊ด€ํ•œ ๋…๋ฆฝ ๊ธฐํš์ž…๋‹ˆ๋‹ค. ์›น ๋ฐ๋ชจ๋Š” ์‹ค์ œ ์•ฑ์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ ์‹œ๊ฐ„๋งŒ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด์„ ์Šค: MIT


English

HabitBridge โ€” Intentional Friction & Micro-Swap

A local-first Android screen-time app: the design document (PRD/SDD), a browser phone simulator, and the real Android app (v1.0.0) live in one repository and share one policy engine.

Pitch. Blocking apps fail for two reasons: the void after the block (you drift to another feed) and friction fatigue (a 5-second pause in front of your messenger during a meeting). HabitBridge keeps the pause but fills it with a one-tap micro-swap โ€” a 1-minute posture reset, one vocabulary card, a one-line inspiration note, or an emotion check-in โ€” and adapts the shield to context: no bypass during sleep hours or calendar events, 5 s during work hours, a 3 s reminder otherwise. A bypass earns 10 quiet minutes, and more than six intercepts in an hour softens the shield instead of nagging harder. No INTERNET permission, no server, pay once.

Android app (v1.0.0). Download the APK from Releases (Android 8.0+). Foreground detection via a 1 s UsageStatsManager poller (screen on only, specialUse foreground service) plus an optional accessibility service; a TYPE_APPLICATION_OVERLAY interceptor with HOLD bar, four swaps, a bypass button that locks under HARDCORE, 10-minute cool-down after a bypass, friction-fatigue softening and daily quotas; Room (7 tables), onboarding with per-permission explanations, dashboard with an explicit Focus Score, target management, Markdown note export to Documents/HabitBridge, a 1080ร—1920 share card, boot restart, KR/EN. Verified on a Pixel 7 API 36 emulator end to end (intercept โ†’ swap โ†’ home โ†’ dashboard, bypass โ†’ cool-down, note โ†’ .md). Build with cd android && ./gradlew :app:assembleDebug; signing and the tag-driven release workflow are in RELEASE.md.

Web demo. https://jeiel85.github.io/habitbridge-android/ โ€” the same rules in a phone simulator with a context clock.

Docs. docs/PRD-SDD.md (Korean), docs/CHANGELOG.md, docs/DECISIONS.md, docs/BACKLOG.md.

Disclaimer. Opal, One Sec and ScreenZen belong to their respective owners; this is an independent product. MIT licensed.

About

๐ŸŒ‰ HabitBridge: Intentional Friction & Micro-Swap โ€” ์ฐจ๋‹จ ๋Œ€์‹  1๋ถ„ ์ŠคํŠธ๋ ˆ์นญยท๋‹จ์–ดยท๋ฉ”๋ชจยท๊ฐ์ • ์ฒดํฌ์ธ์œผ๋กœ ์Šค์™‘ํ•˜๋Š” ๋กœ์ปฌ ์šฐ์„  ์•ˆ๋“œ๋กœ์ด๋“œ ์Šคํฌ๋ฆฐํƒ€์ž„ ์•ฑ ์„ค๊ณ„์„œ(PRD/SDD v1.1) + ์ •์ฑ… ์—”์ง„ยท๊ฐœ์ž… UX๋ฅผ ์ฒดํ—˜ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ € ํฐ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ | Don't just block dopamine, swap it: local-first screen-time app design + web prototype

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages