Coding guidelines
Coding Standards¶
Style & Structure - Prefer longer, explicit code over compact one-liners - Always include docstrings for functions/classes + inline comments - Strongly prefer OOP-style code (classes over functional/nested functions) - Strong typing throughout (dataclasses, TypedDict, Enums, type hints) - Value future-proofing and expanded usage insights
Data Design
- Use dataclasses for internal data modeling
- Typed JSON structures
- Functions return fully typed objects (no loose dicts)
- Snapshot files in JSON or YAML
- Human-readable fields (e.g., sql_injection, xss_attempt)
Templates & UI - Don't mix large HTML/CSS blocks in Python code - Prefer Jinja templates for HTML rendering - Clean CSS, minimal inline clutter, readable template logic
Writing & Documentation - Markdown documentation - Clear section headers - Roadmap/Phase/Feature-Session style documents
Logging
- Use singleton for logging found in src\logger.py
- Setup logging at app start:
initialize_logging()
app_logger = get_app_logger()
access_logger = get_access_logger()
credential_logger = get_credential_logger()
Preferred Pip Packages - API/Web Server: Simple Python - HTTP: Requests - SQLite: Sqlalchemy - Database Migrations: Alembic
Error Handling¶
- Custom exception classes for domain-specific errors
- Consistent error response formats (JSON structure)
- Logging severity levels (ERROR vs WARNING)
Configuration¶
.envfor secrets (never committed)- Maintain
.env.examplein each component for documentation - Typed config loaders using dataclasses
- Validation on startup
Containerization & Deployment¶
- Explicit Dockerfiles
- Production-friendly hardening (distroless/slim when meaningful)
- Use git branch as tag
Dependency Management¶
- Use
requirements.txtand virtual environments (python3 -m venv venv) - Use path
venvfor all virtual environments - Pin versions to version ranges (or exact versions if pinning a particular version)
- Activate venv before running code (unless in Docker)
Testing Standards¶
- Manual testing preferred for applications
- tests: Use shell scripts with curl/httpie for simulation and attack scripts.
- tests should be located in
testsdirectory
Git Standards¶
Branch Strategy:
- master - Production-ready code only
- beta - Public pre-release testing
- dev - Main development branch, integration point
Workflow:
- Feature work branches off dev (e.g., feature/add-scheduler)
- Merge features back to dev for testing
- Promote dev → beta for public testing (when applicable)
- Promote beta (or dev) → master for production
Commit Messages:
- Use conventional commit format: feat:, fix:, docs:, refactor:, etc.
- Keep commits atomic and focused
- Write clear, descriptive messages
Tagging:
- Tag releases on master with semantic versioning (e.g., v1.2.3)
- Optionally tag beta releases (e.g., v1.2.3-beta.1)