From 81775b80c7b3d9c62a8e7489dd7588dc0fe4adfa Mon Sep 17 00:00:00 2001 From: Eugene Mutembei <103780583+CodeWithEugene@users.noreply.github.com> Date: Sun, 27 Sep 2026 11:11:41 +0300 Subject: [PATCH 1/2] fix(ui): make the mobile menu open again --- components/patterns/mobile-nav.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/components/patterns/mobile-nav.tsx b/components/patterns/mobile-nav.tsx index 4749443..e6d5951 100644 --- a/components/patterns/mobile-nav.tsx +++ b/components/patterns/mobile-nav.tsx @@ -6,6 +6,7 @@ import { useEffect, useState } from "react"; import { Menu, X } from "lucide-react"; import { NavLink } from "@/components/patterns/nav-link"; +import { cn } from "@/lib/utils"; interface NavLinkItem { href: string; @@ -71,7 +72,7 @@ export function MobileNav({ navLinks, organizerLinks, trailingLinks }: MobileNav ? createPortal( <>
- {isDraft ? ( - - - - ) : null} ++ Organization settings · public page at{" "} + + /organizers/{org.slug} + +
++ {member.user.name ?? member.user.email} + {member.userId === user.id ? ( + (you) + ) : null} +
+{member.user.email}
++ No trust events yet. The score moves with payout speed, media delivery and milestone + honesty. +
+ ) : ( ++ {TRUST_EVENT_LABELS[event.type]} +
++ {dateFormat.format(event.createdAt)} + {event.reason ? ` · ${event.reason}` : ""} +
+- {membership.role.toLowerCase()} · hackvillage.xyz/organizers/{org.slug} + {membership.role.toLowerCase()} ·{" "} + + /organizers/{org.slug} +
- Sign in first, then we'll set you up. -
+{event.summary}
diff --git a/app/(marketing)/hackathons/loading.tsx b/app/(marketing)/hackathons/loading.tsx new file mode 100644 index 0000000..4f94f85 --- /dev/null +++ b/app/(marketing)/hackathons/loading.tsx @@ -0,0 +1,22 @@ +import { Skeleton, SkeletonCard } from "@/components/ui/skeleton"; + +export default function Loading() { + return ( +
+ {location ?
{org.about}
+ ) : null} + {links.length > 0 ? ( ++ {performance.instantSucceeded} of {performance.instantTotal} +
++ {formatMedianMinutes(performance.medianInstantMinutes)} +
++ {timeliness.onTime} of {timeliness.eventsWithMedia} +
++ {event.title} +
+ )} ++ {formatEventDates(event.startsAt, event.endsAt)} ·{" "} + {formatKes(poolKes)} prize pool +
++ {TRUST_EVENT_LABELS[event.type]} +
++ {dateFormat.format(event.createdAt)} + {event.type !== "MANUAL_ADJUST" && event.reason + ? ` · ${event.reason}` + : ""} +
++ Trust scores start at 100 and move with payout speed, media delivery and milestone + honesty. Every lock and payout by this organizer is on the{" "} + + public ledger + + . +
++ Every prize pool locked, payout sent and vault refunded is recorded here, entry by + entry. Trust on HackVillage is not a promise; it is a record you can check. +
++ + {vault.event.title} + +
++ {formatKes(vault.amountKes)} +
+
+ {onChain ? (
+
+ {shortenHash(vault.contractAddress)}
+
| + Time + | ++ Hackathon + | ++ Entry + | ++ Amount + | ++ {onChain ? "Transaction" : "Reference"} + | +
|---|---|---|---|---|
| + {timestampFormat.format(entry.mirroredAt)} + | ++ + {entry.event.title} + + | +{LEDGER_TYPE_LABELS[entry.type]} | ++ {amount === null ? "—" : formatKes(amount)} + | +
+ {onChain ? (
+
+ {shortenHash(entry.txHash)}
+ |
+
+ Showing the {entries.length} most recent entries + {entries.length === 100 ? " (use the hackathon filter to narrow down)" : ""}.{" "} + {onChain + ? "Each transaction hash resolves on Polygonscan, the independent block explorer for the Polygon network." + : "References are synthetic while the ledger runs in simulation mode."} +
++ {q ? ( + <> + No users match “{q}”. Try a + different name, handle, or email. + > + ) : ( + "No users yet." + )} +
+ ) : ( +