Production-ready bilingual marketing site for TimeLedger, built with:
- Next.js 16 App Router
- TypeScript
- Tailwind CSS
- next-intl
- pnpm
- Bilingual landing page (
zh/en) - Sticky top navigation with brand icon
- Scroll-triggered section reveal animations (with reduced-motion support)
- Product screen showcase (including attendance device management)
- SEO basics: sitemap, robots, OpenGraph, Twitter metadata
pnpm install
pnpm devOpen http://localhost:3000.
- Supported locales:
zhanden - Default route:
/redirects to/zh - Landing content, labels, and metadata live in:
messages/zh.jsonmessages/en.json
- Pain points:
landing.painPoints.items - Product screenshots:
landing.screens.items - Reliability/tech credibility:
landing.reliability
pnpm dev- start local serverpnpm build- production build (webpack mode)pnpm start- run production serverpnpm lint- run ESLintpnpm format- format codepnpm format:check- check formatting
app/[locale]
components/sections
components/ui
public/images/screens
messages/
- Favicon:
app/favicon.ico - Landing brand icon: inline SVG in
app/[locale]/page.tsx
Implemented:
- Locale-aware metadata via
generateMetadata app/sitemap.tsapp/robots.ts- OpenGraph + Twitter metadata
Set NEXT_PUBLIC_SITE_URL for canonical URLs, sitemap, robots, and metadata base URL.
Production domain: https://timeledger.blazorserver.com.
Build and run:
docker compose up -d --buildOpen http://localhost:3000.