{"id":44469784,"url":"https://github.com/mcp-tool-shop-org/linux-dev-typer","last_synced_at":"2026-02-27T01:21:24.962Z","repository":{"id":337349699,"uuid":"1152489769","full_name":"mcp-tool-shop-org/linux-dev-typer","owner":"mcp-tool-shop-org","description":"Code-typing practice for developers — Avalonia UI, adaptive difficulty, trend tracking, fatigue detection","archived":false,"fork":false,"pushed_at":"2026-02-22T14:00:23.000Z","size":56219,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-22T19:06:41.226Z","etag":null,"topics":["adaptive-learning","avalonia","cross-platform","csharp","developer-tools","dotnet","typing-practice"],"latest_commit_sha":null,"homepage":"https://mcptoolshop.com/tools/linux-dev-typer/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mcp-tool-shop-org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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},"funding":{"github":["mcp-tool-shop"]}},"created_at":"2026-02-08T00:15:57.000Z","updated_at":"2026-02-22T14:00:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"913b3295-034d-4f27-8910-bfd6949bba5a","html_url":"https://github.com/mcp-tool-shop-org/linux-dev-typer","commit_stats":null,"previous_names":["mcp-tool-shop-org/linux-dev-typer"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/mcp-tool-shop-org/linux-dev-typer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Flinux-dev-typer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Flinux-dev-typer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Flinux-dev-typer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Flinux-dev-typer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcp-tool-shop-org","download_url":"https://codeload.github.com/mcp-tool-shop-org/linux-dev-typer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Flinux-dev-typer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29878262,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"ssl_error","status_checked_at":"2026-02-26T23:50:46.793Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["adaptive-learning","avalonia","cross-platform","csharp","developer-tools","dotnet","typing-practice"],"created_at":"2026-02-12T21:08:56.895Z","updated_at":"2026-02-27T01:21:24.954Z","avatar_url":"https://github.com/mcp-tool-shop-org.png","language":"C#","funding_links":["https://github.com/sponsors/mcp-tool-shop"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.ja.md\"\u003e日本語\u003c/a\u003e | \u003ca href=\"README.zh.md\"\u003e中文\u003c/a\u003e | \u003ca href=\"README.es.md\"\u003eEspañol\u003c/a\u003e | \u003ca href=\"README.fr.md\"\u003eFrançais\u003c/a\u003e | \u003ca href=\"README.hi.md\"\u003eहिन्दी\u003c/a\u003e | \u003ca href=\"README.it.md\"\u003eItaliano\u003c/a\u003e | \u003ca href=\"README.pt-BR.md\"\u003ePortuguês (BR)\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/linux-dev-typer/readme.png\" alt=\"Linux Dev Typer logo\" width=\"400\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/mcp-tool-shop-org/linux-dev-typer/actions/workflows/build.yml\"\u003e\u003cimg src=\"https://github.com/mcp-tool-shop-org/linux-dev-typer/actions/workflows/build.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.nuget.org/packages/LinuxDevTyper.Core\"\u003e\u003cimg src=\"https://img.shields.io/nuget/v/LinuxDevTyper.Core\" alt=\"NuGet\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://mcp-tool-shop-org.github.io/linux-dev-typer/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Landing_Page-live-blue\" alt=\"Landing Page\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**Code-typing practice for developers — Avalonia UI, adaptive difficulty, trend tracking, fatigue detection.**\n\n\u003e Also available as a native Windows app: [dev-op-typer](https://github.com/mcp-tool-shop-org/dev-op-typer) (WinUI 3, Microsoft Store)\n\n---\n\n## Why Linux Dev Typer?\n\n- **Practice real code, not prose.** Every snippet is a real-world pattern from Python, Rust, JavaScript, C#, or Java — not “the quick brown fox.”\n- **Adaptive difficulty.** An Elo-inspired rating system adjusts to your skill per language, with anti-yo-yo protection and comfort-zone detection.\n- **Weakness-aware.** Per-character mistake heatmaps and confusion pairs guide snippet selection so you practice what you actually struggle with.\n- **Fatigue-aware.** The engine detects declining performance and suggests breaks before bad habits set in.\n- **Cross-platform.** Built on Avalonia UI — runs on Linux, macOS, and Windows from a single codebase.\n- **Fully offline.** No telemetry, no accounts, no network calls. Your typing data stays on your machine.\n- **Extensible.** The core engine ships as a standalone NuGet package with zero UI dependencies.\n\n---\n\n## NuGet Packages\n\n| Package | Description |\n|---------|-------------|\n| [`LinuxDevTyper.Core`](https://www.nuget.org/packages/LinuxDevTyper.Core) | Portable typing practice engine with Elo rating, adaptive difficulty, weakness heatmaps, fatigue detection, session planning, and micro-drills. Zero UI dependencies. |\n\nThe core engine is a standalone library with no Avalonia or platform dependencies. Implement `IStorage`, `IAudioService`, and `IAssetProvider` for your platform and you have a complete typing trainer.\n\n---\n\n## Features\n\n### Core Typing Engine\n- Per-character feedback: correct (teal), errors (red + underline), untyped (muted)\n- Live stats: WPM, accuracy, error count, XP\n- Elo-inspired per-language rating system\n- Level progression with XP and difficulty ramp\n- Completion cards with snippet explanations\n- Configurable: font size, whitespace rules, line-ending normalization\n\n### Adaptive Learning\n- Per-character mistake tracking with symbol classification (10 categories)\n- Cross-session weakness profiling with adaptive snippet selection\n- Trend tracking: rolling WPM and accuracy trends per language\n- Adaptive difficulty with comfort-zone detection and anti-yo-yo protection\n- Post-session insights: personal bests, milestones, trend signals\n- Fatigue detection with break suggestions\n- Hardcore mode: fix each mistake before advancing\n\n### Agency \u0026 Reflection\n- Practice intent picker: tag sessions as Warmup, Drill, Explore, or Challenge\n- Session notes and session browser with search/filter\n- Welcome-back detection with contextual greetings and automatic difficulty aging\n- Override system suggestions: dismiss yo-yo locks, insight types, and fatigue alerts\n- Monthly history compression for sessions beyond 200\n- Orientation cues: gentle pre-session suggestions based on content\n- Plateau detection with reassurance\n- Personalization controls: freeze learning, reset preferences\n\n### Content System\n- User snippet packs: drop JSON into `~/.config/linux-dev-typer/packs/`\n- Practice profiles: named parameter sets that tune engine behavior\n- Import/export `.ldtpack` bundles for sharing content\n- Paste Code, Import File, Import Folder with auto-detected language\n- Content-addressed IDs (SHA-256 deduplication)\n- Unified canonical pipeline: all content enters as CodeItem with metrics-based difficulty (D1–D7)\n\n### Teaching \u0026 Community\n- Scaffolds: progressive learning context with optional deeper layers\n- Variants: alternative implementations shown as equal peers\n- Community notes: optional tips and perspectives in `.ldtpack` packs\n- Community difficulty: display-only signal for crowd-sourced difficulty\n- Anonymous by design — imported content is indistinguishable from local\n- All teaching and community features are optional and display-only\n\n### Structured Practice\n- 168 calibration snippets across 5 languages (D1–D7 coverage)\n- Session planner: Target (50%) / Review (30%) / Stretch (20%) mix\n- Rolling weakness detection with time-decayed window\n- Selection transparency: \"Why this snippet\" explains every pick\n- Per-character MistakeHeatmap with confusion pairs\n- Weakness trajectories: daily snapshots track improvement\n\n### Guided Practice\n- Guided Mode: opt-in toggle that allows weakness signals to influence selection\n- WeaknessBias: bounded category-level bias (+0 to +3, never changes difficulty band)\n- Micro-drills: 5-item focused practice sessions targeting top weakness\n- SignalPolicy: feature-flag architecture with master switch and per-feature sub-flags\n- Storage hygiene: heatmap capped at 200 chars, confusion pairs at 20, snapshots at 90\n- Default OFF — all prior behavior preserved unless explicitly opted in\n\n### Audio\n- 5 keyboard sound themes (8 variations each)\n- 4 ambient soundscape categories (15 tracks total)\n- Per-channel volume controls and mute\n\n### Accessibility\n- Keyboard-first UX with visible focus outlines\n- Reduced sensory mode (caps audio volumes)\n- High-contrast dark theme\n\n---\n\n## Quick Start\n\n**Requirements:** [.NET SDK 8.x](https://dotnet.microsoft.com/download/dotnet/8.0)\n\n```bash\ngit clone https://github.com/mcp-tool-shop-org/linux-dev-typer.git\ncd linux-dev-typer\ndotnet restore\ndotnet build -c Release\ndotnet run --project src/LinuxDevTyper.App/LinuxDevTyper.App.csproj\n```\n\n---\n\n## Run Tests\n\n```bash\ndotnet test\n```\n\n817 tests covering all core engine modules.\n\n---\n\n## Project Structure\n\n| Path | Purpose |\n|------|---------|\n| `src/LinuxDevTyper.Core` | Portable engine — typing, rating, trends, difficulty, profiles, community, pedagogy, calibration, planner, weakness, heatmap, guided mode |\n| `src/LinuxDevTyper.Core.Tests` | xUnit tests (817 tests) |\n| `src/LinuxDevTyper.App` | Avalonia desktop shell — UI, platform services, import/export |\n| `assets/snippets` | Built-in JSON snippet packs |\n| `assets/sounds` | WAV files (ambient + keyboard SFX) |\n| `lib/meta-content-system` | Shared content library |\n| `docs/` | Architecture, schema docs, phase plans, extension guides |\n\n---\n\n## Persistence\n\nState file: `~/.config/linux-dev-typer/state.json` (schema v12)\n\nTo reset: `rm -rf ~/.config/linux-dev-typer`\n\n---\n\n## Adding Your Own Code\n\nThere are three ways to practice your own code:\n\n### Option 1: Paste Code (easiest)\n\n1. Open the sidebar (click the gear icon)\n2. Find the **Paste Code** section\n3. Paste any code snippet into the text box\n4. Click **Add** — the language is auto-detected\n5. Your code appears in the snippet rotation immediately\n\n### Option 2: Import a File or Folder\n\n1. Open the sidebar → find **Import**\n2. Click **Import File** to add a single source file, or **Import Folder** to scan an entire project\n3. The app auto-detects language from file extensions (`.py`, `.rs`, `.js`, `.cs`, `.java`, `.sh`)\n4. Imported code is deduplicated by content hash — the same code is never added twice\n\n### Option 3: Create a Snippet Pack (JSON)\n\nFor curated sets of practice snippets:\n\n1. Create a JSON file in your packs folder:\n   ```\n   ~/.config/linux-dev-typer/packs/\n   ```\n\n2. Name it after the language (e.g. `python.json`):\n   ```json\n   {\n     \"language\": \"python\",\n     \"snippets\": [\n       {\n         \"id\": \"my_list_comp\",\n         \"title\": \"List comprehension\",\n         \"difficulty\": 3,\n         \"topics\": [\"lists\", \"comprehension\"],\n         \"code\": \"squares = [x**2 for x in range(10)]\\n\"\n       },\n       {\n         \"id\": \"my_dict_comp\",\n         \"title\": \"Dictionary comprehension\",\n         \"difficulty\": 4,\n         \"topics\": [\"dicts\", \"comprehension\"],\n         \"code\": \"counts = {word: len(word) for word in words}\\n\"\n       }\n     ]\n   }\n   ```\n\n3. Restart the app — your snippets merge with built-in ones and can be enabled/disabled from the sidebar\n\n**Tips:**\n- `id` must be unique across all packs\n- `difficulty` ranges from 1 (easy) to 7 (hard)\n- `code` should end with `\\n`\n- User packs can be toggled on/off without deleting the file\n\n### Sharing Content\n\nExport your custom snippets as a portable `.ldtpack` bundle:\n\n1. Open the sidebar → click **Export**\n2. Share the `.ldtpack` file with others\n3. They import it via the sidebar → **Import**\n\nOnly user-authored content travels — never practice history or settings.\n\n---\n\n## Privacy\n\nlinux-dev-typer is fully offline. No data is collected, transmitted, or shared.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcp-tool-shop-org%2Flinux-dev-typer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcp-tool-shop-org%2Flinux-dev-typer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcp-tool-shop-org%2Flinux-dev-typer/lists"}