{"id":50706094,"url":"https://github.com/lashdid/kutor","last_synced_at":"2026-06-09T12:01:14.685Z","repository":{"id":345697952,"uuid":"1186109570","full_name":"lashdid/kutor","owner":"lashdid","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-19T07:23:47.000Z","size":572,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-19T09:27:51.397Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/lashdid.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-19T09:24:05.000Z","updated_at":"2026-04-19T07:23:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lashdid/kutor","commit_stats":null,"previous_names":["lashdid/kutor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lashdid/kutor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lashdid%2Fkutor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lashdid%2Fkutor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lashdid%2Fkutor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lashdid%2Fkutor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lashdid","download_url":"https://codeload.github.com/lashdid/kutor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lashdid%2Fkutor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34105565,"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-09T02:00:06.510Z","response_time":63,"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":[],"created_at":"2026-06-09T12:01:14.152Z","updated_at":"2026-06-09T12:01:14.678Z","avatar_url":"https://github.com/lashdid.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kutor\n\n## Overview\n\n**Kutor** is a lightweight **PM2 alternative** built with:\n\n* **Tauri (Rust)** → Backend (process management)\n* **React + TypeScript** → Frontend (UI)\n\nThe goal is to build a **minimal, structurally clean process manager** that can grow over time.\n\nUI should stay **very simple** (HTML-first, minimal CSS).\n\n---\n\n## Naming Conventions\n\n### Frontend (React)\n\nUse **kebab-case** for:\n\n* Component files\n* Folder names\n* Utility files\n\nExamples:\n\n```bash\nprocess-table.tsx\nprocess-row.tsx\ncreate-process-form.tsx\ntauri-service.ts\n```\n\nComponent names inside code can still use PascalCase, but **file names must be kebab-case**.\n\n---\n\n## Core Features\n\n### 1. Process Management\n\n* Create a process (e.g. `pnpm dev`)\n* Run process in the background\n* Stop process\n* Restart process\n\n---\n\n### 2. UI Features\n\n#### Process Table\n\nDisplay:\n\n* Process Name\n* Status (running / stopped)\n* Directory (optional)\n\n#### Actions\n\nEach process should support:\n\n* Start\n* Stop\n* Restart\n\n---\n\n### 3. Create Process Flow\n\n* Clicking \"Create Process\" opens a **new Tauri window**\n* Form inputs:\n\n  * Name\n  * Command\n  * Working directory\n* On submit:\n\n  * Save process\n  * Display in main table\n\n---\n\n## Architecture\n\n### High-Level Structure\n\n```bash\n/src-tauri          # Backend (Rust)\n  /src\n    process_manager.rs\n    commands.rs\n\n/src                # Frontend (React + TS)\n  /components\n    process-table.tsx\n    process-row.tsx\n  /pages\n    home.tsx\n    create-process.tsx\n  /services\n    tauri-service.ts\n```\n\n---\n\n## Backend (Rust / Tauri)\n\n### Responsibilities\n\n* Spawn processes\n* Stop processes\n* Restart processes\n* Track process state\n\n### Suggested Structure\n\n```rust\n// process_manager.rs\nstruct Process {\n    id: String,\n    name: String,\n    command: String,\n    directory: String,\n    status: ProcessStatus,\n}\n\nfn start_process(...)\nfn stop_process(...)\nfn restart_process(...)\n```\n\n```rust\n// commands.rs\n#[tauri::command]\nfn start_process_command(...)\n\n#[tauri::command]\nfn stop_process_command(...)\n```\n\nUse:\n\n* `std::process::Command`\n\n---\n\n## Frontend (React + TS)\n\n### Responsibilities\n\n* Display process list\n* Trigger backend commands\n* Manage simple UI state\n\n### Suggested Structure\n\n```bash\n/components\n  process-table.tsx\n  process-row.tsx\n\n/pages\n  home.tsx\n  create-process.tsx\n\n/services\n  tauri-service.ts\n```\n\n---\n\n## TTD (Test-Driven Development)\n\n### Backend\n\n* Test:\n\n  * process creation\n  * start/stop/restart behavior\n* Ensure predictable state transitions\n\n### Frontend\n\n* Keep logic separate from UI\n* Use small testable functions\n\n---\n\n## Minimal UI Rules\n\n* Use basic HTML:\n\n  * `\u003ctable\u003e`\n  * `\u003cbutton\u003e`\n  * `\u003cinput\u003e`\n* Avoid CSS frameworks\n* Focus on functionality first\n\n---\n\n## Application Flow\n\n1. Open app\n2. See process table\n3. Click \"Create Process\"\n4. New window opens\n5. Submit form\n6. Process appears in table\n7. User can:\n\n   * Start\n   * Stop\n   * Restart\n\n---\n\n## Future Improvements\n\n* Logs viewer\n* Auto-restart on crash\n* Environment variables\n* Better UI\n\n---\n\n## Notes for AI Agent\n\n* Follow **kebab-case naming strictly**\n* Keep frontend and backend clearly separated\n* Avoid unnecessary abstractions\n* Prioritize working features over polish\n* Keep code modular and clean\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flashdid%2Fkutor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flashdid%2Fkutor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flashdid%2Fkutor/lists"}