Skip to content

Commit da47fd3

Browse files
Merge pull request #14 from groupthinking/copilot/sub-pr-7-again
Address PR #7 review feedback: accessibility, CSS cleanup, and functionality fixes
2 parents d05b23b + 857bfd7 commit da47fd3

4 files changed

Lines changed: 45 additions & 98 deletions

File tree

apps/web/src/app/globals.css

Lines changed: 11 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -269,17 +269,6 @@ pre {
269269
animation: pulse-glow 2s ease-in-out infinite;
270270
}
271271

272-
.animate-shimmer {
273-
background: linear-gradient(
274-
90deg,
275-
rgba(255, 255, 255, 0) 0%,
276-
rgba(255, 255, 255, 0.1) 50%,
277-
rgba(255, 255, 255, 0) 100%
278-
);
279-
background-size: 200% 100%;
280-
animation: shimmer 2s linear infinite;
281-
}
282-
283272
.animate-gradient {
284273
background-size: 200% 200%;
285274
animation: gradient-shift 8s ease infinite;
@@ -557,76 +546,7 @@ pre {
557546
}
558547

559548
/* ============================================
560-
Enhanced Input Styling
561-
============================================ */
562-
563-
.input-glow {
564-
position: relative;
565-
}
566-
567-
.input-glow::before {
568-
content: "";
569-
position: absolute;
570-
inset: -2px;
571-
background: linear-gradient(
572-
135deg,
573-
rgba(139, 92, 246, 0.3) 0%,
574-
rgba(34, 211, 238, 0.3) 100%
575-
);
576-
border-radius: inherit;
577-
opacity: 0;
578-
transition: opacity var(--transition-base);
579-
z-index: -1;
580-
filter: blur(8px);
581-
}
582-
583-
.input-glow:focus-within::before {
584-
opacity: 1;
585-
}
586-
587-
/* ============================================
588-
Topic Chip Styles
589-
============================================ */
590-
591-
.chip {
592-
display: inline-flex;
593-
align-items: center;
594-
gap: 0.5rem;
595-
padding: 0.625rem 1rem;
596-
font-size: 0.875rem;
597-
font-weight: 500;
598-
border-radius: 0.75rem;
599-
background: rgba(255, 255, 255, 0.03);
600-
border: 1px solid rgba(255, 255, 255, 0.08);
601-
color: rgba(255, 255, 255, 0.8);
602-
transition: background var(--transition-base), border-color var(--transition-base), transform var(--transition-base);
603-
cursor: pointer;
604-
}
605-
606-
.chip:hover {
607-
background: rgba(255, 255, 255, 0.06);
608-
border-color: rgba(255, 255, 255, 0.15);
609-
transform: translateY(-2px);
610-
}
611-
612-
.chip:active {
613-
transform: translateY(0);
614-
}
615-
616-
/* ============================================
617-
Text Utilities
618-
============================================ */
619-
620-
.text-shadow-lg {
621-
text-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
622-
}
623-
624-
.text-shadow-glow {
625-
text-shadow: 0 0 40px rgba(139, 92, 246, 0.5);
626-
}
627-
628-
/* ============================================
629-
Skeleton Loading
549+
Skeleton Loading (Used by loading states)
630550
============================================ */
631551

632552
.skeleton {
@@ -637,6 +557,15 @@ pre {
637557
rgba(255, 255, 255, 0.03) 100%
638558
);
639559
background-size: 200% 100%;
640-
animation: shimmer 1.5s ease-in-out infinite;
560+
animation: skeleton-shimmer 1.5s ease-in-out infinite;
641561
border-radius: 0.5rem;
642562
}
563+
564+
@keyframes skeleton-shimmer {
565+
0% {
566+
background-position: -200% 0;
567+
}
568+
100% {
569+
background-position: 200% 0;
570+
}
571+
}

apps/web/src/app/page.tsx

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -484,9 +484,9 @@ export default function HomePage() {
484484
<nav className="relative z-50 flex items-center justify-between px-6 lg:px-12 py-5 border-b border-white/[0.06]">
485485
<div className="flex items-center gap-3">
486486
<div className="w-11 h-11 rounded-xl bg-gradient-to-br from-primary-500 to-primary-600 flex items-center justify-center font-black text-lg shadow-lg shadow-primary-500/30 transition-transform hover:scale-105">
487-
V
487+
U
488488
</div>
489-
<span className="font-bold text-xl tracking-tight bg-gradient-to-r from-white to-white/80 bg-clip-text text-transparent">Video2Learn</span>
489+
<span className="font-bold text-xl tracking-tight bg-gradient-to-r from-white to-white/80 bg-clip-text text-transparent">UVAI.io</span>
490490
</div>
491491

492492
{/* Desktop Navigation */}
@@ -502,10 +502,10 @@ export default function HomePage() {
502502
</Link>
503503
<Link
504504
href="/dashboard"
505-
className="btn btn-primary px-5 py-2.5 group"
505+
className="btn btn-primary px-5 py-2.5 group inline-flex items-center gap-2"
506506
>
507507
Get Started
508-
<span className="ml-1 transition-transform group-hover:translate-x-1"></span>
508+
<span className="transition-transform group-hover:translate-x-1"></span>
509509
</Link>
510510
</div>
511511

@@ -613,14 +613,22 @@ export default function HomePage() {
613613
<div className="mb-16">
614614
<SuggestedPrompts
615615
onSelectTopic={(query) => {
616-
setVideoUrl(`https://www.youtube.com/results?search_query=${encodeURIComponent(query)}`);
616+
const searchUrl = `https://www.youtube.com/results?search_query=${encodeURIComponent(query)}`;
617+
if (typeof window !== 'undefined') {
618+
window.open(searchUrl, '_blank', 'noopener,noreferrer');
619+
}
617620
}}
618621
/>
619622
</div>
620623

621-
{/* Video Preview Card */}
624+
{/* Video Preview Card - Visual Example Only */}
622625
<div className="max-w-lg mx-auto mb-16">
623626
<div className="relative group">
627+
{/* Example label */}
628+
<div className="absolute -top-8 left-0 right-0 flex justify-center">
629+
<span className="text-xs font-semibold tracking-widest text-white/30 uppercase">Example Preview</span>
630+
</div>
631+
624632
{/* Glow effect */}
625633
<div className="absolute -inset-4 bg-gradient-to-r from-primary-500/10 via-accent-500/10 to-primary-500/10 rounded-3xl blur-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-700" />
626634

@@ -632,7 +640,7 @@ export default function HomePage() {
632640

633641
{/* Play button overlay */}
634642
<div className="absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-all duration-300">
635-
<div className="w-16 h-16 rounded-full bg-white/10 backdrop-blur-sm border border-white/20 flex items-center justify-center hover:scale-110 transition-transform cursor-pointer">
643+
<div className="w-16 h-16 rounded-full bg-white/10 backdrop-blur-sm border border-white/20 flex items-center justify-center hover:scale-110 transition-transform">
636644
<span className="text-2xl ml-1"></span>
637645
</div>
638646
</div>
@@ -891,9 +899,9 @@ console.log(result.deployedUrl);
891899
<div className="col-span-2 md:col-span-1">
892900
<div className="flex items-center gap-3 mb-4">
893901
<div className="w-10 h-10 rounded-xl bg-gradient-to-br from-primary-500 to-primary-600 flex items-center justify-center font-bold shadow-lg shadow-primary-500/25">
894-
V
902+
U
895903
</div>
896-
<span className="font-bold text-lg">Video2Learn</span>
904+
<span className="font-bold text-lg">UVAI.io</span>
897905
</div>
898906
<p className="text-white/40 text-sm leading-relaxed mb-4">
899907
Transform any video into interactive learning experiences with AI.
@@ -973,7 +981,7 @@ console.log(result.deployedUrl);
973981
{/* Footer Bottom */}
974982
<div className="pt-8 border-t border-white/[0.05] flex flex-col md:flex-row justify-between items-center gap-4">
975983
<p className="text-white/30 text-sm">
976-
© 2026 Video2Learn. Built with AI by <span className="text-primary-400">Aaron Wade</span>
984+
© 2026 UVAI.io. Built with AI by <span className="text-primary-400">Aaron Wade</span>
977985
</p>
978986
<div className="flex items-center gap-2 text-white/30 text-sm">
979987
<span className="relative flex h-2 w-2">

apps/web/src/components/ui/Button.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,15 @@ const Button = forwardRef<HTMLButtonElement, ButtonProps>(
6464
'bg-gradient-to-r from-red-500 via-red-600 to-red-500 bg-[length:200%_100%]',
6565
'text-white shadow-lg shadow-red-500/30',
6666
'hover:shadow-xl hover:shadow-red-500/40 hover:-translate-y-0.5',
67+
'hover:bg-[position:100%_0]',
6768
'active:translate-y-0',
6869
'transition-all duration-300'
6970
),
7071
success: clsx(
7172
'bg-gradient-to-r from-green-500 via-green-600 to-green-500 bg-[length:200%_100%]',
7273
'text-white shadow-lg shadow-green-500/30',
7374
'hover:shadow-xl hover:shadow-green-500/40 hover:-translate-y-0.5',
75+
'hover:bg-[position:100%_0]',
7476
'active:translate-y-0',
7577
'transition-all duration-300'
7678
),

apps/web/src/components/ui/SuggestedPrompts.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,12 @@ export interface TopicChipProps extends HTMLAttributes<HTMLButtonElement> {
5858
}
5959

6060
const TopicChip = forwardRef<HTMLButtonElement, TopicChipProps>(
61-
({ topic, onSelect, className, ...props }, ref) => {
61+
({ topic, onSelect, className, style, ...props }, ref) => {
6262
return (
6363
<button
6464
ref={ref}
6565
onClick={() => onSelect?.(topic.query)}
66+
aria-label={`Search for ${topic.label} videos`}
6667
className={clsx(
6768
'group inline-flex items-center gap-2.5 px-4 py-2.5',
6869
'rounded-xl',
@@ -76,8 +77,10 @@ const TopicChip = forwardRef<HTMLButtonElement, TopicChipProps>(
7677
'hover:border-white/20',
7778
'active:scale-100',
7879
'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500/50',
80+
'motion-reduce:transition-none motion-reduce:transform-none',
7981
className
8082
)}
83+
style={style}
8184
{...props}
8285
>
8386
<span className={clsx(
@@ -89,7 +92,7 @@ const TopicChip = forwardRef<HTMLButtonElement, TopicChipProps>(
8992
<span className={clsx(
9093
'text-sm font-medium',
9194
topic.textColor,
92-
'group-hover:text-white transition-colors'
95+
'group-hover:text-white transition-colors motion-reduce:transition-none'
9396
)}>
9497
{topic.label}
9598
</span>
@@ -106,16 +109,21 @@ export interface SuggestedPromptsProps extends HTMLAttributes<HTMLDivElement> {
106109
}
107110

108111
const SuggestedPrompts = forwardRef<HTMLDivElement, SuggestedPromptsProps>(
109-
({ onSelectTopic, title = 'TRY A SUGGESTED TOPIC:', className, ...props }, ref) => {
112+
({ onSelectTopic, title = 'TRY A SUGGESTED TOPIC:', className, style, ...props }, ref) => {
110113
return (
111114
<div
112115
ref={ref}
113116
className={clsx(
114117
'w-full max-w-2xl mx-auto',
115-
'animate-fade-in-up',
118+
'animate-fade-in-up motion-reduce:animate-none motion-reduce:opacity-100',
116119
className
117120
)}
118-
style={{ animationDelay: '200ms', opacity: 0 }}
121+
style={{
122+
...style,
123+
animationDelay: '200ms',
124+
opacity: 0,
125+
animationFillMode: 'forwards'
126+
}}
119127
{...props}
120128
>
121129
<p className="text-xs font-semibold tracking-widest text-white/40 mb-4 text-center">
@@ -132,7 +140,7 @@ const SuggestedPrompts = forwardRef<HTMLDivElement, SuggestedPromptsProps>(
132140
animationFillMode: 'forwards',
133141
opacity: 0
134142
}}
135-
className="animate-fade-in-up"
143+
className="animate-fade-in-up motion-reduce:animate-none motion-reduce:opacity-100"
136144
/>
137145
))}
138146
</div>

0 commit comments

Comments
 (0)