-
Skills
-
+
+ Skills
+
+
{user.skills.map((skill: string) => (
- {skill}
+
+ {skill}
+
))}
diff --git a/apps/hackathon/src/app/onboarding/user/page.tsx b/apps/hackathon/src/app/onboarding/user/page.tsx
index 2c4aeac..120b851 100644
--- a/apps/hackathon/src/app/onboarding/user/page.tsx
+++ b/apps/hackathon/src/app/onboarding/user/page.tsx
@@ -133,7 +133,6 @@ const UserOnboardingPage: FC = (): ReactElement => {
/>
) : (
- {/*
👤 */}
FAQ
-
+
Masuk
{
const [avatarPreview, setAvatarPreview] = useState('');
const { mutateAsync: updateUser, isPending: isUpdating } = useUpdateUserMe();
- const { mutateAsync: uploadAvatar, isPending: isUploading } = useUploadAvatar();
+ const { mutateAsync: uploadAvatar, isPending: isUploading } =
+ useUploadAvatar();
const { session } = useAuthStore();
const form = useForm({
@@ -63,7 +65,15 @@ const ProfilePage: FC = (): ReactElement => {
if (session?.user?.skills) {
form.setValue('skills', session.user.skills);
}
- }, [session?.user?.avatar, session?.user?.fullname, session?.user?.location, session?.user?.bio, session?.user?.skills, avatarPreview, form]);
+ }, [
+ session?.user?.avatar,
+ session?.user?.fullname,
+ session?.user?.location,
+ session?.user?.bio,
+ session?.user?.skills,
+ avatarPreview,
+ form,
+ ]);
const handleAvatarChange = (e: React.ChangeEvent) => {
const file = e.target.files?.[0];
@@ -133,10 +143,7 @@ const ProfilePage: FC = (): ReactElement => {
Edit Profile
-
+
{
-
Update your photo and name
+
Update your photo and name
-
+
Click the camera icon to change your photo
Format: JPG, PNG. Max 5MB
@@ -217,11 +229,12 @@ const ProfilePage: FC = (): ReactElement => {
label="Full Name"
placeholder="Enter your full name"
name="fullname"
+ size="lg"
/>
{/* City */}
-
+
City
{
{/* Role/Skills */}
-
+
Role / Skills
{
{ROLE_OPTIONS.map((role) => (
{
{/* Bio */}
-
+
Bio (Optional)
{
placeholder="Tell us about yourself..."
rows={4}
className="w-full"
+ size="lg"
/>
{fieldState.error && (
diff --git a/apps/hackathon/src/app/teams/layout.tsx b/apps/hackathon/src/app/teams/layout.tsx
index 182d6ad..d7da398 100644
--- a/apps/hackathon/src/app/teams/layout.tsx
+++ b/apps/hackathon/src/app/teams/layout.tsx
@@ -9,21 +9,33 @@ const TeamsLayout: FC = (): ReactElement => {
setSidebarOpen(false)} />
-
+
{/* Mobile Header with Hamburger */}
-
-
setSidebarOpen(true)}
- className="p-2 rounded-lg hover:bg-gray-100 transition-colors"
- >
-
-
-
-
-
🏆 Hackathon
+
+
+
setSidebarOpen(true)}
+ className="p-2 rounded-lg hover:bg-gray-100 transition-colors"
+ >
+
+
+
+
+
Hackathon
+
-
+
diff --git a/apps/hackathon/src/components/city-select.tsx b/apps/hackathon/src/components/city-select.tsx
index 8c3a999..7674c97 100644
--- a/apps/hackathon/src/components/city-select.tsx
+++ b/apps/hackathon/src/components/city-select.tsx
@@ -70,7 +70,7 @@ export const CitySelect: FC
= ({
}}
onClick={handleInputClick}
placeholder={placeholder}
- className={`w-full h-[42px] px-3 border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent ${
+ className={`w-full h-[42px] px-3 text-[15px] border rounded-md focus:ring-2 focus:ring-blue-500 focus:border-transparent ${
error ? 'border-red-500' : 'border-gray-300'
}`}
/>
diff --git a/apps/hackathon/src/components/sidebar.tsx b/apps/hackathon/src/components/sidebar.tsx
index 7f38df9..ed8fb2e 100644
--- a/apps/hackathon/src/components/sidebar.tsx
+++ b/apps/hackathon/src/components/sidebar.tsx
@@ -1,8 +1,13 @@
import { FC, useState, useEffect } from 'react';
import { Link, useLocation } from 'react-router';
-import { useMyTeams, useAuthStore, supabase } from '@imphnen-frontend-service/service';
+import {
+ useMyTeams,
+ useAuthStore,
+ supabase,
+} from '@imphnen-frontend-service/service';
import { useNavigate } from 'react-router';
import { toast } from 'sonner';
+import { Icon } from '@iconify/react';
interface NavItem {
name: string;
@@ -52,39 +57,37 @@ export const Sidebar: FC = ({ isOpen = true, onClose }) => {
{
name: 'Dashboard',
path: '/dashboard',
- icon: (
-
-
-
- ),
+ icon: ,
show: true,
},
{
name: 'Browse Teams',
path: '/teams/browse',
- icon: (
-
-
-
- ),
+ icon: ,
show: true,
},
{
name: 'Create Team',
path: '/teams/create',
- icon: (
-
-
-
- ),
+ icon: ,
show: !hasTeam,
},
{
name: 'Edit Profile',
path: '/profile',
icon: (
-
-
+
+
),
show: false,
@@ -94,22 +97,32 @@ export const Sidebar: FC = ({ isOpen = true, onClose }) => {
const sidebarContent = (
{/* Logo / Brand with Close Button */}
-
-
🏆 Hackathon
+
+
Hackathon
{onClose && (
-
-
+
+
)}
{/* User Info */}
-
+
{user?.avatar ? (
= ({ isOpen = true, onClose }) => {
/>
) : (
- 👤
+
)}
@@ -144,7 +162,7 @@ export const Sidebar: FC
= ({ isOpen = true, onClose }) => {
to={item.path}
className={`flex items-center space-x-3 px-4 py-3 rounded-lg transition-colors ${
isActive
- ? 'bg-blue-50 text-blue-700 font-medium'
+ ? 'bg-primary-50 text-primary-600 font-medium'
: 'text-gray-700 hover:bg-gray-100'
}`}
>
@@ -161,11 +179,12 @@ export const Sidebar: FC = ({ isOpen = true, onClose }) => {
diff --git a/libs/ui/src/atoms/input/input.tsx b/libs/ui/src/atoms/input/input.tsx
index fb2b579..85e9b18 100644
--- a/libs/ui/src/atoms/input/input.tsx
+++ b/libs/ui/src/atoms/input/input.tsx
@@ -32,9 +32,9 @@ type TInputProps = Omit<
const sizeClasses: Record =
{
- sm: { textSize: 'text-[10px] max-h-[28px]', iconSize: 'text-[10px]' },
- md: { textSize: 'text-[12px] max-h-[30px]', iconSize: 'text-[12px]' },
- lg: { textSize: 'text-[15px] max-h-[34px]', iconSize: 'text-[15px]' },
+ sm: { textSize: 'text-[10px] h-[28px]', iconSize: 'text-[10px]' },
+ md: { textSize: 'text-[12px] h-[30px]', iconSize: 'text-[12px]' },
+ lg: { textSize: 'text-[15px] h-[34px]', iconSize: 'text-[15px]' },
};
const disabledClass = 'opacity-50 hover:border-neutral-200 cursor-not-allowed';
diff --git a/libs/ui/src/molecules/input-field/input-field.tsx b/libs/ui/src/molecules/input-field/input-field.tsx
index 513cbba..150dc19 100644
--- a/libs/ui/src/molecules/input-field/input-field.tsx
+++ b/libs/ui/src/molecules/input-field/input-field.tsx
@@ -25,15 +25,15 @@ export type TInputFieldProps = Omit<
const sizeClasses: Record = {
lg: {
- label: 'text-p3 font-medium',
+ label: 'text-label1 font-medium',
helperText: 'text-label3 font-normal',
},
md: {
- label: 'text-label1 font-medium',
+ label: 'text-label2 font-medium',
helperText: 'text-label2 font-normal',
},
sm: {
- label: 'text-label2 font-medium',
+ label: 'text-label3 font-medium',
helperText: 'text-label2 font-normal',
},
};
diff --git a/libs/ui/src/organisms/controlled-field/controlled-input-field.tsx b/libs/ui/src/organisms/controlled-field/controlled-input-field.tsx
index 194bac2..bce8dbb 100644
--- a/libs/ui/src/organisms/controlled-field/controlled-input-field.tsx
+++ b/libs/ui/src/organisms/controlled-field/controlled-input-field.tsx
@@ -40,6 +40,7 @@ export const ControlledInputField = (
{...inputProps}
onChange={handleChange}
isRequired={props.isRequired}
+ size={props.size}
/>
);
};