# 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"
}