{"id":1636,"date":"2026-04-23T14:46:55","date_gmt":"2026-04-23T14:46:55","guid":{"rendered":"https:\/\/orpot.com\/blog\/?p=1636"},"modified":"2026-04-23T14:49:44","modified_gmt":"2026-04-23T14:49:44","slug":"basecoat-componentes-tipo-shadcn-ui-pero-sin-react-ideal-para-laravel-blade-astro-y-mas","status":"publish","type":"post","link":"https:\/\/orpot.com\/blog\/basecoat-componentes-tipo-shadcn-ui-pero-sin-react-ideal-para-laravel-blade-astro-y-mas\/","title":{"rendered":"Basecoat: componentes tipo shadcn\/ui pero sin React (ideal para Laravel, Blade, Astro y m\u00e1s)"},"content":{"rendered":"<p>Si usas Tailwind, seguro ya pasaste por esto:<\/p>\n<p>Empiezas feliz con utilidades\u2026 y terminas con HTML lleno de clases imposibles de leer.<\/p>\n<p>Algo as\u00ed:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;button class=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground shadow hover:bg-primary\/90 h-9 px-4 py-2\"&gt;\r\nGuardar\r\n&lt;\/button&gt;<\/pre>\n<p>Funciona\u2026 pero mantener eso en un proyecto real es otra historia.<\/p>\n<p>Ah\u00ed es donde entra Basecoat.<\/p>\n<h3>\u00bfQu\u00e9 es Basecoat?<\/h3>\n<p>Basecoat es una librer\u00eda de componentes construida con Tailwind CSS que no depende de React ni de ning\u00fan framework espec\u00edfico.<\/p>\n<p>Su propuesta es simple:<\/p>\n<p>Tener componentes tipo shadcn\/ui, pero usando HTML limpio y clases sencillas.<\/p>\n<p>Ejemplo real:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;button class=\"btn\"&gt;Guardar&lt;\/button&gt;<\/pre>\n<p>Y listo.<\/p>\n<p>El problema que resuelve<\/p>\n<p>Hoy en d\u00eda tienes dos caminos con Tailwind:<\/p>\n<ul>\n<li>UI con clases utilitarias (Flowbite, Preline, etc.)<\/li>\n<li>Mucho copy\/paste<\/li>\n<li>HTML dif\u00edcil de leer<\/li>\n<li>Dif\u00edcil de mantener<\/li>\n<li>Componentes (shadcn\/ui)<\/li>\n<li>Excelente DX<\/li>\n<li>Sistema s\u00f3lido<\/li>\n<\/ul>\n<p>Pero depende de React<\/p>\n<p><strong>\u00bfY si est\u00e1s en Laravel, Blade, Astro, Django\u2026?<\/strong><\/p>\n<p>Ah\u00ed quedas en el limbo.<\/p>\n<h3>\u00bfPor qu\u00e9 Basecoat est\u00e1 interesante?<\/h3>\n<p>Porque llena ese hueco perfectamente:<\/p>\n<p>Sin framework obligatorio<\/p>\n<p>Funciona con:<\/p>\n<ul>\n<li>Laravel (Blade o Inertia)<\/li>\n<li>Astro<\/li>\n<li>WordPress<\/li>\n<li>Django<\/li>\n<li>Rails<\/li>\n<li>HTML puro<\/li>\n<li>HTML limpio (sin \u201cclass soup\u201d)<\/li>\n<\/ul>\n<p>En lugar de 20 clases, usas:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;input class=\"input\" type=\"text\" \/&gt;\r\n&lt;div class=\"card\"&gt;&lt;\/div&gt;\r\n&lt;button class=\"btn\"&gt;&lt;\/button&gt;<\/pre>\n<ul>\n<li>Sin JavaScript pesado<\/li>\n<li>No runtime JS<\/li>\n<li>Solo un poco de vanilla JS opcional (modales, dropdowns)<\/li>\n<\/ul>\n<p>Esto es clave si te importa rendimiento.<\/p>\n<h4>Inspirado en shadcn\/ui (pero sin React)<\/h4>\n<p>Basecoat toma lo mejor de ese enfoque:<\/p>\n<ul>\n<li>Sistema de dise\u00f1o consistente<\/li>\n<li>Theming<\/li>\n<li>Dark mode<\/li>\n<li>Componentes reutilizables<\/li>\n<\/ul>\n<p>Pero sin obligarte a cambiar tu stack.<\/p>\n<h4>\u00bfC\u00f3mo funciona?<\/h4>\n<p>Muy directo:<\/p>\n<ul>\n<li>Agregas un archivo CSS a tu proyecto Tailwind<\/li>\n<li>Usas clases como btn, card, input<\/li>\n<li>(Opcional) usas su CLI para scaffolding<\/li>\n<\/ul>\n<p>No hay magia rara.<\/p>\n<p>Ejemplo r\u00e1pido<\/p>\n<p>Antes (Tailwind puro):<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">&lt;div class=\"p-6 bg-white rounded-lg shadow-md\"&gt;\r\n&lt;h2 class=\"text-lg font-semibold mb-2\"&gt;T\u00edtulo&lt;\/h2&gt;\r\n&lt;p class=\"text-gray-600\"&gt;Contenido&lt;\/p&gt;\r\n\r\n&lt;\/div&gt;\r\n\r\nCon Basecoat:\r\n&lt;div class=\"card\"&gt;\r\n&lt;h2 class=\"card-title\"&gt;T\u00edtulo&lt;\/h2&gt;\r\nContenido\r\n\r\n&lt;\/div&gt;<\/pre>\n<p>Mucho m\u00e1s limpio, m\u00e1s legible y m\u00e1s mantenible.<\/p>\n<p>Casos donde brilla<\/p>\n<p>Esto te puede servir mucho si:<\/p>\n<ul>\n<li>Est\u00e1s trabajando con Blade en Laravel<\/li>\n<li>Usas Astro + Vue islands<\/li>\n<li>Haces landing pages r\u00e1pidas<\/li>\n<li>Quieres consistencia visual sin reinventar todo<\/li>\n<li>No quieres meter React solo por UI<\/li>\n<\/ul>\n<h4>\u00bfY comparado con otras opciones?<\/h4>\n<ul>\n<li>Flowbite \/ Preline \u2192 m\u00e1s clases, menos estructura<\/li>\n<li>Tailwind UI \u2192 bueno, pero sigue siendo copy\/paste pesado<\/li>\n<li>shadcn\/ui \u2192 excelente, pero React obligatorio<\/li>\n<\/ul>\n<p>Basecoat se posiciona justo en medio:<\/p>\n<p>Simplicidad + Estructura + Independencia de framework<\/p>\n<h4>Opini\u00f3n real<\/h4>\n<p>Basecoat no es revolucionario\u2026 pero s\u00ed muy pr\u00e1ctico.<\/p>\n<p>Y en proyectos reales eso vale m\u00e1s.<\/p>\n<p>Especialmente si trabajas con stacks como:<\/p>\n<ul>\n<li>Laravel<\/li>\n<li>HTML<\/li>\n<li>Astro<\/li>\n<li>Sistemas h\u00edbridos<\/li>\n<\/ul>\n<p>Donde meter React solo para UI no tiene sentido.<\/p>\n<p>Basecoat es una de esas herramientas que no hacen ruido, pero te ahorran tiempo todos los d\u00edas.<\/p>\n<ul>\n<li>Menos clases basura<\/li>\n<li>M\u00e1s estructura<\/li>\n<li>Mejor mantenibilidad<\/li>\n<\/ul>\n<p>Y sin casarte con ning\u00fan framework.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si usas Tailwind, seguro ya pasaste por esto: Empiezas feliz con utilidades\u2026 y terminas con&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1638,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,1],"tags":[221],"_links":{"self":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts\/1636"}],"collection":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/comments?post=1636"}],"version-history":[{"count":1,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts\/1636\/revisions"}],"predecessor-version":[{"id":1637,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts\/1636\/revisions\/1637"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/media\/1638"}],"wp:attachment":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/media?parent=1636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/categories?post=1636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/tags?post=1636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}