{"id":50684107,"url":"https://github.com/jydv402/dotdash","last_synced_at":"2026-06-08T21:02:07.909Z","repository":{"id":347774696,"uuid":"1085886939","full_name":"jydv402/dotdash","owner":"jydv402","description":"A lightweight, web-based Morse code sound generator and translator. Convert text to Morse code audio in real-time. Also, learn Morse code.","archived":false,"fork":false,"pushed_at":"2026-06-05T10:49:36.000Z","size":663,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T12:22:47.268Z","etag":null,"topics":["audio-processing","dart","flutter","morse","morse-code","morse-code-converter","morse-code-translator","morse-learning","open-source","tool","tools","translate","translation","translator","web-app","web-application"],"latest_commit_sha":null,"homepage":"https://jydv402.github.io/morse.play/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jydv402.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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-10-29T16:40:18.000Z","updated_at":"2026-06-05T10:49:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jydv402/dotdash","commit_stats":null,"previous_names":["jydv402/morse.play","jydv402/dotdash"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jydv402/dotdash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jydv402%2Fdotdash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jydv402%2Fdotdash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jydv402%2Fdotdash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jydv402%2Fdotdash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jydv402","download_url":"https://codeload.github.com/jydv402/dotdash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jydv402%2Fdotdash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34080026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["audio-processing","dart","flutter","morse","morse-code","morse-code-converter","morse-code-translator","morse-learning","open-source","tool","tools","translate","translation","translator","web-app","web-application"],"created_at":"2026-06-08T21:02:07.093Z","updated_at":"2026-06-08T21:02:07.896Z","avatar_url":"https://github.com/jydv402.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DotDash\n\nA responsive web application built with Flutter and Riverpod for real-time Morse code conversion, interactive learning, and precise audio playback.\n\n---\n\n## 🚀 Key Features\n\n*   **Dual-Way Real-Time Translation**: Seamlessly convert Text to Morse code and Morse code to Text as you type. Includes input filtering to enforce correct character formats.\n*   **Progressive Highlight Tracking**: Visual character-by-character highlight tracking under the active symbol/character as the audio plays.\n*   **Interactive Handbook (Morse Book)**: A responsive grid layout of all Morse code letters, numbers, and symbols. Users can click any tile to instantly play and hear its Morse sound.\n\n---\n\n## 🛠️ Architecture \u0026 Tech Stack\n\nThis project is built following clean architecture principles, separating services, state management, data models, and UI widgets:\n\n### Technical Stack\n*   **Framework**: Flutter Web\n*   **State Management**: Riverpod 3.0 (using modern `Notifier` and `NotifierProvider` classes)\n*   **Audio Core**: `audioplayers` for local assets sound synthesis.\n*   **Visual Enhancements**: `flutter_animate` for smooth transitions and `google_fonts` for typography.\n\n### Codebase Organization\n```\nlib/\n├── models/             # Immutable data structures (e.g. MorseConverterState, AppSection)\n├── providers/          # Riverpod state controllers and dependency injections\n├── screens/            # Screens/Pages (PlatformDecider, MorseConverterView, BookPage, CreditsPage)\n├── services/           # Business logic (MorseService) and hardware controls (MorseAudioService)\n├── utils/              # Internal utilities (Logger)\n└── widgets/            # Reusable components (sidebar, bottombar, pills, custom buttons)\n```\n\n---\n\n## ⏱️ Morse Audio Pacing Specifications\n\nAudio timing conforms strictly to the International Morse Code standards:\n\n| Element | Units | Duration (ms) | Description |\n| :--- | :--- | :--- | :--- |\n| **Base Unit (Dot)** | 1 | 110 ms | Standard dot duration |\n| **Dash** | 3 | 330 ms | Standard dash duration |\n| **Intra-Element Pause** | 1 | 110 ms | Gap between dots and dashes within a character |\n| **Inter-Letter Pause** | 3 | 330 ms | Gap between individual letters |\n| **Inter-Word Pause** | 7 | 770 ms | Gap between complete words |\n\n---\n\n## ⚙️ Development \u0026 Setup\n\n### Prerequisites\n*   Flutter SDK (Targeting SDK environment `^3.9.2`)\n*   Google Chrome (or any modern browser supporting HTML5 Audio)\n\n### Getting Started\n\n1.  **Clone the Repository**:\n    ```bash\n    git clone https://github.com/jydv402/dotdash.git\n    cd dotdash\n    ```\n\n2.  **Fetch Dependencies**:\n    ```bash\n    flutter pub get\n    ```\n\n3.  **Run the Application locally**:\n    ```bash\n    flutter run -d chrome\n    ```\n\n4.  **Build Production Web Bundle (WASM)**:\n    Build the web application using the WebAssembly compiler for optimized execution:\n    ```bash\n    flutter build web --release --wasm\n    ```\n\n### ☁️ Cloudflare Pages Deployment\nTo deploy this project to Cloudflare Pages:\n1. Connect your git repository in the Cloudflare Dashboard.\n2. Configure the following build settings:\n   * **Framework preset**: `None`\n   * **Build command**: `flutter/bin/flutter build web --release --wasm` (or configure your CI to download/use Flutter `^3.9.2`)\n   * **Build output directory**: `build/web`\n\n---\n\n## 🔄 Core Flows\n\n### 1. Text-to-Morse Conversion Flow\nThe UI watches the `morseConverterProvider`. Changes in input text trigger the `MorseConverterNotifier` to fetch translation from `MorseService` and push updates to the UI reactively.\n\n```mermaid\nflowchart LR\n    A[MorseConverterView: TextField.onChanged] --\u003e B[morseConverterProvider.notifier.updateInput]\n    B --\u003e C[MorseService.convert]\n    C --\u003e D[State: MorseConverterState.copyWith]\n    D --\u003e E[UI Rebuilds \u0026 Renders Output]\n```\n\n### 2. Audio Playback Flow\nThe notifier starts the `MorseAudioService`, tracking character indices sequentially and updating the UI state with progress callbacks to highlight the active character.\n\n```mermaid\nflowchart TD\n    A[MorseFloatingButtons: Play.onPressed] --\u003e B[morseConverterProvider.notifier.playMorse]\n    B --\u003e C{Check State: isPlaying?}\n    C -- Yes (Stop) --\u003e D[MorseAudioService.stopAudio]\n    C -- No (Play) --\u003e E[MorseAudioService.playMorse]\n    E --\u003e F[Progress Callback: onProgress]\n    F --\u003e G[State: Highlight currentRawIndex / currentMorseIndex]\n    G --\u003e H[UI Highlights active character]\n```\n\n---\n\n## 📄 License\nThis project is licensed under the **MIT License**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjydv402%2Fdotdash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjydv402%2Fdotdash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjydv402%2Fdotdash/lists"}