مخزن: github.com/mjpt1/plant · نسخه زنده: plant-two-psi.vercel.app
فارسی · اپلیکیشن وب پیشرفته برای شناسایی گیاه، بررسی سلامت، انجمن پرسشوپاسخ، شبکه اجتماعی و تقویم مراقبت — با پشتیبانی کامل از فارسی (راستبهچپ/جلالی) و انگلیسی (چپبهراست/میلادی).
English · A production-ready Progressive Web App for plant identification, health checks, Q&A forum, social network, and care calendar — with full Persian (RTL/Jalali) and English (LTR/Gregorian) support.
- اسکنر گیاه — عکس با دوربین یا آپلود، با نتیجه فوری برای گونه و سلامت
- بررسی سلامت و بیماری — وضعیت، مراحل درمان، نکات پیشگیری، تحلیل خاک و رطوبت
- فید اجتماعی — پست، لایک، نظر و دنبالکردن کاربران
- انجمن پرسشوپاسخ — پرسش در دستههای خاک، آفت، آبیاری و بیماری
- تقویم مراقبت — تقویم جلالی (فا) / میلادی (انگلیسی) با یادآور
- کتابخانه گیاهان — کاتالوگ بیش از ۲۶٬۰۰۰ گونه (WCVP/Kew، PlantSolve، Bripatch، netplant، IMP)
- چندزبانه — فارسی و انگلیسی با تعویض زبان
- حالت تاریک/روشن — تم هماهنگ با سیستم
- PWA — قابل نصب با کش سرویسورکر
- Next.js 14 (App Router) + TypeScript
- Tailwind CSS + رابط شیشهای
- Prisma ORM + PostgreSQL
- NextAuth (ورود با رمز / OAuth)
- Cloudinary برای آپلود تصویر
- date-fns-jalali + jalaali-js برای تقویم دوگانه
npm installcp .env.example .env| متغیر | توضیح |
|---|---|
DATABASE_URL |
رشته اتصال PostgreSQL (پورت ۵۴۳۳ با Docker) |
NEXTAUTH_URL |
آدرس اپ (مثلاً http://localhost:3000) |
NEXTAUTH_SECRET |
کلید تصادفی برای نشست JWT |
ANALYSIS_PROVIDER |
primary یا fallback |
ANALYSIS_PRIMARY_KEY |
کلید اصلی سرویس تحلیل تصویر |
ANALYSIS_FALLBACK_KEY |
کلید ثانویه (اختیاری) |
CLOUDINARY_* |
آپلود تصویر (اختیاری) |
GOOGLE_* / GITHUB_* |
ورود OAuth (اختیاری) |
docker compose up -dپایگاه داده روی پورت ۵۴۳۳ اجرا میشود تا با Postgres محلی روی ۵۴۳۲ تداخل نداشته باشد.
npm run setupیا مرحلهبهمرحله:
npm run db:push
npm run catalog:seed
npm run catalog:fix-fa
npm run db:seednpm run devhttp://localhost:3000 را باز کنید.
| نقش | ایمیل | رمز |
|---|---|---|
| کاربر | demo@plantcare.ir |
demo1234 |
| مدیر | admin@plantcare.ir |
admin1234 |
| کارشناس | expert@plantcare.ir |
expert1234 |
| دستور | توضیح |
|---|---|
npm run dev |
اجرای سرور توسعه |
npm run dev:clean |
پاککردن کش .next و اجرای dev |
npm run build |
بیلد production |
npm run test |
تست واحد (Vitest) |
npm run test:e2e |
تست end-to-end (Playwright) |
npm run setup |
db:push + کاتالوگ + seed |
npm run catalog:import |
دانلود و ادغام داده از WCVP، PlantSolve، Bripatch، netplant، IMP |
npm run catalog:seed |
بارگذاری plant-catalog.json در دیتابیس |
npm run catalog:seed:force |
بازسازی کامل کاتالوگ از JSON |
| منبع | نقش |
|---|---|
| WCVP / Kew | جایگزین The Plant List — ~۲۵٬۰۰۰ گونه پذیرفتهشده |
| IPNI | فهرست بینالمللی نامهای گیاهان (در WCVP ادغام شده) |
| PlantSolve | ۱۱۳ گیاه آپارتمانی با راهنمای مراقبت |
| Bripatch | ~۲٬۰۰۰ گونه باغبانی |
| netplant.ir | نامهای فارسی و داده اکولوژیک ایران |
| imp.ac.ir | گیاهان دارویی ایران |
| MMPND | نامهای چندزبانه (مرجع) |
۱. مخزن را در Vercel به GitHub وصل کنید (mjpt1/plant).
۲. Storage → Postgres (یا Neon/Supabase) را به پروژه وصل کنید تا DATABASE_URL تنظیم شود.
۳. در Settings → Environment Variables این مقادیر را اضافه کنید:
| متغیر | مقدار |
|---|---|
NEXTAUTH_SECRET |
یک رشته تصادفی طولانی (مثلاً openssl rand -base64 32) |
NEXTAUTH_URL |
آدرس production مثل https://your-app.vercel.app |
SETUP_SECRET |
رمز یکبارمصرف برای ساخت حسابهای دمو |
۴. Deploy کنید (یا Redeploy).
۵. وضعیت را بررسی کنید: https://your-app.vercel.app/api/health
۶. اگر userCount صفر است، حسابهای دمو را بسازید:
curl -X POST "https://your-app.vercel.app/api/setup/bootstrap" -H "x-setup-secret: YOUR_SETUP_SECRET"۷. با demo@plantcare.ir / demo1234 وارد شوید.
علت رایج خطای ورود: نبود DATABASE_URL، نبود NEXTAUTH_SECRET، NEXTAUTH_URL اشتباه، یا seed نشدن پایگاه داده.
فایل public/images/social-cover.png را در GitHub بهعنوان تصویر پیشنمایش اجتماعی قرار دهید (Settings → General → Social preview).
- Plant Scanner — Camera or upload with instant species and health insights
- Health & Disease Check — Status, treatment steps, prevention tips, soil and moisture notes
- Social Feed — Posts, likes, comments, follow users
- Q&A Forum — Ask questions by category (soil, pest, watering, disease)
- Care Calendar — Jalali calendar (fa) / Gregorian calendar (en) with reminders
- Plant Library — 26,000+ species catalog (WCVP/Kew, PlantSolve, Bripatch, netplant.ir, imp.ac.ir)
- i18n — Persian (RTL) and English (LTR) with language switcher
- Dark/Light Mode — System-aware theme toggle
- PWA — Installable with service worker caching
- Next.js 14 (App Router) + TypeScript
- Tailwind CSS + glassmorphic UI
- Prisma ORM + PostgreSQL
- NextAuth (credentials + OAuth)
- Cloudinary image uploads
- date-fns-jalali + jalaali-js for dual calendar
npm installcp .env.example .env| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string (port 5433 via Docker) |
NEXTAUTH_URL |
App URL (e.g. http://localhost:3000) |
NEXTAUTH_SECRET |
Random secret for JWT sessions |
ANALYSIS_PROVIDER |
primary or fallback |
ANALYSIS_PRIMARY_KEY |
Primary image analysis service key |
ANALYSIS_FALLBACK_KEY |
Optional secondary service key |
CLOUDINARY_* |
Image uploads (optional) |
GOOGLE_* / GITHUB_* |
OAuth providers (optional) |
docker compose up -dDatabase runs on port 5433 to avoid conflicts with a local Postgres on 5432.
npm run setupOr step by step:
npm run db:push
npm run catalog:seed
npm run catalog:fix-fa
npm run db:seednpm run devOpen http://localhost:3000.
| Role | Password | |
|---|---|---|
| User | demo@plantcare.ir |
demo1234 |
| Admin | admin@plantcare.ir |
admin1234 |
| Expert | expert@plantcare.ir |
expert1234 |
| Command | Description |
|---|---|
npm run dev |
Start dev server |
npm run dev:clean |
Clear .next cache and start dev |
npm run build |
Production build |
npm run test |
Unit tests (Vitest) |
npm run test:e2e |
End-to-end tests (Playwright) |
npm run setup |
DB push + catalog + seed |
-
Import the GitHub repo (
mjpt1/plant) on Vercel. -
Attach Storage → Postgres (or Neon/Supabase) so
DATABASE_URLis set. -
Add these in Settings → Environment Variables:
| Variable | Value |
|---|---|
NEXTAUTH_SECRET |
Long random string |
NEXTAUTH_URL |
Production URL, e.g. https://your-app.vercel.app |
SETUP_SECRET |
One-time secret for demo user bootstrap |
-
Deploy (or Redeploy).
-
Check:
https://your-app.vercel.app/api/health -
If
userCountis 0, bootstrap demo users:
curl -X POST "https://your-app.vercel.app/api/setup/bootstrap" -H "x-setup-secret: YOUR_SETUP_SECRET"- Sign in with
demo@plantcare.ir/demo1234.
Common login failures: missing DATABASE_URL, missing NEXTAUTH_SECRET, wrong NEXTAUTH_URL, or database not seeded.
اگر این پروژه برایتان مفید بود، میتوانید از طریق GitHub Sponsors از توسعهٔ آن حمایت کنید.
Use public/images/social-cover.png as the GitHub repository social preview image (Settings → General → Social preview).
MIT
