From c3f335c0380c8cbb65f21969dd2edc820e28fc84 Mon Sep 17 00:00:00 2001 From: Bahati308 Date: Thu, 4 Dec 2025 20:39:31 +0300 Subject: [PATCH 1/3] Update General README.md --- README.md | 97 ++++++++++++++----------------------------------------- 1 file changed, 25 insertions(+), 72 deletions(-) diff --git a/README.md b/README.md index a7a5d800c..ee13cff3b 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,47 @@ -# Open Data Ensemble (ODE) 🎼 +# Open Data Ensemble (ODE) -Welcome to the **Open Data Ensemble** - a comprehensive platform for mobile data collection and synchronization! +**A comprehensive platform for designing, capturing, and synchronizing field data with precision and reliability.** -## About ODE +ODE is a modular, open-source toolset engineered for development practitioners, researchers, and humanitarian teams. Built with clarity and control in mind, ODE enables organizations to compose powerful data collection workflows that excel in challenging field environments. -ODE is a monorepo containing all the core components in the ODE universe - the essential members of our *ensemble*, if you will. We're building a modern, open-source solution for field data collection that works seamlessly across mobile devices and web platforms. - -## Architecture - -This repository houses four main components: - -### **formulus** -A React Native project containing the code for Android and iOS apps. This is your mobile data collection companion, designed for field work and offline-first data gathering. - -### **formulus-formplayer** -A React web application responsible for rendering JSON forms and communicating with the Formulus mobile app. It provides the dynamic form interface that powers your data collection workflows. - -### **synkronus** -The server component written in Go. This handles data synchronization, storage, and provides the backbone for all data operations across the platform. - -### **synkronus-cli** -A command-line utility to interact with the Synkronus server. Use it to manage custom app data, handle user administration, export data to Parquet format, and perform various administrative tasks. - -## We're Young & Fresh! 🌱🌱🌱 - -ODE is a **young and vibrant open-source project**, and we're incredibly welcoming to contributors of all experience levels and interests! Whether you're passionate about: - -- **Software Development** (React Native, React, Go, TypeScript) -- **Documentation** (helping others understand and use ODE) -- **Implementation** (deploying, testing, real-world usage) -- **Community Building** (fostering collaboration and growth) -- **UI/UX Design** (making data collection delightful) -- **Data Science** (improving data workflows and analytics) +--- -...we'd love to have you join our ensemble! +## Overview -## 🤝 Contributing +ODE provides a complete solution for mobile-first data collection, designed to operate seamlessly in offline environments while maintaining robust synchronization capabilities. The platform emphasizes interoperability, extensibility, and a clean developer experience. -We believe that diverse perspectives and varied skill sets make our project stronger. Don't worry if you're new to open source or if you think your skills might not be "technical enough" - there's a place for everyone here. +## Core Components -**Getting Started:** -- Browse our issues to find something that interests you -- Join our discussions to share ideas -- Improve documentation where you see gaps -- Test the platform and report your experience -- Share how you're using ODE in your work +### Formulus -## CI/CD Pipeline 🚀 +A mobile-first form engine built on [JSONForms](https://github.com/eclipsesource/jsonforms), optimized for field usability and offline operation. Formulus delivers an intuitive interface for data collection across Android and iOS devices. -This monorepo uses GitHub Actions for continuous integration and deployment: +### Synkronus -### Current Pipelines +The synchronization layer and backend API, engineered for offline resilience and seamless data flow. Synkronus handles data synchronization, storage, and provides the backbone for all data operations across the platform. -#### Synkronus Docker Build & Publish -- **Trigger**: Push to `main` branch or pull requests affecting `synkronus/` directory -- **Registry**: GitHub Container Registry (ghcr.io) -- **Image**: `ghcr.io/opendataensemble/synkronus` -- **Tagging Strategy**: - - `main` branch → `latest` + `v{version}` (release versions) - - Other branches → `{branch-name}` (pre-release versions) -- **Workflow**: `.github/workflows/synkronus-docker.yml` +### CLI & Development Tools -### Image Versioning +Command-line utilities and development tools to help you develop, test, and manage your data collection workflows. Includes utilities for custom app data management, user administration, and data export capabilities. -Images follow semantic versioning: -- **Release**: `ghcr.io/opendataensemble/synkronus:latest` or `ghcr.io/opendataensemble/synkronus:v1.0.0` -- **Pre-release**: `ghcr.io/opendataensemble/synkronus:develop` or `ghcr.io/opendataensemble/synkronus:feature-xyz` +## Key Features -### Using Published Images +- **Open Source & Community-Driven**: Built with transparency and community collaboration at its core +- **Field-Optimized**: Designed specifically for real-world field constraints and challenging environments +- **Interoperable & Extensible**: Built on open standards with a modular architecture for easy extension +- **Developer-Focused**: Clean APIs and comprehensive tooling for a superior development experience +- **Offline-First**: Robust offline capabilities with reliable synchronization when connectivity is restored -Pull and run the latest Synkronus image: +## Getting Started -```bash -docker pull ghcr.io/opendataensemble/synkronus:latest -docker run -d -p 8080:8080 \ - -e DB_CONNECTION="postgres://user:pass@host:5432/synkronus" \ - -e JWT_SECRET="your-secret-key" \ - -v synkronus-bundles:/app/data/app-bundles \ - ghcr.io/opendataensemble/synkronus:latest -``` +For detailed documentation, visit [opendataensemble.org](https://opendataensemble.org). -**Documentation:** -- [CI/CD Pipeline Details](.github/CICD.md) - Comprehensive CI/CD documentation -- [Synkronus Docker Guide](synkronus/DOCKER.md) - Quick start guide -- [Synkronus Deployment Guide](synkronus/DEPLOYMENT.md) - Production deployment +To explore individual components and begin development, check out the projects within this organization. -## Get Involved 📬 +## Contributing -Ready to join the ensemble? We're excited to meet you and see what unique perspective you'll bring to ODE! +ODE welcomes contributions from developers, researchers, and practitioners. Whether you're interested in software development, documentation, testing, or community building, there's a place for you in the ensemble. --- -*Building the future of open data collection, one contribution at a time.* ✨ \ No newline at end of file +*Building the future of open data collection, one contribution at a time.* From 9be8e2f65a8fe871b9a432110dc12504704fa185 Mon Sep 17 00:00:00 2001 From: Bahati308 Date: Tue, 9 Dec 2025 09:03:25 +0300 Subject: [PATCH 2/3] fix(formplayer): use browser-compatible timer type in AudioQuestionRenderer Replace NodeJS.Timeout with ReturnType to fix TypeScript compilation error on macOS. This ensures cross-platform compatibility between browser (number) and Node.js (Timeout) timer types. Fixes #50 --- formulus-formplayer/src/AudioQuestionRenderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/formulus-formplayer/src/AudioQuestionRenderer.tsx b/formulus-formplayer/src/AudioQuestionRenderer.tsx index 0cf16e33c..8c2aab415 100644 --- a/formulus-formplayer/src/AudioQuestionRenderer.tsx +++ b/formulus-formplayer/src/AudioQuestionRenderer.tsx @@ -55,7 +55,7 @@ const AudioQuestionRenderer: React.FC = ({ const [isLoading, setIsLoading] = useState(false); const audioRef = useRef(null); - const progressInterval = useRef(null); + const progressInterval = useRef | null>(null); const audioData: AudioData | null = data && typeof data === 'object' && data.type === 'audio' ? data : null; const hasAudio = !!audioData; From 7a76e1ca36d72cd18a2761d5c6663776ba9ca4f6 Mon Sep 17 00:00:00 2001 From: Bahati308 Date: Tue, 9 Dec 2025 09:09:51 +0300 Subject: [PATCH 3/3] Fix readme --- README.md | 97 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 72 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index ee13cff3b..a7a5d800c 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,94 @@ -# Open Data Ensemble (ODE) +# Open Data Ensemble (ODE) 🎼 -**A comprehensive platform for designing, capturing, and synchronizing field data with precision and reliability.** +Welcome to the **Open Data Ensemble** - a comprehensive platform for mobile data collection and synchronization! -ODE is a modular, open-source toolset engineered for development practitioners, researchers, and humanitarian teams. Built with clarity and control in mind, ODE enables organizations to compose powerful data collection workflows that excel in challenging field environments. +## About ODE ---- +ODE is a monorepo containing all the core components in the ODE universe - the essential members of our *ensemble*, if you will. We're building a modern, open-source solution for field data collection that works seamlessly across mobile devices and web platforms. + +## Architecture + +This repository houses four main components: + +### **formulus** +A React Native project containing the code for Android and iOS apps. This is your mobile data collection companion, designed for field work and offline-first data gathering. + +### **formulus-formplayer** +A React web application responsible for rendering JSON forms and communicating with the Formulus mobile app. It provides the dynamic form interface that powers your data collection workflows. + +### **synkronus** +The server component written in Go. This handles data synchronization, storage, and provides the backbone for all data operations across the platform. + +### **synkronus-cli** +A command-line utility to interact with the Synkronus server. Use it to manage custom app data, handle user administration, export data to Parquet format, and perform various administrative tasks. + +## We're Young & Fresh! 🌱🌱🌱 + +ODE is a **young and vibrant open-source project**, and we're incredibly welcoming to contributors of all experience levels and interests! Whether you're passionate about: + +- **Software Development** (React Native, React, Go, TypeScript) +- **Documentation** (helping others understand and use ODE) +- **Implementation** (deploying, testing, real-world usage) +- **Community Building** (fostering collaboration and growth) +- **UI/UX Design** (making data collection delightful) +- **Data Science** (improving data workflows and analytics) -## Overview +...we'd love to have you join our ensemble! -ODE provides a complete solution for mobile-first data collection, designed to operate seamlessly in offline environments while maintaining robust synchronization capabilities. The platform emphasizes interoperability, extensibility, and a clean developer experience. +## 🤝 Contributing -## Core Components +We believe that diverse perspectives and varied skill sets make our project stronger. Don't worry if you're new to open source or if you think your skills might not be "technical enough" - there's a place for everyone here. -### Formulus +**Getting Started:** +- Browse our issues to find something that interests you +- Join our discussions to share ideas +- Improve documentation where you see gaps +- Test the platform and report your experience +- Share how you're using ODE in your work -A mobile-first form engine built on [JSONForms](https://github.com/eclipsesource/jsonforms), optimized for field usability and offline operation. Formulus delivers an intuitive interface for data collection across Android and iOS devices. +## CI/CD Pipeline 🚀 -### Synkronus +This monorepo uses GitHub Actions for continuous integration and deployment: -The synchronization layer and backend API, engineered for offline resilience and seamless data flow. Synkronus handles data synchronization, storage, and provides the backbone for all data operations across the platform. +### Current Pipelines -### CLI & Development Tools +#### Synkronus Docker Build & Publish +- **Trigger**: Push to `main` branch or pull requests affecting `synkronus/` directory +- **Registry**: GitHub Container Registry (ghcr.io) +- **Image**: `ghcr.io/opendataensemble/synkronus` +- **Tagging Strategy**: + - `main` branch → `latest` + `v{version}` (release versions) + - Other branches → `{branch-name}` (pre-release versions) +- **Workflow**: `.github/workflows/synkronus-docker.yml` -Command-line utilities and development tools to help you develop, test, and manage your data collection workflows. Includes utilities for custom app data management, user administration, and data export capabilities. +### Image Versioning -## Key Features +Images follow semantic versioning: +- **Release**: `ghcr.io/opendataensemble/synkronus:latest` or `ghcr.io/opendataensemble/synkronus:v1.0.0` +- **Pre-release**: `ghcr.io/opendataensemble/synkronus:develop` or `ghcr.io/opendataensemble/synkronus:feature-xyz` -- **Open Source & Community-Driven**: Built with transparency and community collaboration at its core -- **Field-Optimized**: Designed specifically for real-world field constraints and challenging environments -- **Interoperable & Extensible**: Built on open standards with a modular architecture for easy extension -- **Developer-Focused**: Clean APIs and comprehensive tooling for a superior development experience -- **Offline-First**: Robust offline capabilities with reliable synchronization when connectivity is restored +### Using Published Images -## Getting Started +Pull and run the latest Synkronus image: -For detailed documentation, visit [opendataensemble.org](https://opendataensemble.org). +```bash +docker pull ghcr.io/opendataensemble/synkronus:latest +docker run -d -p 8080:8080 \ + -e DB_CONNECTION="postgres://user:pass@host:5432/synkronus" \ + -e JWT_SECRET="your-secret-key" \ + -v synkronus-bundles:/app/data/app-bundles \ + ghcr.io/opendataensemble/synkronus:latest +``` -To explore individual components and begin development, check out the projects within this organization. +**Documentation:** +- [CI/CD Pipeline Details](.github/CICD.md) - Comprehensive CI/CD documentation +- [Synkronus Docker Guide](synkronus/DOCKER.md) - Quick start guide +- [Synkronus Deployment Guide](synkronus/DEPLOYMENT.md) - Production deployment -## Contributing +## Get Involved 📬 -ODE welcomes contributions from developers, researchers, and practitioners. Whether you're interested in software development, documentation, testing, or community building, there's a place for you in the ensemble. +Ready to join the ensemble? We're excited to meet you and see what unique perspective you'll bring to ODE! --- -*Building the future of open data collection, one contribution at a time.* +*Building the future of open data collection, one contribution at a time.* ✨ \ No newline at end of file