Skip to content

Commit be3a0b9

Browse files
committed
feat: add Dual Experience section to landing page, update team profiles, and force full reload on logout
1 parent cb088ac commit be3a0b9

3 files changed

Lines changed: 125 additions & 13 deletions

File tree

src/components/layout/AppLayout.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,20 @@ export default function AppLayout() {
5555
className="sticky top-0 z-50 bg-card/80 backdrop-blur-xl border-b border-border"
5656
>
5757
<div className="max-w-7xl mx-auto px-4 sm:px-6 h-16 flex items-center justify-between">
58-
<Link to={isDoctor ? '/doctor-dashboard' : '/health-form'} className="flex items-center gap-2.5">
58+
<Link to={isDoctor ? '/doctor-dashboard' : '/health-form'} className="flex items-center gap-3">
5959
<motion.img
6060
initial={{ scale: 0.8, rotate: -10 }}
6161
animate={{ scale: 1, rotate: 0 }}
6262
whileHover={{ scale: 1.1, rotate: 5 }}
6363
src="/favicon.svg"
6464
alt="HealthTrace logo"
65-
className="w-10 h-10 object-contain"
65+
className="w-12 h-12 object-contain"
6666
/>
6767
<motion.span
6868
initial={{ x: -10, opacity: 0 }}
6969
animate={{ x: 0, opacity: 1 }}
7070
transition={{ delay: 0.2 }}
71-
className="font-heading font-bold text-lg"
71+
className="font-heading font-bold text-xl tracking-tight"
7272
>
7373
<span style={{ color: '#CC2222' }}>Health</span><span style={{ color: '#1E2D4E' }}>Trace</span>
7474
</motion.span>

src/lib/AuthContext.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ export const AuthProvider = ({ children }) => {
7171
setUser(null);
7272
setIsAuthenticated(false);
7373
if (shouldRedirect) {
74+
// Force a full clean reload to land on the homepage
7475
window.location.hash = '#/';
76+
window.location.reload();
7577
}
7678
};
7779

src/pages/Landing.jsx

Lines changed: 120 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useState } from 'react';
22
import { useNavigate } from 'react-router-dom';
33
import { motion } from 'framer-motion';
44
import { apiClient } from '@/api/client';
5+
import { Linkedin, Github, Stethoscope, User, Check } from 'lucide-react';
56

