From 4a53c897c5622cfe966d984fea7ca168a7ad51fa Mon Sep 17 00:00:00 2001 From: Paul Bailey Date: Tue, 9 Dec 2025 13:29:48 +0000 Subject: [PATCH] feat: create professional, polished UI with perfect spacing - Add generous padding and spacing throughout (p-10, p-12) - Constrain content width with max-w-4xl and max-w-5xl - Increase font sizes for better hierarchy (text-3xl, text-lg) - Add gradient backgrounds to cards and elements - Implement smooth transitions and hover states - Create professional progress stepper with labels - Add shadow effects with color-matched glows - Increase button padding and font sizes - Add gradient borders on hover - Implement proper visual breathing room - Create polished, premium aesthetic - Add smooth cubic-bezier transitions - Improve form input styling with focus rings - Create professional card hover effects --- frontend/src/App.tsx | 35 ++-- .../src/components/AudioPlayerSection.tsx | 80 ++++---- .../src/components/ScriptReviewSection.tsx | 144 ++++++------- frontend/src/components/TextInputSection.tsx | 88 ++++---- .../src/components/VoiceAssignmentSection.tsx | 192 +++++++++--------- frontend/src/index.css | 42 ++-- 6 files changed, 303 insertions(+), 278 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 689383c..a4c1c82 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -158,22 +158,22 @@ function App() { const allRolesAssigned = roles.length > 0 && roles.every(role => voiceAssignments.has(role.id)) return ( -
-
+
+
{/* Header */} -
-
- 🎧 +
+
+ 🎧
-

+

Text to Audiobook

-

+

Transform your stories into immersive audio experiences with AI-powered voices

{/* Progress Steps */} -
+
{['Input', 'Voices', 'Review', 'Done'].map((step, index) => { const phases = ['input', 'assignment', 'review', 'generated']; const isActive = phase === phases[index]; @@ -181,15 +181,20 @@ function App() { return (
-
- {isPast ? '✓' : index + 1} +
+
+ {isPast ? '✓' : index + 1} +
+ + {step} +
{index < 3 && ( -
+
)}
); diff --git a/frontend/src/components/AudioPlayerSection.tsx b/frontend/src/components/AudioPlayerSection.tsx index a329b74..eba31f8 100644 --- a/frontend/src/components/AudioPlayerSection.tsx +++ b/frontend/src/components/AudioPlayerSection.tsx @@ -8,48 +8,50 @@ export default function AudioPlayerSection({ onDownload }: AudioPlayerSectionProps) { return ( -
- {/* Success Header */} -
-
- 🎉 +
+
+ {/* Success Header */} +
+
+ 🎉 +
+

+ Your Audiobook is Ready! +

+

+ Listen below or download to enjoy offline +

+
+ + {/* Audio Player */} +
+
-

- Your Audiobook is Ready! -

-

- Listen below or download to enjoy offline -

-
- - {/* Audio Player */} -
- -
- {/* Download Button */} -
- -
+ {/* Download Button */} +
+ +
- {/* Success Message */} -
-

- ✅ Your audiobook has been successfully generated! -

+ {/* Success Message */} +
+

+ ✅ Your audiobook has been successfully generated! +

+
); diff --git a/frontend/src/components/ScriptReviewSection.tsx b/frontend/src/components/ScriptReviewSection.tsx index 370b9ab..2cffc46 100644 --- a/frontend/src/components/ScriptReviewSection.tsx +++ b/frontend/src/components/ScriptReviewSection.tsx @@ -22,83 +22,85 @@ export default function ScriptReviewSection({ }; return ( -
-
-

Review Script

-

Review and adjust speaker assignments before generating your audiobook.

-
+
+
+
+

Review Script

+

Review and adjust speaker assignments before generating your audiobook.

+
- {/* Script Segments */} -
- {segments.map((segment, index) => ( -
- {/* Header */} -
-
-
- {index + 1} + {/* Script Segments */} +
+ {segments.map((segment, index) => ( +
+ {/* Header */} +
+
+
+ {index + 1} +
+ Segment +
+ + {/* Speaker Dropdown */} +
+ +
- Segment
- - {/* Speaker Dropdown */} -
- - + + {/* Segment Text */} +
+ {segment.text}
+ ))} +
- {/* Segment Text */} -
- {segment.text} -
-
- ))} -
- - {/* Action Buttons */} -
- - - + {/* Action Buttons */} +
+ + + +
); diff --git a/frontend/src/components/TextInputSection.tsx b/frontend/src/components/TextInputSection.tsx index 18c63a2..7e59160 100644 --- a/frontend/src/components/TextInputSection.tsx +++ b/frontend/src/components/TextInputSection.tsx @@ -36,56 +36,58 @@ export default function TextInputSection({ const isButtonDisabled = disabled || isLoading || text.trim() === ''; return ( -
-
-

Enter Your Text

-

Paste or type your story below. Use patterns like "Name:" to mark different speakers.

-
- -
-