emolog


Nameemolog JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryA terminal-based emotion logging tool for developers
upload_time2025-08-12 03:10:40
maintainergmlee
docs_urlNone
authorgmlee
requires_python>=3.9
licenseMIT
keywords emotion logging mental-health developer-tools cli terminal self-care productivity
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Emolog πŸ“

> A terminal-based emotion logging tool for developers

ν„°λ―Έλ„μ—μ„œ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 감정 기둝 λ„κ΅¬μž…λ‹ˆλ‹€. κ°œλ°œμžλ“€μ΄ 업무 쀑 λŠλΌλŠ” λ‹€μ–‘ν•œ 감정을 μ²΄κ³„μ μœΌλ‘œ κΈ°λ‘ν•˜κ³  뢄석할 수 μžˆμŠ΅λ‹ˆλ‹€.

## ✨ μ£Όμš” κΈ°λŠ₯

### πŸ“ 감정 λ‘œκΉ…
- **λŒ€ν™”ν˜• μž…λ ₯**: 상황 β†’ 감정 β†’ 강도 β†’ λͺΈλ°˜μ‘ β†’ 생각 β†’ μ»¨ν…μŠ€νŠΈ β†’ νƒœκ·Έ μˆœμ„œ
- **μžλ™μ™„μ„±**: 감정, μ»¨ν…μŠ€νŠΈ, λͺΈλ°˜μ‘ λ“± 미리 μ •μ˜λœ μ˜΅μ…˜ 제곡
- **λΉ λ₯Έ μ ‘κ·Ό**: ν„°λ―Έλ„μ—μ„œ `emo` λͺ…λ Ήμ–΄ ν•˜λ‚˜λ‘œ μ¦‰μ‹œ 기둝

### πŸ“Š 뢄석 κΈ°λŠ₯
- **톡계**: 감정 뢄포, 평균 강도, μ»¨ν…μŠ€νŠΈλ³„ 뢄석
- **νŒ¨ν„΄ 뢄석**: μš”μΌλ³„, μ‹œκ°„λŒ€λ³„ 감정 νŒ¨ν„΄ 발견
- **트리거 뢄석**: 슀트레슀 유발 μš”μΈ 및 뢀정적 감정 뢄석
- **νƒ€μž„λΌμΈ**: ν•˜λ£¨/μ£Όκ°„ 감정 λ³€ν™” μ‹œκ°ν™”

### πŸ› οΈ 데이터 관리
- **선택적 μˆ˜μ •**: κ°œλ³„ μ—”νŠΈλ¦¬μ˜ ν•„λ“œλ³„ μˆ˜μ •
- **선택적 μ‚­μ œ**: μ›ν•˜λŠ” μ—”νŠΈλ¦¬λ§Œ κ³¨λΌμ„œ μ‚­μ œ
- **일괄 μ΄ˆκΈ°ν™”**: 기간별 λ˜λŠ” 전체 데이터 리셋
- **λ°±μ—…/내보내기**: CSV, JSON ν˜•νƒœλ‘œ 데이터 μΆ”μΆœ

## πŸš€ μ„€μΉ˜ 및 μ‚¬μš©λ²•

### μ„€μΉ˜
```bash
# μ €μž₯μ†Œ 클둠
git clone <repository-url>
cd emolog

# μ˜μ‘΄μ„± μ„€μΉ˜ (uv μ‚¬μš© ꢌμž₯)
uv pip install -e .

# λ˜λŠ” pip μ‚¬μš©
pip install -e .
```

### κΈ°λ³Έ μ‚¬μš©λ²•
```bash
# 감정 κΈ°λ‘ν•˜κΈ°
emo

# λͺ…μ‹œμ  λ‘œκΉ…
emo log

# 톡계 보기
emo stats

# νŒ¨ν„΄ 뢄석
emo patterns

# 슀트레슀 μš”μΈ 뢄석
emo triggers

# 감정 νƒ€μž„λΌμΈ
emo timeline

# μ—”νŠΈλ¦¬ μˆ˜μ •
emo edit

# 선택적 μ‚­μ œ
emo delete

# 데이터 리셋
emo reset

# 데이터 내보내기
emo export --format csv --period week

# λ°±μ—… 생성
emo backup
```

