{"id":51118847,"url":"https://github.com/spyalekos/subspy","last_synced_at":"2026-06-25T00:30:22.367Z","repository":{"id":364660347,"uuid":"1131898812","full_name":"spyalekos/subspy","owner":"spyalekos","description":"SubsPy - Διαχείριση Εσόδων \u0026 Εξόδων | Income \u0026 Expense Manager (Flet/Python, Cross-platform)","archived":false,"fork":false,"pushed_at":"2026-06-13T23:11:59.000Z","size":180,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T00:22:27.196Z","etag":null,"topics":["android","cross-platform","finance","flet","python","raspberry-pi"],"latest_commit_sha":null,"homepage":null,"language":"Python","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/spyalekos.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-01-10T22:58:17.000Z","updated_at":"2026-06-13T23:11:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/spyalekos/subspy","commit_stats":null,"previous_names":["spyalekos/subspy"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/spyalekos/subspy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyalekos%2Fsubspy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyalekos%2Fsubspy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyalekos%2Fsubspy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyalekos%2Fsubspy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spyalekos","download_url":"https://codeload.github.com/spyalekos/subspy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spyalekos%2Fsubspy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34755061,"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-24T02:00:07.484Z","response_time":106,"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":["android","cross-platform","finance","flet","python","raspberry-pi"],"created_at":"2026-06-25T00:30:21.006Z","updated_at":"2026-06-25T00:30:22.331Z","avatar_url":"https://github.com/spyalekos.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SubsPy - Διαχείριση Εσόδων \u0026 Εξόδων\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cimg src=\"src/assets/icon_new.png\" alt=\"SubsPy Logo\" width=\"120\"/\u003e\r\n\u003c/p\u003e\r\n\r\nΕφαρμογή διαχείρισης εσόδων και εξόδων, κατασκευασμένη με **Python** και **Flet**.\r\nΤρέχει σε Windows, macOS, Linux, Raspberry Pi και Android.\r\n\r\n## Χαρακτηριστικά\r\n\r\n- 📋 **Καταχωρήσεις** — Προσθήκη, επεξεργασία και διαγραφή εσόδων/εξόδων\r\n- 📅 **Επαναλαμβανόμενες κινήσεις** — Συνδρομές, μισθοί και άλλες περιοδικές κινήσεις (π.χ. κάθε 30 ημέρες)\r\n- 📊 **Αναφορές** — Προοδευτικές χρεώσεις για οποιοδήποτε χρονικό διάστημα\r\n- 📄 **Εξαγωγή PDF** — Αναφορά σε PDF με έγχρωμη διάκριση (πράσινο = έσοδα, κόκκινο = έξοδα)\r\n- 🏷️ **Κατηγορίες** — Οργάνωση κινήσεων σε προσαρμοσμένες κατηγορίες\r\n- 💾 **Backup/Restore** — Εξαγωγή και εισαγωγή δεδομένων σε JSON\n- ❔ **Οδηγίες στην εφαρμογή** — Εικονίδιο βοήθειας στο επάνω μέρος με οδηγίες στα Ελληνικά και Αγγλικά\n- 🔎 **Αναλογικό zoom** — `Ctrl` + ρόδα ποντικιού για δυναμική μεγέθυνση/σμίκρυνση με ασφαλές όριο πλάτους\n- 🌍 **Ελληνικά** — Πλήρες ελληνικό UI (μενού, DatePickers, μηνύματα)\n- 🖥️ **Cross-platform** — Windows, macOS, Linux, Raspberry Pi, Android\n\r\n## Γρήγορη εκκίνηση\r\n\r\n### Απαιτήσεις\r\n- Python 3.10+\r\n\r\n### Εγκατάσταση\r\n\r\n```bash\r\n# Κλωνοποίηση\r\ngit clone https://github.com/spyalekos/subspy.git\r\ncd subspy\r\n\r\n# Συγχρονισμός εξαρτήσεων\nuv sync\n```\n\n### Εκτέλεση\n\n```bash\n# Με Flet CLI (hot reload)\nuv run flet run src\n\n# Ή απευθείας\nuv run python src/main.py\n```\n\r\n## Χρήση\r\n\r\n### 📋 Καταχωρήσεις\r\n- Πατήστε **«Προσθήκη»** για νέα εγγραφή\r\n- Επιλέξτε **Έσοδο** ή **Έξοδο** από τον επιλογέα\r\n- Ορίστε ημερομηνία, ποσό, κατηγορία και ημέρες επανάληψης\r\n- Πατήστε σε μια γραμμή για επεξεργασία ή διαγραφή\r\n- Επανάληψη `0` = μοναδική κίνηση, `30` = μηνιαία, `365` = ετήσια\r\n\r\n### 📊 Αναφορές\r\n1. Επιλέξτε ημερομηνίες «Από» και «Έως»\r\n2. Πατήστε **«Δημιουργία»** για υπολογισμό προοδευτικών υπόλοιπων\r\n3. Πατήστε **«Εκτύπωση PDF»** για εξαγωγή αναφοράς\r\n\r\n### 🛠️ Εργαλεία\n- **Εξαγωγή**: Αποθηκεύει όλα τα δεδομένα σε αρχείο JSON\n- **Εισαγωγή**: Επαναφορά δεδομένων από αρχείο JSON\n- **Κατηγορίες**: Προσθήκη και διαγραφή κατηγοριών\n\n### ❔ Οδηγίες και zoom\n- Πατήστε το εικονίδιο **?** στο επάνω μέρος για σύντομες οδηγίες στα Ελληνικά και Αγγλικά\n- Το **+ Προσθήκη** βρίσκεται στο επάνω control group, δίπλα στην ένδειξη zoom και στη βοήθεια\n- Κρατήστε πατημένο το `Ctrl` και γυρίστε τη ρόδα του ποντικιού για αναλογικό zoom. Το zoom σταματά πριν βγει εκτός οθόνης η περιοχή της στήλης «Κατηγορία».\n- Οι πίνακες Καταχωρήσεων και Αναφορών έχουν εμφανείς μπάρες κύλισης για οριζόντια και κάθετη πλοήγηση.\n\n## English Quick Notes\n\n- Use the top **?** icon for built-in Greek/English instructions.\n- Use the green **Add** button in the top control group next to zoom and help.\n- Hold `Ctrl` and use the mouse wheel to scale the UI up or down. Zoom stops before the Category column area is pushed off screen.\n- Entries and Reports tables show scrollbars for horizontal and vertical navigation.\n\r\n## Δομή έργου\r\n\r\n```\r\nsubspy/\r\n├── src/\r\n│   ├── main.py            # Κύρια εφαρμογή Flet\n│   ├── version.py         # Hardcoded έκδοση εφαρμογής\n│   ├── database.py        # SQLite βάση δεδομένων\n│   ├── pdf_export.py      # Δημιουργία PDF (ReportLab)\r\n│   ├── platform_utils.py  # Ανίχνευση πλατφόρμας \u0026 cross-platform paths\r\n│   └── assets/            # Εικονίδια \u0026 splash screens\r\n├── pyproject.toml         # Ρυθμίσεις \u0026 εξαρτήσεις\n├── main.spec              # Τρέχον PyInstaller spec\n├── build.sh               # PyInstaller build (Raspberry Pi)\n├── build_all.sh           # Build reference script (όλες οι πλατφόρμες)\r\n└── README.md\r\n```\r\n\r\n## Build\r\n\r\n\u003e **Σημείωση**: Για `flet build` χρειάζεται [Flutter SDK](https://docs.flutter.dev/get-started/install).\r\n\u003e Για Raspberry Pi χρησιμοποιούμε PyInstaller (δεν χρειάζεται Flutter).\r\n\r\n| Πλατφόρμα | Εντολή | Σημειώσεις |\r\n|-----------|--------|------------|\r\n| **Raspberry Pi** | `./build.sh` | PyInstaller, χωρίς Flutter |\r\n| **Linux** | `uv run flet build linux` | Flet CLI + Flutter |\n| **Windows** | `uv run flet build windows` | Μόνο σε Windows |\n| **macOS** | `uv run flet build macos` | Μόνο σε Mac + Xcode |\n| **Android APK** | `uv run flet build apk` | Android SDK |\n| **Android AAB** | `uv run flet build aab` | Για Play Store |\n| **Web** | `uv run flet build web` | Static web app |\n\nΤο τρέχον PyInstaller spec είναι το `main.spec` και η εντολή build για `.exe` είναι:\n\n```bash\nuv run pyinstaller main.spec\n```\n\r\n```bash\r\n# Ή μέσω build_all.sh:\r\n./build_all.sh rpi    # Raspberry Pi\r\n./build_all.sh apk    # Android\r\n./build_all.sh run    # Τρέξε τοπικά\r\n```\r\n\r\n## Αποθήκευση δεδομένων\r\n\r\n| Πλατφόρμα | Βάση δεδομένων |\r\n|-----------|---------------|\r\n| Linux / Raspberry Pi | `~/subscriptions.db` |\r\n| Windows | Δίπλα στο αρχείο `subspy.exe` |\r\n| macOS | `~/Library/Application Support/SubsPy/subscriptions.db` |\r\n| Android | Εσωτερικός χώρος εφαρμογής |\r\n\r\n## Τεχνολογίες\r\n\r\n- [Flet](https://flet.dev/) 0.80+ — Cross-platform UI framework\r\n- [SQLite](https://sqlite.org/) — Τοπική βάση δεδομένων\r\n- [ReportLab](https://www.reportlab.com/) — Δημιουργία PDF\r\n\r\n## Ιστορικό εκδόσεων\n\n**v4.08** — Ιούνιος 2026\n- Αντικαταστάθηκε το transform-based zoom με πραγματικές διαστάσεις `DataTable`, ώστε οι μπάρες κύλισης να υπολογίζουν σωστά το πλήρες ύψος του grid.\n- Οι πίνακες Καταχωρήσεων και Αναφορών κάνουν zoom σε ύψη γραμμών, headers, αποστάσεις στηλών, κείμενα και εικονίδια χωρίς να κόβονται οι κάτω γραμμές.\n\n**v4.07** — Ιούνιος 2026\n- Διορθώθηκε το κόψιμο του grid δεξιά κατά το zoom, αφαιρώντας τη λανθασμένη προσαρμογή λογικού πλάτους\n- Το zoom layout προσαρμόζει πλέον μόνο το ύψος για κάθετη κύλιση, χωρίς να στενεύει τον πίνακα\n\n**v4.06** — Ιούνιος 2026\n- Διορθώθηκε το κάθετο scroll σε zoomed προβολή ώστε να μην κόβονται οι τελευταίες γραμμές κάτω από την κάτω μπάρα\n- Το zoomed περιεχόμενο τοποθετείται πλέον σε clipped layout slot με ύψος προσαρμοσμένο στο τρέχον zoom\n\n**v4.05** — Ιούνιος 2026\n- Προστέθηκαν εμφανείς μπάρες κύλισης στους πίνακες Καταχωρήσεων και Αναφορών\n- Οι πίνακες τυλίγονται πλέον σε οριζόντιο και κάθετο scroll container\n\n**v4.04** — Ιούνιος 2026\n- Μεταφέρθηκε το **+ Προσθήκη** στο επάνω control group δίπλα στο zoom και τη βοήθεια, με πράσινο χρώμα\n- Αυξήθηκε το δυναμικό όριο zoom ώστε η στήλη «Κατηγορία» να μπορεί να φτάνει πολύ πιο κοντά στο δεξί άκρο\n\n**v4.03** — Ιούνιος 2026\n- Μετακινήθηκε η ένδειξη zoom και το εικονίδιο οδηγιών πιο κοντά στο πλάτος του πίνακα, αντί για το δεξί άκρο της οθόνης\n- Προστέθηκε ασφαλές όριο zoom βάσει πλάτους παραθύρου ώστε η στήλη «Κατηγορία» να παραμένει ορατή\n\n**v4.02** — Ιούνιος 2026\n- Προστέθηκε επάνω εικονίδιο οδηγιών με περιεχόμενο στα Ελληνικά και Αγγλικά\n- Προστέθηκε αναλογικό zoom όλου του UI με `Ctrl` + ρόδα ποντικιού\n- Ευθυγραμμίστηκε η έκδοση σε `pyproject.toml` και `src/version.py`\n- Προστέθηκε τρέχον `main.spec` για PyInstaller build\n\n**v4.01** — Μάρτιος 2026\n- Διορθώσεις στην απεικόνιση του νέου εικονιδίου μέσα στην ίδια την εφαρμογή και στο README\n\r\n**v4.00** — Μάρτιος 2026\r\n- Προοδευτικά υπόλοιπα (Running balances) στις αναφορές και στα PDF\r\n- Επαναλαμβανόμενες κινήσεις \"Κάθε μήνα\" εκτός από υπολογισμό ημερών\r\n- Φορητή βάση δεδομένων `subscriptions.db` (στα Windows, πλέον δίπλα στο `.exe`)\r\n- Νέο εικονίδιο εφαρμογής\r\n- Layout \u0026 Bug fixes\r\n\r\n**v2.0** — Φεβρουάριος 2026\r\n- Διαχείριση εσόδων και εξόδων (αντί μόνο συνδρομών)\r\n- Cross-platform υποστήριξη (Windows, macOS, Linux, Android, Raspberry Pi)\r\n- Ελληνικά DatePickers\r\n- Εξαγωγή PDF με έγχρωμη διάκριση εσόδων/εξόδων\r\n- Διαχείριση κατηγοριών\r\n- Εισαγωγή/Εξαγωγή δεδομένων σε JSON\r\n\r\n**v1.0** — Δεκέμβριος 2025\r\n- Αρχική έκδοση — διαχείριση συνδρομών\r\n- Voice assistant integration\r\n- Raspberry Pi only\r\n\r\n## Άδεια\r\n\r\nMIT License\r\n\r\n## Συγγραφέας\r\n\r\n**SpyAlekos** — [spyalekos@gmail.com](mailto:spyalekos@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspyalekos%2Fsubspy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspyalekos%2Fsubspy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspyalekos%2Fsubspy/lists"}