|
| 1 | +# Contributing to thesis-engine |
| 2 | + |
| 3 | +Thanks for your interest in contributing! This project is a personal investment research tool, but improvements that help everyone are welcome. |
| 4 | + |
| 5 | +## How to contribute |
| 6 | + |
| 7 | +1. **Fork** the repository |
| 8 | +2. **Create a branch** for your change: `git checkout -b my-feature` |
| 9 | +3. **Make your changes** and add tests if applicable |
| 10 | +4. **Test locally**: `source .venv/bin/activate && pytest -v` |
| 11 | +5. **Lint**: `ruff check .` |
| 12 | +6. **Open a pull request** with a clear description of what changed and why |
| 13 | + |
| 14 | +## Ideas for contributions |
| 15 | + |
| 16 | +- **New data layers** -- additional free data sources (e.g., patent filings, job postings, app store rankings) |
| 17 | +- **Better sentiment analysis** -- improved keyword lists, NLP-based scoring |
| 18 | +- **New alert channels** -- Slack, Discord, Telegram, push notifications |
| 19 | +- **Dashboard** -- a simple web UI to view portfolio status without email |
| 20 | +- **Backtesting** -- compare thesis-engine alerts against historical price action |
| 21 | +- **International stocks** -- better support for non-US markets |
| 22 | +- **Options data** -- unusual options activity monitoring |
| 23 | + |
| 24 | +## Guidelines |
| 25 | + |
| 26 | +- **Free APIs only** -- thesis-engine should cost near-zero to run. No paid data providers unless there's a meaningful free tier. |
| 27 | +- **Graceful failure** -- every data layer must handle errors silently and return a useful fallback. One broken API should never crash the whole system. |
| 28 | +- **Test with `--test`** -- run `python analyzer.py --test` to verify end-to-end behavior before submitting. |
| 29 | +- **Pure function tests** -- unit tests should not require API keys. Use mocks for external calls, test pure logic functions directly. |
| 30 | +- **Keep it simple** -- this is a personal tool, not an enterprise platform. Prefer clarity over abstraction. |
| 31 | + |
| 32 | +## Code style |
| 33 | + |
| 34 | +- Python 3.10+ |
| 35 | +- Formatted and linted with [Ruff](https://docs.astral.sh/ruff/) |
| 36 | +- Type hints are welcome but not required |
| 37 | +- Docstrings on public functions |
| 38 | + |
| 39 | +## Reporting issues |
| 40 | + |
| 41 | +Open an issue with: |
| 42 | +- What you expected to happen |
| 43 | +- What actually happened |
| 44 | +- Steps to reproduce (if applicable) |
| 45 | +- Relevant log output (redact any API keys or personal data) |
0 commit comments