{"id":49204781,"url":"https://github.com/sparths/anyhabit","last_synced_at":"2026-04-26T20:00:45.478Z","repository":{"id":352820872,"uuid":"1215801752","full_name":"Sparths/AnyHabit","owner":"Sparths","description":"A universal habit and tracking dashboard tailored for Raspberry Pi and Docker.","archived":false,"fork":false,"pushed_at":"2026-04-24T11:05:37.000Z","size":3000,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-25T19:11:05.922Z","etag":null,"topics":["docker","fastapi","habit-tracker","raspberry-pi","react","self-hosted"],"latest_commit_sha":null,"homepage":"https://sparths.github.io/anyhabit-demo/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sparths.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"bebedi","thanks_dev":null,"custom":null}},"created_at":"2026-04-20T09:13:08.000Z","updated_at":"2026-04-25T17:26:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Sparths/AnyHabit","commit_stats":null,"previous_names":["sparths/anyhabit"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/Sparths/AnyHabit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparths%2FAnyHabit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparths%2FAnyHabit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparths%2FAnyHabit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparths%2FAnyHabit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sparths","download_url":"https://codeload.github.com/Sparths/AnyHabit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparths%2FAnyHabit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32310804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T19:15:34.056Z","status":"ssl_error","status_checked_at":"2026-04-26T19:15:15.467Z","response_time":129,"last_error":"SSL_read: 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":["docker","fastapi","habit-tracker","raspberry-pi","react","self-hosted"],"created_at":"2026-04-23T17:31:54.243Z","updated_at":"2026-04-26T20:00:45.444Z","avatar_url":"https://github.com/Sparths.png","language":"JavaScript","funding_links":["https://buymeacoffee.com/bebedi"],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"frontend/public/AnyHabit.png\" width=\"45\" height=\"45\" valign=\"middle\"\u003e AnyHabit\n\n[![FastAPI](https://img.shields.io/badge/Backend-FastAPI-009688?style=flat-square\u0026logo=fastapi)](https://fastapi.tiangolo.com/)\n[![React](https://img.shields.io/badge/Frontend-React_19-61DAFB?style=flat-square\u0026logo=react)](https://react.dev/)\n[![Tailwind CSS](https://img.shields.io/badge/Styling-Tailwind_CSS-38B2AC?style=flat-square\u0026logo=tailwind-css)](https://tailwindcss.com/)\n[![SQLite](https://img.shields.io/badge/Database-SQLite-003B57?style=flat-square\u0026logo=sqlite)](https://www.sqlite.org/)\n[![Docker](https://img.shields.io/badge/Deployment-Docker-2496ED?style=flat-square\u0026logo=docker)](https://www.docker.com/)\n[![Discord](https://img.shields.io/badge/Community-Discord-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white)](https://discord.gg/ajknBq5zcH)\n[![Live Demo](https://img.shields.io/badge/Demo-Live_Preview-FF4B4B?style=flat\u0026logo=render)](https://sparths.github.io/anyhabit-demo/)\n\n**AnyHabit** is a streamlined, universal habit-tracking dashboard designed for **Raspberry Pi**, home servers, and **Docker** enthusiasts. It provides a minimalist interface to track positive growth or systematically reduce harmful routines.\n\n---\n\n## 📺 Preview \u0026 Updates\n\n\u003e [!IMPORTANT]  \n\u003e **Try it now:** [Explore the Live Demo Site](https://sparths.github.io/anyhabit-demo/)  \n\u003e **Join the Community:** [AnyHabit Discord Server](https://discord.gg/ajknBq5zcH) — Get support, showcase your work, and chat with fellow devs!\n\n![AnyHabit Demo](assets/demo.gif)\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🚀 Click to see Recent Updates (Changelog)\u003c/b\u003e\u003c/summary\u003e\n\n#### [v0.7.0] - Latest Release\n- **Added:** Refactor app structure, Fix Bugs\n- [Full Changelog](https://github.com/Sparths/AnyHabit/compare/v0.6.3...v0.7.0)\n\n#### [v0.6.3] - Date Selection\n- **Added:** Date Selection for \"Build\" Trackers Logs\n- [Full Changelog](https://github.com/Sparths/AnyHabit/compare/v0.6.2...v0.6.3)\n\n#### [v0.6.2] - Historical Progress\n- **Added:** Historical Progress/Heatmap\n- [Full Changelog](https://github.com/Sparths/AnyHabit/compare/v0.6.1...v0.6.2)\n\n#### [v0.6.1] - Mobile Support\n- **Added:** Better Mobile Layout\n- [Full Changelog](https://github.com/Sparths/AnyHabit/compare/v0.6.0...v0.6.1)\n\n#### [v0.6.0] - Relapse Feature\n- **Added:** Add Relapse Feature that resets your Tracker without having to delete the whole tracker and loosing all Journal Entries\n- **Fix:** Changed that Impact Units go up based on actual units logged.\n- [Full Changelog](https://github.com/Sparths/AnyHabit/compare/v0.5.0...v0.6.0)\n  \n#### [v0.5.0] - Custom Impact Units\n- **Added:** Support custom impact units!\n- [Full Changelog](https://github.com/Sparths/AnyHabit/compare/v0.4.0...v0.5.0)\n\u003c/details\u003e\n\n---\n\n## ✨ Key Features\n\n* **Dual Tracking Modes:** Monitor positive routines or reduce harmful ones.\n* **Categories:** Organize your dashboard with custom categories.\n* **Dark Mode:** Seamlessly switch between Light and Dark themes.\n* **Financial Impact:** Automatically calculate money saved by avoiding negative habits.\n* **Daily Journal:** Log your mood and thoughts alongside your habits.\n* **Self-Hosted \u0026 Private:** Complete control over your data with SQLite and Docker.\n\n---\n\n## 🚀 One-Command Quick Start\n\nAnyHabit is designed to be \"up and running\" in seconds. You do **not** need Node.js or Python installed locally.\n\n**Requirements:** [Docker](https://docs.docker.com/get-docker/) with the Compose plugin.\n\n```bash\n# 1. Clone the repository\ngit clone https://github.com/Sparths/AnyHabit.git\ncd AnyHabit\n\n# 2. Build and start everything\ndocker compose up -d --build\n```\n\nOpen **http://localhost** (or your device's IP) in your browser.\n\n\u003e [!TIP]\n\u003e Your data is safely stored in a Docker volume (`db_data`) and will persist even if you stop or rebuild the containers.\n\n---\n\n## ⚙️ Configuration\n\n| Variable | Description | Default |\n| :--- | :--- | :--- |\n| `APP_PORT` | The port on which the app is accessible | `80` |\n| `VITE_API_URL` | Backend URL (internal routing) | `http://localhost/api` |\n\n**To change the port:**\n1. Create an environment file: `cp .env.example .env`\n2. Edit `.env` and change `APP_PORT=8080`\n3. Restart: `docker compose up -d`\n\n---\n\n## 🛠️ Tech Stack\n\n* **Backend:** [FastAPI](https://fastapi.tiangolo.com/) (Python 3.12-slim)\n* **Frontend:** [React 19](https://react.dev/) + [Vite](https://vitejs.dev/)\n* **Styling:** [Tailwind CSS 4](https://tailwindcss.com/)\n* **Proxy:** [Nginx](https://www.nginx.com/) as a Reverse Proxy \u0026 Static File Server\n\n---\n\n## 🤝 Community \u0026 Contributing\n\nAnyHabit is an open-source, community-driven project! \n\nJoin our **[Discord Server](https://discord.gg/ajknBq5zcH)** to:\n* 🛠️ Get help with your setup or projects.\n* 🚀 Showcase what you've built.\n* 💬 Chat with other programmers and contributors.\n\n**Other ways to help:**\n* **💡 Ideas:** [Open a Feature Request](https://github.com/Sparths/AnyHabit/issues)\n* **🐛 Bugs:** [Open a Bug Report](https://github.com/Sparths/AnyHabit/issues)\n* **💻 Code:** Check our [Contributing Guidelines](CONTRIBUTING.md)\n\n## ⭐ Star History\n\n\u003ca href=\"https://www.star-history.com/?repos=Sparths%2FAnyHabit\u0026type=date\u0026legend=top-left\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=Sparths/AnyHabit\u0026type=date\u0026theme=dark\u0026legend=top-left\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=Sparths/AnyHabit\u0026type=date\u0026legend=top-left\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=Sparths/AnyHabit\u0026type=date\u0026legend=top-left\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsparths%2Fanyhabit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsparths%2Fanyhabit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsparths%2Fanyhabit/lists"}