From 499a38ce1bec108cab97526db9d036de0ee8551f Mon Sep 17 00:00:00 2001
From: Ajax Davis
Date: Fri, 16 Jan 2026 06:49:47 +1000
Subject: [PATCH] refactor: apply style guide compliance across auth,
dashboard, and tool pages
- Replace hardcoded color classes with design system tokens (error, success, warning, info)
- Replace raw HTML inputs with Input component from @tpmjs/ui
- Replace raw HTML buttons with Button component
- Add eye/eyeOff icons for password visibility toggle
- Add mail icon for verify-email page
- Fix text colors to use semantic tokens (text-error, text-success, text-warning)
- Fix background colors to use opacity tokens (bg-error/10, bg-success/10)
- All pages now properly support dark mode through CSS custom properties
---
.../src/app/(auth)/forgot-password/page.tsx | 16 ++--
apps/web/src/app/(auth)/sign-in/page.tsx | 62 +++-----------
apps/web/src/app/(auth)/sign-up/page.tsx | 80 +++++--------------
apps/web/src/app/(auth)/verify-email/page.tsx | 15 +---
.../app/dashboard/settings/api-keys/page.tsx | 22 ++---
.../app/dashboard/settings/profile/page.tsx | 30 +++----
.../app/tool/[...slug]/ToolDetailClient.tsx | 25 +++---
apps/web/src/app/tool/broken/page.tsx | 12 +--
apps/web/src/app/tool/tool-search/page.tsx | 2 +-
packages/ui/src/Icon/icons.ts | 12 +++
10 files changed, 102 insertions(+), 174 deletions(-)
diff --git a/apps/web/src/app/(auth)/forgot-password/page.tsx b/apps/web/src/app/(auth)/forgot-password/page.tsx
index 84e5977..56b6bd7 100644
--- a/apps/web/src/app/(auth)/forgot-password/page.tsx
+++ b/apps/web/src/app/(auth)/forgot-password/page.tsx
@@ -1,5 +1,7 @@
'use client';
+import { Button } from '@tpmjs/ui/Button/Button';
+import { Input } from '@tpmjs/ui/Input/Input';
import Link from 'next/link';
import { useState } from 'react';
@@ -54,7 +56,7 @@ export default function ForgotPasswordPage() {
-
+
Check your inbox and click the link to reset your password. The link will expire in 1
hour.
@@ -93,7 +95,7 @@ export default function ForgotPasswordPage() {
diff --git a/apps/web/src/app/(auth)/sign-in/page.tsx b/apps/web/src/app/(auth)/sign-in/page.tsx
index d23dc99..90ecfce 100644
--- a/apps/web/src/app/(auth)/sign-in/page.tsx
+++ b/apps/web/src/app/(auth)/sign-in/page.tsx
@@ -1,47 +1,11 @@
'use client';
-import { signIn } from '@/lib/auth-client';
+import { Button } from '@tpmjs/ui/Button/Button';
+import { Icon } from '@tpmjs/ui/Icon/Icon';
+import { Input } from '@tpmjs/ui/Input/Input';
import Link from 'next/link';
import { useState } from 'react';
-
-function EyeIcon({ className }: { className?: string }) {
- return (
-
- );
-}
-
-function EyeOffIcon({ className }: { className?: string }) {
- return (
-
- );
-}
+import { signIn } from '~/lib/auth-client';
export default function SignInPage() {
const [email, setEmail] = useState('');
@@ -107,7 +71,7 @@ export default function SignInPage() {
- setPassword(e.target.value)}
required
- className="w-full px-3 py-2 pr-10 border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-foreground focus:border-transparent"
placeholder="Enter your password"
+ className="pr-10"
/>
-
+
diff --git a/apps/web/src/app/(auth)/sign-up/page.tsx b/apps/web/src/app/(auth)/sign-up/page.tsx
index e050dc2..025da46 100644
--- a/apps/web/src/app/(auth)/sign-up/page.tsx
+++ b/apps/web/src/app/(auth)/sign-up/page.tsx
@@ -1,9 +1,12 @@
'use client';
-import { signUp } from '@/lib/auth-client';
+import { Button } from '@tpmjs/ui/Button/Button';
+import { Icon } from '@tpmjs/ui/Icon/Icon';
+import { Input } from '@tpmjs/ui/Input/Input';
import { suggestUsername } from '@tpmjs/types/user';
import Link from 'next/link';
import { useCallback, useEffect, useState } from 'react';
+import { signUp } from '~/lib/auth-client';
interface UsernameCheckResult {
available: boolean;
@@ -173,7 +176,7 @@ export default function SignUpPage() {
diff --git a/apps/web/src/app/(auth)/verify-email/page.tsx b/apps/web/src/app/(auth)/verify-email/page.tsx
index 828607a..5de27de 100644
--- a/apps/web/src/app/(auth)/verify-email/page.tsx
+++ b/apps/web/src/app/(auth)/verify-email/page.tsx
@@ -1,22 +1,11 @@
+import { Icon } from '@tpmjs/ui/Icon/Icon';
import Link from 'next/link';
export default function VerifyEmailPage() {
return (
diff --git a/apps/web/src/app/dashboard/settings/api-keys/page.tsx b/apps/web/src/app/dashboard/settings/api-keys/page.tsx
index ed245ee..cef13c2 100644
--- a/apps/web/src/app/dashboard/settings/api-keys/page.tsx
+++ b/apps/web/src/app/dashboard/settings/api-keys/page.tsx
@@ -2,6 +2,8 @@
import { Button } from '@tpmjs/ui/Button/Button';
import { Icon } from '@tpmjs/ui/Icon/Icon';
+import { Input } from '@tpmjs/ui/Input/Input';
+import { Textarea } from '@tpmjs/ui/Textarea/Textarea';
import {
Table,
TableBody,
@@ -176,9 +178,9 @@ export default function ApiKeysPage(): React.ReactElement {
}
>
{/* Info banner */}
-
+
-
+
These are your AI service credentials
@@ -195,14 +197,14 @@ export default function ApiKeysPage(): React.ReactElement {
{showImport && (