Index: app/(app)/add/actions.ts
===================================================================
--- app/(app)/add/actions.ts	(revision 8b31e7717a6c248f51f8baf6380aa8689d137d04)
+++ app/(app)/add/actions.ts	(revision b04ba1e157677d8749211da255f2549e103aec19)
@@ -76,15 +76,21 @@
     }
 
-    // Check duplicate (case-insensitive)
-    const existing = await sql`
-        SELECT tag_id FROM tag WHERE LOWER(tag_name) = ${name}
-    `;
-    if (existing.length > 0) {
-        return { error: `Tag "${name}" already exists.` };
-    }
-
-    try {
-        await sql`INSERT INTO tag (tag_name) VALUES (${name})`;
-    } catch {
+    try {
+        // eslint-disable-next-line @typescript-eslint/no-explicit-any
+        await sql.begin(async (tx: any) => {
+            // Check duplicate (case-insensitive)
+            const existing = await tx`
+                SELECT tag_id FROM tag WHERE LOWER(tag_name) = ${name}
+            `;
+            if (existing.length > 0) {
+                throw new Error(`Tag "${name}" already exists.`);
+            }
+
+            await tx`INSERT INTO tag (tag_name) VALUES (${name})`;
+        });
+    } catch (e: any) {
+        if (e instanceof Error && e.message.includes('already exists')) {
+            return { error: e.message };
+        }
         return { error: 'Failed to create tag.' };
     }
