Jak przekształcić dowolny projekt React w neobrutalizm w 10 minut
Chcesz nadać swojej nudnej aplikacji React odważną metamorfozę? Naucz się przekształcać dowolny projekt React w oszałamiający neobrutalistyczny design w zaledwie 10 minut z Neobrutalism. Poradnik krok po kroku z przykładami przed i po.
Dov Azencot
@DovAzencotBądźmy szczerzy: twoja aplikacja React prawdopodobnie wygląda jak każda inna aplikacja React. Czysta? Jasne. Profesjonalna? Zdecydowanie. Zapadająca w pamięć? Ani trochę.
Ale co, gdybym powiedział, że w zaledwie 10 minut możesz przekształcić swój generycznie wyglądający projekt w coś, co aż tryska charakterem? Coś, co sprawia, że ludzie mówią: „O rany, co to JEST?”
To właśnie siła neobrutalizmu — stylu projektowego, który jest odważny, bezkompromisowy i nie do zignorowania. A z Neobrutalism przekształcenie projektu React jest śmiesznie proste.
Weź kawę (albo energetyka, bez oceniania) i zamieńmy tę mdłą aplikację w coś z pazurem.
Co to w ogóle jest ten neobrutalizm?
Zanim zanurkujemy, dogadajmy się co do podstaw. Neobrutalizm to ruch projektowy, który czerpie inspirację z surowej, betonowej architektury brutalistycznej lat 50. i nadaje jej nowoczesny, cyfrowy sznyt.
Wyobraź sobie:
- Grube czarne ramki na wszystkim
- Twarde cienie (bez tych bzdur z miękkim rozmyciem)
- Kontrastowe kolory takie jak czerń, biel i neonowa żółć
- Zero zaokrąglonych rogów (wszystko ostre i kanciaste)
- Asymetryczne układy, które łamią siatkę
To antyperfekcjonizm. To bunt. To projektowy odpowiednik przyjścia w skórzanej kurtce na posiedzenie zarządu. I to działa.
Dlaczego Neobrutalism?
Mógłbyś budować neobrutalistyczne komponenty od zera, ale po co wyważać otwarte drzwi, skoro istnieje Neobrutalism? To biblioteka UI dla React stworzona specjalnie pod neobrutalizm, z:
- Gotowymi komponentami w tej charakterystycznej brutalnej estetyce
- Łatwą instalacją przez CLI
- Pełną personalizacją z Tailwind CSS
- Kompatybilnością z Next.js, Vite, Remix — w zasadzie z każdą konfiguracją React
Do tego jest darmowa i open source. Zaczynajmy.
Krok 1: przygotuj swój projekt (2 minuty)
Najpierw najważniejsze. Jeśli pracujesz nad istniejącym projektem React, masz już przewagę. Jeśli nie, postawmy szybko aplikację Next.js (ale zadziała to z każdym frameworkiem React).
Zgódź się na TypeScript i Tailwind CSS, gdy zostaniesz zapytany. Będziemy potrzebować obu.
Jeśli używasz Vite albo Create React App, też jest git — konfiguracja jest niemal identyczna.
Krok 2: zainstaluj Neobrutalism (1 minuta)
Teraz magia. Musimy zainicjować shadcn (Neobrutalism korzysta z niego pod spodem) i zainstalować narzędzia Neobrutalism.
Uruchom to polecenie:
Pojawi się kilka pytań. Oto co powinieneś wybrać:
- Style: Default
- Base color: Slate (nie ma to większego znaczenia, i tak to nadpiszemy)
- CSS variables: Yes
Następnie zainstaluj narzędzia Neobrutalism:
Gotowe. To wszystko. Masz teraz fundament do budowania brutalistycznych interfejsów.
Krok 3: dodaj neobrutalistyczny motyw (2 minuty)
Tu metamorfoza zaczyna się na dobre. Otwórz plik global.css (zwykle w app/globals.css albo src/index.css) i zamień zmienne motywu na charakterystyczny brutalny motyw Neobrutalism.
Wklej to do swojego CSS:
@theme {
--font-head: var(--font-head);
--font-sans: var(--font-sans);
--radius: 0;
--shadow-xs: 1px 1px 0 0 var(--border);
--shadow-sm: 2px 2px 0 0 var(--border);
--shadow: 3px 3px 0 0 var(--border);
--shadow-md: 4px 4px 0 0 var(--border);
--shadow-lg: 6px 6px 0 0 var(--border);
--shadow-xl: 10px 10px 0 1px var(--border);
--shadow-2xl: 16px 16px 0 1px var(--border);
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-border: var(--border);
}
:root {
--radius: 0;
--background: #fff;
--foreground: #000;
--primary: #ffdb33;
--primary-foreground: #000;
--secondary: #000;
--secondary-foreground: #fff;
--border: #000;
}
.dark {
--background: #1a1a1a;
--foreground: #f5f5f5;
--primary: #ffdb33;
--primary-foreground: #000;
--secondary: #3a3a3a;
--secondary-foreground: #f5f5f5;
--border: #3a3a3a;
}Co się właśnie stało?
- Wyzerowaliśmy wszystkie border-radius (koniec z zaokrąglonymi rogami)
- Zamieniliśmy miękkie cienie na twarde, przesunięte
- Ustawiliśmy odważny schemat kolorów czerń/biel/żółć
- Dodaliśmy obsługę trybu ciemnego (bo nie jesteśmy barbarzyńcami)
Twoja aplikacja już zaczyna wyglądać inaczej. Ale to jeszcze nie koniec.
Krok 4: zainstaluj swoje pierwsze komponenty (2 minuty)
Weźmy kilka prawdziwych komponentów. Zaczniemy od podstaw: Button, Card i Input.
Uruchom te polecenia jedno po drugim:
Każdy komponent trafia do twojego folderu components/neobrutalism/, gotowy do użycia. Nie trzeba pisać ani jednej linijki CSS.
Krok 5: podmień swoje komponenty (2 minuty)
Teraz zaczyna się przyjemna część — zastąpienie starych, nudnych komponentów nowymi, brutalnymi.
Przed:
// Your old, generic button
<button className="bg-blue-500 text-white px-4 py-2 rounded">
Click Me
</button>Po:
import { Button } from "@/components/neobrutalism/Button";
<Button>Click Me</Button>Ot tak, masz przycisk z grubymi czarnymi ramkami, twardym cieniem i tym charakterystycznym neobrutalistycznym klimatem.
Zróbmy to samo z kartą:
Przed:
<div className="bg-white shadow-lg rounded-lg p-6">
<h2 className="text-2xl font-bold">My Card</h2>
<p className="text-gray-600">Some generic content here.</p>
</div>Po:
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/neobrutalism/Card";
<Card>
<CardHeader>
<CardTitle>My Card</CardTitle>
<CardDescription>Now with 100% more attitude.</CardDescription>
</CardHeader>
<CardContent>
Some bold content here.
</CardContent>
</Card>Ta sama struktura, zupełnie inny klimat. Karta ma teraz ostre krawędzie, grube ramki i twardy cień, który sprawia, że wyskakuje ze strony.
Krok 6: dodaj neobrutalistyczne czcionki (1 minuta)
W neobrutalizmie typografia jest OGROMNA. Domyślne czcionki systemowe nie wystarczą. Neobrutalism poleca Archivo Black do nagłówków i Space Grotesk do tekstu głównego.
Jeśli używasz Next.js, dodaj to do swojego app/layout.tsx:
import { Archivo_Black, Space_Grotesk } from "next/font/google";
const archivoBlack = Archivo_Black({
subsets: ["latin"],
weight: "400",
variable: "--font-head",
display: "swap",
});
const spaceGrotesk = Space_Grotesk({
subsets: ["latin"],
weight: "400",
variable: "--font-sans",
display: "swap",
});
export default function RootLayout({ children }) {
return (
<html lang="en">
<body className={`${archivoBlack.variable} ${spaceGrotesk.variable}`}>
{children}
</body>
</html>
);
}Teraz twoje nagłówki są masywne i mocne, a tekst główny pozostaje czysty i czytelny.
Krok 7: dopracuj i dostosuj (opcjonalnie)
Na tym etapie w zasadzie skończyłeś, ale jeśli chcesz dostosować głębiej, Neobrutalism to ułatwia.
Chcesz inny kolor akcentowy? Zmień zmienną --primary w swoim CSS.
:root {
--primary: #ff006e; /* Hot pink instead of yellow */
}Chcesz łagodniejsze cienie? Dostosuj zmienne cieni.
--shadow: 2px 2px 0 0 var(--border); /* Smaller offset */Chcesz dodać więcej komponentów? Zajrzyj do pełnej biblioteki na neobrutalism.com/docs/components. Są tam inputy, badge'e, dialogi, tabele i więcej — wszystko w tej brutalnej estetyce.
Przed i po: metamorfoza
Dobra, zobaczmy różnicę. Oto jak wygląda prosta landing page przed i po neobrutalistycznej konwersji.
Przed: generyczna aplikacja React
export default function GenericLanding() {
return (
<div className="min-h-screen bg-gray-50 flex items-center justify-center">
<div className="max-w-md bg-white shadow-lg rounded-lg p-8">
<h1 className="text-3xl font-bold text-gray-900 mb-4">
Welcome to My App
</h1>
<p className="text-gray-600 mb-6">
This is a clean, minimal design that looks like every other React app.
</p>
<input
type="email"
placeholder="Enter your email"
className="w-full px-4 py-2 border border-gray-300 rounded mb-4"
/>
<button className="w-full bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">
Get Started
</button>
</div>
</div>
);
}Co jest z tym nie tak?
Technicznie nic. Jest funkcjonalna. Jest czysta. Ale jest też całkowicie zapominalna. Gdybyś pokazał to 100 osobom, pomyliłyby ją z tuzinem innych stron widzianych w tym tygodniu.
Po: neobrutalistyczna metamorfoza
import { Button } from "@/components/neobrutalism/Button";
import { Card, CardHeader, CardTitle, CardContent } from "@/components/neobrutalism/Card";
import { Input } from "@/components/neobrutalism/Input";
export default function BrutalLanding() {
return (
<div className="min-h-screen bg-[#ffdb33] flex items-center justify-center p-4">
<Card className="max-w-md w-full">
<CardHeader>
<CardTitle className="text-4xl font-head uppercase">
Welcome to My App
</CardTitle>
</CardHeader>
<CardContent className="space-y-4">
<p className="text-lg font-sans">
This is a bold, memorable design that actually stands out.
</p>
<Input type="email" placeholder="Enter your email" />
<Button className="w-full">Get Started</Button>
</CardContent>
</Card>
</div>
);
}Co się zmieniło?
- Tło: przeszło z nudnego szarego na elektryzującą żółć
- Typografia: mocny nagłówek wielkimi literami z Archivo Black
- Ramki: wszystko ma grube czarne ramki
- Cienie: twarde, przesunięte zamiast miękkich rozmyć
- Rogi: zero border-radius — ostre i kanciaste
- Klimat: z „korporacyjnej broszury” na „niezależny startup z pazurem”
To ta sama struktura komponentów, ten sam układ, ale wrażenie jest zupełnie inne. Tę stronę ludzie zapamiętają.
Kolejny przykład: widget dashboardu
Spójrzmy na bardziej złożony przykład — kartę statystyk dashboardu.
Przed: mdły dashboard
export default function GenericStats() {
return (
<div className="grid grid-cols-3 gap-4">
<div className="bg-white rounded-lg shadow p-6">
<p className="text-gray-500 text-sm">Total Users</p>
<p className="text-3xl font-bold text-gray-900">1,284</p>
<p className="text-green-500 text-sm">+12% from last month</p>
</div>
<div className="bg-white rounded-lg shadow p-6">
<p className="text-gray-500 text-sm">Revenue</p>
<p className="text-3xl font-bold text-gray-900">$52,340</p>
<p className="text-green-500 text-sm">+8% from last month</p>
</div>
<div className="bg-white rounded-lg shadow p-6">
<p className="text-gray-500 text-sm">Active Now</p>
<p className="text-3xl font-bold text-gray-900">127</p>
<p className="text-red-500 text-sm">-3% from last hour</p>
</div>
</div>
);
}Po: brutalny dashboard
import { Card, CardContent } from "@/components/neobrutalism/Card";
export default function BrutalStats() {
return (
<div className="grid grid-cols-3 gap-6">
<Card className="bg-[#ffdb33]">
<CardContent className="pt-6">
<p className="text-sm font-bold uppercase mb-2">Total Users</p>
<p className="text-5xl font-head mb-2">1,284</p>
<p className="text-sm font-bold">▲ 12% from last month</p>
</CardContent>
</Card>
<Card className="bg-white">
<CardContent className="pt-6">
<p className="text-sm font-bold uppercase mb-2">Revenue</p>
<p className="text-5xl font-head mb-2">$52,340</p>
<p className="text-sm font-bold">▲ 8% from last month</p>
</CardContent>
</Card>
<Card className="bg-black text-white">
<CardContent className="pt-6">
<p className="text-sm font-bold uppercase mb-2">Active Now</p>
<p className="text-5xl font-head mb-2">127</p>
<p className="text-sm font-bold">▼ 3% from last hour</p>
</CardContent>
</Card>
</div>
);
}Co jest inne?
- Color blocking: każda karta ma osobne tło (żółć, biel, czerń)
- Mocna typografia: liczby są ogromne i używają czcionki display
- Wysoki kontrast: biały tekst na czerni tworzy natychmiastową hierarchię wizualną
- Etykiety wielkimi literami: sprawiają, że wszystko wydaje się bardziej przemyślane i mocne
- Strzałki zamiast koloru: używa symboli ▲ i ▼ dla przejrzystości
Te same dane, radykalnie inna prezentacja. Brutalna wersja wydaje się pewna siebie i zaprojektowana, a nie tylko poskładana.
Wskazówki pro do neobrutalistycznego projektowania
Skoro masz już opanowane podstawy, oto kilka wskazówek, żeby naprawdę trafić w tę estetykę:
1. Przyjmij asymetrię
Nie bój się łamać siatki. Przesuwaj elementy, nakładaj ramki, pozwól rzeczom oddychać nierówno. Perfekcja jest nudna.
2. Używaj koloru z rozmysłem
Neobrutalizm uwielbia kontrastowe zestawienia kolorów. Czerń i biel jako baza, a potem dodaj jeden lub dwa kolory akcentowe (żółć, róż, cyjan). Nie idź w tęczę — wybierz klimat i się go trzymaj.
3. Idź na całość z typografią
Nagłówki powinny być OGROMNE. Tekst główny może być normalny, ale twoje H1 mają przyciągać uwagę. Używaj mocnych, wielkich liter, gdy chcesz coś zamanifestować.
4. Dodawaj mikrointerakcje
Brutal nie znaczy statyczny. Dodawaj efekty hover, w których przyciski lekko się przesuwają albo cienie się powiększają. Trzymaj je subtelne, ale zauważalne.
<Button className="hover:translate-x-1 hover:translate-y-1 transition-transform">
Click Me
</Button>5. Nie przesadzaj
Nie każdy element potrzebuje grubej ramki. Nie każda sekcja potrzebuje jaskrawego tła. Równowaga wciąż ma znaczenie — tylko przechylona w stronę odwagi.
Co robić dalej
Gratulacje. Właśnie zrobiłeś swojemu projektowi React kompletny lifting wizualny w jakieś 10 minut. Oto co możesz zrobić stąd:
Odkryj więcej komponentów
Neobrutalism ma pełną bibliotekę komponentów — badge'e, dialogi, tabele, zakładki i więcej. Zajrzyj do dokumentacji komponentów i zobacz, co jeszcze możesz dodać.
Dostosuj swój motyw
Pobaw się zmiennymi CSS, żeby pasowały do twojej marki. Zmień kolory akcentowe, dostrój intensywność cieni albo popraw odstępy, żeby uczynić go swoim.
Zbuduj coś fajnego
Skoro twoja aplikacja nie wygląda już generycznie, pochwal się nią. Udostępnij ją na Twitterze, wrzuć na Reddit, dodaj do portfolio. Neobrutalizm przyciąga uwagę.
Dołącz do społeczności
Neobrutalism ma aktywny Discord, gdzie projektanci i programiści dzielą się projektami, zadają pytania i pasjonują się brutalnym designem. Wpadnij i się przywitaj.
Przemyślenia na koniec
Większość aplikacji React wygląda tak samo, bo większość programistów sięga po te same narzędzia — Material UI, Bootstrap, shadcn z domyślnymi ustawieniami. Nie ma w nich nic złego (są świetne), ale nie pomogą ci się wyróżnić.
Neobrutalizm to skrót do charakteru. Jest odważny, zapadający w pamięć i zaskakująco łatwy do wdrożenia z odpowiednimi narzędziami. Neobrutalism daje ci wszystko, czego potrzebujesz, żeby przejść na nowy styl bez przebudowywania od zera.
W zaledwie 10 minut przeszedłeś z „kolejnej aplikacji React” do „chwila, co to JEST?”. I szczerze? To potężna rzecz.
Więc śmiało — spraw, żeby twojej aplikacji nie dało się zignorować.
A teraz wyjdź w świat i zbuduj coś brutalnego. 🚀