diff --git a/apps/next/src/app/(home)/page.tsx b/apps/next/src/app/(home)/page.tsx
index 9138eac2abf071ce72c02eae4b041d17d092c033..f94edc4d52a0ffaaf1ef07b64f162fcd4b70bd55 100644
--- a/apps/next/src/app/(home)/page.tsx
+++ b/apps/next/src/app/(home)/page.tsx
@@ -24,16 +24,16 @@ import { Suspense } from "react";
 export default function HomePage() {
   return (
     <main className="container mx-auto px-4 py-12">
-      <h1 className="text-4xl md:text-6xl font-bold text-center mb-4">
+      <h1 className="mb-4 text-center text-4xl font-bold md:text-6xl">
         Build context-augmented web apps using
         <br /> <span className="text-blue-500">LlamaIndex.TS</span>
       </h1>
-      <p className="text-xl text-center text-fd-muted-foreground mb-12 ">
+      <p className="text-fd-muted-foreground mb-12 text-center text-xl">
         LlamaIndex.TS is the JS/TS version of{" "}
         <a href="https://llamaindex.ai">LlamaIndex</a>, the framework for
         building agentic generative AI applications connected to your data.
       </p>
-      <div className="text-center text-lg text-fd-muted-foreground mb-12">
+      <div className="text-fd-muted-foreground mb-12 text-center text-lg">
         <span>Designed for building web applications in </span>
         <Supports />
       </div>
@@ -149,13 +149,13 @@ await agent.chat('...');`}
         >
           <div className="mt-8 flex flex-col gap-8">
             <div>
-              <h3 className="text-lg font-semibold text-fd-muted-foreground mb-2">
+              <h3 className="text-fd-muted-foreground mb-2 text-lg font-semibold">
                 LLMs
               </h3>
               <InfiniteLLMProviders />
             </div>
             <div>
-              <h3 className="text-lg font-semibold text-fd-muted-foreground mb-2">
+              <h3 className="text-fd-muted-foreground mb-2 text-lg font-semibold">
                 Vector Stores
               </h3>
               <InfiniteVectorStoreProviders />
diff --git a/apps/next/src/app/docs/layout.tsx b/apps/next/src/app/docs/layout.tsx
index 7d2f6ae7404cc39db3843527e909c0df50d5f921..1bad047a5f45fcb475d7da90814fa18482897793 100644
--- a/apps/next/src/app/docs/layout.tsx
+++ b/apps/next/src/app/docs/layout.tsx
@@ -22,7 +22,7 @@ export default function Layout({ children }: { children: ReactNode }) {
                 variant: "secondary",
                 size: "xs",
                 className:
-                  "md:flex-1 px-2 ms-2 gap-1.5 text-fd-muted-foreground rounded-full",
+                  "text-fd-muted-foreground ms-2 gap-1.5 rounded-full px-2 md:flex-1",
               }),
             )}
           >
diff --git a/apps/next/src/app/layout.tsx b/apps/next/src/app/layout.tsx
index 4a975ed23f6f7980b2c253b0ce2f35a80c7091f5..b0add1314ffb22a15707252e14c4a2fce2cec189 100644
--- a/apps/next/src/app/layout.tsx
+++ b/apps/next/src/app/layout.tsx
@@ -32,7 +32,7 @@ export default function Layout({ children }: { children: ReactNode }) {
           href="/favicon-16x16.png"
         />
       </head>
-      <body className="flex flex-col min-h-screen">
+      <body className="flex min-h-screen flex-col">
         <TooltipProvider>
           <AIProvider>
             <RootProvider>{children}</RootProvider>
diff --git a/apps/next/src/components/ai-chat.tsx b/apps/next/src/components/ai-chat.tsx
index aedded68b6a3b7ccf8f7aa06b33ecc881a8540c9..b536fd0649f25c5fab24a0459acf2832129ab7ff 100644
--- a/apps/next/src/components/ai-chat.tsx
+++ b/apps/next/src/components/ai-chat.tsx
@@ -45,13 +45,13 @@ export const AITrigger = (props: AITriggerProps) => {
     <Dialog>
       <DialogTrigger {...props} />
       <DialogPortal>
-        <DialogOverlay className="fixed inset-0 z-50 bg-fd-background/50 backdrop-blur-sm data-[state=closed]:animate-fd-fade-out data-[state=open]:animate-fd-fade-in" />
+        <DialogOverlay className="bg-fd-background/50 data-[state=closed]:animate-fd-fade-out data-[state=open]:animate-fd-fade-in fixed inset-0 z-50 backdrop-blur-sm" />
         <DialogContent
           onOpenAutoFocus={(e) => {
             document.getElementById("nd-ai-input")?.focus();
             e.preventDefault();
           }}
-          className="fixed left-1/2 z-50 my-[5vh] flex max-h-[90dvh] w-[98vw] max-w-[860px] origin-left -translate-x-1/2 flex-col rounded-lg border bg-fd-popover text-fd-popover-foreground shadow-lg focus-visible:outline-none data-[state=closed]:animate-fd-dialog-out data-[state=open]:animate-fd-dialog-in"
+          className="bg-fd-popover text-fd-popover-foreground data-[state=closed]:animate-fd-dialog-out data-[state=open]:animate-fd-dialog-in fixed left-1/2 z-50 my-[5vh] flex max-h-[90dvh] w-[98vw] max-w-[860px] origin-left -translate-x-1/2 flex-col rounded-lg border shadow-lg focus-visible:outline-none"
         >
           <DialogHeader>
             <DialogTitle className="sr-only">Search AI</DialogTitle>
@@ -67,11 +67,11 @@ export const AITrigger = (props: AITriggerProps) => {
               </AlertDescription>
             </Alert>
           </DialogHeader>
-          <div className="overflow-scroll flex-grow mt-4">
+          <div className="mt-4 flex-grow overflow-scroll">
             <ChatList messages={messages} />
           </div>
           <form
-            className="px-4 py-2 space-y-4"
+            className="space-y-4 px-4 py-2"
             action={async () => {
               const value = inputValue.trim();
               setInputValue("");
@@ -102,7 +102,7 @@ export const AITrigger = (props: AITriggerProps) => {
               }
             }}
           >
-            <div className="flex flex-row w-full items-center gap-2">
+            <div className="flex w-full flex-row items-center gap-2">
               <Textarea
                 tabIndex={0}
                 placeholder="Ask AI about documentation."
diff --git a/apps/next/src/components/contribution.tsx b/apps/next/src/components/contribution.tsx
index c5a76445c7f2d27a659b17850db887a40ad8e6a4..9321397a79a139c4cc7eb8ddc024fa4dba6a0bbd 100644
--- a/apps/next/src/components/contribution.tsx
+++ b/apps/next/src/components/contribution.tsx
@@ -10,7 +10,7 @@ export function Contributing(): ReactElement {
       <h2 className="mb-4 text-xl font-semibold sm:text-2xl">
         Made possible by you <Heart className="inline align-middle" />
       </h2>
-      <p className="mb-4 text-fd-muted-foreground">
+      <p className="text-fd-muted-foreground mb-4">
         LlamaIndex.TS is powered by the open source community.
       </p>
       <div className="mb-8 flex flex-row items-center gap-2">
diff --git a/apps/next/src/components/contributor-count.tsx b/apps/next/src/components/contributor-count.tsx
index de55f0860af0fc6286458420b417a0be2078166c..19db670454a0de9e9a8f131e48475a45616b752a 100644
--- a/apps/next/src/components/contributor-count.tsx
+++ b/apps/next/src/components/contributor-count.tsx
@@ -33,7 +33,7 @@ export default async function ContributorCounter({
             href={`https://github.com/${contributor.login}`}
             rel="noreferrer noopener"
             target="_blank"
-            className="size-10 overflow-hidden rounded-full border-4 border-fd-background bg-fd-background md:-mr-4 md:size-12"
+            className="border-fd-background bg-fd-background size-10 overflow-hidden rounded-full border-4 md:-mr-4 md:size-12"
             style={{
               zIndex: topContributors.length - i,
             }}
@@ -48,7 +48,7 @@ export default async function ContributorCounter({
           </a>
         ))}
         {displayCount < contributors.length ? (
-          <div className="size-12 content-center rounded-full bg-fd-secondary text-center">
+          <div className="bg-fd-secondary size-12 content-center rounded-full text-center">
             +{contributors.length - displayCount}
           </div>
         ) : null}
diff --git a/apps/next/src/components/create-app-animation.tsx b/apps/next/src/components/create-app-animation.tsx
index 8a13c04bd4d80c0fa513ec8fc48f4b82ba59505e..a011ec6cf2ba0fed0c0da93d4adb86538f24e4f7 100644
--- a/apps/next/src/components/create-app-animation.tsx
+++ b/apps/next/src/components/create-app-animation.tsx
@@ -83,7 +83,7 @@ export function CreateAppAnimation(): React.ReactElement {
       }}
     >
       {tick > timeWindowOpen && (
-        <LaunchAppWindow className="absolute bottom-5 right-4 z-10 animate-in fade-in slide-in-from-top-10" />
+        <LaunchAppWindow className="animate-in fade-in slide-in-from-top-10 absolute bottom-5 right-4 z-10" />
       )}
       <pre className="overflow-hidden rounded-xl border text-xs">
         <div className="flex flex-row items-center gap-2 border-b px-4 py-2">
