# Standardy Projektowe i Wytyczne Kodowania

Niniejszy dokument określa zasady strukturyzacji kodu w projekcie, mające na celu zapewnienie maksymalnej czytelności, modularności oraz łatwości utrzymania.

---

## 1. Architektura Plików (Separation of Concerns)

Zabrania się mieszania różnych języków w jednym pliku (np. CSS wewnątrz PHP lub JS wewnątrz HTML). Obowiązuje ścisły podział:

* **HTML (`.html` / `.php` jako widok):** Tylko struktura dokumentu.
* **CSS (`.css`):** Tylko style i warstwa wizualna. Plik: `assets/css/style.css`.
* **JavaScript (`.js`):** Tylko logika interakcji po stronie klienta. Plik: `assets/js/script.js`.
* **PHP (`.php`):** Logika biznesowa, obsługa bazy danych i API. Pliki w folderze `src/` lub `actions/`.

## 2. Standardy PHP

* **Logic-First:** Pliki procesujące dane (np. `login_action.php`) nie mogą zawierać tagów HTML. Kończą się przekierowaniem `header()` lub zwróceniem JSON.
* **DRY (Don't Repeat Yourself):** Powtarzalne elementy (header, footer, połączenie z DB) muszą być wydzielone do osobnych plików w folderze `includes/`.
* **Bezpieczeństwo:** Obowiązkowe stosowanie Prepared Statements (PDO/MySQLi) oraz filtrowanie danych wejściowych.

## 3. Standardy HTML & CSS

* **Semantyka:** Używaj tagów `<header>`, `<main>`, `<footer>`, `<section>` zamiast nadużywania `<div>`.
* **Klasy CSS:** Nazewnictwo opisowe (np. `.btn-submit` zamiast `.b1`). Unikanie stylów inline (`style="..."`).
* **Responsywność:** Kod CSS musi wspierać urządzenia mobilne (Flexbox/Grid).

## 4. Czystość Kodu (Readability)

* **Wcięcia:** 4 spacje lub 1 tabulator (konsekwentnie w całym projekcie).
* **Komentarze:**  Po polsku i tylko tam, gdzie logika jest złożona. Kod powinien być "samospłacalny" poprzez jasne nazwy zmiennych.
* **Zwięzłość:** Preferuj nowoczesne funkcje PHP (np. null coalescing operator ??) oraz czysty JavaScript (ES6+).

## 5. Standardy SEO i Dostępności (Accessibility)

Każdy widok musi spełniać podstawowe normy optymalizacji:

* **Meta-tagi:** Dynamiczne ustawianie `<title>` (max 60 znaków) oraz `<meta description>` (max 160 znaków) dla każdej podstrony.
* **Nagłówki:** Hierarchia `<h1>` -> `<h2>` -> `<h3>` musi być logiczna i odzwierciedlać strukturę treści.
* **Atrybuty ALT:** Każdy tag `<img>` musi posiadać opisowy atrybut `alt`.
* **Mobile First:** Style CSS muszą być pisane z myślą o urządzeniach mobilnych, a następnie rozszerzane dla desktopów (Media Queries).
* **Performance:** Unikanie ciężkich bibliotek JS, jeśli zadanie można rozwiązać w czystym CSS lub Vanilla JS.

## 6. Struktura Katalogów

```text
/
├── assets/
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── main.js
│   └── img/
├── includes/
│   ├── db.php          # Połączenie z bazą
│   ├── functions.php   # Globalne funkcje
│   └── header.php      # Fragmenty HTML
├── src/
│   └── Auth/           # Logika logowania/rejestracji
├── public/             # Pliki dostępne publicznie
│   ├── index.php
│   └── login.php
└── GEMINI.md           # Niniejsza instrukcja
```

---

## 7. Konwencja Interakcji: Sprawdzanie Statusu

Aby sprawdzić, czy asystent zakończył bieżące zadanie (np. w przypadku zawieszenia się terminala), użyj komendy:
`//status`

- Jeśli zadanie zostało zakończone, asystent odpowie: `zadanie wykonane`.
- Jeśli asystent jest wciąż w trakcie pracy, będzie kontynuował swoje zadanie bez dodatkowej odpowiedzi tekstowej.