## πŸ’Ύ 데이터 μ €μž₯

- **μœ„μΉ˜**: `~/.emolog/` 디렉토리
- **ν˜•μ‹**: JSONL (JSON Lines) 파일
- **ꡬ쑰**: λ‚ μ§œλ³„λ‘œ μžλ™ λΆ„λ₯˜ (`YYYY/MM/YYYYMMDD.jsonl`)
- **μ‹œκ°„λŒ€**: KST (ν•œκ΅­ ν‘œμ€€μ‹œ) κΈ°μ€€
- **ν”„λΌμ΄λ²„μ‹œ**: λͺ¨λ“  λ°μ΄ν„°λŠ” λ‘œμ»¬μ—λ§Œ μ €μž₯

## πŸ“Š 데이터 ꡬ쑰

```json
{
  "timestamp": "2024-08-12T11:30:00+09:00",
  "situation": "μ½”λ“œλ¦¬λ·° λ°›μŒ",
  "emotion": "κΈ΄μž₯",
  "intensity": 6,
  "body_reaction": "손에 λ•€",
  "thought": "μ‹€μˆ˜κ°€ 많이 발견될까 κ±±μ •",
  "context": "work",
  "tags": ["μ½”λ“œλ¦¬λ·°", "개발"],
  "id": "uuid-string"
}
```

## 🎯 μ‚¬μš© 사둀

### 개발자λ₯Ό μœ„ν•œ 감정 좔적
- μ½”λ“œλ¦¬λ·°, 배포, 버그 μˆ˜μ • μ‹œ 감정 λ³€ν™” 좔적
- 슀트레슀 μš”μΈ 식별 및 κ°œμ„  λ°©μ•ˆ λͺ¨μƒ‰
- 업무 νŒ¨ν„΄κ³Ό 감정 μƒνƒœμ˜ 상관관계 뢄석

### μ •μ‹  건강 관리
- μΌμƒμ˜ 감정 λ³€ν™” λͺ¨λ‹ˆν„°λ§
- 뢀정적 κ°μ •μ˜ 트리거 νŒŒμ•…
- 긍정적 κ²½ν—˜κ³Ό 상황 식별

## πŸ›‘οΈ ν”„λΌμ΄λ²„μ‹œ

- λͺ¨λ“  λ°μ΄ν„°λŠ” μ‚¬μš©μž 둜컬 μ»΄ν“¨ν„°μ—λ§Œ μ €μž₯λ©λ‹ˆλ‹€
- μ™ΈλΆ€ μ„œλ²„λ‘œ 데이터가 μ „μ†‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€
- μ‚¬μš©μžκ°€ 직접 λ°±μ—…κ³Ό 데이터 관리λ₯Ό μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€

## πŸš€ 배포 (개발자용)

### PyPI 배포 μžλ™ν™”
이 ν”„λ‘œμ νŠΈλŠ” GitHub Actions와 OIDCλ₯Ό ν†΅ν•œ μ•ˆμ „ν•œ μžλ™ 배포λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

1. **νƒœκ·Έ μƒμ„±μœΌλ‘œ 배포**:
   ```bash
   # 버전 μ—…λ°μ΄νŠΈ
   git tag v1.0.0
   git push origin v1.0.0
   ```

2. **OIDC 기반 배포 μ„€μ •** (μ €μž₯μ†Œ κ΄€λ¦¬μž):
   - PyPIμ—μ„œ Trusted Publisher μ„€μ •
   - Test PyPIμ—μ„œ Trusted Publisher μ„€μ •
   - 토큰 관리 λΆˆν•„μš”! πŸŽ‰

3. **Trusted Publisher μ„€μ • 방법**:
   - PyPI β†’ Account settings β†’ Publishing β†’ Add a new pending publisher
   - Owner: `{your-github-username}`
   - Repository name: `emolog`
   - Workflow name: `publish.yml`
   - Environment name: `pypi` (λ˜λŠ” `test-pypi`)

4. **μˆ˜λ™ 배포**:
   ```bash
   # λΉŒλ“œ
   python -m build
   
   # Test PyPI μ—…λ‘œλ“œ
   twine upload --repository testpypi dist/*
   
   # PyPI μ—…λ‘œλ“œ
   twine upload dist/*
   ```

