Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
79d254d
feat(i18n): English and Simplified Chinese, starting with the site shell
Vasanthdev2004 Oct 14, 2026
7b86b02
feat(og): draw Chinese, Japanese and Korean names in the cards' bold …
Vasanthdev2004 Oct 14, 2026
bd081b5
feat(i18n): switch language without waiting for the server
Vasanthdev2004 Oct 14, 2026
325101a
chore(i18n): register the trade message area
Vasanthdev2004 Oct 14, 2026
974359f
feat(i18n): tab title and description in the reader's language
Vasanthdev2004 Oct 14, 2026
c368a56
feat(i18n): home hero and posts in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
cec2abc
feat(i18n): live activity in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
02a47fb
feat(i18n): market list in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
f3920de
feat(i18n): trading panel and chart in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
fde330a
feat(i18n): bridge and shared error messages in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
8045d3e
feat(i18n): dashboard, profiles and wallet picker in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
0d3836b
feat(i18n): token page in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
eb09f20
feat(i18n): info, chain and error pages in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
d04a7da
fix(i18n): one Chinese word per idea across the site
Vasanthdev2004 Oct 14, 2026
6e2a142
feat(i18n): launch flow in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
d377140
fix(i18n): word wallet and contract errors once, in lib/errors.ts
Vasanthdev2004 Oct 14, 2026
6ae7c26
fix(i18n): /feed tab title and description in the reader's language
Vasanthdev2004 Oct 14, 2026
7688e00
Merge origin/main (Earn) into feat/i18n-zh-cn
Vasanthdev2004 Oct 14, 2026
0fbaea8
feat(i18n): Earn in Simplified Chinese
Vasanthdev2004 Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions app/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions app/package.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"name": "openlaunch",
"version": "0.1.0",
Expand Down Expand Up @@ -30,6 +30,7 @@
"server-only": "^0.0.1",
"sharp": "^0.35.5",
"tailwind-merge": "^3.6.0",
"use-intl": "4.14.9",
"viem": "^2.47.6",
"wagmi": "^3.5.0"
},
Expand Down
6 changes: 4 additions & 2 deletions app/src/app/(home)/loading.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import hero from "@/components/launchpad/LaunchHero.module.css";
import machine from "@/components/launchpad/LaunchMachine.module.css";
import totals from "@/components/launchpad/LaunchMechanism.module.css";
import trend from "@/components/launchpad/TrendingStrip.module.css";
import { getTranslations } from "@/i18n/server";

/**
* Home skeleton, in the page's own order: hero (text, the locker in its stage and the totals, in the real grid), the live
Expand All @@ -22,9 +23,10 @@ function SkBoardCard() {
);
}

export default function Loading() {
export default async function Loading() {
const t = await getTranslations("info");
return (
<main className="bb-mid bb-page relative space-y-6 pb-16 sm:space-y-8" aria-busy="true" aria-label="loading">
<main className="bb-mid bb-page relative space-y-6 pb-16 sm:space-y-8" aria-busy="true" aria-label={t("loading.home")}>
<section className={`${HERO.section} ${hero.hero}`}>
<div className={hero.layout}>
<div className={hero.copyArea}>
Expand Down
4 changes: 3 additions & 1 deletion app/src/app/(home)/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import LaunchPill from "@/components/launchpad/LaunchPill";
import WhyFree from "@/components/launchpad/WhyFree";
import { MagicCard } from "@/components/vendor/magic-card";
import { LAYOUT_COOKIE, parseLayout } from "@/lib/launchpad/list-layout";
import { getTranslations } from "@/i18n/server";

export const dynamic = "force-dynamic";
// Title and description come from the root layout; ?sort= / ?chain= / ?window= / ?view= are all this one page.
Expand All @@ -45,6 +46,7 @@ export default async function Home({ searchParams }: { searchParams: Promise<{ s
]);
const trending = await withBoardTape(fetchedTrending ?? trendingFrom(page.items)); // the default view's first page doubles as the strip's candidates; the tapes are the cards' recent trades
const now = nowMs();
const t = await getTranslations("hero");

return (
<>
Expand All @@ -55,7 +57,7 @@ export default async function Home({ searchParams }: { searchParams: Promise<{ s
<LiveRiver initial={feed.filter((item) => inRiverWindow(item, now))} recent={feed} serverNow={now} coveredSince={riverCoverage(feed, RIVER_SEED, now)} lastActivityAt={feed[0] ? new Date(feed[0].at).getTime() : 0} />
<div className="grid items-start gap-x-8 gap-y-6 xl:grid-cols-[minmax(0,1fr)_19rem]">
<MagicCard className="min-w-0 rounded-2xl"><LaunchList frame="rounded-[inherit]" initial={page.items} initialHasMore={page.hasMore} initialSort={sort} initialWindow={window} initialChain={chain} initialFilter={filter} initialView={sp.view === "watchlist" ? "watchlist" : "market"} initialLayout={layout} hasDb={dbConfigured()} serverNow={now} /></MagicCard>
<aside aria-label="New launches and community" className="grid min-w-0 gap-4 md:grid-cols-2 xl:sticky xl:top-24 xl:grid-cols-1">
<aside aria-label={t("home.aside")} className="grid min-w-0 gap-4 md:grid-cols-2 xl:sticky xl:top-24 xl:grid-cols-1">
<JustLaunched initial={fresh.items} serverNow={now} />
<div className="min-w-0 space-y-4">
<PostsFeed initial={posts} compact />
Expand Down
Loading
Loading