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
- Natywna integracja GitHub - Automatyczne commity, branching, PR-y
- Supabase out-of-the-box - Autentykacja, baza danych, storage
- Visual Editor - Edycja komponentów bez kodowania
- Profesjonalny kod - TypeScript, Tailwind, best practices
- Multi-page apps - Routing, dynamic routes, protected pages
- Deploy flexibility - Vercel, Netlify, własny hosting
Lovable vs Bolt vs v0
| Cecha | Lovable | Bolt.new | v0 by Vercel |
|---|---|---|---|
| Typ | Fullstack apps | Fullstack apps | UI components |
| Backend | Supabase (natywny) | Express/Fastify | Nie |
| Baza danych | PostgreSQL (Supabase) | SQLite | Nie |
| GitHub | Natywna integracja | Eksport | Eksport |
| Visual Editor | Tak | Nie | Nie |
| Autentykacja | Wbudowana | Ręczna | Nie |
| Deploy | Vercel/Netlify/inne | Netlify | Vercel |
| Cena (Pro) | $20/miesiąc | $20/miesiąc | $20/miesiąc |
Jak działa Lovable?
Workflow budowania aplikacji
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ójArchitektura generowanych aplikacji
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.jsonGenerowanie aplikacji
Skuteczne prompty
Szablon promptu:
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
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 backendE-commerce Platform
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 URLsProject Management Tool
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 updatesIteracyjny rozwój
// 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:
// 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
// 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
// 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:
-- 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
// 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:
// 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
// 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-responsivePull Requests
# 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 refreshVisual Editor
Edycja bez kodowania
Visual Editor pozwala modyfikować komponenty bezpośrednio:
// 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 spacingPrzykład użycia Visual Editor
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 GitHubPraktyczne przykłady
Blog Platform z CMS
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:
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.sqlMarketplace z płatnościami
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"// 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
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"// 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)
# 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 networkNetlify
# netlify.toml - automatycznie generowany
[build]
command = "npm run build"
publish = "dist"
[build.environment]
NODE_VERSION = "18"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200Environment Variables
# .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
// ✅ 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" // NiesprecyzowaneIteracyjny rozwój
// 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
// 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 strukturalnychFAQ - Najczęściej zadawane pytania
Czy mogę eksportować kod i rozwijać lokalnie?
Tak! Lovable generuje standardowy kod React/TypeScript. Możesz:
- Sklonować repo z GitHub
npm install && npm run dev- 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:
- Utwórz konto Stripe
- Dodaj klucze do environment variables
- 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.