## 🀝 κΈ°μ—¬

이 ν”„λ‘œμ νŠΈλŠ” 개인 ν”„λ‘œμ νŠΈλ‘œ μ‹œμž‘λ˜μ—ˆμ§€λ§Œ, κΈ°μ—¬λ₯Ό ν™˜μ˜ν•©λ‹ˆλ‹€!

### 개발 ν™˜κ²½ μ„€μ •
```bash
# μ €μž₯μ†Œ 클둠
git clone https://github.com/gmlee/emolog.git
cd emolog

# 개발 μ˜μ‘΄μ„± μ„€μΉ˜
make install
# λ˜λŠ” 직접: uv pip install -e ".[dev]"
```

### πŸ›‘οΈ μ—„κ²©ν•œ μ½”λ“œ ν’ˆμ§ˆ 관리
이 ν”„λ‘œμ νŠΈλŠ” **ZERO TOLERANCE** μ½”λ“œ ν’ˆμ§ˆ 정책을 μ‚¬μš©ν•©λ‹ˆλ‹€:

```bash
# μ½”λ“œ μžλ™ ν¬λ§·νŒ…
make format

# ν’ˆμ§ˆ 검사 (컀밋/ν‘Έμ‹œ μ „ ν•„μˆ˜)
make check

# ν‘Έμ‹œ μ€€λΉ„ μ™„λ£Œ (ν¬λ§·νŒ… + 검사)
make push-ready
```

#### 🚫 Git ν›… κ°•μ œ μ‹€ν–‰
- **pre-commit**: 컀밋 μ‹œ staged 파일 ν’ˆμ§ˆ 검사
- **pre-push**: ν‘Έμ‹œ μ‹œ 전체 μ½”λ“œλ² μ΄μŠ€ ν’ˆμ§ˆ 검사
- **μžλ™ 차단**: black/isort 미적용 μ‹œ 컀밋/ν‘Έμ‹œ μ™„μ „ 차단
- **μžλ™ μ„€μΉ˜**: 도ꡬ가 μ—†μœΌλ©΄ μžλ™μœΌλ‘œ μ„€μΉ˜

### κΈ°μ—¬ ν”„λ‘œμ„ΈμŠ€
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. **Run quality tools** (`make push-ready`)
5. Commit your changes (`git commit -m 'Add amazing feature'`)
   - πŸ›‘οΈ pre-commit 훅이 μžλ™μœΌλ‘œ ν’ˆμ§ˆ 검사
6. Push to the branch (`git push origin feature/amazing-feature`)
   - πŸ›‘οΈ pre-push 훅이 전체 μ½”λ“œλ² μ΄μŠ€ 검사
7. Open a Pull Request

### πŸ”§ 개발 도ꡬ ν•œλˆˆμ— 보기
| λͺ…λ Ήμ–΄ | μ„€λͺ… | μ–Έμ œ μ‚¬μš©? |
|--------|------|-----------|
| `make install` | 개발 ν™˜κ²½ μ„€μ • | ν”„λ‘œμ νŠΈ μ‹œμž‘ μ‹œ |
| `make format` | μ½”λ“œ μžλ™ ν¬λ§·νŒ… | 개발 쀑 μˆ˜μ‹œλ‘œ |
| `make lint` | ν’ˆμ§ˆ κ²€μ‚¬λ§Œ | CIμ—μ„œ λ˜λŠ” ν™•μΈμš© |
| `make check` | ν’ˆμ§ˆ+κΈ°λŠ₯ 검사 | 컀밋 μ „ |
| `make push-ready` | μ™„μ „ν•œ μ€€λΉ„ | ν‘Έμ‹œ μ „ ν•„μˆ˜ |
| `make clean` | λΉŒλ“œ 파일 정리 | ν•„μš”μ‹œ |

### πŸ›‘οΈ ν’ˆμ§ˆ 보μž₯
- **μžλ™ ν¬λ§·νŒ…**: Black (88자 라인 길이)
- **Import μ •λ ¬**: isort (Black ν”„λ‘œν•„)
- **Git ν›…**: 컀밋/ν‘Έμ‹œ μ‹œ μžλ™ ν’ˆμ§ˆ 검사
- **CI/CD**: GitHub Actionsμ—μ„œ 닀쀑 Python 버전 ν…ŒμŠ€νŠΈ

