한국어 | English
작고 조용한 macOS 메뉴막대 스트레스 배출 앱입니다.
메뉴막대의 픽셀 사람 아이콘을 누르면 짧은 bbong 애니메이션이 나오고 오늘의 카운트가 올라갑니다. 팀에 들어가 있다면 Supabase로 클릭 이벤트가 동기화되어, 퇴근 전 누가 오늘의 방구쟁이인지 볼 수 있습니다.
bbong은 runcat처럼 항상 보이는 작은 메뉴막대 장난감에서 시작했고, 지금은 친한 직장 동료 2-5명이 같이 쓰는 작은 팀 밈 앱으로 확장 중입니다.
어떤 날은 생산성 대시보드보다 “이 회의는 힘들었다”를 조용히 표현할 버튼이 필요합니다.
bbong은 그 순간을 작은 농담으로 바꿉니다.
- 좌클릭으로 조용히 배출
- 우클릭으로 팀 상태 확인
- 매일 17:50에 오늘의 방구쟁이 카드 알림
소리 없음. 과한 분석 없음. 회사 웰니스 감성 없음. 메뉴막대에 있는 작은 픽셀 농담입니다.
- AppKit 기반 네이티브 macOS 메뉴막대 앱
- 작고 흑백에 가까운 픽셀 상태 아이콘
- 클릭 시 무음 bbong 애니메이션
- 날짜가 바뀌면 자동 초기화되는 로컬 일일 카운트
- Supabase Auth를 통한 Kakao Login
- Supabase 기반 2-5명 팀 기능
- 팀 생성/초대 코드 참여
- 오늘의 팀원별 카운트를 보는 팀 상태 창
- 팀 코드 복사 및 팀 나가기
- 네트워크 실패 대비 pending queue
- 매일 17:50 오늘의 방구쟁이 알림
- 사용자 LaunchAgent 기반 로그인 시 자동 실행
- 지인 테스트용 DMG 패키징 스크립트
현재 앱에서 제공하는 화면과 동작:
- 메뉴막대 픽셀 사람 아이콘
- 로그인, 팀 상태, 팀 생성/참여, 초기화, 종료가 있는 우클릭 메뉴
- 팀 코드와 오늘의 카운트를 보여주는 팀 상태 창
- 오늘의 방구쟁이 macOS 알림
메뉴막대 스프라이트는 Resources/person-crawl.png를 사용하고, bbong 프레임은 Swift에서 직접 그립니다.
- Swift 5.9
- AppKit
NSStatusItem - 작은 설정/상태 창을 위한 SwiftUI
- Swift Package Manager
- Supabase Swift SDK
- Supabase Auth, Postgres, RLS, RPC
- Supabase Kakao OAuth
- macOS 13 이상
- SwiftPM을 지원하는 Xcode
- 팀 동기화를 사용하려면 Supabase 프로젝트
- Kakao Login을 사용하려면 Kakao Developers 앱
- 경고 없는 배포를 하려면 Apple Developer ID
Xcode에서 열기:
File > Open... > Package.swift
터미널 빌드:
chmod +x scripts/build_app.sh
./scripts/build_app.sh실행:
open dist/bbong.app종료:
pkill -x bbong런타임 설정은 환경 변수 또는 번들된 Info.plist 키에서 읽습니다.
export BBONG_SUPABASE_URL="https://your-project-ref.supabase.co"
export BBONG_SUPABASE_PUBLISHABLE_KEY="sb_publishable_..."
export BBONG_AUTH_CALLBACK_SCHEME="bbong"로컬 번들 빌드에서는 예시 설정 파일을 복사합니다.
cp Config/Local.example.xcconfig Config/Local.xcconfig그리고 값을 채웁니다.
BBONG_SUPABASE_URL = https://your-project-ref.supabase.co
BBONG_SUPABASE_PUBLISHABLE_KEY = sb_publishable_your_key_here
BBONG_AUTH_CALLBACK_SCHEME = bbong
scripts/build_app.sh가 이 값을 dist/bbong.app/Contents/Info.plist에 주입합니다.
Config/Local.xcconfig와 supabase/.temp/ 아래 파일은 커밋하지 마세요.
데이터베이스 마이그레이션은 supabase/migrations에 있습니다.
profilesteamsteam_membersbbong_events- RLS policies
create_teamjoin_teamleave_teamget_team_daily_counts
연결된 Supabase 프로젝트에 마이그레이션 적용:
supabase db pushKakao Login 설정 문서:
지인 테스트용 DMG 생성:
./scripts/package_dmg.sh결과물은 dist/ 아래에 생성됩니다.
dist/bbong-0.1.0-2.dmg
지인은 DMG를 열고 bbong.app을 Applications 폴더로 드래그해서 설치할 수 있습니다.
현재 빌드는 로컬/비공개 테스트용 ad-hoc 서명입니다. macOS에서 확인되지 않은 앱 경고가 뜰 수 있습니다. 경고 없이 배포하려면 Apple Developer ID로 서명하고 notarization을 거쳐야 합니다.
중요한 동작 원칙:
- 클릭 피드백은 즉시 보여야 합니다.
- Supabase 동기화는 eventual consistency로 처리합니다.
- 원격 저장 실패 이벤트는 pending queue에 남깁니다.
- 팀 상태 새로고침은 pending 이벤트를 먼저 flush한 뒤 카운트를 가져옵니다.
- 이 앱은 의도적으로 소리가 없습니다.
자주 쓰는 명령:
./scripts/build_app.sh
open dist/bbong.app
codesign --verify --verbose=2 dist/bbong.app
plutil -lint dist/bbong.app/Contents/Info.plist- React Native 개발자를 위한 Swift/Xcode 입문 가이드
- Kakao Login 설정 가이드
- Team sync plan
- Team sync design
- Team sync implementation notes
이 프로젝트는 공개 릴리즈가 아니라 소규모 지인 팀을 위한 MVP입니다.
현재 동작:
- 로컬 메뉴막대 클릭
- Kakao Login
- Supabase 팀 생성/참여/나가기
- 일일 팀 카운트
- pending click queue
- 오늘의 방구쟁이 알림
- DMG 패키징
더 넓게 배포하려면 필요함:
- Developer ID signing
- Apple notarization
- 첫 실행 온보딩 개선
- 자동 업데이트 또는 릴리즈 채널
아직 라이선스를 선택하지 않았습니다.
한국어 | English
A tiny native macOS menu bar app for office stress venting.
Click the little pixel person in your menu bar. It silently fires a short bbong animation, increments your daily count, and, if you are in a team, syncs the event so your coworkers can see who became today's bbong champion.
bbong started as a silly runcat-style menu bar toy, then grew into a small team ritual for 2-5 close coworkers.
Some days you do not need another productivity dashboard. You need a harmless button that says, "I am done with this meeting."
bbong turns that moment into a small shared joke:
- Left-click to vent.
- Right-click to see your team.
- Come back at 5:50 PM for the daily champion card.
No sound. No analytics dashboard. No corporate wellness language. Just a quiet pixel joke in the menu bar.
- Native macOS menu bar app built with AppKit
- Compact monochrome pixel status item
- Silent click-triggered bbong animation
- Local daily count with automatic date reset
- Kakao Login through Supabase Auth
- Supabase-backed teams for 2-5 coworkers
- Team create/join with invite code
- Team status window with today's per-member counts
- Copyable team code and leave-team flow
- Pending queue for offline or failed click sync
- Daily 17:50 local notification for today's bbong champion
- Optional open-at-login support through a user LaunchAgent
- DMG packaging script for small private testing
Current app surface:
- Menu bar pixel person
- Right-click menu for login, team status, team create/join, reset, and quit
- Team status window with team code and daily counts
- macOS notification for the daily champion card
The menu bar sprite uses Resources/person-crawl.png, with bbong frames drawn in Swift.
- Swift 5.9
- AppKit for
NSStatusItem - SwiftUI for small setup/status windows
- Swift Package Manager
- Supabase Swift SDK
- Supabase Auth, Postgres, RLS, and RPC
- Kakao OAuth via Supabase
- macOS 13 or newer
- Xcode with SwiftPM support
- Supabase project if you want team sync
- Kakao Developers app if you want Kakao Login
- Apple Developer ID only if you want smooth public distribution
Open in Xcode:
File > Open... > Package.swift
Build from terminal:
chmod +x scripts/build_app.sh
./scripts/build_app.shRun:
open dist/bbong.appStop the running app:
pkill -x bbongRuntime config is read from environment variables or bundled Info.plist keys.
export BBONG_SUPABASE_URL="https://your-project-ref.supabase.co"
export BBONG_SUPABASE_PUBLISHABLE_KEY="sb_publishable_..."
export BBONG_AUTH_CALLBACK_SCHEME="bbong"For local bundle builds:
cp Config/Local.example.xcconfig Config/Local.xcconfigThen fill in:
BBONG_SUPABASE_URL = https://your-project-ref.supabase.co
BBONG_SUPABASE_PUBLISHABLE_KEY = sb_publishable_your_key_here
BBONG_AUTH_CALLBACK_SCHEME = bbong
scripts/build_app.sh injects those values into dist/bbong.app/Contents/Info.plist.
Do not commit Config/Local.xcconfig or files under supabase/.temp/.
The database migrations live in supabase/migrations.
profilesteamsteam_membersbbong_events- RLS policies
create_teamjoin_teamleave_teamget_team_daily_counts
Apply migrations to a linked Supabase project:
supabase db pushKakao Login setup:
Create a private testing DMG:
./scripts/package_dmg.shThe output is written to dist/, for example:
dist/bbong-0.1.0-2.dmg
People can open the DMG and drag bbong.app into Applications.
Current builds are ad-hoc signed for local/private testing. macOS may warn that the app cannot be verified. For clean distribution without Gatekeeper warnings, sign with an Apple Developer ID certificate and notarize the app.
Important behavior:
- Local click feedback must be immediate.
- Remote event sync is eventually consistent.
- Failed remote writes are stored in a local pending queue.
- Team status refresh flushes pending events before fetching counts.
- The app intentionally has no sound.
Useful commands:
./scripts/build_app.sh
open dist/bbong.app
codesign --verify --verbose=2 dist/bbong.app
plutil -lint dist/bbong.app/Contents/Info.plist- Swift/Xcode beginner guide for React Native developers
- Kakao Login setup guide
- Team sync plan
- Team sync design
- Team sync implementation notes
This is an MVP for a small private group, not a polished public release.
What works:
- Local menu bar interaction
- Kakao Login
- Supabase team create/join/leave
- Daily team counts
- Pending click queue
- Daily champion notification
- DMG packaging
Still needed for wider sharing:
- Developer ID signing
- Apple notarization
- Better first-run onboarding
- Auto-update or release channel
No license has been selected yet.