Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds
Powrót do kolekcji
Przewodnik18 min czytania

Lovable (GPT Engineer)

Lovable to AI app builder z GitHub i Supabase integration. Kompletny przewodnik - budowanie aplikacji React z promptów, visual editor, autentykacja i deploy.

Lovable - Kompletny Przewodnik po AI App Builder

Czym jest Lovable?

Lovable (dawniej znany jako GPT Engineer) to zaawansowana platforma AI do budowania aplikacji webowych z opisów tekstowych. W przeciwieństwie do konkurencji, Lovable wyróżnia się głęboką natywną integracją z GitHub i Supabase, oferując profesjonalny workflow developmentu od prototypu do produkcji.

Lovable pozwala nie tylko generować kod, ale także edytować komponenty wizualnie, zarządzać wersjami przez GitHub, i automatycznie konfigurować backend z autentykacją poprzez Supabase - wszystko to bez opuszczania platformy.

Dlaczego Lovable?

Kluczowe zalety

  1. Natywna integracja GitHub - Automatyczne commity, branching, PR-y
  2. Supabase out-of-the-box - Autentykacja, baza danych, storage
  3. Visual Editor - Edycja komponentów bez kodowania
  4. Profesjonalny kod - TypeScript, Tailwind, best practices
  5. Multi-page apps - Routing, dynamic routes, protected pages
  6. Deploy flexibility - Vercel, Netlify, własny hosting

Lovable vs Bolt vs v0

CechaLovableBolt.newv0 by Vercel
TypFullstack appsFullstack appsUI components
BackendSupabase (natywny)Express/FastifyNie
Baza danychPostgreSQL (Supabase)SQLiteNie
GitHubNatywna integracjaEksportEksport
Visual EditorTakNieNie
AutentykacjaWbudowanaRęcznaNie
DeployVercel/Netlify/inneNetlifyVercel
Cena (Pro)$20/miesiąc$20/miesiąc$20/miesiąc

Jak działa Lovable?

Workflow budowania aplikacji

Code
TEXT
1. DESCRIBE → Opisz aplikację w języku naturalnym
2. GENERATE → AI generuje kod React + TypeScript
3. PREVIEW → Zobacz działającą aplikację
4. EDIT → Modyfikuj przez chat lub visual editor
5. CONNECT → Podłącz Supabase (auth, DB, storage)
6. COMMIT → Automatyczny push do GitHub
7. DEPLOY → Publikuj na Vercel/Netlify
8. ITERATE → Kontynuuj rozwój

Architektura generowanych aplikacji

Code
TEXT
my-lovable-app/
├── src/
│   ├── components/
│   │   ├── ui/           # Shadcn/ui components
│   │   ├── layout/       # Layout components
│   │   └── features/     # Feature-specific components
│   ├── pages/            # Route pages
│   ├── hooks/            # Custom React hooks
│   ├── lib/
│   │   ├── supabase.ts   # Supabase client
│   │   └── utils.ts      # Utility functions
│   ├── types/            # TypeScript types
│   ├── App.tsx           # Main app component
│   └── main.tsx          # Entry point
├── supabase/
│   └── migrations/       # Database migrations
├── tailwind.config.js
├── tsconfig.json
└── package.json

Generowanie aplikacji

Skuteczne prompty

Szablon promptu:

Code
TEXT
Build a [typ aplikacji] for [cel/użytkownik].

Core features:
- [Główna funkcja 1]
- [Główna funkcja 2]
- [Główna funkcja 3]

User flows:
- [Jak użytkownik wykonuje główne zadanie]
- [Alternatywne ścieżki]

Design requirements:
- [Styl wizualny]
- [Responsywność]
- [Branding]

Technical requirements:
- [Wymagania techniczne]

Przykłady promptów

SaaS Dashboard

Code
TEXT
Build a SaaS analytics dashboard for marketing teams.

Core features:
- User authentication (email + Google OAuth)
- Dashboard with key metrics (visitors, conversions, revenue)
- Multiple chart types (line, bar, pie, area)
- Date range selector with presets (7d, 30d, 90d, custom)
- Data export to CSV and PDF
- Team management (invite users, roles)

User flows:
- User logs in → sees dashboard → selects date range → views charts
- Admin invites team member → member receives email → creates account

Design requirements:
- Professional, clean look
- Dark mode support
- Responsive (works on tablet for presentations)
- Consistent color palette (blues and grays)

Technical requirements:
- TypeScript strict mode
- Recharts for charts
- React Query for data fetching
- Supabase for backend

