{"id":50082599,"url":"https://github.com/pskillen/meshflow-ui","last_synced_at":"2026-05-26T19:01:08.133Z","repository":{"id":285746963,"uuid":"956798556","full_name":"pskillen/meshflow-ui","owner":"pskillen","description":"React UI for the Meshtastic Bot via the Django DRF API","archived":false,"fork":false,"pushed_at":"2026-05-21T15:50:23.000Z","size":3064,"stargazers_count":0,"open_issues_count":30,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-22T19:41:50.454Z","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/pskillen.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":"2025-03-28T22:05:18.000Z","updated_at":"2026-05-21T15:48:42.000Z","dependencies_parsed_at":"2025-04-09T19:58:50.266Z","dependency_job_id":"3f057b6b-5d55-40e9-91e5-8794f02e749c","html_url":"https://github.com/pskillen/meshflow-ui","commit_stats":null,"previous_names":["pskillen/meshtastic-bot-ui","pskillen/meshflow-ui"],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/pskillen/meshflow-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskillen%2Fmeshflow-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskillen%2Fmeshflow-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskillen%2Fmeshflow-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskillen%2Fmeshflow-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pskillen","download_url":"https://codeload.github.com/pskillen/meshflow-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pskillen%2Fmeshflow-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33534563,"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":"ssl_error","status_checked_at":"2026-05-26T15:22:15.568Z","response_time":63,"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":[],"created_at":"2026-05-22T16:04:36.745Z","updated_at":"2026-05-26T19:01:08.118Z","avatar_url":"https://github.com/pskillen.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meshflow UI\n\nA React-based user interface for the Meshflow system.\n\n## Development\n\n### Prerequisites\n\n- Node.js 20.x or later\n- npm 9.x or later\n- Docker (optional, for containerized development)\n\n### Local Development\n\n1. Install dependencies:\n\n```bash\nnpm install\n```\n\n2. Start the development server:\n\n```bash\nnpm run dev\n```\n\nThe application will be available at `http://localhost:5173` by default.\n\n### Available Scripts\n\n- `npm run dev` - Start development server with hot reload\n- `npm run build` - Build for production\n- `npm run preview` - Preview production build locally\n- `npm run lint` - Run ESLint\n- `npm run format` - Format code with Prettier\n- `npm run format:staged` - Format only staged files with Prettier\n- `npm run type-check` - Run TypeScript type checking\n- `npm run prepare` - Set up Git hooks (runs automatically after `npm install`)\n\n### Git Hooks\n\nThe project uses Husky to manage Git hooks:\n\n- **Pre-commit hook**: Automatically runs before each commit\n  - TypeScript build check (`tsc -b`)\n  - ESLint check (`npm run lint`)\n  - Prettier format check (only on staged files)\n  - Tests (`npm test`)\n  - Ensures that only code that passes all checks can be committed\n  - To skip the pre-commit hook (not recommended), use `git commit --no-verify`\n\n- **Commit-msg hook**: Validates commit message format\n  - Ensures commit messages follow the [Conventional Commits](https://www.conventionalcommits.org/) format\n  - Example: `feat: add new feature` or `fix: resolve bug in component`\n\nThe Git hooks are automatically set up when you run `npm install` thanks to the `prepare` script in package.json. If you need to manually set up the hooks (for example, after cloning the repository), you can run:\n\n```bash\nnpm run prepare\n```\n\nThis will install and configure Husky to manage the Git hooks for this project.\n\n## Build Process\n\n### Docker Build\n\nThe application is containerized using a multi-stage Docker build process:\n\n1. Build stage:\n   - Uses Node.js 20 Alpine as base\n   - Installs dependencies\n   - Builds the application\n   - Injects version from build argument\n\n2. Production stage:\n   - Uses Nginx Alpine as base\n   - Serves static files\n   - Runs as non-root user for security\n\n### Versioning\n\nThe application version is injected during the build process:\n\n- Development: Uses 'development' as default version\n- Production: Version is set from GitHub release tag or manual build argument\n\n### Multi-Architecture Support\n\nThe Docker image is built for multiple architectures:\n\n- linux/amd64\n- linux/arm64\n\n## Deployment\n\n### GitHub Container Registry\n\nImages are automatically built and pushed to GitHub Container Registry (ghcr.io) on:\n\n- Release publication\n- Manual workflow trigger\n\n### Available Tags\n\n- `latest` - Latest stable release\n- `latest-rc` - Latest release candidate\n- `{version}` - Specific version (e.g., v1.0.0)\n- `{version}-{platform}` - Platform-specific builds\n\n## Project Structure\n\n```\nMeshflowUI/\n├── src/                # Source code\n│   ├── components/     # React components\n│   ├── types/         # TypeScript type definitions\n│   └── App.tsx        # Main application component\n├── public/            # Static assets\n├── deploy/            # Deployment configurations\n│   └── docker/        # Docker-related files\n└── .github/           # GitHub Actions workflows\n```\n\n## Configuration\n\nThe application uses a configuration system that:\n\n- Loads default configuration from `config.ts`\n- Can be overridden by a remote `config.json`\n- Supports environment-specific settings\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Submit a pull request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpskillen%2Fmeshflow-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpskillen%2Fmeshflow-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpskillen%2Fmeshflow-ui/lists"}