Progressive Web App dla harmonogramu wywozu odpadów. Zbudowana z myślą o wydajności, dostępności i bezpieczeństwie.
Nowoczesne technologie webowe bez zewnętrznych frameworków
Backend bez frameworka. Czyste, zoptymalizowane funkcje. Strict typing i defensive programming.
~99 funkcjiZero zależności. ES6+ z async/await. Event delegation i memory-safe patterns.
Native APIsDesign system z ~85 zmiennymi CSS. Dark mode, responsive breakpoints, print styles.
No PreprocessorService Worker z cache-first strategy. Offline support, installable, push-ready.
13 ikonPełna dostępność. Skip links, focus management, aria-live, keyboard navigation.
AccessibleCSRF One-Time-Use, XSS protection, rate limiting, session security, CSP headers.
Production ReadyModułowa organizacja kodu z jasnym podziałem odpowiedzialności
Rozkład kodu źródłowego według typu i rozmiaru
| Plik | Typ | Linii | Udział |
|---|---|---|---|
| config.php | PHP | 2,317 | |
| assets/css/print-calendar.css | CSS | 2,000 | |
| includes/functions.php | PHP | 1,215 | |
| includes/database.php | PHP | 800 | |
| assets/css/main.css | CSS | 454 | |
| assets/css/admin.css | CSS | 433 | |
| sw.js | JS | 261 | |
| admin.php | PHP | 247 | |
| index.php | PHP | 149 | |
| print-calendar.php | PHP | 141 | |
| offline.html | HTML | 122 | |
| mapa.php | PHP | 112 | |
| stats.php | PHP | 110 | |
| manifest.json | JSON | 109 | |
| changelog.php | PHP | 47 |
Co potrafi aplikacja Kiedy Śmieci
Fuzzy search z autocomplete dla 17 rejonów
Interaktywny widok miesięczny i roczny
Synchronizacja z Google/Apple/Outlook
6 stylów kalendarzy do wydruku
Automatyczne przełączanie wg systemu
Polski, angielski, niemiecki
Pełna funkcjonalność bez internetu
Push notifications ready
System ról: superadmin, admin, editor
Wykresy i analityka wywozów
Interaktywna mapa z Leaflet
Codzienne kopie zapasowe danych
Wielowarstwowa ochrona aplikacji
One-Time-Use tokens dla każdego formularza
escapeHtml() + Content Security Policy
60 req/min API, 5 req/min login
Regenerate ID + HTTP-only cookies
bcrypt z cost factor 12
Audit trail wszystkich operacji
Bezpieczny zapis danych z lockiem i atomic rename
// Atomic file save with exclusive lock
function saveData($data, $filepath) {
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
// Create unique temp file
$temp = $filepath . '.' . uniqid('', true)
. '.' . bin2hex(random_bytes(4));
// Write to temp with exclusive lock
$fp = fopen($temp, 'w');
if (flock($fp, LOCK_EX)) {
$written = fwrite($fp, $json);
fflush($fp);
flock($fp, LOCK_UN);
}
fclose($fp);
// Atomic rename (POSIX guarantee)
return rename($temp, $filepath);
}