E-commerce Platform

Code
TEXT
Build an e-commerce platform for handmade crafts.

Core features:
- Product catalog with categories and tags
- Search with filters (price, category, rating)
- Shopping cart with persistent storage
- Wishlist functionality
- User accounts with order history
- Product reviews and ratings
- Seller dashboard for managing products

User flows:
- Browse products → add to cart → checkout → receive confirmation
- Seller creates account → adds products → manages orders

Design requirements:
- Warm, artisanal aesthetic
- High-quality product images showcase
- Mobile-first design
- Accessible (WCAG 2.1 AA)

Technical requirements:
- Supabase for products, orders, users
- Stripe integration ready (mock for now)
- Image optimization
- SEO-friendly URLs

Project Management Tool

Code
TEXT
Build a project management tool like a simpler Trello.

Core features:
- Kanban boards with drag-and-drop
- Multiple boards per workspace
- Cards with title, description, due date, assignees
- Card comments and activity log
- Labels and priority tags
- Board sharing and permissions

User flows:
- User creates board → adds lists → creates cards → moves cards between lists
- User invites collaborator → collaborator joins → sees shared boards

Design requirements:
- Clean, minimal interface
- Smooth drag-and-drop animations
- Keyboard shortcuts
- Dark mode

Technical requirements:
- @hello-pangea/dnd for drag-and-drop
- Real-time updates with Supabase subscriptions
- Optimistic UI updates

Iteracyjny rozwój

Code
TEXT
// Session 1: Podstawowa aplikacja
You: "Build a task management app with categories and due dates"
Lovable: [Generuje podstawową aplikację]

// Session 2: Dodanie autentykacji
You: "Add user authentication - users should only see their own tasks"
Lovable: [Konfiguruje Supabase Auth, dodaje RLS policies]

// Session 3: Visual editing
[Używasz Visual Editor do dostosowania kolorów i layoutu]

// Session 4: Nowe funkcje
You: "Add task sharing - users can share specific tasks with others via email"
Lovable: [Dodaje sharing functionality]

// Session 5: Deploy
You: "Connect to GitHub and prepare for Vercel deployment"
Lovable: [Pushuje do repo, konfiguruje build]

Integracja z Supabase

Automatyczna konfiguracja

Lovable automatycznie konfiguruje Supabase gdy poprosisz o autentykację lub bazę danych:

Code
TypeScript
// Automatycznie generowane: src/lib/supabase.ts
import { createClient } from '@supabase/supabase-js'
import type { Database } from '@/types/supabase'

const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY

export const supabase = createClient<Database>(supabaseUrl, supabaseAnonKey)

Autentykacja

Code
TypeScript
// Automatycznie generowany hook: src/hooks/useAuth.ts
import { useEffect, useState } from 'react'
import { User, Session } from '@supabase/supabase-js'
import { supabase } from '@/lib/supabase'

export function useAuth() {
  const [user, setUser] = useState<User | null>(null)
  const [session, setSession] = useState<Session | null>(null)
  const [loading, setLoading] = useState(true)

  useEffect(() => {
    // Get initial session
    supabase.auth.getSession().then(({ data: { session } }) => {
      setSession(session)
      setUser(session?.user ?? null)
      setLoading(false)
    })

    // Listen for auth changes
    const { data: { subscription } } = supabase.auth.onAuthStateChange(
      (_event, session) => {
        setSession(session)
        setUser(session?.user ?? null)
      }
    )

    return () => subscription.unsubscribe()
  }, [])

  const signIn = async (email: string, password: string) => {
    const { error } = await supabase.auth.signInWithPassword({
      email,
      password,
    })
    if (error) throw error
  }

  const signUp = async (email: string, password: string) => {
    const { error } = await supabase.auth.signUp({
      email,
      password,
    })
    if (error) throw error
  }

  const signOut = async () => {
    const { error } = await supabase.auth.signOut()
    if (error) throw error
  }

  const signInWithGoogle = async () => {
    const { error } = await supabase.auth.signInWithOAuth({
      provider: 'google',
      options: {
        redirectTo: `${window.location.origin}/auth/callback`,
      },
    })
    if (error) throw error
  }

  return {
    user,
    session,
    loading,
    signIn,
    signUp,
    signOut,
    signInWithGoogle,
  }
}

Baza danych z typami