## πŸ“ λΌμ΄μ„ μŠ€

MIT License - μžμ„Έν•œ λ‚΄μš©μ€ [LICENSE](LICENSE) νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”.

## πŸŽ‰ κ°μ‚¬μ˜ 말

κ°œλ°œμžλ“€μ˜ μ •μ‹  건강과 감정 μΈμ‹μ˜ μ€‘μš”μ„±μ— λŒ€ν•œ κ΄€μ‹¬μ—μ„œ μΆœλ°œν•œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. 
μ—¬λŸ¬λΆ„μ˜ 일상에 μž‘μ€ 도움이 되기λ₯Ό λ°”λžλ‹ˆλ‹€. 😊

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "emolog",
    "maintainer": "gmlee",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "gmlee <sld9849@gmail.com>",
    "keywords": "emotion, logging, mental-health, developer-tools, cli, terminal, self-care, productivity",
    "author": "gmlee",
    "author_email": "gmlee <sld9849@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/2f/f9/db6e1c7c1a5b2f6736b35dc39b331c7e6540b760908c527a9cbc172a40ea/emolog-0.1.0.tar.gz",
    "platform": null,
    "description": "# Emolog \ud83d\udcdd\n\n> A terminal-based emotion logging tool for developers\n\n\ud130\ubbf8\ub110\uc5d0\uc11c \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uac10\uc815 \uae30\ub85d \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uac1c\ubc1c\uc790\ub4e4\uc774 \uc5c5\ubb34 \uc911 \ub290\ub07c\ub294 \ub2e4\uc591\ud55c \uac10\uc815\uc744 \uccb4\uacc4\uc801\uc73c\ub85c \uae30\ub85d\ud558\uace0 \ubd84\uc11d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n## \u2728 \uc8fc\uc694 \uae30\ub2a5\n\n### \ud83d\udcdd \uac10\uc815 \ub85c\uae45\n- **\ub300\ud654\ud615 \uc785\ub825**: \uc0c1\ud669 \u2192 \uac10\uc815 \u2192 \uac15\ub3c4 \u2192 \ubab8\ubc18\uc751 \u2192 \uc0dd\uac01 \u2192 \ucee8\ud14d\uc2a4\ud2b8 \u2192 \ud0dc\uadf8 \uc21c\uc11c\n- **\uc790\ub3d9\uc644\uc131**: \uac10\uc815, \ucee8\ud14d\uc2a4\ud2b8, \ubab8\ubc18\uc751 \ub4f1 \ubbf8\ub9ac \uc815\uc758\ub41c \uc635\uc158 \uc81c\uacf5\n- **\ube60\ub978 \uc811\uadfc**: \ud130\ubbf8\ub110\uc5d0\uc11c `emo` \uba85\ub839\uc5b4 \ud558\ub098\ub85c \uc989\uc2dc \uae30\ub85d\n\n### \ud83d\udcca \ubd84\uc11d \uae30\ub2a5\n- **\ud1b5\uacc4**: \uac10\uc815 \ubd84\ud3ec, \ud3c9\uade0 \uac15\ub3c4, \ucee8\ud14d\uc2a4\ud2b8\ubcc4 \ubd84\uc11d\n- **\ud328\ud134 \ubd84\uc11d**: \uc694\uc77c\ubcc4, \uc2dc\uac04\ub300\ubcc4 \uac10\uc815 \ud328\ud134 \ubc1c\uacac\n- **\ud2b8\ub9ac\uac70 \ubd84\uc11d**: \uc2a4\ud2b8\ub808\uc2a4 \uc720\ubc1c \uc694\uc778 \ubc0f \ubd80\uc815\uc801 \uac10\uc815 \ubd84\uc11d\n- **\ud0c0\uc784\ub77c\uc778**: \ud558\ub8e8/\uc8fc\uac04 \uac10\uc815 \ubcc0\ud654 \uc2dc\uac01\ud654\n\n### \ud83d\udee0\ufe0f \ub370\uc774\ud130 \uad00\ub9ac\n- **\uc120\ud0dd\uc801 \uc218\uc815**: \uac1c\ubcc4 \uc5d4\ud2b8\ub9ac\uc758 \ud544\ub4dc\ubcc4 \uc218\uc815\n- **\uc120\ud0dd\uc801 \uc0ad\uc81c**: \uc6d0\ud558\ub294 \uc5d4\ud2b8\ub9ac\ub9cc \uace8\ub77c\uc11c \uc0ad\uc81c\n- **\uc77c\uad04 \ucd08\uae30\ud654**: \uae30\uac04\ubcc4 \ub610\ub294 \uc804\uccb4 \ub370\uc774\ud130 \ub9ac\uc14b\n- **\ubc31\uc5c5/\ub0b4\ubcf4\ub0b4\uae30**: CSV, JSON \ud615\ud0dc\ub85c \ub370\uc774\ud130 \ucd94\ucd9c\n\n## \ud83d\ude80 \uc124\uce58 \ubc0f \uc0ac\uc6a9\ubc95\n\n### \uc124\uce58\n```bash\n# \uc800\uc7a5\uc18c \ud074\ub860\ngit clone <repository-url>\ncd emolog\n\n# \uc758\uc874\uc131 \uc124\uce58 (uv \uc0ac\uc6a9 \uad8c\uc7a5)\nuv pip install -e .\n\n# \ub610\ub294 pip \uc0ac\uc6a9\npip install -e .\n```\n\n### \uae30\ubcf8 \uc0ac\uc6a9\ubc95\n```bash\n# \uac10\uc815 \uae30\ub85d\ud558\uae30\nemo\n\n# \uba85\uc2dc\uc801 \ub85c\uae45\nemo log\n\n# \ud1b5\uacc4 \ubcf4\uae30\nemo stats\n\n# \ud328\ud134 \ubd84\uc11d\nemo patterns\n\n# \uc2a4\ud2b8\ub808\uc2a4 \uc694\uc778 \ubd84\uc11d\nemo triggers\n\n# \uac10\uc815 \ud0c0\uc784\ub77c\uc778\nemo timeline\n\n# \uc5d4\ud2b8\ub9ac \uc218\uc815\nemo edit\n\n# \uc120\ud0dd\uc801 \uc0ad\uc81c\nemo delete\n\n# \ub370\uc774\ud130 \ub9ac\uc14b\nemo reset\n\n# \ub370\uc774\ud130 \ub0b4\ubcf4\ub0b4\uae30\nemo export --format csv --period week\n\n# \ubc31\uc5c5 \uc0dd\uc131\nemo backup\n```\n\n## \ud83d\udcbe \ub370\uc774\ud130 \uc800\uc7a5\n\n- **\uc704\uce58**: `~/.emolog/` \ub514\ub809\ud1a0\ub9ac\n- **\ud615\uc2dd**: JSONL (JSON Lines) \ud30c\uc77c\n- **\uad6c\uc870**: \ub0a0\uc9dc\ubcc4\ub85c \uc790\ub3d9 \ubd84\ub958 (`YYYY/MM/YYYYMMDD.jsonl`)\n- **\uc2dc\uac04\ub300**: KST (\ud55c\uad6d \ud45c\uc900\uc2dc) \uae30\uc900\n- **\ud504\ub77c\uc774\ubc84\uc2dc**: \ubaa8\ub4e0 \ub370\uc774\ud130\ub294 \ub85c\uceec\uc5d0\ub9cc \uc800\uc7a5\n\n## \ud83d\udcca \ub370\uc774\ud130 \uad6c\uc870\n\n```json\n{\n  \"timestamp\": \"2024-08-12T11:30:00+09:00\",\n  \"situation\": \"\ucf54\ub4dc\ub9ac\ubdf0 \ubc1b\uc74c\",\n  \"emotion\": \"\uae34\uc7a5\",\n  \"intensity\": 6,\n  \"body_reaction\": \"\uc190\uc5d0 \ub540\",\n  \"thought\": \"\uc2e4\uc218\uac00 \ub9ce\uc774 \ubc1c\uacac\ub420\uae4c \uac71\uc815\",\n  \"context\": \"work\",\n  \"tags\": [\"\ucf54\ub4dc\ub9ac\ubdf0\", \"\uac1c\ubc1c\"],\n  \"id\": \"uuid-string\"\n}\n```\n\n## \ud83c\udfaf \uc0ac\uc6a9 \uc0ac\ub840\n\n### \uac1c\ubc1c\uc790\ub97c \uc704\ud55c \uac10\uc815 \ucd94\uc801\n- \ucf54\ub4dc\ub9ac\ubdf0, \ubc30\ud3ec, \ubc84\uadf8 \uc218\uc815 \uc2dc \uac10\uc815 \ubcc0\ud654 \ucd94\uc801\n- \uc2a4\ud2b8\ub808\uc2a4 \uc694\uc778 \uc2dd\ubcc4 \ubc0f \uac1c\uc120 \ubc29\uc548 \ubaa8\uc0c9\n- \uc5c5\ubb34 \ud328\ud134\uacfc \uac10\uc815 \uc0c1\ud0dc\uc758 \uc0c1\uad00\uad00\uacc4 \ubd84\uc11d\n\n### \uc815\uc2e0 \uac74\uac15 \uad00\ub9ac\n- \uc77c\uc0c1\uc758 \uac10\uc815 \ubcc0\ud654 \ubaa8\ub2c8\ud130\ub9c1\n- \ubd80\uc815\uc801 \uac10\uc815\uc758 \ud2b8\ub9ac\uac70 \ud30c\uc545\n- \uae0d\uc815\uc801 \uacbd\ud5d8\uacfc \uc0c1\ud669 \uc2dd\ubcc4\n\n## \ud83d\udee1\ufe0f \ud504\ub77c\uc774\ubc84\uc2dc\n\n- \ubaa8\ub4e0 \ub370\uc774\ud130\ub294 \uc0ac\uc6a9\uc790 \ub85c\uceec \ucef4\ud4e8\ud130\uc5d0\ub9cc \uc800\uc7a5\ub429\ub2c8\ub2e4\n- \uc678\ubd80 \uc11c\ubc84\ub85c \ub370\uc774\ud130\uac00 \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n- \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \ubc31\uc5c5\uacfc \ub370\uc774\ud130 \uad00\ub9ac\ub97c \uc81c\uc5b4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\n\n## \ud83d\ude80 \ubc30\ud3ec (\uac1c\ubc1c\uc790\uc6a9)\n\n### PyPI \ubc30\ud3ec \uc790\ub3d9\ud654\n\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 GitHub Actions\uc640 OIDC\ub97c \ud1b5\ud55c \uc548\uc804\ud55c \uc790\ub3d9 \ubc30\ud3ec\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4.\n\n1. **\ud0dc\uadf8 \uc0dd\uc131\uc73c\ub85c \ubc30\ud3ec**:\n   ```bash\n   # \ubc84\uc804 \uc5c5\ub370\uc774\ud2b8\n   git tag v1.0.0\n   git push origin v1.0.0\n   ```\n\n2. **OIDC \uae30\ubc18 \ubc30\ud3ec \uc124\uc815** (\uc800\uc7a5\uc18c \uad00\ub9ac\uc790):\n   - PyPI\uc5d0\uc11c Trusted Publisher \uc124\uc815\n   - Test PyPI\uc5d0\uc11c Trusted Publisher \uc124\uc815\n   - \ud1a0\ud070 \uad00\ub9ac \ubd88\ud544\uc694! \ud83c\udf89\n\n3. **Trusted Publisher \uc124\uc815 \ubc29\ubc95**:\n   - PyPI \u2192 Account settings \u2192 Publishing \u2192 Add a new pending publisher\n   - Owner: `{your-github-username}`\n   - Repository name: `emolog`\n   - Workflow name: `publish.yml`\n   - Environment name: `pypi` (\ub610\ub294 `test-pypi`)\n\n4. **\uc218\ub3d9 \ubc30\ud3ec**:\n   ```bash\n   # \ube4c\ub4dc\n   python -m build\n   \n   # Test PyPI \uc5c5\ub85c\ub4dc\n   twine upload --repository testpypi dist/*\n   \n   # PyPI \uc5c5\ub85c\ub4dc\n   twine upload dist/*\n   ```\n\n## \ud83e\udd1d \uae30\uc5ec\n\n\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 \uac1c\uc778 \ud504\ub85c\uc81d\ud2b8\ub85c \uc2dc\uc791\ub418\uc5c8\uc9c0\ub9cc, \uae30\uc5ec\ub97c \ud658\uc601\ud569\ub2c8\ub2e4!\n\n### \uac1c\ubc1c \ud658\uacbd \uc124\uc815\n```bash\n# \uc800\uc7a5\uc18c \ud074\ub860\ngit clone https://github.com/gmlee/emolog.git\ncd emolog\n\n# \uac1c\ubc1c \uc758\uc874\uc131 \uc124\uce58\nmake install\n# \ub610\ub294 \uc9c1\uc811: uv pip install -e \".[dev]\"\n```\n\n### \ud83d\udee1\ufe0f \uc5c4\uaca9\ud55c \ucf54\ub4dc \ud488\uc9c8 \uad00\ub9ac\n\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 **ZERO TOLERANCE** \ucf54\ub4dc \ud488\uc9c8 \uc815\ucc45\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4:\n\n```bash\n# \ucf54\ub4dc \uc790\ub3d9 \ud3ec\ub9f7\ud305\nmake format\n\n# \ud488\uc9c8 \uac80\uc0ac (\ucee4\ubc0b/\ud478\uc2dc \uc804 \ud544\uc218)\nmake check\n\n# \ud478\uc2dc \uc900\ube44 \uc644\ub8cc (\ud3ec\ub9f7\ud305 + \uac80\uc0ac)\nmake push-ready\n```\n\n#### \ud83d\udeab Git \ud6c5 \uac15\uc81c \uc2e4\ud589\n- **pre-commit**: \ucee4\ubc0b \uc2dc staged \ud30c\uc77c \ud488\uc9c8 \uac80\uc0ac\n- **pre-push**: \ud478\uc2dc \uc2dc \uc804\uccb4 \ucf54\ub4dc\ubca0\uc774\uc2a4 \ud488\uc9c8 \uac80\uc0ac\n- **\uc790\ub3d9 \ucc28\ub2e8**: black/isort \ubbf8\uc801\uc6a9 \uc2dc \ucee4\ubc0b/\ud478\uc2dc \uc644\uc804 \ucc28\ub2e8\n- **\uc790\ub3d9 \uc124\uce58**: \ub3c4\uad6c\uac00 \uc5c6\uc73c\uba74 \uc790\ub3d9\uc73c\ub85c \uc124\uce58\n\n### \uae30\uc5ec \ud504\ub85c\uc138\uc2a4\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. **Run quality tools** (`make push-ready`)\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n   - \ud83d\udee1\ufe0f pre-commit \ud6c5\uc774 \uc790\ub3d9\uc73c\ub85c \ud488\uc9c8 \uac80\uc0ac\n6. Push to the branch (`git push origin feature/amazing-feature`)\n   - \ud83d\udee1\ufe0f pre-push \ud6c5\uc774 \uc804\uccb4 \ucf54\ub4dc\ubca0\uc774\uc2a4 \uac80\uc0ac\n7. Open a Pull Request\n\n### \ud83d\udd27 \uac1c\ubc1c \ub3c4\uad6c \ud55c\ub208\uc5d0 \ubcf4\uae30\n| \uba85\ub839\uc5b4 | \uc124\uba85 | \uc5b8\uc81c \uc0ac\uc6a9? |\n|--------|------|-----------|\n| `make install` | \uac1c\ubc1c \ud658\uacbd \uc124\uc815 | \ud504\ub85c\uc81d\ud2b8 \uc2dc\uc791 \uc2dc |\n| `make format` | \ucf54\ub4dc \uc790\ub3d9 \ud3ec\ub9f7\ud305 | \uac1c\ubc1c \uc911 \uc218\uc2dc\ub85c |\n| `make lint` | \ud488\uc9c8 \uac80\uc0ac\ub9cc | CI\uc5d0\uc11c \ub610\ub294 \ud655\uc778\uc6a9 |\n| `make check` | \ud488\uc9c8+\uae30\ub2a5 \uac80\uc0ac | \ucee4\ubc0b \uc804 |\n| `make push-ready` | \uc644\uc804\ud55c \uc900\ube44 | \ud478\uc2dc \uc804 \ud544\uc218 |\n| `make clean` | \ube4c\ub4dc \ud30c\uc77c \uc815\ub9ac | \ud544\uc694\uc2dc |\n\n### \ud83d\udee1\ufe0f \ud488\uc9c8 \ubcf4\uc7a5\n- **\uc790\ub3d9 \ud3ec\ub9f7\ud305**: Black (88\uc790 \ub77c\uc778 \uae38\uc774)\n- **Import \uc815\ub82c**: isort (Black \ud504\ub85c\ud544)\n- **Git \ud6c5**: \ucee4\ubc0b/\ud478\uc2dc \uc2dc \uc790\ub3d9 \ud488\uc9c8 \uac80\uc0ac\n- **CI/CD**: GitHub Actions\uc5d0\uc11c \ub2e4\uc911 Python \ubc84\uc804 \ud14c\uc2a4\ud2b8\n\n## \ud83d\udcdd \ub77c\uc774\uc120\uc2a4\n\nMIT License - \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 [LICENSE](LICENSE) \ud30c\uc77c\uc744 \ucc38\uc870\ud558\uc138\uc694.\n\n## \ud83c\udf89 \uac10\uc0ac\uc758 \ub9d0\n\n\uac1c\ubc1c\uc790\ub4e4\uc758 \uc815\uc2e0 \uac74\uac15\uacfc \uac10\uc815 \uc778\uc2dd\uc758 \uc911\uc694\uc131\uc5d0 \ub300\ud55c \uad00\uc2ec\uc5d0\uc11c \ucd9c\ubc1c\ud55c \ud504\ub85c\uc81d\ud2b8\uc785\ub2c8\ub2e4. \n\uc5ec\ub7ec\ubd84\uc758 \uc77c\uc0c1\uc5d0 \uc791\uc740 \ub3c4\uc6c0\uc774 \ub418\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4. \ud83d\ude0a\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A terminal-based emotion logging tool for developers",
    "version": "0.1.0",
    "project_urls": {
        "Changelog": "https://github.com/gmlee/emolog/releases",
        "Documentation": "https://github.com/gmlee/emolog#readme",
        "Homepage": "https://github.com/gmlee/emolog",
        "Issues": "https://github.com/gmlee/emolog/issues",
        "Repository": "https://github.com/gmlee/emolog"
    },
    "split_keywords": [
        "emotion",
        " logging",
        " mental-health",
        " developer-tools",
        " cli",
        " terminal",
        " self-care",
        " productivity"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "22edd604d6b55a2647fe4b232c5f6ca0b009a79b84eca3e177eca343274953ed",
                "md5": "ca7e60e9a1474f941b6a475c7d375259",
                "sha256": "b69d1c9b0b91ce5ce0f962edaf9fd1c289250f92ea2828847cde6d8e53275fec"
            },
            "downloads": -1,
            "filename": "emolog-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ca7e60e9a1474f941b6a475c7d375259",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 22060,
            "upload_time": "2025-08-12T03:10:38",
            "upload_time_iso_8601": "2025-08-12T03:10:38.653977Z",
            "url": "https://files.pythonhosted.org/packages/22/ed/d604d6b55a2647fe4b232c5f6ca0b009a79b84eca3e177eca343274953ed/emolog-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2ff9db6e1c7c1a5b2f6736b35dc39b331c7e6540b760908c527a9cbc172a40ea",
                "md5": "2d00e5c8cb782acc0f37ac351c705cf2",
                "sha256": "cafdde9e72e41f87b5a7be834eb428ec5d8ab3c730be8b9295a4aa95bbbaad45"
            },
            "downloads": -1,
            "filename": "emolog-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "2d00e5c8cb782acc0f37ac351c705cf2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 17867,
            "upload_time": "2025-08-12T03:10:40",
            "upload_time_iso_8601": "2025-08-12T03:10:40.039371Z",
            "url": "https://files.pythonhosted.org/packages/2f/f9/db6e1c7c1a5b2f6736b35dc39b331c7e6540b760908c527a9cbc172a40ea/emolog-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-12 03:10:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "gmlee",
    "github_project": "emolog",
    "github_not_found": true,
    "lcname": "emolog"
}
        
Elapsed time: 1.00395s