smooth-app
A collaborative, free and open database of ingredients, nutrition facts and information on food products from around the world
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Next.js 14 landing page for Nutree - AI-powered nutrition tracking platform.
Live Demo: Coming soon Source: trandactri/nutree-web License: BSD-3-Clause
# Install dependencies
npm install
# Start development server
npm run dev
Open http://localhost:3000 in your browser.
npm run dev # Start dev server (hot reload)
npm run build # Build for production
npm start # Start production server
npm run lint # Run ESLint
npm run type-check # Run TypeScript type checking
web/
├── src/
│ ├── app/
│ │ ├── layout.tsx # Root layout with Header & Footer
│ │ ├── page.tsx # Home page with Hero + Aurora background
│ │ ├── changelog/
│ │ │ └── page.tsx # Changelog page (Phase 4)
│ │ └── globals.css # Global styles, CSS variables, animations
│ ├── components/ # Reusable React components (Phase 3: COMPLETE)
│ │ ├── ui/
│ │ │ ├── Button.tsx # Button component with variants (primary/secondary/ghost)
│ │ │ ├── Logo.tsx # Logo component with responsive sizes
│ │ │ ├── FeatureCard.tsx # Feature showcase with icon, title, description (Phase 3)
│ │ │ └── ScreenshotPlaceholder.tsx # Mock phone frame placeholder (Phase 3)
│ │ ├── layout/
│ │ │ ├── Header.tsx # Navigation header with scroll detection
│ │ │ ├── Footer.tsx # Footer with GitHub link and license
│ │ │ ├── MobileMenu.tsx # Mobile navigation drawer
│ │ │ └── AuroraBackground.tsx # Animated mesh gradient background
│ │ └── sections/
│ │ ├── Hero.tsx # Hero section with CTAs and trust badges
│ │ ├── Features.tsx # Features grid with scroll animations (Phase 3)
│ │ ├── DemoVideo.tsx # Demo video placeholder section (Phase 3)
│ │ └── DownloadCTA.tsx # Download CTA with stats (Phase 3)
│ ├── hooks/
│ │ └── useInView.ts # IntersectionObserver hook for scroll animations (Phase 3)
│ ├── lib/
│ │ ├── cn.ts # className utility (clsx + tailwind-merge)
│ │ ├── constants.ts # Site config, navigation links, FEATURES, FEATURE_ICONS (Phase 3 update)
│ │ └── utils.ts # Utility functions (Phase 3+)
│ └── types/
│ └── index.ts # TypeScript type definitions
├── public/
│ ├── logo.png # Brand logo
│ ├── favicon.ico # Browser favicon
│ └── apple-touch-icon.png # iOS home screen icon
├── package.json
├── tsconfig.json
├── tailwind.config.ts
├── next.config.js
├── postcss.config.js
├── .eslintrc.json
├── ONBOARDING.md # Developer onboarding guide
└── .gitignore
Brand Palette (extracted from Nutree logo):
Primary Forest Green: #1A4739 (rgb(26, 71, 57))
Teal: #29B6A1 (rgb(41, 182, 161))
Emerald: #2D8B70 (rgb(45, 139, 112))
Background: #FAFCFB (off-white, green tint)
Foreground: #0F1F1A (near black, green tint)
Muted: #6B7B75 (muted green-gray)
Border: #D4E5DE (soft green border)
Nutrition Accents:
Protein: #E91E63 (pink)
Carbs: #FFC107 (amber)
Fat: #9C27B0 (purple)
Calories: #FF5722 (deep orange)
Font: Be Vietnam Pro, one family for headings and body text
next/font/google as --font-be-vietnam; Tailwind's font-display and font-body both use itAurora Background: Animated radial gradient mesh effect
Button Styles:
Animations:
See src/app/globals.css for full implementation.
Custom theme configured in tailwind.config.ts:
Configuration in next.config.js:
Strict mode enabled in tsconfig.json:
strict: truenoImplicitAny: truemoduleResolution: bundler@/* → ./src/*// src/components/Header.tsx
import clsx from 'clsx';
interface HeaderProps {
className?: string;
}
export function Header({ className }: HeaderProps) {
return (
<header className={clsx('bg-background', className)}>
{/* Component content */}
</header>
);
}
Use Tailwind utility classes with custom theme colors:
<button className="bg-gradient-brand text-white px-8 py-4 rounded-full hover:shadow-lg">
Get Started
</button>
For complex styles, use globals.css with @layer directive:
@layer components {
.custom-component {
@apply flex items-center gap-4;
}
}
Always define props interfaces:
interface Props {
title: string;
count?: number;
onClick: (id: string) => void;
}
export function Component({ title, count, onClick }: Props) {
// ...
}
Principles: KISS (Keep It Simple) • DRY (Don't Repeat) • YAGNI (You Aren't Gonna Need It)
Rules:
any typessrc/lib/constants.tsFormatting:
npm run lint # Check ESLint rules
npm run type-check # Verify TypeScript types
No environment variables required for development. Optional for advanced features:
# .env.local (not committed)
NEXT_PUBLIC_API_URL=https://api.nutreeai.com
npm run build
npm start
Optimizations applied:
next/image)The project is configured for Docker deployment:
# Build image
docker build -t nutree-web:latest .
# Run container
docker run -p 3000:3000 nutree-web:latest
See the main project Deployment Guide for full Docker/K8s setup.
Modern Fitness Aesthetic (Completed Dec 9, 2025)
New sections implemented:
New UI components:
Design enhancements:
Completed Components (6 total, 518 LOC):
New Constants:
Key Design Decisions:
Code Quality (9.5/10):
Security Notes:
Accessibility Notes:
See Phase 3 Implementation Plan for details.
git checkout -b feature/descriptionnpm run lintnpm run type-checkgit commit -m "feat(scope): description"Comprehensive project documentation is available in the /docs directory:
BSD-3-Clause - See LICENSE file for details