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 e995a71..7bd34ef 100644 --- a/apps/hackathon/src/app/dashboard/layout.tsx +++ b/apps/hackathon/src/app/dashboard/layout.tsx @@ -6,18 +6,18 @@ 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 ca06df5..58c4548 100644 --- a/apps/hackathon/src/app/dashboard/page.tsx +++ b/apps/hackathon/src/app/dashboard/page.tsx @@ -43,11 +43,11 @@ const DashboardPage: FC = (): ReactElement => { return (
-

+

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

{user?.location && ( -

+

{user.location}

@@ -55,21 +55,21 @@ const DashboardPage: FC = (): ReactElement => {
{invitations.length > 0 && ( -
-

+
+

Team Invitations ({invitations.length})

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

+

{invitation.team.name}

-

+

Invited by {invitation.inviter.fullname}

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

+

My Team

@@ -104,7 +104,7 @@ const DashboardPage: FC = (): ReactElement => { {team.banner && ( { /> )}
-

+

{team.name}

-

+

City: {team.city}

-

+

{team.description}

@@ -140,20 +140,20 @@ const DashboardPage: FC = (): ReactElement => {
) : ( -
+
👋
-

+

You are not in a team yet

-

+

Use the sidebar to browse teams or create your own

)} -
+
@@ -162,30 +162,30 @@ const DashboardPage: FC = (): ReactElement => { {user.fullname ) : ( -
- +
+ U
)}
-

+

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

{user?.location ? ( -

+

{user.location}

) : ( Complete your profile {
{user?.bio && ( -
-

+
+

About

-

{user.bio}

+

+ {user.bio} +

)} -
-

+
+

Contact

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

+
+

Skills

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/onboarding/user/page.tsx b/apps/hackathon/src/app/onboarding/user/page.tsx index 120b851..2fd7ab1 100644 --- a/apps/hackathon/src/app/onboarding/user/page.tsx +++ b/apps/hackathon/src/app/onboarding/user/page.tsx @@ -110,13 +110,13 @@ const UserOnboardingPage: FC = (): ReactElement => { }); return ( -
-
+
+
-

+

Complete Your Profile

-

+

Tell us more about yourself to get started

@@ -129,22 +129,22 @@ const UserOnboardingPage: FC = (): ReactElement => { Avatar preview ) : ( -
+
)}
-

+

Optional, but highly recommended

@@ -174,7 +174,7 @@ const UserOnboardingPage: FC = (): ReactElement => { {/* City */}
-
-
+
{/* Logos */} @@ -192,19 +228,19 @@ export default function HomePage() { className="h-12 md:h-16" />
- + ×
Kolosal.ai
{/* Title */} -

+

Hackathon

{/* Subtitle */} @@ -212,12 +248,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 @@ -239,7 +275,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 @@ -247,7 +283,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" @@ -285,10 +323,13 @@ export default function HomePage() { {/* Prizes Section */} -

+
-

+

Hadiah Menarik

@@ -298,67 +339,73 @@ 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

@@ -367,13 +414,16 @@ export default function HomePage() {
{/* Timeline Section */} -
+
-

+

Timeline Acara

-

+

Jadwal lengkap pelaksanaan hackathon

@@ -383,14 +433,16 @@ export default function HomePage() {
-
+

30 November 2025

-

Penutupan Registrasi

-

+

+ Penutupan Registrasi +

+

Batas akhir pendaftaran peserta hackathon.

@@ -400,14 +452,16 @@ 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.

@@ -418,14 +472,16 @@ export default function HomePage() {
-
+

1 - 7 Desember 2025

-

Tahap Penyisihan

-

+

+ Tahap Penyisihan +

+

Peserta mengerjakan tantangan yang diberikan.

@@ -435,14 +491,16 @@ export default function HomePage() {
-
+

8 - 14 Desember 2025

-

Penilaian & Webinar

-

+

+ Penilaian & Webinar +

+

Proses penilaian oleh juri dan sesi webinar.

@@ -457,8 +515,10 @@ export default function HomePage() {

15 Desember 2025

-

Pengumuman & Final

-

+

+ Pengumuman & Final +

+

Presentasi final dan pengumuman pemenang.

@@ -468,47 +528,50 @@ 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

@@ -516,25 +579,31 @@ export default function HomePage() {

{/* FAQ Section */} -
+

FAQ

-

+

Pertanyaan yang Sering Diajukan

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

+

Sponsor & Partner

-

+

Acara ini sepenuhnya disponsori oleh

@@ -577,12 +648,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
@@ -592,13 +663,13 @@ export default function HomePage() { {/* CTA Section */}
-

+

Segera Daftarkan Timmu!

-

+

Jangan lewatkan kesempatan emas untuk bersaing dengan developer terbaik,
belajar dari para ahli, dan @@ -616,13 +687,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 321ce09..93a3b27 100644 --- a/apps/hackathon/src/app/profile/page.tsx +++ b/apps/hackathon/src/app/profile/page.tsx @@ -138,12 +138,17 @@ const ProfilePage: FC = (): ReactElement => { const isLoading = isUpdating || isUploading; return ( -

-
+
+
-

Edit Profile

- +

+ Edit Profile +

+ {
-

Update your photo and name

+

+ Update your photo and name +

@@ -170,15 +177,15 @@ const ProfilePage: FC = (): ReactElement => { Avatar preview ) : ( -
+
)} @@ -216,7 +223,7 @@ const ProfilePage: FC = (): ReactElement => { />
-

+

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

-