├── public ├── apple-icon.png ├── placeholder.jpg ├── icon-dark-32x32.png ├── icon-light-32x32.png ├── placeholder-logo.png ├── placeholder-user.jpg ├── icon.svg ├── placeholder-logo.svg └── placeholder.svg ├── postcss.config.mjs ├── lib ├── utils.ts ├── i18n │ ├── config.ts │ └── translations.ts └── github.ts ├── next.config.mjs ├── components ├── theme-provider.tsx ├── footer.tsx ├── ui │ ├── badge.tsx │ ├── button.tsx │ ├── card.tsx │ └── dropdown-menu.tsx ├── project-filter.tsx ├── language-switcher.tsx ├── mobile-nav.tsx ├── project-card.tsx └── navbar.tsx ├── components.json ├── app ├── page.tsx ├── [lang] │ ├── layout.tsx │ ├── projects │ │ └── [[...type]] │ │ │ └── page.tsx │ ├── page.tsx │ └── contribute │ │ └── page.tsx ├── layout.tsx └── globals.css ├── tsconfig.json ├── README.md ├── package.json ├── tailwind.config.ts ├── styles └── globals.css └── pnpm-lock.yaml /public/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/node/v0-bayoss/main/public/apple-icon.png -------------------------------------------------------------------------------- /public/placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/node/v0-bayoss/main/public/placeholder.jpg -------------------------------------------------------------------------------- /public/icon-dark-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/node/v0-bayoss/main/public/icon-dark-32x32.png -------------------------------------------------------------------------------- /public/icon-light-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/node/v0-bayoss/main/public/icon-light-32x32.png -------------------------------------------------------------------------------- /public/placeholder-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/node/v0-bayoss/main/public/placeholder-logo.png -------------------------------------------------------------------------------- /public/placeholder-user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/node/v0-bayoss/main/public/placeholder-user.jpg -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | } 7 | 8 | export default config 9 | -------------------------------------------------------------------------------- /lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | output: 'export', 4 | trailingSlash: true, 5 | eslint: { 6 | ignoreDuringBuilds: true, 7 | }, 8 | typescript: { 9 | ignoreBuildErrors: true, 10 | }, 11 | images: { 12 | unoptimized: true, 13 | }, 14 | }; 15 | 16 | export default nextConfig; 17 | -------------------------------------------------------------------------------- /components/theme-provider.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import * as React from 'react' 4 | import { 5 | ThemeProvider as NextThemesProvider, 6 | type ThemeProviderProps, 7 | } from 'next-themes' 8 | 9 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) { 10 | return {children} 11 | } 12 | -------------------------------------------------------------------------------- /lib/i18n/config.ts: -------------------------------------------------------------------------------- 1 | export const defaultLocale = "zh" 2 | export const locales = ["zh", "en"] as const 3 | export type Locale = (typeof locales)[number] 4 | 5 | export const getLocaleFromPath = (path: string): Locale => { 6 | for (const locale of locales) { 7 | if (path.startsWith(`/${locale}/`) || path === `/${locale}`) { 8 | return locale 9 | } 10 | } 11 | return defaultLocale 12 | } 13 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "", 8 | "css": "app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } 22 | -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | import { defaultLocale } from "@/lib/i18n/config" 2 | 3 | export default function Home() { 4 | return ( 5 | 6 | 7 | 8 | 9 | 10 |