Code
TypeScript
// Automatycznie generowane typy: src/types/supabase.ts
export interface Database {
  public: {
    Tables: {
      tasks: {
        Row: {
          id: string
          title: string
          description: string | null
          completed: boolean
          due_date: string | null
          user_id: string
          category_id: string | null
          created_at: string
          updated_at: string
        }
        Insert: {
          id?: string
          title: string
          description?: string | null
          completed?: boolean
          due_date?: string | null
          user_id: string
          category_id?: string | null
          created_at?: string
          updated_at?: string
        }
        Update: {
          id?: string
          title?: string
          description?: string | null
          completed?: boolean
          due_date?: string | null
          user_id?: string
          category_id?: string | null
          created_at?: string
          updated_at?: string
        }
      }
      categories: {
        Row: {
          id: string
          name: string
          color: string
          user_id: string
          created_at: string
        }
        Insert: {
          id?: string
          name: string
          color: string
          user_id: string
          created_at?: string
        }
        Update: {
          id?: string
          name?: string
          color?: string
          user_id?: string
          created_at?: string
        }
      }
    }
  }
}

// Hook do pobierania tasków
export function useTasks() {
  const { user } = useAuth()

  return useQuery({
    queryKey: ['tasks', user?.id],
    queryFn: async () => {
      const { data, error } = await supabase
        .from('tasks')
        .select('*, category:categories(*)')
        .eq('user_id', user!.id)
        .order('created_at', { ascending: false })

      if (error) throw error
      return data
    },
    enabled: !!user,
  })
}

Row Level Security (RLS)

Lovable automatycznie generuje bezpieczne polityki RLS:

Code
SQL
-- Automatycznie generowana migracja: supabase/migrations/001_tasks.sql

