From 9547d34f5c8a1229a8b3749bd2a2c7a0f0565aa0 Mon Sep 17 00:00:00 2001 From: Hafid Nur <73023445+hafidnrzs@users.noreply.github.com> Date: Tue, 25 Nov 2025 15:20:10 +0700 Subject: [PATCH] feat: Add favicon and SEO (JSON-LD schema, meta tags) - Add favicon image - Add JSON-LD schema for Hackathon event - Add react-helmet-async for managing meta tags --- apps/hackathon/index.html | 6 +- apps/hackathon/src/app/page.tsx | 73 +++++++++++++++ apps/hackathon/src/main.tsx | 15 ++-- libs/utils/src/index.ts | 1 + libs/utils/src/seo/index.ts | 1 + package-lock.json | 152 +++++++++++++++++++++++++++----- package.json | 1 + 7 files changed, 222 insertions(+), 27 deletions(-) create mode 100644 libs/utils/src/seo/index.ts diff --git a/apps/hackathon/index.html b/apps/hackathon/index.html index 41c9d20..608a3e9 100644 --- a/apps/hackathon/index.html +++ b/apps/hackathon/index.html @@ -6,7 +6,11 @@ - + diff --git a/apps/hackathon/src/app/page.tsx b/apps/hackathon/src/app/page.tsx index deede53..27f2a40 100644 --- a/apps/hackathon/src/app/page.tsx +++ b/apps/hackathon/src/app/page.tsx @@ -2,12 +2,48 @@ import { useNavigate } from 'react-router'; import { useState } from 'react'; import { Button } from '@imphnen-frontend-service/ui/atoms'; import { Icon } from '@iconify/react'; +import { Helmet } from '@imphnen-frontend-service/utils'; export default function HomePage() { const navigate = useNavigate(); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const [openFaq, setOpenFaq] = useState(0); + const jsonLd = { + '@context': 'https://schema.org', + '@type': 'Hackathon', + name: 'IMPHNEN x Kolosal.ai Hackathon 2025', + description: + 'Inovasi AI: Mendorong Usaha Lokal dengan AI Inklusif. Kompetisi pengembangan teknologi untuk menciptakan solusi inovatif yang menghadirkan dampak nyata.', + startDate: '2025-11-30', + endDate: '2025-12-15', + eventAttendanceMode: 'https://schema.org/OnlineEventAttendanceMode', + eventStatus: 'https://schema.org/EventScheduled', + location: { + '@type': 'VirtualLocation', + url: 'https://hackathon.imphnen.dev', + }, + image: ['https://hackathon.imphnen.dev/images/imphnen-logo.svg'], + organizer: { + '@type': 'Organization', + name: 'IMPHNEN', + url: 'https://imphnen.dev', + }, + offers: { + '@type': 'Offer', + price: '0', + priceCurrency: 'IDR', + availability: 'https://schema.org/InStock', + validFrom: '2025-10-01', + url: 'https://hackathon.imphnen.dev/auth/signup', + }, + sponsor: { + '@type': 'Organization', + name: 'Kolosal.ai', + url: 'https://kolosal.ai', + }, + }; + const faqs = [ { question: 'Siapa yang bisa mengikuti hackathon ini?', @@ -63,6 +99,43 @@ export default function HomePage() { return (
+ + IMPHNEN x Kolosal.ai Hackathon 2025 + + + + {/* Open Graph / Facebook */} + + + + + + {/* Twitter */} + + + + + + + {/* Navigation */}