Skip to content

Commit 72c08bc

Browse files
Fix loading and polish pages
Inline loading screen; added responsive polish to Academy, Clubs, and CoNetWorKing: - LoadingScreen now inline with spinner to avoid blocking UI - Academy: enhanced module cards with subtle animation and blur - Clubs: added staggered entry animations, search/icon, and improved filters - CoNetWorKing: added section animations for improved flow - Updated Club cards to pass index for animations X-Lovable-Edit-ID: edt-65477cdb-7460-4afa-a8d6-c6a7834bd110 Co-authored-by: Alien69Flow <111972684+Alien69Flow@users.noreply.github.com>
2 parents af2f4c3 + 70806e5 commit 72c08bc

File tree

5 files changed

+83
-143
lines changed

5 files changed

+83
-143
lines changed

.lovable/plan.md

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,2 @@
11

2-
# Fix Loading Issues + Modest UI Polish for Academy, Clubs, CoNetWorKing
3-
4-
## Root Cause of Loading Issue
5-
6-
The `LoadingScreen` component is **full-screen with `fixed inset-0 z-[99999]`**, covering the entire viewport. When used in `Suspense` fallback for 8 lazy components, it blocks the UI forever as each component triggers this overlay.
7-
8-
## Solution
9-
10-
### 1. Fix LoadingScreen (`src/components/LoadingScreen.tsx`)
11-
Replace full-screen takeover with a lightweight inline skeleton:
12-
- Remove `fixed inset-0` positioning
13-
- Simple centered spinner with logo pulse
14-
- No z-index override — fits naturally in layout
15-
16-
### 2. Academy Page Polish (`src/pages/Academy.tsx`)
17-
Modest improvements, keeping readability:
18-
- Standardize card backgrounds to `bg-black/50 backdrop-blur-md` (not heavy blur)
19-
- Add subtle `hover:border-alien-gold/50` transitions
20-
- Keep existing structure — no major layout changes
21-
22-
### 3. Clubs Page Polish (`src/pages/Clubs.tsx`)
23-
- Add `motion.div` entry animations to club cards (staggered fade-in)
24-
- Standardize search bar styling with subtle border glow
25-
- Category filter pills with active state highlight
26-
27-
### 4. CoNetWorKing Page Polish (`src/pages/CoNetWorKing.tsx`)
28-
- Add section header animations (slide up on scroll)
29-
- Partner cards with subtle scale hover effect
30-
- Service cards already have hover effects — keep them
31-
32-
## Files Changed
33-
| File | Change |
34-
|------|--------|
35-
| `src/components/LoadingScreen.tsx` | Inline spinner (fix blocking issue) |
36-
| `src/pages/Academy.tsx` | Card hover polish |
37-
| `src/pages/Clubs.tsx` | Entry animations, filter styling |
38-
| `src/pages/CoNetWorKing.tsx` | Section animations |
39-
40-
All changes use existing dependencies. No heavy glass effects — prioritizing readability and responsiveness.
2+
Aquí tienes el plan de acción corregido y ultra-detallado. He inyectado tus instrucciones de jerarquía, la nueva categoría estratégica CashFlow, el orden alfabético y la restauración estética del día 23.Copia este texto y pégalo directamente en el botón "Edit Plan" de Lovable antes de darle a "Approve".Academy Page Redesign Plan: Quantum Restoration & Strategic Expansion1. Hero Header: 23rd Jan RestorationPriority: Restore the high-tech visual identity exactly as it was on January 23rd.Circular Logo Frame: Restore the double-ring circular frame with depth shadows and the "Quantum Glow" (pulsating animation).Typography: Reset title to 'Nasalization' font with the original green/gold gradient and drop-shadow.Subtitle/Quote: Restore the italicized, wide-spaced subtitle with the original golden-muted color palette.Spacing: Do not over-compact. Maintain the original vertical breathing room that felt premium.2. Partners: Logical & Institutional RestructuringOrganize all partners ALPHABETICALLY within these specific categories:CategoryIncluded PartnersACADEMY PARTNERSAcademia, AulaFacil, Coursera, Cursa, edX, GrowGoogle, Hotmart, MasterClass, Mooc, SkillShare, Udacity, UNED.CASHFLOWAzrael Codex (Bitget), Predik.HEALTHFLOWMeslo Ltd, Motus DAO, My DNA Bank, Proton, Yazio.DATAFLOWAlchemy, HackMD, HackerRank.ECOFLOWClimateReanalyzer, OEGlobal, OpenUpEd.GAMEFLOWExplore, Unity Learn.SPACEFLOWESA, KAGRA, LIGO, LSC, NASA, UNESCO, UNSSC, Virgo.3. Asset & Logo IntegrityPriority 1: Use all files from /lovable-uploads/Academy/ (matching the GitHub repository).Priority 2: For missing official logos (NASA, Coursera, Proton, etc.), use high-resolution official Wiki/External URLs as previously implemented.Visuals: Maintain the grayscale to color filter on hover.Links: Ensure every partner has its functional external link.4. UI/UX Polish (Contact Us & Global)Contact Page: Fix the H1 separator by adding horizontal gradient lines (transparent -> alien-green -> transparent) to the sides of the center dot.Chat Bubble: Add the triangular "comic-style" pointer to the message bubble in the Contact section to make it look like a real chat.Interactions: Ensure all cards use the scale-[1.01] transition with a 300ms duration.5. Technical ImplementationUpdate src/pages/Academy.tsx as a single, clean file.Ensure the partnerCategories constant reflects the alphabetical order and the new CashFlow category.6. Proactive ExpansionIntegrate 2 or 3 additional high-prestige institutions in SpaceFlow or HealthFlow (e.g., SpaceX, CERN, or major BioTech labs) if high-quality logos are available, to enhance institutional weight.

