# Krčma Petrić

**Web:** [krcma-petric.com](https://krcma-petric.com)

Restaurant website built with Laravel 12 + Bootstrap 5 + Livewire 3, featuring the Bistro HTML template integration with full authentication and admin management system.

## Stack

| | |
|---|---|
| **Framework** | Laravel 12.54.1 |
| **Frontend** | Bootstrap 5.2.3 + Bistro Template |
| **Auth** | Laravel UI (Bootstrap scaffolding) |
| **JavaScript** | Livewire 3 + jQuery 2.2.3 |
| **PHP** | 8.3.29 |
| **Composer** | 2.9.5 |
| **Node.js** | v22.20.0 |
| **npm** | 10.9.3 |
| **Vite** | ^7.0.7 |

## Konfiguracija

### Scheduler & Middleware (`bootstrap/app.php`)
- **Schedule:** Mjesečno čišćenje logova + tjedni izvještaj rezervacija
- **Middleware:** Web, auth, guest konfiguracija

### Log Viewer (`config/log-viewer.php`)
- **URL:** `/log-viewer` (samo autentificirani korisnici)
- **Skriveno:** Nginx i Apache server logovi (prikazuju se samo Laravel application logovi)

### Mail (`config/mail.php`)
- **Driver:** SMTP (Postfix na serveru)  
- **From:** `info@krcma-petric.com`

## Features

- ✅ Bistro HTML template integration (Envato Elements)
- ✅ Laravel UI authentication (Login, Register, Password Reset)
- ✅ Bootstrap 5 responsive design
- ✅ **Online rezervacije** - Livewire forma + guest token potvrda
- ✅ **Email notifikacije** - Nova rezervacija, potvrda, otkazivanje
- ✅ **Admin dashboard** - Upravljanje rezervacijama, jelovjnikom i dnevnim menijem
- ✅ **Jelovnik Management** - CRUD za kategorije i stavke jelovnika
- ✅ **Dnevni Meni Management** - CRUD za dnevne menije i stavke
- ✅ **Custom Error Pages** - Hrvatski tekstovi na Bistro layoutu (404, 401, 403, 419, 429, 500, 503)
- ✅ **SEO optimizacija** - Laravel SEO paket, meta tags, Open Graph
- ✅ **Automatsko čišćenje logova** - Mjesečno brisanje Laravel i browser logova (+ nginx/apache na serveru)
- ✅ **Tjedni izvještaji** - Automatski email izvještaj o rezervacijama svakog ponedjeljka
- ✅ **Laravel Scheduler** - Automatizacija taskova preko crontaba- ✅ **Google Analytics 4** - Tracking kôd u layoutu (podrška za GA4)- ✅ **MediaLibrary** - Upload i upravljanje slikama (MenuItem, MenuCategory)
- ✅ **Sitemap** - Dinamički `/sitemap.xml` za Google
- ✅ **XML API** - Export jelovnika i kategorija
- ✅ **Honeypot zaštita** - Anti-spam za forme
- ✅ Dynamic menu system
- ✅ Google Fonts hrvatskih znakova (č, ć, š, ž, đ)
- ✅ Contact page with form placeholder
- ✅ Livewire 3 components

## Pages

| Route | View | Description |
|-------|------|-------------|
| `/` | `pages.home` | Homepage with hero, features, menu |
| `/o-nama` | `pages.about` | About Krčma Petrić |
| `/jelovnik` | `pages.menu` | Full menu by categories |
| `/dnevni-meni` | `pages.daily-menu` | Daily menu display |
| `/galerija` | `pages.gallery` | Photo gallery |
| `/kontakt` | `pages.contact` | Contact form |
| `/rezerviraj` | `pages.reservations` | Rezervacijski form (Livewire) |
| `/potvrdi-rezervaciju/{token}` | `pages.reservation-confirmation` | Guest potvrda/otkazivanje |
| `/login` | `auth.login` | Login (Bistro layout) |
| `/home` | `home` | User dashboard with statistics |
| **Admin Routes** | | |
| `/admin/rezervacije` | `admin.reservations.index` | Rezervacije management |
| `/admin/jelovnik` | `admin.menu.index` | Jelovnik management (kategorije + stavke) |
| `/admin/dnevni-meni` | `admin.daily-menu.index` | Dnevni meni management |
| **SEO & API** | | |
| `/sitemap` | - | Dinamički sitemap za Google |
| `/api/xml/export` | - | XML export jelovnika |
| `/api/xml/export/categories` | - | XML export kategorija |
| `/api/xml/export/daily-menus` | - | XML export dnevnih menija |

## Rezervacije

### Javna forma
- **URL:** `/rezerviraj`
- **Komponenta:** `Livewire\ReservationForm`
- **Email:** Automatski šalje potvrdu korisniku i notifikaciju na `info@krcma-petric.com`

### Guest potvrda
- Token-based pristup (bez registracije)
- Link u emailu: `/potvrdi-rezervaciju/{token}`
- Korisnik može potvrditi ili otkazati rezervaciju

### Admin panel
- **URL:** `/admin/rezervacije`
- **Pristup:** Samo autentificirani korisnici
- **Funkcije:** Pregled, filteri (status, datum), ručna potvrda/otkazivanje
- **Admin korisnici:** 
  - `info@krcma-petric.com` / Krčma2026??!!
  - `test@example.com` / Krčma2026??!!

### Email notifikacije
1. **Nova rezervacija** → Korisniku potvrda + adminu notifikacija
2. **Potvrđena rezervacija** → Korisniku (guest ili admin akcija)
3. **Otkazana rezervacija** → Korisniku (guest ili admin akcija)

## Automatski taskovi (Scheduler)

### Mjesečno čišćenje logova
- **Komanda:** `php artisan logs:clear`
- **Schedule:** 1. dan mjeseca u 00:00
- **Funkcija:** Briše `laravel.log`, `browser.log` i server logove (nginx/apache ako dostupni)
- **Email notifikacija:** Šalje izvještaj o očišćenim logovima na:
  - `info@krcma-petric.com`
  - `kristijan.cpn@gmail.com`
  - `mkopcic@gmail.com`

### Tjedni izvještaj rezervacija
- **Komanda:** `php artisan reservations:weekly-report`
- **Schedule:** Svaki ponedjeljak u 09:00
- **Funkcija:** Statistika rezervacija za prethodnih 7 dana:
  - Ukupno rezervacija
  - Potvrđene, na čekanju, otkazane
  - Ukupan broj gostiju
  - Prosjek gostiju po rezervaciji
- **Email notifikacija:** Šalje izvještaj na iste adrese kao i čišćenje logova

### Pokretanje schedulera (crontab)

Dodaj u crontab (`crontab -e`):
```bash
* * * * * cd /home/krcma/public_html/lv && php artisan schedule:run >> /dev/null 2>&1
```

**Provjera scheduliranih taskova:**
```bash
php artisan schedule:list
```

## Server

- **OS:** Rocky Linux 9.7 (Blue Onyx)
- **Control Panel:** CWP Pro
- **Web Stack:** Apache2 + Nginx
- **PHP-FPM:** 8.3 (`/opt/alt/php-fpm83/`)
- **Baza:** MySQL — `krcma_lv265` @ 127.0.0.1:3306
- **Mail:** Postfix (lokalni SMTP, `info@krcma-petric.com`)

## Instalirani paketi

### Production
- `ralphjsmit/laravel-seo` — SEO meta tags, Open Graph, Twitter Cards
- `spatie/laravel-medialibrary` — Upload i upravljanje medijima
- `spatie/laravel-honeypot` — Anti-spam zaštita formi
- `spatie/laravel-sitemap` — Dinamički sitemap generation
- `spatie/schema-org` — Structured data za SEO
- `spatie/array-to-xml` — XML export API

### Development
- `laravel/boost` — AI/Copilot MCP server i guidelines
- `laravel/ui` — Bootstrap 5 authentication scaffolding
- `laravel/pail` — Log viewer
- `opcodesio/log-viewer` — Web-based log viewer (`/log-viewer`)
- `fruitcake/laravel-debugbar` — Debug toolbar

## Development

### Setup

```bash
# Install dependencies
composer install
npm install

# Environment setup
cp .env.example .env
php artisan key:generate

# Database
php artisan migrate

# Build assets
npm run build
```

### Run Development Server

```bash
# All-in-one (server, queue, logs, vite)
composer run dev

# Or individually
php artisan serve
npm run dev
php artisan queue:work  # Za slanje queued emailova
```

### Queue Worker (Production)

Emailovi se šalju kroz queue sistem. Za produkciju:

```bash
# Pokreni kao daemon
php artisan queue:work --daemon

# Ili dodaj u supervisor/systemd
```

**CWP Pro / Rocky 9 setup:**
- Queue driver: `database` (default u `.env`)
- Schedule: Crontab automatski pokreće taskove
- Emailovi se procesiraju kad se pozove `queue:work`

### Code Quality

```bash
# Format code
vendor/bin/pint --format agent

# Run tests
php artisan test --compact
```

## Project Structure

```
app/
├── Console/
│   └── Commands/
│       ├── ClearLogs.php                           # Mjesečno čišćenje logova
│       └── WeeklyReservationReport.php             # Tjedni izvještaj rezervacija
├── Http/
│   └── Controllers/
│       ├── HomeController.php                      # Dashboard controller
│       ├── AdminReservationsController.php         # Admin rezervacije
│       └── ReservationConfirmationController.php   # Guest potvrda
├── Livewire/
│   ├── ReservationForm.php                         # Online rezervacije
│   └── FeaturedMenu.php                            # Featured jela
├── Mail/
│   ├── ReservationConfirmationMail.php             # Nova rezervacija → korisniku
│   ├── NewReservationNotificationMail.php          # Nova rezervacija → adminu
│   ├── ReservationConfirmedMail.php                # Potvrđena
│   ├── ReservationCancelledMail.php                # Otkazana
│   ├── LogsClearedMail.php                         # Mjesečni izvještaj o čišćenju logova
│   ├── WeeklyReservationReportMail.php             # Tjedni izvještaj rezervacija
│   └── WelcomeMail.php                             # Dobrodošlica novim korisnicima
└── Models/
    ├── User.php
    ├── Reservation.php                             # Token-based rezervacije
    └── MenuItem.php

resources/views/
├── layouts/
│   ├── app.blade.php               # Laravel UI layout
│   └── bistro.blade.php            # Bistro template layout
├── partials/bistro/
│   ├── header.blade.php            # Navigation + Auth + Admin link
│   └── footer.blade.php            # Footer
├── pages/
│   ├── home.blade.php              # Homepage
│   ├── menu.blade.php              # Menu page
│   ├── reservations.blade.php      # Rezervacijska forma
│   ├── reservation-confirmation.blade.php  # Guest potvrda
│   └── contact.blade.php           # Contact page
├── admin/reservations/
│   └── index.blade.php             # Admin dashboard
├── livewire/
│   ├── reservation-form.blade.php
│   └── featured-menu.blade.php
├── emails/                         # Email templates (Markdown)
│   ├── reservation-confirmation.blade.php
│   ├── new-reservation-notification.blade.php
│   ├── reservation-confirmed.blade.php
│   ├── reservation-cancelled.blade.php
│   ├── logs-cleared.blade.php
│   ├── weekly-reservation-report.blade.php
│   └── welcome.blade.php
├── auth/                           # Laravel UI auth views
└── home.blade.php                  # Dashboard

public/bistro/                      # Template assets (not Vite)
├── css/
│   └── custom-croatian.css         # Google Fonts override
├── js/
├── images/
└── fonts/

docs/
├── layout.md                       # Bistro integration docs
├── GUEST-CONFIRMATION.md           # Rezervacijski sustav
└── MAIL-IMPLEMENTATION.md          # Email notifikacije
```

## Mail Configuration

**SMTP:** `server.konoba.hr:465` (SMTPS)  
**From:** `info@krcma-petric.com`  
**Test routes:** `/test-mail`, `/send-mail-env`

```env
MAIL_MAILER=smtp
MAIL_SCHEME=smtps
MAIL_HOST=server.konoba.hr
MAIL_PORT=465
MAIL_USERNAME=info@krcma-petric.com
MAIL_PASSWORD=***
MAIL_FROM_ADDRESS="info@krcma-petric.com"
MAIL_FROM_NAME="Krčma-Petrić"
```

## Next Steps

- [x] ~~Implement Livewire ReservationForm~~
- [x] ~~Create database tables for reservations~~
- [x] ~~Add admin panel for content management~~
- [x] ~~Setup email notifications~~
- [ ] Add admin CRUD for menu items
- [ ] Implement ContactForm Livewire component
- [ ] Replace fake data with database-driven content
- [ ] Add Google Maps integration
- [ ] Setup automated backups

## Documentation

See [docs/layout.md](docs/layout.md) for complete integration documentation and technical details.

## Support

For technical issues contact: **kristijan.cpn@gmail.com**
