{"id":47724209,"url":"https://github.com/vtvito/timbrature-pa","last_synced_at":"2026-04-02T20:04:31.165Z","repository":{"id":336263050,"uuid":"1148949657","full_name":"VTvito/timbrature-pa","owner":"VTvito","description":"⏰ App PWA gratuita per dipendenti PA italiani. Traccia timbrature, calcola 36h/settimana automaticamente, supporta smart working. 100% offline, dati solo sul tuo dispositivo. No account, no cloud.","archived":false,"fork":false,"pushed_at":"2026-03-25T13:28:50.000Z","size":282,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-26T13:40:51.205Z","etag":null,"topics":["36-ore","dipedenti-pubblici","dipendenti-pubblici","offline-first","orario-lavoro","pa-italiana","privacy","pubblica-amministrazione","pwa","smart-working","timbrature","timesheet"],"latest_commit_sha":null,"homepage":"https://vtvito.github.io/timbrature-pa/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VTvito.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-02-03T14:55:03.000Z","updated_at":"2026-03-25T10:38:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/VTvito/timbrature-pa","commit_stats":null,"previous_names":["vtvito/italian-pa-employee-attendance"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/VTvito/timbrature-pa","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VTvito%2Ftimbrature-pa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VTvito%2Ftimbrature-pa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VTvito%2Ftimbrature-pa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VTvito%2Ftimbrature-pa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VTvito","download_url":"https://codeload.github.com/VTvito/timbrature-pa/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VTvito%2Ftimbrature-pa/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31314850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"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":["36-ore","dipedenti-pubblici","dipendenti-pubblici","offline-first","orario-lavoro","pa-italiana","privacy","pubblica-amministrazione","pwa","smart-working","timbrature","timesheet"],"created_at":"2026-04-02T20:04:27.189Z","updated_at":"2026-04-02T20:04:31.155Z","avatar_url":"https://github.com/VTvito.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ⏰ Timbra PA\n\nPWA per tracciare le timbrature dei dipendenti pubblici italiani.\nFunziona offline, si installa come app e salva i dati solo sul dispositivo.\n\n![Screenshot App](docs/screenshot.svg)\n\n---\n\n## ✨ Funzionalità\n\n- 36 ore settimanali con saldo aggiornato in tempo reale\n- Pausa pranzo automatica: con coppia singola lun-gio 30 minuti fissi, con multi-timbrature conta la pausa reale; venerdì solo oltre 6h lorde\n- Smart working e assenze con ore precompilate\n- Timbrature multiple nello stesso giorno, con aggiunta manuale guidata dalla card del giorno\n- Suggerimento ingresso/uscita sull'ultimo giorno utile in sede, considerando smart e assenze gia pianificati\n- Export JSON e CSV\n- Funzionamento offline e installazione come PWA\n\n---\n\n## 🔐 I tuoi dati sono tuoi\n\n- Nessun account\n- Nessun backend\n- Storage locale: localStorage come primario, IndexedDB come fallback\n- Le settimane salvate restano disponibili dopo gli update; totali e saldi vengono ricalcolati dai dati inseriti\n- Export manuale quando vuoi\n\nNota iOS: Safari può eliminare i dati PWA dopo 7 giorni di inutilizzo. Conviene aprire l'app almeno una volta a settimana o esportare periodicamente un backup JSON.\n\n---\n\n## 🚀 Inizia subito\n\n👉 **[Apri Timbra PA](https://vtvito.github.io/italian-pa-employee-attendance/)**\n\nInstallazione rapida:\n- Android: apri il link in Chrome e tocca \"Installa\" o \"Aggiungi a schermata Home\"\n- iPhone/iPad: apri in Safari o Chrome, poi Condividi → \"Aggiungi a Home\"\n- Desktop: apri in Chrome o Edge e usa il pulsante Installa nella barra indirizzi\n\n---\n\n## 🏗️ Per sviluppatori\n\nPattern **MVC + Observer + Repository**, zero dipendenze:\n\n```\njs/\n├── app.js               # Bootstrap, SW registration, update flow\n├── controllers/\n│   └── AppController.js # Orchestrazione MVC\n├── models/\n│   ├── TimeEntry.js     # Singola timbratura\n│   └── WeekData.js      # Dati settimana\n├── views/\n│   ├── UIManager.js     # Rendering UI, toast, PWA install\n│   └── ModalManager.js  # Modali (edit, add, confirm, clean)\n├── services/\n│   ├── TimeCalculator.js # Calcoli ore, pause, delta, suggerimento orari ultimo giorno utile\n│   ├── WeekNavigator.js  # Navigazione settimane ISO 8601\n│   └── ExportService.js  # Export JSON / CSV, import\n├── storage/\n│   ├── StorageManager.js     # Repository pattern, dual storage\n│   ├── LocalStorageAdapter.js\n│   └── IndexedDBAdapter.js\n└── utils/\n    ├── EventBus.js      # Pub/Sub con eventi tipizzati\n    ├── DateUtils.js     # ISO 8601, formatting, parsing\n    └── Validators.js    # Validazione orari\n```\n\nStack: Vanilla JavaScript ES Modules, CSS singolo, localStorage + IndexedDB, Service Worker con app shell network-first, manifest PWA.\n\n### Avvio locale\n\n```bash\ngit clone https://github.com/VTvito/italian-pa-employee-attendance.git\ncd italian-pa-employee-attendance\npython -m http.server 8000\n```\n\n### Test\n\n```bash\nhttp://localhost:8000/tests/\n```\n\n---\n\n## 📋 Configurazione\n\nLe costanti principali sono in [js/services/TimeCalculator.js](js/services/TimeCalculator.js):\n\n```javascript\nexport const CONFIG = {\n    WEEKLY_TARGET_HOURS: 36,\n    PAUSE_MINUTES: 30,\n    PAUSE_THRESHOLD_HOURS: 6,\n    SMART_HOURS_DEFAULT: 7.5,\n    SMART_HOURS_FRIDAY: 6,\n    DAILY_TARGET_HOURS: 7.5,\n    FRIDAY_TARGET_HOURS: 6\n};\n```\n\n---\n\n## 🌐 Self-hosting\n\nQualsiasi hosting statico va bene: GitHub Pages, Netlify, Vercel, Cloudflare Pages o un semplice server HTTP.\n\n---\n\n## 🤝 Contribuisci\n\nPull request benvenute. Per modifiche sostanziali conviene aprire prima una issue.\n\n---\n\n## 📄 Licenza\n\nDistribuito sotto licenza **MIT** — vedi [LICENSE](LICENSE).\n\n---\n\n## 👤 Autore\n\n**VTvito** — [@VTvito](https://github.com/VTvito)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvtvito%2Ftimbrature-pa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvtvito%2Ftimbrature-pa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvtvito%2Ftimbrature-pa/lists"}