From 5e83c2d81471022263450548348ea7873e8810f2 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:15 +0000 Subject: [PATCH 01/11] Add src/app/blog/[slug]/page.tsx --- src/app/blog/[slug]/page.tsx | 222 +++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 src/app/blog/[slug]/page.tsx diff --git a/src/app/blog/[slug]/page.tsx b/src/app/blog/[slug]/page.tsx new file mode 100644 index 0000000..a540c21 --- /dev/null +++ b/src/app/blog/[slug]/page.tsx @@ -0,0 +1,222 @@ +"use client"; + +import Link from "next/link"; +import { useParams } from "next/navigation"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; + +export default function ArticlePage() { + const params = useParams(); + const slug = params?.slug as string; + + const navItems = [ + { name: "Shop", id: "shop" }, + { name: "How It Works", id: "how-it-works" }, + { name: "About", id: "about" }, + { name: "Reviews", id: "reviews" }, + { name: "Blog", id: "/blog" }, + ]; + + const articles: Record = { + "1": { + id: "1", category: "Preparedness", title: "The Complete Guide to Family Emergency Planning", excerpt: "Learn the essential steps to create a comprehensive emergency plan that protects your entire family during any crisis.", authorName: "Sarah Johnson", authorAvatar: "http://img.b2bpic.net/free-photo/side-view-beautiful-woman-with-folded-arms-looking-camera_23-2147876783.jpg?_wi=1", date: "15 Jan 2025", content: ` +

Introduction

+

Creating an emergency plan is one of the most important steps you can take to protect your family. This comprehensive guide will walk you through each stage of the process, ensuring everyone in your household knows what to do when disaster strikes.

+ +

Step 1: Gather Your Family

+

The first step is to bring everyone together and discuss emergency preparedness. Make sure all family members, including children, understand the importance of having a plan.

+ + +

Step 2: Identify Potential Hazards

+

Different regions face different risks. Consider what types of emergencies are most likely to affect your area:

+ + +

Step 3: Create Communication Plans

+

During an emergency, normal communication methods might not work. Establish backup communication methods:

+ + +

Step 4: Prepare Your Home

+

Make your home as safe as possible before an emergency occurs. This includes securing heavy furniture, knowing how to shut off utilities, and identifying safe rooms.

+ +

Step 5: Build Your Emergency Kit

+

Stock your home with essential supplies like water, food, first aid items, and medications. SafeHome kits are specifically designed to meet these needs.

+ +

Conclusion

+

By following these steps and regularly practicing your plan, your family will be prepared to handle any emergency with confidence and safety.

+ `, + tags: ["family", "planning", "preparedness", "emergency"], + }, + "2": { + id: "2", category: "Safety Tips", title: "5 Essential Items Every Emergency Kit Needs", excerpt: "Discover the critical supplies that should be in every family emergency kit and why they matter for survival.", authorName: "Michael Chen", authorAvatar: "http://img.b2bpic.net/free-photo/portrait-handsome-man-sitting-sofa_329181-2737.jpg?_wi=1", date: "12 Jan 2025", content: ` +

Why Emergency Kits Matter

+

In any emergency, having the right supplies can mean the difference between discomfort and survival. Here are the five essential items that should be in every emergency kit.

+ +

1. Water - The Most Critical Resource

+

Clean drinking water is essential for survival. The general rule is one gallon per person per day for at least three days.

+

Why it matters: Dehydration sets in quickly, and contaminated water can cause serious illness during emergencies when medical help may not be available.

+ +

2. Food - Sustenance That Keeps

+

Non-perishable, high-calorie food items that don't require cooking are ideal for emergency situations.

+

Best options: Granola bars, canned beans, peanut butter, crackers, and dried fruits.

+ +

3. First Aid Kit - Immediate Medical Response

+

A comprehensive first aid kit enables you to treat minor injuries and manage medical situations until professional help arrives.

+ +

4. Flashlight and Batteries - Light in Darkness

+

Power outages are common during emergencies. A reliable flashlight with extra batteries is crucial for safety and navigation.

+ +

5. Emergency Communication - Staying Connected

+

A battery-powered or hand-crank radio allows you to receive emergency broadcasts and stay informed about the situation.

+ +

Beyond These Five

+

While these are the essentials, SafeHome kits include additional items like blankets, hygiene supplies, and multi-tools to ensure comprehensive preparedness.

+ `, + tags: ["essentials", "supplies", "survival", "preparedness"], + }, + }; + + const article = articles[slug] || null; + + if (!article) { + return ( + + +
+
+

Article Not Found

+

The article you're looking for doesn't exist.

+ + Back to Blog + +
+
+ +
+ ); + } + + return ( + + + +
+
+
+ + ← Back to Blog + +
+ +
+
+ + {article.category} + +
+

{article.title}

+

{article.excerpt}

+ +
+ {article.authorName} +
+

{article.authorName}

+

{article.date}

+
+
+
+ +
+ +
+
+

Tags

+
+ {article.tags.map((tag: string) => ( + + #{tag} + + ))} +
+
+
+ +
+ + Read More Articles + +
+
+
+ + +
+ ); +} \ No newline at end of file -- 2.49.1 From 99e11129c9fd69b2bb26349b13e4937f2650c412 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:15 +0000 Subject: [PATCH 02/11] Update src/app/blog/page.tsx --- src/app/blog/page.tsx | 232 +++++++++++++----------------------------- 1 file changed, 70 insertions(+), 162 deletions(-) diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx index 3f89085..d3f8631 100644 --- a/src/app/blog/page.tsx +++ b/src/app/blog/page.tsx @@ -1,8 +1,10 @@ "use client"; -import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import Link from "next/link"; +import { useState } from "react"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import BlogCardOne from "@/components/sections/blog/BlogCardOne"; import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; export default function BlogPage() { @@ -11,112 +13,35 @@ export default function BlogPage() { { name: "How It Works", id: "how-it-works" }, { name: "About", id: "about" }, { name: "Reviews", id: "reviews" }, - { name: "Contact", id: "contact" }, + { name: "Blog", id: "/blog" }, ]; - const blogCategories = [ + const [searchQuery, setSearchQuery] = useState(""); + const [selectedCategory, setSelectedCategory] = useState("all"); + + const blogPosts = [ { - id: "emergency-prep", - name: "Emergency Preparedness", - slug: "emergency-preparedness", - description: "Learn best practices for family emergency planning", - }, + id: "1", category: "Preparedness", title: "The Complete Guide to Family Emergency Planning", excerpt: "Learn the essential steps to create a comprehensive emergency plan that protects your entire family during any crisis.", imageSrc: "http://img.b2bpic.net/free-photo/affectionate-little-girl-with-eyes-closed-embracing-her-father-home-mother-is-background_637285-3199.jpg?_wi=1", imageAlt: "Family emergency planning guide", authorName: "Sarah Johnson", authorAvatar: "http://img.b2bpic.net/free-photo/side-view-beautiful-woman-with-folded-arms-looking-camera_23-2147876783.jpg?_wi=1", date: "15 Jan 2025"}, { - id: "product-guides", - name: "Product Guides", - slug: "product-guides", - description: "Deep dives into emergency kit components and uses", - }, + id: "2", category: "Safety Tips", title: "5 Essential Items Every Emergency Kit Needs", excerpt: "Discover the critical supplies that should be in every family emergency kit and why they matter for survival.", imageSrc: "http://img.b2bpic.net/free-photo/high-view-father-son-playing-with-toys_23-2148500810.jpg?_wi=1", imageAlt: "Emergency kit essentials", authorName: "Michael Chen", authorAvatar: "http://img.b2bpic.net/free-photo/portrait-handsome-man-sitting-sofa_329181-2737.jpg?_wi=1", date: "12 Jan 2025"}, { - id: "household-scenarios", - name: "Household Scenarios", - slug: "household-scenarios", - description: "Preparedness tips for specific situations and emergencies", - }, + id: "3", category: "Preparedness", title: "How to Prepare Your Home for Natural Disasters", excerpt: "Practical steps to weatherproof your home and create a safe haven for your family during severe weather events.", imageSrc: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=1", imageAlt: "Home disaster preparation", authorName: "Emily Rodriguez", authorAvatar: "http://img.b2bpic.net/free-photo/young-female-blazer-beauty-blonde_1139-773.jpg?_wi=1", date: "10 Jan 2025"}, { - id: "food-water", - name: "Food & Water", - slug: "food-water", - description: "Nutrition, hydration, and food storage for emergencies", - }, + id: "4", category: "Safety Tips", title: "Emergency Communication Plans for Families", excerpt: "Stay connected when it matters most. Learn how to establish reliable communication channels during emergencies.", imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1", imageAlt: "Family communication planning", authorName: "David Park", authorAvatar: "http://img.b2bpic.net/free-photo/man-looks-seriously-has-strict-expression-gazes-directly-camera-wears-blue-velvet-shirt-smirks-face-isolated-beige_273609-54464.jpg?_wi=1", date: "8 Jan 2025"}, { - id: "wellness", - name: "Wellness & Mental Health", - slug: "wellness", - description: "Mental preparedness and coping with uncertainty", - }, + id: "5", category: "Nutrition", title: "Long-Term Food Storage Best Practices", excerpt: "Master the art of storing emergency food supplies safely. Learn shelf life, rotation methods, and storage techniques.", imageSrc: "http://img.b2bpic.net/free-photo/top-view-storage-devices-glasses_23-2149319333.jpg?_wi=1", imageAlt: "Food storage organization", authorName: "Lisa Warren", authorAvatar: "http://img.b2bpic.net/free-photo/side-view-beautiful-woman-with-folded-arms-looking-camera_23-2147876783.jpg?_wi=1", date: "5 Jan 2025"}, + { + id: "6", category: "Preparedness", title: "Teaching Kids About Emergency Preparedness", excerpt: "Age-appropriate ways to educate children about safety and emergency response without creating anxiety.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-woman-home-yawning_23-2148923998.jpg?_wi=1", imageAlt: "Children safety education", authorName: "Jennifer Lee", authorAvatar: "http://img.b2bpic.net/free-photo/young-female-blazer-beauty-blonde_1139-773.jpg?_wi=1", date: "2 Jan 2025"}, ]; - const blogArticles = [ - { - id: "blog-1", - title: "The Complete Guide to Building a 72-Hour Emergency Kit", - slug: "complete-guide-72-hour-kit", - excerpt: "Everything you need to know about assembling a functional 72-hour emergency kit for your household", - category: "emergency-prep", - readTime: "8 min", - }, - { - id: "blog-2", - title: "Water Storage & Purification for Emergency Preparedness", - slug: "water-storage-purification", - excerpt: "Critical water preparation strategies and which purification methods work best", - category: "food-water", - readTime: "6 min", - }, - { - id: "blog-3", - title: "Power Outage Preparedness: What Every Family Should Know", - slug: "power-outage-preparedness", - excerpt: "Essential steps to protect your family during extended power outages", - category: "household-scenarios", - readTime: "7 min", - }, - { - id: "blog-4", - title: "Shelf-Stable Nutrition: Choosing High-Quality Emergency Food", - slug: "shelf-stable-nutrition", - excerpt: "How to select nutritious, long-lasting foods that your family will actually eat", - category: "food-water", - readTime: "6 min", - }, - { - id: "blog-5", - title: "Managing Emergency Anxiety: A Mental Health Perspective", - slug: "managing-emergency-anxiety", - excerpt: "Psychological insights on preparing for emergencies without becoming overwhelmed", - category: "wellness", - readTime: "5 min", - }, - { - id: "blog-6", - title: "First Aid Essentials: What Every Kit Must Include", - slug: "first-aid-essentials", - excerpt: "Medical supplies and first aid knowledge every household needs", - category: "product-guides", - readTime: "7 min", - }, - { - id: "blog-7", - title: "Natural Disaster Preparedness by Region", - slug: "natural-disaster-preparedness", - excerpt: "Tailored emergency preparation strategies for earthquakes, hurricanes, tornadoes, and floods", - category: "household-scenarios", - readTime: "9 min", - }, - { - id: "blog-8", - title: "Teaching Children About Emergency Preparedness", - slug: "teaching-children-preparedness", - excerpt: "Age-appropriate ways to involve kids in family emergency planning", - category: "wellness", - readTime: "5 min", - }, - ]; + const categories = ["all", "Preparedness", "Safety Tips", "Nutrition"]; - const getCategoryName = (categoryId: string) => { - return blogCategories.find(cat => cat.id === categoryId)?.name || categoryId; - }; + const filteredPosts = blogPosts.filter((post) => { + const matchesCategory = selectedCategory === "all" || post.category === selectedCategory; + const matchesSearch = post.title.toLowerCase().includes(searchQuery.toLowerCase()) || + post.excerpt.toLowerCase().includes(searchQuery.toLowerCase()); + return matchesCategory && matchesSearch; + }); return ( -
-
-

- Emergency Preparedness Blog -

-

- Expert insights and practical guides to help your family prepare for any emergency with confidence. -

-
-
+
+
+
+

SafeHome Blog

+

Expert tips, guides, and stories on emergency preparedness

-
-
- {blogCategories.map((category) => ( - - {category.name} - - ))} -
-
- -
-
- {blogArticles.map((article) => ( - -
- - {getCategoryName(article.category)} - - {article.readTime} +
+
+ setSearchQuery(e.target.value)} + className="w-full px-4 py-2 border border-input rounded-lg bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary-cta" + />
-

- {article.title} -

-

- {article.excerpt} -

-
- Read More → -
- - ))} -
-
-
-
-

- Ready to Prepare? -

-

- Use the knowledge from our blog to build the perfect emergency kit for your family. -

-
- - Build Your Kit - - - Back to Home - +
+ {categories.map((category) => ( + + ))} +
+
+
+ +
+ {filteredPosts.length > 0 ? ( + + ) : ( +
+

No articles found matching your search.

+
+ )}
-- 2.49.1 From 8a78513515010f26c69335ad26e7e1b037a1b08d Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:16 +0000 Subject: [PATCH 03/11] Update src/app/cart/page.tsx --- src/app/cart/page.tsx | 288 ++++++++++++++++-------------------------- 1 file changed, 111 insertions(+), 177 deletions(-) diff --git a/src/app/cart/page.tsx b/src/app/cart/page.tsx index fd62084..11ed63a 100644 --- a/src/app/cart/page.tsx +++ b/src/app/cart/page.tsx @@ -1,45 +1,61 @@ "use client"; +import { useState } from "react"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; -import NavbarStyleApple from '@/components/navbar/NavbarStyleApple/NavbarStyleApple'; +import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import MediaAbout from "@/components/sections/about/MediaAbout"; +import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; import Link from "next/link"; -import { Trash2, Plus, Minus, ShoppingCart } from "lucide-react"; interface CartItem { id: string; name: string; price: number; quantity: number; - variant: string; - imageSrc: string; + image: string; } export default function CartPage() { - // Mock cart data - const cartItems: CartItem[] = [ + const [cartItems, setCartItems] = useState([ { - id: "kit-4p-24h", - name: "4-Person 24-Hour Kit", - price: 149, + id: "kit-4p-24h", name: "4-Person 24-Hour Kit", price: 149, quantity: 1, - variant: "Families with Children", - imageSrc: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=6" - }, + image: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=1"}, { - id: "kit-2p-24h", - name: "2-Person 24-Hour Kit", - price: 89, - quantity: 2, - variant: "Couples & Small Households", - imageSrc: "http://img.b2bpic.net/free-photo/sporty-girl-packing-bag-training-sports-girl-going-training-preparing-training_169016-67560.jpg?_wi=5" - } + id: "kit-4p-72h-ext", name: "4-Person 72-Hour Extension", price: 150, + quantity: 1, + image: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1"}, + ]); + + const navItems = [ + { name: "Shop", id: "/shop" }, + { name: "How It Works", id: "how-it-works" }, + { name: "About", id: "about" }, + { name: "Reviews", id: "reviews" }, + { name: "Contact", id: "contact" }, ]; - const subtotal = cartItems.reduce((acc, item) => acc + (item.price * item.quantity), 0); - const shipping = subtotal > 0 ? 12.99 : 0; - const tax = subtotal * 0.08; + const subtotal = cartItems.reduce((acc, item) => acc + item.price * item.quantity, 0); + const shipping = 15; + const tax = Math.round(subtotal * 0.1 * 100) / 100; const total = subtotal + shipping + tax; + const updateQuantity = (id: string, newQuantity: number) => { + if (newQuantity <= 0) { + setCartItems(cartItems.filter((item) => item.id !== id)); + } else { + setCartItems( + cartItems.map((item) => + item.id === id ? { ...item, quantity: newQuantity } : item + ) + ); + } + }; + + const removeItem = (id: string) => { + setCartItems(cartItems.filter((item) => item.id !== id)); + }; + return ( -
- {/* Cart Header */} -
-
-
- -

Your Shopping Cart

-
-

Review your items before proceeding to checkout

-
-
+
+
+

Shopping Cart

- {/* Cart Items Section */} -
-
+ {cartItems.length === 0 ? ( +
+

Your cart is empty

+ + Continue Shopping + +
+ ) : (
- {/* Items List */}
-
-

Items

- - {cartItems.length === 0 ? ( -
-

Your cart is empty

- - Continue Shopping - -
- ) : ( -
- {cartItems.map((item, index) => ( -
0 ? 'border-t border-gray-200 pt-6' : ''}`}> -
- {item.name} -
- -
-

{item.name}

-

{item.variant}

-

${item.price.toFixed(2)}

-
- -
- + {item.quantity} + - -
- - {item.quantity} - -
+
- ))} +
+
+

${(item.price * item.quantity).toFixed(2)}

+
- )} + ))}
- {/* Order Summary */}
-
-

Order Summary

- -
-
+
+

Order Summary

+
+
Subtotal - ${subtotal.toFixed(2)} + ${subtotal.toFixed(2)}
-
+
Shipping - ${shipping.toFixed(2)} + ${shipping.toFixed(2)}
-
+
Tax - ${tax.toFixed(2)} + ${tax.toFixed(2)}
- -
- Total - ${total.toFixed(2)} +
+ Total + ${total.toFixed(2)}
- Proceed to Checkout - Continue Shopping - - {/* Trust Badges */} -
-
- - 30-day money-back guarantee -
-
- - Free shipping on orders over $150 -
-
- - Trusted by 15,000+ families -
-
-
+ )}
+
- {/* Recommended Products */} - - - {/* Footer */} - + ); -- 2.49.1 From ba1dda316a71a879df8feef46e3f3e2917f496fd Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:16 +0000 Subject: [PATCH 04/11] Add src/app/dashboard/page.tsx --- src/app/dashboard/page.tsx | 231 +++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 src/app/dashboard/page.tsx diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx new file mode 100644 index 0000000..569fc03 --- /dev/null +++ b/src/app/dashboard/page.tsx @@ -0,0 +1,231 @@ +"use client"; + +import { useState } from "react"; +import Link from "next/link"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; + +interface Kit { + id: string; + name: string; + size: string; + duration: string; + purchaseDate: string; + expiryDate: string; + status: "active" | "expiring-soon" | "expired"; +} + +export default function DashboardPage() { + const [activeTab, setActiveTab] = useState<"overview" | "kits" | "orders" | "subscriptions">("overview"); + const [kits, setKits] = useState([ + { + id: "kit-1", name: "4-Person 24-Hour Kit", size: "4 Person", duration: "24 Hours", purchaseDate: "2025-01-15", expiryDate: "2030-01-15", status: "active"}, + { + id: "kit-2", name: "4-Person 72-Hour Kit", size: "4 Person", duration: "72 Hours", purchaseDate: "2025-02-10", expiryDate: "2028-02-10", status: "expiring-soon"}, + ]); + + const navItems = [ + { name: "Shop", id: "shop" }, + { name: "How It Works", id: "how-it-works" }, + { name: "About", id: "about" }, + { name: "Reviews", id: "reviews" }, + { name: "Contact", id: "contact" }, + ]; + + const getStatusColor = (status: string) => { + switch (status) { + case "active": + return "bg-accent/10 text-accent border-accent/30"; + case "expiring-soon": + return "bg-orange-500/10 text-orange-500 border-orange-500/30"; + case "expired": + return "bg-red-500/10 text-red-500 border-red-500/30"; + default: + return "bg-foreground/5 text-foreground border-foreground/10"; + } + }; + + return ( + + + +
+
+ {/* Header */} +
+
+

Account Dashboard

+

Welcome back! Manage your emergency kits and subscriptions

+
+
+ + New Kit + + +
+
+ + {/* Tab Navigation */} +
+ {(["overview", "kits", "orders", "subscriptions"] as const).map((tab) => ( + + ))} +
+ + {/* Overview Tab */} + {activeTab === "overview" && ( +
+
+

Active Kits

+

{kits.length}

+

All kits accounted for

+
+
+

Total Spent

+

$438

+

2 kits purchased

+
+
+

Renewal Status

+

1 Expiring

+

Action needed soon

+
+
+ )} + + {/* Kits Tab */} + {activeTab === "kits" && ( +
+ {kits.map((kit) => ( +
+
+
+

{kit.name}

+

+ {kit.size} • {kit.duration} +

+
+
+

Purchased

+

{new Date(kit.purchaseDate).toLocaleDateString()}

+
+
+

Expires

+

{new Date(kit.expiryDate).toLocaleDateString()}

+
+
+
+ {kit.status === "active" ? "✓ Active" : kit.status === "expiring-soon" ? "⚠ Expiring Soon" : "✕ Expired"} +
+ +
+
+
+ ))} +
+ )} + + {/* Orders Tab */} + {activeTab === "orders" && ( +
+

Order History

+ + + + + + + + + + + + + + + + + + + + + + + +
Order IDDateTotalStatus
#ORD-2025-001Feb 10, 2025$149.00Delivered
#ORD-2025-002Jan 15, 2025$289.00Delivered
+
+ )} + + {/* Subscriptions Tab */} + {activeTab === "subscriptions" && ( +
+
+
+
+

Food Renewal Subscription

+

4-Person Kit • Monthly

+
+
+

Next Renewal

+

March 15, 2025

+
+
+ + +
+
+
+
+

💡 Tip

+

Subscriptions help you stay prepared by automatically renewing perishable items before expiration. You'll receive email reminders 30 days before renewal.

+
+
+ )} +
+
+ + +
+ ); +} \ No newline at end of file -- 2.49.1 From 26ee5c905e98958eef2cc4422e90559192044c78 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:17 +0000 Subject: [PATCH 05/11] Update src/app/kit-builder/page.tsx --- src/app/kit-builder/page.tsx | 468 ++++++++++++++++++++--------------- 1 file changed, 267 insertions(+), 201 deletions(-) diff --git a/src/app/kit-builder/page.tsx b/src/app/kit-builder/page.tsx index a647a72..d9ba25e 100644 --- a/src/app/kit-builder/page.tsx +++ b/src/app/kit-builder/page.tsx @@ -1,24 +1,124 @@ "use client"; +import { useState, useMemo } from "react"; +import Link from "next/link"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; import HeroLogoBillboardSplit from "@/components/sections/hero/HeroLogoBillboardSplit"; -import FeatureCardTwentyOne from "@/components/sections/feature/FeatureCardTwentyOne"; import MediaAbout from "@/components/sections/about/MediaAbout"; -import ProductCardFour from "@/components/sections/product/ProductCardFour"; -import SocialProofOne from "@/components/sections/socialProof/SocialProofOne"; import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; -import Link from "next/link"; +import { ChevronDown, Plus, Minus, Check } from "lucide-react"; + +interface KitItem { + id: string; + name: string; + category: "shared" | "consumable"; + basePrice: number; + scalesByPerson: boolean; + duration: "24h" | "48h" | "72h" | null; +} + +const BASE_ITEMS: KitItem[] = [ + { id: "radio", name: "Emergency Radio", category: "shared", basePrice: 25, scalesByPerson: false, duration: null }, + { id: "flashlight", name: "LED Flashlight", category: "shared", basePrice: 15, scalesByPerson: false, duration: null }, + { id: "firstaid", name: "First Aid Kit", category: "shared", basePrice: 30, scalesByPerson: false, duration: null }, + { id: "whistle", name: "Emergency Whistle", category: "shared", basePrice: 5, scalesByPerson: false, duration: null }, + { id: "multitool", name: "Multi-Tool", category: "shared", basePrice: 20, scalesByPerson: false, duration: null }, +]; + +const DURATION_ITEMS: Record = { + "24h": [ + { id: "water-24h", name: "Drinking Water (1L per person)", category: "consumable", basePrice: 3, scalesByPerson: true, duration: "24h" }, + { id: "food-24h", name: "Shelf-Stable Food Ration", category: "consumable", basePrice: 12, scalesByPerson: true, duration: "24h" }, + { id: "hygiene-24h", name: "Hygiene Kit", category: "consumable", basePrice: 8, scalesByPerson: true, duration: "24h" }, + { id: "blanket-24h", name: "Emergency Blanket", category: "consumable", basePrice: 10, scalesByPerson: true, duration: "24h" }, + ], + "48h": [ + { id: "water-48h", name: "Drinking Water (2L per person)", category: "consumable", basePrice: 6, scalesByPerson: true, duration: "48h" }, + { id: "food-48h", name: "Shelf-Stable Food Bundle", category: "consumable", basePrice: 24, scalesByPerson: true, duration: "48h" }, + { id: "filter-48h", name: "Water Filter", category: "consumable", basePrice: 15, scalesByPerson: true, duration: "48h" }, + { id: "hygiene-48h", name: "Extended Hygiene Kit", category: "consumable", basePrice: 12, scalesByPerson: true, duration: "48h" }, + { id: "blanket-48h", name: "Heavy-Duty Emergency Blanket", category: "consumable", basePrice: 18, scalesByPerson: true, duration: "48h" }, + ], + "72h": [ + { id: "water-72h", name: "Drinking Water (3L per person)", category: "consumable", basePrice: 9, scalesByPerson: true, duration: "72h" }, + { id: "food-72h", name: "Complete Food Supply", category: "consumable", basePrice: 36, scalesByPerson: true, duration: "72h" }, + { id: "filter-72h", name: "Advanced Water Filter", category: "consumable", basePrice: 20, scalesByPerson: true, duration: "72h" }, + { id: "hygiene-72h", name: "Complete Hygiene Kit", category: "consumable", basePrice: 15, scalesByPerson: true, duration: "72h" }, + { id: "shelter-72h", name: "Emergency Shelter Kit", category: "consumable", basePrice: 25, scalesByPerson: true, duration: "72h" }, + { id: "medical-72h", name: "Extended Medical Kit", category: "consumable", basePrice: 40, scalesByPerson: true, duration: "72h" }, + ], +}; + +export default function KitBuilderPage() { + const [personCount, setPersonCount] = useState(2); + const [selectedDurations, setSelectedDurations] = useState>(new Set(["24h"])); -const KitBuilderPage = () => { const navItems = [ { name: "Shop", id: "shop" }, { name: "How It Works", id: "how-it-works" }, { name: "About", id: "about" }, { name: "Reviews", id: "reviews" }, - { name: "Contact", id: "contact" } + { name: "Contact", id: "contact" }, ]; + const toggleDuration = (duration: string) => { + const newDurations = new Set(selectedDurations); + if (newDurations.has(duration)) { + newDurations.delete(duration); + } else { + newDurations.add(duration); + } + setSelectedDurations(newDurations); + }; + + const kitItems = useMemo(() => { + const items: KitItem[] = [...BASE_ITEMS]; + const seenIds = new Set(items.map((item) => item.id)); + + const durationArray = Array.from(selectedDurations).sort((a, b) => { + const orderMap = { "24h": 0, "48h": 1, "72h": 2 }; + return (orderMap[a as keyof typeof orderMap] || 999) - (orderMap[b as keyof typeof orderMap] || 999); + }); + + durationArray.forEach((duration) => { + const durationItems = DURATION_ITEMS[duration] || []; + durationItems.forEach((item) => { + if (!seenIds.has(item.id)) { + items.push(item); + seenIds.add(item.id); + } + }); + }); + + return items; + }, [selectedDurations]); + + const totalPrice = useMemo(() => { + return kitItems.reduce((sum, item) => { + const multiplier = item.scalesByPerson ? personCount : 1; + return sum + item.basePrice * multiplier; + }, 0); + }, [kitItems, personCount]); + + const kitSummary = useMemo(() => { + const sharedCount = kitItems.filter((item) => item.category === "shared").length; + const consumableCount = kitItems.filter((item) => item.category === "consumable").length; + const selectedDurationLabel = Array.from(selectedDurations) + .sort((a, b) => { + const orderMap = { "24h": 0, "48h": 1, "72h": 2 }; + return (orderMap[a as keyof typeof orderMap] || 999) - (orderMap[b as keyof typeof orderMap] || 999); + }) + .join(" + "); + + return { + people: personCount, + duration: selectedDurationLabel || "No duration selected", sharedItems: sharedCount, + consumableItems: consumableCount, + total: kitItems.length, + }; + }, [personCount, selectedDurations, kitItems]); + return ( { headingFontWeight="medium" > -
+
-
-
- +
+
+
+

Build Your Perfect Kit

+ +
+ {/* Person Count Selector */} +
+ +
+ +
+ {personCount} + people +
+ +
+

1-8 people (8+ coming soon)

+
+ + {/* Duration Selector */} +
+ +
+ {["24h", "48h", "72h"].map((duration) => ( + + ))} +
+
+
+ + {/* Kit Summary */} +
+

Your Kit Summary

+
+
+

People

+

{kitSummary.people}

+
+
+

Duration

+

{kitSummary.duration}

+
+
+

Shared Items

+

{kitSummary.sharedItems}

+
+
+

Consumables

+

{kitSummary.consumableItems}

+
+
+
+ + {/* Kit Items Breakdown */} +
+

What's in Your Kit

+
+ {kitItems.map((item) => { + const multiplier = item.scalesByPerson ? personCount : 1; + const itemPrice = item.basePrice * multiplier; + return ( +
+
+
+ {item.category === "shared" ? ( +
+ ) : ( +
+ )} +
+
+

{item.name}

+ {item.scalesByPerson && ( +

× {personCount} person{personCount !== 1 ? "s" : ""}

+ )} + {item.category === "shared" &&

Shared (one-time)

} +
+
+

${itemPrice.toFixed(2)}

+
+ ); + })} +
+
+ + {/* Pricing and CTA */} +
+
+ Total Price: + ${totalPrice.toFixed(2)} +
+
+ + Proceed to Checkout + + + Continue Shopping + +
+
+ + {/* Info Box */} +
+

+ Smart Deduplication: When you select multiple durations, shared items (radio, flashlight, first-aid kit) are included only once. You're only paying for what you need. +

+
+
- - -
-
- -
-
- -
+
-
-
- -
-
- ); -}; - -export default KitBuilderPage; \ No newline at end of file +} \ No newline at end of file -- 2.49.1 From 5aec48277df599489cfc84d4acbf4ae698de5547 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:17 +0000 Subject: [PATCH 06/11] Add src/app/login/page.tsx --- src/app/login/page.tsx | 159 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 src/app/login/page.tsx diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx new file mode 100644 index 0000000..da1fd59 --- /dev/null +++ b/src/app/login/page.tsx @@ -0,0 +1,159 @@ +"use client"; + +import { useState } from "react"; +import Link from "next/link"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; + +export default function LoginPage() { + const [formData, setFormData] = useState({ + email: "", password: "", rememberMe: false, + }); + const [error, setError] = useState(""); + const [success, setSuccess] = useState(false); + + const navItems = [ + { name: "Shop", id: "shop" }, + { name: "How It Works", id: "how-it-works" }, + { name: "About", id: "about" }, + { name: "Reviews", id: "reviews" }, + { name: "Contact", id: "contact" }, + ]; + + const handleChange = (e: React.ChangeEvent) => { + const { name, value, type, checked } = e.target; + setFormData((prev) => ({ + ...prev, + [name]: type === "checkbox" ? checked : value, + })); + setError(""); + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + + if (!formData.email || !formData.password) { + setError("Email and password are required"); + return; + } + + setSuccess(true); + setFormData({ + email: "", password: "", rememberMe: false, + }); + }; + + return ( + + + +
+
+
+

Sign In

+

Access your SafeHome account and manage your emergency kits

+ + {success && ( +
+

✓ Login successful! Redirecting to dashboard...

+
+ )} + + {error && ( +
+

{error}

+
+ )} + +
+
+ + +
+ +
+
+ + + Forgot password? + +
+ +
+ +
+ + +
+ + +
+ +

+ Don't have an account?{" "} + + Create Account + +

+
+
+
+ + +
+ ); +} \ No newline at end of file -- 2.49.1 From 577bdf93954d8fb587ab64728c49165bf52ae97b Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:18 +0000 Subject: [PATCH 07/11] Update src/app/page.tsx --- src/app/page.tsx | 76 +++++++++++++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 26 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 167126b..425f00f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -67,7 +67,8 @@ export default function HomePage() { textboxLayout="default" useInvertedBackground={true} names={[ - "Family Safety First", "Emergency Ready", "Home Protection", "Peace of Mind", "Prepared Families", "Trust & Security", "Ready & Resilient", "Safe Households"]} + "Family Safety First", "Emergency Ready", "Home Protection", "Peace of Mind", "Prepared Families", "Trust & Security", "Ready & Resilient", "Safe Households" + ]} speed={40} showCard={true} /> @@ -82,13 +83,17 @@ export default function HomePage() { tag="How It Works" accordionItems={[ { - id: "1", title: "Select Your Family Size", content: "Choose from 1-person to 5+ household options. Our kits are designed for your specific family composition, ensuring everyone has what they need."}, + id: "1", title: "Select Your Family Size", content: "Choose from 1-person to 5+ household options. Our kits are designed for your specific family composition, ensuring everyone has what they need." + }, { - id: "2", title: "Pick Your Duration", content: "Start with 24-hour, 48-hour, or 72-hour kits. Each duration includes carefully curated items - food, water, first aid, shelter essentials, and tools."}, + id: "2", title: "Pick Your Duration", content: "Start with 24-hour, 48-hour, or 72-hour kits. Each duration includes carefully curated items - food, water, first aid, shelter essentials, and tools." + }, { - id: "3", title: "Expand Modularly", content: "Add 48-hour or 72-hour extensions without duplicating shared items like radios or first-aid kits. Only new supplies are added to your kit."}, + id: "3", title: "Expand Modularly", content: "Add 48-hour or 72-hour extensions without duplicating shared items like radios or first-aid kits. Only new supplies are added to your kit." + }, { - id: "4", title: "Set & Forget with Subscriptions", content: "Activate food renewal subscriptions to automatically refresh perishables. We notify you before expiration dates and handle the rest."}, + id: "4", title: "Set & Forget with Subscriptions", content: "Activate food renewal subscriptions to automatically refresh perishables. We notify you before expiration dates and handle the rest." + }, ]} imageSrc="http://img.b2bpic.net/free-photo/high-view-father-son-playing-with-toys_23-2148500810.jpg?_wi=1" imageAlt="SafeHome kit customization process" @@ -112,18 +117,21 @@ export default function HomePage() { textboxLayout="default" products={[ { - id: "kit-2p-24h", name: "2-Person 24-Hour Kit", price: "$89", variant: "Couples & Small Households", imageSrc: "http://img.b2bpic.net/free-photo/sporty-girl-packing-bag-training-sports-girl-going-training-preparing-training_169016-67560.jpg?_wi=1", imageAlt: "2-person 24-hour emergency kit"}, + id: "kit-2p-24h", name: "2-Person 24-Hour Kit", price: "$89", variant: "Couples & Small Households", imageSrc: "http://img.b2bpic.net/free-photo/sporty-girl-packing-bag-training-sports-girl-going-training-preparing-training_169016-67560.jpg?_wi=1", imageAlt: "2-person 24-hour emergency kit" + }, { - id: "kit-4p-24h", name: "4-Person 24-Hour Kit", price: "$149", variant: "Families with Children", imageSrc: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=1", imageAlt: "4-person 24-hour emergency kit"}, + id: "kit-4p-24h", name: "4-Person 24-Hour Kit", price: "$149", variant: "Families with Children", imageSrc: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=1", imageAlt: "4-person 24-hour emergency kit" + }, { - id: "kit-4p-72h", name: "4-Person 72-Hour Kit", price: "$299", variant: "Complete Family Preparedness", imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1", imageAlt: "4-person 72-hour emergency kit"}, + id: "kit-4p-72h", name: "4-Person 72-Hour Kit", price: "$299", variant: "Complete Family Preparedness", imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1", imageAlt: "4-person 72-hour emergency kit" + }, { - id: "kit-1p-extended", name: "1-Person Extended Bundle", price: "$179", variant: "Individual with Expandability", imageSrc: "http://img.b2bpic.net/free-photo/top-view-storage-devices-glasses_23-2149319333.jpg?_wi=1", imageAlt: "1-person extended emergency kit"}, + id: "kit-1p-extended", name: "1-Person Extended Bundle", price: "$179", variant: "Individual with Expandability", imageSrc: "http://img.b2bpic.net/free-photo/top-view-storage-devices-glasses_23-2149319333.jpg?_wi=1", imageAlt: "1-person extended emergency kit" + }, ]} gridVariant="uniform-all-items-equal" animationType="slide-up" useInvertedBackground={false} - cardClassName="ring-2 ring-blue-500 ring-offset-2" buttons={[ { text: "View All Kits", href: "/shop" }, ]} @@ -156,13 +164,17 @@ export default function HomePage() { tag="Smart Expansion" accordionItems={[ { - id: "1", title: "Shared Items (One-Time Purchase)", content: "Each kit includes essential tools shared by everyone: emergency radio, flashlight with batteries, first-aid kit, emergency whistle, and multi-tool. When you expand, these aren't duplicated."}, + id: "1", title: "Shared Items (One-Time Purchase)", content: "Each kit includes essential tools shared by everyone: emergency radio, flashlight with batteries, first-aid kit, emergency whistle, and multi-tool. When you expand, these aren't duplicated." + }, { - id: "2", title: "Per-Person Consumables (Scale by Family Size)", content: "Food, water, and hygiene items scale with your household. A 24-hour kit for 2 people has half the consumables of a 4-person kit. Pay only for what you need."}, + id: "2", title: "Per-Person Consumables (Scale by Family Size)", content: "Food, water, and hygiene items scale with your household. A 24-hour kit for 2 people has half the consumables of a 4-person kit. Pay only for what you need." + }, { - id: "3", title: "Duration Extensions (Add Incrementally)", content: "Extend from 24 to 48 hours, or 48 to 72 hours. Extensions add only additional food, water filters, and supplies—never duplicate the shared items you already have."}, + id: "3", title: "Duration Extensions (Add Incrementally)", content: "Extend from 24 to 48 hours, or 48 to 72 hours. Extensions add only additional food, water filters, and supplies—never duplicate the shared items you already have." + }, { - id: "4", title: "Transparent Kit Breakdown", content: "Every product page shows exactly what's shared and what's per-person. You'll know precisely what you're buying and why, with zero guesswork."}, + id: "4", title: "Transparent Kit Breakdown", content: "Every product page shows exactly what's shared and what's per-person. You'll know precisely what you're buying and why, with zero guesswork." + }, ]} imageSrc="http://img.b2bpic.net/free-psd/origami-poster-template-theme_23-2148584260.jpg?_wi=1" imageAlt="SafeHome modular kit component breakdown" @@ -182,16 +194,20 @@ export default function HomePage() { testimonials={[ { id: "1", name: "Michelle Rodriguez", role: "Mother of Two", company: "Colorado", rating: 5, - imageSrc: "http://img.b2bpic.net/free-photo/side-view-beautiful-woman-with-folded-arms-looking-camera_23-2147876783.jpg?_wi=1", imageAlt: "woman portrait confident mother"}, + imageSrc: "http://img.b2bpic.net/free-photo/side-view-beautiful-woman-with-folded-arms-looking-camera_23-2147876783.jpg?_wi=1", imageAlt: "woman portrait confident mother" + }, { id: "2", name: "David Chen", role: "Homeowner", company: "California", rating: 5, - imageSrc: "http://img.b2bpic.net/free-photo/portrait-handsome-man-sitting-sofa_329181-2737.jpg?_wi=1", imageAlt: "man portrait confident homeowner"}, + imageSrc: "http://img.b2bpic.net/free-photo/portrait-handsome-man-sitting-sofa_329181-2737.jpg?_wi=1", imageAlt: "man portrait confident homeowner" + }, { id: "3", name: "Sarah Williams", role: "Family of Four", company: "Texas", rating: 5, - imageSrc: "http://img.b2bpic.net/free-photo/young-female-blazer-beauty-blonde_1139-773.jpg?_wi=1", imageAlt: "woman portrait family mother"}, + imageSrc: "http://img.b2bpic.net/free-photo/young-female-blazer-beauty-blonde_1139-773.jpg?_wi=1", imageAlt: "woman portrait family mother" + }, { id: "4", name: "James Park", role: "Apartment Dweller", company: "New York", rating: 5, - imageSrc: "http://img.b2bpic.net/free-photo/man-looks-seriously-has-strict-expression-gazes-directly-camera-wears-blue-velvet-shirt-smirks-face-isolated-beige_273609-54464.jpg?_wi=1", imageAlt: "man portrait urban apartment dweller"}, + imageSrc: "http://img.b2bpic.net/free-photo/man-looks-seriously-has-strict-expression-gazes-directly-camera-wears-blue-velvet-shirt-smirks-face-isolated-beige_273609-54464.jpg?_wi=1", imageAlt: "man portrait urban apartment dweller" + }, ]} kpiItems={[ { value: "15,000+", label: "Families Prepared" }, @@ -216,21 +232,29 @@ export default function HomePage() { faqsAnimation="slide-up" faqs={[ { - id: "1", title: "What's included in a SafeHome kit?", content: "Every kit includes water (1 liter per person per day), shelf-stable food, first-aid supplies, emergency radio, flashlight, batteries, whistle, multi-tool, emergency blanket, hygiene items, and instructional materials. Exact contents vary by duration (24/48/72 hours)."}, + id: "1", title: "What's included in a SafeHome kit?", content: "Every kit includes water (1 liter per person per day), shelf-stable food, first-aid supplies, emergency radio, flashlight, batteries, whistle, multi-tool, emergency blanket, hygiene items, and instructional materials. Exact contents vary by duration (24/48/72 hours)." + }, { - id: "2", title: "Can I customize my kit?", content: "Yes! Use our Kit Builder to select family size, duration, and add extensions. You can also add individual items from our product catalog to tailor your kit to your family's specific needs."}, + id: "2", title: "Can I customize my kit?", content: "Yes! Use our Kit Builder to select family size, duration, and add extensions. You can also add individual items from our product catalog to tailor your kit to your family's specific needs." + }, { - id: "3", title: "How does the no-duplicate system work?", content: "When you extend your kit (e.g., from 24 to 72 hours), we only add additional consumables and expansion items. Shared items like your radio and first-aid kit aren't duplicated—you keep the ones you have."}, + id: "3", title: "How does the no-duplicate system work?", content: "When you extend your kit (e.g., from 24 to 72 hours), we only add additional consumables and expansion items. Shared items like your radio and first-aid kit aren't duplicated—you keep the ones you have." + }, { - id: "4", title: "What's the subscription service?", content: "Our subscription automatically renews perishable food items before expiration. You set the frequency, we handle the shipping. Plus, get notifications about upcoming expiration dates and renewal shipments."}, + id: "4", title: "What's the subscription service?", content: "Our subscription automatically renews perishable food items before expiration. You set the frequency, we handle the shipping. Plus, get notifications about upcoming expiration dates and renewal shipments." + }, { - id: "5", title: "How long do supplies last?", content: "Most items have 5-10 year shelf lives. Our subscription service ensures you refresh food items regularly. We include expiration dates on all products and guide you on proper storage."}, + id: "5", title: "How long do supplies last?", content: "Most items have 5-10 year shelf lives. Our subscription service ensures you refresh food items regularly. We include expiration dates on all products and guide you on proper storage." + }, { - id: "6", title: "Do you offer international shipping?", content: "Currently, we ship to all US addresses. International orders coming soon. Sign up for our newsletter to be notified when we expand."}, + id: "6", title: "Do you offer international shipping?", content: "Currently, we ship to all US addresses. International orders coming soon. Sign up for our newsletter to be notified when we expand." + }, { - id: "7", title: "What's your return policy?", content: "30-day money-back guarantee on all kits. If you're not satisfied for any reason, contact our support team for a full refund. No questions asked."}, + id: "7", title: "What's your return policy?", content: "30-day money-back guarantee on all kits. If you're not satisfied for any reason, contact our support team for a full refund. No questions asked." + }, { - id: "8", title: "How do I track expiration dates?", content: "Your SafeHome dashboard shows all items with expiration dates. Get email reminders 30 days before expiration. Activate subscriptions to auto-renew without thinking about it."}, + id: "8", title: "How do I track expiration dates?", content: "Your SafeHome dashboard shows all items with expiration dates. Get email reminders 30 days before expiration. Activate subscriptions to auto-renew without thinking about it." + }, ]} />
-- 2.49.1 From d02c21bc496102a1a48883c6edcd5c95969c8eb9 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:18 +0000 Subject: [PATCH 08/11] Add src/app/register/page.tsx --- src/app/register/page.tsx | 202 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 src/app/register/page.tsx diff --git a/src/app/register/page.tsx b/src/app/register/page.tsx new file mode 100644 index 0000000..3b9e7b5 --- /dev/null +++ b/src/app/register/page.tsx @@ -0,0 +1,202 @@ +"use client"; + +import { useState } from "react"; +import Link from "next/link"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; +import MediaAbout from "@/components/sections/about/MediaAbout"; + +export default function RegisterPage() { + const [formData, setFormData] = useState({ + name: "", email: "", password: "", confirmPassword: "", agreeTerms: false, + }); + const [error, setError] = useState(""); + const [success, setSuccess] = useState(false); + + const navItems = [ + { name: "Shop", id: "shop" }, + { name: "How It Works", id: "how-it-works" }, + { name: "About", id: "about" }, + { name: "Reviews", id: "reviews" }, + { name: "Contact", id: "contact" }, + ]; + + const handleChange = (e: React.ChangeEvent) => { + const { name, value, type, checked } = e.target; + setFormData((prev) => ({ + ...prev, + [name]: type === "checkbox" ? checked : value, + })); + setError(""); + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + + if (!formData.name || !formData.email || !formData.password) { + setError("All fields are required"); + return; + } + + if (formData.password !== formData.confirmPassword) { + setError("Passwords do not match"); + return; + } + + if (!formData.agreeTerms) { + setError("You must agree to the terms and conditions"); + return; + } + + setSuccess(true); + setFormData({ + name: "", email: "", password: "", confirmPassword: "", agreeTerms: false, + }); + }; + + return ( + + + +
+
+
+

Create Account

+

Join SafeHome and start preparing for emergencies

+ + {success && ( +
+

✓ Account created successfully! Redirecting to login...

+
+ )} + + {error && ( +
+

{error}

+
+ )} + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ +

+ Already have an account?{" "} + + Sign In + +

+
+
+
+ + +
+ ); +} \ No newline at end of file -- 2.49.1 From 079b92975e265fa45a50750f3fe5a428da78d515 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:19 +0000 Subject: [PATCH 09/11] Add src/app/shop/[productId]/page.tsx --- src/app/shop/[productId]/page.tsx | 138 ++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 src/app/shop/[productId]/page.tsx diff --git a/src/app/shop/[productId]/page.tsx b/src/app/shop/[productId]/page.tsx new file mode 100644 index 0000000..6487221 --- /dev/null +++ b/src/app/shop/[productId]/page.tsx @@ -0,0 +1,138 @@ +"use client"; + +import { useState } from "react"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; +import ProductDetailCard from "@/components/ecommerce/productDetail/ProductDetailCard"; +import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; + +const productDatabase: Record = { + "kit-2p-24h": { + name: "2-Person 24-Hour Kit", price: "$89.00", rating: 4.8, + description: "Perfect for couples or two individuals. Includes everything needed for 24 hours: water, food, first aid, and emergency tools.", images: [ + { src: "http://img.b2bpic.net/free-photo/sporty-girl-packing-bag-training-sports-girl-going-training-preparing-training_169016-67560.jpg?_wi=1", alt: "2-Person 24-Hour Kit - Front View" }, + { src: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=1", alt: "2-Person 24-Hour Kit - Contents" }, + ], + }, + "kit-4p-24h": { + name: "4-Person 24-Hour Kit", price: "$149.00", rating: 4.9, + description: "Ideal for families with children. Comprehensive 24-hour emergency kit for four people with age-appropriate items.", images: [ + { src: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=1", alt: "4-Person 24-Hour Kit - Front View" }, + { src: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1", alt: "4-Person 24-Hour Kit - Contents" }, + ], + }, + "kit-4p-72h": { + name: "4-Person 72-Hour Kit", price: "$299.00", rating: 4.9, + description: "Extended family preparedness for 72 hours. Complete coverage for four people with enhanced supplies and variety.", images: [ + { src: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1", alt: "4-Person 72-Hour Kit - Front View" }, + { src: "http://img.b2bpic.net/free-photo/top-view-storage-devices-glasses_23-2149319333.jpg?_wi=1", alt: "4-Person 72-Hour Kit - Contents" }, + ], + }, + "kit-1p-extended": { + name: "1-Person Extended Bundle", price: "$179.00", rating: 4.7, + description: "Solo survival bundle with modular expansion capability. Start with 24-hour coverage and expand as needed.", images: [ + { src: "http://img.b2bpic.net/free-photo/top-view-storage-devices-glasses_23-2149319333.jpg?_wi=1", alt: "1-Person Extended Bundle - Front View" }, + { src: "http://img.b2bpic.net/free-photo/sporty-girl-packing-bag-training-sports-girl-going-training-preparing-training_169016-67560.jpg?_wi=1", alt: "1-Person Extended Bundle - Contents" }, + ], + }, +}; + +export default function ProductDetailPage({ params }: { params: { productId: string } }) { + const product = productDatabase[params.productId]; + const navItems = [ + { name: "Shop", id: "/shop" }, + { name: "How It Works", id: "how-it-works" }, + { name: "About", id: "about" }, + { name: "Reviews", id: "reviews" }, + { name: "Contact", id: "contact" }, + ]; + + const [selectedSize, setSelectedSize] = useState("M"); + const [selectedQuantity, setSelectedQuantity] = useState("1"); + + if (!product) { + return ( + + +
+

Product not found

+
+
+ ); + } + + return ( + + + +
+
+ { + console.log(`Added ${selectedQuantity}x ${product.name} (Size: ${selectedSize})`); + alert(`Added to cart: ${product.name}`); + }, + }, + { + text: "Continue Shopping", href: "/shop"}, + ]} + /> +
+
+ + +
+ ); +} \ No newline at end of file -- 2.49.1 From 46d7a4813fed58b26fafc9188c1c265a72585ecf Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:19 +0000 Subject: [PATCH 10/11] Update src/app/shop/page.tsx --- src/app/shop/page.tsx | 215 ++++++++++++++++++------------------------ 1 file changed, 90 insertions(+), 125 deletions(-) diff --git a/src/app/shop/page.tsx b/src/app/shop/page.tsx index bcb70f9..d30c783 100644 --- a/src/app/shop/page.tsx +++ b/src/app/shop/page.tsx @@ -1,22 +1,43 @@ "use client"; -import Link from "next/link"; +import { useState } from "react"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple"; import HeroLogoBillboardSplit from "@/components/sections/hero/HeroLogoBillboardSplit"; import ProductCardFour from "@/components/sections/product/ProductCardFour"; -import FaqBase from "@/components/sections/faq/FaqBase"; import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; export default function ShopPage() { const navItems = [ - { name: "Shop", id: "shop" }, + { name: "Shop", id: "/shop" }, { name: "How It Works", id: "how-it-works" }, { name: "About", id: "about" }, { name: "Reviews", id: "reviews" }, { name: "Contact", id: "contact" }, ]; + const [selectedCategory, setSelectedCategory] = useState("all"); + + const allProducts = [ + { + id: "kit-2p-24h", name: "2-Person 24-Hour Kit", price: "$89", variant: "Couples & Small Households", imageSrc: "http://img.b2bpic.net/free-photo/sporty-girl-packing-bag-training-sports-girl-going-training-preparing-training_169016-67560.jpg?_wi=1", imageAlt: "2-person 24-hour emergency kit", category: "24-hour"}, + { + id: "kit-4p-24h", name: "4-Person 24-Hour Kit", price: "$149", variant: "Families with Children", imageSrc: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=1", imageAlt: "4-person 24-hour emergency kit", category: "24-hour"}, + { + id: "kit-4p-72h", name: "4-Person 72-Hour Kit", price: "$299", variant: "Complete Family Preparedness", imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1", imageAlt: "4-person 72-hour emergency kit", category: "72-hour"}, + { + id: "kit-1p-extended", name: "1-Person Extended Bundle", price: "$179", variant: "Individual with Expandability", imageSrc: "http://img.b2bpic.net/free-photo/top-view-storage-devices-glasses_23-2149319333.jpg?_wi=1", imageAlt: "1-person extended emergency kit", category: "bundles"}, + { + id: "kit-1p-24h", name: "1-Person 24-Hour Kit", price: "$49", variant: "Solo Travelers & Individuals", imageSrc: "http://img.b2bpic.net/free-photo/top-view-storage-devices-glasses_23-2149319333.jpg?_wi=1", imageAlt: "1-person 24-hour emergency kit", category: "24-hour"}, + { + id: "kit-6p-72h", name: "6-Person 72-Hour Kit", price: "$449", variant: "Extended Family Coverage", imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=1", imageAlt: "6-person 72-hour emergency kit", category: "72-hour"}, + ]; + + const filteredProducts = + selectedCategory === "all" + ? allProducts + : allProducts.filter((p: any) => p.category === selectedCategory); + return (
-
+
-
+
+
+
+ + + + +
+
+ ({ + id: p.id, + name: p.name, + price: p.price, + variant: p.variant, + imageSrc: p.imageSrc, + imageAlt: p.imageAlt, + onProductClick: () => { + window.location.href = `/shop/${p.id}`; }, - { - id: "kit-2p-24h", - name: "2-Person 24-Hour Kit", - price: "$89", - variant: "Couples & Small Households", - imageSrc: "http://img.b2bpic.net/free-photo/sporty-girl-packing-bag-training-sports-girl-going-training-preparing-training_169016-67560.jpg?_wi=2", - imageAlt: "2-person 24-hour emergency kit", - }, - { - id: "kit-3p-24h", - name: "3-Person 24-Hour Kit", - price: "$119", - variant: "Small Family", - imageSrc: "http://img.b2bpic.net/free-photo/high-view-father-son-playing-with-toys_23-2148500810.jpg?_wi=2", - imageAlt: "3-person 24-hour emergency kit", - }, - { - id: "kit-4p-24h", - name: "4-Person 24-Hour Kit", - price: "$149", - variant: "Families with Children", - imageSrc: "http://img.b2bpic.net/free-photo/young-family-enjoying-trips_23-2149176539.jpg?_wi=3", - imageAlt: "4-person 24-hour emergency kit", - }, - { - id: "kit-2p-48h", - name: "2-Person 48-Hour Kit", - price: "$149", - variant: "Extended 2-Day", - imageSrc: "http://img.b2bpic.net/free-photo/luggage-seen-from-rear-car-window_23-2150934321.jpg?_wi=2", - imageAlt: "2-person 48-hour emergency kit", - }, - { - id: "kit-4p-48h", - name: "4-Person 48-Hour Kit", - price: "$229", - variant: "Extended Family", - imageSrc: "http://img.b2bpic.net/free-photo/affectionate-little-girl-with-eyes-closed-embracing-her-father-home-mother-is-background_637285-3199.jpg?_wi=2", - imageAlt: "4-person 48-hour emergency kit", - }, - { - id: "kit-2p-72h", - name: "2-Person 72-Hour Kit", - price: "$199", - variant: "Complete 3-Day", - imageSrc: "http://img.b2bpic.net/free-photo/portrait-woman-home-yawning_23-2148923998.jpg?_wi=2", - imageAlt: "2-person 72-hour emergency kit", - }, - { - id: "kit-4p-72h", - name: "4-Person 72-Hour Kit", - price: "$299", - variant: "Complete Family Preparedness", - imageSrc: "http://img.b2bpic.net/free-photo/side-view-beautiful-woman-with-folded-arms-looking-camera_23-2147876783.jpg?_wi=2", - imageAlt: "4-person 72-hour emergency kit", - }, - ]} + }))} gridVariant="uniform-all-items-equal" animationType="slide-up" useInvertedBackground={false} - buttons={[ - { text: "View Collections", href: "/" }, - ]} - /> -
-
- -
-
-
-- 2.49.1 From 90a0b05449d0f61c56d558287655c0660c00a833 Mon Sep 17 00:00:00 2001 From: bender Date: Tue, 10 Mar 2026 20:20:20 +0000 Subject: [PATCH 11/11] Update src/app/styles/variables.css --- src/app/styles/variables.css | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/app/styles/variables.css b/src/app/styles/variables.css index 32083d5..a2b5f3a 100644 --- a/src/app/styles/variables.css +++ b/src/app/styles/variables.css @@ -10,15 +10,15 @@ --accent: #ffffff; --background-accent: #ffffff; */ - --background: #e3deea; - --card: #ffffff; - --foreground: #27231f; - --primary-cta: #27231f; + --background: #ffffff; + --card: #f9f9f9; + --foreground: #0a3a1f; + --primary-cta: #0a7039; --primary-cta-text: #e3deea; - --secondary-cta: #ffffff; + --secondary-cta: #f9f9f9; --secondary-cta-text: #27231f; - --accent: #c68a62; - --background-accent: #c68a62; + --accent: #106EFB; + --background-accent: #ff8c42; /* text sizing - set by ThemeProvider */ /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); -- 2.49.1