Thank you for your interest in contributing. This document explains how to submit changes and what rules apply.
- Fork this repository
- Create a branch from
develop— follow the naming convention below - Make your changes — keep commits focused and atomic
- Open a Pull Request against
develop
Direct pushes to main and develop are not allowed. All changes go through PRs.
type/short-description
Types: feature/, fix/, chore/, docs/, refactor/, ci/
Examples: feature/landscape-support, fix/ipad-frame-alignment, docs/template-guide
[branch-name] type: "short description"
Example:
[feature/landscape-support] feat: "add landscape orientation for iPad frames"
Every PR must pass these automated checks before merge:
- Secrets scan — gitleaks scans the diff for leaked credentials, API keys, and tokens
- AI co-author check —
Co-Authored-Bytrailers from AI tools (Claude, Copilot, ChatGPT, etc.) are not allowed. If you used AI assistance, that's fine, but remove the trailer from your commits
- Does it solve a real problem or add clear value?
- Does it follow the existing code style (Swift, SwiftUI)?
- Does it work on macOS 13+ with Swift 5.9+?
- Are new features configuration-driven (via
screenshots.json)? - Is the change backward-compatible with existing configs?
- Swift conventions: no force-unwraps in library code, use
guardfor early exits - Keep dependencies at zero — Screenshot Factory uses only Apple SDK (AppKit, SwiftUI)
- CLI arguments via Swift Argument Parser
- Bug fixes with clear reproduction steps
- New device specs (when Apple releases new hardware)
- New templates (add to
Templates/) - Documentation improvements
- Performance improvements to the rendering pipeline
- Adding third-party dependencies
- Changes that break existing
screenshots.jsonconfigs without a migration path - Platform support beyond macOS (this is a macOS CLI tool)
Build and run locally before submitting:
swift build
swift run screenshot-factory --config Templates/dark-teal-accent.json --input <your-raw-dir> --output <output-dir>By contributing, you agree that your contributions will be licensed under the MIT License.