diff --git a/apps/hackathon/src/app/auth/login/page.tsx b/apps/hackathon/src/app/auth/login/page.tsx index e7db94d..4d6bfdd 100644 --- a/apps/hackathon/src/app/auth/login/page.tsx +++ b/apps/hackathon/src/app/auth/login/page.tsx @@ -9,6 +9,7 @@ import { GithubOutlined } from '@ant-design/icons'; import { useNavigate, Link } from 'react-router'; import { toast } from 'sonner'; import { Icon } from '@iconify/react'; +import { ThemeToggle } from '../../../components/theme-toggle'; export default function LoginPage() { // console.log('[LoginPage] Rendering...'); @@ -114,28 +115,31 @@ export default function LoginPage() { }; return ( -
-
- +
+
+
+ + +
-

+

Welcome Back

-

+

Sign in to join or create your hackathon team

{error && ( -
-

{error}

+
+

{error}

)} @@ -143,7 +147,7 @@ export default function LoginPage() {
@@ -154,7 +158,7 @@ export default function LoginPage() { onChange={(e) => setEmail(e.target.value)} placeholder="your@email.com" disabled={isEmailLoading} - className="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed" + className="w-full px-4 py-2.5 border border-gray-300 dark:border-neutral-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white dark:bg-neutral-800 text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-neutral-500 disabled:bg-gray-100 dark:disabled:bg-neutral-700 disabled:cursor-not-allowed" required />
@@ -163,13 +167,13 @@ export default function LoginPage() {
Forgot password? @@ -181,7 +185,7 @@ export default function LoginPage() { onChange={(e) => setPassword(e.target.value)} placeholder="••••••••" disabled={isEmailLoading} - className="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed" + className="w-full px-4 py-2.5 border border-gray-300 dark:border-neutral-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white dark:bg-neutral-800 text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-neutral-500 disabled:bg-gray-100 dark:disabled:bg-neutral-700 disabled:cursor-not-allowed" required />
@@ -189,23 +193,23 @@ export default function LoginPage() {
-
- OR -
+
+ OR +
-

+

Don't have an account?{' '} Sign up @@ -226,7 +230,7 @@ export default function LoginPage() {

-

+

By signing in, you agree to our Terms of Service and Privacy Policy

diff --git a/apps/hackathon/src/app/auth/signup/page.tsx b/apps/hackathon/src/app/auth/signup/page.tsx index 7712acb..0b4bdc2 100644 --- a/apps/hackathon/src/app/auth/signup/page.tsx +++ b/apps/hackathon/src/app/auth/signup/page.tsx @@ -9,6 +9,7 @@ import { GithubOutlined } from '@ant-design/icons'; import { useNavigate } from 'react-router'; import { toast } from 'sonner'; import { Icon } from '@iconify/react'; +import { ThemeToggle } from '../../../components/theme-toggle'; export default function SignupPage() { const navigate = useNavigate(); @@ -137,26 +138,29 @@ export default function SignupPage() { }; return ( -
-
- +
+
+
+ + +
-

+

Create Account

-

Join the hackathon community

+

Join the hackathon community

{error && ( -
-

{error}

+
+

{error}

)} @@ -164,7 +168,7 @@ export default function SignupPage() {
@@ -175,7 +179,7 @@ export default function SignupPage() { onChange={(e) => setFullname(e.target.value)} placeholder="John Doe" disabled={isEmailLoading} - className="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed" + className="w-full px-4 py-2.5 border border-gray-300 dark:border-neutral-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white dark:bg-neutral-800 text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-neutral-500 disabled:bg-gray-100 dark:disabled:bg-neutral-700 disabled:cursor-not-allowed" required />
@@ -183,7 +187,7 @@ export default function SignupPage() {
@@ -194,7 +198,7 @@ export default function SignupPage() { onChange={(e) => setEmail(e.target.value)} placeholder="your@email.com" disabled={isEmailLoading} - className="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed" + className="w-full px-4 py-2.5 border border-gray-300 dark:border-neutral-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white dark:bg-neutral-800 text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-neutral-500 disabled:bg-gray-100 dark:disabled:bg-neutral-700 disabled:cursor-not-allowed" required />
@@ -202,7 +206,7 @@ export default function SignupPage() {
@@ -213,7 +217,7 @@ export default function SignupPage() { onChange={(e) => setPassword(e.target.value)} placeholder="••••••••" disabled={isEmailLoading} - className="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed" + className="w-full px-4 py-2.5 border border-gray-300 dark:border-neutral-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white dark:bg-neutral-800 text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-neutral-500 disabled:bg-gray-100 dark:disabled:bg-neutral-700 disabled:cursor-not-allowed" required />
@@ -221,7 +225,7 @@ export default function SignupPage() {
@@ -232,7 +236,7 @@ export default function SignupPage() { onChange={(e) => setConfirmPassword(e.target.value)} placeholder="••••••••" disabled={isEmailLoading} - className="w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed" + className="w-full px-4 py-2.5 border border-gray-300 dark:border-neutral-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-white dark:bg-neutral-800 text-gray-900 dark:text-white placeholder:text-gray-400 dark:placeholder:text-neutral-500 disabled:bg-gray-100 dark:disabled:bg-neutral-700 disabled:cursor-not-allowed" required />
@@ -240,23 +244,23 @@ export default function SignupPage() {
-
- OR -
+
+ OR +
-

+

Already have an account?{' '} Sign in @@ -277,7 +281,7 @@ export default function SignupPage() {

-

+

By signing up, you agree to our Terms of Service and Privacy Policy

diff --git a/apps/hackathon/src/app/dashboard/layout.tsx b/apps/hackathon/src/app/dashboard/layout.tsx index 057050a..f8f3525 100644 --- a/apps/hackathon/src/app/dashboard/layout.tsx +++ b/apps/hackathon/src/app/dashboard/layout.tsx @@ -6,21 +6,21 @@ const DashboardLayout: FC = (): ReactElement => { const [sidebarOpen, setSidebarOpen] = useState(false); return ( -
+
setSidebarOpen(false)} />
{/* Mobile Header with Hamburger */} -
+
-

🏆 Hackathon

+

Hackathon

diff --git a/apps/hackathon/src/app/dashboard/page.tsx b/apps/hackathon/src/app/dashboard/page.tsx index 85d9edd..dfea38d 100644 --- a/apps/hackathon/src/app/dashboard/page.tsx +++ b/apps/hackathon/src/app/dashboard/page.tsx @@ -42,25 +42,25 @@ const DashboardPage: FC = (): ReactElement => { return (
-

+

Welcome, {user?.fullname || user?.email?.split('@')[0] || 'User'}!

{user?.location && ( -

Location: {user.location}

+

Location: {user.location}

)}
{invitations.length > 0 && ( -
-

+
+

Team Invitations ({invitations.length})

{invitations.map((invitation) => ( -
+
-

{invitation.team.name}

-

Invited by {invitation.inviter.fullname}

+

{invitation.team.name}

+

Invited by {invitation.inviter.fullname}

@@ -74,53 +74,53 @@ const DashboardPage: FC = (): ReactElement => { {myTeams.length > 0 ? (
-

My Team

+

My Team

{myTeams.map((team) => ( - + {team.banner && {team.name}}
{team.logo && {team.name}}
-

{team.name}

-

City: {team.city}

+

{team.name}

+

City: {team.city}

-

{team.description}

+

{team.description}

))}
) : ( -
+
👋
-

You are not in a team yet

-

Use the sidebar to browse teams or create your own

+

You are not in a team yet

+

Use the sidebar to browse teams or create your own

)} -
+
{user?.avatar ? ( - {user.fullname + {user.fullname ) : ( -
- User +
+ User
)}
-

{user?.fullname || user?.email?.split('@')[0] || 'Unnamed User'}

+

{user?.fullname || user?.email?.split('@')[0] || 'Unnamed User'}

{user?.location ? ( -

{user.location}

+

{user.location}

) : ( - Complete your profile + Complete your profile )}
@@ -130,20 +130,20 @@ const DashboardPage: FC = (): ReactElement => {
{user?.bio && ( -
-

About

-

{user.bio}

+
+

About

+

{user.bio}

)} -
-

Contact

-
- {user?.email} +
+

Contact

+
+ {user?.email}
{user?.skills && user.skills.length > 0 && ( -
-

Skills

+
+

Skills

{user.skills.map((skill: string) => ( {skill} diff --git a/apps/hackathon/src/app/layout.tsx b/apps/hackathon/src/app/layout.tsx index cbd1151..24da90e 100644 --- a/apps/hackathon/src/app/layout.tsx +++ b/apps/hackathon/src/app/layout.tsx @@ -107,10 +107,10 @@ export default function RootLayout() { // Show loading state while checking auth if (isChecking) { return ( -
+
-

Loading...

+

Loading...

); diff --git a/apps/hackathon/src/app/page.tsx b/apps/hackathon/src/app/page.tsx index 0199742..8ca9255 100644 --- a/apps/hackathon/src/app/page.tsx +++ b/apps/hackathon/src/app/page.tsx @@ -2,6 +2,7 @@ import { useNavigate } from 'react-router'; import { useState } from 'react'; import { Button } from '@imphnen-frontend-service/ui/atoms'; import { Icon } from '@iconify/react'; +import { ThemeToggle } from '../components/theme-toggle'; export default function HomePage() { const navigate = useNavigate(); @@ -62,13 +63,13 @@ export default function HomePage() { ]; return ( -
+
{/* Navigation */}
-
{/* Mobile Menu */} {mobileMenuOpen && ( -
+
{/* Logos */} @@ -189,19 +194,19 @@ export default function HomePage() { className="h-12 md:h-16" />
- + ×
Kolosal.ai
{/* Title */} -

+

Hackathon

{/* Subtitle */} @@ -209,12 +214,12 @@ export default function HomePage() { "Inovasi AI: Mendorong Usaha Lokal dengan AI Inklusif"

{/* Description */} -

+

Kompetisi pengembangan teknologi untuk menciptakan solusi inovatif yang menghadirkan dampak nyata

{/* Status */} -
+
Online @@ -236,7 +241,7 @@ export default function HomePage() { href="https://chat.whatsapp.com/BlxrYh9uSC37d7VPhJslGL" target="_blank" rel="noopener noreferrer" - className="inline-flex items-center justify-center px-4 py-2.5 border-2 border-gray-300 hover:border-gray-400 transition-colors text-center bg-transparent hover:text-gray-900 hover:bg-gray-50 text-base text-gray-600 rounded-lg font-bai-jamjuree font-semibold" + className="inline-flex items-center justify-center px-4 py-2.5 border-2 border-gray-300 dark:border-neutral-600 hover:border-gray-400 dark:hover:border-neutral-500 transition-colors text-center bg-transparent hover:text-gray-900 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-neutral-800 text-base text-gray-600 dark:text-neutral-400 rounded-lg font-bai-jamjuree font-semibold" > Gabung Grup WA Hackathon @@ -244,7 +249,7 @@ export default function HomePage() { {/* Scroll indicator */}
{/* About Section */} -
+
-

+

Tentang Hackathon

-

- Hackathon{' '} +

+ Hackathon{' '} adalah kompetisi pengembangan teknologi yang mengajak talenta muda untuk berkolaborasi dalam menciptakan solusi inovatif.

-

+

IMPHNEN bersama Kolosal.ai mengadakan Hackathon dengan tema lomba{' '} "Inovasi AI: Mendorong Usaha Lokal dengan AI Inklusif" @@ -282,10 +287,10 @@ export default function HomePage() { {/* Prizes Section */} -

+
-

+

Hadiah Menarik

@@ -295,67 +300,67 @@ export default function HomePage() {

{/* Prize 1 */} -
+
-
+
-

Juara 1

+

Juara 1

Rp6.000.000

{/* Prize 2 */} -
+
-
+
-

Juara 2

+

Juara 2

Rp4.000.000

{/* Prize 3 */} -
+
-
+
-

Juara 3

-

+

Juara 3

+

Rp2.500.000

{/* Special Prize */} -
+
-
+
-

+

Juara Kategori Lainnya

-

+

Rp2.000.000

@@ -364,13 +369,13 @@ export default function HomePage() {
{/* Timeline Section */} -
+
-

+

Timeline Acara

-

+

Jadwal lengkap pelaksanaan hackathon

@@ -380,14 +385,14 @@ export default function HomePage() {
-
+

30 November 2025

-

Penutupan Registrasi

-

+

Penutupan Registrasi

+

Batas akhir pendaftaran peserta hackathon.

@@ -397,14 +402,14 @@ export default function HomePage() {
-
+

30 November 2025

-

Technical Meeting

-

+

Technical Meeting

+

Akan diadakan technical meeting terkait lomba melalui Google Meet. Stay tune di grup WA Hackathon.

@@ -415,14 +420,14 @@ export default function HomePage() {
-
+

1 - 7 Desember 2025

-

Tahap Penyisihan

-

+

Tahap Penyisihan

+

Peserta mengerjakan tantangan yang diberikan.

@@ -432,14 +437,14 @@ export default function HomePage() {
-
+

8 - 14 Desember 2025

-

Penilaian & Webinar

-

+

Penilaian & Webinar

+

Proses penilaian oleh juri dan sesi webinar.

@@ -454,8 +459,8 @@ export default function HomePage() {

15 Desember 2025

-

Pengumuman & Final

-

+

Pengumuman & Final

+

Presentasi final dan pengumuman pemenang.

@@ -465,47 +470,44 @@ export default function HomePage() {
{/* Judges Section */} -
+
-

+

Dewan Juri

-

+

Perwakilan dari IMPHNEN dan Kolosal.ai yang akan menilai karya

{/* Judge 1 */} -
- {/*
*/} -

+
+

Alifais Farrel Ramdhani

CTO

-

Kolosal.ai

+

Kolosal.ai

{/* Judge 2 */} -
- {/*
*/} -

Anka Tama

+
+

Anka Tama

Admin

-

IMPHNEN

+

IMPHNEN

{/* Judge 3 */} -
- {/*
*/} -

Hafid Nur

+
+

Hafid Nur

Moderator

-

IMPHNEN

+

IMPHNEN

@@ -513,25 +515,25 @@ export default function HomePage() {

{/* FAQ Section */} -
+

FAQ

-

+

Pertanyaan yang Sering Diajukan

{faqs.map((faq, index) => ( -
+
{openFaq === index && ( -
{faq.answer}
+
{faq.answer}
)}
))} @@ -560,12 +562,12 @@ export default function HomePage() {
{/* Sponsors Section */} -
+
-

+

Sponsor & Partner

-

+

Acara ini sepenuhnya disponsori oleh

@@ -574,12 +576,12 @@ export default function HomePage() { href="https://kolosal.ai" target="_blank" rel="noopener noreferrer" - className="bg-white rounded-xl p-8 shadow-lg inline-block border-2 border-transparent hover:border-gray-500 transition-colors" + className="bg-white dark:bg-neutral-800 rounded-xl p-8 shadow-lg inline-block border-2 border-transparent hover:border-gray-500 dark:hover:border-neutral-500 transition-colors" > Kolosal.ai
@@ -589,13 +591,13 @@ export default function HomePage() { {/* CTA Section */}
-

+

Segera Daftarkan Timmu!

-

+

Jangan lewatkan kesempatan emas untuk bersaing dengan developer terbaik,
belajar dari para ahli, dan @@ -613,13 +615,13 @@ export default function HomePage() { href="https://chat.whatsapp.com/BlxrYh9uSC37d7VPhJslGL" target="_blank" rel="noopener noreferrer" - className="px-8 py-3 bg-white text-gray-900 text-lg rounded-lg border-2 border-gray-300 hover:border-gray-400 transition-colors font-semibold" + className="px-8 py-3 bg-white dark:bg-neutral-800 text-gray-900 dark:text-white text-lg rounded-lg border-2 border-gray-300 dark:border-neutral-600 hover:border-gray-400 dark:hover:border-neutral-500 transition-colors font-semibold" > Gabung Grup WA Hackathon

-

+

Pendaftaran ditutup pada{' '} 30 November 2025 diff --git a/apps/hackathon/src/app/profile/page.tsx b/apps/hackathon/src/app/profile/page.tsx index 0163665..5d1c195 100644 --- a/apps/hackathon/src/app/profile/page.tsx +++ b/apps/hackathon/src/app/profile/page.tsx @@ -128,14 +128,14 @@ const ProfilePage: FC = (): ReactElement => { const isLoading = isUpdating || isUploading; return ( -

-
+
+
-

Edit Profile

+

Edit Profile

{
-

Update your photo and name

+

Update your photo and name

@@ -163,11 +163,11 @@ const ProfilePage: FC = (): ReactElement => { Avatar preview ) : ( -
- 👤 +
+ 👤
)} {/* Camera overlay */} @@ -204,7 +204,7 @@ const ProfilePage: FC = (): ReactElement => { />
-

+

Click the camera icon to change your photo
Format: JPG, PNG. Max 5MB @@ -221,7 +221,7 @@ const ProfilePage: FC = (): ReactElement => { {/* City */}

-