# Repository Guidelines ## Project Structure & Module Organization - `src/` contains the application code. Use `src/main.py` as the interactive entrypoint. - `src/classes/` holds provider-specific components (for example `YouTube.py`, `Twitter.py`, `Tts.py`, `AFM.py`, `Outreach.py`). - Shared utilities and configuration live in modules like `src/config.py`, `src/utils.py`, `src/cache.py`, and `src/constants.py`. - `scripts/` contains helper workflows such as setup, preflight checks, and upload helpers. - `docs/` contains feature documentation; `assets/` and `fonts/` contain static resources. ## Build, Test, and Development Commands - `bash scripts/setup_local.sh`: bootstrap local development (creates `venv`, installs deps, seeds `config.json`, runs preflight). - `source venv/bin/activate && pip install -r requirements.txt`: manual dependency install/update. - `python3 scripts/preflight_local.py`: validate local provider/config readiness before running tasks. - `python3 src/main.py`: start the CLI app. - `bash scripts/upload_video.sh`: run direct script-based upload flow from repo root. ## Coding Style & Naming Conventions - Target Python 3.12 (project requirement in `README.md`). - Use 4-space indentation and follow existing Python conventions: - `snake_case` for functions/variables - `PascalCase` for classes - `UPPER_SNAKE_CASE` for constants - Keep new business logic in focused modules under `src/`; keep provider/integration code in `src/classes/`. - Prefer small, explicit functions and preserve existing CLI-first behavior. ## Testing Guidelines - There is currently no enforced automated test suite or coverage threshold. - Minimum validation for changes: - Run `python3 scripts/preflight_local.py` - Smoke-test impacted flows via `python3 src/main.py` - When adding tests, place them in a top-level `tests/` directory with names like `test_.py`. ## Commit & Pull Request Guidelines - Follow the existing commit style: imperative summaries like `Fix ...`, `Update ...`, optionally with issue refs (for example `(#128)`). - Open PRs against `main`. - Link each PR to an issue, keep scope to one feature/fix, and use a clear title + description. - Mark not-ready PRs with `WIP` and remove it when ready for review. ## Security & Configuration Tips - Treat `config.json` as environment-specific; do not commit real API keys or private profile paths. - Start from `config.example.json` and prefer environment variables where supported (for example `GEMINI_API_KEY`).