-- Tworzenie tabeli
CREATE TABLE tasks (
  id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
  title TEXT NOT NULL,
  description TEXT,
  completed BOOLEAN DEFAULT FALSE,
  due_date TIMESTAMPTZ,
  user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL,
  category_id UUID REFERENCES categories(id) ON DELETE SET NULL,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Włączenie RLS
ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;

-- Polityki bezpieczeństwa
CREATE POLICY "Users can view own tasks"
  ON tasks FOR SELECT
  USING (auth.uid() = user_id);

CREATE POLICY "Users can insert own tasks"
  ON tasks FOR INSERT
  WITH CHECK (auth.uid() = user_id);

CREATE POLICY "Users can update own tasks"
  ON tasks FOR UPDATE
  USING (auth.uid() = user_id);

CREATE POLICY "Users can delete own tasks"
  ON tasks FOR DELETE
  USING (auth.uid() = user_id);

-- Trigger do aktualizacji updated_at
CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at = NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER tasks_updated_at
  BEFORE UPDATE ON tasks
  FOR EACH ROW
  EXECUTE FUNCTION update_updated_at();

Real-time subscriptions

Code
TypeScript
// Hook z real-time updates
export function useRealtimeTasks() {
  const { user } = useAuth()
  const queryClient = useQueryClient()

  useEffect(() => {
    if (!user) return

    const channel = supabase
      .channel('tasks-changes')
      .on(
        'postgres_changes',
        {
          event: '*',
          schema: 'public',
          table: 'tasks',
          filter: `user_id=eq.${user.id}`,
        },
        (payload) => {
          // Invalidate queries to refetch
          queryClient.invalidateQueries({ queryKey: ['tasks'] })
        }
      )
      .subscribe()

    return () => {
      supabase.removeChannel(channel)
    }
  }, [user, queryClient])
}

Integracja z GitHub

Automatyczne commity

Lovable automatycznie commituje zmiany do połączonego repozytorium GitHub:

Code
TEXT
// Workflow z GitHub
1. Połącz konto GitHub w ustawieniach Lovable
2. Utwórz nowe repo lub połącz istniejące
3. Każda zmiana → automatyczny commit z opisowym message
4. Historia zmian dostępna w GitHub

// Przykładowe commit messages generowane przez Lovable:
- "feat: Add user authentication with Supabase"
- "style: Update dashboard layout and colors"
- "fix: Resolve task deletion bug"
- "feat: Add category filtering to tasks"

Branch management

Code
TypeScript
// Lovable wspiera workflow z branchami
// W ustawieniach projektu możesz:

// 1. Wybrać domyślny branch (main/develop)
// 2. Tworzyć feature branches
// 3. Mergować przez Pull Requests

// Przykład workflow:
// main ← PR ← feature/add-categories
//       ← PR ← feature/dark-mode
//       ← PR ← fix/mobile-responsive

Pull Requests

Code
Markdown
# Automatycznie generowany PR

## Summary
Added category filtering functionality to the tasks view.

## Changes
- Added CategoryFilter component
- Updated useTasks hook to support filtering
- Added filter state to TasksPage
- Updated database queries for category filtering

## Screenshots
[Lovable automatycznie dodaje screenshots zmian]

## Testing
- [x] Category filter displays all categories
- [x] Selecting category filters tasks correctly
- [x] "All" option shows all tasks
- [x] Filter persists on page refresh

Visual Editor

Edycja bez kodowania

Visual Editor pozwala modyfikować komponenty bezpośrednio:

Code
TEXT
// Możliwości Visual Editor:

1. LAYOUT
   - Drag & drop elementów
   - Resize komponentów
   - Zmiana flex/grid ustawień
   - Spacing (margin, padding)

2. STYLING
   - Kolory (background, text, border)
   - Typografia (font, size, weight)
   - Shadows i efekty
   - Border radius

3. CONTENT
   - Edycja tekstu inline
   - Zmiana obrazków
   - Modyfikacja linków

4. RESPONSIVE
   - Preview na różnych breakpoints
   - Ukrywanie elementów per device
   - Responsive spacing

Przykład użycia Visual Editor

Code
TEXT
Scenario: Dostosowanie karty produktu

1. Kliknij na kartę produktu
2. W panelu po prawej:
   - Zmień background na #f8f9fa
   - Dodaj shadow-md
   - Zwiększ padding do 24px
   - Zaokrągl rogi do 12px

3. Kliknij na tytuł produktu:
   - Zmień font-weight na 600
   - Ustaw kolor na #1a1a1a

4. Preview na mobile:
   - Zmniejsz padding na mobile do 16px
   - Zmień layout na vertical

5. Save → automatyczny commit do GitHub

Praktyczne przykłady

Blog Platform z CMS

Code
TEXT
Prompt: "Build a blog platform with admin panel for content management.

Features:
- Public blog with posts list and detail pages
- Admin panel with WYSIWYG editor
- Categories and tags
- Featured posts
- SEO metadata per post
- Draft/published status
- Scheduled publishing

Design:
- Clean, typography-focused
- Reading time estimates
- Related posts
- Dark mode
- Newsletter signup"

Wygenerowana struktura:

Code
TEXT
blog-platform/
├── src/
│   ├── components/
│   │   ├── blog/
│   │   │   ├── PostCard.tsx
│   │   │   ├── PostContent.tsx
│   │   │   ├── PostMeta.tsx
│   │   │   ├── RelatedPosts.tsx
│   │   │   └── Newsletter.tsx
│   │   ├── admin/
│   │   │   ├── PostEditor.tsx      # WYSIWYG editor
│   │   │   ├── PostList.tsx
│   │   │   ├── MediaLibrary.tsx
│   │   │   └── SEOFields.tsx
│   │   └── layout/
│   │       ├── Header.tsx
│   │       ├── Footer.tsx
│   │       └── Sidebar.tsx
│   ├── pages/
│   │   ├── index.tsx               # Blog home
│   │   ├── posts/[slug].tsx        # Post detail
│   │   ├── category/[slug].tsx     # Category archive
│   │   └── admin/
│   │       ├── index.tsx           # Admin dashboard
│   │       ├── posts/index.tsx     # Posts list
│   │       ├── posts/new.tsx       # Create post
│   │       └── posts/[id].tsx      # Edit post
│   ├── hooks/
│   │   ├── usePosts.ts
│   │   ├── useCategories.ts
│   │   └── useAdmin.ts
│   └── lib/
│       ├── supabase.ts
│       └── markdown.ts
└── supabase/
    └── migrations/
        ├── 001_posts.sql
        ├── 002_categories.sql
        └── 003_tags.sql

Marketplace z płatnościami

Code
TEXT
Prompt: "Build a marketplace for digital products (templates, icons, fonts).

Features:
- Product listings with categories
- Seller profiles and stores
- Shopping cart and checkout
- Digital file delivery after purchase
- Seller dashboard with analytics
- Review and rating system
- Search with filters

Integrations:
- Supabase for data and auth
- Stripe for payments (mock for development)
- Cloudinary for file storage

Design:
- Modern, creative marketplace look
- Grid layouts for products
- Product previews
- Responsive design"
Code
TypeScript
// Przykład: Product checkout flow
// src/hooks/useCheckout.ts
import { useState } from 'react'
import { supabase } from '@/lib/supabase'
import { useAuth } from './useAuth'

interface CartItem {
  productId: string
  price: number
  sellerId: string
}

export function useCheckout() {
  const { user } = useAuth()
  const [loading, setLoading] = useState(false)

  const checkout = async (items: CartItem[]) => {
    if (!user) throw new Error('Must be logged in')

    setLoading(true)

    try {
      // 1. Create order
      const { data: order, error: orderError } = await supabase
        .from('orders')
        .insert({
          user_id: user.id,
          total: items.reduce((sum, item) => sum + item.price, 0),
          status: 'pending',
        })
        .select()
        .single()

      if (orderError) throw orderError

      // 2. Create order items
      const orderItems = items.map((item) => ({
        order_id: order.id,
        product_id: item.productId,
        price: item.price,
        seller_id: item.sellerId,
      }))

      const { error: itemsError } = await supabase
        .from('order_items')
        .insert(orderItems)

      if (itemsError) throw itemsError

      // 3. Create Stripe checkout session (mock)
      const response = await fetch('/api/create-checkout-session', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ orderId: order.id }),
      })

      const { sessionUrl } = await response.json()

      // 4. Redirect to Stripe
      window.location.href = sessionUrl
    } finally {
      setLoading(false)
    }
  }

  return { checkout, loading }
}

