Created detailed contributor guide including: **Join Process:** - Step-by-step onboarding (accept invite → clone → setup → contribute) - Current contributors: leetcrypt (admin), Ringmast4r (invited) - GhostArmyIntel organization integration options **Collaboration Workflows:** - Option 1: Transfer repo to GhostArmyIntel organization (recommended) - Option 2: Fork to organization (independent development) - Option 3: Direct collaborator access (current setup) **Development Guide:** - Codebase structure walkthrough - Git workflow (feature branches, PRs, commit conventions) - Testing procedures (unit tests, benchmarks) - Priority tasks from REAL_CAPTURE_ANALYSIS.md **Quick Start Tasks:** - Add missing protocols (Acurite 02077M, GE Doorbell, Holtek HT12X) - Implement decoded .sub file support (Priority 1 - fixes 45% failures) - Improve real signal robustness (packet segmentation, noise tolerance) **GhostArmyIntel Integration:** - Links to related projects (wardriving-converter, WiGLE-Vault, OUI-Master-Database) - Organization transfer instructions - Fork workflow for org-owned development Designed to onboard Ringmast4r and GhostArmyIntel team members with complete context on project status, architecture, and contribution paths. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
11 KiB
Contributing to GigLez - IoT RF Device Mapping Platform
Welcome! We're building a Wigle-style platform for Sub-GHz RF device mapping. This guide will help you join the project and start contributing.
🏛️ Project Overview
GigLez is an open-source crowdsourced platform for mapping IoT RF devices (300-928 MHz). Think "Wigle.net for garage doors, weather stations, and doorbells."
Key Features:
- 6-component RF signature matching engine
- 299 protocol database (RTL_433 imported)
- GPS validation & privacy features
- Real-world benchmarking infrastructure
- Support for Flipper Zero, RTL-SDR, HackRF captures
Current Status:
- ✅ Core identification engine complete
- ✅ 56 unit tests passing
- ⚠️ 33% synthetic accuracy, 0% real-world (documented gap analysis)
- 📊 Benchmarking & calibration in progress
👥 Current Contributors
Core Team
- leetcrypt - Repository owner, core developer (admin access)
- Ringmast4r - Invited collaborator (write access) - Pending acceptance
Organizations
- GhostArmyIntel - Organization for wardriving & RF intelligence projects
- Projects: wardriving-converter, WiGLE-Vault, OUI-Master-Database
🚀 How to Join the Project
Step 1: Accept Your Invitation
If you've been invited as a collaborator:
- Check your email for invitation from GitHub
- Or visit: https://github.com/notifications
- Accept the invitation to join
leetcrypt/giglez - You'll receive write access (push, pull, create branches/PRs)
Pending Invitations:
- Ringmast4r (invited 2026-02-16)
Step 2: Clone the Repository
# Clone the repo
git clone https://github.com/leetcrypt/giglez.git
cd giglez
# Verify you have access
git remote -v
Step 3: Set Up Your Environment
Option A: Python Virtual Environment
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies (if requirements.txt exists)
pip install -r requirements.txt
# Run tests to verify setup
python -m pytest tests/ -v
Option B: Development with Existing Tools
If you already have Python 3.10+ and pytest:
# Just run the tests
cd /path/to/giglez
python -m pytest tests/ -v
Step 4: Understand the Codebase
Key Directories:
giglez/
├── src/
│ ├── matcher/ # RF device identification engine
│ │ ├── device_identifier.py # Unified API (iteration 6/6)
│ │ ├── pattern_decoder.py # Multi-factor scoring
│ │ ├── timing_analyzer.py # Pulse timing extraction
│ │ ├── preamble_detector.py # Sync pattern detection
│ │ ├── frequency_fingerprint.py # ISM band classification
│ │ ├── statistical_classifier.py # Bayesian scoring
│ │ └── protocol_database.py # 299 protocol signatures
│ ├── parser/
│ │ └── sub_parser.py # Flipper .sub file parser
│ └── gps/
│ └── validator.py # GPS validation & privacy
├── tests/
│ ├── unit/ # 56 unit tests
│ ├── benchmark/ # Synthetic signal testing
│ └── real_captures/ # Real Flipper Zero files
├── scripts/
│ ├── benchmark.py # Accuracy benchmarking
│ └── benchmark_real.py # Real-world testing
└── docs/
├── REAL_CAPTURE_ANALYSIS.md # 0% accuracy gap analysis
└── WARDRIVER_ONBOARDING.md # RF community survey
Read First:
CLAUDE.md- Project status & architecturedocs/REAL_CAPTURE_ANALYSIS.md- Critical findings on real-world performancedocs/WARDRIVER_ONBOARDING.md- Data format requirements
Step 5: Make Your First Contribution
Quick Start Tasks (Good First Issues)
1. Add Missing Protocols (Priority 2 fix - 27% of failures)
- Add Acurite 02077M to protocol database
- Add GE Doorbell 19297
- Add Byron DB421E
- Add Holtek HT12X (fan/LED remotes)
2. Test Real Captures
- Download more real .sub files from UberGuidoZ/Flipper
- Run
scripts/benchmark_real.py - Document which protocols work/fail
3. Improve Documentation
- Add examples to CONTRIBUTING.md
- Create protocol database contribution guide
- Document how to add new signal types
4. Fix Decoded .sub File Support (Priority 1 fix - 45% of failures)
- Implement parser for decoded Flipper files
- Extract Protocol, Bit, Key, TE fields
- Match by protocol name + timing element
🔄 Git Workflow
Standard Development Workflow
# 1. Create feature branch
git checkout -b feature/your-feature-name
# 2. Make changes and commit
git add .
git commit -m "feat: add Acurite 02077M protocol support"
# 3. Push to GitHub
git push origin feature/your-feature-name
# 4. Create Pull Request on GitHub
# Visit: https://github.com/leetcrypt/giglez/pulls
# Click "New Pull Request"
Commit Message Convention
Follow conventional commits:
feat: add new protocol support for Holtek HT12X
fix: correct timing ratio calculation for Oregon Scientific
docs: update CONTRIBUTING.md with fork workflow
test: add unit tests for decoded .sub file parsing
refactor: optimize preamble detection algorithm
Branch Naming
feature/protocol-xyz- New protocol additionsfix/timing-accuracy- Bug fixesdocs/contributing-guide- Documentationtest/real-captures- Test improvements
🏗️ For GhostArmyIntel Organization
Option 1: Transfer Repository to Organization (Recommended)
Requires: GhostArmyIntel organization admin to accept transfer
Process:
-
Repository owner (leetcrypt) initiates transfer:
gh api -X POST /repos/leetcrypt/giglez/transfer \ -f new_owner=GhostArmyIntel -
GhostArmyIntel org admin accepts transfer at: https://github.com/settings/repositories
-
Repository becomes:
GhostArmyIntel/giglez -
leetcrypt is re-added as collaborator
Pros:
- Organization owns the repo
- Professional branding
- Team can manage collaborators
- Fits with wardriving-converter, WiGLE-Vault projects
Cons:
- Requires org admin permission
- URL changes (redirect is automatic)
Option 2: Fork to Organization
Process:
- GhostArmyIntel member visits: https://github.com/leetcrypt/giglez
- Click "Fork" button
- Select "GhostArmyIntel" as owner
- Fork created at:
GhostArmyIntel/giglez
Workflow:
# Clone the fork
git clone https://github.com/GhostArmyIntel/giglez.git
cd giglez
# Add upstream remote (original repo)
git remote add upstream https://github.com/leetcrypt/giglez.git
# Sync with upstream
git fetch upstream
git merge upstream/main
Pros:
- Independent development
- Can create org-specific features
- Proper fork relationship
Cons:
- Two separate repositories
- Need to sync regularly
Option 3: Collaborator Access (Current Setup)
Process:
- Ringmast4r accepts invitation to leetcrypt/giglez
- Works directly on shared repository
- Creates branches and PRs
Pros:
- Simple, immediate access
- Single source of truth
Cons:
- Not under GhostArmyIntel organization
📊 Current Priority Tasks
Based on docs/REAL_CAPTURE_ANALYSIS.md:
Priority 1: Decoded .sub File Support (Fixes 45% of failures)
Impact: 5/11 real captures failed because they're decoded, not RAW
Task:
# Implement in src/parser/sub_parser.py
def parse_decoded_sub_file(filepath):
"""Parse decoded Flipper .sub files"""
# Extract: Protocol, Bit, Key, TE
# Match by protocol name + timing element
# Return SignalMetadata with is_decoded=True
Priority 2: Add Missing Protocols (Fixes 27% of failures)
Needed:
- Acurite 02077M (weather station)
- GE Doorbell 19297
- Byron DB421E
- Holtek HT12X (LED/fan remotes)
- LiftMaster (generic 433 MHz)
Task:
Add to src/matcher/protocol_database.py:
Protocol(
name="Acurite 02077M",
category="weather_sensor",
frequency=433920000,
short_pulse_us=1000,
long_pulse_us=2000,
# ... etc
)
Priority 3: Improve Real Signal Robustness (Fixes 27% of failures)
Issues:
- Multi-packet transmissions (131 pulses vs 40 bits)
- Signal noise beyond 15% tolerance
Tasks:
- Implement packet segmentation
- Increase jitter tolerance from 15% → 25%
- Add repetition detection
🧪 Testing Your Changes
Run All Tests
# All unit tests
pytest tests/ -v
# Specific test file
pytest tests/unit/test_timing_analyzer.py -v
# With coverage
pytest tests/ --cov=src --cov-report=html
Run Benchmarks
# Synthetic signal benchmark
python scripts/benchmark.py
# Real-world captures benchmark
python scripts/benchmark_real.py
Expected Output
REAL-WORLD BENCHMARK SUMMARY
═══════════════════════════════
Total Tests: 11
TOP-K ACCURACY:
Top-1: 0.0% (0/11) # Target: improve this!
Top-3: 0.0% (0/11)
📞 Communication & Coordination
GitHub Discussions
Use GitHub Issues for:
- Bug reports
- Feature requests
- Protocol addition proposals
- Questions about implementation
Pull Request Reviews
- Tag @leetcrypt for code review
- Tag @Ringmast4r for wardriving expertise
- Wait for approval before merging
Project Board (Coming Soon)
Track work on GitHub Projects:
- To Do: Priority tasks from REAL_CAPTURE_ANALYSIS.md
- In Progress: Current work
- Done: Completed features
🎯 Long-Term Vision
Phase 1 (Current): Core Identification Engine
- ✅ Multi-factor scoring
- ✅ Protocol database (299 protocols)
- ⚠️ Real-world accuracy (in progress)
Phase 2: Web Platform
- Upload interface (drag .sub files + GPS)
- Interactive map (Leaflet.js)
- Device database browser
Phase 3: Community Features
- Manual device ID submission
- Photo uploads
- Voting/verification system
- Leaderboards
Phase 4: Multi-Format Support
- rtl_433 JSON import
- URH .complex files
- GPX track parsing
- Batch upload API
📄 License
MIT License - See LICENSE file
🤝 Code of Conduct
- Be respectful and professional
- Provide constructive feedback
- Help newcomers learn
- Document your changes
- Test before pushing
❓ Questions?
GitHub Issues: https://github.com/leetcrypt/giglez/issues Repository: https://github.com/leetcrypt/giglez
Related GhostArmyIntel Projects:
- wardriving-converter: https://github.com/GhostArmyIntel/wardriving-converter
- WiGLE-Vault: https://github.com/GhostArmyIntel/WiGLE-Vault
- OUI-Master-Database: https://github.com/GhostArmyIntel/OUI-Master-Database
"A Ringmast4r project honoring the WWII Ghost Army — blending art, code, and strategy into modern open-source signalcraft."
Last Updated: 2026-02-16