Developer Documentation

Kiedy Śmieci

Progressive Web App dla harmonogramu wywozu odpadów. Zbudowana z myślą o wydajności, dostępności i bezpieczeństwie.

8,517
Linii kodu
15
Plików
99
Funkcji PHP
2.0.4
Wersja

Tech Stack

Nowoczesne technologie webowe bez zewnętrznych frameworków

PHP 7.4+

Backend bez frameworka. Czyste, zoptymalizowane funkcje. Strict typing i defensive programming.

~99 funkcji

Vanilla JavaScript

Zero zależności. ES6+ z async/await. Event delegation i memory-safe patterns.

Native APIs

CSS3 Custom Properties

Design system z ~85 zmiennymi CSS. Dark mode, responsive breakpoints, print styles.

No Preprocessor

PWA

Service Worker z cache-first strategy. Offline support, installable, push-ready.

13 ikon

WCAG 2.1 AA

Pełna dostępność. Skip links, focus management, aria-live, keyboard navigation.

Accessible

Security Hardened

CSRF One-Time-Use, XSS protection, rate limiting, session security, CSP headers.

Production Ready

Struktura projektu

Modułowa organizacja kodu z jasnym podziałem odpowiedzialności

Frontend Pages

  • index.php — Główna aplikacja użytkownika
  • admin.php — Panel administracyjny
  • stats.php — Statystyki i wykresy
  • print-calendar.php — Centrum druku
  • mapa.php — Mapa rejonów
  • changelog.php — Historia zmian

Backend Core

  • config.php — Konfiguracja + security
  • functions.php — Utility functions
  • database.php — Data access layer
  • lang/*.php — Tłumaczenia (PL/EN/DE)

PWA Assets

  • sw.js — Service Worker (cache-first)
  • manifest.json — PWA manifest
  • offline.html — Strona offline
  • icons/ — 13 ikon PWA

Data Layer

  • data/harmonogram.json — Harmonogram wywozów
  • data/users.json — Użytkownicy systemu
  • data/backups/ — Automatyczne backupy
  • logs/ — Logi błędów i security

Analiza plików

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

Kluczowe funkcje

Co potrafi aplikacja Kiedy Śmieci

Wyszukiwanie ulicy

Fuzzy search z autocomplete dla 17 rejonów

Kalendarz wywozów

Interaktywny widok miesięczny i roczny

Eksport ICS

Synchronizacja z Google/Apple/Outlook

Drukowanie

6 stylów kalendarzy do wydruku

Dark Mode

Automatyczne przełączanie wg systemu

Wielojęzyczność

Polski, angielski, niemiecki

Tryb Offline

Pełna funkcjonalność bez internetu

Powiadomienia

Push notifications ready

Multi-user

System ról: superadmin, admin, editor

Statystyki

Wykresy i analityka wywozów

Mapa rejonów

Interaktywna mapa z Leaflet

Auto-backup

Codzienne kopie zapasowe danych

Security First

Wielowarstwowa ochrona aplikacji

CSRF Protection

One-Time-Use tokens dla każdego formularza

XSS Prevention

escapeHtml() + Content Security Policy

Rate Limiting

60 req/min API, 5 req/min login

Session Security

Regenerate ID + HTTP-only cookies

Password Hashing

bcrypt z cost factor 12

Security Logging

Audit trail wszystkich operacji

Atomic File Save

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);
}