Implementacja UI z projektów za pomocą Cursora
Designer właśnie przekazał ci plik Figma z 15 ekranami dla dashboardu SaaS. Jest nawigacja boczna, tabela danych z sortowaniem i filtrowaniem, komponent wykresu, strona ustawień z zagnieżdżonymi zakładkami i flow modala do tworzenia nowych zasobów. Projekty wyglądają dopracowane — siatka odstępów 8px, spójne tokeny kolorów, breakpointy responsywne dla mobile i tablet. Twoim zadaniem jest przekształcenie tych pikseli w produkcyjne komponenty React, które dokładnie pasują do projektów, obsługują stany ładowania, zarządzają walidacją formularzy i działają na ekranie telefonu szerokości 320px.
Cursor może widzieć obrazy. To fundamentalnie zmienia workflow tworzenia frontendu — zamiast ręcznego mierzenia wartości paddingu i zgadywania kolorów hex, wklejasz screenshot do czatu Agenta, a AI generuje komponenty, które dokładnie pasują do projektu. Poniższa technika pokazuje, jak przejść od eksportu Figma do komponentu produkcyjnego w ułamku czasu.
Co wyniesiesz
Dział zatytułowany „Co wyniesiesz”- Workflow używania screenshotów jako kontekstu w Cursor Agent do generowania komponentów dokładnych co do piksela
- Prompt systemu projektowego, który ustanawia spójne tokeny (kolory, odstępy, typografię) we wszystkich generowanych komponentach
- Technikę implementacji responsywnej używającą breakpointów Tailwind, które Agent automatycznie utrzymuje
- Prompt obsługi formularzy, który generuje walidację Zod, stany błędów i wskaźniki ładowania w jednym podejściu
- Iteracyjny proces udoskonalania do zamykania luki między UI wygenerowanym przez AI a finalnym projektem
Workflow
Dział zatytułowany „Workflow”Krok 1: Ustanów system projektowy w swoich regułach
Dział zatytułowany „Krok 1: Ustanów system projektowy w swoich regułach”Zanim wygenerujesz jakiekolwiek komponenty, zakoduj swoje tokeny projektowe, aby każdy prompt produkował spójny wynik. To najbardziej wpływowy krok dla tworzenia frontendu wspomaganego AI.
Ten plik reguł będzie automatycznie uwzględniany, gdy Agent edytuje pliki w src/components/ lub src/app/, zapewniając, że każdy wygenerowany komponent używa tych samych tokenów.
Krok 2: Generuj komponenty ze screenshotów
Dział zatytułowany „Krok 2: Generuj komponenty ze screenshotów”Cursor wspiera wejście obrazów w czacie Agenta. Zrób screenshot konkretnej sekcji swojego projektu Figma (nie całej strony — jednego komponentu na raz) i wklej go bezpośrednio do czatu.
[wklej screenshot tabeli danych z Figma]
Zaimplementuj ten komponent tabeli danych w src/components/data-table.tsx:
1. Dopasuj projekt dokładnie -- nagłówki kolumn, stylowanie wierszy, stany hover, zebra striping2. Propsy: columns (konfigurowalne), data (typ generyczny), onSort, onRowClick3. Dodaj sortowalne nagłówki kolumn ze wskaźnikami rosnąco/malejąco4. Stan ładowania: szkieletowe wiersze pasujące do szerokości kolumn5. Stan pusty: wycentrowana wiadomość z ikoną6. Responsywne: przewijanie poziome na mobile z pierwszą kolumną sticky7. Użyj naszych tokenów systemu projektowego z .cursor/rules
To jest domyślnie React Server Component. Jeśli potrzebna jest interaktywność(sortowanie, kliknięcia wierszy), wyodrębnij tylko interaktywne części do komponentu klienta.Krok 3: Obsługuj formularze z walidacją
Dział zatytułowany „Krok 3: Obsługuj formularze z walidacją”Formularze to miejsce, gdzie kod wygenerowany przez AI oszczędza najwięcej czasu — boilerplate schematów walidacji, komunikatów błędów, stanów ładowania i typów pól jest żmudny, ale mechaniczny.
Krok 4: Buduj responsywne layouty z Tailwind
Dział zatytułowany „Krok 4: Buduj responsywne layouty z Tailwind”Dla layoutów pełnych stron podaj screenshot i określ zachowanie responsywne explicite, ponieważ AI nie może wywnioskować twojego projektu mobile ze screenshotu desktop.
[wklej screenshot layoutu dashboardu z Figma]
Zbuduj layout dashboardu w src/app/dashboard/layout.tsx:
1. Desktop (lg+): stały sidebar (w-64) po lewej, główny obszar treści po prawej2. Tablet (md): zwijany sidebar, który nakłada się na treść jako sheet z lewej3. Mobile (sm): brak sidebara, dolny pasek nawigacji z 5 przyciskami ikon4. Sidebar ma: obszar logo, linki nawigacyjne z ikonami, awatar użytkownika + nazwa na dole5. Główny obszar treści ma górny pasek z: breadcrumbs, input wyszukiwania, dzwonek powiadomień, menu użytkownika6. Obszar treści przewija się niezależnie od sidebara7. Aktywny link sidebara ma wskaźnik lewej krawędzi i podświetlenie tła
Użyj responsywnych prefiksów Tailwind konsekwentnie. Przetestuj, że layout niepsuje się przy breakpointach 768px i 1024px konkretnie.Krok 5: Udoskonalaj edycjami inline
Dział zatytułowany „Krok 5: Udoskonalaj edycjami inline”Gdy początkowy komponent jest wygenerowany, użyj Cmd+K (edycja inline) do udoskonaleń wizualnych. To szybsze niż tryb Agent dla małych zmian CSS, ponieważ pętla feedbacku jest natychmiastowa.
Zaznacz konkretny JSX, który chcesz dostosować, naciśnij Cmd+K i opisz zmianę:
Luka między nagłówkiem tabeli a pierwszym wierszem jest zbyt duża. Zmniejsz ją zpy-4 do py-2 na komórkach thead i zmień tło nagłówka z gray-100na gray-50, aby było bardziej subtelne.Dla rozbieżności wizualnych, które są trudne do opisania słowami, zrób screenshot side-by-side projektu Figma i swojej implementacji, wklej go do czatu Agenta i zapytaj:
[wklej obraz porównania side-by-side]
Lewa strona to projekt Figma. Prawa strona to moja obecna implementacja.Napraw różnice -- odstępy między kartami są zbyt duże, cień jestzbyt mocny, a border radius powinien być większy.Krok 6: Dodaj stany interakcji i animacje
Dział zatytułowany „Krok 6: Dodaj stany interakcji i animacje”Warstwa finałowego polotu często jest pomijana pod presją deadline’u, ale robi ogromną różnicę w postrzeganej jakości.
Używanie serwera MCP Figma
Dział zatytułowany „Używanie serwera MCP Figma”Jeśli twój zespół intensywnie używa Figmy, serwer MCP Figma pozwala Cursorowi czytać pliki projektowe bezpośrednio zamiast polegać na screenshotach. Skonfiguruj to w .cursor/mcp.json:
{ "mcpServers": { "figma": { "command": "npx", "args": ["-y", "figma-developer-mcp"], "env": { "FIGMA_API_KEY": "twoj-klucz-api-figma" } } }}Z serwerem MCP możesz odwoływać się do frame’ów Figma przez URL:
Używając MCP Figma, przeczytaj komponent pod tym URL-em:https://www.figma.com/file/abc123/Dashboard?node-id=456
Zaimplementuj go jako komponent React zgodnie z naszymi regułami systemu projektowego.Wyodrębnij dokładne wartości kolorów, odstępów i rozmiarów czcionek z pliku projektowego.To eliminuje krok screenshota i daje Agentowi dostęp do dokładnych wartości pikseli, tokenów kolorów i odstępów, które screenshoty aproksymują.
Gdy to się psuje
Dział zatytułowany „Gdy to się psuje”Wygenerowane komponenty wyglądają podobnie, ale nie dokładnie. Screenshoty tracą drobne szczegóły przy niższych rozdzielczościach. Przytnij ciasno wokół konkretnego komponentu, użyj screenshotów Retina/2x, jeśli możliwe, i explicite określ wartości, których screenshot nie przekazuje jasno: “Border radius to 12px, cień to shadow-md, font weight to 500.”
Agent używa CSS-in-JS zamiast Tailwind. Jeśli wygenerowany kod zawiera style inline lub styled-components, twoja reguła systemu projektowego nie jest podnoszona. Zweryfikuj, że pole globs w twoim .cursor/rules/design-system.mdc pasuje do ścieżki pliku. Dodaj explicytną instrukcję: “Używaj wyłącznie klas Tailwind CSS. Bez stylów inline.”
Tryb ciemny jest zepsuty. AI czasami generuje style trybu ciemnego, które konfliktują z trybem jasnym. Używaj strategii prefiksu dark: Tailwind konsekwentnie. Dodaj regułę: “Każda klasa koloru musi mieć odpowiedni wariant dark:.” Testuj oba tryby, przełączając motyw systemowy.
Layout responsywny psuje się przy konkretnych breakpointach. AI wybiera standardowe breakpointy Tailwind (sm, md, lg), ale twój projekt może mieć niestandardowe breakpointy. Określ dokładne wartości pikseli: “Sidebar zwija się przy 1024px, nie przy domyślnym lg Tailwind (1024px jest tym samym, ale określ wymaganie explicite).” Dla nietypowych breakpointów dodaj niestandardowe wartości do tailwind.config.ts.
Komponenty są zbyt duże i robią zbyt wiele. Agent czasami generuje 300-liniowe komponenty z całą logiką inline. Odrzuć: “Ten komponent jest zbyt duży. Wyodrębnij nagłówek tabeli do osobnego komponentu, wiersz do innego, a logikę sortowania do niestandardowego hooka.”