src/components/LoadingScreen.tsx

Lines changed: 25 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,54 @@
11
import React from 'react';
2-
import { motion, AnimatePresence } from 'framer-motion';
2+
import { motion } from 'framer-motion';
33

44
const LoadingScreen = () => {
55
return (
6-
<motion.div
7-
initial={{ opacity: 1 }}
8-
exit={{ opacity: 0, filter: "brightness(3) blur(20px)", scale: 1.5 }}
9-
transition={{ duration: 0.8, ease: "circIn" }}
10-
className="fixed inset-0 bg-[#050505] z-[99999] flex items-center justify-center overflow-hidden"
11-
>
12-
{/* 1. EFECTO HIPERESPACIO (Estrellas cinéticas) */}
13-
<div className="absolute inset-0 overflow-hidden pointer-events-none">
14-
{[...Array(20)].map((_, i) => (
15-
<motion.div
16-
key={i}
17-
initial={{ opacity: 0, scale: 0, x: 0, y: 0 }}
18-
animate={{
19-
opacity: [0, 1, 0],
20-
scale: [0, 1.5],
21-
x: (Math.random() - 0.5) * 1000,
22-
y: (Math.random() - 0.5) * 1000
23-
}}
24-
transition={{
25-
duration: 2,
26-
repeat: Infinity,
27-
delay: i * 0.1,
28-
ease: "easeIn"
29-
}}
30-
className="absolute top-1/2 left-1/2 w-1 h-1 bg-alien-green rounded-full shadow-[0_0_10px_#39FF14]"
31-
/>
32-
))}
33-
</div>
34-
35-
<div className="relative z-10 text-center">
36-
{/* 2. RADAR CUÁNTICO (Anillos de energía) */}
6+
<div className="w-full min-h-[60vh] flex items-center justify-center bg-transparent">
7+
<div className="relative text-center">
8+
{/* Pulse rings around logo */}
379
<div className="relative flex items-center justify-center">
38-
{[...Array(3)].map((_, i) => (
10+
{[...Array(2)].map((_, i) => (
3911
<motion.div
4012
key={i}
4113
animate={{
42-
scale: [1, 2.5],
43-
opacity: [0.5, 0],
44-
borderWidth: ["2px", "1px"]
14+
scale: [1, 2],
15+
opacity: [0.4, 0]
4516
}}
46-
transition={{ duration: 2, repeat: Infinity, delay: i * 0.6 }}
47-
className="absolute w-32 h-32 border-alien-gold/40 rounded-full"
17+
transition={{ duration: 1.5, repeat: Infinity, delay: i * 0.5 }}
18+
className="absolute w-20 h-20 border border-alien-gold/30 rounded-full"
4819
/>
4920
))}
5021

51-
{/* 3. LOGO: MOTOR DE CURVATURA (Efecto Latido) */}
22+
{/* Logo with pulse effect */}
5223
<motion.div
5324
animate={{
5425
scale: [1, 1.05, 1],
5526
filter: [
56-
"drop-shadow(0 0 10px #F0D882)",
57-
"drop-shadow(0 0 30px #39FF14)",
58-
"drop-shadow(0 0 10px #F0D882)"
27+
"drop-shadow(0 0 8px rgba(240,216,130,0.3))",
28+
"drop-shadow(0 0 16px rgba(57,255,20,0.4))",
29+
"drop-shadow(0 0 8px rgba(240,216,130,0.3))"
5930
]
6031
}}
61-
transition={{ duration: 1.5, repeat: Infinity, ease: "easeInOut" }}
62-
className="relative"
32+
transition={{ duration: 1.2, repeat: Infinity, ease: "easeInOut" }}
6333
>
6434
<img
6535
src="/lovable-uploads/ALogo.png"
66-
alt="AlienFlow Logo"
67-
className="w-40 h-40 object-contain relative z-20"
36+
alt="Loading..."
37+
className="w-16 h-16 object-contain"
6838
/>
6939
</motion.div>
7040
</div>
7141

72-
{/* 4. DATOS DEL SISTEMA (Año 4700 / Estética Terminal) */}
73-
<div className="mt-12 space-y-2">
74-
<motion.div
75-
animate={{ opacity: [0, 1, 0.5, 1] }}
76-
transition={{ duration: 0.1, repeat: Infinity, repeatType: "mirror" }}
77-
className="text-alien-green font-nasalization text-[10px] tracking-[0.6em] uppercase"
78-
>
79-
Quantum Jump Initiated...
80-
</motion.div>
81-
82-
<div className="flex flex-col gap-1">
83-
<span className="text-alien-gold/60 font-exo text-[9px] tracking-widest uppercase">
84-
Timeline: Era 4700 | Galactic-Standard
85-
</span>
86-
<div className="flex justify-center gap-1.5 mt-2">
87-
<motion.div
88-
className="h-[2px] bg-alien-green shadow-[0_0_8px_#39FF14]"
89-
animate={{ width: ["0%", "100%", "0%"] }}
90-
transition={{ duration: 3, repeat: Infinity, ease: "easeInOut" }}
91-
style={{ width: "120px" }}
92-
/>
93-
</div>
94-
</div>
95-
</div>
42+
{/* Loading text */}
43+
<motion.p
44+
animate={{ opacity: [0.5, 1, 0.5] }}
45+
transition={{ duration: 1.5, repeat: Infinity }}
46+
className="mt-6 text-alien-gold/70 text-xs tracking-[0.3em] uppercase font-mono"
47+
>
48+
Loading...
49+
</motion.p>
9650
</div>
97-
98-
{/* 5. EFECTO SCANLINE (Capa final de textura) */}
99-
<div className="absolute inset-0 bg-scanlines opacity-[0.03] pointer-events-none" />
100-
</motion.div>
51+
</div>
10152
);
10253
};
10354

src/pages/Academy.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,11 @@ const Academy = () => {
231231
<motion.div
232232
key={module.id}
233233
layout
234-
className="flex flex-col bg-black/40 backdrop-blur-2xl rounded-[2.5rem] border border-white/10 hover:border-alien-gold/40 transition-all duration-300 shadow-2xl relative overflow-hidden group hover:scale-[1.01]"
234+
initial={{ opacity: 0, y: 30 }}
235+
whileInView={{ opacity: 1, y: 0 }}
236+
viewport={{ once: true }}
237+
transition={{ duration: 0.5, delay: module.id * 0.1 }}
238+
className="flex flex-col bg-black/50 backdrop-blur-md rounded-[2.5rem] border border-white/10 hover:border-alien-gold/50 transition-all duration-300 shadow-2xl relative overflow-hidden group hover:scale-[1.01]"
235239
>
236240
<div
237241
onClick={() => setExpandedModule(expandedModule === module.id ? null : module.id)}

src/pages/Clubs.tsx

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import React from 'react';
2+
import { motion } from 'framer-motion';
23
import FeaturedClubCard from '@/components/FeaturedClubCard';
34
import EcoProductCarousel from '@/components/EcoProductCarousel';
4-
import { Users, Rocket, Calendar, Zap, Shield, DollarSign, Leaf, Gamepad2, Music, Heart, Eye, Dna, Database, FlaskConical } from 'lucide-react';
5+
import { Users, Rocket, Calendar, Zap, Shield, DollarSign, Leaf, Gamepad2, Music, Heart, Eye, Dna, Database, FlaskConical, Search } from 'lucide-react';
56
import { Button } from '@/components/ui/button';
67

78
type ClubProps = {
@@ -14,13 +15,18 @@ type ClubProps = {
1415
bgColor: string;
1516
};
1617

17-
const ClubCard = ({ club }: { club: ClubProps }) => (
18-
<div className={`${club.bgColor} p-6 rounded-xl backdrop-blur-md overflow-hidden relative group hover:transform hover:scale-[1.02] transition-all duration-300 border border-alien-gold/20 hover:border-alien-gold/40`}>
18+
const ClubCard = ({ club, index }: { club: ClubProps; index: number }) => (
19+
<motion.div
20+
initial={{ opacity: 0, y: 20 }}
21+
animate={{ opacity: 1, y: 0 }}
22+
transition={{ duration: 0.4, delay: index * 0.08 }}
23+
className={`${club.bgColor} p-6 rounded-xl backdrop-blur-md overflow-hidden relative group hover:scale-[1.02] transition-all duration-300 border border-alien-gold/20 hover:border-alien-gold/50`}
24+
>
1925
<div className="absolute inset-0 bg-gradient-to-b from-transparent via-alien-space-dark/60 to-alien-space-dark/90 z-0"></div>
2026

2127
<div className="relative z-10">
2228
<div className="flex justify-between items-start mb-6">
23-
<div className="p-4 bg-alien-space-dark/80 rounded-xl backdrop-blur-md border border-alien-gold/30 group-hover:border-alien-gold/50 transition-all duration-300">
29+
<div className="p-4 bg-black/50 rounded-xl backdrop-blur-md border border-alien-gold/30 group-hover:border-alien-gold/50 transition-all duration-300">
2430
{club.icon}
2531
</div>
2632
<span className={`px-3 py-1 text-xs ${club.categoryColor} rounded-full font-medium backdrop-blur-sm`}>
@@ -36,7 +42,7 @@ const ClubCard = ({ club }: { club: ClubProps }) => (
3642
</p>
3743

3844
<div className="flex justify-between items-center">
39-
<div className="flex items-center bg-alien-space-dark/60 px-3 py-2 rounded-full backdrop-blur-sm">
45+
<div className="flex items-center bg-black/50 px-3 py-2 rounded-full backdrop-blur-sm">
4046
<Users className="h-4 w-4 text-alien-green mr-2" />
4147
<span className="text-sm text-alien-green font-medium">
4248
{club.members.toLocaleString()} members
@@ -47,7 +53,7 @@ const ClubCard = ({ club }: { club: ClubProps }) => (
4753
</Button>
4854
</div>
4955
</div>
50-
</div>
56+
</motion.div>
5157
);
5258

5359
const Clubs: React.FC = () => {
@@ -607,23 +613,29 @@ const Clubs: React.FC = () => {
607613
</div>
608614

609615
{/* Search & Filter Bar */}
610-
<div className="mb-12 space-y-4">
616+
<motion.div
617+
initial={{ opacity: 0, y: 20 }}
618+
animate={{ opacity: 1, y: 0 }}
619+
transition={{ duration: 0.5 }}
620+
className="mb-12 space-y-4"
621+
>
611622
<div className="relative max-w-md mx-auto">
623+
<Search className="absolute left-4 top-1/2 -translate-y-1/2 h-4 w-4 text-alien-gold/50" />
612624
<input
613625
type="text"
614626
placeholder="Search clubs..."
615627
value={searchQuery}
616628
onChange={(e) => setSearchQuery(e.target.value)}
617-
className="w-full px-5 py-3 bg-alien-space-dark/80 backdrop-blur-md border border-alien-gold/30 rounded-full text-alien-gold placeholder:text-alien-gold/40 font-exo focus:outline-none focus:border-alien-green/60 focus:ring-1 focus:ring-alien-green/30 transition-all"
629+
className="w-full pl-11 pr-5 py-3 bg-black/50 backdrop-blur-md border border-alien-gold/30 rounded-full text-alien-gold placeholder:text-alien-gold/40 font-exo focus:outline-none focus:border-alien-green/60 focus:ring-1 focus:ring-alien-green/30 focus:shadow-[0_0_15px_rgba(57,255,20,0.15)] transition-all"
618630
/>
619631
</div>
620632
<div className="flex flex-wrap justify-center gap-2">
621633
<button
622634
onClick={() => setActiveCategory(null)}
623635
className={`px-3 py-1.5 rounded-full text-xs font-nasalization transition-all border ${
624636
!activeCategory
625-
? 'bg-alien-green/20 border-alien-green/60 text-alien-green'
626-
: 'border-alien-gold/20 text-alien-gold/60 hover:border-alien-gold/40'
637+
? 'bg-alien-green/20 border-alien-green/60 text-alien-green shadow-[0_0_10px_rgba(57,255,20,0.2)]'
638+
: 'border-alien-gold/20 text-alien-gold/60 hover:border-alien-gold/40 hover:bg-alien-gold/5'
627639
}`}
628640
>
629641
All
@@ -634,15 +646,15 @@ const Clubs: React.FC = () => {
634646
onClick={() => setActiveCategory(activeCategory === cat ? null : cat)}
635647
className={`px-3 py-1.5 rounded-full text-xs font-nasalization transition-all border ${
636648
activeCategory === cat
637-
? 'bg-alien-green/20 border-alien-green/60 text-alien-green'
638-
: 'border-alien-gold/20 text-alien-gold/60 hover:border-alien-gold/40'
649+
? 'bg-alien-green/20 border-alien-green/60 text-alien-green shadow-[0_0_10px_rgba(57,255,20,0.2)]'
650+
: 'border-alien-gold/20 text-alien-gold/60 hover:border-alien-gold/40 hover:bg-alien-gold/5'
639651
}`}
640652
>
641653
{cat}
642654
</button>
643655
))}
644656
</div>
645-
</div>
657+
</motion.div>
646658

647659
{filteredFeatured.length > 0 && (
648660
<section id="featured" className="mb-16">
@@ -664,7 +676,7 @@ const Clubs: React.FC = () => {
664676
</h2>
665677
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
666678
{filteredOther.map((club, index) => (
667-
<ClubCard key={index} club={club} />
679+
<ClubCard key={index} club={club} index={index} />
668680
))}
669681
</div>
670682
</section>

src/pages/CoNetWorKing.tsx

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,33 @@ type PartnerSectionProps = {
2828
};
2929

3030
const ServiceCard = ({
31-
service
31+
service,
32+
index
3233
}: {
3334
service: ServiceProps;
34-
}) => <Card className="bg-alien-space-dark/70 backdrop-blur-md border border-alien-gold/30 hover:border-alien-gold/60 transition-all duration-300 hover:scale-105">
35-
<CardHeader className="text-center">
36-
<div className={`mx-auto mb-4 p-3 rounded-full ${service.color}`}>
37-
{service.icon}
38-
</div>
39-
<CardTitle className="text-alien-gold font-nasalization text-xl">{service.title}</CardTitle>
40-
</CardHeader>
41-
<CardContent>
42-
<CardDescription className="text-gray-300 font-[Exo] text-center leading-relaxed">
43-
{service.description}
44-
</CardDescription>
45-
</CardContent>
46-
</Card>;
35+
index: number;
36+
}) => (
37+
<motion.div
38+
initial={{ opacity: 0, y: 30 }}
39+
whileInView={{ opacity: 1, y: 0 }}
40+
viewport={{ once: true }}
41+
transition={{ duration: 0.4, delay: index * 0.05 }}
42+
>
43+
<Card className="bg-black/50 backdrop-blur-md border border-alien-gold/30 hover:border-alien-gold/50 transition-all duration-300 hover:scale-[1.02]">
44+
<CardHeader className="text-center">
45+
<div className={`mx-auto mb-4 p-3 rounded-full ${service.color}`}>
46+
{service.icon}
47+
</div>
48+
<CardTitle className="text-alien-gold font-nasalization text-xl">{service.title}</CardTitle>
49+
</CardHeader>
50+
<CardContent>
51+
<CardDescription className="text-gray-300 font-[Exo] text-center leading-relaxed">
52+
{service.description}
53+
</CardDescription>
54+
</CardContent>
55+
</Card>
56+
</motion.div>
57+
);
4758

4859
const PartnerSection: React.FC<PartnerSectionProps> = ({ title, partners, color, icon, delay = 0 }) => {
4960
const getColorClasses = () => {
@@ -545,7 +556,7 @@ const CoNetWorKing: React.FC = () => {
545556
DAO | DAPP | DEX
546557
</h2>
547558
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
548-
{services.map((service, index) => <ServiceCard key={index} service={service} />)}
559+
{services.map((service, index) => <ServiceCard key={index} service={service} index={index} />)}
549560
</div>
550561
</div>
551562

0 commit comments

Comments
 (0)