Skip to content

Collaboration Guide: Modular Push Notification System

Overview

This guide outlines the collaboration workflow and access controls for the modular push notification system, enabling multiple developers to work on different platform implementations simultaneously.

Repository Structure & Access Levels

Core Architecture (Maintainer Access Required)

backend/src/homepot/push_notifications/
├── __init__.py                 # Core maintainer only
├── base.py                     # Core maintainer only  
├── factory.py                  # Core maintainer only
└── auth/
    ├── __init__.py            # Core maintainer only
    ├── base.py                # Core maintainer only
    ├── service_account.py     # Core maintainer only
    ├── api_key.py             # Core maintainer only
    └── oauth.py               # Core maintainer only

Platform Implementations (Contributor Access)

backend/src/homepot/push_notifications/
├── fcm_linux.py               # Firebase/Linux specialists
├── simulation.py              # Testing/QA team
├── apns_macos.py              # Apple/macOS specialists (pending)
├── wns_windows.py             # Microsoft/Windows specialists (pending)
├── web_push.py                # Web/PWA specialists (pending)
└── fcm_android.py             # Android specialists (pending)

Access Control Strategy (Small Team - 3 Developers)

1. Branch Protection Rules

Main Branch Protection

  • Required reviews: 1 reviewer (admin approval for core changes)
  • Status checks: All tests must pass
  • Allow force pushes: No
  • Restrict pushes: Admin can push directly in emergencies

Simple Branch Strategy

# Main development
main                    # Protected, production-ready code

# Feature branches (any developer can create)
feature/fcm-android     # Firebase Cloud Messaging for Android
feature/web-push        # Web Push Protocol implementation
feature/apns-ios        # Apple Push Notification Service
feature/bug-fixes       # General bug fixes
feature/improvements    # General improvements

2. Team Roles & Permissions (Current Team)

Admin (You)

  • Access Level: Admin
  • Permissions:
  • Full access to all files and settings
  • Merge pull requests
  • Create releases and tags
  • Configure repository settings
  • Direct push to main (emergency only)
  • Responsibilities:
  • Code review and approval
  • Architecture decisions
  • Release management
  • Team coordination

Core Developers (2 Team Members)

  • Access Level: Write
  • Permissions:
  • Create and push feature branches
  • Modify all source files
  • Submit pull requests
  • Review each other's code
  • Access to issues and discussions
  • Responsibilities:
  • Implement new features and platforms
  • Write tests and documentation
  • Code reviews for each other
  • Follow coding standards

Future Contributors (When Team Grows)

  • Access Level: Read + Fork
  • Permissions:
  • Fork repository
  • Submit pull requests from forks
  • Participate in discussions
  • Responsibilities:
  • Follow contribution guidelines
  • Provide quality pull requests
  • Respond to review feedback

3. Simplified Access Strategy

All Team Members Can:

  • Create feature branches
  • Modify any source files (on feature branches)
  • Add new platform providers
  • Update documentation and tests
  • Review each other's code

Admin Review Required For:

  • Changes to core architecture (base.py, factory.py, auth/)
  • Changes to orchestrator integration
  • Version updates and releases
  • Repository configuration changes

Self-Merge Allowed For:

  • New platform provider implementations (after tests pass)
  • Documentation updates
  • Bug fixes (non-core)
  • Test improvements

Collaboration Workflow (Small Team)

Daily Development Process

For Any Team Member:

# 1. Start new feature
git checkout main
git pull origin main
git checkout -b feature/your-feature-name

# 2. Implement your changes
# Edit files, add features, fix bugs

# 3. Test your changes
python -m pytest backend/tests/
python -m pytest backend/tests/test_your_new_feature.py

# 4. Commit and push
git add .
git commit -m "feat: your meaningful commit message"
git push origin feature/your-feature-name

# 5. Create Pull Request (if needed)
# Or self-merge if it's a platform provider or documentation

When to Create a Pull Request:

  • Core architecture changes (base.py, factory.py, orchestrator.py)
  • Breaking changes to existing APIs
  • Major new features that affect multiple components
  • When unsure - better safe than sorry!

When to Self-Merge:

  • New platform providers (after tests pass)
  • Documentation updates
  • Bug fixes in platform-specific code
  • Test improvements
  • Code cleanup and refactoring

Code Review Guidelines

For Admin (You):

  • Focus on architecture and system integration
  • Ensure changes don't break existing functionality
  • Quick reviews for platform-specific changes
  • Detailed reviews for core changes

For Team Members:

  • Review each other's platform implementations
  • Share knowledge and best practices
  • Catch bugs early
  • Learn from each other's approaches

Security Considerations

1. Credential Management

  • Never commit credentials to the repository
  • Use environment variables or secure config files
  • Document required credentials in platform README
  • Provide example configuration files

2. Platform-Specific Security

  • Each platform specialist responsible for their security model
  • Core maintainers review authentication patterns
  • Regular security audits of credential handling

3. Code Review Security Checklist

  • No hardcoded secrets or API keys
  • Proper input validation and sanitization
  • Secure HTTP communication (TLS/SSL)
  • Error messages don't leak sensitive information
  • Authentication tokens properly managed

Testing Strategy

Platform-Specific Tests

Each platform provider must include: - Unit tests for provider functionality - Integration tests with mock services - Error scenario testing - Performance/load testing

Cross-Platform Integration Tests

  • Factory pattern testing with all providers
  • Fallback mechanism testing
  • Orchestrator integration testing
  • End-to-end workflow testing

Documentation Requirements

Platform Provider Documentation

Each new platform must include: 1. Setup Guide: Installation and configuration 2. Credential Guide: How to obtain and configure credentials 3. API Reference: Platform-specific options and features 4. Troubleshooting: Common issues and solutions 5. Examples: Code samples for common use cases

Contribution Guidelines

  • Code style guide (Black, flake8)
  • Commit message conventions
  • PR template and review process
  • Testing requirements

Monitoring & Maintenance

Code Ownership

  • Core Architecture: @core-maintainers
  • FCM Linux: @firebase-team
  • APNs macOS: @apple-team
  • WNS Windows: @microsoft-team
  • Web Push: @web-team
  • Documentation: @docs-team

Release Process

  1. Feature freeze for next release
  2. Integration testing across all platforms
  3. Documentation review and updates
  4. Version tagging and changelog
  5. Coordinated deployment

This collaboration model ensures that multiple teams can work on different platforms simultaneously while maintaining code quality and system integrity.