67
const STATS = [
78
{ val: '219,000', label: 'Australians live with ME/CFS' },
@@ -16,10 +17,28 @@ const STEPS = [
1617
];
1718

1819
const TEAM = [
19-
{ name: 'Suvin', role: 'Founder & CEO' },
20-
{ name: 'Alex', role: 'CPO' },
21-
{ name: 'Tanmayi', role: 'CTO' },
22-
{ name: 'Ian', role: 'CFO' },
20+
{
21+
name: 'Suvin',
22+
role: 'Founder & CEO',
23+
linkedin: 'https://www.linkedin.com/in/suvin-chin-90389b157/',
24+
github: 'https://github.com/SuvinCode'
25+
},
26+
{
27+
name: 'Alex',
28+
role: 'CPO',
29+
github: 'https://github.com/slpyalex'
30+
},
31+
{
32+
name: 'Tanmayi',
33+
role: 'CTO',
34+
github: 'https://github.com/Queen-Tanmayi-09'
35+
},
36+
{
37+
name: 'Ian',
38+
role: 'CFO',
39+
linkedin: 'https://www.linkedin.com/in/ian-chang-66464225a/',
40+
github: 'https://github.com/ianxxc'
41+
},
2342
];
2443

2544
const containerVariants = {
@@ -94,12 +113,12 @@ export default function Landing() {
94113
animate={{ y: 0, opacity: 1 }}
95114
className="flex items-center justify-between px-8 py-5 max-w-7xl mx-auto border-b border-red-100/60"
96115
>
97-
<div className="flex items-center gap-2.5">
116+
<div className="flex items-center gap-3">
98117
<motion.img
99118
whileHover={{ rotate: 10, scale: 1.1 }}
100-
src="/favicon.svg" alt="HealthTrace logo" className="w-9 h-9 object-contain"
119+
src="/favicon.svg" alt="HealthTrace logo" className="w-14 h-14 object-contain"
101120
/>
102-
<span className="font-heading font-bold text-lg">
121+
<span className="font-heading font-bold text-2xl tracking-tight">
103122
<span style={{ color: '#CC2222' }}>Health</span><span style={{ color: '#1E2D4E' }}>Trace</span>
104123
</span>
105124
</div>
@@ -265,6 +284,84 @@ export default function Landing() {
265284
</motion.div>
266285
</section>
267286

287+
{/* Dual Experience Section */}
288+
<section className="px-8 py-32 bg-muted/30">
289+
<div className="max-w-7xl mx-auto">
290+
<motion.div
291+
initial={{ opacity: 0, y: 20 }}
292+
whileInView={{ opacity: 1, y: 0 }}
293+
viewport={{ once: true }}
294+
className="text-center mb-20"
295+
>
296+
<h2 className="text-4xl font-heading font-bold mb-4 tracking-tight">The Dual Experience</h2>
297+
<p className="text-muted-foreground">Tailored tools for patients and clinicians to work together.</p>
298+
</motion.div>
299+
300+
<div className="grid md:grid-cols-2 gap-8">
301+
{/* Patient Account */}
302+
<motion.div
303+
initial={{ opacity: 0, x: -30 }}
304+
whileInView={{ opacity: 1, x: 0 }}
305+
viewport={{ once: true }}
306+
className="bg-card p-8 rounded-[32px] border border-border shadow-sm flex flex-col"
307+
>
308+
<div className="w-14 h-14 bg-primary/10 text-primary rounded-2xl flex items-center justify-center mb-6">
309+
<User className="w-7 h-7" />
310+
</div>
311+
<h3 className="text-2xl font-heading font-bold mb-4">Patient Account</h3>
312+
<p className="text-muted-foreground mb-8 font-light">Focus on your wellbeing while we handle the data tracking and clinical reporting.</p>
313+
314+
<ul className="space-y-4 mt-auto">
315+
{[
316+
'Mood & Symptom Diary with one-tap logging',
317+
'Voice Transcription for effortless journaling',
318+
'Dynamic Medication & Appointment Timeline',
319+
'Direct connection to your healthcare team'
320+
].map((item, i) => (
321+
<li key={i} className="flex items-center gap-3 text-sm text-foreground/80">
322+
<div className="w-5 h-5 bg-primary/10 text-primary rounded-full flex items-center justify-center shrink-0">
323+
<Check className="w-3 h-3" />
324+
</div>
325+
{item}
326+
</li>
327+
))}
328+
</ul>
329+
</motion.div>
330+
331+
{/* Doctor Account */}
332+
<motion.div
333+
initial={{ opacity: 0, x: 30 }}
334+
whileInView={{ opacity: 1, x: 0 }}
335+
viewport={{ once: true }}
336+
style={{ borderColor: 'rgba(30, 45, 78, 0.1)' }}
337+
className="bg-[#1E2D4E] text-white p-8 rounded-[32px] shadow-xl flex flex-col"
338+
>
339+
<div className="w-14 h-14 bg-white/10 text-white rounded-2xl flex items-center justify-center mb-6">
340+
<Stethoscope className="w-7 h-7" />
341+
</div>
342+
<h3 className="text-2xl font-heading font-bold mb-4">Doctor Account</h3>
343+
<p className="text-white/60 mb-8 font-light">Optimise your clinical workflow with data-driven insights and AI-powered summaries.</p>
344+
345+
<ul className="space-y-4 mt-auto">
346+
{[
347+
'Real-time Clinical Monitoring & trend charts',
348+
'AI-Powered 14-day Wellbeing Summaries',
349+
'Custom Health Form Builder & Distribution',
350+
'Centralised Patient Connection Management'
351+
].map((item, i) => (
352+
<li key={i} className="flex items-center gap-3 text-sm text-white/80">
353+
<div className="w-5 h-5 bg-white/10 text-white rounded-full flex items-center justify-center shrink-0">
354+
<Check className="w-3 h-3" />
355+
</div>
356+
{item}
357+
</li>
358+
))}
359+
</ul>
360+
</motion.div>
361+
</div>
362+
</div>
363+
</section>
364+
268365
{/* Testimonial */}
269366
<motion.section
270367
initial={{ opacity: 0 }}
@@ -315,14 +412,27 @@ export default function Landing() {
315412
<motion.div
316413
key={i}
317414
variants={itemVariants}
318-
whileHover={{ scale: 1.02 }}
319-
className="p-6 bg-card rounded-2xl border border-border text-center"
415+
whileHover={{ y: -5 }}
416+
className="p-6 bg-card rounded-2xl border border-border text-center relative group overflow-hidden"
320417
>
321418
<div className="w-12 h-12 bg-primary/10 text-primary rounded-full flex items-center justify-center mx-auto mb-4 font-heading font-bold text-lg">
322419
{member.name[0]}
323420
</div>
324421
<div className="font-heading font-bold text-sm">{member.name}</div>
325-
<div className="text-[10px] uppercase tracking-widest text-muted-foreground mt-1">{member.role}</div>
422+
<div className="text-[10px] uppercase tracking-widest text-muted-foreground mt-1 mb-4">{member.role}</div>
423+
424+
<div className="flex justify-center gap-3 pt-2 opacity-0 group-hover:opacity-100 transition-opacity">
425+
{member.linkedin && (
426+
<a href={member.linkedin} target="_blank" rel="noopener noreferrer" className="text-muted-foreground hover:text-primary transition-colors">
427+
<Linkedin className="w-4 h-4" />
428+
</a>
429+
)}
430+
{member.github && (
431+
<a href={member.github} target="_blank" rel="noopener noreferrer" className="text-muted-foreground hover:text-primary transition-colors">
432+
<Github className="w-4 h-4" />
433+
</a>
434+
)}
435+
</div>
326436
</motion.div>
327437
))}
328438
</motion.div>

0 commit comments

Comments
 (0)