{"id":31658234,"url":"https://github.com/petruzdroba/multi-pitch-assistant","last_synced_at":"2026-05-08T19:32:11.289Z","repository":{"id":305668791,"uuid":"1017369479","full_name":"petruzdroba/multi-pitch-assistant","owner":"petruzdroba","description":null,"archived":false,"fork":false,"pushed_at":"2025-10-15T12:19:55.000Z","size":34888,"stargazers_count":0,"open_issues_count":6,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-16T04:47:32.842Z","etag":null,"topics":["angular","capacitor","ionic"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/petruzdroba.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-10T12:33:39.000Z","updated_at":"2025-10-15T12:19:58.000Z","dependencies_parsed_at":"2025-08-11T14:16:44.891Z","dependency_job_id":"e98a90ea-b42a-452d-8323-8685cd7b00fa","html_url":"https://github.com/petruzdroba/multi-pitch-assistant","commit_stats":null,"previous_names":["petruzdroba/multi-pitch-assistant"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/petruzdroba/multi-pitch-assistant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petruzdroba%2Fmulti-pitch-assistant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petruzdroba%2Fmulti-pitch-assistant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petruzdroba%2Fmulti-pitch-assistant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petruzdroba%2Fmulti-pitch-assistant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/petruzdroba","download_url":"https://codeload.github.com/petruzdroba/multi-pitch-assistant/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petruzdroba%2Fmulti-pitch-assistant/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32794609,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"ssl_error","status_checked_at":"2026-05-08T08:22:45.650Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","capacitor","ionic"],"created_at":"2025-10-07T15:15:46.488Z","updated_at":"2026-05-08T19:32:11.272Z","avatar_url":"https://github.com/petruzdroba.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multi-Pitch Assistant\n\nA mobile application for tracking and analyzing multi-pitch climbing sessions using real-time altitude monitoring and event classification.\n\n![Android](https://img.shields.io/badge/Android-3DDC84?style=for-the-badge\u0026logo=android\u0026logoColor=white)\n![Ionic](https://img.shields.io/badge/Ionic-%233880FF.svg?style=for-the-badge\u0026logo=Ionic\u0026logoColor=white)\n![Angular](https://img.shields.io/badge/angular-%23DD0031.svg?style=for-the-badge\u0026logo=angular\u0026logoColor=white)\n![SQLite](https://img.shields.io/badge/sqlite-%2307405e.svg?style=for-the-badge\u0026logo=sqlite\u0026logoColor=white)\n![Jasmine](https://img.shields.io/badge/jasmine-%238A4182.svg?style=for-the-badge\u0026logo=jasmine\u0026logoColor=white)\n![cypress](https://img.shields.io/badge/-cypress-%23E5E5E5?style=for-the-badge\u0026logo=cypress\u0026logoColor=058a5e)\n\n## 📱 Overview\n\nMulti-Pitch Assistant is an Ionic/Angular mobile application that helps climbers track their climbing sessions with automatic event detection. The app uses the device's barometer to monitor altitude changes and intelligently classifies climbing events such as falls, rests, and pitch changes.\n\n## License\n\nThis project is licensed under the **MIT License**. See the [LICENSE](LICENSE) file for details.\n\n---\n\n## Usage\n\nYou are welcome to **use, modify, and experiment** with this project for **personal or educational purposes**.\n\n**Commercial use is not encouraged or supported.** If you plan to use this project commercially, please **contact the author** for permission.\n\n---\n\n## Disclaimer\n\nThis project is provided under the MIT License. While commercial use is technically allowed, the author requests that it be used primarily for learning, personal projects, or educational purposes.\n\n---\n\n### Key Features\n\n- **Real-time Altitude Monitoring**: Uses device barometer for precise altitude tracking\n- **Automatic Event Classification**: Detects falls, rests, retreats, and pitch changes\n- **Session Management**: Start, track, and end climbing sessions\n- **Event Logging**: Manual note-taking during sessions\n- **Session History**: View and analyze past climbing sessions\n- **Location Tracking**: GPS coordinates for session locations\n- **Cross-platform**: Built with Ionic for Android and iOS compatibility\n\n## 🏗️ Architecture\n\n- **Framework**: Ionic 8 with Angular 20\n- **Database**: SQLite with Capacitor Community SQLite\n- **Sensors**: Barometer for altitude, GPS for location\n- **Platform**: Capacitor for native mobile functionality\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js (v18 or higher)\n- npm or yarn\n- Ionic CLI (`npm install -g @ionic/cli`)\n- Android Studio (for Android development)\n- Xcode (for iOS development, macOS only)\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/petruzdroba/multi-pitch-assistant.git\n   cd multi-pitch-assistant\n   ```\n\n2. **Install dependencies**\n   ```bash\n   npm install\n   ```\n\n3. **Install Capacitor CLI**\n   ```bash\n   npm install -g @capacitor/cli\n   ```\n\n### Development Setup\n\n1. **Start the development server**\n   ```bash\n   npm start\n   ```\n\n2. **Add Android platform**\n   ```bash\n   npx cap add android\n   ```\n\n3. **Sync the project**\n   ```bash\n   npx cap sync\n   ```\n\n4. **Open in Android Studio**\n   ```bash\n   npx cap open android\n   ```\n\n### Building and Running\n\n#### Web Development\n```bash\n# Start development server\nnpm start\n\n# Build for production\nnpm run build\n```\n\n#### Android Development\n```bash\n# Build and sync\nionic build\nnpx cap sync android\n\n# Open in Android Studio\nnpx cap open android\n```\n\n#### Quick Build Scripts\n\n**Linux/macOS:**\n```bash\nchmod +x build_and_install_linux.sh\n./build_and_install_linux.sh\n```\n\n**Windows:**\n```cmd\nbuild_and_install_windows.bat\n```\n\n## 🧪 Testing\n\n```bash\n# Run unit tests\nnpm test\n\n# Run linting\nnpm run lint\n```\n\n## 📱 Usage\n\n### Starting a Session\n1. Open the app and tap \"Start Climbing\"\n2. The app will begin monitoring altitude changes\n3. Automatic event detection will classify your movements\n\n### During a Session\n- **Automatic Detection**: Falls, rests, and pitch changes are detected automatically\n- **Manual Notes**: Tap the + button to add custom notes\n- **Real-time Monitoring**: View altitude changes and events in real-time\n\n### Ending a Session\n1. Tap \"End Climbing\" to finish the session\n2. Add session details (name, type, location, notes)\n3. Session is saved to your history\n\n### Viewing History\n- Navigate to the Log tab to see past sessions\n- Tap on any session to view detailed information\n- Edit session details or add post-climb notes\n\n## 🔧 Configuration\n\n### Environment Variables\nCreate `src/environments/environment.prod.ts`:\n```typescript\nexport const environment = {\n  production: true\n};\n```\n\n### Event Classification Thresholds\nThe app uses configurable thresholds for event detection:\n- **Fall Detection**: Minimum altitude drop (default: 0.5m)\n- **Rest Detection**: Maximum altitude change (default: 0.3m)\n- **Noise Filtering**: Minimum change threshold (default: 0.5m)\n\n## 📊 Data Models\n\n### Session\n```typescript\ninterface Session {\n  id: string;\n  timeStart: Date;\n  timeEnd: Date;\n  events: ClimbEvent[];\n  name?: string;\n  type?: 'sport' | 'trad' | 'undefined';\n  location?: { latitude: number; longitude: number };\n  notes?: string;\n  completed?: boolean;\n  pitchCount?: number;\n}\n```\n\n### Climb Event\n```typescript\ninterface ClimbEvent {\n  id: string;\n  time: Date;\n  altitude?: number;\n  type: 'session-started' | 'session-ended' | 'fall'  | \n        'pitch-changed' | 'rest' | 'retreat' | 'manual-note' | 'lead-started' | \n        'lead-ended' | 'second-started' | 'second-ended' | 'error' | 'belay' | \n        'barometer-reading';\n  notes?: string;\n}\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Please follow these steps:\n\n1. **Fork the repository**\n2. **Create a feature branch**\n   ```bash\n   git checkout -b feature/your-feature-name\n   ```\n3. **Make your changes**\n4. **Run tests**\n   ```bash\n   npm test\n   npm run lint\n   ```\n5. **Commit your changes**\n   ```bash\n   git commit -m \"Add your feature description\"\n   ```\n6. **Push to your branch**\n   ```bash\n   git push origin feature/your-feature-name\n   ```\n7. **Create a Pull Request**\n\n### Development Guidelines\n\n- Follow Angular style guide\n- Write unit tests for new features\n- Ensure all tests pass before submitting PR\n- Update documentation for new features\n- Use conventional commit messages\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🆘 Support\n\n- **Issues**: Report bugs and request features on [GitHub Issues](https://github.com/petruzdroba/multi-pitch-assistant/issues)\n- **Discussions**: Join the conversation on [GitHub Discussions](https://github.com/petruzdroba/multi-pitch-assistant/discussions)\n\n## 🙏 Acknowledgments\n\n- Built with [Ionic Framework](https://ionicframework.com/)\n- Uses [Capacitor](https://capacitorjs.com/) for native functionality\n- Altitude monitoring powered by device barometer sensors\n\n## 📈 Roadmap\n\n- [ ] iOS support\n- [ ] Cloud sync for session data\n- [ ] Advanced analytics and statistics\n- [ ] Route difficulty estimation\n- [ ] Social features for sharing sessions\n- [ ] Offline mode improvements\n- [ ] Custom event types\n- [ ] Export functionality\n\n---\n\n\u003cimg src=\"https://github.com/user-attachments/assets/2e7303ef-bbdf-4d48-8f72-17c0fb6e352e\" width=\"300\"/\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/78c7203a-4ba7-42fc-9624-23c94694efeb\" width=\"300\"/\u003e\n\u003cimg src=\"https://github.com/user-attachments/assets/616114bb-defe-4b4c-b33d-7e6f53b55e4d\" width=\"300\"/\u003e\n\n**Note**: This app requires a device with a barometer sensor for altitude monitoring functionality. GPS is used for location tracking and is optional.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpetruzdroba%2Fmulti-pitch-assistant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpetruzdroba%2Fmulti-pitch-assistant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpetruzdroba%2Fmulti-pitch-assistant/lists"}