-
- Welcome Back
-
-
- Sign in to your FitFlow Pro account
-
+
+
+
Bem-vindo de Volta
+
Faça login para acessar seu progresso
- {/* Form */}
- {/* Divider */}
-
-
-
OR
-
+
- {/* Social Login */}
-
-
-
+
+
Teste gratuito por 30 dias. Sem cartão de crédito necessário.
-
- {/* Sign Up Link */}
-
- Don't have an account?{' '}
-
- Sign up
-
-
);
-}
\ No newline at end of file
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 01b6e75..61b8efd 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,7 +1,6 @@
-'use client';
+"use client";
-import React from 'react';
-import { ThemeProvider } from '@/providers/themeProvider/ThemeProvider';
+import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
import HeroSplitKpi from '@/components/sections/hero/HeroSplitKpi';
import FeatureCardTwentyFive from '@/components/sections/feature/FeatureCardTwentyFive';
@@ -13,450 +12,375 @@ import TestimonialCardTwelve from '@/components/sections/testimonial/Testimonial
import SocialProofOne from '@/components/sections/socialProof/SocialProofOne';
import ContactText from '@/components/sections/contact/ContactText';
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
-import { Zap, Dumbbell, Apple, TrendingUp } from 'lucide-react';
+import { Activity, Apple, Brain, Dumbbell, Heart, Target, Zap, Users, Star, TrendingDown, TrendingUp } from 'lucide-react';
+import { WorkoutDataIntegration } from '@/app/components/WorkoutDataIntegration';
-const navItems = [
- { name: 'Home', id: '/' },
- { name: 'Features', id: 'onboarding' },
- { name: 'Pricing', id: 'nutrition' },
- { name: 'Team', id: 'team' },
- { name: 'Contact', id: 'contact' },
-];
-
-const Page = () => {
+export default function LandingPage() {
return (
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
+
);
-};
-
-export default Page;
+}
diff --git a/src/app/signup/page.tsx b/src/app/signup/page.tsx
index 70df99a..f4a18db 100644
--- a/src/app/signup/page.tsx
+++ b/src/app/signup/page.tsx
@@ -2,107 +2,91 @@
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
-import { useState } from 'react';
-import { Mail, Lock, User, Eye, EyeOff, ArrowRight, CheckCircle } from 'lucide-react';
+import { useState } from "react";
+import { Eye, EyeOff, Mail, Lock, User, CheckCircle2, AlertCircle } from 'lucide-react';
+import Input from '@/components/form/Input';
export default function SignupPage() {
const [formData, setFormData] = useState({
- fullName: '',
- email: '',
- password: '',
- confirmPassword: ''
+ name: "", email: "", password: "", confirmPassword: ""
});
const [showPassword, setShowPassword] = useState(false);
const [showConfirmPassword, setShowConfirmPassword] = useState(false);
- const [errors, setErrors] = useState
>({});
- const [isSubmitting, setIsSubmitting] = useState(false);
- const [passwordStrength, setPasswordStrength] = useState(0);
- const [agreedToTerms, setAgreedToTerms] = useState(false);
+ const [errors, setErrors] = useState<{ [key: string]: string }>({});
+ const [isSubmitted, setIsSubmitted] = useState(false);
+ const [passwordStrength, setPasswordStrength] = useState<"weak" | "medium" | "strong" | "">("");
- const calculatePasswordStrength = (pwd: string) => {
- let strength = 0;
- if (pwd.length >= 8) strength++;
- if (pwd.match(/[a-z]/) && pwd.match(/[A-Z]/)) strength++;
- if (pwd.match(/[0-9]/)) strength++;
- if (pwd.match(/[^a-zA-Z0-9]/)) strength++;
- setPasswordStrength(strength);
+ const calculatePasswordStrength = (pwd: string): "weak" | "medium" | "strong" | "" => {
+ if (!pwd) return "";
+ if (pwd.length < 8) return "weak";
+ if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8}$/.test(pwd)) return "strong";
+ return "medium";
+ };
+
+ const handleInputChange = (field: string, value: string) => {
+ setFormData(prev => ({
+ ...prev,
+ [field]: value
+ }));
+
+ if (field === "password") {
+ setPasswordStrength(calculatePasswordStrength(value));
+ }
};
const validateForm = () => {
- const newErrors: Record = {};
+ const newErrors: { [key: string]: string } = {};
- if (!formData.fullName.trim()) {
- newErrors.fullName = 'Full name is required';
+ if (!formData.name.trim()) {
+ newErrors.name = "Nome é obrigatório";
+ } else if (formData.name.trim().length < 2) {
+ newErrors.name = "Nome deve ter no mínimo 2 caracteres";
}
if (!formData.email) {
- newErrors.email = 'Email is required';
+ newErrors.email = "Email é obrigatório";
} else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) {
- newErrors.email = 'Please enter a valid email';
+ newErrors.email = "Email inválido";
}
if (!formData.password) {
- newErrors.password = 'Password is required';
+ newErrors.password = "Senha é obrigatória";
} else if (formData.password.length < 8) {
- newErrors.password = 'Password must be at least 8 characters';
- } else if (passwordStrength < 2) {
- newErrors.password = 'Password is too weak';
+ newErrors.password = "Senha deve ter no mínimo 8 caracteres";
}
- if (!formData.confirmPassword) {
- newErrors.confirmPassword = 'Please confirm your password';
- } else if (formData.password !== formData.confirmPassword) {
- newErrors.confirmPassword = 'Passwords do not match';
+ if (formData.password !== formData.confirmPassword) {
+ newErrors.confirmPassword = "As senhas não correspondem";
}
- if (!agreedToTerms) {
- newErrors.terms = 'You must agree to the terms';
- }
-
- setErrors(newErrors);
- return Object.keys(newErrors).length === 0;
+ return newErrors;
};
- const handleChange = (e: React.ChangeEvent) => {
- const { name, value } = e.target;
- setFormData(prev => ({ ...prev, [name]: value }));
-
- if (name === 'password') {
- calculatePasswordStrength(value);
- }
- };
-
- const handleSubmit = async (e: React.FormEvent) => {
+ const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
+ const newErrors = validateForm();
+ setErrors(newErrors);
- if (!validateForm()) {
- return;
- }
-
- setIsSubmitting(true);
- try {
- // Simulated API call
- await new Promise(resolve => setTimeout(resolve, 1000));
- console.log('Signup attempt:', { ...formData, confirmPassword: undefined });
- // In a real app, you would create account and redirect
- } finally {
- setIsSubmitting(false);
+ if (Object.keys(newErrors).length === 0) {
+ setIsSubmitted(true);
+ console.log("Signup attempt:", formData);
+ setTimeout(() => {
+ setIsSubmitted(false);
+ }, 2000);
}
};
- const getPasswordStrengthColor = () => {
- if (passwordStrength <= 1) return '#ef4444';
- if (passwordStrength <= 2) return '#eab308';
- if (passwordStrength <= 3) return '#f97316';
- return '#22c55e';
- };
-
- const getPasswordStrengthText = () => {
- if (!formData.password) return '';
- if (passwordStrength <= 1) return 'Weak';
- if (passwordStrength <= 2) return 'Fair';
- if (passwordStrength <= 3) return 'Good';
- return 'Strong';
+ const getStrengthColor = () => {
+ switch (passwordStrength) {
+ case "weak":
+ return "text-red-500";
+ case "medium":
+ return "text-yellow-500";
+ case "strong":
+ return "text-green-500";
+ default:
+ return "text-foreground/30";
+ }
};
return (
@@ -122,283 +106,168 @@ export default function SignupPage() {