Podsumowanie projektu: Generator obrazków AI (zaktualizowany plan)
Architektura systemu
Frontend: Vue 3 SPA z Tailwind CSS
Backend: Laravel API z autentyfikacją Sanctum
AI: ComfyUI na serwerze GPU (vast.ai) połączony przez SSH tunel
Database: MySQL 8.0
Queue: Laravel database driver
Storage: Lokalne storage (później S3)
Płatności: Stripe
Cache: File cache
Etapy realizacji
ETAP 1: Backend - Fundament (Tydzień 1-2)
1.1 Instalacja i konfiguracja

Setup Laravel + MySQL
Konfiguracja Sanctum do autentyfikacji
Laravel queue: php artisan queue:table
Modele: User, PromptCategory, PromptCategoryOption, ImageGeneration, Subscription, CreditTransaction
1.2 System kategorii i opcji

-- prompt_categories: id, name, display_name, prompt_prefix, order_index, is_active
-- prompt_category_options: id, prompt_category_id, name, display_name, prompt_value, order_index, is_active  
-- image_generations: id, user_id, selected_options(JSON), generated_prompt, image_path, status

1.3 Seedery z przykładowymi danymi

Kategorie: Długość włosów, Kolor włosów, Poza, Tło, Ubranie
Opcje dla każdej kategorii (po 4-6 opcji)
PromptBuilder service do generowania tekstów
1.4 Podstawowe API

GET /api/categories - kategorie z opcjami
POST /api/generate - rozpoczęcie generowania
GET /api/my-images - obrazki użytkownika
GET /api/generation/{id}/status - status generowania
ETAP 2: Integracja ComfyUI (Tydzień 2-3)
2.1 Services i Jobs

ComfyUIService - połączenie SSH + HTTP client
PromptBuilder - budowanie promptu z wybranych opcji
GenerateImageJob - asynchroniczne generowanie
2.2 Flow generowania

// 1. Walidacja kredytów użytkownika
// 2. Zapis ImageGeneration (status: pending)
// 3. Dispatch GenerateImageJob  
// 4. Job: połączenie z ComfyUI → prompt → generowanie
// 5. Zapis obrazka lokalnie, update statusu

2.3 Przykład budowania prompta

Wybór: {hair_length: "long", hair_color: "brown", pose: "sitting"}
Prompt: "Włosy: długie, brązowe. Poza: siedząca"
ETAP 3: Frontend - Interfejs (Tydzień 3-4)
3.1 Setup Vue 3

Vite + Tailwind CSS
Pinia stores: auth, generator, images
Axios interceptors dla auth
Vue Router
3.2 Generator komponent

<ImageGenerator>
  <CategorySelector 
    v-for="category in categories"
    :category="category"
    @option-selected="updateSelection"
  />
  <PromptPreview :selected-options="selectedOptions" />
  <GenerateButton :can-generate="hasCredits" />
</ImageGenerator>

3.3 Główne komponenty

CategorySelector - wybór opcji w kategorii
PromptPreview - podgląd generowanego prompta
MyGallery - siatka własnych obrazków
CreditBalance - wyświetlanie kredytów
GenerationStatus - progress + real-time updates
ETAP 4: System płatności (Tydzień 4-5)
4.1 Modele subskrypcji

// plans: name, price, credits_per_month
// subscriptions: user_id, plan_id, stripe_subscription_id, status
// credit_transactions: user_id, amount, type(subscription/purchase/usage), description

4.2 Plany i ceny

Starter: 25 kredytów/miesiąc - $4.99
Basic: 75 kredytów/miesiąc - $12.99
Pro: 200 kredytów/miesiąc - $29.99
Jednorazowe: 10(
1.99
)
,
50
(
1.99),50(8.99), 100($16.99) kredytów
4.3 Stripe integration

Checkout sessions dla subskrypcji i jednorazowych płatności
Webhooks: invoice.payment_succeeded, customer.subscription.deleted
Credit dodawanie przez CreditService
ETAP 5: Panel administracyjny (Tydzień 5)
5.1 Admin interface (Blade views)

Route::middleware(['auth', 'admin'])->prefix('admin')->group(function() {
    Route::get('dashboard', [AdminController::class, 'dashboard']);
    Route::resource('categories', CategoryController::class);
    Route::resource('options', CategoryOptionController::class);
    Route::get('images', [AdminController::class, 'allImages']);
    Route::post('images/{id}/toggle-public', [AdminController::class, 'togglePublic']);
});

5.2 Funkcjonalności

Dashboard: statystyki (użytkownicy, generacje dziś/miesiąc, przychody)
CRUD kategorii i opcji (łatwe dodawanie nowych)
Galeria wszystkich obrazków z możliwością publikacji
Zarządzanie użytkownikami i ich kredytami
5.3 Galeria publiczna

is_public boolean w tabeli image_generations
GET /api/public-gallery - approved obrazki
Frontend: osobna strona /gallery
ETAP 6: Deployment i finalizacja (Tydzień 6)
6.1 Hosting setup

VPS lub shared hosting z SSH
MySQL database + user
Domain + SSL certificate
Queue worker: supervisor lub cron
6.2 Optymalizacje

Laravel config/route/view cache
Image compression (intervention/image)
Basic SEO (meta tags, sitemap)
Error monitoring (Laravel Log)
Szczegółowa kolejność (day-by-day)
Tydzień 1:

Laravel setup + MySQL + auth scaffolding
Modele i migracje (Category, CategoryOption, ImageGeneration)
Seedery z kategoriami (włosy, poza, tło, ubranie)
API endpoints dla kategorii + podstawowa walidacja
Tydzień 2: 5. PromptBuilder service + testy jednostkowe 6. ComfyUIService + SSH połączenie + basic HTTP client 7. GenerateImageJob + queue setup 8. Storage + file upload + path saving

Tydzień 3: 9. Vue 3 setup + Tailwind + router + stores 10. CategorySelector komponenty + responsive design 11. Generator form + prompt preview 12. API integration + error handling

Tydzień 4: 13. MyGallery + infinite scroll lub pagination 14. Real-time status (polling co 2s) 15. Credit system + validation przed generowaniem 16. Toast notifications + loading states

Tydzień 5: 17. Stripe setup + test keys + webhook endpoint 18. Payment flow w frontend (modale, success pages) 19. Admin panel (Blade) + basic styling 20. Image moderation + public gallery

Tydzień 6: 21. Deployment na hosting + domain setup 22. Queue worker + supervisor configuration
23. Testing wszystkich flow + bug fixes 24. Performance tuning + launch preparation