@@ -92,7 +92,7 @@ export function CreateAppAnimation(): React.ReactElement {
           <div className="grow" />
           <div className="size-2 rounded-full bg-red-400" />
         </div>
-        <div className="min-h-[200px] bg-gradient-to-b from-fd-secondary [mask-image:linear-gradient(to_bottom,white,transparent)]">
+        <div className="from-fd-secondary min-h-[200px] bg-gradient-to-b [mask-image:linear-gradient(to_bottom,white,transparent)]">
           <code className="grid p-4">{lines}</code>
         </div>
       </pre>
@@ -103,7 +103,7 @@ export function CreateAppAnimation(): React.ReactElement {
 function UserMessage({ children }: { children: ReactNode }) {
   return (
     <div className="group relative flex items-start">
-      <div className="flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm bg-background">
+      <div className="bg-background flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm">
         <IconUser />
       </div>
       <div className="ml-4 flex-1 space-y-2 overflow-hidden px-1">
@@ -122,7 +122,7 @@ function BotMessage({
 }) {
   return (
     <div className={cn("group relative flex items-start", className)}>
-      <div className="flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm bg-primary text-primary-foreground">
+      <div className="bg-primary text-primary-foreground flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm">
         <IconAI />
       </div>
       <div className="ml-4 flex-1 space-y-2 overflow-hidden px-1">
@@ -164,7 +164,7 @@ export function ChatExample() {
 
   return (
     <div className="max-w-64">
-      <div className="flex flex-col px-4 gap-2">
+      <div className="flex flex-col gap-2 px-4">
         {userMessageLength === userMessageFull.length && (
           <UserMessage>
             <span>{userMessageFull}</span>
@@ -204,11 +204,11 @@ function LaunchAppWindow(
     <div
       {...props}
       className={cn(
-        "overflow-hidden rounded-md border bg-fd-background shadow-xl",
+        "bg-fd-background overflow-hidden rounded-md border shadow-xl",
         props.className,
       )}
     >
-      <div className="relative flex h-6 flex-row items-center border-b bg-fd-muted px-4 text-xs text-fd-muted-foreground">
+      <div className="bg-fd-muted text-fd-muted-foreground relative flex h-6 flex-row items-center border-b px-4 text-xs">
         <p className="absolute inset-x-0 text-center">localhost:8080</p>
       </div>
       <div className="p-4 text-sm">
diff --git a/apps/next/src/components/demo/code-node-parser.tsx b/apps/next/src/components/demo/code-node-parser.tsx
index 4f66a3ccef50d4f19d8f1b3fd8f57d53b72cf3f8..529a31aaf0b0ecfc8cafdeb259bf8b3471d32af5 100644
--- a/apps/next/src/components/demo/code-node-parser.tsx
+++ b/apps/next/src/components/demo/code-node-parser.tsx
@@ -57,7 +57,7 @@ export const IDE = () => {
   const maxChars = useSlider();
   const useSetMaxChars = useSetSlider();
   return (
-    <div className="flex flex-col p-4 border-r max-h-96 overflow-scroll">
+    <div className="flex max-h-96 flex-col overflow-scroll border-r p-4">
       <div>
         <Label>Max Chars {maxChars}</Label>
         <Slider
@@ -113,7 +113,7 @@ const Preview = ({ text }: { text: string }) => {
       },
     },
   });
-  return <CodeBlock className="py-0 m-2">{rendered}</CodeBlock>;
+  return <CodeBlock className="m-2 py-0">{rendered}</CodeBlock>;
 };
 
 function ScrollToBottom() {
@@ -122,7 +122,7 @@ function ScrollToBottom() {
   return (
     !isAtBottom && (
       <button
-        className="absolute i-ph-arrow-circle-down-fill text-4xl rounded-lg left-[50%] translate-x-[-50%] bottom-0"
+        className="i-ph-arrow-circle-down-fill absolute bottom-0 left-[50%] translate-x-[-50%] rounded-lg text-4xl"
         onClick={() => scrollToBottom()}
       />
     )
@@ -136,7 +136,7 @@ export const NodePreview = () => {
   const textChunks = useMemo(() => parser.splitText(code), [code, maxChars]);
   return (
     <StickToBottom
-      className="block relative max-h-96 overflow-scroll"
+      className="relative block max-h-96 overflow-scroll"
       resize="smooth"
       initial="smooth"
     >
@@ -154,7 +154,7 @@ export const CodeNodeParserDemo = () => {
   const isClient = useIsClient();
   if (!isClient) {
     return (
-      <div className="my-2 grid grid-cols-1 md:grid-cols-2 gap-2 border rounded-xl w-full max-h-96">
+      <div className="my-2 grid max-h-96 w-full grid-cols-1 gap-2 rounded-xl border md:grid-cols-2">
         <Skeleton className="h-96" />
         <Skeleton className="h-96" />
       </div>
@@ -165,13 +165,13 @@ export const CodeNodeParserDemo = () => {
       <CodeProvider>
         <Suspense
           fallback={
-            <div className="my-2 grid grid-cols-1 md:grid-cols-2 gap-2 border rounded-xl w-full max-h-96">
+            <div className="my-2 grid max-h-96 w-full grid-cols-1 gap-2 rounded-xl border md:grid-cols-2">
               <Skeleton className="h-96" />
               <Skeleton className="h-96" />
             </div>
           }
         >
-          <div className="my-2 grid grid-cols-1 md:grid-cols-2 gap-2 border rounded-xl w-full max-h-96">
+          <div className="my-2 grid max-h-96 w-full grid-cols-1 gap-2 rounded-xl border md:grid-cols-2">
             <IDE />
             <NodePreview />
           </div>
diff --git a/apps/next/src/components/demo/workflow-streaming-ui.tsx b/apps/next/src/components/demo/workflow-streaming-ui.tsx
index f7b02a2cef7fa5babd8617af3f875f0ddbb79b16..2cb9fe8bf2ace3f1547ebd86d8fc99193bf483ba 100644
--- a/apps/next/src/components/demo/workflow-streaming-ui.tsx
+++ b/apps/next/src/components/demo/workflow-streaming-ui.tsx
@@ -75,7 +75,7 @@ function ScrollToBottom() {
   return (
     !isAtBottom && (
       <button
-        className="absolute i-ph-arrow-circle-down-fill text-4xl rounded-lg left-[50%] translate-x-[-50%] bottom-0"
+        className="i-ph-arrow-circle-down-fill absolute bottom-0 left-[50%] translate-x-[-50%] rounded-lg text-4xl"
         onClick={() => scrollToBottom()}
       />
     )
@@ -91,9 +91,9 @@ export function WorkflowStreamingDemo() {
   const [total, setTotal] = useState<number>(10);
 
   return (
-    <div className="flex flex-col items-start w-full gap-2">
-      <div className="flex flex-row justify-center items-center">
-        <div className="text-lg mr-2">Compute total</div>{" "}
+    <div className="flex w-full flex-col items-start gap-2">
+      <div className="flex flex-row items-center justify-center">
+        <div className="mr-2 text-lg">Compute total</div>{" "}
         <FlowInput value={total} onChange={(value) => setTotal(value)} />
       </div>
       <Button
@@ -141,7 +141,7 @@ export function WorkflowStreamingDemo() {
       >
         Start Workflow
       </Button>
-      <StickToBottom className="w-full flex flex-col gap-2 p-2 border border-gray-200 rounded-lg max-h-96 overflow-y-auto">
+      <StickToBottom className="flex max-h-96 w-full flex-col gap-2 overflow-y-auto rounded-lg border border-gray-200 p-2">
         <StickToBottom.Content className="flex flex-col gap-2">
           {ui}
         </StickToBottom.Content>
diff --git a/apps/next/src/components/feature.tsx b/apps/next/src/components/feature.tsx
index b2f9e7d0abe5d233758917ba655e0d26207a994a..ef0bb8ecb55f41f3f1539ed483072d429ee80a08 100644
--- a/apps/next/src/components/feature.tsx
+++ b/apps/next/src/components/feature.tsx
@@ -20,7 +20,7 @@ export function Feature({
       className={cn("border-l border-t px-6 py-12 md:py-16", className)}
       {...props}
     >
-      <div className="mb-4 inline-flex items-center gap-2 text-sm font-medium text-fd-muted-foreground">
+      <div className="text-fd-muted-foreground mb-4 inline-flex items-center gap-2 text-sm font-medium">
         <Icon className="size-4" />
         <p>{subheading}</p>
       </div>
diff --git a/apps/next/src/components/flow-input.tsx b/apps/next/src/components/flow-input.tsx
index 6ded0a3d21c4705b68f80007bfbb256e993d9d0d..4a640a4c869d134f56e66e07495a35f0e654bf9e 100644
--- a/apps/next/src/components/flow-input.tsx
+++ b/apps/next/src/components/flow-input.tsx
@@ -60,7 +60,7 @@ export default function FlowInput({
           className={clsx(
             showCaret ? "caret-primary" : "caret-transparent",
             "spin-hide w-[1.5em] bg-transparent py-2 text-center font-[inherit] text-transparent outline-none",
-            "[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none",
+            "[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none",
           )}
           // Make sure to disable kerning, to match NumberFlow:
           style={{ fontKerning: "none" }}
diff --git a/apps/next/src/components/message.tsx b/apps/next/src/components/message.tsx
index 7f71ba3bab36b71fa23ba440152725c77c37ae9c..6205b228988c530b235f388ed0d42424cbc098e5 100644
--- a/apps/next/src/components/message.tsx
+++ b/apps/next/src/components/message.tsx
@@ -8,7 +8,7 @@ import { IconAI, IconUser } from "./ui/icons";
 export function UserMessage({ children }: { children: ReactNode }) {
   return (
     <div className="group relative flex items-start">
-      <div className="flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm bg-background">
+      <div className="bg-background flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm">
         <IconUser />
       </div>
       <div className="ml-4 flex-1 space-y-2 overflow-hidden px-1">
@@ -54,7 +54,7 @@ export function BotCard({
     <div className="group relative flex items-start md:-ml-12">
       <div
         className={cn(
-          "flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm bg-primary text-primary-foreground",
+          "bg-primary text-primary-foreground flex h-8 w-8 shrink-0 select-none items-center justify-center rounded-md border shadow-sm",
           !showAvatar && "invisible",
         )}
       >
diff --git a/apps/next/src/components/npm-install.tsx b/apps/next/src/components/npm-install.tsx
index bfa0334e63003832d784e8a9bee745439132a118..5993401cfacc6b62de7f6b92d99e4e51f8f3f1a8 100644
--- a/apps/next/src/components/npm-install.tsx
+++ b/apps/next/src/components/npm-install.tsx
@@ -25,7 +25,7 @@ export const NpmInstall = () => {
       className="flex flex-row items-center justify-center"
     >
       <code className="mr-2">$ npm i llamaindex</code>
-      <div className="relative cursor-pointer bg-transparent w-4 h-4">
+      <div className="relative h-4 w-4 cursor-pointer bg-transparent">
         <div
           className={`absolute inset-0 transform transition-all duration-300 ${
             hasCheckIcon ? "scale-0 opacity-0" : "scale-100 opacity-100"
diff --git a/apps/next/src/components/reactbits/rotating-text.tsx b/apps/next/src/components/reactbits/rotating-text.tsx
index 92144a27f9582ac37fa0ca7ed4b07d7509764766..c1f9e0d0aecd08405c4f312e0c00c4862b2dbef1 100644
--- a/apps/next/src/components/reactbits/rotating-text.tsx
+++ b/apps/next/src/components/reactbits/rotating-text.tsx
@@ -200,7 +200,7 @@ export const RotatingText = forwardRef<RotatingTextRef, RotatingTextProps>(
     return (
       <motion.span
         className={cn(
-          "flex flex-wrap whitespace-pre-wrap relative",
+          "relative flex flex-wrap whitespace-pre-wrap",
           mainClassName,
         )}
         {...rest}
@@ -216,8 +216,8 @@ export const RotatingText = forwardRef<RotatingTextRef, RotatingTextProps>(
             key={currentTextIndex}
             className={cn(
               splitBy === "lines"
-                ? "flex flex-col w-full"
-                : "flex flex-wrap whitespace-pre-wrap relative",
+                ? "flex w-full flex-col"
+                : "relative flex flex-wrap whitespace-pre-wrap",
             )}
             layout
             aria-hidden="true"
diff --git a/apps/next/src/components/ui/dialog.tsx b/apps/next/src/components/ui/dialog.tsx
index 93542df32f48a6ad30da4917f11db7b4400d541f..cb0487c499db527ca2b82f167db72b76b448ba7c 100644
--- a/apps/next/src/components/ui/dialog.tsx
+++ b/apps/next/src/components/ui/dialog.tsx
@@ -21,7 +21,7 @@ const DialogOverlay = React.forwardRef<
   <DialogPrimitive.Overlay
     ref={ref}
     className={cn(
-      "fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
+      "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",
       className,
     )}
     {...props}
@@ -38,13 +38,13 @@ const DialogContent = React.forwardRef<
     <DialogPrimitive.Content
       ref={ref}
       className={cn(
-        "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
+        "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border p-6 shadow-lg duration-200 sm:rounded-lg",
         className,
       )}
       {...props}
     >
       {children}
-      <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
+      <DialogPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none">
         <Cross2Icon className="h-4 w-4" />
         <span className="sr-only">Close</span>
       </DialogPrimitive.Close>
@@ -102,7 +102,7 @@ const DialogDescription = React.forwardRef<
 >(({ className, ...props }, ref) => (
   <DialogPrimitive.Description
     ref={ref}
-    className={cn("text-sm text-muted-foreground", className)}
+    className={cn("text-muted-foreground text-sm", className)}
     {...props}
   />
 ));
diff --git a/apps/next/src/components/ui/input.tsx b/apps/next/src/components/ui/input.tsx
index 2fd005406540136f2ff356d0e779eda1e08c65b4..eb66005c8f74201fa71d4d9cf0044bfb3abe8192 100644
--- a/apps/next/src/components/ui/input.tsx
+++ b/apps/next/src/components/ui/input.tsx
@@ -10,7 +10,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
       <input
         type={type}
         className={cn(
-          "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
+          "border-input file:text-foreground placeholder:text-muted-foreground focus-visible:ring-ring flex h-9 w-full rounded-md border bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50",
           className,
         )}
         ref={ref}
diff --git a/apps/next/src/components/ui/skeleton.tsx b/apps/next/src/components/ui/skeleton.tsx
index c26c4ea9f56a9cb11803999009c02158bd7be9fe..5788d67580bbd88bfe000b7417a99d74b3e4c3a3 100644
--- a/apps/next/src/components/ui/skeleton.tsx
+++ b/apps/next/src/components/ui/skeleton.tsx
@@ -6,7 +6,7 @@ function Skeleton({
 }: React.HTMLAttributes<HTMLDivElement>) {
   return (
     <div
-      className={cn("animate-pulse rounded-md bg-primary/10", className)}
+      className={cn("bg-primary/10 animate-pulse rounded-md", className)}
       {...props}
     />
   );
diff --git a/apps/next/src/components/ui/slider.tsx b/apps/next/src/components/ui/slider.tsx
index e43e05055fc7ca79a0abe8b00156d22d53d0a333..d2be87d4abf0acd1a684bcebd93f686345a6d64a 100644
--- a/apps/next/src/components/ui/slider.tsx
+++ b/apps/next/src/components/ui/slider.tsx
@@ -17,10 +17,10 @@ const Slider = React.forwardRef<
     )}
     {...props}
   >
-    <SliderPrimitive.Track className="relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20">
-      <SliderPrimitive.Range className="absolute h-full bg-primary" />
+    <SliderPrimitive.Track className="bg-primary/20 relative h-1.5 w-full grow overflow-hidden rounded-full">
+      <SliderPrimitive.Range className="bg-primary absolute h-full" />
     </SliderPrimitive.Track>
-    <SliderPrimitive.Thumb className="block h-4 w-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50" />
+    <SliderPrimitive.Thumb className="border-primary/50 bg-background focus-visible:ring-ring block h-4 w-4 rounded-full border shadow transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50" />
   </SliderPrimitive.Root>
 ));
 Slider.displayName = SliderPrimitive.Root.displayName;
diff --git a/apps/next/src/components/ui/textarea.tsx b/apps/next/src/components/ui/textarea.tsx
index a0662826bdf2a4c908d17545fda5431964e4a431..9a71a59c57abb304def231ecf41de1e66de67785 100644
--- a/apps/next/src/components/ui/textarea.tsx
+++ b/apps/next/src/components/ui/textarea.tsx
@@ -9,7 +9,7 @@ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
     return (
       <textarea
         className={cn(
-          "flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
+          "border-input placeholder:text-muted-foreground focus-visible:ring-ring flex min-h-[60px] w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50",
           className,
         )}
         ref={ref}
diff --git a/apps/next/src/components/ui/tooltip.tsx b/apps/next/src/components/ui/tooltip.tsx
index 0fb871c712be8653c53a79186f1b17a8f508b997..c7a40c2054dbcba42efc4fbf11c120ac698140ce 100644
--- a/apps/next/src/components/ui/tooltip.tsx
+++ b/apps/next/src/components/ui/tooltip.tsx
@@ -20,7 +20,7 @@ const TooltipContent = React.forwardRef<
       ref={ref}
       sideOffset={sideOffset}
       className={cn(
-        "z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+        "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 overflow-hidden rounded-md px-3 py-1.5 text-xs",
         className,
       )}
       {...props}
diff --git a/e2e/examples/waku-query-engine/src/components/chat.tsx b/e2e/examples/waku-query-engine/src/components/chat.tsx
index d30d399933220a645f64d26127d79ba951769ff0..7c45c015da313447ff1470c92cdec38ff8734dac 100644
--- a/e2e/examples/waku-query-engine/src/components/chat.tsx
+++ b/e2e/examples/waku-query-engine/src/components/chat.tsx
@@ -10,10 +10,10 @@ export const Chat = (props: ChatProps) => {
   const [response, setResponse] = useState<string | null>(null);
 
   return (
-    <section className="border-blue-400 -mx-4 mt-4 rounded border border-dashed p-4">
+    <section className="-mx-4 mt-4 rounded border border-dashed border-blue-400 p-4">
       <h2 className="text-lg font-bold">Chat with AI</h2>
       {response ? (
-        <p className="text-sm text-gray-600 max-w-sm">{response}</p>
+        <p className="max-w-sm text-sm text-gray-600">{response}</p>
       ) : null}
       <form
         action={async (formData) => {
@@ -26,7 +26,7 @@ export const Chat = (props: ChatProps) => {
         <input
           type="text"
           name="question"
-          className="border border-gray-400 rounded-sm px-2 py-0.5 text-sm"
+          className="rounded-sm border border-gray-400 px-2 py-0.5 text-sm"
         />
         <button className="rounded-sm bg-black px-2 py-0.5 text-sm text-white">
           Ask
diff --git a/package.json b/package.json
index 7b49022d029fe4845cb9aea1a36e04723bf1e0ca..b9bf8ea3f896d5f46e18a4051d9f7de7c54ac261 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,7 @@
     "madge": "^8.0.0",
     "prettier": "^3.4.2",
     "prettier-plugin-organize-imports": "^4.1.0",
+    "prettier-plugin-tailwindcss": "^0.6.11",
     "turbo": "^2.4.4",
     "typescript": "^5.7.3",
     "typescript-eslint": "^8.18.0"
@@ -39,10 +40,12 @@
   "packageManager": "pnpm@9.12.3",
   "lint-staged": {
     "*.{js,jsx,ts,tsx}": [
-      "prettier --check",
-      "eslint"
+      "eslint --fix",
+      "prettier --write"
     ],
-    "*.{json,md}": "prettier --check"
+    "*.{json,md,yml}": [
+      "prettier --write"
+    ]
   },
   "pnpm": {
     "patchedDependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2f3918ae9114d96051a1badd66254792afde0d7f..2b309fa5b4992bef1acd086d472a59f9b48dc7e6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -49,6 +49,9 @@ importers:
       prettier-plugin-organize-imports:
         specifier: ^4.1.0
         version: 4.1.0(prettier@3.5.0)(typescript@5.7.3)
+      prettier-plugin-tailwindcss:
+        specifier: ^0.6.11
+        version: 0.6.11(prettier-plugin-organize-imports@4.1.0(prettier@3.5.0)(typescript@5.7.3))(prettier@3.5.0)
       turbo:
         specifier: ^2.4.4
         version: 2.4.4
@@ -9881,6 +9884,61 @@ packages:
       vue-tsc:
         optional: true
 
+  prettier-plugin-tailwindcss@0.6.11:
+    resolution: {integrity: sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==}
+    engines: {node: '>=14.21.3'}
+    peerDependencies:
+      '@ianvs/prettier-plugin-sort-imports': '*'
+      '@prettier/plugin-pug': '*'
+      '@shopify/prettier-plugin-liquid': '*'
+      '@trivago/prettier-plugin-sort-imports': '*'
+      '@zackad/prettier-plugin-twig': '*'
+      prettier: ^3.0
+      prettier-plugin-astro: '*'
+      prettier-plugin-css-order: '*'
+      prettier-plugin-import-sort: '*'
+      prettier-plugin-jsdoc: '*'
+      prettier-plugin-marko: '*'
+      prettier-plugin-multiline-arrays: '*'
+      prettier-plugin-organize-attributes: '*'
+      prettier-plugin-organize-imports: '*'
+      prettier-plugin-sort-imports: '*'
+      prettier-plugin-style-order: '*'
+      prettier-plugin-svelte: '*'
+    peerDependenciesMeta:
+      '@ianvs/prettier-plugin-sort-imports':
+        optional: true
+      '@prettier/plugin-pug':
+        optional: true
+      '@shopify/prettier-plugin-liquid':
+        optional: true
+      '@trivago/prettier-plugin-sort-imports':
+        optional: true
+      '@zackad/prettier-plugin-twig':
+        optional: true
+      prettier-plugin-astro:
+        optional: true
+      prettier-plugin-css-order:
+        optional: true
+      prettier-plugin-import-sort:
+        optional: true
+      prettier-plugin-jsdoc:
+        optional: true
+      prettier-plugin-marko:
+        optional: true
+      prettier-plugin-multiline-arrays:
+        optional: true
+      prettier-plugin-organize-attributes:
+        optional: true
+      prettier-plugin-organize-imports:
+        optional: true
+      prettier-plugin-sort-imports:
+        optional: true
+      prettier-plugin-style-order:
+        optional: true
+      prettier-plugin-svelte:
+        optional: true
+
   prettier@2.8.8:
     resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
     engines: {node: '>=10.13.0'}
@@ -22192,6 +22250,12 @@ snapshots:
       prettier: 3.5.0
       typescript: 5.7.3
 
+  prettier-plugin-tailwindcss@0.6.11(prettier-plugin-organize-imports@4.1.0(prettier@3.5.0)(typescript@5.7.3))(prettier@3.5.0):
+    dependencies:
+      prettier: 3.5.0
+    optionalDependencies:
+      prettier-plugin-organize-imports: 4.1.0(prettier@3.5.0)(typescript@5.7.3)
+
   prettier@2.8.8: {}
 
   prettier@3.5.0: {}
diff --git a/prettier.config.mjs b/prettier.config.mjs
index e9e308611c5b98f40bfce4cad75f37e6cd1c8af3..e2c5f11980d5cc465c6c1935097a155480dfdf83 100644
--- a/prettier.config.mjs
+++ b/prettier.config.mjs
@@ -1,3 +1,3 @@
 export default {
-  plugins: ["prettier-plugin-organize-imports"],
+  plugins: ["prettier-plugin-organize-imports", "prettier-plugin-tailwindcss"],
 };