SaaS z subscription

Code
TEXT
Prompt: "Build a SaaS application for expense tracking with team features.

Features:
- User authentication with email and Google
- Personal and team workspaces
- Expense logging with categories
- Receipt photo upload
- Monthly/yearly reports with charts
- Export to CSV/PDF
- Subscription tiers (Free, Pro, Team)
- Billing management

Tiers:
- Free: 50 expenses/month, 1 user
- Pro ($10/mo): Unlimited expenses, reports, 1 user
- Team ($25/mo): Everything + 5 users, shared workspaces

Design:
- Professional, trustworthy look
- Dashboard-focused
- Quick expense entry
- Mobile-friendly for on-the-go logging"
Code
TypeScript
// Przykład: Subscription management
// src/hooks/useSubscription.ts
import { useAuth } from './useAuth'
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
import { supabase } from '@/lib/supabase'

type SubscriptionTier = 'free' | 'pro' | 'team'

interface Subscription {
  id: string
  user_id: string
  tier: SubscriptionTier
  status: 'active' | 'canceled' | 'past_due'
  current_period_end: string
  stripe_subscription_id: string | null
}

export function useSubscription() {
  const { user } = useAuth()
  const queryClient = useQueryClient()

  const { data: subscription, isLoading } = useQuery({
    queryKey: ['subscription', user?.id],
    queryFn: async () => {
      const { data, error } = await supabase
        .from('subscriptions')
        .select('*')
        .eq('user_id', user!.id)
        .single()

      if (error && error.code !== 'PGRST116') throw error
      return data as Subscription | null
    },
    enabled: !!user,
  })

  const tier = subscription?.tier ?? 'free'

  const limits = {
    free: { expenses: 50, users: 1, reports: false },
    pro: { expenses: Infinity, users: 1, reports: true },
    team: { expenses: Infinity, users: 5, reports: true },
  }

  const currentLimits = limits[tier]

  const upgradeMutation = useMutation({
    mutationFn: async (newTier: SubscriptionTier) => {
      const response = await fetch('/api/create-subscription', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ tier: newTier }),
      })
      return response.json()
    },
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['subscription'] })
    },
  })

  const cancelMutation = useMutation({
    mutationFn: async () => {
      const response = await fetch('/api/cancel-subscription', {
        method: 'POST',
      })
      return response.json()
    },
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['subscription'] })
    },
  })

  return {
    subscription,
    tier,
    limits: currentLimits,
    isLoading,
    upgrade: upgradeMutation.mutate,
    cancel: cancelMutation.mutate,
    isUpgrading: upgradeMutation.isPending,
    isCanceling: cancelMutation.isPending,
  }
}

Deploy

Vercel (Rekomendowane)

Code
Bash
# Lovable automatycznie przygotowuje projekt do Vercel

# 1. Połącz GitHub repo z Vercel
# 2. Ustaw zmienne środowiskowe:
VITE_SUPABASE_URL=your-supabase-url
VITE_SUPABASE_ANON_KEY=your-anon-key

# 3. Deploy - Vercel automatycznie:
# - Wykrywa Vite
# - Buduje aplikację
# - Deployuje na edge network

Netlify

netlify.toml
TOML
# netlify.toml - automatycznie generowany
[build]
  command = "npm run build"
  publish = "dist"

[build.environment]
  NODE_VERSION = "18"

