src/contains the application code. Usesrc/main.pyas the interactive entrypoint.src/classes/holds provider-specific components (for exampleYouTube.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, andsrc/constants.py. scripts/contains helper workflows such as setup, preflight checks, and upload helpers.docs/contains feature documentation;assets/andfonts/contain static resources.
bash scripts/setup_local.sh: bootstrap local development (createsvenv, installs deps, seedsconfig.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.
- Target Python 3.12 (project requirement in
README.md). - Use 4-space indentation and follow existing Python conventions:
snake_casefor functions/variablesPascalCasefor classesUPPER_SNAKE_CASEfor constants
- Keep new business logic in focused modules under
src/; keep provider/integration code insrc/classes/. - Prefer small, explicit functions and preserve existing CLI-first behavior.
- 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
- Run
- When adding tests, place them in a top-level
tests/directory with names liketest_<module>.py.
- 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
WIPand remove it when ready for review.
- Treat
config.jsonas environment-specific; do not commit real API keys or private profile paths. - Start from
config.example.jsonand prefer environment variables where supported (for exampleGEMINI_API_KEY).