diff --git a/app/(landing)/me/page.tsx b/app/(landing)/me/page.tsx index 6cca701e3..5774f0af3 100644 --- a/app/(landing)/me/page.tsx +++ b/app/(landing)/me/page.tsx @@ -2,7 +2,7 @@ import { ProfileData } from './profile-data'; export default async function MePage() { return ( -
+
); diff --git a/app/(landing)/me/profile-data.tsx b/app/(landing)/me/profile-data.tsx index c26a91493..3ea712a48 100644 --- a/app/(landing)/me/profile-data.tsx +++ b/app/(landing)/me/profile-data.tsx @@ -16,6 +16,7 @@ export async function ProfileData() { try { const userData = await getMe(session.user.accessToken); + // console.log(userData); return ( 4 && pathname !== '/dashboard/organizations'); return ( -
+
{showSidebar ? ( -
+
-
{children}
+
{children}
) : (
{children}
diff --git a/app/(landing)/privacy/page.tsx b/app/(landing)/privacy/page.tsx index b60a81d89..f4acdb600 100644 --- a/app/(landing)/privacy/page.tsx +++ b/app/(landing)/privacy/page.tsx @@ -7,7 +7,7 @@ export const metadata: Metadata = generatePageMetadata('privacy'); const PrivacyPage = () => { return (
- Privacy Page + Privacy Pages
); }; diff --git a/app/globals.css b/app/globals.css index 2fef9035b..26299f5f1 100644 --- a/app/globals.css +++ b/app/globals.css @@ -55,6 +55,8 @@ --color-success-700: #036b26; --color-success-800: #015b20; --color-success-900: #004617; + + --color-active-bg: rgba(167, 249, 80, 0.08); } /* Custom scrollbar styles for comment modal */ .custom-scrollbar { diff --git a/components/ProjectCard.tsx b/components/ProjectCard.tsx index 6bfbc6bf2..13ab895a1 100644 --- a/components/ProjectCard.tsx +++ b/components/ProjectCard.tsx @@ -186,7 +186,7 @@ const ProjectCard: React.FC = memo( {project.category} - + {project.category}
diff --git a/components/landing-page/blog/BlogPostDetails.tsx b/components/landing-page/blog/BlogPostDetails.tsx index a7f3faa22..a48bd202e 100644 --- a/components/landing-page/blog/BlogPostDetails.tsx +++ b/components/landing-page/blog/BlogPostDetails.tsx @@ -213,7 +213,7 @@ const BlogPostDetails: React.FC = ({ post }) => {
@@ -400,6 +412,7 @@ function AuthenticatedNav({ // even for unauthenticated users, so designers/QA can test the flow. function UnauthenticatedNav() { const [createProjectModalOpen, setCreateProjectModalOpen] = useState(false); + const { width } = useWindowSize(); const { executeProtectedAction, @@ -424,18 +437,20 @@ function UnauthenticatedNav() { } return ( -
+
{ await executeProtectedAction(() => setCreateProjectModalOpen(true)); }} className='border-white/20 text-white hover:bg-white/10' + size={width && width < 1024 ? 'sm' : 'default'} > - - Add Project + + Add Project + Add - + Sign in { gsap.fromTo( @@ -578,43 +594,56 @@ function MobileMenu({ - + -
+ {/* Header with logo and close button */} +
logo
- - + +
-
- {menuItems.map(item => ( - - {item.label} - - ))} + {/* Navigation Menu */} +
+

+ Navigation +

+
+ {menuItems.map(item => ( + + {item.label} + + ))} +
{isLoading ? ( @@ -623,89 +652,122 @@ function MobileMenu({
) : isAuthenticated ? ( -
-
- - - - {user?.name?.charAt(0) || - user?.profile?.firstName?.charAt(0) || - user?.email?.charAt(0) || - 'U'} - - -
-

- {user?.name || user?.profile?.firstName || 'User'} -

-

{user?.email}

+
+ {/* User Profile Section */} +
+
+ + + + {user?.name?.charAt(0) || + user?.profile?.firstName?.charAt(0) || + user?.email?.charAt(0) || + 'U'} + + +
+

+ {user?.name || user?.profile?.firstName || 'User'} +

+

+ {user?.email} +

+
{/* Wallet Connection */} -
-

+

+

Wallet -

+

-
-

- Navigation -

- - Profile - - - Organizations - - +

+ Quick Actions +

+
+ + + Profile + + + + Organizations + + + + Settings + +
+
+ {/* Sign Out Button */} +
+ !isLoading && logout()} + disabled={isLoading} + className='w-full border-red-500/50 text-red-400 hover:border-red-500 hover:bg-red-500/10 hover:text-red-300' > - Settings - + + {isLoading ? 'Signing Out...' : 'Sign Out'} +
- !isLoading && logout()} - disabled={isLoading} - > - {isLoading ? 'Signing Out...' : 'Sign Out'} -
) : ( -
-
-

- Wallet -

+
+ {/* Wallet Connection */} +
+

+ Connect Wallet +

- - Get Started - + + {/* Get Started Section */} +
+

+ Get Started +

+ + + + Get Started + + +
)}
diff --git a/components/landing-page/project/ProjectCard.tsx b/components/landing-page/project/ProjectCard.tsx index 872ee0db9..a7bab2c8d 100644 --- a/components/landing-page/project/ProjectCard.tsx +++ b/components/landing-page/project/ProjectCard.tsx @@ -13,6 +13,7 @@ type ProjectCardProps = { status: 'Validation' | 'Funding' | 'Funded' | 'Completed'; deadlineInDays: number; milestoneRejected?: boolean; + isFullWidth?: boolean; votes?: { current: number; goal: number; @@ -37,6 +38,7 @@ function ProjectCard({ status, deadlineInDays, milestoneRejected, + isFullWidth = false, votes, funding, milestones, @@ -93,7 +95,7 @@ function ProjectCard({ return (
diff --git a/components/organization/OrganizationContent.tsx b/components/organization/OrganizationContent.tsx index 18bd3a16d..e1ae5a745 100644 --- a/components/organization/OrganizationContent.tsx +++ b/components/organization/OrganizationContent.tsx @@ -4,6 +4,7 @@ import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import OrganizationCard from './cards/OrganzationCards'; import Link from 'next/link'; +import { BoundlessButton } from '../buttons'; const mockOrganizations = [ { @@ -53,12 +54,12 @@ export default function OrganizationContent() {
+
)} @@ -92,7 +97,7 @@ export default function OrganizationContent() { {!hasorganizations && (
- diff --git a/components/organization/OrganizationHeader.tsx b/components/organization/OrganizationHeader.tsx index 33925a7b9..4a17dc3ef 100644 --- a/components/organization/OrganizationHeader.tsx +++ b/components/organization/OrganizationHeader.tsx @@ -1,12 +1,5 @@ 'use client'; -import { - ChevronDown, - User, - Building2, - Settings, - LogOut, - HomeIcon, -} from 'lucide-react'; +import { ChevronDown, User, Building2, Settings, LogOut } from 'lucide-react'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { DropdownMenu, @@ -33,7 +26,7 @@ export default function OrganizationHeader() { (pathname.split('/').length > 4 && pathname !== '/dashboard/organizations'); return ( -
+
{/* Home Link */} - + + + {showOrgSelector && }
diff --git a/components/organization/OrganizationSettings.tsx b/components/organization/OrganizationSettings.tsx index c82ab3642..c4437a689 100644 --- a/components/organization/OrganizationSettings.tsx +++ b/components/organization/OrganizationSettings.tsx @@ -2,16 +2,12 @@ import { useState } from 'react'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { Input } from '@/components/ui/input'; -import { Textarea } from '@/components/ui/textarea'; -import { Button } from '@/components/ui/button'; -import { Label } from '@/components/ui/label'; import { Menu } from 'lucide-react'; -import { cn } from '@/lib/utils'; -import FormHint from '../form/FormHint'; -import MDEditor from '@uiw/react-md-editor'; import ResponsiveSidebar from './ResponsiveSidebar'; - +import ProfileTab from './tabs/ProfileTab'; +import LinksTab from './tabs/LinksTab'; +import MembersTab from './tabs/MembersTab'; +import TransferOwnershipTab from './tabs/TransferOwnershipTab'; interface OrganizationSettingsProps { organizationId?: string; initialData?: { @@ -26,23 +22,28 @@ export default function OrganizationSettings({ organizationId, initialData, }: OrganizationSettingsProps) { - const [formData, setFormData] = useState({ - name: initialData?.name || '', - logo: initialData?.logo || '', - tagline: initialData?.tagline || '', - about: initialData?.about || '', - }); - const [modalOpen, setModalOpen] = useState(false); - const handleSave = () => { - // console.log('Saving organization data:', formData); + const handleProfileSave = () => { + // TODO: Implement profile save logic + }; + + const handleLinksSave = () => { + // TODO: Implement links save logic + }; + + const handleMembersSave = () => { + // TODO: Implement members save logic + }; + + const handleTransferOwnership = () => { + // TODO: Implement ownership transfer logic }; return (
-
+
{/* Hamburger Menu - Visible only on medium screens and below */} +
Profile Links Members Transfer Ownership @@ -82,189 +84,25 @@ export default function OrganizationSettings({
-
- - {/* Organization Name */} -
- - - setFormData({ ...formData, name: e.target.value }) - } - placeholder='Enter a name for your organization' - className={cn( - 'focus-visible:border-primary border-[#484848] bg-[#1A1A1A] p-4 text-white placeholder:text-[#919191]' - )} - /> -
- - {/* Logo Upload */} -
- - -
- - - -
- -
- - Accepted files should be JPEG or PNG, and less than 2 MB. - - } - side='top' - /> -
-

- Accepted file type:{' '} - JPEG or{' '} - PNG, and - less than{' '} - 2 MB. -

-

- A size of{' '} - 480 x 480 px{' '} - is recommended. -

-
-
-
- - {/* Tagline */} -
-
- - 0/300 -
- -