diff --git a/package.json b/package.json index 633f384..a308dfb 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "character-entities": "2.0.2" }, "dependencies": { + "@fingerprintjs/fingerprintjs": "^5.2.0", "@formspree/react": "^2.5.3", "@hookform/resolvers": "^3.9.0", "@radix-ui/react-accordion": "^1.2.0", @@ -60,6 +61,7 @@ "easymde": "^2.20.0", "embla-carousel-react": "^8.3.0", "framer-motion": "^12.4.7", + "gsap": "^3.15.0", "input-otp": "^1.2.4", "lucide-react": "^0.462.0", "marked": "^15.0.7", diff --git a/src/assets/dead1.png b/src/assets/dead1.png new file mode 100644 index 0000000..bbb9c77 Binary files /dev/null and b/src/assets/dead1.png differ diff --git a/src/assets/dead2.png b/src/assets/dead2.png new file mode 100644 index 0000000..c418d73 Binary files /dev/null and b/src/assets/dead2.png differ diff --git a/src/assets/dead3.png b/src/assets/dead3.png new file mode 100644 index 0000000..b2beead Binary files /dev/null and b/src/assets/dead3.png differ diff --git a/src/assets/dead4.png b/src/assets/dead4.png new file mode 100644 index 0000000..d393e5d Binary files /dev/null and b/src/assets/dead4.png differ diff --git a/src/assets/dead5.png b/src/assets/dead5.png new file mode 100644 index 0000000..8f4458b Binary files /dev/null and b/src/assets/dead5.png differ diff --git a/src/assets/dead6.png b/src/assets/dead6.png new file mode 100644 index 0000000..864d587 Binary files /dev/null and b/src/assets/dead6.png differ diff --git a/src/assets/dead7.png b/src/assets/dead7.png new file mode 100644 index 0000000..864d587 Binary files /dev/null and b/src/assets/dead7.png differ diff --git a/src/assets/dead8.png b/src/assets/dead8.png new file mode 100644 index 0000000..864d587 Binary files /dev/null and b/src/assets/dead8.png differ diff --git a/src/assets/ground.png b/src/assets/ground.png new file mode 100644 index 0000000..0ee204a Binary files /dev/null and b/src/assets/ground.png differ diff --git a/src/assets/idle1.png b/src/assets/idle1.png new file mode 100644 index 0000000..d1383b1 Binary files /dev/null and b/src/assets/idle1.png differ diff --git a/src/assets/idle10.png b/src/assets/idle10.png new file mode 100644 index 0000000..ca3465c Binary files /dev/null and b/src/assets/idle10.png differ diff --git a/src/assets/idle2.png b/src/assets/idle2.png new file mode 100644 index 0000000..b5c749c Binary files /dev/null and b/src/assets/idle2.png differ diff --git a/src/assets/idle3.png b/src/assets/idle3.png new file mode 100644 index 0000000..6f21e1d Binary files /dev/null and b/src/assets/idle3.png differ diff --git a/src/assets/idle4.png b/src/assets/idle4.png new file mode 100644 index 0000000..f526408 Binary files /dev/null and b/src/assets/idle4.png differ diff --git a/src/assets/idle5.png b/src/assets/idle5.png new file mode 100644 index 0000000..6102c3f Binary files /dev/null and b/src/assets/idle5.png differ diff --git a/src/assets/idle6.png b/src/assets/idle6.png new file mode 100644 index 0000000..4d09565 Binary files /dev/null and b/src/assets/idle6.png differ diff --git a/src/assets/idle7.png b/src/assets/idle7.png new file mode 100644 index 0000000..5cbd39f Binary files /dev/null and b/src/assets/idle7.png differ diff --git a/src/assets/idle8.png b/src/assets/idle8.png new file mode 100644 index 0000000..8c455af Binary files /dev/null and b/src/assets/idle8.png differ diff --git a/src/assets/idle9.png b/src/assets/idle9.png new file mode 100644 index 0000000..268bc4e Binary files /dev/null and b/src/assets/idle9.png differ diff --git a/src/assets/jump1.png b/src/assets/jump1.png new file mode 100644 index 0000000..d1383b1 Binary files /dev/null and b/src/assets/jump1.png differ diff --git a/src/assets/jump10.png b/src/assets/jump10.png new file mode 100644 index 0000000..6a9c507 Binary files /dev/null and b/src/assets/jump10.png differ diff --git a/src/assets/jump11.png b/src/assets/jump11.png new file mode 100644 index 0000000..72cc66f Binary files /dev/null and b/src/assets/jump11.png differ diff --git a/src/assets/jump12.png b/src/assets/jump12.png new file mode 100644 index 0000000..53a144b Binary files /dev/null and b/src/assets/jump12.png differ diff --git a/src/assets/jump2.png b/src/assets/jump2.png new file mode 100644 index 0000000..27a75f2 Binary files /dev/null and b/src/assets/jump2.png differ diff --git a/src/assets/jump3.png b/src/assets/jump3.png new file mode 100644 index 0000000..186f4c0 Binary files /dev/null and b/src/assets/jump3.png differ diff --git a/src/assets/jump4.png b/src/assets/jump4.png new file mode 100644 index 0000000..2bc40de Binary files /dev/null and b/src/assets/jump4.png differ diff --git a/src/assets/jump5.png b/src/assets/jump5.png new file mode 100644 index 0000000..057685a Binary files /dev/null and b/src/assets/jump5.png differ diff --git a/src/assets/jump6.png b/src/assets/jump6.png new file mode 100644 index 0000000..38c0a8b Binary files /dev/null and b/src/assets/jump6.png differ diff --git a/src/assets/jump7.png b/src/assets/jump7.png new file mode 100644 index 0000000..1530d39 Binary files /dev/null and b/src/assets/jump7.png differ diff --git a/src/assets/jump8.png b/src/assets/jump8.png new file mode 100644 index 0000000..de7e791 Binary files /dev/null and b/src/assets/jump8.png differ diff --git a/src/assets/jump9.png b/src/assets/jump9.png new file mode 100644 index 0000000..2a85e4c Binary files /dev/null and b/src/assets/jump9.png differ diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..74c1265 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/assets/mountain.png b/src/assets/mountain.png new file mode 100644 index 0000000..e9ff62d Binary files /dev/null and b/src/assets/mountain.png differ diff --git a/src/assets/night.png b/src/assets/night.png new file mode 100644 index 0000000..95d85af Binary files /dev/null and b/src/assets/night.png differ diff --git a/src/assets/rock1.png b/src/assets/rock1.png new file mode 100644 index 0000000..ec52e1d Binary files /dev/null and b/src/assets/rock1.png differ diff --git a/src/assets/rock2.png b/src/assets/rock2.png new file mode 100644 index 0000000..9c7e6a2 Binary files /dev/null and b/src/assets/rock2.png differ diff --git a/src/assets/run1.png b/src/assets/run1.png new file mode 100644 index 0000000..e569506 Binary files /dev/null and b/src/assets/run1.png differ diff --git a/src/assets/run2.png b/src/assets/run2.png new file mode 100644 index 0000000..27ef61e Binary files /dev/null and b/src/assets/run2.png differ diff --git a/src/assets/run3.png b/src/assets/run3.png new file mode 100644 index 0000000..3467f38 Binary files /dev/null and b/src/assets/run3.png differ diff --git a/src/assets/run4.png b/src/assets/run4.png new file mode 100644 index 0000000..f55c756 Binary files /dev/null and b/src/assets/run4.png differ diff --git a/src/assets/run5.png b/src/assets/run5.png new file mode 100644 index 0000000..b64c502 Binary files /dev/null and b/src/assets/run5.png differ diff --git a/src/assets/run6.png b/src/assets/run6.png new file mode 100644 index 0000000..0abcf0a Binary files /dev/null and b/src/assets/run6.png differ diff --git a/src/assets/run7.png b/src/assets/run7.png new file mode 100644 index 0000000..da9f08a Binary files /dev/null and b/src/assets/run7.png differ diff --git a/src/assets/run8.png b/src/assets/run8.png new file mode 100644 index 0000000..61aaa9e Binary files /dev/null and b/src/assets/run8.png differ diff --git a/src/components/FeedbackForm.tsx b/src/components/FeedbackForm.tsx new file mode 100644 index 0000000..0b20359 --- /dev/null +++ b/src/components/FeedbackForm.tsx @@ -0,0 +1,359 @@ +import { useState } from "react"; + +const branches = [ + "Aerospace Engineering", + "Bachelor of Design (B.Des)", + "Civil Engineering", + "Computer Science & Engineering", + "Computer Science & Engineering (AI)", + "Computer Science & Engineering (DS)", + "Electrical Engineering", + "Electronics & Communication Engineering", + "Electronics Engineering (VLSI)", + "Materials and Metallurgical Engineering", + "Mathematics and Computing", + "Mechanical Engineering", + "Production & Industrial Engineering", +]; + +export interface FeedbackData { + name: string; + sid: string; + email: string; + branch: string; + rating: number; + review: string; +} + +interface FeedbackFormProps { + onContinue?: (data: FeedbackData) => void; +} + +export default function FeedbackForm({ + onContinue, +}: FeedbackFormProps) { + const [name, setName] = useState(""); + const [sid, setSid] = useState(""); + const [email, setEmail] = useState(""); + const [branch, setBranch] = useState(""); + const [rating, setRating] = useState(0); + const [review, setReview] = useState(""); + + const [error, setError] = useState(""); + + const handleSubmit = ( + event: React.FormEvent + ) => { + event.preventDefault(); + + setError(""); + + const trimmedName = name.trim(); + const trimmedSid = sid.trim(); + const trimmedEmail = email.trim(); + const trimmedReview = review.trim(); + + if ( + !trimmedName || + !trimmedSid || + !trimmedEmail || + !branch || + rating === 0 + ) { + setError( + "Please fill in all the required fields." + ); + return; + } + + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmedEmail)) { + setError("Please enter a valid email address."); + return; + } + + if (!/^\d{8}$/.test(trimmedSid)) { + setError( + "SID must be exactly 8 digits." + ); + return; + } + + const feedbackData: FeedbackData = { + name: trimmedName, + sid: trimmedSid, + email: trimmedEmail, + branch, + rating, + review: trimmedReview, + }; + + /* + * For now, simply pass the form data forward. + * + * Later this can be connected to the Dino game/session + * without changing the form validation itself. + */ + if (onContinue) { + onContinue(feedbackData); + } else { + console.log( + "Feedback submitted:", + feedbackData + ); + } + }; + + return ( +
+ {/* Header */} +
+

+ Feedback Form +

+ +

+ A tiny surprise awaits 👀 +

+
+ + {/* Personal Information */} +
+
+ {/* Name + SID */} +
+
+ + + + setName( + event.target.value + ) + } + placeholder="Enter your full name" + autoComplete="name" + className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none transition focus:ring-2 focus:ring-primary/20" + /> +
+ +
+ + + + setEmail( + event.target.value + ) + } + placeholder="Enter your email" + autoComplete="email" + className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none transition focus:ring-2 focus:ring-primary/20" + /> +
+ +
+ + + + setSid( + event.target.value.replace( + /\D/g, + "" + ) + ) + } + placeholder="e.g. 23103000" + autoComplete="off" + className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none transition focus:ring-2 focus:ring-primary/20" + /> +
+
+ + {/* Branch */} +
+ + + +
+
+
+ + {/* Rating */} +
+
+
+ + +

+ Your feedback helps us make the next + orientation even better. +

+
+ +
+ {[1, 2, 3, 4, 5].map( + (value) => ( + + ) + )} + + {rating > 0 && ( + + {rating}/5 + + )} +
+
+
+ + {/* Review */} +
+
+ + +