From 7342acbf97b91c0fb7bb9a7e650abcc3d4647a26 Mon Sep 17 00:00:00 2001 From: SoSweetHam Date: Tue, 2 Sep 2025 11:43:18 +0530 Subject: [PATCH] feat: add dream sync --- platforms/dreamSync/.gitignore | 6 + platforms/dreamSync/client/index.html | 13 + platforms/dreamSync/client/src/App.tsx | 63 + .../src/components/add-wishlist-modal.tsx | 234 + .../client/src/components/auth-modal.tsx | 268 + .../src/components/find-matches-modal.tsx | 446 + .../client/src/components/group-card.tsx | 206 + .../client/src/components/navigation.tsx | 133 + .../src/components/profile-completion.tsx | 95 + .../client/src/components/ui/accordion.tsx | 56 + .../client/src/components/ui/alert-dialog.tsx | 139 + .../client/src/components/ui/alert.tsx | 59 + .../client/src/components/ui/aspect-ratio.tsx | 5 + .../client/src/components/ui/avatar.tsx | 50 + .../client/src/components/ui/badge.tsx | 36 + .../client/src/components/ui/breadcrumb.tsx | 115 + .../client/src/components/ui/button.tsx | 56 + .../client/src/components/ui/calendar.tsx | 68 + .../client/src/components/ui/card.tsx | 79 + .../client/src/components/ui/carousel.tsx | 260 + .../client/src/components/ui/chart.tsx | 365 + .../client/src/components/ui/checkbox.tsx | 28 + .../client/src/components/ui/collapsible.tsx | 11 + .../client/src/components/ui/command.tsx | 151 + .../client/src/components/ui/context-menu.tsx | 198 + .../client/src/components/ui/dialog.tsx | 122 + .../client/src/components/ui/drawer.tsx | 118 + .../src/components/ui/dropdown-menu.tsx | 198 + .../client/src/components/ui/form.tsx | 178 + .../client/src/components/ui/hover-card.tsx | 29 + .../client/src/components/ui/input-otp.tsx | 69 + .../client/src/components/ui/input.tsx | 22 + .../client/src/components/ui/label.tsx | 24 + .../client/src/components/ui/menubar.tsx | 256 + .../src/components/ui/navigation-menu.tsx | 128 + .../client/src/components/ui/pagination.tsx | 117 + .../client/src/components/ui/popover.tsx | 29 + .../client/src/components/ui/progress.tsx | 28 + .../client/src/components/ui/radio-group.tsx | 42 + .../client/src/components/ui/resizable.tsx | 45 + .../client/src/components/ui/scroll-area.tsx | 46 + .../client/src/components/ui/select.tsx | 160 + .../client/src/components/ui/separator.tsx | 29 + .../client/src/components/ui/sheet.tsx | 140 + .../client/src/components/ui/sidebar.tsx | 771 + .../client/src/components/ui/skeleton.tsx | 15 + .../client/src/components/ui/slider.tsx | 26 + .../client/src/components/ui/switch.tsx | 27 + .../client/src/components/ui/table.tsx | 117 + .../client/src/components/ui/tabs.tsx | 53 + .../client/src/components/ui/textarea.tsx | 22 + .../client/src/components/ui/toast.tsx | 127 + .../client/src/components/ui/toaster.tsx | 33 + .../client/src/components/ui/toggle-group.tsx | 61 + .../client/src/components/ui/toggle.tsx | 43 + .../client/src/components/ui/tooltip.tsx | 30 + .../client/src/components/user-card.tsx | 169 + .../client/src/components/wish-user-card.tsx | 165 + .../dreamSync/client/src/hooks/use-mobile.tsx | 19 + .../dreamSync/client/src/hooks/use-toast.ts | 191 + .../dreamSync/client/src/hooks/useAuth.ts | 15 + platforms/dreamSync/client/src/index.css | 161 + .../dreamSync/client/src/lib/authUtils.ts | 3 + .../dreamSync/client/src/lib/queryClient.ts | 57 + platforms/dreamSync/client/src/lib/utils.ts | 6 + platforms/dreamSync/client/src/main.tsx | 5 + .../dreamSync/client/src/pages/dashboard.tsx | 339 + .../dreamSync/client/src/pages/groups.tsx | 385 + .../dreamSync/client/src/pages/login.tsx | 265 + .../client/src/pages/matches-new.tsx | 696 + .../dreamSync/client/src/pages/not-found.tsx | 21 + .../dreamSync/client/src/pages/profile.tsx | 654 + .../client/src/pages/suggestions.tsx | 696 + .../client/src/pages/wishlist-item.tsx | 282 + .../dreamSync/client/src/pages/wishlist.tsx | 366 + platforms/dreamSync/components.json | 20 + platforms/dreamSync/drizzle.config.ts | 14 + platforms/dreamSync/groups_database.json | 3002 + platforms/dreamSync/package-lock.json | 9335 + platforms/dreamSync/package.json | 109 + platforms/dreamSync/postcss.config.js | 6 + .../dreamSync/server/aiSuggestionsService.ts | 339 + platforms/dreamSync/server/auth.ts | 136 + platforms/dreamSync/server/db.ts | 15 + .../server/ensureFullyPopulatedData.ts | 306 + platforms/dreamSync/server/fixPasswords.ts | 46 + .../server/generateTestSuggestions.ts | 182 + platforms/dreamSync/server/index.ts | 71 + platforms/dreamSync/server/openai.ts | 235 + platforms/dreamSync/server/replitAuth.ts | 161 + platforms/dreamSync/server/routes.ts | 705 + .../dreamSync/server/seedComprehensiveData.ts | 326 + platforms/dreamSync/server/seedData.ts | 342 + .../dreamSync/server/seedEnhancedData.ts | 304 + .../dreamSync/server/seedExtensiveData.ts | 297 + platforms/dreamSync/server/storage.ts | 848 + platforms/dreamSync/server/vite.ts | 85 + platforms/dreamSync/shared/schema.ts | 321 + platforms/dreamSync/tailwind.config.ts | 90 + platforms/dreamSync/temp_groups_export.json | 3002 + platforms/dreamSync/temp_users_export.json | 329737 +++++++++++++++ platforms/dreamSync/tsconfig.json | 23 + platforms/dreamSync/user_wishes.json | 29 + platforms/dreamSync/vite.config.ts | 37 + 104 files changed, 360863 insertions(+) create mode 100644 platforms/dreamSync/.gitignore create mode 100644 platforms/dreamSync/client/index.html create mode 100644 platforms/dreamSync/client/src/App.tsx create mode 100644 platforms/dreamSync/client/src/components/add-wishlist-modal.tsx create mode 100644 platforms/dreamSync/client/src/components/auth-modal.tsx create mode 100644 platforms/dreamSync/client/src/components/find-matches-modal.tsx create mode 100644 platforms/dreamSync/client/src/components/group-card.tsx create mode 100644 platforms/dreamSync/client/src/components/navigation.tsx create mode 100644 platforms/dreamSync/client/src/components/profile-completion.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/accordion.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/alert-dialog.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/alert.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/aspect-ratio.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/avatar.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/badge.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/breadcrumb.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/button.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/calendar.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/card.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/carousel.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/chart.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/checkbox.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/collapsible.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/command.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/context-menu.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/dialog.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/drawer.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/dropdown-menu.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/form.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/hover-card.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/input-otp.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/input.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/label.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/menubar.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/navigation-menu.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/pagination.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/popover.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/progress.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/radio-group.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/resizable.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/scroll-area.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/select.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/separator.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/sheet.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/sidebar.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/skeleton.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/slider.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/switch.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/table.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/tabs.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/textarea.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/toast.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/toaster.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/toggle-group.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/toggle.tsx create mode 100644 platforms/dreamSync/client/src/components/ui/tooltip.tsx create mode 100644 platforms/dreamSync/client/src/components/user-card.tsx create mode 100644 platforms/dreamSync/client/src/components/wish-user-card.tsx create mode 100644 platforms/dreamSync/client/src/hooks/use-mobile.tsx create mode 100644 platforms/dreamSync/client/src/hooks/use-toast.ts create mode 100644 platforms/dreamSync/client/src/hooks/useAuth.ts create mode 100644 platforms/dreamSync/client/src/index.css create mode 100644 platforms/dreamSync/client/src/lib/authUtils.ts create mode 100644 platforms/dreamSync/client/src/lib/queryClient.ts create mode 100644 platforms/dreamSync/client/src/lib/utils.ts create mode 100644 platforms/dreamSync/client/src/main.tsx create mode 100644 platforms/dreamSync/client/src/pages/dashboard.tsx create mode 100644 platforms/dreamSync/client/src/pages/groups.tsx create mode 100644 platforms/dreamSync/client/src/pages/login.tsx create mode 100644 platforms/dreamSync/client/src/pages/matches-new.tsx create mode 100644 platforms/dreamSync/client/src/pages/not-found.tsx create mode 100644 platforms/dreamSync/client/src/pages/profile.tsx create mode 100644 platforms/dreamSync/client/src/pages/suggestions.tsx create mode 100644 platforms/dreamSync/client/src/pages/wishlist-item.tsx create mode 100644 platforms/dreamSync/client/src/pages/wishlist.tsx create mode 100644 platforms/dreamSync/components.json create mode 100644 platforms/dreamSync/drizzle.config.ts create mode 100644 platforms/dreamSync/groups_database.json create mode 100644 platforms/dreamSync/package-lock.json create mode 100644 platforms/dreamSync/package.json create mode 100644 platforms/dreamSync/postcss.config.js create mode 100644 platforms/dreamSync/server/aiSuggestionsService.ts create mode 100644 platforms/dreamSync/server/auth.ts create mode 100644 platforms/dreamSync/server/db.ts create mode 100644 platforms/dreamSync/server/ensureFullyPopulatedData.ts create mode 100644 platforms/dreamSync/server/fixPasswords.ts create mode 100644 platforms/dreamSync/server/generateTestSuggestions.ts create mode 100644 platforms/dreamSync/server/index.ts create mode 100644 platforms/dreamSync/server/openai.ts create mode 100644 platforms/dreamSync/server/replitAuth.ts create mode 100644 platforms/dreamSync/server/routes.ts create mode 100644 platforms/dreamSync/server/seedComprehensiveData.ts create mode 100644 platforms/dreamSync/server/seedData.ts create mode 100644 platforms/dreamSync/server/seedEnhancedData.ts create mode 100644 platforms/dreamSync/server/seedExtensiveData.ts create mode 100644 platforms/dreamSync/server/storage.ts create mode 100644 platforms/dreamSync/server/vite.ts create mode 100644 platforms/dreamSync/shared/schema.ts create mode 100644 platforms/dreamSync/tailwind.config.ts create mode 100644 platforms/dreamSync/temp_groups_export.json create mode 100644 platforms/dreamSync/temp_users_export.json create mode 100644 platforms/dreamSync/tsconfig.json create mode 100644 platforms/dreamSync/user_wishes.json create mode 100644 platforms/dreamSync/vite.config.ts diff --git a/platforms/dreamSync/.gitignore b/platforms/dreamSync/.gitignore new file mode 100644 index 00000000..f9ba7f8b --- /dev/null +++ b/platforms/dreamSync/.gitignore @@ -0,0 +1,6 @@ +node_modules +dist +.DS_Store +server/public +vite.config.ts.* +*.tar.gz \ No newline at end of file diff --git a/platforms/dreamSync/client/index.html b/platforms/dreamSync/client/index.html new file mode 100644 index 00000000..4b4d09e3 --- /dev/null +++ b/platforms/dreamSync/client/index.html @@ -0,0 +1,13 @@ + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/platforms/dreamSync/client/src/App.tsx b/platforms/dreamSync/client/src/App.tsx new file mode 100644 index 00000000..4929bc6f --- /dev/null +++ b/platforms/dreamSync/client/src/App.tsx @@ -0,0 +1,63 @@ +import { Switch, Route } from "wouter"; +import { queryClient } from "./lib/queryClient"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { Toaster } from "@/components/ui/toaster"; +import { TooltipProvider } from "@/components/ui/tooltip"; +import { useAuth } from "@/hooks/useAuth"; +import { Heart } from "lucide-react"; +import NotFound from "@/pages/not-found"; +import Login from "@/pages/login"; +import Dashboard from "@/pages/dashboard"; +import Profile from "@/pages/profile"; +import MatchesNew from "@/pages/matches-new"; +import Suggestions from "@/pages/suggestions"; +import Wishlist from "@/pages/wishlist"; +import WishlistItem from "@/pages/wishlist-item"; + +function Router() { + const { isAuthenticated, isLoading } = useAuth(); + + if (isLoading) { + return ( +
+
+
+ +
+

Loading DreamSync...

+
+
+ ); + } + + return ( + + {!isAuthenticated ? ( + + ) : ( + <> + + + + + + + + )} + + + ); +} + +function App() { + return ( + + + + + + + ); +} + +export default App; diff --git a/platforms/dreamSync/client/src/components/add-wishlist-modal.tsx b/platforms/dreamSync/client/src/components/add-wishlist-modal.tsx new file mode 100644 index 00000000..3a636c42 --- /dev/null +++ b/platforms/dreamSync/client/src/components/add-wishlist-modal.tsx @@ -0,0 +1,234 @@ +import { useState, useEffect } from "react"; +import { useMutation } from "@tanstack/react-query"; +import { useLocation } from "wouter"; +import { useToast } from "@/hooks/use-toast"; +import { apiRequest, queryClient } from "@/lib/queryClient"; +import { isUnauthorizedError } from "@/lib/authUtils"; +import { Dialog, DialogContent } from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; +import { Star, Plus, Loader2, ChevronDown } from "lucide-react"; +import type { WishlistItem } from "@shared/schema"; + +interface AddWishlistModalProps { + open: boolean; + onOpenChange: (open: boolean) => void; + editingItem?: WishlistItem | null; +} + +export default function AddWishlistModal({ open, onOpenChange, editingItem }: AddWishlistModalProps) { + const { toast } = useToast(); + const [, setLocation] = useLocation(); + + // Form state + const [title, setTitle] = useState(editingItem?.title || ""); + const [description, setDescription] = useState(editingItem?.description || ""); + const [priority, setPriority] = useState(editingItem?.priority || "medium"); + + // Reset form when modal opens/closes or editing item changes + useEffect(() => { + if (open) { + setTitle(editingItem?.title || ""); + setDescription(editingItem?.description || ""); + setPriority(editingItem?.priority || "medium"); + } + }, [open, editingItem]); + + const resetForm = () => { + setTitle(""); + setDescription(""); + setPriority("medium"); + }; + + // Add/Update wishlist item mutation + const wishlistMutation = useMutation({ + mutationFn: async () => { + const itemData = { title, description, priority }; + + if (editingItem) { + await apiRequest("PUT", `/api/wishlist/${editingItem.id}`, itemData); + } else { + await apiRequest("POST", "/api/wishlist", itemData); + } + }, + onSuccess: (data) => { + queryClient.invalidateQueries({ queryKey: ["/api/profile"] }); + toast({ + title: "Success", + description: editingItem ? "Wishlist item updated successfully!" : "Wishlist item added successfully!" + }); + resetForm(); + onOpenChange(false); + + // Redirect to wishlist page with new item highlighted + if (!editingItem) { + setLocation("/wishlist?highlight=new"); + } + }, + onError: (error) => { + if (isUnauthorizedError(error)) { + toast({ + title: "Unauthorized", + description: "You are logged out. Logging in again...", + variant: "destructive", + }); + setTimeout(() => { + window.location.href = "/api/login"; + }, 500); + return; + } + toast({ + title: "Error", + description: `Failed to ${editingItem ? 'update' : 'add'} wishlist item. Please try again.`, + variant: "destructive", + }); + }, + }); + + const handleSubmit = () => { + if (!title.trim()) { + toast({ + title: "Validation Error", + description: "Please fill in the title field.", + variant: "destructive", + }); + return; + } + wishlistMutation.mutate(); + }; + + const handleCancel = () => { + resetForm(); + onOpenChange(false); + }; + + return ( + + + {/* Header */} +
+
+ +
+

+ {editingItem ? "Edit Wishlist Item" : "Add Wishlist Item"} +

+

+ {editingItem ? "Update your wishlist item details" : "Share what you're looking to achieve or acquire"} +

+
+ + {/* Form Content */} +
+ {/* Title and Priority Row */} +
+
+
+
+ +
+ +
+
+ setTitle(e.target.value)} + placeholder="Learn Spanish, Find a mentor..." + className="border-0 bg-white/70 backdrop-blur-sm shadow-sm focus:ring-2 focus:ring-blue-200 focus:bg-white transition-all duration-200" + /> +
+
+ +
+
+
+ +
+ +
+
+ + + + + + setPriority("urgent")}> + 🔥 Urgent! + + setPriority("high")}> + High Priority + + setPriority("medium")}> + Medium Priority + + setPriority("low")}> + Low Priority + + + +
+
+
+ + {/* Description */} +
+
+
+ +
+ +
+
+