[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200

Environment Variables

.env.example
Bash
# .env.example - generowany przez Lovable

# Supabase
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key

# Optional: Stripe (for payments)
VITE_STRIPE_PUBLIC_KEY=pk_test_...
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...

# Optional: Analytics
VITE_POSTHOG_KEY=phc_...

Cennik Lovable (2025)

Plan Free

Cena: $0/miesiąc

Zawiera:

  • 5 generacji/miesiąc
  • Publiczne projekty
  • Community support
  • Basic export

Plan Starter

Cena: $20/miesiąc

Zawiera:

  • 100 generacji/miesiąc
  • Prywatne projekty
  • GitHub integration
  • Supabase integration
  • Visual Editor
  • Email support

Plan Pro

Cena: $50/miesiąc

Zawiera:

  • Nieograniczone generacje
  • Wszystko ze Starter
  • Priority generation
  • Advanced features
  • Custom domains
  • Priority support

Plan Team

Cena: Custom

Zawiera:

  • Wszystko z Pro
  • Team collaboration
  • Shared workspaces
  • Admin dashboard
  • SSO integration
  • Dedicated support

Best Practices

Efektywne promptowanie

Code
TEXT
// ✅ Dobry prompt
"Build a task management app with:
- User authentication (email + Google)
- Tasks with title, description, due date, priority
- Categories with custom colors
- Drag-and-drop between status columns
- Dark mode support

Use Supabase for backend. Design should be clean
and professional, similar to Linear or Notion."

// ❌ Słaby prompt
"Make me a task app"  // Zbyt ogólne
"Copy Notion exactly"  // Nierealistyczne
"Add everything"  // Niesprecyzowane

Iteracyjny rozwój

Code
TEXT
// Zamiast jednego wielkiego promptu:
// ❌ "Build complete e-commerce with auth, products, cart, checkout, admin, analytics..."

// Buduj inkrementalnie:
// ✅ Session 1: "Build product catalog with categories and search"
// ✅ Session 2: "Add user authentication with Supabase"
// ✅ Session 3: "Add shopping cart with persistence"
// ✅ Session 4: "Build checkout flow"
// ✅ Session 5: "Add admin panel for products"

Używanie Visual Editor

Code
TEXT
// Kiedy używać Visual Editor vs Chat:

// Visual Editor dla:
- Dostosowania kolorów i stylów
- Zmiany layoutu i spacing
- Poprawki responsive design
- Drobne korekty wizualne

// Chat dla:
- Nowych funkcjonalności
- Logiki biznesowej
- Integracji z API
- Złożonych zmian strukturalnych

FAQ - Najczęściej zadawane pytania

Czy mogę eksportować kod i rozwijać lokalnie?

Tak! Lovable generuje standardowy kod React/TypeScript. Możesz:

  1. Sklonować repo z GitHub
  2. npm install && npm run dev
  3. Kontynuować rozwój w dowolnym IDE

Jak działa integracja z Supabase?

Lovable automatycznie:

  • Tworzy projekt Supabase (lub łączy istniejący)
  • Generuje migracje bazy danych
  • Konfiguruje Row Level Security
  • Tworzy typy TypeScript
  • Implementuje hooki do pobierania danych

Czy Lovable wspiera inne bazy danych?

Obecnie Lovable natywnie wspiera tylko Supabase (PostgreSQL). Dla innych baz możesz:

  • Napisać własne integracje po eksporcie
  • Użyć Supabase jako primary i synchronizować z innymi

Jak obsługiwać płatności?

Lovable może wygenerować integrację Stripe (mock w development). Dla produkcji:

  1. Utwórz konto Stripe
  2. Dodaj klucze do environment variables
  3. Poproś Lovable o "Make Stripe integration production-ready"

Czy mogę używać własnych komponentów?

Po eksporcie tak. W Lovable możesz też poprosić o użycie specyficznych bibliotek:

  • "Use shadcn/ui for all components"
  • "Use Radix UI primitives"
  • "Use Framer Motion for animations"

Podsumowanie

Lovable to zaawansowana platforma do budowania aplikacji webowych, która wyróżnia się:

  • Profesjonalny workflow - GitHub + Supabase native
  • Visual editing - Modyfikacje bez kodowania
  • Production-ready - TypeScript, RLS, best practices
  • Flexible deploy - Vercel, Netlify, własny hosting
  • Team-ready - Collaboration i sharing

Idealne dla startupów, freelancerów i zespołów chcących szybko budować produkcyjne aplikacje.