Skip to content

unoung/bbong

Repository files navigation

bbong

한국어 | 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.xcconfigsupabase/.temp/ 아래 파일은 커밋하지 마세요.

Supabase

데이터베이스 마이그레이션은 supabase/migrations에 있습니다.

  • profiles
  • teams
  • team_members
  • bbong_events
  • RLS policies
  • create_team
  • join_team
  • leave_team
  • get_team_daily_counts

연결된 Supabase 프로젝트에 마이그레이션 적용:

supabase db push

Kakao Login 설정 문서:

DMG 만들기

지인 테스트용 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

문서

상태

이 프로젝트는 공개 릴리즈가 아니라 소규모 지인 팀을 위한 MVP입니다.

현재 동작:

  • 로컬 메뉴막대 클릭
  • Kakao Login
  • Supabase 팀 생성/참여/나가기
  • 일일 팀 카운트
  • pending click queue
  • 오늘의 방구쟁이 알림
  • DMG 패키징

더 넓게 배포하려면 필요함:

  • Developer ID signing
  • Apple notarization
  • 첫 실행 온보딩 개선
  • 자동 업데이트 또는 릴리즈 채널

라이선스

아직 라이선스를 선택하지 않았습니다.


English

한국어 | 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.

Why This Exists

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.

Features

  • 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

Screens

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.

Tech Stack

  • 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

Requirements

  • 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

Build

Open in Xcode:

File > Open... > Package.swift

Build from terminal:

chmod +x scripts/build_app.sh
./scripts/build_app.sh

Run:

open dist/bbong.app

Stop the running app:

pkill -x bbong

Configuration

Runtime 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.xcconfig

Then 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/.

Supabase

The database migrations live in supabase/migrations.

  • profiles
  • teams
  • team_members
  • bbong_events
  • RLS policies
  • create_team
  • join_team
  • leave_team
  • get_team_daily_counts

Apply migrations to a linked Supabase project:

supabase db push

Kakao Login setup:

Packaging a DMG

Create a private testing DMG:

./scripts/package_dmg.sh

The 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.

Development Notes

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

Docs

Status

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

License

No license has been selected yet.

About

일하다 화가 날 때 눌러보세요

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors