{"id":50597482,"url":"https://github.com/franzxml/sisehat","last_synced_at":"2026-06-05T15:30:40.691Z","repository":{"id":362056022,"uuid":"1256979231","full_name":"franzxml/sisehat","owner":"franzxml","description":"Sisehat adalah aplikasi fullstack yang mengimplementasikan Algoritma Genetika untuk menemukan kombinasi menu makan pagi, siang, dan malam yang optimal berdasarkan standar AKG Kemenkes RI 2019 dengan anggaran maksimal Rp60.000/hari.","archived":false,"fork":false,"pushed_at":"2026-06-02T11:19:43.000Z","size":50,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T12:25:03.421Z","etag":null,"topics":["algoritma-genetika","mbg","python"],"latest_commit_sha":null,"homepage":"https://sisehat-nine.vercel.app","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/franzxml.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":"2026-06-02T08:53:11.000Z","updated_at":"2026-06-02T11:19:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/franzxml/sisehat","commit_stats":null,"previous_names":["franzxml/sisehat"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/franzxml/sisehat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzxml%2Fsisehat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzxml%2Fsisehat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzxml%2Fsisehat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzxml%2Fsisehat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/franzxml","download_url":"https://codeload.github.com/franzxml/sisehat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzxml%2Fsisehat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33949038,"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-05T02:00:06.157Z","response_time":120,"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":["algoritma-genetika","mbg","python"],"created_at":"2026-06-05T15:30:39.819Z","updated_at":"2026-06-05T15:30:40.685Z","avatar_url":"https://github.com/franzxml.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Fitur\n\n* Optimasi kombinasi menu sarapan, makan siang, dan malam menggunakan Algoritma Genetika\n* Evaluasi nutrisi berdasarkan standar AKG Kemenkes RI 2019\n* Fungsi fitness berbasis penalti untuk kalori, protein, lemak, karbohidrat, dan anggaran\n* Seleksi tournament dengan elitisme satu individu terbaik\n* Single-point crossover dan random reset mutation\n* Terminasi dini jika fitness target tercapai\n* Pengukuran waktu komputasi GA\n* Konfigurasi parameter GA secara manual untuk keperluan eksperimen (ukuran populasi, probabilitas crossover, probabilitas mutasi, jumlah generasi, fitness target)\n* Grafik konvergensi fitness terbaik, rata-rata, dan terburuk per generasi\n* Unduh dataset makanan dalam format CSV\n* Antarmuka web responsif berbasis React\n\n## Teknologi\n\n* Python 3.8+\n* FastAPI\n* Bun\n* React 19\n* Vite\n* TypeScript\n* Tailwind CSS 4\n* Recharts\n\n## Struktur Folder\n\n```text\nsisehat/\n|-- api/                      # Backend FastAPI + Algoritma Genetika\n|   |-- index.py              # Entry point Vercel + FastAPI app\n|   |-- data.py               # Dataset 30 makanan dan konstanta rentang ID\n|   |-- fitness.py            # Fungsi fitness dengan pendekatan penalti\n|   |-- ga.py                 # Logika utama GA: inisialisasi, seleksi, crossover, mutasi\n|   |-- utils.py              # Fungsi bantu: hitung nutrisi, evaluasi constraints, grafik\n|   |-- cli.py                # Entry point CLI untuk menjalankan GA di terminal\n|   `-- requirements.txt\n|-- apps/\n|   `-- web/                  # Frontend React\n|       |-- src/\n|       |   |-- components/   # MenuCard, ConstraintBadge, DatasetTable, KonvergensiChart, ParameterForm\n|       |   |-- services/     # Fungsi fetch ke API\n|       |   |-- types/        # TypeScript interface\n|       |   `-- App.tsx\n|       |-- index.html\n|       `-- package.json\n|-- vercel.json               # Konfigurasi deployment Vercel\n|-- package.json              # Bun workspaces root\n`-- .gitignore\n```\n\n## Cara Menjalankan Lokal\n\n1. Pastikan komputer sudah memiliki **Python 3.8+**, **Bun**, dan **Git**.\n\n2. Clone repositori.\n\n   ```bash\n   git clone git@github.com:franzxml/sisehat.git\n   cd sisehat\n   ```\n\n   Jika menggunakan HTTPS:\n\n   ```bash\n   git clone https://github.com/franzxml/sisehat.git\n   cd sisehat\n   ```\n\n3. Setup virtual environment backend.\n\n   ```bash\n   python3 -m venv api/.venv\n   source api/.venv/bin/activate\n   pip install -r api/requirements.txt\n   ```\n\n4. Install dependensi frontend.\n\n   ```bash\n   bun install\n   ```\n\n5. Jalankan seluruh aplikasi dalam satu perintah.\n\n   ```bash\n   bun dev\n   ```\n\n6. Buka browser.\n\n   ```\n   http://localhost:5173\n   ```\n\n   API berjalan di:\n\n   ```\n   http://localhost:8000\n   ```\n\n## Script\n\n* `bun dev` — jalankan API dan web secara paralel dalam satu terminal\n* `bun dev:api` — jalankan hanya backend FastAPI\n* `bun dev:web` — jalankan hanya frontend Vite\n* `bun build:web` — build frontend untuk produksi\n\n## API Endpoint\n\n| Method | Endpoint | Deskripsi |\n|--------|----------|-----------|\n| POST | `/api/optimize` | Jalankan GA, kembalikan hasil optimasi lengkap |\n| GET | `/api/dataset` | Ambil daftar 30 makanan dalam format JSON |\n| GET | `/api/dataset/csv` | Unduh dataset dalam format CSV |\n| GET | `/api/health` | Cek status API |\n\n## Parameter GA\n\n| Parameter | Nilai |\n|-----------|-------|\n| Ukuran Populasi | 50 |\n| Jumlah Generasi Maksimum | 100 |\n| Probabilitas Crossover | 0.8 |\n| Probabilitas Mutasi | 0.05 |\n| Metode Seleksi | Tournament (size=3) |\n| Metode Crossover | Single-Point |\n| Metode Mutasi | Random Reset |\n| Fitness Target | 95 |\n| Elitisme | 1 individu terbaik |\n\n## Domain\n\n* **Production:** https://sisehat-nine.vercel.app\n\n## Constraints\n\n| Parameter | Batas Bawah | Batas Atas |\n|-----------|-------------|------------|\n| Kalori | 1.800 kkal | 2.400 kkal |\n| Protein | 55 g | — |\n| Lemak | — | 70 g |\n| Karbohidrat | 250 g | 350 g |\n| Anggaran | — | Rp60.000 |\n\n---\n\nDikembangkan oleh:\n\n* @Adtriver\n* @ghinaaa09\n* @kaniaa-kr\n* @tesafrnta\n* @franzxml","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffranzxml%2Fsisehat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffranzxml%2Fsisehat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffranzxml%2Fsisehat/lists"}