diff --git a/apps/web/.github/workflows/ci.yml b/apps/web/.github/workflows/ci.yml
new file mode 100644
index 0000000..2231ef5
--- /dev/null
+++ b/apps/web/.github/workflows/ci.yml
@@ -0,0 +1,103 @@
+name: CI
+
+on:
+ push:
+ branches: [main, develop]
+ pull_request:
+ branches: [main]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ lint:
+ name: Lint
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: apps/web
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: npm
+ cache-dependency-path: apps/web/package-lock.json
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Run ESLint
+ run: npm run lint
+
+ typecheck:
+ name: Type Check
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: apps/web
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: npm
+ cache-dependency-path: apps/web/package-lock.json
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Run TypeScript check
+ run: npx tsc --noEmit
+
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: apps/web
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: npm
+ cache-dependency-path: apps/web/package-lock.json
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Run unit tests
+ run: npx vitest run --reporter=verbose --coverage
+
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ needs: [lint, typecheck, test]
+ defaults:
+ run:
+ working-directory: apps/web
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: npm
+ cache-dependency-path: apps/web/package-lock.json
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Build Next.js app
+ run: npm run build
+ env:
+ NODE_ENV: production
diff --git a/apps/web/.gitignore b/apps/web/.gitignore
index 58072e2..43ab318 100644
--- a/apps/web/.gitignore
+++ b/apps/web/.gitignore
@@ -31,7 +31,7 @@ yarn-error.log*
.pnpm-debug.log*
# env files — commit templates, not actual secrets
-.env*.local
+.env*
!.env.local.example
# vercel
diff --git a/apps/web/drizzle.config.ts b/apps/web/drizzle.config.ts
new file mode 100644
index 0000000..3a21a34
--- /dev/null
+++ b/apps/web/drizzle.config.ts
@@ -0,0 +1,11 @@
+import { defineConfig } from "drizzle-kit";
+
+export default defineConfig({
+ schema: "./src/lib/db/schema.ts",
+ out: "./drizzle",
+ dialect: "turso",
+ dbCredentials: {
+ url: process.env.DATABASE_URL!,
+ authToken: process.env.DATABASE_TOKEN!,
+ },
+});
diff --git a/apps/web/drizzle/0000_flippant_talon.sql b/apps/web/drizzle/0000_flippant_talon.sql
new file mode 100644
index 0000000..1b965aa
--- /dev/null
+++ b/apps/web/drizzle/0000_flippant_talon.sql
@@ -0,0 +1,46 @@
+CREATE TABLE `diseases` (
+ `id` text PRIMARY KEY NOT NULL,
+ `plant_id` text NOT NULL,
+ `name` text NOT NULL,
+ `scientific_name` text DEFAULT '' NOT NULL,
+ `causal_agent_type` text NOT NULL,
+ `description` text DEFAULT '' NOT NULL,
+ `symptoms` text DEFAULT '[]' NOT NULL,
+ `causes` text DEFAULT '[]' NOT NULL,
+ `treatment` text DEFAULT '[]' NOT NULL,
+ `prevention` text DEFAULT '[]' NOT NULL,
+ `lookalike_ids` text DEFAULT '[]' NOT NULL,
+ `severity` text NOT NULL,
+ `source_url` text DEFAULT '' NOT NULL,
+ `created_at` text DEFAULT (datetime('now')) NOT NULL,
+ `updated_at` text DEFAULT (datetime('now')) NOT NULL,
+ FOREIGN KEY (`plant_id`) REFERENCES `plants`(`id`) ON UPDATE no action ON DELETE no action
+);
+--> statement-breakpoint
+CREATE INDEX `idx_diseases_plant_id` ON `diseases` (`plant_id`);--> statement-breakpoint
+CREATE INDEX `idx_diseases_causal_agent` ON `diseases` (`causal_agent_type`);--> statement-breakpoint
+CREATE INDEX `idx_diseases_severity` ON `diseases` (`severity`);--> statement-breakpoint
+CREATE TABLE `plants` (
+ `id` text PRIMARY KEY NOT NULL,
+ `common_name` text NOT NULL,
+ `scientific_name` text NOT NULL,
+ `family` text NOT NULL,
+ `category` text NOT NULL,
+ `care_summary` text DEFAULT '' NOT NULL,
+ `image_url` text DEFAULT '' NOT NULL,
+ `created_at` text DEFAULT (datetime('now')) NOT NULL,
+ `updated_at` text DEFAULT (datetime('now')) NOT NULL
+);
+--> statement-breakpoint
+CREATE INDEX `idx_plants_category` ON `plants` (`category`);--> statement-breakpoint
+CREATE INDEX `idx_plants_common_name` ON `plants` (`common_name`);--> statement-breakpoint
+CREATE TABLE `scrape_sources` (
+ `id` text PRIMARY KEY NOT NULL,
+ `source_type` text NOT NULL,
+ `source_url` text NOT NULL,
+ `last_scraped_at` text,
+ `entries_count` integer DEFAULT 0,
+ `status` text DEFAULT 'pending' NOT NULL,
+ `error_message` text,
+ `created_at` text DEFAULT (datetime('now')) NOT NULL
+);
diff --git a/apps/web/drizzle/meta/0000_snapshot.json b/apps/web/drizzle/meta/0000_snapshot.json
new file mode 100644
index 0000000..f13026f
--- /dev/null
+++ b/apps/web/drizzle/meta/0000_snapshot.json
@@ -0,0 +1,340 @@
+{
+ "version": "6",
+ "dialect": "sqlite",
+ "id": "5471dc75-3736-4b26-b7a9-0629c9b1efa0",
+ "prevId": "00000000-0000-0000-0000-000000000000",
+ "tables": {
+ "diseases": {
+ "name": "diseases",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "plant_id": {
+ "name": "plant_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "scientific_name": {
+ "name": "scientific_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "''"
+ },
+ "causal_agent_type": {
+ "name": "causal_agent_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "''"
+ },
+ "symptoms": {
+ "name": "symptoms",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'[]'"
+ },
+ "causes": {
+ "name": "causes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'[]'"
+ },
+ "treatment": {
+ "name": "treatment",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'[]'"
+ },
+ "prevention": {
+ "name": "prevention",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'[]'"
+ },
+ "lookalike_ids": {
+ "name": "lookalike_ids",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'[]'"
+ },
+ "severity": {
+ "name": "severity",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "source_url": {
+ "name": "source_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "''"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(datetime('now'))"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(datetime('now'))"
+ }
+ },
+ "indexes": {
+ "idx_diseases_plant_id": {
+ "name": "idx_diseases_plant_id",
+ "columns": [
+ "plant_id"
+ ],
+ "isUnique": false
+ },
+ "idx_diseases_causal_agent": {
+ "name": "idx_diseases_causal_agent",
+ "columns": [
+ "causal_agent_type"
+ ],
+ "isUnique": false
+ },
+ "idx_diseases_severity": {
+ "name": "idx_diseases_severity",
+ "columns": [
+ "severity"
+ ],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {
+ "diseases_plant_id_plants_id_fk": {
+ "name": "diseases_plant_id_plants_id_fk",
+ "tableFrom": "diseases",
+ "tableTo": "plants",
+ "columnsFrom": [
+ "plant_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "checkConstraints": {}
+ },
+ "plants": {
+ "name": "plants",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "common_name": {
+ "name": "common_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "scientific_name": {
+ "name": "scientific_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "family": {
+ "name": "family",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "category": {
+ "name": "category",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "care_summary": {
+ "name": "care_summary",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "''"
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "''"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(datetime('now'))"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(datetime('now'))"
+ }
+ },
+ "indexes": {
+ "idx_plants_category": {
+ "name": "idx_plants_category",
+ "columns": [
+ "category"
+ ],
+ "isUnique": false
+ },
+ "idx_plants_common_name": {
+ "name": "idx_plants_common_name",
+ "columns": [
+ "common_name"
+ ],
+ "isUnique": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "checkConstraints": {}
+ },
+ "scrape_sources": {
+ "name": "scrape_sources",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "source_type": {
+ "name": "source_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "source_url": {
+ "name": "source_url",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "last_scraped_at": {
+ "name": "last_scraped_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "entries_count": {
+ "name": "entries_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false,
+ "default": 0
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "'pending'"
+ },
+ "error_message": {
+ "name": "error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false,
+ "default": "(datetime('now'))"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "checkConstraints": {}
+ }
+ },
+ "views": {},
+ "enums": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "indexes": {}
+ }
+}
\ No newline at end of file
diff --git a/apps/web/drizzle/meta/_journal.json b/apps/web/drizzle/meta/_journal.json
new file mode 100644
index 0000000..b8aee1f
--- /dev/null
+++ b/apps/web/drizzle/meta/_journal.json
@@ -0,0 +1,13 @@
+{
+ "version": "7",
+ "dialect": "sqlite",
+ "entries": [
+ {
+ "idx": 0,
+ "version": "6",
+ "when": 1780704072268,
+ "tag": "0000_flippant_talon",
+ "breakpoints": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/apps/web/package-lock.json b/apps/web/package-lock.json
index 2ddacbe..fb2fd0f 100644
--- a/apps/web/package-lock.json
+++ b/apps/web/package-lock.json
@@ -8,6 +8,9 @@
"name": "plant-disease-id",
"version": "0.1.0",
"dependencies": {
+ "@libsql/client": "^0.17.3",
+ "dotenv": "^17.4.2",
+ "drizzle-orm": "^0.45.2",
"next": "16.2.7",
"react": "19.2.4",
"react-dom": "19.2.4",
@@ -18,11 +21,13 @@
"@tailwindcss/postcss": "^4",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
+ "@types/better-sqlite3": "^7.6.13",
"@types/jsdom": "^28.0.3",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/uuid": "^10.0.0",
+ "drizzle-kit": "^0.31.10",
"eslint": "^9",
"eslint-config-next": "16.2.7",
"jsdom": "^29.1.1",
@@ -505,6 +510,13 @@
"node": ">=20.19.0"
}
},
+ "node_modules/@drizzle-team/brocli": {
+ "version": "0.10.2",
+ "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz",
+ "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
"node_modules/@emnapi/core": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
@@ -538,6 +550,884 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@esbuild-kit/core-utils": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz",
+ "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==",
+ "deprecated": "Merged into tsx: https://tsx.is",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.18.20",
+ "source-map-support": "^0.5.21"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/@esbuild-kit/esm-loader": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz",
+ "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==",
+ "deprecated": "Merged into tsx: https://tsx.is",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@esbuild-kit/core-utils": "^3.3.2",
+ "get-tsconfig": "^4.7.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz",
+ "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz",
+ "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz",
+ "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz",
+ "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz",
+ "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz",
+ "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz",
+ "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz",
+ "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz",
+ "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz",
+ "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz",
+ "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz",
+ "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz",
+ "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz",
+ "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz",
+ "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz",
+ "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz",
+ "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz",
+ "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz",
+ "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz",
+ "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz",
+ "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz",
+ "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz",
+ "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz",
+ "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz",
+ "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz",
+ "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
@@ -1329,6 +2219,165 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@libsql/client": {
+ "version": "0.17.3",
+ "resolved": "https://registry.npmjs.org/@libsql/client/-/client-0.17.3.tgz",
+ "integrity": "sha512-HXk9wiAoJbKFbyBH4O+aEhN6ir5ERXuXvwE5OD2eR4/5RUa3Pw/8L9zrnVdU+iNJitRvisPWaIwmhkO3bH7giA==",
+ "license": "MIT",
+ "dependencies": {
+ "@libsql/core": "^0.17.3",
+ "@libsql/hrana-client": "^0.10.0",
+ "js-base64": "^3.7.5",
+ "libsql": "^0.5.28",
+ "promise-limit": "^2.7.0"
+ }
+ },
+ "node_modules/@libsql/core": {
+ "version": "0.17.3",
+ "resolved": "https://registry.npmjs.org/@libsql/core/-/core-0.17.3.tgz",
+ "integrity": "sha512-2UjK1i7JBkMduJo4WdvvBxMMvVJ31pArBZNONyz/GCJJAH+1UHat2X6vn10S/WpY5fKzIT98WqYFl2vzWRLOfg==",
+ "license": "MIT",
+ "dependencies": {
+ "js-base64": "^3.7.5"
+ }
+ },
+ "node_modules/@libsql/darwin-arm64": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/darwin-arm64/-/darwin-arm64-0.5.29.tgz",
+ "integrity": "sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@libsql/darwin-x64": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.5.29.tgz",
+ "integrity": "sha512-OtT+KFHsKFy1R5FVadr8FJ2Bb1mghtXTyJkxv0trocq7NuHntSki1eUbxpO5ezJesDvBlqFjnWaYYY516QNLhQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@libsql/hrana-client": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@libsql/hrana-client/-/hrana-client-0.10.0.tgz",
+ "integrity": "sha512-OoA4EMqRAC7kn7V2P6EQqRcpZf2W+AjsNIyCizBg339Tq/aMC7sRnzs3SklderhmQWAqEzvv8A2vhxVmWpkVvw==",
+ "license": "MIT",
+ "dependencies": {
+ "@libsql/isomorphic-ws": "^0.1.5",
+ "js-base64": "^3.7.5"
+ }
+ },
+ "node_modules/@libsql/isomorphic-ws": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.5.tgz",
+ "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/ws": "^8.5.4",
+ "ws": "^8.13.0"
+ }
+ },
+ "node_modules/@libsql/linux-arm-gnueabihf": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/linux-arm-gnueabihf/-/linux-arm-gnueabihf-0.5.29.tgz",
+ "integrity": "sha512-CD4n4zj7SJTHso4nf5cuMoWoMSS7asn5hHygsDuhRl8jjjCTT3yE+xdUvI4J7zsyb53VO5ISh4cwwOtf6k2UhQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@libsql/linux-arm-musleabihf": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/linux-arm-musleabihf/-/linux-arm-musleabihf-0.5.29.tgz",
+ "integrity": "sha512-2Z9qBVpEJV7OeflzIR3+l5yAd4uTOLxklScYTwpZnkm2vDSGlC1PRlueLaufc4EFITkLKXK2MWBpexuNJfMVcg==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@libsql/linux-arm64-gnu": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.5.29.tgz",
+ "integrity": "sha512-gURBqaiXIGGwFNEaUj8Ldk7Hps4STtG+31aEidCk5evMMdtsdfL3HPCpvys+ZF/tkOs2MWlRWoSq7SOuCE9k3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@libsql/linux-arm64-musl": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.5.29.tgz",
+ "integrity": "sha512-fwgYZ0H8mUkyVqXZHF3mT/92iIh1N94Owi/f66cPVNsk9BdGKq5gVpoKO+7UxaNzuEH1roJp2QEwsCZMvBLpqg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@libsql/linux-x64-gnu": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.5.29.tgz",
+ "integrity": "sha512-y14V0vY0nmMC6G0pHeJcEarcnGU2H6cm21ZceRkacWHvQAEhAG0latQkCtoS2njFOXiYIg+JYPfAoWKbi82rkg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@libsql/linux-x64-musl": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.5.29.tgz",
+ "integrity": "sha512-gquqwA/39tH4pFl+J9n3SOMSymjX+6kZ3kWgY3b94nXFTwac9bnFNMffIomgvlFaC4ArVqMnOZD3nuJ3H3VO1w==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@libsql/win32-x64-msvc": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.5.29.tgz",
+ "integrity": "sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@napi-rs/wasm-runtime": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
@@ -1348,6 +2397,12 @@
"@emnapi/runtime": "^1.7.1"
}
},
+ "node_modules/@neon-rs/load": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@neon-rs/load/-/load-0.0.4.tgz",
+ "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==",
+ "license": "MIT"
+ },
"node_modules/@next/env": {
"version": "16.2.7",
"resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.7.tgz",
@@ -2256,6 +3311,16 @@
"license": "MIT",
"peer": true
},
+ "node_modules/@types/better-sqlite3": {
+ "version": "7.6.13",
+ "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz",
+ "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==",
+ "devOptional": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/chai": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz",
@@ -2319,7 +3384,6 @@
"version": "20.19.41",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.41.tgz",
"integrity": "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
@@ -2359,6 +3423,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.60.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz",
@@ -3504,6 +4577,13 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/call-bind": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
@@ -3878,6 +4958,643 @@
"license": "MIT",
"peer": true
},
+ "node_modules/dotenv": {
+ "version": "17.4.2",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz",
+ "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/drizzle-kit": {
+ "version": "0.31.10",
+ "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.10.tgz",
+ "integrity": "sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@drizzle-team/brocli": "^0.10.2",
+ "@esbuild-kit/esm-loader": "^2.5.5",
+ "esbuild": "^0.25.4",
+ "tsx": "^4.21.0"
+ },
+ "bin": {
+ "drizzle-kit": "bin.cjs"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/drizzle-kit/node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
+ }
+ },
+ "node_modules/drizzle-orm": {
+ "version": "0.45.2",
+ "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.2.tgz",
+ "integrity": "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==",
+ "license": "Apache-2.0",
+ "peerDependencies": {
+ "@aws-sdk/client-rds-data": ">=3",
+ "@cloudflare/workers-types": ">=4",
+ "@electric-sql/pglite": ">=0.2.0",
+ "@libsql/client": ">=0.10.0",
+ "@libsql/client-wasm": ">=0.10.0",
+ "@neondatabase/serverless": ">=0.10.0",
+ "@op-engineering/op-sqlite": ">=2",
+ "@opentelemetry/api": "^1.4.1",
+ "@planetscale/database": ">=1.13",
+ "@prisma/client": "*",
+ "@tidbcloud/serverless": "*",
+ "@types/better-sqlite3": "*",
+ "@types/pg": "*",
+ "@types/sql.js": "*",
+ "@upstash/redis": ">=1.34.7",
+ "@vercel/postgres": ">=0.8.0",
+ "@xata.io/client": "*",
+ "better-sqlite3": ">=7",
+ "bun-types": "*",
+ "expo-sqlite": ">=14.0.0",
+ "gel": ">=2",
+ "knex": "*",
+ "kysely": "*",
+ "mysql2": ">=2",
+ "pg": ">=8",
+ "postgres": ">=3",
+ "sql.js": ">=1",
+ "sqlite3": ">=5"
+ },
+ "peerDependenciesMeta": {
+ "@aws-sdk/client-rds-data": {
+ "optional": true
+ },
+ "@cloudflare/workers-types": {
+ "optional": true
+ },
+ "@electric-sql/pglite": {
+ "optional": true
+ },
+ "@libsql/client": {
+ "optional": true
+ },
+ "@libsql/client-wasm": {
+ "optional": true
+ },
+ "@neondatabase/serverless": {
+ "optional": true
+ },
+ "@op-engineering/op-sqlite": {
+ "optional": true
+ },
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@planetscale/database": {
+ "optional": true
+ },
+ "@prisma/client": {
+ "optional": true
+ },
+ "@tidbcloud/serverless": {
+ "optional": true
+ },
+ "@types/better-sqlite3": {
+ "optional": true
+ },
+ "@types/pg": {
+ "optional": true
+ },
+ "@types/sql.js": {
+ "optional": true
+ },
+ "@upstash/redis": {
+ "optional": true
+ },
+ "@vercel/postgres": {
+ "optional": true
+ },
+ "@xata.io/client": {
+ "optional": true
+ },
+ "better-sqlite3": {
+ "optional": true
+ },
+ "bun-types": {
+ "optional": true
+ },
+ "expo-sqlite": {
+ "optional": true
+ },
+ "gel": {
+ "optional": true
+ },
+ "knex": {
+ "optional": true
+ },
+ "kysely": {
+ "optional": true
+ },
+ "mysql2": {
+ "optional": true
+ },
+ "pg": {
+ "optional": true
+ },
+ "postgres": {
+ "optional": true
+ },
+ "prisma": {
+ "optional": true
+ },
+ "sql.js": {
+ "optional": true
+ },
+ "sqlite3": {
+ "optional": true
+ }
+ }
+ },
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -4118,6 +5835,48 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/esbuild": {
+ "version": "0.28.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz",
+ "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.28.0",
+ "@esbuild/android-arm": "0.28.0",
+ "@esbuild/android-arm64": "0.28.0",
+ "@esbuild/android-x64": "0.28.0",
+ "@esbuild/darwin-arm64": "0.28.0",
+ "@esbuild/darwin-x64": "0.28.0",
+ "@esbuild/freebsd-arm64": "0.28.0",
+ "@esbuild/freebsd-x64": "0.28.0",
+ "@esbuild/linux-arm": "0.28.0",
+ "@esbuild/linux-arm64": "0.28.0",
+ "@esbuild/linux-ia32": "0.28.0",
+ "@esbuild/linux-loong64": "0.28.0",
+ "@esbuild/linux-mips64el": "0.28.0",
+ "@esbuild/linux-ppc64": "0.28.0",
+ "@esbuild/linux-riscv64": "0.28.0",
+ "@esbuild/linux-s390x": "0.28.0",
+ "@esbuild/linux-x64": "0.28.0",
+ "@esbuild/netbsd-arm64": "0.28.0",
+ "@esbuild/netbsd-x64": "0.28.0",
+ "@esbuild/openbsd-arm64": "0.28.0",
+ "@esbuild/openbsd-x64": "0.28.0",
+ "@esbuild/openharmony-arm64": "0.28.0",
+ "@esbuild/sunos-x64": "0.28.0",
+ "@esbuild/win32-arm64": "0.28.0",
+ "@esbuild/win32-ia32": "0.28.0",
+ "@esbuild/win32-x64": "0.28.0"
+ }
+ },
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
@@ -5567,6 +7326,12 @@
"jiti": "lib/jiti-cli.mjs"
}
},
+ "node_modules/js-base64": {
+ "version": "3.7.8",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz",
+ "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -5755,6 +7520,47 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/libsql": {
+ "version": "0.5.29",
+ "resolved": "https://registry.npmjs.org/libsql/-/libsql-0.5.29.tgz",
+ "integrity": "sha512-8lMP8iMgiBzzoNbAPQ59qdVcj6UaE/Vnm+fiwX4doX4Narook0a4GPKWBEv+CR8a1OwbfkgL18uBfBjWdF0Fzg==",
+ "cpu": [
+ "x64",
+ "arm64",
+ "wasm32",
+ "arm"
+ ],
+ "license": "MIT",
+ "os": [
+ "darwin",
+ "linux",
+ "win32"
+ ],
+ "dependencies": {
+ "@neon-rs/load": "^0.0.4",
+ "detect-libc": "2.0.2"
+ },
+ "optionalDependencies": {
+ "@libsql/darwin-arm64": "0.5.29",
+ "@libsql/darwin-x64": "0.5.29",
+ "@libsql/linux-arm-gnueabihf": "0.5.29",
+ "@libsql/linux-arm-musleabihf": "0.5.29",
+ "@libsql/linux-arm64-gnu": "0.5.29",
+ "@libsql/linux-arm64-musl": "0.5.29",
+ "@libsql/linux-x64-gnu": "0.5.29",
+ "@libsql/linux-x64-musl": "0.5.29",
+ "@libsql/win32-x64-msvc": "0.5.29"
+ }
+ },
+ "node_modules/libsql/node_modules/detect-libc": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
+ "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/lightningcss": {
"version": "1.32.0",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
@@ -6698,6 +8504,12 @@
"license": "MIT",
"peer": true
},
+ "node_modules/promise-limit": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz",
+ "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==",
+ "license": "ISC"
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -7245,6 +9057,16 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -7254,6 +9076,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
"node_modules/stable-hash": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
@@ -7694,6 +9527,25 @@
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
+ "node_modules/tsx": {
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.22.4.tgz",
+ "integrity": "sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.28.0"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -7856,7 +9708,6 @@
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/unrs-resolver": {
@@ -8325,6 +10176,27 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/xml-name-validator": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
diff --git a/apps/web/package.json b/apps/web/package.json
index 2bda0be..564e523 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -11,6 +11,9 @@
"test:watch": "vitest"
},
"dependencies": {
+ "@libsql/client": "^0.17.3",
+ "dotenv": "^17.4.2",
+ "drizzle-orm": "^0.45.2",
"next": "16.2.7",
"react": "19.2.4",
"react-dom": "19.2.4",
@@ -21,11 +24,13 @@
"@tailwindcss/postcss": "^4",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
+ "@types/better-sqlite3": "^7.6.13",
"@types/jsdom": "^28.0.3",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"@types/uuid": "^10.0.0",
+ "drizzle-kit": "^0.31.10",
"eslint": "^9",
"eslint-config-next": "16.2.7",
"jsdom": "^29.1.1",
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_apple_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_apple_diseases.html
new file mode 100644
index 0000000..0352702
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_apple_diseases.html
@@ -0,0 +1,1897 @@
+
+
+
+
+List of apple diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of apple diseases
+
+
+
+
+
+2 languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+
+
+
Diseases of apples (Malus domestica ) include:
+
+
+
+
+
+
+
Nematodes, parasitic[ edit ]
+
+
+
+
+
+
+Viroid diseases
+
+
+Swollen apple
+
+Apple fruit crinkle viroid (AFCVd)
+
+
+Apple dimple fruit
+
+Apple scar skin viroid (ASSVd)
+
+
+Apple fruit crinkle
+
+Apple fruit crinkle viroid (AFCVd) (Japan)
+
+
+Apple scar skin = apple dapple, apple sabi-ka, apple bumpy fruit
+
+Apple scar skin viroid (ASSVd)
+
+
+
Suspected viral- and viroid-like diseases [ edit ]
+
+
+Suspected viral- and viroid-like diseases
+
+
+Dead spur
+
+GTP, unidentified
+
+
+False sting
+
+GTP, virus suspected
+
+
+Green crinkle
+
+GTP, virus suspected
+
+
+Rough skin
+
+GTP, virus suspected
+
+
+Star crack
+
+GTP, virus suspected
+
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Bitter pit
+
+Localized calcium deficiency
+
+
+Blossom blast
+
+Boron deficiency
+
+
+Burrknot
+
+Genetically predisposed rootstock
+
+
+Fruit cracking
+
+Genetic
+
+
+Fruit russet
+
+Frost, sprays, etc.
+
+
+Green mottle
+
+Unidentified
+
+
+Hollow apple
+
+High temperature
+
+
+Internal bark necrosis = measles
+
+Low pH and mineral nutrient imbalance
+
+
+Internal browning
+
+Boron and calcium deficiencies, etc.
+
+
+Jonathan spot
+
+Reduced by controlled atmosphere storage
+
+
+Narrow leaf
+
+Genetic
+
+
+Necrotic leaf blotch of ‘Golden Delicious’
+
+Rapid synthesis of gibberellins triggered by environmental factors
+
+
+Spray injury
+
+Spray
+
+
+Storage scald
+
+Injury to fruit surfaces by naturally occurring gases produced by the fruit
+
+
+Sunburn
+
+Sun injury to fruit
+
+
+Sunscald
+
+Freezing of bark following high temperatures in winter
+
+
+Water core
+
+Sorbitol accumulation
+
+
+
+
+
+ 'Bitter pit'
+
+
+
+ 'Jonathan spot'
+
+
+
+ 'Water core'
+
+
+
+ 'Spray injury'
+
+
+
+
+
+^ Dowling, Madeline; Peres, Natalia; Villani, Sara; Schnabel, Guido (2020). "Managing Colletotrichum on Fruit Crops: A "Complex" Challenge" . Plant Disease . 104 (9): 2301– 2316. doi :10.1094/PDIS-11-19-2378-FE . ISSN 0191-2917 . PMID 32689886 . S2CID 219479598 .
+
+^ Martin, Phillip L.; Krawczyk, Teresa; Khodadadi, Fatemeh; Aćimović, Srđan G.; Peter, Kari A. (2021). "Bitter Rot of Apple in the Mid-Atlantic United States: Causal Species and Evaluation of the Impacts of Regional Weather Patterns and Cultivar Susceptibility" . Phytopathology . 111 (6): PHYTO–09–20-043. doi :10.1094/PHYTO-09-20-0432-R . ISSN 0031-949X . PMID 33487025 . S2CID 231701083 .
+
+^ Weir, B.S.; Johnston, P.R.; Damm, U. (2012). "The Colletotrichum gloeosporioides species complex" . Studies in Mycology . 73 (1): 115– 180. doi :10.3114/sim0011 . PMC 3458417 . PMID 23136459 .
+
+^ Damm, U.; Cannon, P.F.; Woudenberg, J.H.C.; Crous, P.W. (2012). "The Colletotrichum acutatum species complex" . Studies in Mycology . 73 (1): 37– 113. doi :10.3114/sim0010 . PMC 3458416 . PMID 23136458 .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_apricot_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_apricot_diseases.html
new file mode 100644
index 0000000..63d808c
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_apricot_diseases.html
@@ -0,0 +1,1177 @@
+
+
+
+
+List of apricot diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of apricot diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+This article is a list of diseases of apricots (Prunus armeniaca ).
+
+
+
+
+
+
+
Nematodes, parasitic[ edit ]
+
+
+
includes uncharacterized graft-transmissible pathogens [GTP]
+
+
+
Graft-transmissible pathogens [GTP][ edit ]
+
+
+Graft-transmissible pathogens [GTP]
+
+
+Asteroid spot (= Peach asteroid spot)
+
+
+Cherry mottle leaf
+
+
+Chlorotic leaf mottle
+
+
+Deformation mosaic (associated with an isometric particle)
+
+
+Moorpark mottle
+
+
+Peach yellow mottle
+
+
+Pucker leaf
+
+
+Ring pox (= Spur cherry?)
+
+
+Stone pitting
+
+
+
Phytoplasmal diseases [ edit ]
+
+
+Phytoplasmal diseases
+
+
+Chlorotic leaf roll (= Apple proliferation)
+
+Witches' broom
+
+
+
Miscellaneous diseases or disorders [ edit ]
+
+
+Miscellaneous diseases or disorders
+
+
+Apricot gumboil
+
+Unknown etiology (nontransmissible)
+
+
+Replant problems
+
+Bacteria, fungi, nematodes, viruses, nutrients, toxins and environmental conditions (?)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_avocado_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_avocado_diseases.html
new file mode 100644
index 0000000..fc3a2b5
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_avocado_diseases.html
@@ -0,0 +1,1163 @@
+
+
+
+
+List of avocado diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of avocado diseases
+
+
+
+
+
+Add languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+This article is a list of diseases of avocados (Persea americana ).
+
+
+
+
+
+
+
+Fungal diseases
+
+
+Anthracnose
+
+
+
+
+
+Armillaria root rot
+Shoestring root rot
+
+
+
+
+
+
+Black mildew
+
+
+
+
+
+Branch canker
+
+
+
+
+
+Butt rot
+
+
+
+
+
+Cercospora spot (blotch)
+
+
+
+
+
+Clitocybe root rot
+
+
+
+
+
+Collar rot
+
+
+
+
+
+Dematophora root rot
+
+
+
+
+
+Dieback
+
+
+
+
+
+Fruit rot (includes stem end rot & fruit spots)
+
+
+
+
+
+Heart rot
+
+
+
+
+
+Leaf spots
+
+
+
+
+
+Phomopsis spot
+
+Phomopsis spp.
+
+
+Physalospora canker
+
+
+
+
+
+Phytophthora crown rot
+
+
+
+
+
+Phytophthora trunk canker
+
+
+
+
+
+Phytophthora root rot
+
+
+
+
+
+Pink rot
+
+
+
+
+
+Powdery mildew
+
+
+
+
+
+Rhizoctonia seed and root rot
+
+
+
+
+
+Root and bark rot
+
+
+
+
+
+Root rot
+
+
+
+
+
+Rosellinia root rot
+
+
+
+
+
+Rusty blight
+
+
+
+
+
+Scab (fruit & leaf)
+
+
+
+
+
+Seedling blight
+
+
+
+
+
+Smudgy spot
+
+
+
+
+
+Sooty blotch
+
+
+
+
+
+Tar spot
+
+
+
+
+
+Verticillium wilt
+
+
+
+
+
+Wood rots
+
+
+
+
+
+
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Algal spot
+
+Cephaleuros virescens Kunze
+
+
+Blackstreak
+
+Unknown cause
+
+
+Dieback
+
+Copper deficiency
+
+
+Edema
+
+Physiological
+
+
+Littleleaf rosette
+
+Zinc deficiency
+
+
+Tipburn
+
+Excess mineral salts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_banana_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_banana_diseases.html
new file mode 100644
index 0000000..1814261
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_banana_diseases.html
@@ -0,0 +1,1536 @@
+
+
+
+
+List of banana and plantain diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of banana and plantain diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+This article is a list of diseases of bananas and plantains (Musa spp.).
+
+
Photo showing symptoms of the Banana Bunchy Top Virus (BBTV)
+
+
+
+
+
+
+
+
Nematodes, parasitic[ edit ]
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Alligator skin
+
+Light abrasions on fruit peel caused by leaves or bracts
+
+
+Blue disease
+
+Magnesium deficiency
+
+
+Choke
+
+Low winter temperatures
+
+
+Dwarfism
+
+Genetic mutation
+
+
+Elephantiasis
+
+Unknown cause
+
+
+Fruit chimera
+
+Genetic mutation
+
+
+Fused fingers
+
+Genetic defect
+
+
+Giantism
+
+Genetic mutation
+
+
+Heart leaf unfurling disorder
+
+Unknown cause
+
+
+High mat
+
+Unknown cause
+
+
+Leaf edge chlorosis
+
+Unknown cause
+
+
+Maturity bronzing
+
+Unknown cause
+
+
+Rayadilla
+
+Zinc deficiency
+
+
+Rosetting
+
+Nitrogen deficiency
+
+
+Roxana
+
+Unknown cause
+
+
+Spike leaf
+
+Low winter temperatures
+
+
+Split peel
+
+Rapid filling of pulp of fruit
+
+
+Taiwan marginal scorch
+
+Unknown cause
+
+
+"Segmented Banana"
+
+Chilling injury to fruit
+One of the less common plantain diseases is exostentialis clittellus referred to by most plantain and banana farmers as "segmented banana". This is a result of the peel forming tiny inter-fruit membranes which cause the banana to appear as though it has been sliced before it is peeled. This is generally a result of freezing the fruit, and occurs most commonly in fruit that is sold in large stores or supermarkets.
+
+
+
+Yellow mat
+
+Unknown cause
+
+
+Yellow pulp
+
+Delay in fruit filling, drought, excessive shading, magnesium deficiency, poor nutrition
+
+
+Yellows
+
+Lack of water
+
+
+Neer Vazhai
+
+Unknown etiology
+
+
+Kottai Vazhai or seediness in Parthenocarpic Poovan banana
+
+Unknown etiology, probably due to BSV infection
+
+
+
+
+
+
Culinary usage Related topics Organizations
+
AA AAA AAB
+
Iholena
+Maoli-Popo'ulu
+
+True plantains
+French
+Green French
+Horn
+Nendran
+Pink French
+Tiger
+Pome
+
+Silk
+
+African plantains
+Others
+
+
AABB AB ABB ABBB BBB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_carrot_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_carrot_diseases.html
new file mode 100644
index 0000000..f1c2add
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_carrot_diseases.html
@@ -0,0 +1,1408 @@
+
+
+
+
+List of carrot diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of carrot diseases
+
+
+
+
+
+3 languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+This is a list of diseases of carrots (Daucus carota subsp. sativus ).
+
+
+
+
+
+
+
Nematodes, parasitic[ edit ]
+
+
Virus and viroid diseases [ edit ]
+
+
+ diseases
+
+
+Alfalfa mosaic
+
+genus Alfamovirus , Alfalfa mosaic virus (AMV)
+
+
+Carrot latent
+
+genus Nucleorhabdovirus , Carrot latent virus (CtLtV)
+
+
+Carrot mottle
+
+genus Umbravirus , Carrot mottle virus (CMoV)
+
+
+Carrot red leaf
+
+genus Luteovirus , Carrot red leaf virus (CaRLV)
+
+
+Carrot thin leaf
+
+genus Potyvirus , Carrot thin leaf virus (CTLV)
+
+
+Carrot yellow leaf
+
+Carrot yellow leaf virus (CYLV)
+
+
+Celery mosaic
+
+genus Potyvirus , Celery mosaic virus (CeMV)
+
+
+Cucumber mosaic
+
+genus Cucumovirus , Cucumber mosaic virus (CMV)
+
+
+Curly top
+
+genus Hybrigeminivirus , Beet curly top virus (BCTV)
+
+
+Motley dwarf
+
+genus Luteovirus , Carrot red leaf virus (CaRLV)
+genus Umbravirus , Carrot mottle virus (CMoV)
+
+
+
+
Phytoplasmal and spiroplasmal diseases [ edit ]
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Crown rot disorder
+
+No specific pathogen associated with this disorder
+
+
+Heat canker
+
+High soil surface temperature
+
+
+Hollow black heart
+
+Boron deficiency
+
+
+Ozone injury
+
+Ozone pollution
+
+
+Root scab
+
+Physiological
+
+
+Speckled carrot
+
+No pathogen; genetic disorder
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_citrus_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_citrus_diseases.html
new file mode 100644
index 0000000..778e6e8
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_citrus_diseases.html
@@ -0,0 +1,2043 @@
+
+
+
+
+List of citrus diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of citrus diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+The following is a list of diseases in citrus plants.
+
+
+
+
+
+
+
Nematodes, parasitic[ edit ]
+
+
+
+
Viroids and graft-transmissible pathogens [GTP][ edit ]
+
+
+Viroids and graft-transmissible pathogens [GTP]
+
+
+Algerian navel orange virus
+
+GTP
+
+
+Blight = young tree decline, rough lemon decline
+
+GTP
+
+
+Blind pocket
+
+GTP
+
+
+Cachexia
+
+Citrus cachexia viroid (Hostuviroid)
+
+
+Chlorotic dwarf
+
+White-fly transmitted GTP
+
+
+Citrus dwarfing
+
+Various viroids
+
+
+Citrus vein enation (CVEV) = woody gall
+
+GTP (possible luteovirus)
+
+
+Citrus yellow mottle
+
+GTP
+
+
+Citrus yellow ringspot
+
+GTP
+
+
+Concave gum
+
+GTP
+
+
+Cristacortis
+
+GTP
+
+
+Exocortis
+
+Citrus exocortis viroid (CEVd) Pospiviroidae
+
+
+Fatal yellows
+
+GTP
+
+
+Gummy bark
+
+GTP, possible viroid
+
+
+Gum pocket and gummy pittings
+
+GTP, possible viroid
+
+
+Impietratura
+
+GTP
+
+
+Indian citrus ringspot
+
+GTP
+
+
+Leaf curl
+
+GTP
+
+
+Leathery leaf
+
+GTP
+
+
+Leprosis
+
+GTP associated with Brevipalpus spp. mites
+
+
+Measles
+
+GTP
+
+
+Milam stem-pitting
+
+GTP
+
+
+Multiple sprouting disease
+
+GTP
+
+
+Nagami kumquat disease
+
+GTP
+
+
+Ringspot diseases
+
+Various GTPs
+
+
+Xyloporosis = cachexia
+
+Citrus cachexia viroid (Hostuviroid)
+
+
+Yellow vein
+
+GTP
+
+
+Yellow vein clearing of lemon
+
+GTP
+
+
+
Phytoplasmal and spiroplasmal diseases [ edit ]
+
+
+Phytoplasmal and spiroplasmal diseases
+
+
+Australian citrus dieback
+
+Unknown procaryote?
+
+
+Stubborn
+
+Spiroplasma citri (spread by leafhoppers)
+
+
+Witches’ broom of lime
+
+Phytoplasma
+
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Algal disease (algal spot)
+
+Cephaleuros virescens
+
+
+Amachamiento
+
+Unknown
+
+
+Blossom-end clearing
+
+Physiological
+
+
+Chilling injury
+
+Cold temperatures
+
+
+Citrus blight
+
+Unknown - pathogen suspected
+
+
+Creasing
+
+Nutritional (?)
+
+
+Crinkle scurf
+
+Genetic
+
+
+Granulation
+
+Physiological
+
+
+Lemon sieve-tube necrosis
+
+Unknown, but hereditary
+
+
+Lime blotch = wood pocket
+
+Inherited chimeral agent
+
+
+Membranous stain
+
+Cold temperatures
+
+
+Mesophyll collapse
+
+Unknown
+
+
+Oleocellosis
+
+Physiological
+
+
+Postharvest pitting
+
+Physiological
+
+
+Puffing
+
+Physiological
+
+
+Rind breakdown
+
+Physiological
+
+
+Rind staining
+
+Physiological
+
+
+Rind stipple of grapefruit
+
+Environmental
+
+
+Rumple of lemon fruit
+
+Unknown
+
+
+Shell bark complex
+
+Unknown - (viroid?)
+
+
+Sooty mold (superficial, not pathogenic)
+
+Capnodium
+C. citricola
+Capnodium sp.
+
+
+
+Stem-end rind breakdown
+
+Physiological
+
+
+Stylar-end breakdown of Tahiti lime
+
+Physiological
+
+
+Stylar-end rind breakdown
+
+Physiological
+
+
+Stylar-end rot
+
+Physiological
+
+
+Sunburn
+
+Excessive heat and light
+
+
+Tangerine dieback
+
+Unknown
+
+
+Water spot
+
+Physiological
+
+
+Woody galls on stems
+
+Bruchophagus fellis (Citrus Gall Wasp)
+
+
+Zebra skin
+
+Physiological
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_cucurbit_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_cucurbit_diseases.html
new file mode 100644
index 0000000..4850575
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_cucurbit_diseases.html
@@ -0,0 +1,1258 @@
+
+
+
+
+List of cucurbit diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of cucurbit diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+
+
+
This article is a list of diseases of cucurbits (Citrullus spp., Cucumis spp., Cucurbita spp., and others).
+
+
+
+
+
+Bacterial diseases
+
+
+Angular leaf spot
+
+Pseudomonas amygdali pv. lachrymans
+
+
+Bacterial fruit blotch/seedling blight
+
+Acidovorax avenae subsp. citrulli = Pseudomonas pseudoalcaligenes subsp. citrulli
+
+
+Bacterial leaf spot
+
+Xanthomonas campestris pv. cucurbitae
+
+
+Bacterial rind necrosis
+
+Erwinia spp.
+
+
+Bacterial soft rot
+
+Erwinia carotovora subsp. carotovora
+
+
+Bacterial wilt
+
+Erwinia tracheiphila
+
+
+Brown spot
+
+Erwinia ananas
+
+
+
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Air pollution injury
+
+Ozone, sulfur dioxide and others
+
+
+Bitter fruit
+
+Sunburn injury, physiologic stress
+
+
+Blossom end rot
+
+Physiological disorder, calcium deficiency, moisture imbalance
+
+
+Bottle neck of fruit
+
+Incomplete pollination
+
+
+Measles
+
+Physiological disorder, salt toxicity
+
+
+Sandburn
+
+Physiological disorder
+
+
+Sunscald (fruit)
+
+Excessive or intense direct heat/ solar injury
+
+
+Windburn
+
+Physiological disorder
+
+
+
Nematodes, parasitic[ edit ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_grape_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_grape_diseases.html
new file mode 100644
index 0000000..f938d6b
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_grape_diseases.html
@@ -0,0 +1,1367 @@
+
+
+
+
+List of grape diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of grape diseases
+
+
+
+
+
+3 languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+
+
A cartoon from Punch from 1890: The phylloxera , a true gourmet, finds out the best vineyards and attaches itself to the best wines. Punch magazine , 6 Sep. 1890.
+
This is a list of diseases of grapes (Vitis spp.).
+
+
+
+
Glassy-winged sharpshooter , the primary carrier of PD
+
+
+
Bird's eye (Anthracnose ) rot
+
Botrytis or "Noble rot"
+
Downy mildew
+
Powdery mildew
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Berry rot
+
+Yeasts
+
+
+Black measles
+
+Presumably toxins from wood-rotting fungi; see Wood rot (decay)
+
+
+Chlorosis
+
+Iron deficiency
+
+
+Esca (Apoplexy )
+
+Presumably toxins from wood-rotting fungi; see Wood rot (decay)
+
+
+Fasciation
+
+Genetic disorder
+
+
+Little leaf
+
+Zinc deficiency
+
+
+Oxidant stipple
+
+Ozone
+
+
+Rupestris speckle
+
+Physiological disorder
+
+
+Stem necrosis (water berry, grape peduncle necrosis)
+
+Physiological disorder
+
+
+
Nematodes, parasitic[ edit ]
+
+
Phytoplasma, virus and viruslike diseases[ edit ]
+
+
+
+
+
+
+^ Wecket, Melanie (15 November 2016). "Bacterial rot of grapevine caused by Pseudomonas syringae" . NSW DPI Agriculture . National Wine and Grape Industry Centre. Archived from the original on 2021-12-14. Retrieved 13 October 2017 .
+
+^ Dowling, Madeline; Peres, Natalia; Villani, Sara; Schnabel, Guido (2020). "Managing Colletotrichum on Fruit Crops: A "Complex" Challenge" . Plant Disease . 104 (9): 2301– 2316. Bibcode :2020PlDis.104.2301D . doi :10.1094/PDIS-11-19-2378-FE . ISSN 0191-2917 . PMID 32689886 . S2CID 219479598 .
+
+^ Damm, U.; Cannon, P. F.; Woudenberg, J. H. C.; Crous, P. W. (2012). "The Colletotrichum acutatum species complex" . Studies in Mycology . complex species or species complexes?. 73 (1): 37– 113. doi :10.3114/sim0010 . ISSN 0166-0616 . PMC 3458416 . PMID 23136458 .
+
+^ Kepner, Cody; Swett, Cassandra L. (2018). "Previously unrecognized diversity within fungal fruit rot pathosystems on Vitis vinifera and hybrid white wine grapes in Mid-Atlantic vineyards" . Australasian Plant Pathology . 47 (2): 181– 188. Bibcode :2018AuPP...47..181K . doi :10.1007/s13313-017-0538-4 . ISSN 0815-3191 . S2CID 4435220 .
+
+^ Weir, B. S.; Johnston, P. R.; Damm, U. (2012). "The Colletotrichum gloeosporioides species complex" . Studies in Mycology . complex species or species complexes?. 73 (1): 115– 180. doi :10.3114/sim0011 . ISSN 0166-0616 . PMC 3458417 . PMID 23136459 .
+
+
+
+
+
Biology and horticulture Environmental variation Vineyard planting Vineyard management Harvest Pests and diseases Approaches and issues See also
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_lettuce_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_lettuce_diseases.html
new file mode 100644
index 0000000..a0bf1c2
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_lettuce_diseases.html
@@ -0,0 +1,1128 @@
+
+
+
+
+List of lettuce diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of lettuce diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+This article is a list of diseases of lettuce (Lactuca sativa ).
+
+
+
+
+
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Brown stain
+
+Physiological, excess CO2
+
+
+Russet spotting
+
+Physiological, excess ethylene
+
+
+Tipburn
+
+Physiological, Ca** deficiency and high temperature
+
+
+
Nematodes, parasitic[ edit ]
+
+
Phytoplasma, Viral and viroid diseases[ edit ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_maize_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_maize_diseases.html
new file mode 100644
index 0000000..5f1a080
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_maize_diseases.html
@@ -0,0 +1,1987 @@
+
+
+
+
+List of maize diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of maize diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+
+
+
+
+
+
+
+Fungal diseases
+
+
+Anthracnose leaf blight
+Anthracnose stalk rot
+Anthracnose top dieback [ 3] [ 4]
+
+
+Colletotrichum graminicola
+Glomerella graminicola [teleomorph]
+Glomerella tucumanensis
+Glomerella falcatum [anamorph]
+
+
+
+Aspergillus ear and kernel rot
+
+Aspergillus flavus
+
+
+Banded leaf and sheath spot
+
+Rhizoctonia solani = Rhizoctonia microsclerotia
+Thanatephorus cucumeris [teleomorph]
+
+
+
+Black bundle disease
+
+Acremonium strictum = Cephalosporium acremonium
+
+
+Black kernel rot
+
+Lasiodiplodia theobromae = Botryodiplodia theobromae
+
+
+Borde blanco
+
+Marasmiellus sp.
+
+
+Brown spot
+Black spot
+Stalk rot
+
+
+Physoderma maydis
+
+
+Cephalosporium kernel rot
+
+Acremonium strictum = Cephalosporium acremonium
+
+
+Charcoal rot
+
+Macrophomina phaseolina
+
+
+Corticium ear rot
+
+Thanatephorus cucumeris = Corticium sasakii
+
+
+Curvularia leaf spot
+
+Curvularia clavata
+Curvularia eragrostidis = Curvularia maculans
+Cochliobolus eragrostidis [teleomorph]
+Curvularia inaequalis
+Curvularia intermedia
+Cochliobolus intermedius [teleomorph]
+Curvularia lunata
+Cochliobolus lunatus [teleomorph]
+Curvularia pallescens
+Cochliobolus pallescens [teleomorph]
+Curvularia senegalensis
+Curvularia tuberculata
+Cochliobolus tuberculatus [teleomorph]
+
+
+
+Didymella leaf spot
+
+Didymella exitalis
+
+
+Diplodia ear rot and stalk rot
+
+Diplodia frumenti
+Botryosphaeria festucae [teleomorph]
+
+
+
+Diplodia ear rot
+Stalk rot
+Seed rot
+Seedling blight
+
+
+Diplodia maydis
+
+
+Diplodia leaf spot or leaf streak
+
+Stenocarpella macrospora = Diplodia macrospora
+
+
+Downy mildews
+
+
+Brown stripe downy mildew
+
+Sclerophthora rayssiae
+
+
+Crazy top downy mildew
+
+Sclerophthora macrospora = Sclerospora macrospora
+
+
+Green ear downy mildew
+Graminicola downy mildew
+
+
+Sclerospora graminicola
+
+
+Java downy mildew
+
+Peronosclerospora maydis = Sclerospora maydis
+
+
+Philippine downy mildew
+
+Peronosclerospora philippinensis = Sclerospora philippinensis
+
+
+Sorghum downy mildew
+
+Peronosclerospora sorghi = Sclerospora sorghi
+
+
+Spontaneum downy mildew
+
+Peronosclerospora spontanea = Sclerospora spontanea
+
+
+Sugarcane downy mildew
+
+Peronosclerospora sacchari = Sclerospora sacchari
+
+
+...
+
+
+Dry ear rot
+Cob, kernel and stalk rot
+
+
+Nigrospora oryzae
+Khuskia oryzae [teleomorph]
+
+
+
+Ear rots, minor
+
+Alternaria alternata = Alternaria tenuis
+Aspergillus glaucus
+Aspergillus niger
+Aspergillus spp.
+Botrytis cinerea
+Botryotinia fuckeliana [teleomorph]
+Cunninghamella sp.
+Curvularia pallescens
+Doratomyces stemonitis = Cephalotrichum stemonitis
+Fusarium culmorum
+Gonatobotrys simplex
+Pithomyces maydicus
+Rhizopus microsporus
+Rhizopus stolonifer = Rhizopus nigricans
+Scopulariopsis brumptii
+
+
+
+Ergot
+Horse's tooth
+
+
+Claviceps gigantea
+Sphacelia sp. [anamorph]
+
+
+
+Eyespot
+
+Aureobasidium zeae = Kabatiella zeae
+
+
+Fusarium ear and stalk rot
+
+Fusarium subglutinans = Fusarium moniliforme
+
+
+Fusarium kernel, root and stalk rot, seed rot and seedling blight
+
+Fusarium moniliforme
+Gibberella fujikuroi [teleomorph]
+
+
+
+Fusarium stalk rot
+Seedling root rot
+
+
+Fusarium avenaceum
+Gibberella avenacea [teleomorph]
+
+
+
+Gibberella ear and stalk rot
+
+Gibberella zeae
+Fusarium graminearum [anamorph]
+
+
+
+Gray ear rot
+
+Botryosphaeria zeae = Physalospora zeae
+Macrophoma zeae [anamorph]
+
+
+
+Corn grey leaf spot
+Gray leaf spot
+Cercospora leaf spot
+
+
+Cercospora sorghi = Cercospora sorghi [clarification needed ]
+Cercospora zeae-maydis [ 5] [ 6] [ 7]
+Cercospora zeina [ 6] [ 7]
+
+
+
+Helminthosporium root rot
+
+Exserohilum pedicellatum = Helminthosporium pedicellatum
+Setosphaeria pedicellata [teleomorph]
+
+
+
+Hormodendrum ear rot
+Cladosporium ear rot
+
+
+Cladosporium cladosporioides = Hormodendrum cladosporioides
+Cladosporium herbarum
+Mycosphaerella tassiana [teleomorph]
+
+
+
+Hyalothyridium leaf spot
+
+Hyalothyridium maydis
+
+
+Late wilt
+
+Cephalosporium maydis
+
+
+Leaf spots, minor
+
+Alternaria alternata
+Ascochyta maydis
+Ascochyta tritici
+Ascochyta zeicola
+Bipolaris victoriae = Helminthosporium victoriae
+Cochliobolus victoriae [teleomorph]
+Cochliobolus sativus
+Bipolaris sorokiniana [anamorph] = Helminthosporium sorokinianum = H. sativum
+Epicoccum nigrum
+Exserohilum prolatum = Drechslera prolata
+Setosphaeria prolata [teleomorph]
+Graphium penicillioides
+Leptosphaeria maydis
+Leptothyrium zeae
+Ophiosphaerella herpotricha
+Scolecosporiella sp. [anamorph]
+Paraphaeosphaeria michotii
+Phoma sp.
+Septoria zeae
+Septoria zeicola
+Septoria zeina
+
+
+
+Northern corn leaf blight
+White blast
+Crown stalk rot
+Stripe
+
+
+Setosphaeria turcica
+Exserohilum turcicum [anamorph] = Helminthosporium turcicum
+
+
+
+Northern corn leaf spot
+Helminthosporium ear rot (race 1)
+
+
+Cochliobolus carbonum
+Bipolaris zeicola [anamorph] = Helminthosporium carbonum
+
+
+
+Penicillium ear rot
+Blue eye
+Blue mold
+
+
+Penicillium spp.
+Penicillium chrysogenum
+Penicillium expansum
+Penicillium oxalicum
+
+
+
+Phaeocytostroma stalk rot and root rot
+
+Phaeocytostroma ambiguum = Phaeocytosporella zeae
+
+
+Phaeosphaeria leaf spot
+
+Phaeosphaeria maydis = Sphaerulina maydis
+
+
+Physalospora ear rot
+Botryosphaeria ear rot
+
+
+Botryosphaeria festucae = Physalospora zeicola
+Diplodia frumenti [anamorph]
+
+
+
+Purple leaf sheath
+
+Hemiparasitic bacteria and fungi
+
+
+Pyrenochaeta stalk rot and root rot
+
+Phoma terrestris = Pyrenochaeta terrestris
+
+
+Pythium root rot
+
+Pythium spp.
+Pythium arrhenomanes
+Pythium graminicola
+
+
+
+Pythium stalk rot
+
+Pythium aphanidermatum = Pythium butleri
+
+
+Red kernel disease
+Ear mold, leaf and seed rot
+
+
+Epicoccum nigrum
+
+
+Rhizoctonia ear rot
+Sclerotial rot
+
+
+Waitea zeae
+
+
+Rhizoctonia root rot and stalk rot
+
+Rhizoctonia solani
+Waitea zeae
+
+
+
+Root rots, minor
+
+Alternaria alternata
+Cercospora sorghi
+Dictochaeta fertilis
+Fusarium acuminatum
+Gibberella acuminata [teleomorph]
+Fusarium equiseti
+Gibberella intricans [teleomorph]
+Fusarium oxysporum
+Fusarium pallidoroseum
+Fusarium poae
+Fusarium roseum
+Gibberella cyanogena
+Fusarium sulphureum [anamorph]
+Microdochium bolleyi
+Mucor sp.
+Periconia circinata
+Phytophthora cactorum
+Phytophthora drechsleri
+Phytophthora nicotianae
+Rhizopus arrhizus
+
+
+
+Rostratum leaf spot
+Helminthosporium leaf disease, ear and stalk rot
+
+
+Setosphaeria rostrata = Helminthosporium rostratum
+
+
+Rust, common corn
+
+Puccinia sorghi
+
+
+Rust, southern corn
+
+Puccinia polysora
+
+
+Rust, tropical corn
+
+Physopella pallescens
+Physopella zeae = Angiopsora zeae
+
+
+
+Sclerotium ear rot
+Southern blight
+
+
+Athelia rolfsii
+
+
+Seed rot-seedling blight
+
+Athelia rolfsii
+Bipolaris sorokiniana
+Bipolaris zeicola = Helminthosporium carbonum
+Diplodia maydis
+Exserohilum pedicillatum
+Exserohilum turcicum = Helminthosporium turcicum
+Fusarium avenaceum
+Fusarium culmorum
+Fusarium moniliforme
+Gibberella zeae
+Fusarium graminearum [anamorph]
+Macrophomina phaseolina
+Penicillium spp.
+Phomopsis spp.
+Pythium spp.
+Rhizoctonia solani
+Spicaria spp.
+Waitea zeae
+
+
+
+Selenophoma leaf spot
+
+Selenophoma sp.
+
+
+Sheath rot
+
+Gaeumannomyces graminis
+
+
+Shuck rot
+
+Myrothecium gramineum
+
+
+Silage mold
+
+Monascus purpureus
+Monascus ruber
+
+
+
+Smut, common
+
+Ustilago zeae = Ustilago maydis
+
+
+Smut, false
+
+Ustilaginoidea virens
+
+
+Smut, head
+
+Sphacelotheca reiliana = Sporisorium holci-sorghi
+
+
+Southern corn leaf blight and stalk rot
+
+Cochliobolus heterostrophus
+Bipolaris maydis [anamorph] = Helminthosporium maydis
+
+
+
+Southern leaf spot
+
+Stenocarpella macrospora = Diplodia macrospora
+
+
+Stalk rots, minor
+
+Cercospora sorghi
+Fusarium episphaeria
+Fusarium merismoides
+Fusarium oxysporum
+Fusarium poae
+Fusarium roseum
+Fusarium solani
+Nectria haematococca [teleomorph]
+Fusarium tricinctum
+Mariannaea elegans
+Mucor spp.
+Rhopographus zeae
+Spicaria spp.
+
+
+
+Storage rots
+
+Aspergillus spp.
+Penicillium spp. and other fungi
+
+
+
+Tar spot
+
+Phyllachora maydis Monographella maydis Coniothyrium phyllachorae [ 8] [ 9]
+
+
+Trichoderma ear rot and root rot
+
+Trichoderma viride = Trichoderma lignorum
+Hypocrea sp. [teleomorph]
+
+
+
+White ear rot, root and stalk rot
+
+Stenocarpella maydis = Diplodia zeae
+
+
+Yellow leaf blight
+
+Ascochyta ischaemi
+Phyllosticta maydis
+Mycosphaerella zeae-maydis [teleomorph]
+
+
+
+Zonate leaf spot
+
+Gloeocercospora sorghi
+
+
+
Nematodes, Parasitic[ edit ]
+
+
+Nematodes, Parasitic
+
+
+Awl
+
+Dolichodorus spp.
+D. heterocephalus
+
+
+
+Bulb and stem
+
+Ditylenchus dipsaci
+
+
+Burrowing
+
+Radopholus similis
+
+
+Cyst
+
+Heterodera avenae
+H. zeae
+Punctodera chalcoensis
+
+
+
+Dagger
+
+Xiphinema spp.
+X. americanum
+X. mediterraneum
+
+
+
+False root-knot
+
+Nacobbus dorsalis
+
+
+Lance, Columbia
+
+Hoplolaimus columbus
+
+
+Lance
+
+Hoplolaimus spp.
+H. galeatus
+
+
+
+Lesion
+
+Pratylenchus spp.
+P. brachyurus
+P. crenatus
+P. hexincisus
+P. neglectus
+P. penetrans
+P. scribneri
+P. thornei
+P. zeae
+
+
+
+Needle
+
+Longidorus spp.
+L. breviannulatus
+
+
+
+Ring
+
+Criconemella spp.
+C. ornata
+
+
+
+Root-knot
+
+Meloidogyne spp.
+M. chitwoodi
+M. incognita
+M. javanica
+
+
+
+Spiral
+
+Helicotylenchus spp.
+
+
+Sting
+
+Belonolaimus spp.
+B. longicaudatus
+
+
+
+Stubby-root
+
+Paratrichodorus spp.
+P. christiei
+P. minor
+Quinisulcius acutus
+Trichodorus spp.
+
+
+
+Stunt
+
+Tylenchorhynchus dubius
+
+
+
Virus and virus-like diseases [ edit ]
+
+
+Virus and virus-like diseases
+
+
+American wheat striate (wheat striate mosaic)
+
+American wheat striate mosaic virus mosaic (AWSMV)
+
+
+Barley stripe mosaic
+
+Barley stripe mosaic virus (BSMV)
+
+
+Barley yellow dwarf
+
+Barley yellow dwarf virus (BYDV)
+
+
+Brome mosaic
+
+Brome mosaic virus (BMV)
+
+
+Cereal chlorotic mottle
+
+Cereal chlorotic mottle virus (CCMV)
+
+
+Corn lethal necrosis (maize lethal necrosis disease )
+
+Virus complex (Maize chlorotic mottle virus [MCMV] and Maize dwarf mosaic virus [MDMV] A or B or Wheat streak mosaic virus [WSMV])
+
+
+Cucumber mosaic
+
+Cucumber mosaic virus (CMV)
+
+
+Johnsongrass mosaic
+
+Johnsongrass mosaic virus (JGMV)
+
+
+Maize bushy stunt
+
+Mycoplasmalike organism (MLO), assoc.
+
+
+Maize chlorotic dwarf
+
+Maize chlorotic dwarf virus (MCDV)
+
+
+Maize chlorotic mottle
+
+Maize chlorotic mottle virus (MCMV)
+
+
+Maize dwarf mosaic
+
+Maize dwarf mosaic virus (MDMV) strains A, D, E and F
+
+
+Maize leaf fleck
+
+Maize leaf fleck virus (MLFV)
+
+
+Maize line*
+
+Maize line virus (MLV)
+
+
+Maize mosaic (corn leaf stripe, enanismo rayado)
+
+Maize mosaic virus (MMV)
+
+
+Maize pellucid ringspot
+
+Maize pellucid ringspot virus (MPRV)
+
+
+Maize rayado fino (fine striping disease)
+
+Maize rayado fino virus (MRFV)
+
+
+Maize red leaf and red stripe
+
+Mollicute?
+
+
+Maize red stripe (now known as Wheat mosaic virus
+
+Wheat mosaic virus (WMoV)
+
+
+Maize ring mottle
+
+Maize ring mottle virus (MRMV)
+
+
+Maize rough dwarf (nanismo ruvido)
+
+Maize rough dwarf virus (MRDV)
+
+
+Maize sterile stunt
+
+Maize sterile stunt virus (strains of barley yellow striate virus )
+
+
+Maize streak
+
+Maize streak virus (MSV)
+
+
+Maize stripe (maize chlorotic stripe, maize hoja blanca)
+
+Maize stripe virus
+
+
+Maize tassel abortion
+
+Maize tassel abortion virus (MTAV)
+
+
+Maize vein enation
+
+Maize vein enation virus (MVEV)
+
+
+Maize wallaby ear
+
+Maize wallaby ear virus (MWEV)
+
+
+Maize white leaf
+
+Maize white leaf virus
+
+
+Maize white line mosaic
+
+Maize white line mosaic virus (MWLMV)
+
+
+Millet red leaf
+
+Millet red leaf virus (MRLV)
+
+
+Northern cereal mosaic
+
+Northern cereal mosaic virus (NCMV)
+
+
+Oat pseudorosette (zakuklivanie)
+
+Oat pseudorosette virus
+
+
+Oat sterile dwarf
+
+Oat sterile dwarf virus (OSDV)
+
+
+Rice black-streaked dwarf
+
+Rice black-streaked dwarf virus (RBSDV)
+
+
+Rice stripe
+
+Rice stripe virus (RSV)
+
+
+Sorghum mosaic
+
+Sorghum mosaic virus (SrMV), formerly sugarcane mosaic virus (SCMV) strains H, I and M
+
+
+Southern rice black-streaked dwarf
+
+Southern rice black-streaked dwarf (SRBSDV)
+
+
+Sugarcane Fiji disease
+
+Sugarcane Fiji disease virus (FDV)
+
+
+Sugarcane mosaic
+
+Sugarcane mosaic virus (SCMV) strains A, B, D, E, SC, BC, Sabi and MB (formerly MDMV-B)
+
+
+Wheat mosaic
+
+Wheat mosaic virus (disambiguation) (WMoV)
+
+
+
+
+
+^ "Goss's Wilt of Corn" . Crop Protection Network . Retrieved 2021-07-15 .
+
+^ Eichenlaub, Rudolf; Gartemann, Karl-Heinz (2011-09-08). "The Clavibacter michiganensis Subspecies: Molecular Investigation of Gram-Positive Bacterial Plant Pathogens". Annual Review of Phytopathology . 49 (1). Annual Reviews : 445– 464. doi :10.1146/annurev-phyto-072910-095258 . ISSN 0066-4286 . PMID 21438679 . S2CID 207707582 .
+
+^ "Top dieback in corn: Is anthracnose the cause?" . Integrated Crop Management Iowa State University Extension . 2007-09-10. Retrieved 2022-04-23 .
+
+^ "Stalk Rot Diseases Including Anthracnose Top Dieback Developing in Some Fields" . CropWatch University of Nebraska-Lincoln . 2016-09-09. Retrieved 2022-04-23 .
+
+^ Crous, Pedro W.; Groenewald, Johannes Z.; Groenewald, Marizeth; Caldwell, Pat; Braun, Uwe; Harrington, Thomas C. (1 May 2006). "Species of Cercospora associated with grey leaf spot of maize" . Studies in Mycology . 55 . Westerdijk Institute (Elsevier ): 189– 197. doi :10.3114/sim.55.1.189 . PMC 2104713 . PMID 18490979 . S2CID 31494639 .
+
+^ a b Cairns, J.E.; Sonder, K.; Zaidi, P.H.; Verhulst, N.; Mahuku, G.; Babu, R.; Nair, S.K.; Das, B.; Govaerts, B.; Vinayan, M.T.; Rashid, Z.; Noor, J.J.; Devi, P.; San Vicente, F.; Prasanna, B.M. (2012). "1 Maize Production in a Changing Climate: Impacts, Adaptation, and Mitigation Strategies". Advances in Agronomy (PDF) . Vol. 114. Elsevier. pp. 1– 58. doi :10.1016/b978-0-12-394275-3.00006-7 . ISBN 9780123942753 . ISSN 0065-2113 .
+
+^ a b Tripathi, Ashutosh; Tripathi, Durgesh Kumar; Chauhan, D.K.; Kumar, Niraj; Singh, G.S. (2016). "Paradigms of climate change impacts on some major food sources of the world: A review on current knowledge and future prospects". Agriculture, Ecosystems & Environment . 216 . Elsevier : 356– 373. doi :10.1016/j.agee.2015.09.034 . ISSN 0167-8809 .
+
+^ Hock, J; Kranz, J (1995). "Studies on the epidemiology of the tar spot disease complex of maize in Mexico". Plant Pathology . 44 (3). British Society for Plant Pathology: 490– 502. doi :10.1111/j.1365-3059.1995.tb01671.x .
+
+^ Chalkley, D. "Invasive fungi. Tar spot of corn - Phyllachora maydis" . Systematic Mycology and Microbiology Laboratory, ARS, USDA. Retrieved 19 July 2016 .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_peach_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_peach_diseases.html
new file mode 100644
index 0000000..f846bbb
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_peach_diseases.html
@@ -0,0 +1,1483 @@
+
+
+
+
+List of peach and nectarine diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of peach and nectarine diseases
+
+
+
+
+
+Add languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+This article is a list of diseases of peaches and nectarines (Peach: Prunus persica ; Nectarine: P. persica var. nucipersica ).
+
+
+
+
+
+
+
Nematodes, parasitic[ edit ]
+
+
Viral and viroid diseases [ edit ]
+
(Also uncharacterized graft-transmissible pathogens [GTP])
+
+
+
+Viral and viroid diseases
+
+
+Asteroid spot = cherry Utah dixie spot
+
+GTP
+
+
+Bark and wood grooving
+
+GTP
+
+
+Blotch
+
+GTP
+
+
+Calico
+
+GTP
+
+
+Chlorosis
+
+GTP
+
+
+Chlorotic spot
+
+GTP
+
+
+Enation
+
+Peach enation virus
+
+
+Dark green sunken mottle
+
+genus Trichovirus , Apple chlorotic leaf spot virus (ACLSV)
+
+
+Latent mosaic
+
+Peach latent mosaic viroid
+
+
+Line pattern
+
+genus Ilarvirus , Prunus necrotic ringspot virus (PNRSV)
+genus Ilarvirus , Apple mosaic virus (ApMV)
+
+
+
+Line pattern and leaf curl = cherry line pattern leaf curl
+
+GTP (associated with an isometric particle)
+
+
+Mosaic
+
+Peach mosaic virus
+
+
+Mottle
+
+GTP
+
+
+Mule's ear
+
+GTP (associated with PNRSV)
+
+
+Necrotic ringspot
+
+genus Ilarvirus , Prunus necrotic ringspot virus (PNRSV)
+
+
+Oil blotch
+
+GTP
+
+
+Plum pox = Sharka
+
+genus Potyvirus , Plum pox virus (PPV)
+
+
+Prunus stem pitting
+
+genus Nepovirus , Tomato ringspot virus (ToRSV)
+
+
+Purple mosaic
+
+GTP
+
+
+Rosette and decline
+
+genus Ilarvirus , Prunus necrotic ringspot virus (PNRSV)
++ genus Ilarvirus , Prune dwarf virus (PDV)
+
+
+
+Rosette mosaic
+
+Peach rosette mosaic virus
+
+
+Seedling chlorosis
+
+GTP
+
+
+Shoot stunting (= almond enation)
+
+genus Nepovirus , Tomato black ring virus (TBRV)
+
+
+Star mosaic
+
+GTP
+
+
+Stubby twig
+
+GTP
+
+
+Stunt
+
+genus Ilarvirus , Prune dwarf virus (PDV) + genus Ilarvirus , Prunus necrotic ringspot virus (PNRSV)
+
+
+Wart
+
+GTP
+
+
+Willow leaf rosette
+
+Strawberry latent ringspot virus (SLRSV) + an unknown sap-transmissible virus
+
+
+Yellow bud mosaic
+
+genus Nepovirus , Tomato ringspot virus (ToRSV)
+
+
+Yellow mosaic
+
+GTP
+
+
+Yellow mottle
+
+GTP
+
+
+
Phytoplasma diseases [ edit ]
+
+
+Phytoplasmal and spiroplasmal diseases
+
+
+Apricot chlorotic leaf roll
+
+Phytoplasma
+
+
+Little peach (= yellows)
+
+Phytoplasma
+
+
+Red Suture (= yellows)
+
+Phytoplasma
+
+
+Rosette
+
+Phytoplasma
+
+
+X-Disease
+
+Phytoplasma
+
+
+Yellow leaf roll
+
+Phytoplasma
+
+
+Yellows
+
+Phytoplasma
+
+
+
Miscellaneous diseases and disorders diseases [ edit ]
+
+
+Miscellaneous diseases and disorders diseases
+
+
+Peach tree short life
+
+Complex of ring nematode, bacterial canker, Cytospora canker, and/or cold injury
+
+
+
+
+
+^ Dowling, Madeline; Peres, Natalia; Villani, Sara; Schnabel, Guido (2020). "Managing Colletotrichum on Fruit Crops: A "Complex" Challenge" . Plant Disease . 104 (9): 2301– 2316. doi :10.1094/PDIS-11-19-2378-FE . ISSN 0191-2917 . PMID 32689886 .
+
+^ Weir, B. S.; Johnston, P. R.; Damm, U. (2012). "The Colletotrichum gloeosporioides species complex" . Studies in Mycology . complex species or species complexes?. 73 (1): 115– 180. doi :10.3114/sim0011 . ISSN 0166-0616 . PMC 3458417 . PMID 23136459 .
+
+^ Damm, U.; Cannon, P. F.; Woudenberg, J. H. C.; Crous, P. W. (2012). "The Colletotrichum acutatum species complex" . Studies in Mycology . complex species or species complexes?. 73 (1): 37– 113. doi :10.3114/sim0010 . ISSN 0166-0616 . PMC 3458416 . PMID 23136458 .
+
+
+
+
Varieties Dishes Production Other
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_pear_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_pear_diseases.html
new file mode 100644
index 0000000..af66b89
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_pear_diseases.html
@@ -0,0 +1,1430 @@
+
+
+
+
+List of pear diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of pear diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+The following is a list of diseases of pears (Pyrus communis ).
+
+
+
+
+
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Alfalfa greening (green stain)
+
+Unknown
+
+
+Bitter pit
+
+Localized calcium deficiency
+
+
+Black end
+
+Water imbalance
+
+
+Black speck (skin speckling)
+
+Associated with low oxygen in storage
+
+
+Blossom blast
+
+Boron deficiency
+
+
+Brown core
+
+High CO2
+
+
+Core breakdown (Bartlett)
+
+Senescence
+
+
+Cork spot
+
+Associated with calcium deficiency
+
+
+Green stain
+
+Unknown
+
+
+Internal bark necrosis
+
+Unknown
+
+
+Mealy core (d`Anjou)
+
+Senescence
+
+
+Pink end (Bartlett)
+
+Preharvest low temperature
+
+
+Rosette
+
+Unknown
+
+
+Scald
+
+Senescence
+
+
+
Nematodes, parasitic[ edit ]
+
+
+
+
+Viruslike diseases
+
+
+Flemish beauty corky pit
+
+Virus suspected
+
+
+Pear blister canker
+
+Virus suspected
+
+
+Pear decline
+
+Phytoplasma
+
+
+Pear freckle pit
+
+Virus suspected
+
+
+Pear red mottle
+
+Virus suspected
+
+
+Pear ring pattern mosaic
+
+Virus suspected
+
+
+Pear rough bark
+
+Virus suspected
+
+
+Pear stony pit
+
+Virus suspected
+
+
+Pear vein yellows
+
+Virus suspected
+
+
+Quince bark necrosis
+
+Virus suspected
+
+
+Quince sooty ring spot
+
+Virus suspected
+
+
+Quince stunt
+
+Virus suspected
+
+
+Quince yellow blotch
+
+Virus suspected
+
+
+
+
+
Cultivars Pear Species Natural hybrids Related topics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_potato_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_potato_diseases.html
new file mode 100644
index 0000000..71e4fe0
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_potato_diseases.html
@@ -0,0 +1,1436 @@
+
+
+
+
+List of potato diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of potato diseases
+
+
+
+
+
+4 languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
Listicle of diseases and disorders in potatoes
+
This is a list of diseases and disorders found in potatoes .
+
+
+
+
+
+
+
+
+
Viral and viroid diseases [ edit ]
+
+
+
+Viral and viroid diseases
+
+
+Alfalfa mosaic virus
+genus Alfamovirus , Alfalfa mosaic virus (AMV)
+
+
+Andean potato latent virus
+genus Tymovirus , Andean potato latent virus (APLV)
+
+
+Andean potato mottle virus
+genus Comovirus , Andean potato mottle virus (APMV)
+
+
+Arracacha virus B - Oca strain
+genus Nepovirus , Arracacha virus B Oca strain (AVB-O)
+
+
+Beet curly top virus
+genus Curtovirus , Beet curly top virus (BCTV)
+
+
+Cucumber mosaic virus
+genus Cucumovirus , Cucumber mosaic virus (CMV)
+
+
+Eggplant mottle dwarf virus
+genus Rhabdovirus , Eggplant mottle dwarf virus (EMDV)
+
+
+Potato aucuba mosaic virus
+genus Potexvirus , Potato aucuba mosaic virus (PAMV)
+
+
+Potato black ringspot virus
+genus Nepovirus , Potato black ringspot virus (PBRSV)
+
+
+Potato deforming mosaic virus
+genus Geminiviridae Potato deforming mosaic virus subgroup III, (PDMV)
+
+
+Potato latent virus
+genus Carlavirus , Potato latent virus (PLV)
+
+
+Potato leafroll virus
+genus Luteovirus , Potato leafroll virus (PLRV)
+
+
+Potato mop-top virus (spraing of tubers)
+genus Furovirus , Potato mop-top virus (PMTV)
+
+
+Potato rugose mosaic
+genus Potyvirus , Potato virus Y (PVY, strains O, N and C)
+
+
+Potato stem mottle (spraing of tubers)
+genus Tobravirus , Tobacco rattle virus (TRV)
+
+
+Potato spindle tuber
+Potato spindle tuber viroid (PSTVd)
+
+
+Potato yellow dwarf virus
+genus Nucleorhabdovirus , Potato yellow dwarf virus (PYDV)
+
+
+Potato yellow mosaic virus
+genus Geminiviridae , Potato yellow mosaic virus (PYMV); subgroup III
+
+
+Potato yellow vein virus
+Potato yellow vein virus (PYVV)
+
+
+Potato yellowing virus
+genus Alfamovirus , Potato yellowing virus (PYV)
+
+
+Potato virus A
+genus Potyvirus , Potato virus A (PVA)
+
+
+Potato virus M
+genus Carlavirus , Potato virus M (PVM)
+
+
+Potato virus S
+genus Carlavirus , Potato virus S (PVS)
+
+
+Potato virus H
+genus Carlavirus , Potato virus H (PVH)
+
+
+Potato virus T
+genus Trichovirus , Potato virus T
+
+
+Potato virus U
+genus Nepovirus , Potato virus U (PVU)
+
+
+Potato virus V
+genus Potyvirus , Potato virus V (PVV)
+
+
+Potato virus X
+genus Potexvirus , Potato virus X (PVX)
+
+
+Potato virus Y
+genus Potyvirus , Potato virus Y (PVY)
+
+
+Solanum apical leaf curling virus
+Geminiviridae , Solanum apical leaf curling virus (SALCV) subgroup III
+
+
+Sowbane mosaic virus
+genus Sobemovirus , Sowbane mosaic virus (SoMV)
+
+
+Tobacco mosaic virus
+genus Tobamovirus , Tobacco mosaic virus (TMV)
+
+
+Tobacco necrosis virus
+genus Necrovirus , Tobacco necrosis virus (TNV)
+
+
+Tobacco rattle virus
+genus Tobravirus , Tobacco rattle virus (TRV)
+
+
+Tobacco streak virus
+genus Ilarvirus , Tobacco streak virus (TSV)
+
+
+Tomato black ring virus
+genus Nepovirus , Tomato black ring virus (ToBRV)
+
+
+Tomato mosaic virus
+genus Tobamovirus , Tomato mosaic virus (ToMV)
+
+
+Tomato spotted wilt virus
+genus Tospovirus , Tomato spotted wilt virus (TSWV)
+
+
+Tomato yellow mosaic virus
+genus Geminiviridae , Tomato yellow mosaic virus (ToYMV) subgroup III
+
+
+Wild potato mosaic virus
+genus Potyvirus , Wild potato mosaic virus (WPMV)
+
+
+
+
+
Phytoplasmal diseases [ edit ]
+
+
+Phytoplasmal diseases
+
+
+Aster yellows
+Aster yellows group of phytoplasmas
+
+
+Witches'-broom
+Witches’ broom phytoplasma
+
+
+BLTVA
+The beet leafhopper-transmitted virescence agent
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Aerial tubers
+Phytoplasma infection or anything that constricts the stem, including but not limited to Rhizoctonia canker, heat necrosis, chemical injury, mechanical injury, wind injury
+
+
+Air pollution injury
+Photochemical oxidants (primarily ozone), sulfur oxides
+
+
+Black heart
+Oxygen deficiency of internal tuber tissue
+
+
+Blackspot bruise
+Bruising, pressure contact
+
+
+Elephant hide
+Roughening of tuber skin due to physiological or environmental causes
+
+
+Hollow heart
+Excessively rapid tuber enlargement
+
+
+Internal brown spot = heat necrosis
+Oxygen deficiency of tuber accompanying high soil temperature
+
+
+Jelly end rot
+Carbohydrate translocation due to second growth
+
+
+Physiological leaf roll
+Response to adverse environment
+
+
+Psyllid yellows
+Toxic saliva of the potato (tomato) psyllid, Paratrioza cockerelli
+
+
+Shatter bruise
+Mechanical damage to tuber
+
+
+Skinning
+Mechanical damage to tuber
+
+
+Stem-end browning
+Exact cause(s) unknown, chemical injury, viruses or other pathogens.
+
+
+
+
+
+
+
Sparks, Adam; Kennelly, Megan (May 2008). "Common Scab of Potato" (PDF) . Kansas State University Agricultural Experiment Station and Cooperative Extension Service. Retrieved 2018-01-06 .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_spinach_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_spinach_diseases.html
new file mode 100644
index 0000000..476b88c
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_spinach_diseases.html
@@ -0,0 +1,1076 @@
+
+
+
+
+List of spinach diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of spinach diseases
+
+
+
+
+
+Add languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+
+
+
This article is a list of diseases of spinach (Spinacia oleracea ).
+
+
+
+
+
Fungal and Oomycete diseases [ edit ]
+
+
Nematodes, parasitic[ edit ]
+
+
+
+
+Viral diseases
+
+
+Curly top
+
+genus Hybrigeminivirus , Beet curly top virus (BCTV)
+
+
+Speckles
+
+genus Luteovirus , Beet western yellows virus (BWYV)
+genus Umbravirus , Lettuce speckles mottle virus (LSMV)
+
+
+
+Spinach blight
+
+genus Fabavirus , Broad bean wilt virus (BBWV)
+genus Cucumovirus , Cucumber mosaic virus (CMV)
+Other viruses
+
+
+
+Spinach mosaic
+
+genus Potyvirus , Beet mosaic virus (BtMV)
+genus Tobamovirus , Tobacco mosaic virus (TMV)
+Other viruses
+
+
+
+Yellow dwarf
+
+Unidentified virus
+
+
+Yellows
+
+genus Luteovirus , Beet western yellows virus (BWYV)
+genus Cucumovirus , Cucumber mosaic virus (CMV)
+genus Tospovirus , Tomato spotted wilt virus (TSWV)
+genus Potyvirus , Turnip mosaic virus (TuMV)
+
+
+
+
Phytoplasmal diseases [ edit ]
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Heart-leaf disorder
+
+Low light, wide diurnal air temperature fluctuations, low soil temperatures
+
+
+Leaf necrosis and scorch
+
+Ozone and other air pollutants
+
+
+Tip burn
+
+Unknown
+
+
+Yellows
+
+Nutritional disorders
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_strawberry_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_strawberry_diseases.html
new file mode 100644
index 0000000..2644830
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_strawberry_diseases.html
@@ -0,0 +1,1613 @@
+
+
+
+
+List of strawberry diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of strawberry diseases
+
+
+
+
+
+1 language
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+This article is a list of diseases of strawberry (Fragaria × ananassa ).
+
+
+
+
+
+
+
+
older stadium of Mycosphaerella fragariae on strawberry
+
Botrytis cinerea on strawberry
+
Powdery mildew on strawberry
+
+
Miscellaneous diseases and disorders [ edit ]
+
+
+Miscellaneous diseases and disorders
+
+
+Pith necrosis and crown death
+
+Unknown
+
+
+Rapid death
+
+Unknown, resembles P. cactorum
+
+
+Slime molds
+
+Diachea leucopodia
+Physarum cinereum
+
+
+
+
Nematodes, parasitic[ edit ]
+
+
Phytoplasma, Virus and virus-like diseases[ edit ]
+
+
+Virus and virus-like diseases
+
+
+Aphid-transmitted
+
+
+Strawberry chlorotic fleck
+
+Strawberry chlorotic fleck (graft-transmissible agent of unknown relationship)
+
+
+Strawberry crinkle
+
+Strawberry crinkle virus (SCV) (cytoplasmic rhabdovirus)
+
+
+Strawberry latent C virus in Fragaria
+
+Strawberry latent C virus (SLCV) (nuclear rhabdovirus)
+
+
+Strawberry mild yellow-edge
+
+Strawberry mild yellow-edge virus (SMYEV) (plus an unnamed potexvirus)
+
+
+Strawberry mottle
+
+Strawberry mottle virus (SMV) (Relationship unknown)
+
+
+Strawberry pseudo mild yellow-edge
+
+Strawberry pseudo mild yellow-edge virus (SPMYEV) (carlavirus)
+
+
+Strawberry vein banding
+
+Strawberry vein banding virus (SVBV) (caulimovirus)
+
+
+Leafhopper-transmitted phytoplasma and rickettsia-like agents (vectors known or probable):
+
+
+Aster yellows
+
+Aster yellows phytoplasma
+
+
+Maladie du bord jaune
+
+phytoplasma
+
+
+Strawberry green petal
+
+Strawberry green petal phytoplasma
+
+
+Strawberry lethal decline
+
+Strawberry lethal decline phytoplasma
+
+
+Strawberry multiplier plant
+
+Strawberry Multiplier MLO
+
+
+Strawberry mycoplasma yellows disease
+
+Strawberry yellows phytoplasma
+
+
+Strawberry rickettsia yellows disease
+
+Strawberry yellows rickettsia-like organism (SYRLO)
+
+
+Strawberry witches'-broom
+
+Strawberry witches'-broom MLO
+
+
+Nematode-transmitted
+
+
+Arabis mosaic virus
+
+Arabis mosaic virus (ArMV) (nepovirus)
+
+
+Raspberry ringspot virus
+
+Raspberry ringspot virus (nepovirus)
+
+
+Strawberry latent ringspot virus
+
+Strawberry latent ringspot virus (SLRV) (nepovirus)
+
+
+Tomato black ring virus
+
+Tomato black ring virus (TomBRV) (nepovirus)
+
+
+Tomato ringspot virus
+
+Tomato ringspot virus (TomRSV) (nepovirus)
+
+
+Fungus-transmitted
+
+
+Tobacco necrosis virus in Fragaria vesca
+
+Tobacco necrosis virus (TNV) (necrovirus)
+
+
+Pollen-transmitted
+
+
+Strawberry pallidosis
+
+Strawberry pallidosis (graft- and pollen-transmissible agent of unknown relationship)
+
+
+Thrips-transmitted
+
+
+Strawberry necrotic shock
+
+Tobacco streak virus, strawberry strain (TSV-SNS) (Ilarvirus )
+
+
+Vectors unknown
+
+
+Strawberry leafroll
+
+Strawberry leafroll (graft-transmissible agent(s) of unknown relationship
+
+
+Strawberry feather-leaf
+
+Strawberry feather-leaf (graft-transmissible agent of unknown relationship
+
+
+Non-graft transmissible virus-like disease
+
+
+Strawberry June yellows
+
+Genetically transmitted disorder of unknown cause
+
+
+
+
+
+
+
+^ Dowling, Madeline; Peres, Natalia; Villani, Sara; Schnabel, Guido (2020). "Managing Colletotrichum on Fruit Crops: A "Complex" Challenge" . Plant Disease . 104 (9): 2301– 2316. doi :10.1094/PDIS-11-19-2378-FE . ISSN 0191-2917 . PMID 32689886 . S2CID 219479598 .
+
+^ Damm, U.; Cannon, P. F.; Woudenberg, J. H. C.; Crous, P. W. (2012). "The Colletotrichum acutatum species complex" . Studies in Mycology . complex species or species complexes?. 73 : 37– 113. doi :10.3114/sim0010 . ISSN 0166-0616 . PMC 3458416 . PMID 23136458 .
+
+^ Weir, B. S.; Johnston, P. R.; Damm, U. (2012). "The Colletotrichum gloeosporioides species complex" . Studies in Mycology . complex species or species complexes?. 73 : 115– 180. doi :10.3114/sim0011 . ISSN 0166-0616 . PMC 3458417 . PMID 23136459 .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_tomato_diseases.html b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_tomato_diseases.html
new file mode 100644
index 0000000..f8fa5b6
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FList_of_tomato_diseases.html
@@ -0,0 +1,1298 @@
+
+
+
+
+List of tomato diseases - Wikipedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jump to content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle the table of contents
+
+
+
+
+
+ List of tomato diseases
+
+
+
+
+
+2 languages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
English
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tools
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From Wikipedia, the free encyclopedia
+
+
+
+
+
+
+
+
This article is a list of diseases of tomatoes (Solanum lycopersicum ).
+
+
+
+
+
+
+Fungal diseases
+
+
+Alternaria stem canker
+
+
+
+
+
+Anthracnose
+
+
+
+
+
+Black mold rot
+
+
+
+
+
+Black root rot
+
+
+
+
+
+Black shoulder
+
+
+
+
+
+Buckeye rot of tomato
+
+
+
+
+
+Cercospora leaf mold
+
+
+
+
+
+Charcoal rot
+
+
+
+
+
+Corky root rot
+
+
+
+
+
+Didymella stem rot
+
+
+
+
+
+Early blight
+
+
+
+
+
+Fusarium crown and root rot
+
+
+
+
+
+Fusarium wilt
+
+
+
+
+
+Gray Leaf Spot
+
+
+
+
+
+Gray mold
+
+
+
+
+
+Late blight
+
+
+
+
+
+Leaf mold
+
+
+
+
+
+Phoma rot
+
+
+
+
+
+Powdery mildew
+
+
+
+
+
+Pythium damping-off and fruit rot
+
+
+
+
+
+Rhizoctonia damping-off and fruit rot
+
+
+
+
+
+Rhizopus rot
+
+
+
+
+
+Septoria leaf spot
+
+
+
+
+
+Sour rot
+
+
+
+
+
+Southern Blight
+
+
+
+
+
+Target spot
+
+
+
+
+
+Verticillium wilt
+
+
+
+
+
+White mold
+
+
+
+
+
+
+
+Lepidoptera larvae
+
+
+Cutworm
+
+
+
+
+
+tomato fruitworm
+
+
+
+
+
+Tomato hornworm
+
+
+
+
+
+Tobacco hornworm
+
+
+
+
+
+
+
+
+
+
+
+Brown-tipped pearl
+
+
+
+
+
+Eggplant borer
+
+
+
+
+
+
+
+
+
+
+
+Tomato fruit borer
+
+
+
+
+
+Eggplant leafroller
+
+
+
+
+
+Potato tuber moth
+
+
+
+
+
+Tomato borer
+
+
+
+
+
+Tomato pinworm
+
+
+
+
+
+
+Nematodes, parasitic
+
+
+Root-knot
+
+
+
+
+
+Sting
+
+
+
+
+
+Stubby-root
+
+
+
+
+
+
+
+
Miscellaneous diseases and disorders [ edit ]
+
+Miscellaneous diseases and disorders
+
+
+Autogenous necrosis
+
+Genetic
+
+
+Fruit pox
+
+Genetic
+
+
+Gold fleck
+
+Genetic
+
+
+Graywall
+
+Undetermined etiology
+
+
+
+
+^ Nowicki, Marcin; et al. (17 August 2011), "Potato and tomato late blight caused by Phytophthora infestans : An overview of pathology and resistance breeding", Plant Disease , 96 (1), Plant Disease, ASP: 4– 17, doi :10.1094/PDIS-05-11-0458 , PMID 30731850
+
+^ Nowakowska, Marzena; et al. (3 Oct 2014), "Appraisal of artificial screening techniques of tomato to accurately reflect field performance of the late blight resistance", PLOS ONE , 9 (10) e109328, Bibcode :2014PLoSO...9j9328N , doi :10.1371/journal.pone.0109328 , PMC 4184844 , PMID 25279467
+
+^ a b Mally, Richard; Hayden, James E.; Neinhuis, Christoph; Jordal, Bjarte H.; Nuss, Matthias (2019). "The phylogenetic systematics of Spilomelinae and Pyraustinae (Lepidoptera: Pyraloidea: Crambidae) inferred from DNA and morphology" (PDF) . Arthropod Systematics & Phylogeny . 77 (1): 141– 204. doi :10.26049/ASP77-1-2019-07 . ISSN 1863-7221 .
+
+^ a b c d e f g Hayden, James E.; Lee, Sangmi; Passoa, Steven C.; Young, James; Landry, Jean-François; Nazari, Vazrick; Mally, Richard; Somma, Louis A.; Ahlmark, Kurt M. (2013). "Digital Identification of Microlepidoptera on Solanaceae" . USDA-APHIS-PPQ Identification Technology Program (ITP). Fort Collins, CO. Retrieved 2021-05-05 .
+
+^ Mink, G. I. (1993). "Pollen and Seed-Transmitted Viruses and Viroids". Annual Review of Phytopathology . 31 (1). Annual Reviews : 375– 402. doi :10.1146/annurev.py.31.090193.002111 . ISSN 0066-4286 .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wiki-List_of_apple_diseases.json b/apps/web/scripts/.scraper-cache/wiki-List_of_apple_diseases.json
new file mode 100644
index 0000000..725da19
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wiki-List_of_apple_diseases.json
@@ -0,0 +1,511 @@
+{{Short description|None}}
+{{Refimprove|date=January 2025}}
+Diseases of [[apple]]s (''Malus domestica'') include:
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Pseudomonadota'''
+|-
+|Blister spot
+||''[[Pseudomonas syringae]]'' pv. ''papulans''
+|-
+|[[Crown Gall|Crown gall]]
+||''[[Agrobacterium tumefaciens]]''
+|-
+|[[Fire blight]]
+||''[[Erwinia amylovora]]''
+|-
+|Hairy root
+||''[[Agrobacterium rhizogenes]]''
+|-
+! colspan=2| '''Mycoplasmatota'''
+|-
+|[[Apple chat fruit]]
+||Phytoplasma suspected
+|-
+|Apple decline
+||Phytoplasma suspected
+|-
+|Apple proliferation
+||Phytoplasma
+|-
+|Rubbery wood
+||Phytoplasma suspected
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria blotch
+||
+''[[Alternaria mali]]''
+{{=}} ''[[Alternaria alternata|A. alternata]]'' apple pathotype
+|-
+|Alternaria rot
+||''[[Alternaria alternata]]''
+|-
+|American brown rot
+||''[[Monilinia fructicola]]''
+|-
+|Anthracnose canker and bull's-eye rot
+||
+''[[Pezicula malicorticus]]''
+''[[Cryptosporiopsis curvispora]]'' [anamorph]
+|-
+|[[Apple scab]]
+||
+''[[Venturia inaequalis]]''
+''[[Venturia inaequalis|Spilocaea pomi]]'' [anamorph]
+|-
+|Apple ring rot and canker
+||''[[Botryosphaeria berengeriana]]''
+{{=}} ''[[Physalospora]]''
+|-
+|Armillaria root rot = shoestring root rot
+||''[[Armillaria mellea]]''
+|-
+|[[Bitter rot of apple|Bitter rot]][{{Cite journal|last1=Dowling|first1=Madeline|last2=Peres|first2=Natalia|last3=Villani|first3=Sara|last4=Schnabel|first4=Guido|date=2020|title=Managing Colletotrichum on Fruit Crops: A "Complex" Challenge|journal=Plant Disease|volume=104|issue=9|pages=2301–2316|doi=10.1094/PDIS-11-19-2378-FE|pmid=32689886|s2cid=219479598|issn=0191-2917|doi-access=free}}][{{Cite journal|last1=Martin|first1=Phillip L.|last2=Krawczyk|first2=Teresa|last3=Khodadadi|first3=Fatemeh|last4=Aćimović|first4=Srđan G.|last5=Peter|first5=Kari A.|date=2021|title=Bitter Rot of Apple in the Mid-Atlantic United States: Causal Species and Evaluation of the Impacts of Regional Weather Patterns and Cultivar Susceptibility|journal=Phytopathology|volume=111|issue=6|language=en|pages=PHYTO–09–20-043|doi=10.1094/PHYTO-09-20-0432-R|pmid=33487025|s2cid=231701083|issn=0031-949X|doi-access=free}}]
+||
+''[[Glomerella cingulata]]'' [teleomorph] (archaic)
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+
+''[[Colletotrichum gloeosporioides]]'' [[species complex]][{{Cite journal|last1=Weir|first1=B.S.|last2=Johnston|first2=P.R.|last3=Damm|first3=U.|date=2012|title=The Colletotrichum gloeosporioides species complex|journal=Studies in Mycology|language=en|volume=73|issue=1|pages=115–180|doi=10.3114/sim0011|pmc=3458417|pmid=23136459}}]
+
+* ''Colletotrichum fructicola''
+* ''Colletotrichum chrysophilum''
+
+''[[Colletotrichum acutatum]]'' [[species complex]][{{Cite journal|last1=Damm|first1=U.|last2=Cannon|first2=P.F.|last3=Woudenberg|first3=J.H.C.|last4=Crous|first4=P.W.|date=2012|title=The Colletotrichum acutatum species complex|journal=Studies in Mycology|language=en|volume=73|issue=1|pages=37–113|doi=10.3114/sim0010|pmc=3458416|pmid=23136458}}]
+
+* ''[[Colletotrichum fioriniae]]''
+* ''Colletotrichum nymphaeae''
+|-
+|Black pox
+||''[[Helminthosporium papulosum]]''
+|-
+|Black root rot
+||
+''[[Xylaria mali]]''
+''[[Xylaria polymorpha]]''
+|-
+|Black rot, frogeye leafspot and canker
+||
+''[[Botryosphaeria obtusa]]''
+''[[Sphaeropsis malorum]]'' [anamorph]
+|-
+|Blister canker = nailhead canker
+||
+''[[Biscogniauxia marginata]]''
+{{=}} ''[[Nummularia discreta]]''
+|-
+|Blue mold
+||''[[Penicillium]]'' spp.
+''[[Penicillium expansum]]''
+|-
+|Brooks fruit spot
+||
+''[[Mycosphaerella pomi]]''
+''[[Cylindrosporium pomi]]'' [anamorph]
+|-
+|Brown rot blossom blight and spur infection
+||
+''[[Monilinia laxa]]''
+|-
+|Calyx-end rot
+||''[[Sclerotinia sclerotiorum]]''
+|-
+|Clitocybe root rot
+||
+''[[Armillaria tabescens]]''
+{{=}} ''[[Clitocybe tabescens]]''
+|-
+|Diaporthe canker*
+||
+''[[Diaporthe tanakae]]''
+''[[Phomopsis tanakae]]'' [anamorph]
+|-
+|Diplodia canker
+||
+''[[Botryosphaeria stevensii]]''
+{{=}} ''[[Physalospora malorum]]''
+''[[Diplodia mutila]]'' [anamorph]
+|-
+|European brown rot
+||
+''[[Monilinia fructigena]]''
+''[[Monilia fructigena]]'' [anamorph]
+''[[Monilinia laxa]]''
+|-
+|Fisheye rot
+||
+''[[Butlerelfia eustacei]]''
+{{=}} ''[[Corticium centrifugum]]''
+|-
+|Flyspeck
+||
+''[[Schizothyrium pomi]]''
+''[[Zygophiala jamaicensis]]'' [anamorph]
+|-
+|Fruit blotch, leaf spot and twig canker
+||''[[Phyllosticta solitaria]]''
+|-
+|Glomerella leaf spot
+||
+''[[Glomerella cingulata]]''
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+|-
+|Gray mold rot = dry eye rot, blossom-end rot
+||
+''[[Botrytis cinerea]]''
+''[[Botrytis cinerea|Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|Leptosphaeria canker and fruit rot
+||
+''[[Diapleella coniothyrium]]''
+{{=}} ''[[Leptosphaeria coniothyrium]]''
+''[[Coniothyrium fuckelii]]'' [anamorph]
+|-
+|Leucostoma canker and dieback
+||
+''[[Leucostoma cinctum]]''
+''[[Cytospora cincta]]'' [anamorph]
+''[[Valsa auerswaldii]]''
+{{=}} ''[[Leucostoma auerswaldii]]''
+''[[Cytospora personata]]'' [anamorph]
+|-
+|[[Marssonina blotch]]
+||
+''[[Diplocarpon coronariae]]''
+|-
+|Moldy core and core rot
+||
+''[[Alternaria]]'' spp.
+''[[Cladosporium]]'' spp.
+''[[Coniothyrium]]'' sp.
+''[[Epicoccum]]'' spp.
+''[[Pleospora herbarum]]''
+''[[Stemphylium]]'' spp.
+''[[Ulocladium]]'' spp.
+|-
+|Monilia leaf blight
+||
+''[[Monilinia mali]]''
+''[[Monilinia|Monilia]]'' sp. [anamorph]
+|-
+|Monochaetia twig canker
+||
+''[[Seiridium unicorne]]''
+{{=}} ''[[Monochaetia mali]]''
+''[[Lepteutypa cupressi]]'' [teleomorph]
+|-
+|Mucor rot
+||
+''[[Mucor]]'' spp.
+''[[Mucor piriformis]]''
+|-
+|Nectria canker
+||
+''[[Nectria galligena]]''
+''[[Cylindrocarpon heteronemum]]'' [anamorph]
+|-
+|Nectria twig blight = coral spot
+||
+''[[Nectria cinnabarina]]''
+''[[Tubercularia vulgaris]]'' [anamorph]
+|-
+|Peniophora root canker
+||''[[Peniophora sacrata]]''
+|-
+|Perennial canker
+||
+''[[Neofabraea perennans]]''
+''[[Cryptosporiopsis perennans]]'' [anamorph]
+|-
+|Phomopsis canker, fruit decay and rough bark
+||
+''[[Phomopsis mali]]''
+''[[Diaporthe perniciosa]]'' [teleomorph]
+|-
+|Phymatotrichum root rot = cotton root rot
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+|Phytophthora crown, collar and root rot = sprinkler rot
+||
+''[[Phytophthora]]'' spp.
+''[[Phytophthora cactorum]]''
+''[[Phytophthora cambivora]]''
+''[[Phytophthora cryptogea]]''
+''[[Phytophthora megasperma]]''
+''[[Phytophthora syringae]]''
+|-
+|Phytophthora fruit rot
+||
+''[[Phytophthora cactorum]]''
+''[[Phytophthora syringae]]''
+|-
+|Pink mold rot
+||
+''[[Trichothecium roseum]]''
+{{=}} ''[[Cephalothecium roseum]]''
+|-
+|Powdery mildew
+||''[[Podosphaera leucotricha]]''
+|-
+|Rosellinia root rot = Dematophora root rot
+||
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+|-
+|Rubber rot
+|''[[Phacidiopycnis washingtonensis]]''
+|-
+!colspan=2|Rusts
+|-
+|American hawthorne rust
+||''[[Gymnosporangium globosum]]''
+|-
+|Cedar apple rust
+||''[[Gymnosporangium juniperi-virginianae]]''
+|-
+|Japanese apple rust
+||''[[Gymnosporangium yamadae]]''
+|-
+|Pacific Coast pear rust
+||''[[Gymnosporangium libocedri]]''
+|-
+|Quince rust
+||''[[Gymnosporangium clavipes]]''
+|-
+!colspan=2|...
+|-
+|Side rot
+||''[[Phialophora malorum]]''
+|-
+|Silver leaf
+||''[[Chondrostereum purpureum]]''
+|-
+|Sooty blotch complex
+||
+''[[Peltaster fructicola]]''
+''[[Geastrumia polystigmatis]]''
+''[[Leptodontidium elatius]]''
+''[[Gloeodes pomigena]]''
+|-
+|Southern blight
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Thread blight = Hypochnus leaf blight
+||
+''[[Corticium stevensii]]''
+{{=}} ''[[Pellicularia koleroga]]''
+{{=}} ''[[Hypochnus ochroleucus]]''
+|-
+|Valsa canker
+||
+''[[Valsa ceratosperma]]''
+''[[Cytospora sacculus]]'' [anamorph]
+|-
+|Violet root rot
+||''[[Helicobasidium mompa]]''
+|-
+|White root rot
+||
+''[[Scytinostroma galactinum]]''
+{{=}} ''[[Corticium galactinum]]''
+|-
+|White rot
+||
+''[[Botryosphaeria dothidea]]''
+''[[Fusicoccum aesculi]]'' [anamorph]
+|-
+|X-spot = Nigrospora spot
+||''[[Nigrospora oryzae]]''
+|-
+|Zonate leaf spot
+||
+''[[Cristulariella moricola]]''
+''[[Grovesinia pyramidalis]]'' [teleomorph]
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger nematode
+||
+''[[Xiphinema americanum]]''
+''[[Xiphinema rivesi]]''
+''[[Xiphinema vuittenezi]]''
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus penetrans]]''
+|-
+|Pin nematode
+||
+''[[Paratylenchus]]'' spp.
+|-
+|Ring nematode
+||
+''[[Criconemella]]'' spp.
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne]]'' spp.
+|-
+|}
+
+==Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Apple chlorotic leafspot
+||genus [[Trichovirus]], [[Apple chlorotic leafspot virus]] (ACLSV)
+|-
+|Apple dwarf (Malus platycarpa)
+||[[Apple stem pitting virus]] (ASPV) (? not US/CAN)
+|-
+|Apple flat apple
+||genus [[Nepovirus]], [[Cherry rasp leaf virus]] (CRLV)
+|-
+|Apple mosaic
+||genus [[Ilarvirus]], [[Apple mosaic virus]] (ApMV)
+genus [[Ilarvirus]], [[Tulare apple mosaic virus]] (TAMV)
+|-
+|Apple stem grooving = Apple decline of Virginia crab
+||genus [[Capillovirus]], [[Apple stem grooving virus]] (ASGV)
+|-
+|Apple stem pitting = apple Spy 227 epinasty and decline
+||[[Apple stem pitting virus]] (ASPV)
+|-
+|Apple union necrosis and decline
+||genus [[Nepovirus]], [[Tomato ringspot virus]] (ToRSV)
+|-
+|}
+
+==Viroid diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viroid diseases'''
+|-
+|Swollen apple
+||Apple fruit crinkle viroid (AFCVd)
+|-
+|Apple dimple fruit
+||Apple scar skin viroid (ASSVd)
+|-
+|Apple fruit crinkle
+||Apple fruit crinkle viroid (AFCVd) (Japan)
+|-
+|Apple scar skin = apple dapple, apple sabi-ka, apple bumpy fruit
+||Apple scar skin viroid (ASSVd)
+|-
+|}
+
+==Suspected viral- and viroid-like diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Suspected viral- and viroid-like diseases'''
+|-
+|Dead spur
+||GTP, unidentified
+|-
+|False sting
+||GTP, virus suspected
+|-
+|Green crinkle
+||GTP, virus suspected
+|-
+|Rough skin
+||GTP, virus suspected
+|-
+|Star crack
+||GTP, virus suspected
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|[[Bitter pit]]
+||Localized calcium deficiency
+|-
+|Blossom blast
+||Boron deficiency
+|-
+|[[Burrknot]]
+||Genetically predisposed rootstock
+|-
+|Fruit cracking
+||Genetic
+|-
+|Fruit russet
+||Frost, sprays, etc.
+|-
+|Green mottle
+||Unidentified
+|-
+|Hollow apple
+||High temperature
+|-
+|Internal bark necrosis = measles
+||Low pH and mineral nutrient imbalance
+|-
+|Internal browning
+||Boron and calcium deficiencies, etc.
+|-
+|Jonathan spot
+||Reduced by controlled atmosphere storage
+|-
+|Narrow leaf
+||Genetic
+|-
+|Necrotic leaf blotch of ‘Golden Delicious’
+||Rapid synthesis of [[gibberellin]]s triggered by environmental factors
+|-
+|Spray injury
+|Spray
+|-
+|Storage scald
+||Injury to fruit surfaces by naturally occurring gases produced by the fruit
+|-
+|Sunburn
+||Sun injury to fruit
+|-
+|Sunscald
+||Freezing of bark following high temperatures in winter
+|-
+|Water core
+||Sorbitol accumulation
+|-
+|}
+
+Pomological Watercolor POM00003985.jpg|'Bitter pit'
+Pomological Watercolor POM00003866.jpg|'Jonathan spot'
+Pomological Watercolor POM00000770.jpg|'Water core'
+Pomological Watercolor POM00003903.jpg|'Spray injury'
+
+
+==References==
+{{reflist}}
+
+==External links==
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Apple.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{Apples}}
+
+[[Category:Apple tree diseases|*]]
+[[Category:Lists of plant diseases|Apple]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wiki-List_of_citrus_diseases.json b/apps/web/scripts/.scraper-cache/wiki-List_of_citrus_diseases.json
new file mode 100644
index 0000000..fdd9686
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wiki-List_of_citrus_diseases.json
@@ -0,0 +1,618 @@
+{{Short description|None}}
+The following is a list of diseases in [[citrus]] plants.
+
+==Bacterial diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial spot
+||''[[Xanthomonas euvesicatoria]]'' pv. ''citrumelo''
+|-
+|Black pit (fruit)
+||''[[Pseudomonas syringae]]''
+|-
+|Blast
+||''[[Pseudomonas syringae]]''
+|-
+|[[Citrus canker]]
+||''[[Xanthomonas citri]]'' pv. ''citri''
+|-
+|Citrus variegated chlorosis
+||''[[Xylella fastidiosa]]''
+|-
+|[[Huanglongbing]] = citrus greening
+||''[[Candidatus Liberibacter]] asiaticus''
+''Candidatus L. africanus''
+|-
+|}
+
+==Fungal diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Albinism
+||
+''[[Alternaria alternata]]''
+{{=}} ''[[Alternaria tenuis]]''
+''[[Aspergillus flavus]]''
+|-
+|Alternaria brown spot
+||''[[Alternaria alternata]]''
+|-
+|Alternaria leaf spot of rough lemon
+||''[[Alternaria citri]]''
+|-
+|Alternaria stem-end rot
+||''[[Alternaria citri]]''
+|-
+|Anthracnose = wither-tip
+||
+''[[Glomerella cingulata]]''
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+|-
+|Areolate leaf spot
+||
+''[[Thanatephorus cucumeris]]''
+{{=}} ''[[Pellicularia filamentosa]]''
+''[[Rhizoctonia solani]]'' [anamorph]
+|-
+|Black mold rot
+||''[[Aspergillus niger]]''
+|-
+|Black root rot
+||
+''[[Thielaviopsis basicola]]''
+''[[Chalara elegans]]'' [synanamorph]
+|-
+|Black rot
+||''[[Alternaria citri]]''
+|-
+|Black spot
+||
+''[[Guignardia citricarpa]]''
+''[[Phyllosticta citricarpa]]'' [synanamorph]
+|-
+|Blue mold
+||''[[Penicillium italicum]]''
+|-
+|Botrytis blossom and twig blight, gummosis
+||
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|Branch knot
+||''[[Sphaeropsis tumefaciens]]''
+|-
+|Brown rot (fruit)
+||
+''[[Phytophthora citricola]]''
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora hibernalis]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+{{=}} ''[[Phytophthora parasitica]]''
+''[[Phytophthora palmivora]]''
+''[[Phytophthora syringae]]''
+|-
+|Charcoal root rot
+||''[[Macrophomina phaseolina]]''
+|-
+|Citrus black spot
+||''[[Guignardia citricarpa]]''
+|-
+|Damping-off
+||
+''[[Pythium]]'' sp.
+''[[Pythium aphanidermatum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium rostratum]]''
+''[[Pythium ultimum]]''
+''[[Pythium vexans]]''
+''[[Rhizoctonia solani]]''
+|-
+|Diplodia gummosis and stem-end rot
+||
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia theobromae]]''
+{{=}} ''[[Diplodia natalensis]]''
+''[[Botryosphaeria rhodina]]'' [teleomorph]
+|-
+|Dothiorella gummosis and rot
+||
+''[[Botryosphaeria ribis]]''
+''[[Dothiorella gregaria]]'' [anamorph]
+|-
+|Dry root rot complex
+||
+''[[Nectria haematococca]]''
+''[[Fusarium solani]]'' [anamorph]
+together with other wound-invading agents
+|-
+|Dry rot (fruit)
+||
+''[[Ashbya gossypii]]''
+''[[Nematospora coryli]]''
+|-
+|Fly speck
+||
+''[[Schizothyrium pomi]]''
+''[[Zygophiala jamaicensis]]'' [anamorph]
+|-
+|Fusarium rot (fruit)
+||''[[Fusarium]]'' spp.
+|-
+|Fusarium wilt
+||
+''[[Fusarium oxysporum f.sp. citri]]''
+|-
+|Gray mold (fruit)
+||''[[Botrytis cinerea]]''
+|-
+|Greasy spot and greasy spot rind blotch
+||
+''[[Mycosphaerella citri]]''
+''[[Stenella citri-grisea]]'' [anamorph]
+|-
+|Green mold
+||''[[Penicillium digitatum]]''
+|-
+|Heart rot
+||
+''[[Ganoderma applanatum]]''
+''[[Ganoderma brownii]]''
+''[[Ganoderma lucidum]]''
+and other basidiomycetes
+|-
+|Hendersonula branch wilt
+||''[[Hendersonula toruloidea]]''
+|-
+|Leaf spot
+||
+''[[Mycosphaerella horii]]''
+''[[Mycosphaerella lageniformis]]''
+|-
+|Mal secco
+||
+''[[Phoma tracheiphila]]''
+{{=}} ''[[Deuterophoma tracheiphila]]''
+|-
+|Mancha foliar de los citricos
+||''[[Alternaria limicola]]''
+|-
+|Melanose
+||''[[Diaporthe citri]]''
+''[[Phomopsis citri]]'' [anamorph]
+|-
+|Mucor fruit rot
+||
+''[[Mucor paronychia]]''
+''[[Mucor racemosus]]''
+|-
+|Mushroom root rot = shoestring root rot or oak root fungus
+||
+''[[Armillaria mellea]]''
+{{=}} ''[[Clitocybe tabescens]]''
+''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Phaeoramularia leaf and fruit spot
+||''[[Phaeoramularia angolensis]]''
+|-
+|Phymatotrichum root rot
+||''[[Phymatotrichopsis omnivora]]''
+|-
+|{{visible anchor|Phomopsis stem-end rot}}
+||
+''[[Phomopsis citri]]''
+''[[Diaporthe citri]]'' [teleomorph]
+|-
+|Phytophthora foot rot, gummosis and {{visible anchor|Phytophthora root rot|text=root rot}}
+||
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora hibernalis]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+{{=}} ''[[Phytophthora parasitica]]''
+''[[Phytophthora palmivora]]''
+''[[Phytophthora syringae]]''
+|-
+|Pink disease
+||
+''[[Erythricium salmonicolor]]''
+{{=}} ''[[Corticium salmonicolor]]''
+''[[Necator decretus]]'' [anamorph]
+|-
+|Pink mold
+||''[[Gliocladium roseum]]''
+|-
+|Pleospora rot
+||
+''[[Pleospora herbarum]]''
+''[[Stemphylium herbarum]]'' [anamorph]
+|-
+|Poria root rot
+||
+''[[Oxyporus latemarginatus]]''
+{{=}} ''[[Poria latemarginata]]''
+|-
+|Post bloom fruit drop
+||''[[Colletotrichum acutatum]]''
+|-
+|Powdery mildew
+||
+''[[Oidium tingitaninum]]''
+{{=}} ''[[Acrosporium tingitaninum]]''
+|-
+|Rhizopus rot
+||''[[Rhizopus stolonifer]]''
+|-
+|Rio Grande gummosis
+||
+Possibly ''[[Lasiodiplodia theobromae]]''
+''[[Hendersonula toruloidea]]''
+and other unknown agents
+|-
+|Rootlet rot
+||
+''[[Pythium rostratum]]''
+''[[Pythium ultimum]]''
+|-
+|Rosellinia root rot
+||''[[Rosellinia]]'' sp.
+|-
+|Scab
+||
+''[[Elsinoë fawcettii]]''
+''[[Sphaceloma fawcettii]]'' [anamorph]
+|-
+|Sclerotinia twig blight, fruit rot and root rot
+||''[[Sclerotinia sclerotiorum]]''
+|-
+|Septoria spot
+||''[[Septoria citri]]''
+|-
+|Sooty blotch
+||''[[Gloeodes pomigena]]''
+|-
+|Sour rot
+||
+''[[Geotrichum citri-aurantii]]''
+''[[Galactomyces citri-aurantii]]'' [teleomorph]
+''[[Galactomyces candidum]]''
+''[[Galactomyces geotrichum]]'' [teleomorph]
+|-
+|Sweet orange scab
+||''[[Elsinoë australis]]''
+|-
+|Thread blight
+||
+''[[Corticium stevensii]]''
+''[[Pellicularia koleroga]]''
+|-
+|Trichoderma rot
+||
+''[[Trichoderma viride]]''
+''[[Hypocrea]]'' sp. [teleomorph]
+|-
+|Twig blight
+||''[[Rhytidhysteron rufulum]]''
+|-
+|Ustulina root rot
+||
+''[[Ustulina deusta]]''
+''[[Nodulisporium]]'' sp. [anamorph]
+|-
+|Whisker mold
+||
+''[[Penicillium ulaiense]]''
+|-
+|White root rot
+||
+''[[Rosellinia]]'' sp.
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+''[[Rosellinia subiculata]]''
+|-
+|}
+
+==Nematodes, parasitic==
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Citrus slump nematode
+||
+''[[Pratylenchus coffeae]]''
+|-
+|Dagger nematode
+||
+''[[Xiphinema]]'' spp.
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus coffeae]]''
+''[[Pratylenchus vulnus]]''
+|-
+|Needle nematode
+||
+''[[Longidorus]]'' spp.
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne]]'' spp.
+|-
+|Sheath nematode
+||
+''[[Hemicycliophora]]'' spp.
+''[[Hemicycliophora arenaria]]''
+|-
+|Slow decline (citrus nematode)
+||
+''[[Tylenchulus semipenetrans]]''
+|-
+|Spreading decline (burrowing nematode)
+||
+''[[Radopholus similis]]''
+|-
+|Sting nematode
+||
+''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root nematode
+||
+''[[Paratrichodorus]]'' spp.
+|-
+|Stunt nematode
+||
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+==Viral diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Citrus mosaic
+||[[Satsuma dwarf-related virus]]
+|-
+|Bud union crease
+||Virus for some combinations, otherwise genetic or unknown
+|-
+|Citrus leaf rugose
+||genus [[Ilarvirus]], [[Citrus leaf rugose virus]] (CLRV)
+|-
+|Citrus yellow mosaic
+||genus [[Badnavirus]]
+|-
+|Crinkly leaf
+||[[Crinkly leaf virus]] (strain of [[Citrus variegation virus]])
+|-
+|Infectious variegation
+||genus [[Ilarvirus]], [[Citrus variegation virus]] (CVV)
+|-
+|Navel infectious mottling
+||[[Satsuma dwarf-related virus]]
+|-
+|Psorosis
+||[[Citrus psorosis virus]] (CPsV)
+|-
+|Satsuma dwarf
+||[[Satsuma dwarf virus]] (SDV)
+|-
+|Tatter leaf = citrange stunt
+||genus [[Capillovirus]], [[Citrus tatter leaf virus]] (probably a closely related strain of [[Apple stem grooving virus]] rather than a distinct virus
+|-
+|Tristeza = decline and stem pitting, seedling yellows
+||genus [[Closterovirus]], [[Citrus tristeza virus]] (CTV)
+|-
+|Citrus Leprosis Virus type I & II
+|}
+
+==Viroids and graft-transmissible pathogens [GTP]==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viroids and graft-transmissible pathogens [GTP]'''
+|-
+|Algerian navel orange virus
+||GTP
+|-
+|Blight = young tree decline, rough lemon decline
+||GTP
+|-
+|Blind pocket
+||GTP
+|-
+|Cachexia
+||Citrus cachexia viroid (Hostuviroid)
+|-
+|Chlorotic dwarf
+||White-fly transmitted GTP
+|-
+|Citrus dwarfing
+||Various viroids
+|-
+|Citrus vein enation (CVEV) = woody gall
+||GTP (possible luteovirus)
+|-
+|Citrus yellow mottle
+||GTP
+|-
+|Citrus yellow ringspot
+||GTP
+|-
+|Concave gum
+||GTP
+|-
+|Cristacortis
+||GTP
+|-
+|Exocortis
+||[[Citrus exocortis viroid]] (CEVd) [[Pospiviroidae]]
+|-
+|Fatal yellows
+||GTP
+|-
+|Gummy bark
+||GTP, possible viroid
+|-
+|Gum pocket and gummy pittings
+||GTP, possible viroid
+|-
+|Impietratura
+||GTP
+|-
+|Indian citrus ringspot
+||GTP
+|-
+|Leaf curl
+||GTP
+|-
+|Leathery leaf
+||GTP
+|-
+|Leprosis
+||GTP associated with Brevipalpus spp. mites
+|-
+|Measles
+||GTP
+|-
+|Milam stem-pitting
+||GTP
+|-
+|Multiple sprouting disease
+||GTP
+|-
+|Nagami kumquat disease
+||GTP
+|-
+|Ringspot diseases
+||Various GTPs
+|-
+|Xyloporosis = cachexia
+||Citrus cachexia viroid (Hostuviroid)
+|-
+|Yellow vein
+||GTP
+|-
+|Yellow vein clearing of lemon
+||GTP
+|-
+|}
+
+== Phytoplasmal and spiroplasmal diseases ==
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal and spiroplasmal diseases'''
+|-
+|Australian citrus dieback
+||''Unknown procaryote?''
+|-
+|[[Citrus stubborn disease|Stubborn]]
+||''[[Spiroplasma citri]]'' (spread by leafhoppers)
+|-
+|Witches’ broom of lime
+||[[Phytoplasma]]
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Algal disease (algal spot)
+||''Cephaleuros virescens''
+|-
+|Amachamiento
+||Unknown
+|-
+|Blossom-end clearing
+||Physiological
+|-
+|Chilling injury
+||Cold temperatures
+|-
+|Citrus blight
+||Unknown - pathogen suspected
+|-
+|Creasing
+||Nutritional (?)
+|-
+|Crinkle scurf
+||Genetic
+|-
+|Granulation
+||Physiological
+|-
+|Lemon sieve-tube necrosis
+||Unknown, but hereditary
+|-
+|Lime blotch = wood pocket
+||Inherited chimeral agent
+|-
+|Membranous stain
+||Cold temperatures
+|-
+|Mesophyll collapse
+||Unknown
+|-
+|Oleocellosis
+||Physiological
+|-
+|Postharvest pitting
+||Physiological
+|-
+|Puffing
+||Physiological
+|-
+|Rind breakdown
+||Physiological
+|-
+|Rind staining
+||Physiological
+|-
+|Rind stipple of grapefruit
+||Environmental
+|-
+|Rumple of lemon fruit
+||Unknown
+|-
+|Shell bark complex
+||Unknown - (viroid?)
+|-
+|Sooty mold (superficial, not pathogenic)
+||''Capnodium''
+''C. citricola''
+''Capnodium'' sp.
+|-
+|Stem-end rind breakdown
+||Physiological
+|-
+|Stylar-end breakdown of Tahiti lime
+||Physiological
+|-
+|Stylar-end rind breakdown
+||Physiological
+|-
+|Stylar-end rot
+||Physiological
+|-
+|Sunburn
+||Excessive heat and light
+|-
+|Tangerine dieback
+||Unknown
+|-
+|Water spot
+||Physiological
+|-
+|Woody galls on stems
+||Bruchophagus fellis (Citrus Gall Wasp)
+|-
+|Zebra skin
+||Physiological
+|-
+|}
+
+==References==
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Citrus.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{Citrus}}
+
+[[Category:Citrus diseases|*]]
+[[Category:Lists of plant diseases|Citrus]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wiki-List_of_potato_diseases.json b/apps/web/scripts/.scraper-cache/wiki-List_of_potato_diseases.json
new file mode 100644
index 0000000..1115c0f
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wiki-List_of_potato_diseases.json
@@ -0,0 +1,368 @@
+{{Short description|Listicle of diseases and disorders in potatoes}}
+This is a '''list of diseases and disorders''' found in '''[[potato]]es'''.
+
+==Bacterial diseases==
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Bacterial Diseases'''
+|-
+|Bacterial wilt = brown rot||
+''[[Ralstonia solanacearum]]''
+:{{=}} ''Pseudomonas solanacearum''
+|-
+|align='top'|[[Blackleg (potatoes)|Blackleg]] and bacterial soft rot||
+[[Pectobacterium carotovorum subsp. atrosepticum|''Pectobacterium carotovorum'' subsp. ''atrosepticum'']]
+:{{=}} ''Erwinia carotovora'' subsp. ''atroseptica''
+[[Pectobacterium carotovorum subsp. carotovorum|''P. c.'' subsp. ''carotovorum'']]
+:{{=}} ''E. c.'' subsp.
+''carotovora''
+''[[Pectobacterium chrysanthemi|P. chrysanthemi]]''
+:{{=}} ''E. chrysanthemi''
+''[[Dickeya solani]]'' [{{cite web
+ |title = Major new disease threat to potatoes
+ |url = http://www.farmersguardian.com/home/arable/major-new-disease-threat-to-potatoes/33800.article
+ |author = William Surman
+ |date = 19 August 2010
+ |publisher = Farmers Guardian / UBM Information Ltd.
+ |accessdate = 26 July 2011
+ |url-status = dead
+ |archiveurl = https://web.archive.org/web/20120318022321/http://www.farmersguardian.com/home/arable/major-new-disease-threat-to-potatoes/33800.article
+ |archivedate = 18 March 2012
+}}]
+|-
+|Pink eye|| ''[[Pseudomonas fluorescens]]''
+|-
+|Ring rot||
+[[Clavibacter michiganensis subsp. sepedonicus|''Clavibacter michiganensis'' subsp. ''sepedonicus'']]
+:{{=}} ''Corynebacterium sepedonicum''
+|-
+|[[Common scab]]||
+''[[Streptomyces scabiei]]''
+:{{=}} ''S. scabies''
+''[[Streptomyces acidiscabies|S. acidiscabies]]''
+''[[Streptomyces turgidiscabies|S. turgidiscabies]]''
+|-
+|[[Zebra chip]] = [[Psyllid yellows]]?||
+[[Candidatus Liberibacter solanacearum|''Candidatus'' Liberibacter solanacearum]]
+|}
+
+==Fungal diseases==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Fungal diseases'''
+|-
+|Black dot||
+''[[Colletotrichum coccodes]]''
+:{{=}} ''Colletotrichum atramentarium''
+|-
+|Brown spot and Black pit||
+''[[Alternaria alternata]]''
+:{{=}} ''Alternaria tenuis''
+|-
+|Cercospora leaf blotch||
+''[[Mycovellosiella concors]]''
+:{{=}} ''Cercospora concors''
+''[[Cercospora solani|C. solani]]''
+''[[Cercospora solani-tuberosi|C. solani-tuberosi]]''
+|-
+|Charcoal rot||
+''[[Macrophomina phaseolina]]''
+:{{=}} ''Sclerotium bataticola]''
+|-
+|Choanephora blight||
+''[[Choanephora cucurbitarum]]''
+|-
+|Common rust||
+''[[Puccinia pittieriana]]''
+|-
+|Deforming rust||
+''[[Aecidium cantensis]]''
+|-
+|Early blight ||
+''[[Alternaria solani]]''
+|-
+|[[Fusarium dry rot]]
+||''[[Fusarium]]'' spp.
+''[[Gibberella pulicaris]]''
+:{{=}} ''F. solani''
+Other spp. include:
+''[[Fusarium avenaceum|F. avenaceum]]''
+''[[Fusarium oxysporum|F. oxysporum]]''
+''[[Fusarium culmorum|F. culmorum]]''
+Less common spp. include:
+''[[Fusarium acuminatum|F. acuminatum]]''
+''[[Fusarium equiseti|F. equiseti]]''
+''[[Fusarium crookwellense|F. crookwellense]]''
+|-
+|[[Fusarium wilt]]
+||''[[Fusarium]] spp.''
+''[[Fusarium avenaceum|F. avenaceum]]''
+''[[Fusarium oxysporum|F. oxysporum]]''
+[[Fusarium solani f.sp. eumartii|''F. solani'' f. sp. ''eumartii'']]
+|-
+|Gangrene ||
+[[Phoma solanicola f. foveata|''Phoma solanicola'' f. ''foveata'']]
+''[[Phoma foveata|Ph. foveata]]''
+:{{=}} ''Ph. exigua var. foveata''
+:{{=}} ''Ph. e. f. sp. foveata''
+[[Phoma exigua var. exigua|''Ph. e.'' var. ''exigua'']]
+|-
+|Gray mold ||
+''[[Botrytis cinerea]]''
+:''Botryotinia fuckeliana'' [teleomorph]
+|-
+|Phoma leaf spot ||
+[[Phoma andigena var. andina|''Ph. andigena'' var. ''andina'']]
+|-
+|[[Powdery mildew]] ||
+''[[Erysiphe cichoracearum]]''
+|-
+|Rhizoctonia canker and black scurf ||
+''[[Rhizoctonia solani]]''
+|-
+|Rosellinia black rot||
+''[[Rosellinia]]'' sp.{{ Which | date = March 2023 }}
+:''Dematophora'' sp. [anamorph]
+|-
+|Septoria leaf spot ||
+[[Septoria lycopersici var. malagutii|''S. lycopersici'' var. ''malagutii'']]
+|-
+|Silver scurf||
+''[[Helminthosporium solani]]''
+|-
+|Skin spot ||
+''[[Polyscytalum pustulans]]''
+|-
+|Stem rot ([[southern blight]]) ||
+''[[Athelia rolfsii]]''
+|-
+|Thecaphora smut||
+''[[Angiosorus solani]]''
+:{{=}} ''Thecaphora solani''
+|-
+|Ulocladium blight||
+''[[Ulocladium atrum]]''
+|-
+|[[Verticillium wilt]]||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae|V. dahliae]]''
+|-
+|Wart||
+''[[Synchytrium endobioticum]]''
+|-
+|White mold (=||
+''[[Sclerotinia sclerotiorum]]''
+|-
+|}
+
+==Protistan diseases==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Protistan diseases'''
+|-
+|[[Late blight]] (oomycete)||
+''[[Phytophthora infestans]]''[{{Citation|title=Potato and tomato late blight caused by Phytophthora infestans: An overview of pathology and resistance breeding |last=Nowicki|first=Marcin|date=17 August 2011|publisher=Plant Disease, ASP|doi= 10.1094/PDIS-05-11-0458|display-authors=etal|pmid=30731850|volume=96|issue = 1|journal=[[Plant Dis]]|pages=4–17|doi-access=}}]
+|-
+|Leak ([[oomycete]])||
+''[[Pythium]]'' spp.
+''[[Pythium ultimum var. ultimum]]''
+{{=}} ''[[Pythium debaryanum]]''
+''[[Pythium aphanidermatum]]''
+''[[Pythium deliense]]''
+|-
+|Pink rot ([[oomycete]])||
+''[[Phytophthora]]'' spp.
+''[[Phytophthora cryptogea]]''
+''[[Phytophthora drechsleri]]''
+''[[Phytophthora erythroseptica]]''
+''[[Phytophthora megasperma]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+|-
+|Powdery scab ([[Rhizaria]]) ||
+''[[Spongospora subterranea f.sp. subterranea]]''
+|-
+|}
+
+==Viral and viroid diseases==
+{{main|Viral diseases of potato}}
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Viral and viroid diseases'''
+|-
+|Alfalfa mosaic virus||genus [[Alfamovirus]], [[Alfalfa mosaic virus|Alfalfa mosaic virus (AMV)]]
+|-
+|Andean potato latent virus||genus [[Tymovirus]], [[Andean potato latent virus]] (APLV)
+|-
+|Andean potato mottle virus||genus [[Comovirus]], [[Andean potato mottle virus]] (APMV)
+|-
+|Arracacha virus B - Oca strain ||genus [[Nepovirus]], [[Arracacha virus B]] Oca strain (AVB-O)
+|-
+|Beet curly top virus||genus [[Curtovirus]], [[Beet curly top virus]] (BCTV)
+|-
+|Cucumber mosaic virus||genus [[Cucumovirus]], [[Cucumber mosaic virus]] (CMV)
+|-
+|Eggplant mottle dwarf virus||genus [[Rhabdovirus]], [[Eggplant mottle dwarf virus]] (EMDV)
+|-
+|Potato aucuba mosaic virus||genus [[Potexvirus]], [[Potato aucuba mosaic virus]] (PAMV)
+|-
+|Potato black ringspot virus||genus [[Nepovirus]], [[Potato black ringspot virus]] (PBRSV)
+|-
+|Potato deforming mosaic virus||genus [[Geminiviridae]] [[Potato deforming mosaic virus]] subgroup III, (PDMV)
+|-
+|Potato latent virus||genus [[Carlavirus]], [[Potato latent virus]] (PLV)
+|-
+|Potato leafroll virus||genus [[Luteovirus]], [[Potato leafroll virus]] (PLRV)
+|-
+|Potato mop-top virus ([[spraing]] of tubers)||genus [[Furovirus]], [[Potato mop-top virus]] (PMTV)
+|-
+|Potato rugose mosaic||genus [[Potyvirus]], [[Potato virus Y]] (PVY, strains O, N and C)
+|-
+|Potato stem mottle ([[spraing]] of tubers)||genus [[Tobravirus]], [[Tobacco rattle virus]] (TRV)
+|-
+|Potato spindle tuber||[[Potato spindle tuber viroid]] (PSTVd)
+|-
+|Potato yellow dwarf virus||genus [[Nucleorhabdovirus]], [[Potato yellow dwarf virus]] (PYDV)
+|-
+|Potato yellow mosaic virus ||genus [[Geminiviridae]], [[Potato yellow mosaic virus]] (PYMV); subgroup III
+|-
+|Potato yellow vein virus||[[Potato yellow vein virus]] (PYVV)
+|-
+|Potato yellowing virus||genus [[Alfamovirus]], [[Potato yellowing virus]] (PYV)
+|-
+|Potato virus A||genus [[Potyvirus]], [[Potato virus A]] (PVA)
+|-
+|Potato virus M||genus [[Carlavirus]], [[Potato virus M]] (PVM)
+|-
+|Potato virus S||genus [[Carlavirus]], [[Potato virus S]] (PVS)
+|-
+|Potato virus H||genus [[Carlavirus]], [[Potato virus H]] (PVH)
+|-
+|Potato virus T||genus [[Trichovirus]], [[Potato virus T]]
+|-
+|Potato virus U||genus [[Nepovirus]], [[Potato virus U]] (PVU)
+|-
+|Potato virus V||genus [[Potyvirus]], [[Potato virus V]] (PVV)
+|-
+|Potato virus X||genus [[Potexvirus]], [[Potato virus X]] (PVX)
+|-
+|Potato virus Y||genus [[Potyvirus]], [[Potato virus Y]] (PVY)
+|-
+|Solanum apical leaf curling virus||[[Geminiviridae]], [[Solanum apical leaf curling virus]] (SALCV) subgroup III
+|-
+|Sowbane mosaic virus||genus [[Sobemovirus]], [[Sowbane mosaic virus]] (SoMV)
+|-
+|Tobacco mosaic virus||genus [[Tobamovirus]], [[Tobacco mosaic virus]] (TMV)
+|-
+|Tobacco necrosis virus||genus [[Necrovirus]], [[Tobacco necrosis virus]] (TNV)
+|-
+|Tobacco rattle virus||genus [[Tobravirus]], [[Tobacco rattle virus]] (TRV)
+|-
+|Tobacco streak virus||genus [[Ilarvirus]], [[Tobacco streak virus]] (TSV)
+|-
+|Tomato black ring virus||genus [[Nepovirus]], [[Tomato black ring virus]] (ToBRV)
+|-
+|Tomato mosaic virus||genus [[Tobamovirus]], [[Tomato mosaic virus]] (ToMV)
+|-
+|Tomato spotted wilt virus||genus [[Tospovirus]], [[Tomato spotted wilt virus]] (TSWV)
+|-
+|Tomato yellow mosaic virus||genus [[Geminiviridae]], [[Tomato yellow mosaic virus]] (ToYMV) subgroup III
+|-
+|Wild potato mosaic virus||genus [[Potyvirus]], [[Wild potato mosaic virus]] (WPMV)
+|-
+|}
+
+==Nematode parasitic==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Nematode parasitic'''
+|-
+|[[Potato cyst nematode]]
+||
+''[[Globodera rostochiensis]]''
+''[[Globodera pallida]]''
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus penetrans]]''
+Other species include:
+''[[Pratylenchus scribneri]]''
+''[[Pratylenchus neglectus]]''
+''[[Pratylenchus thornei]]''
+''[[Pratylenchus crenatus]]''
+''[[Pratylenchus andinus]]''
+''[[Pratylenchus vulnus]]''
+''[[Pratylenchus coffeae]]''
+|-
+|Potato rot nematode
+||
+''[[Ditylenchus destructor]]''
+|-
+|Root knot nematode
+||
+''[[Meloidogyne]]'' spp.
+''[[Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+''[[Meloidogyne chitwoodi]]''
+|-
+|Sting nematode
+||
+''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root nematode
+||
+''[[Paratrichodorus]] spp.''
+''[[Trichodorus]]'' spp.
+|-
+|}
+
+==Phytoplasmal diseases==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Phytoplasmal diseases'''
+|-
+|Aster yellows||Aster yellows group of phytoplasmas
+|-
+|Witches'-broom||Witches’ broom phytoplasma
+|-
+|BLTVA||The beet leafhopper-transmitted virescence agent
+|}
+
+==Miscellaneous diseases and disorders==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Aerial tubers||Phytoplasma infection or anything that constricts the stem, including but not limited to Rhizoctonia canker, heat necrosis, chemical injury, mechanical injury, wind injury
+|-
+|Air pollution injury||Photochemical oxidants (primarily ozone), sulfur oxides
+|-
+|Black heart||Oxygen deficiency of internal tuber tissue
+|-
+|Blackspot bruise||Bruising, pressure contact
+|-
+|Elephant hide||Roughening of tuber skin due to physiological or environmental causes
+|-
+|Hollow heart||Excessively rapid tuber enlargement
+|-
+|Internal brown spot = heat necrosis ||Oxygen deficiency of tuber accompanying high soil temperature
+|-
+|Jelly end rot||Carbohydrate translocation due to second growth
+|-
+|Physiological leaf roll||Response to adverse environment
+|-
+|Psyllid yellows||Toxic saliva of the potato (tomato) psyllid, ''Paratrioza cockerelli''
+|-
+|Shatter bruise ||Mechanical damage to tuber
+|-
+|Skinning ||Mechanical damage to tuber
+|-
+|Stem-end browning ||Exact cause(s) unknown, chemical injury, viruses or other pathogens.
+|-
+|}
+
+==References==
+
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Potato.aspx Common Names of Diseases, The American Phytopathological Society]
+* [https://vegetablemdonline.ppath.cornell.edu/factsheets/Potato_List.htm Potato Diseases (Fact Sheets and Information Bulletins), The Cornell Plant Pathology Vegetable Disease Web Page]
+
+==External links==
+* {{cite web|last1=Sparks|first1=Adam|last2=Kennelly|first2=Megan|title=Common Scab of Potato|url=http://krex.k-state.edu/dspace/bitstream/handle/2097/21718/KSUL0009KSREEPPUBSEP148a.pdf|publisher=Kansas State University Agricultural Experiment Station and Cooperative Extension Service|accessdate=2018-01-06|date=May 2008}}
+
+[[Category:Lists of plant diseases|Potato]]
+[[Category:Potato diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wiki-List_of_strawberry_diseases.json b/apps/web/scripts/.scraper-cache/wiki-List_of_strawberry_diseases.json
new file mode 100644
index 0000000..762b08c
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wiki-List_of_strawberry_diseases.json
@@ -0,0 +1,508 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[strawberry]] (''Fragaria × ananassa'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Angular leaf spot
+||''[[Xanthomonas fragariae]]''
+|-
+|Bacterial wilt
+||''[[Pseudomonas solanacearum]]''
+|-
+|Cauliflower disease (complex)
+||''[[Rhodococcus fascians]]'' = ''Corynebacterium fascians''
+|-
+|}
+
+==Oomycete diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Oomycete diseases'''
+|-
+|Downy mildew
+||''[[Peronospora potentillae]]'' {{=}} ''[[Peronospora fragariae]]''
+|-
+|}
+
+==Fungal diseases==
+[[Image:Mycosphaerella fragariae.jpg|right|thumb|older stadium of ''[[Mycosphaerella fragariae]]'' on strawberry]]
+[[Image:Aardbei Lambada vruchtrot Botrytis cinerea.jpg|right|thumb|''[[Botrytis cinerea]]'' on strawberry]]
+[[Image:Strawberry_powdery_mildew.jpg|thumbnail|Powdery mildew on strawberry]]
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria fruit rot
+||
+''[[Alternaria tenuissima]]''
+|-
+|Anther and pistil blight
+||
+''[[Rhizoctonia fragariae]]''
+''[[Ceratobasidium]]'' sp. [teleomorph]
+|-
+|Anthracnose and anthracnose fruit rot and black spot[{{Cite journal|last1=Dowling|first1=Madeline|last2=Peres|first2=Natalia|last3=Villani|first3=Sara|last4=Schnabel|first4=Guido|date=2020|title=Managing Colletotrichum on Fruit Crops: A "Complex" Challenge|url=https://apsjournals.apsnet.org/doi/10.1094/PDIS-11-19-2378-FE|journal=Plant Disease|language=en|volume=104|issue=9|pages=2301–2316|doi=10.1094/PDIS-11-19-2378-FE|pmid=32689886 |s2cid=219479598 |issn=0191-2917|doi-access=free}}]
+||
+''[[Colletotrichum acutatum]]'' [[species complex]][{{Cite journal|last1=Damm|first1=U.|last2=Cannon|first2=P. F.|last3=Woudenberg|first3=J. H. C.|last4=Crous|first4=P. W.|date=2012|title=The Colletotrichum acutatum species complex|journal=Studies in Mycology|series=complex species or species complexes?|language=en|volume=73|pages=37–113|doi=10.3114/sim0010|issn=0166-0616|pmc=3458416|pmid=23136458}}]
+
+* ''[[Colletotrichum fioriniae|C. fioriniae]]''
+* ''C. nymphaeae''
+
+''[[Colletotrichum gloeosporioides]]'' [[species complex]][{{Cite journal|last1=Weir|first1=B. S.|last2=Johnston|first2=P. R.|last3=Damm|first3=U.|date=2012|title=The Colletotrichum gloeosporioides species complex|journal=Studies in Mycology|series=complex species or species complexes?|language=en|volume=73|pages=115–180|doi=10.3114/sim0011|issn=0166-0616|pmc=3458417|pmid=23136459}}]
+
+* ''[[Colletotrichum fragariae|C. fragariae]]''
+* ''C. fructicola''
+* ''C. siamense'' (syn. ''C. murrayae'')
+
+''[[Glomerella cingulata]]'' [teleomorph] (archaic) ''[[Gloeosporium]]'' spp. (archaic)
+|-
+|Armillaria crown and root rot (shoestring crown and root rot)
+||
+''[[Armillaria mellea]]''
+''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Black leaf spot
+||''[[Alternaria alternata f.sp. fragariae]]''
+''[[Colletotrichum gloeosporioides]]''
+{{=}} ''[[Colletotrichum fragariae]]''
+|-
+|Black root rot (disease complex)
+||
+''[[Rhizoctonia fragariae]]''
+''[[Ceratobasidium]]'' [teleomorph] sp.
+''[[Coniothyrium fuckelii]]''
+''[[Diapleella coniothyrium]]'' [teleomorph]
+{{=}} ''[[Leptosphaeria coniothyrium]]''
+''[[Hainesia lythri]]''
+''[[Discohainesia oenotherae]]'' [teleomorph]
+''[[Idriella lunata]]''
+''[[Pyrenochaeta]]'' sp.
+''[[Pythium]]'' spp.
+''[[Pythium ultimum]]''
+|-
+|Cercospora leaf spot
+||
+''[[Cercospora fragariae]]''
+''[[Cercospora vexans]]''
+|-
+|Charcoal rot
+||
+''[[Macrophomina phaseolina]]''
+{{=}} ''[[Botryodiplodia phaseoli]]''
+|-
+|Common leaf spot
+||
+''[[Mycosphaerella fragariae]]''
+''[[Ramularia brunnea]]'' [anamorph]
+|-
+|Coniothyrium diseases
+||
+''[[Coniothyrium fuckelii]]''
+''[[Coniella fragariae]]''
+{{=}} ''[[Coniothyrium fragariae]]''
+|-
+|Dematophora crown and root rot (white root rot)
+||
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+|-
+|Diplodina rot (leaf and stalk rot)
+||
+''[[Phoma lycopersici]]''
+{{=}} ''[[Diplodina lycopersici]]''
+''[[Didymella lycopersici]]'' [teleomorph]
+|-
+
+|Fruit rots (in addition to those appearing elsewhere in this listing)
+||
+''[[Aspergillus niger]]''
+''[[Cladosporium]]'' spp.
+''[[Mucor mucedo]]''
+''[[Mucor hiemalis]]''
+''[[Mucor hiemalis f. silvaticus]]''
+''[[Mucor piriformis]]''
+''[[Penicillium aurantiogriseum]]''
+{{=}} ''[[Penicillium cyclopium]]''
+''[[Penicillium expansum]]''
+''[[Penicillium glabrum]]''
+{{=}} ''[[Penicillium frequentans]]''
+''[[Penicillium purpurogenum]]''
+|-
+|Byssochlamys rot
+||
+''[[Byssochlamys fulva]]''
+''[[Paecilomyces fulvus]]'' [anamorph]
+|-
+|Brown cap
+||
+Foliar pathogens which attack cap-drying
+|-
+|Fruit blotch
+||
+''[[Fusarium sambucinum]]''
+''[[Gibberella pulicaris]]''[teleomorph]
+''[[Penicillium purpurogenum]]''
+''[[Peronospora potentillae]]''
+''[[Sphaeropsis malorum]]''
+''[[Botryosphaeria obtusa]]'' [teleomorph]
+{{=}} ''[[Physalospora obtusa]]''
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+{{=}} ''[[Corticium rolfsii]]''
+''[[Schizoparme straminea]]''
+''[[Coniella castaneicola]]'' [anamorph]
+{{=}} ''[[Pilidiella quercicola]]''
+|-
+|Gray mold leaf blight and dry crown rot
+||
+''[[Botrytis cinerea]]''
+''Botryotinia fuckeliana'' (teleomorph)
+|-
+|Hainesia leaf spot
+||
+''[[Hainesia lythri]]''
+|-
+|Hard brown rot
+||
+''[[Rhizoctonia solani]]''
+''[[Rhizoctonia solani|Thanatephorus cucumeris]]'' [teleomorph]
+''[[Macrophomina phaseolina]]''
+{{=}} ''[[Macrophomina phaseoli]]''
+{{=}} ''[[Rhizoctonia bataticola]]''
+|-
+|Leaf blotch
+||
+''[[Gnomonia comari]]''
+''[[Zythia fragariae]]'' [anamorph]
+''[[Gnomonia fragariae]]''
+|-
+|Leaf rust
+||
+''[[Phragmidium potentillae]]''
+{{=}} ''[[Frommea obtusa]]''
+|-
+|Leaf scorch
+||
+''[[Diplocarpon earlianum]]''
+''[[Marssonina fragariae]]'' [anamorph]
+{{=}} ''[[Marssonina potentillae]]''
+|-
+|Leather rot
+||
+''[[Phytophthora cactorum]]''
+''[[Phytophthora citricola]]''
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora nicotianae]]''
+{{=}} ''[[Phytophthora parasitica]]''
+|-
+|Lilac soft rot
+||
+''[[Pythium]]'' sp.
+|-
+|Pestalotia fruit rot
+||
+''[[Pestalotia laurocerasi]]''
+''[[Pestalotia longisetula]]''
+|-
+|Leaf blight
+||
+''[[Phomopsis obscurans]]''
+{{=}} ''[[Dendrophoma obscurans]]''
+''[[Neopestalotiopsis clavispora]]''{{cn|date=March 2023}}
+|-
+|Postharvest rots
+||
+''[[Botrytis cinerea]]''
+''[[Mucor mucedo]]''
+''[[Pichia membranifaciens]]''
+''[[Pichia subpelliculosa]]''
+{{=}} ''[[Hansenula subpelliculosa]]''
+''[[Saccharomyces cerevisiae]]''
+''[[Saccharomyces kluyveri]]''
+''[[Zygosaccharomyces bailii]]''
+{{=}} ''[[Saccharomyces bailii]]''
+''[[Zygotorulaspora florentina]]''
+{{=}} ''Saccharomyces florentinus'', ''Zygosaccharomyces florentinus''
+|-
+|Powdery mildew
+||
+''[[Podosphaera fragariae]]''
+unknown ''[[Podosphaera]]'' (Americas)
+|-
+|Phytophthora crown and root rot
+||
+''[[Phytophthora]]'' sp.
+''[[Phytophthora cactorum]]''
+''[[Phytophthora citricola]]''
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora megasperma]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+|-
+! colspan=2|Other root rots
+|-
+|Botrytis crown rot
+||
+''[[Botrytis cinerea]]''
+|-
+|Gray sterile fungus root rot
+||
+''[[Phoma terrestris]]''
+{{=}} ''[[Pyrenochaeta terrestris]]''
+|-
+|Idriella root rot
+||
+''[[Idriella lunata]]''
+|-
+|Macrophomina root rot
+||
+''[[Macrophomina phaseolina]]''
+|-
+|Olpidium root infection
+||
+''[[Olpidium brassicae]]''
+|-
+|Synchytrium root gall
+||
+''[[Synchytrium fragariae]]''
+|-
+|Purple leaf spot
+||
+''[[Mycosphaerella louisianae]]''
+|-
+|Red stele
+||
+''[[Phytophthora fragariae]]''
+|-
+|Rhizoctonia bud and crown rot, leaf blight, web blight, fruit rot
+||
+''[[Rhizoctonia solani]]''
+''[[Rhizoctonia fragariae]]''
+|-
+|Rhizopus rot (leak)
+||
+''[[Rhizopus stolonifer]]''
+|-
+|Sclerotinia crown and fruit rot
+||
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Septoria hard rot and leaf spot
+||
+''[[Septoria fragariae]]''
+{{=}} ''[[Septogloeum potentillae]]''
+''[[Septoria aciculosa]]''
+''[[Septoria fragariaecola]]''
+|-
+|Stunt (Pythium root rot)
+||
+''[[Pythium ultimum]]''
+''[[Pythium]]'' spp.
+''[[Pythium acanthicum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium dissotocum]]''
+''[[Pythium hypogynum]]''
+''[[Pythium irregulare]]''
+''[[Pythium middletonii]]''
+{{=}} ''[[Pythium proliferum]]''
+''[[Pythium myriotylum]]''
+''[[Pythium perniciosum]]''
+''[[Pythium rostratum]]''
+''[[Pythium sylvaticum]]''
+|-
+|Southern blight (Sclerotium rot)
+||
+''[[Sclerotium rolfsii]]''
+|-
+|Stem-end rot
+||
+''[[Gnomonia comari]]''
+|-
+|Tan-brown rot (of fruit)
+||Pilidium lythri (previously known as Pilidium concavum)
+''[[Discohainesia oenotherae]]''
+''[[Hainesia lythri]]''
+{{=}} ''[[Patellina fragariae]]'' [anamorph]
+|-
+|Verticillium wilt
+||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae]]''
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Pith necrosis and crown death
+||Unknown
+|-
+|Rapid death
+||Unknown, resembles ''P. cactorum''
+|-
+|Slime molds
+||''[[Diachea leucopodia]]''
+''Physarum cinereum''
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Bulb and stem
+||
+''[[Ditylenchus dipsaci]]''
+|-
+|Dagger
+||
+''[[Xiphenema]]'' spp.
+|-
+|Dagger, American
+||
+''[[Xiphenema americanum]]''
+|-
+|Lesion
+||
+''[[Pratylenchus coffeae]]''
+''[[Pratylenchus penetrans]]''
+''[[Pratylenchus pratensis]]''
+''[[Pratylenchus scribneri]]''
+|-
+|Root-knot
+||
+''[[Meloidogyne]]'' spp.
+''[[Meloidogyne hapla]]''
+|-
+|Spring dwarf (crimp) or [[foliar nematodes]]
+||
+''[[Aphelenchoides fragariae]]''
+''[[Aphelenchoides ritzemabosi]]''
+|-
+|Sting
+||
+''[[Belonolaimus longicaudatus]]''
+''[[Belonolaimus gracilis]]''
+|-
+|Summer dwarf (crimp)
+||
+''[[Aphelenchoides besseyi]]''
+|-
+|}
+
+==Phytoplasma, Virus and virus-like diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Virus and virus-like diseases'''
+|-
+! colspan=2|Aphid-transmitted
+|-
+|Strawberry chlorotic fleck
+||Strawberry chlorotic fleck (graft-transmissible agent of unknown relationship)
+|-
+|Strawberry crinkle
+||[[Strawberry crinkle virus]] (SCV) (cytoplasmic rhabdovirus)
+|-
+|Strawberry latent C virus in Fragaria
+||Strawberry latent C virus (SLCV) (nuclear rhabdovirus)
+|-
+|Strawberry mild yellow-edge
+||[[Strawberry mild yellow-edge virus]] (SMYEV) (plus an unnamed potexvirus)
+|-
+|Strawberry mottle
+||[[Strawberry mottle virus]] (SMV) (Relationship unknown)
+|-
+|Strawberry pseudo mild yellow-edge
+||[[Strawberry pseudo mild yellow-edge virus]] (SPMYEV) (carlavirus)
+|-
+|Strawberry vein banding
+||[[Strawberry vein banding virus]] (SVBV) (caulimovirus)
+|-
+! colspan=2|Leafhopper-transmitted phytoplasma and rickettsia-like agents (vectors known or probable):
+|-
+|Aster yellows
+||[[Aster yellows]] phytoplasma
+|-
+|Maladie du bord jaune
+||[[phytoplasma]]
+|-
+|Strawberry green petal
+||Strawberry green petal phytoplasma
+|-
+|Strawberry lethal decline
+||Strawberry lethal decline phytoplasma
+|-
+|Strawberry multiplier plant
+||Strawberry Multiplier MLO
+|-
+|Strawberry mycoplasma yellows disease
+||Strawberry yellows phytoplasma
+|-
+|Strawberry rickettsia yellows disease
+||Strawberry yellows rickettsia-like organism (SYRLO)
+|-
+|Strawberry witches'-broom
+||Strawberry witches'-broom MLO
+|-
+! colspan=2|Nematode-transmitted
+|-
+|Arabis mosaic virus
+||[[Arabis mosaic virus]] (ArMV) (nepovirus)
+|-
+|Raspberry ringspot virus
+||[[Raspberry ringspot virus]] (nepovirus)
+|-
+|Strawberry latent ringspot virus
+||[[Strawberry latent ringspot virus]] (SLRV) (nepovirus)
+|-
+|Tomato black ring virus
+||[[Tomato black ring virus]] (TomBRV) (nepovirus)
+|-
+|Tomato ringspot virus
+||[[Tomato ringspot virus]] (TomRSV) (nepovirus)
+|-
+! colspan=2|Fungus-transmitted
+|-
+|Tobacco necrosis virus in Fragaria vesca
+||[[Tobacco necrosis virus]] (TNV) (necrovirus)
+|-
+! colspan=2|Pollen-transmitted
+|-
+|Strawberry pallidosis
+||Strawberry pallidosis (graft- and pollen-transmissible agent of unknown relationship)
+|-
+! colspan=2|Thrips-transmitted
+|-
+|Strawberry necrotic shock
+||Tobacco streak virus, strawberry strain (TSV-SNS) ([[Ilarvirus]])
+|-
+! colspan="2" |Vectors unknown
+|-
+|Strawberry leafroll
+||Strawberry leafroll (graft-transmissible agent(s) of unknown relationship
+|-
+|Strawberry feather-leaf
+|Strawberry feather-leaf (graft-transmissible agent of unknown relationship
+|-
+! colspan="2" |Non-graft transmissible virus-like disease
+|-
+|Strawberry June yellows
+|Genetically transmitted disorder of unknown cause
+|-
+|}
+
+==See also==
+* [[List of strawberry topics]]
+
+==References==
+{{Reflist}}
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Strawberry.aspx Common Names of Diseases, The American Phytopathological Society]
+{{fragaria}}
+
+[[Category:Lists of plant diseases|Strawberry]]
+[[Category:Strawberry diseases|*]]
+[[Category:Strawberries|Diseases]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_alfalfa_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_alfalfa_diseases.json
new file mode 100644
index 0000000..78b7e51
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_alfalfa_diseases.json
@@ -0,0 +1,354 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[alfalfa]] (''Medicago sativa'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial leaf spot
+||''[[Xanthomonas campestris]]'' pv. ''alfalfae''
+|-
+|Bacterial sprout rot
+||''[[Erwinia chrysanthemi]]'' pv. ''chrysanthemi''
+|-
+|Bacterial stem blight
+||''[[Pseudomonas savastanoi]]'' pv. ''phaseolicola'' = ''P. medicaginis''
+|-
+|Bacterial wilt
+||''[[Clavibacter michiganensis]]'' subsp. ''insidiosus'' = ''Corynebacterium insidiosum''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|Crown and root rot complex
+||''[[Pseudomonas viridiflava]]''
+|-
+|Dwarf
+||''[[Xylella fastidiosa]]''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Acrocalymma root and crown rot
+||
+''[[Acrocalymma medicaginis]]''
+''[[Massarina walkeri]]'' [teleomorph]
+|-
+|Anthracnose
+||''[[Colletotrichum trifolii]]''
+|-
+|Aphanomyces root rot
+||''[[Aphanomyces euteiches]]''
+|-
+|Black patch
+||''[[Rhizoctonia leguminicola]]''
+|-
+|Black root rot
+||
+''[[Thielaviopsis basicola]]''
+''[[Chalara elegans]]'' [synanamorph]
+|-
+|Blossom blight
+||
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Brown root rot
+||''[[Phoma sclerotioides]]'' {{=}} ''[[Plenodomus meliloti]]''
+|-
+|Crown and root rot complex
+||
+''[[Fusarium acuminatum]]''
+''[[Gibberella acuminata]]'' [teleomorph]
+''[[Fusarium avenaceum]]''
+''[[Gibberella avenacea]]'' [teleomorph]
+''[[Fusarium equiseti]]''
+''[[Fusarium oxysporum]]''
+''[[Fusarium sambucinum]]''
+''[[Fusarium solani]]''
+''[[Nectria haematococca]]'' [teleomorph]
+''[[Fusarium]]'' spp.
+''[[Phoma medicaginis]]''
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+''[[Thielaviopsis basicola]]''
+''[[Chalara elegans]]'' [synanamorph]
+|-
+|Charcoal rot
+||''[[Macrophomina phaseolina]]''
+|-
+|Common leaf spot
+||''[[Pseudopeziza medicaginis]]''
+|-
+|Corky root rot
+||''[[Xylaria]]'' sp.
+|-
+|Crown wart
+||''[[Physoderma alfalfae]]''
+{{=}} ''[[Urophlyctis alfalfae]]''
+|-
+|Cylindrocarpon root rot
+||
+''[[Cylindrocarpon magnusianum]]''
+{{=}} ''[[Cylindrocarpon ehrenbergii]]''
+''[[Nectria ramulariae]]'' [teleomorph]
+|-
+|Cylindrocladium root and crown rot
+||''[[Cylindrocladium crotalariae]]''
+''[[Calonectria crotalariae]]'' [teleomorph]
+|-
+|Damping-off
+||
+''[[Fusarium acuminatum]]''
+''[[Gibberella acuminata]]'' [teleomorph]
+''[[Mycoleptodiscus terrestris]]''
+''[[Phytophthora medicaginis]]''
+''[[Phytophthora megasperma f.sp. medicaginis]]''
+''[[Pythium]]'' spp.
+''[[Pythium debaryanum]]''
+''[[Pythium irregulare]]''
+''[[Pythium splendens]]''
+''[[Pythium ultimum]]''
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Downy mildew
+||''[[Peronospora trifoliorum]]''
+|-
+|Fusarium wilt
+||''[[Fusarium oxysporum f.sp. medicaginis]]''
+|-
+|Lepto leaf spot
+||''[[Leptosphaerulina trifolii]]''
+|-
+|Marasmius root rot
+||''[[Marasmius]]'' sp.
+|-
+|Mycoleptodiscus crown and root rot
+||''[[Mycoleptodiscus terrestris]]''
+|-
+|Myrothecium root rot
+||
+''[[Myrothecium roridum]]''
+''[[Myrothecium verrucaria]]''
+|-
+|Phymatotrichum root rot = cotton root rot = Texas root rot
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+|Phytophthora root rot
+||
+''[[Phytophthora medicaginis]]''
+''[[Phytophthora megasperma f.sp. medicaginis]]''
+|-
+|Powdery mildew
+||
+''[[Erysiphe pisi]]''
+''[[Leveillula taurica]]''
+|-
+|Rhizoctonia root rot and stem blight
+||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Rhizopus sprout rot
+||''[[Rhizopus stolonifer]]''
+|-
+|Rust
+||
+''[[Uromyces striatus]]''
+{{=}} ''[[Uromyces medicaginis]]''
+{{=}} ''[[Uromyces oblongus]]''
+{{=}} ''[[Uromyces striatus var. medicaginis]]''
+|-
+|Sclerotinia crown and stem rot
+||
+''[[Sclerotinia trifoliorum]]''
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Southern blight
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|[[Spring black stem]] and leaf spot
+||''[[Phoma medicaginis]]''
+|-
+|Stagonospora leaf spot and root rot
+||
+''[[Stagonospora meliloti]]''
+''[[Phoma meliloti]]'' [synanamorph]
+''[[Leptosphaeria pratensis]]'' [teleomorph]
+|-
+|Stemphylium leaf spot
+||
+''[[Pleospora]]'' spp.
+''[[Stemphylium alfalfae]]''
+''[[Pleospora alfalfae]]''[teleomorph]
+''[[Stemphylium botryosum]]''
+''[[Pleospora tarda]]'' [teleomorph]
+''[[Stemphylium globuliferum]]''
+''[[Stemphylium herbarum]]''
+''[[Pleospora herbarum]]'' [teleomorph]
+''[[Stemphylium vesicarium]]'' species complex
+|-
+|Summer black stem and leaf spot
+||''[[Cercospora medicaginis]]''
+|-
+|Verticillium wilt
+||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae]]''
+|-
+|Violet root rot
+||
+''[[Helicobasidium brebissonii]]''
+''[[Rhizoctonia crocorum]]''[anamorph]
+|-
+|Winter crown rot = Coprinus [[snow mold]]
+||''[[Coprinus psychromorbidus]]''
+|-
+|Yellow leaf blotch
+||
+''[[Leptotrochila medicaginis]]''
+{{=}} ''[[Pyrenopeziza medicaginis]]''
+{{=}} ''[[Pseudopeziza jonesii]]''
+''[[Sporonema phacidioides]]'' [anamorph]
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Bulb and stem nematode
+||
+''[[Ditylenchus dipsaci]]''
+|-
+|Chrysanthemum foliar nematode
+||
+''[[Aphelenchoides ritzemabosi]]''
+|-
+|Cyst nematode
+||
+''[[Heterodera trifolii]]''
+|-
+|Dagger nematode
+||
+''[[Xiphinema americanum]]''
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus neglectus]]''
+''[[Pratylenchus penetrans]]''
+|-
+|Needle nematode
+||''[[Longidorus]]'' spp.
+|-
+|Pin nematode
+||
+''[[Paratylenchus]]'' spp.
+''[[Paratylenchus hamatus]]''
+|-
+|Reniform nematode
+||
+[[Rotylenchulus reniformis|''Rotylenchulus'' spp.]]
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne]]'' spp.
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne chitwoodi]]''
+''[[Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+|-
+|Spiral nematode
+||
+''[[Helicotylenchus]]'' spp.
+|-
+|Stubby-root nematode
+||
+''[[Paratrichodorus]]'' spp.
+|-
+|Stunt nematode
+||
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+==Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Alfalfa enation
+||genus [[Rhabdovirus]], [[Alfalfa enation virus]] (AEV)
+|-
+|[[Alfalfa mosaic virus|Alfalfa mosaic]]
+||genus [[Alfamovirus]], [[Alfalfa mosaic virus|Alfalfa mosaic virus (AMV)]]
+|-
+|Bean leaf roll
+||genus [[Luteovirus]], [[Bean leaf roll virus]] (BLRV)
+|-
+|Bean yellow mosaic
+||genus [[Potyvirus]], [[Bean yellow mosaic virus]] (BYMV)
+|-
+|Cucumber mosaic
+||genus [[Cucumovirus]], [[Cucumber mosaic virus]] (CMV)
+|-
+|Lucerne Australian latent
+||genus [[Nepovirus]], [[Lucerne Australian latent virus]] (LALV)
+|-
+|Lucerne Australian symptomless
+||genus [[Comoviridae]], [[Lucerne Australian symptomless virus]] (LASV)
+|-
+|Lucerne transient streak
+||genus [[Sobemovirus]], [[Lucerne transient streak virus]] (LTSV)
+|-
+|Pea streak
+||genus [[Carlavirus]], [[Pea streak virus]] (PSV)
+|-
+|Red clover vein mosaic
+||genus [[Carlavirus]], [[Red clover vein mosaic virus]] (RCVMV)
+|-
+|Tobacco streak
+||genus [[Ilarvirus]], [[Tobacco streak virus]] (TSV)
+|-
+|White clover mosaic
+||genus [[Potexvirus]], [[White clover mosaic virus]] (WCMV)
+|-
+|}
+
+==Phytoplasmal and spiroplasmal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal and spiroplasmal diseases'''
+|-
+|Aster yellows
+||Aster yellows phytoplasma
+|-
+|Witches'-broom
+||Phytoplasma
+|-
+|}
+
+==See also==
+* [[Alfalfa pests (disambiguation)|Alfalfa pests]], pests named for alfalfa
+
+==References==
+{{reflist}}
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Alfalfa.aspx Common Names of Diseases, The American Phytopathological Society]
+
+
+[[Category:Lists of plant diseases|Alfalfa]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_apple_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_apple_diseases.json
new file mode 100644
index 0000000..725da19
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_apple_diseases.json
@@ -0,0 +1,511 @@
+{{Short description|None}}
+{{Refimprove|date=January 2025}}
+Diseases of [[apple]]s (''Malus domestica'') include:
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Pseudomonadota'''
+|-
+|Blister spot
+||''[[Pseudomonas syringae]]'' pv. ''papulans''
+|-
+|[[Crown Gall|Crown gall]]
+||''[[Agrobacterium tumefaciens]]''
+|-
+|[[Fire blight]]
+||''[[Erwinia amylovora]]''
+|-
+|Hairy root
+||''[[Agrobacterium rhizogenes]]''
+|-
+! colspan=2| '''Mycoplasmatota'''
+|-
+|[[Apple chat fruit]]
+||Phytoplasma suspected
+|-
+|Apple decline
+||Phytoplasma suspected
+|-
+|Apple proliferation
+||Phytoplasma
+|-
+|Rubbery wood
+||Phytoplasma suspected
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria blotch
+||
+''[[Alternaria mali]]''
+{{=}} ''[[Alternaria alternata|A. alternata]]'' apple pathotype
+|-
+|Alternaria rot
+||''[[Alternaria alternata]]''
+|-
+|American brown rot
+||''[[Monilinia fructicola]]''
+|-
+|Anthracnose canker and bull's-eye rot
+||
+''[[Pezicula malicorticus]]''
+''[[Cryptosporiopsis curvispora]]'' [anamorph]
+|-
+|[[Apple scab]]
+||
+''[[Venturia inaequalis]]''
+''[[Venturia inaequalis|Spilocaea pomi]]'' [anamorph]
+|-
+|Apple ring rot and canker
+||''[[Botryosphaeria berengeriana]]''
+{{=}} ''[[Physalospora]]''
+|-
+|Armillaria root rot = shoestring root rot
+||''[[Armillaria mellea]]''
+|-
+|[[Bitter rot of apple|Bitter rot]][{{Cite journal|last1=Dowling|first1=Madeline|last2=Peres|first2=Natalia|last3=Villani|first3=Sara|last4=Schnabel|first4=Guido|date=2020|title=Managing Colletotrichum on Fruit Crops: A "Complex" Challenge|journal=Plant Disease|volume=104|issue=9|pages=2301–2316|doi=10.1094/PDIS-11-19-2378-FE|pmid=32689886|s2cid=219479598|issn=0191-2917|doi-access=free}}][{{Cite journal|last1=Martin|first1=Phillip L.|last2=Krawczyk|first2=Teresa|last3=Khodadadi|first3=Fatemeh|last4=Aćimović|first4=Srđan G.|last5=Peter|first5=Kari A.|date=2021|title=Bitter Rot of Apple in the Mid-Atlantic United States: Causal Species and Evaluation of the Impacts of Regional Weather Patterns and Cultivar Susceptibility|journal=Phytopathology|volume=111|issue=6|language=en|pages=PHYTO–09–20-043|doi=10.1094/PHYTO-09-20-0432-R|pmid=33487025|s2cid=231701083|issn=0031-949X|doi-access=free}}]
+||
+''[[Glomerella cingulata]]'' [teleomorph] (archaic)
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+
+''[[Colletotrichum gloeosporioides]]'' [[species complex]][{{Cite journal|last1=Weir|first1=B.S.|last2=Johnston|first2=P.R.|last3=Damm|first3=U.|date=2012|title=The Colletotrichum gloeosporioides species complex|journal=Studies in Mycology|language=en|volume=73|issue=1|pages=115–180|doi=10.3114/sim0011|pmc=3458417|pmid=23136459}}]
+
+* ''Colletotrichum fructicola''
+* ''Colletotrichum chrysophilum''
+
+''[[Colletotrichum acutatum]]'' [[species complex]][{{Cite journal|last1=Damm|first1=U.|last2=Cannon|first2=P.F.|last3=Woudenberg|first3=J.H.C.|last4=Crous|first4=P.W.|date=2012|title=The Colletotrichum acutatum species complex|journal=Studies in Mycology|language=en|volume=73|issue=1|pages=37–113|doi=10.3114/sim0010|pmc=3458416|pmid=23136458}}]
+
+* ''[[Colletotrichum fioriniae]]''
+* ''Colletotrichum nymphaeae''
+|-
+|Black pox
+||''[[Helminthosporium papulosum]]''
+|-
+|Black root rot
+||
+''[[Xylaria mali]]''
+''[[Xylaria polymorpha]]''
+|-
+|Black rot, frogeye leafspot and canker
+||
+''[[Botryosphaeria obtusa]]''
+''[[Sphaeropsis malorum]]'' [anamorph]
+|-
+|Blister canker = nailhead canker
+||
+''[[Biscogniauxia marginata]]''
+{{=}} ''[[Nummularia discreta]]''
+|-
+|Blue mold
+||''[[Penicillium]]'' spp.
+''[[Penicillium expansum]]''
+|-
+|Brooks fruit spot
+||
+''[[Mycosphaerella pomi]]''
+''[[Cylindrosporium pomi]]'' [anamorph]
+|-
+|Brown rot blossom blight and spur infection
+||
+''[[Monilinia laxa]]''
+|-
+|Calyx-end rot
+||''[[Sclerotinia sclerotiorum]]''
+|-
+|Clitocybe root rot
+||
+''[[Armillaria tabescens]]''
+{{=}} ''[[Clitocybe tabescens]]''
+|-
+|Diaporthe canker*
+||
+''[[Diaporthe tanakae]]''
+''[[Phomopsis tanakae]]'' [anamorph]
+|-
+|Diplodia canker
+||
+''[[Botryosphaeria stevensii]]''
+{{=}} ''[[Physalospora malorum]]''
+''[[Diplodia mutila]]'' [anamorph]
+|-
+|European brown rot
+||
+''[[Monilinia fructigena]]''
+''[[Monilia fructigena]]'' [anamorph]
+''[[Monilinia laxa]]''
+|-
+|Fisheye rot
+||
+''[[Butlerelfia eustacei]]''
+{{=}} ''[[Corticium centrifugum]]''
+|-
+|Flyspeck
+||
+''[[Schizothyrium pomi]]''
+''[[Zygophiala jamaicensis]]'' [anamorph]
+|-
+|Fruit blotch, leaf spot and twig canker
+||''[[Phyllosticta solitaria]]''
+|-
+|Glomerella leaf spot
+||
+''[[Glomerella cingulata]]''
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+|-
+|Gray mold rot = dry eye rot, blossom-end rot
+||
+''[[Botrytis cinerea]]''
+''[[Botrytis cinerea|Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|Leptosphaeria canker and fruit rot
+||
+''[[Diapleella coniothyrium]]''
+{{=}} ''[[Leptosphaeria coniothyrium]]''
+''[[Coniothyrium fuckelii]]'' [anamorph]
+|-
+|Leucostoma canker and dieback
+||
+''[[Leucostoma cinctum]]''
+''[[Cytospora cincta]]'' [anamorph]
+''[[Valsa auerswaldii]]''
+{{=}} ''[[Leucostoma auerswaldii]]''
+''[[Cytospora personata]]'' [anamorph]
+|-
+|[[Marssonina blotch]]
+||
+''[[Diplocarpon coronariae]]''
+|-
+|Moldy core and core rot
+||
+''[[Alternaria]]'' spp.
+''[[Cladosporium]]'' spp.
+''[[Coniothyrium]]'' sp.
+''[[Epicoccum]]'' spp.
+''[[Pleospora herbarum]]''
+''[[Stemphylium]]'' spp.
+''[[Ulocladium]]'' spp.
+|-
+|Monilia leaf blight
+||
+''[[Monilinia mali]]''
+''[[Monilinia|Monilia]]'' sp. [anamorph]
+|-
+|Monochaetia twig canker
+||
+''[[Seiridium unicorne]]''
+{{=}} ''[[Monochaetia mali]]''
+''[[Lepteutypa cupressi]]'' [teleomorph]
+|-
+|Mucor rot
+||
+''[[Mucor]]'' spp.
+''[[Mucor piriformis]]''
+|-
+|Nectria canker
+||
+''[[Nectria galligena]]''
+''[[Cylindrocarpon heteronemum]]'' [anamorph]
+|-
+|Nectria twig blight = coral spot
+||
+''[[Nectria cinnabarina]]''
+''[[Tubercularia vulgaris]]'' [anamorph]
+|-
+|Peniophora root canker
+||''[[Peniophora sacrata]]''
+|-
+|Perennial canker
+||
+''[[Neofabraea perennans]]''
+''[[Cryptosporiopsis perennans]]'' [anamorph]
+|-
+|Phomopsis canker, fruit decay and rough bark
+||
+''[[Phomopsis mali]]''
+''[[Diaporthe perniciosa]]'' [teleomorph]
+|-
+|Phymatotrichum root rot = cotton root rot
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+|Phytophthora crown, collar and root rot = sprinkler rot
+||
+''[[Phytophthora]]'' spp.
+''[[Phytophthora cactorum]]''
+''[[Phytophthora cambivora]]''
+''[[Phytophthora cryptogea]]''
+''[[Phytophthora megasperma]]''
+''[[Phytophthora syringae]]''
+|-
+|Phytophthora fruit rot
+||
+''[[Phytophthora cactorum]]''
+''[[Phytophthora syringae]]''
+|-
+|Pink mold rot
+||
+''[[Trichothecium roseum]]''
+{{=}} ''[[Cephalothecium roseum]]''
+|-
+|Powdery mildew
+||''[[Podosphaera leucotricha]]''
+|-
+|Rosellinia root rot = Dematophora root rot
+||
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+|-
+|Rubber rot
+|''[[Phacidiopycnis washingtonensis]]''
+|-
+!colspan=2|Rusts
+|-
+|American hawthorne rust
+||''[[Gymnosporangium globosum]]''
+|-
+|Cedar apple rust
+||''[[Gymnosporangium juniperi-virginianae]]''
+|-
+|Japanese apple rust
+||''[[Gymnosporangium yamadae]]''
+|-
+|Pacific Coast pear rust
+||''[[Gymnosporangium libocedri]]''
+|-
+|Quince rust
+||''[[Gymnosporangium clavipes]]''
+|-
+!colspan=2|...
+|-
+|Side rot
+||''[[Phialophora malorum]]''
+|-
+|Silver leaf
+||''[[Chondrostereum purpureum]]''
+|-
+|Sooty blotch complex
+||
+''[[Peltaster fructicola]]''
+''[[Geastrumia polystigmatis]]''
+''[[Leptodontidium elatius]]''
+''[[Gloeodes pomigena]]''
+|-
+|Southern blight
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Thread blight = Hypochnus leaf blight
+||
+''[[Corticium stevensii]]''
+{{=}} ''[[Pellicularia koleroga]]''
+{{=}} ''[[Hypochnus ochroleucus]]''
+|-
+|Valsa canker
+||
+''[[Valsa ceratosperma]]''
+''[[Cytospora sacculus]]'' [anamorph]
+|-
+|Violet root rot
+||''[[Helicobasidium mompa]]''
+|-
+|White root rot
+||
+''[[Scytinostroma galactinum]]''
+{{=}} ''[[Corticium galactinum]]''
+|-
+|White rot
+||
+''[[Botryosphaeria dothidea]]''
+''[[Fusicoccum aesculi]]'' [anamorph]
+|-
+|X-spot = Nigrospora spot
+||''[[Nigrospora oryzae]]''
+|-
+|Zonate leaf spot
+||
+''[[Cristulariella moricola]]''
+''[[Grovesinia pyramidalis]]'' [teleomorph]
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger nematode
+||
+''[[Xiphinema americanum]]''
+''[[Xiphinema rivesi]]''
+''[[Xiphinema vuittenezi]]''
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus penetrans]]''
+|-
+|Pin nematode
+||
+''[[Paratylenchus]]'' spp.
+|-
+|Ring nematode
+||
+''[[Criconemella]]'' spp.
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne]]'' spp.
+|-
+|}
+
+==Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Apple chlorotic leafspot
+||genus [[Trichovirus]], [[Apple chlorotic leafspot virus]] (ACLSV)
+|-
+|Apple dwarf (Malus platycarpa)
+||[[Apple stem pitting virus]] (ASPV) (? not US/CAN)
+|-
+|Apple flat apple
+||genus [[Nepovirus]], [[Cherry rasp leaf virus]] (CRLV)
+|-
+|Apple mosaic
+||genus [[Ilarvirus]], [[Apple mosaic virus]] (ApMV)
+genus [[Ilarvirus]], [[Tulare apple mosaic virus]] (TAMV)
+|-
+|Apple stem grooving = Apple decline of Virginia crab
+||genus [[Capillovirus]], [[Apple stem grooving virus]] (ASGV)
+|-
+|Apple stem pitting = apple Spy 227 epinasty and decline
+||[[Apple stem pitting virus]] (ASPV)
+|-
+|Apple union necrosis and decline
+||genus [[Nepovirus]], [[Tomato ringspot virus]] (ToRSV)
+|-
+|}
+
+==Viroid diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viroid diseases'''
+|-
+|Swollen apple
+||Apple fruit crinkle viroid (AFCVd)
+|-
+|Apple dimple fruit
+||Apple scar skin viroid (ASSVd)
+|-
+|Apple fruit crinkle
+||Apple fruit crinkle viroid (AFCVd) (Japan)
+|-
+|Apple scar skin = apple dapple, apple sabi-ka, apple bumpy fruit
+||Apple scar skin viroid (ASSVd)
+|-
+|}
+
+==Suspected viral- and viroid-like diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Suspected viral- and viroid-like diseases'''
+|-
+|Dead spur
+||GTP, unidentified
+|-
+|False sting
+||GTP, virus suspected
+|-
+|Green crinkle
+||GTP, virus suspected
+|-
+|Rough skin
+||GTP, virus suspected
+|-
+|Star crack
+||GTP, virus suspected
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|[[Bitter pit]]
+||Localized calcium deficiency
+|-
+|Blossom blast
+||Boron deficiency
+|-
+|[[Burrknot]]
+||Genetically predisposed rootstock
+|-
+|Fruit cracking
+||Genetic
+|-
+|Fruit russet
+||Frost, sprays, etc.
+|-
+|Green mottle
+||Unidentified
+|-
+|Hollow apple
+||High temperature
+|-
+|Internal bark necrosis = measles
+||Low pH and mineral nutrient imbalance
+|-
+|Internal browning
+||Boron and calcium deficiencies, etc.
+|-
+|Jonathan spot
+||Reduced by controlled atmosphere storage
+|-
+|Narrow leaf
+||Genetic
+|-
+|Necrotic leaf blotch of ‘Golden Delicious’
+||Rapid synthesis of [[gibberellin]]s triggered by environmental factors
+|-
+|Spray injury
+|Spray
+|-
+|Storage scald
+||Injury to fruit surfaces by naturally occurring gases produced by the fruit
+|-
+|Sunburn
+||Sun injury to fruit
+|-
+|Sunscald
+||Freezing of bark following high temperatures in winter
+|-
+|Water core
+||Sorbitol accumulation
+|-
+|}
+
+Pomological Watercolor POM00003985.jpg|'Bitter pit'
+Pomological Watercolor POM00003866.jpg|'Jonathan spot'
+Pomological Watercolor POM00000770.jpg|'Water core'
+Pomological Watercolor POM00003903.jpg|'Spray injury'
+
+
+==References==
+{{reflist}}
+
+==External links==
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Apple.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{Apples}}
+
+[[Category:Apple tree diseases|*]]
+[[Category:Lists of plant diseases|Apple]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_apricot_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_apricot_diseases.json
new file mode 100644
index 0000000..2e75a7d
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_apricot_diseases.json
@@ -0,0 +1,267 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[apricot]]s (''Prunus armeniaca'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial canker and blast
+||''[[Pseudomonas syringae]]'' pv. ''syringae''
+|-
+|Bacterial spot
+||''[[Xanthomonas pruni]]'' {{=}} ''X. arboricola'' pv. ''pruni'' = ''X. campestris'' pv. ''pruni''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria spot and fruit rot
+||''[[Alternaria alternata]]''
+|-
+|Armillaria crown and root rot (shoestring crown and root rot)
+||
+''[[Armillaria mellea]]''
+''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Brown rot blossom and twig blight and fruit rot
+||
+''[[Monilinia fructicola]]''
+''[[Monilinia laxa]]''
+|-
+|Ceratocystis canker
+||''[[Ceratocystis fimbriata]]''
+|-
+|Cytospora canker
+||
+''[[Cytospora leucostoma]]''
+''[[Leucostoma persoonii]]'' [teleomorph]
+|-
+|Dematophora root rot
+||
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+|-
+|Eutypa dieback
+||
+''[[Eutypa lata]]''
+''Cytosporina'' spp. [anamorph]
+|-
+|Green fruit rot
+||
+''[[Botrytis cinerea]]''
+''[[Botrytis cinerea]]'' [teleomorph]
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Leaf spot
+||''[[Phyllosticta circumscissa]]''
+|-
+|Phytophthora crown and root rot
+||
+''[[Phytophthora cactorum]]''
+''[[Phytophthora cambivora]]''
+''[[Phytophthora cinnamomi]]''
+''[[Phytophthora citricola]]''
+''[[Phytophthora drechsleri|Phytophthora dreschsleri]]''
+''[[Phytophthora megasperma]]''
+''[[Phytophthora syringae]]''
+|-
+|Phytophthora pruning wound canker
+||''[[Phytophthora syringae]]''
+|-
+|Powdery mildew
+||
+''[[Podosphaera]]'' spp.
+|-
+|Replant problems
+||Fungi and others (see under Miscellaneous Disorders)
+|-
+|Rhizopus fruit rot
+||
+''[[Rhizopus arrhizus]]''
+''[[Rhizopus circinans]]''
+''[[Rhizopus stolonifer]]''
+|-
+|Ripe fruit rot
+||''[[Aspergillus niger]]''
+''[[Cladosporium]]'' spp.
+''[[Mucor]]'' spp.
+''[[Penicillium expansum]]''
+''[[Penicillium italicum]]''
+|-
+|Scab
+||''[[Cladosporium carpophilum]]''
+''[[Venturia carpophila]]'' [teleomorph]
+|-
+|Shot hole
+||''[[Wilsonomyces carpophilus]]''
+{{=}} ''[[Stigmina carpophila]]''
+|-
+|Silver leaf
+||''[[Chondrostereum purpureum]]''
+|-
+|Verticillium wilt
+||''[[Verticillium dahliae]]''
+|-
+|Wood rots (pathogenicity has not been proven for these fungi)
+||
+''[[Cerrena unicolor]]''
+''[[Coprinus]]'' spp.
+''[[Coriolopsis gallica]]''
+''[[Daedaleopsis confragosa]]''
+''[[Dendrophora albobadia]]''
+''[[Dendrophora erumpens]]''
+''[[Fomes fomentarius]]''
+''[[Fomitopsis cajanderi]]''
+''[[Fomitopsis pinicola]]''
+''[[Fomitopsis rosea]]''
+''[[Ganoderma applanatum]]''
+''[[Ganoderma lucidum]]''
+''[[Gloeophyllum sepiarium]]''
+''[[Gloeophyllum trabeum]]''
+''[[Gloeoporus dichrous]]''
+''[[Grandinia granulosa]]''
+{{=}} ''[[Hyphodontia aspera]]''
+''[[Heterobasidion annosum]]'' (unconfirmed)
+''[[Hyphodermella corrugata]]''
+''[[Inonotus dryophilus]]''
+''[[Irpex lacteus]]''
+''[[Laetiporus sulphureus]]''
+''[[Oxyporus corticola]]''
+''[[Oxyporus latemarginatus]]''
+''[[Oxyporus populinus]]''
+''[[Perenniporia fraxinophila]]''
+''[[Perenniporia medulla-panis]]''
+''[[Phellinus ferreus]]''
+''[[Phellinus ferruginosus]]''
+''[[Phellinus gilvus]]''
+''[[Phellinus igniarius]]''
+''[[Phellinus pomaceus]]''
+''[[Pholiota]]'' spp.
+''[[Pholiota varius]]''
+''[[Pycnoporus cinnabarinus]]''
+''[[Schizophyllum commune]]''
+''[[Stereum]]'' spp.
+''[[Trametes elegans]]''
+''[[Trametes hirsuta]]''
+''[[Trametes versicolor]]''
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger
+||
+''[[Xiphinema americanum]]''
+''[[Xiphinema rivesi]]''
+|-
+|Lesion
+||
+''[[Pratylenchus vulnus]]''
+|-
+|Ring
+||
+''[[Criconemella xenoplax]]''
+|-
+|Root-knot
+||
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+|-
+|}
+
+==Viral diseases==
+
+includes uncharacterized graft-transmissible pathogens [GTP]
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Bare twig and unfruitfulness
+||genus [[Nepovirus]], [[Strawberry latent ringspot virus]]
+genus [[Tobamovirus]], [[Cucumber green mottle mosaic virus]]
+|-
+|Line pattern & Necrotic ring spot
+||genus [[Ilarvirus]], [[Prunus necrotic ringspot virus]] (PNRSV)
+|-
+|Peach mosaic
+||genus [[Trichovirus]], [[Cherry mottle leaf virus]] (CMLV)
+|-
+|Plum pox (= Sharka)
+||genus [[Potyvirus]], [[Plum pox virus|Plum pox virus (PPV)]]
+|-
+|Prunus stem pitting
+||genus [[Nepovirus]], [[Tomato ringspot virus]] (ToRSV)
+|-
+|Pseudopox
+||genus [[Trichovirus]], [[Apple chlorotic leaf spot virus]] (ACLSV)
+|-
+|Viral gummosis
+||genus [[Ilarvirus]], [[Prune dwarf virus]] (PDV)
+|-
+|}
+
+==Graft-transmissible pathogens [GTP]==
+
+{| class="wikitable" style="clear"
+! colspan=1| '''Graft-transmissible pathogens [GTP]'''
+|-
+|Asteroid spot (= Peach asteroid spot)
+|-
+|Cherry mottle leaf
+|-
+|Chlorotic leaf mottle
+|-
+|Deformation mosaic (associated with an isometric particle)
+|-
+|Moorpark mottle
+|-
+|Peach yellow mottle
+|-
+|Pucker leaf
+|-
+|Ring pox (= Spur cherry?)
+|-
+|Stone pitting
+|-
+|}
+
+==Phytoplasmal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal diseases'''
+|-
+|Chlorotic leaf roll (= Apple proliferation)
+||Witches' broom
+|-
+|}
+
+== Miscellaneous diseases or disorders ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases or disorders'''
+|-
+|Apricot gumboil
+||Unknown etiology (nontransmissible)
+|-
+|Replant problems
+||Bacteria, fungi, nematodes, viruses, nutrients, toxins and environmental conditions (?)
+|-
+|}
+
+==References==
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Apricot.aspx Common Names of Diseases, The American Phytopathological Society]
+
+[[Category:Stone fruit tree diseases|* Apricot]]
+[[Category:Lists of plant diseases|Apricot]]
+[[Category:Apricots|Disease]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_asparagus_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_asparagus_diseases.json
new file mode 100644
index 0000000..7d8e330
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_asparagus_diseases.json
@@ -0,0 +1,108 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[asparagus]] (''Asparagus officinalis'').
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Anthracnose
+||
+''[[Colletotrichum gloeosporioides]]''
+''[[Colletotrichum dematium]]''
+|-
+|Ascochyta blight
+||''[[Ascochyta asparagina]]''
+|-
+|Blue mold rot
+||''[[Penicillium aurantiogriseum]]''
+|-
+|Cercospora blight
+||''[[Cercospora asparagi]]''
+|-
+|Dead stem
+||''[[Fusarium culmorum]]''
+|-
+|Fusarium crown and root rot
+||
+''[[Fusarium oxysporum f.sp. asparagi]]''
+''[[Fusarium redolens]]''
+''[[Gibberella fujikuroi]]'' (mating population A)
+''[[Fusarium verticillioides]]'' [anamorph]
+''[[Gibberella fujikuroi]]'' (mating population D)
+''[[Fusarium proliferatum]]'' [anamorph]
+|-
+|Fusarium spear spot
+||
+''[[Fusarium oxysporum f.sp. asparagi]]''
+''[[Fusarium redolens]]''
+|-
+|Gray mold shoot blight
+||''[[Botrytis cinerea]]''
+|-
+|Leaf spot
+||''[[Alternaria alternata]]''
+|-
+|Phomopsis blight
+||
+''[[Phomopsis asparagi]]''
+''[[Phomopsis asparagicola]]''
+''[[Phomopsis javanica]]''
+|-
+|Phytophthora spear and crown rot
+||''[[Phytophthora megasperma]]''
+|-
+|Purple spot
+||
+''[[Pleospora herbarum]]''
+''[[Stemphylium vesicarium]]'' [anamorph]
+|-
+|Rhizoctonia crown rot
+||
+''[[Rhizoctonia solani]]''
+''[[Rhizoctonia]]'' sp.
+|-
+|Rust
+||''[[Puccinia asparagi]]''
+|-
+|Watery soft rot
+||''[[Sclerotinia sclerotiorum]]''
+|-
+|Zopfia root rot
+||''[[Zopfia rhizophila]]''
+|-
+|}
+
+==Viral and viroid diseases==
+
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Viral and viroid diseases'''
+|-
+|Asparagus decline
+||genus [[Potyvirus]], [[Asparagus 1 virus]] (AV-1)
+genus [[Ilarvirus]], [[Asparagus 2 virus]] (AV-2)
+|-
+|Asparagus mosaic
+||genus [[Potexvirus]], [[Asparagus 3 virus]] (AV-3)
+genus [[Ilarvirus]], [[Tobacco streak virus]] (TSV)
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Fasciation
+||Abiotic
+|-
+|}
+
+== References ==
+{{reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Asparagus.aspx Common Names of Diseases, The American Phytopathological Society]
+* [https://vegetablemdonline.ppath.cornell.edu/factsheets/Asparagus_list.htm Asparagus Diseases (Fact Sheets and Information Bulletins), The Cornell Plant Pathology Vegetable Disease Web Page]
+
+[[Category:Asparagus]]
+[[Category:Lists of plant diseases |Asparagus]]
+[[Category:Stem vegetable diseases]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_avocado_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_avocado_diseases.json
new file mode 100644
index 0000000..b7940a2
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_avocado_diseases.json
@@ -0,0 +1,262 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[avocado]]s (''Persea americana'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial canker
+||'''''[[Pseudomonas syringae]]'' '''
+'''''[[Xanthomonas campestris]]'''''
+|-
+|Blast and bacterial fruit spot
+||''[[Pseudomonas syringae]]''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Anthracnose
+||
+* ''[[Colletotrichum gloeosporioides]]''
+* ''[[Glomerella cingulata]]'' [teleomorph]
+|-
+|Armillaria root rot
+Shoestring root rot
+||
+* ''[[Armillaria mellea]]''
+* ''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Black mildew
+||
+* ''[[Asteridiella perseae]]''
+** ''[[Irene perseae]]''
+|-
+|Branch canker
+||
+* ''[[Botryosphaeria disrupta]]''
+* ''[[Botryosphaeria obtusa]]''
+** ''[[Physalospora obtusa]]''
+* ''[[Botryosphaeria quercuum]]''
+** ''[[Physalospora glandicola]]''
+* ''[[Botryosphaeria rhodina]]''
+** ''[[Physalospora rhodina]]''
+* ''[[Physalospora abdita]]''
+** ''[[Physalospora fusca]]''
+|-
+|Butt rot
+||
+* ''[[Ganoderma zonatum]]''
+** ''[[Ganoderma sulcatum]]''
+|-
+|Cercospora spot (blotch)
+||
+* ''[[Pseudocercospora purpurea]]''
+|-
+|Clitocybe root rot
+||
+* ''[[Armillaria tabescens]]''
+** ''[[Clitocybe tabescens]]''
+|-
+|Collar rot
+||
+* ''[[Sclerotinia sclerotiorum]]''
+|-
+|Dematophora root rot
+||
+* ''[[Dematophora necatrix]]''
+* ''[[Rosellinia necatrix]]'' [teleomorph]
+|-
+|Dieback
+||
+* ''[[Diplodia cacaoicola]]''
+* ''[[Phomopsis]]'' sp.
+|-
+|Fruit rot (includes stem end rot & fruit spots)
+||
+* ''[[Botryodiplodia]]'' spp.
+* ''[[Botryosphaeria obtusa]]''
+* ''[[Botryosphaeria quercuum]]''
+* ''[[Botryosphaeria rhodina]]''
+* ''[[Botrytis cinerea]]''
+** ''[[Botrytis vulgaris]]''
+* ''[[Botryotinia fuckeliana]]'' [teleomorph]
+* ''[[Colletotrichum gloeosporioides]]''
+* ''[[Cylindrocladium scoparium]]''
+* ''[[Calonectria kyotensis]]'' [teleomorph]
+* ''[[Dothiorella aromatica]]''
+* ''[[Dothiorella gregaria]]''
+* ''[[Fusarium decemcellulare]]''
+* ''[[Albonectria rigidiuscula]]'' [teleomorph]
+* ''[[Lasiodiplodia theobromae]]''
+** ''[[Diplodia natalensis]]''
+* ''[[Nectria pseudotrichia]]''
+* ''[[Tubercularia lateritia]]'' [anamorph]
+* ''[[Pestalotia]]'' spp.
+* ''[[Pestalotiopsis versicolor]]''
+* ''[[Phomopsis perseae]]''
+* ''[[Rhizopus stolonifer]]''
+* ''[[Sclerotinia sclerotiorum]]''
+** ''[[Sclerotinia libertiana]]''
+|-
+|Heart rot
+||
+* ''[[Oxyporus latemarginatus]]''
+** ''[[Poria latemarginata]]''
+|-
+|Leaf spots
+||
+* ''[[Bipolaris sorokiniana]]''
+* ''[[Cochliobolus sativus]]'' [teleomorph]
+* ''[[Pestalotia]]'' spp.
+* ''[[Pestalotiopsis adusta]]''
+* ''[[Phyllachora gratissima]]''
+* ''[[Phyllosticta micropuncta]]''
+** ''[[Phyllosticta perseae]]''
+|-
+|Phomopsis spot
+||''[[Phomopsis]]'' spp.
+|-
+|Physalospora canker
+||
+*''[[Physalospora perseae]]''
+|-
+|Phytophthora crown rot
+||
+* ''[[Phytophthora cinnamomi]]''
+* ''[[Phytophthora citricola]]''
+|-
+|Phytophthora trunk canker
+||
+* ''[[Phytophthora cinnamomi]]''
+* ''[[Phytophthora citricola]]''
+* ''[[Phytophthora heveae]]''
+|-
+|Phytophthora root rot
+||
+* ''[[Phytophthora cinnamomi]]''
+|-
+|Pink rot
+||
+* ''[[Trichothecium roseum]]''
+** ''[[Cephalothecium roseum]]''
+|-
+|Powdery mildew
+|
+* ''[[Oidium (genus)|Oidium]]'' spp.
+|-
+|Rhizoctonia seed and root rot
+||
+* ''[[Rhizoctonia solani]]''
+* ''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Root and bark rot
+||
+* ''[[Fusarium]]'' spp.
+|-
+|Root rot
+||
+* ''[[Pythium]]'' spp.
+|-
+|Rosellinia root rot
+||
+* ''[[Rosellinia bunodes]]''
+|-
+|Rusty blight
+||
+* ''[[Colletotrichum gloeosporioides]]''
+** ''[[Colletotrichum nigrum]]''
+|-
+|Scab (fruit & leaf)
+||
+* ''[[Sphaceloma perseae]]''
+|-
+|Seedling blight
+||
+* ''[[Phytophthora palmivora]]''
+* ''[[Sclerotium rolfsii]]''
+* ''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Smudgy spot
+||
+* ''[[Helminthosporium]]'' spp.
+|-
+|Sooty blotch
+||
+* ''[[Akaropeltopsis]]'' sp.
+|-
+|Tar spot
+||
+* ''[[Phyllachora gratissima]]''
+|-
+|Verticillium wilt
+||
+*''[[Verticillium dahliae]]''
+|-
+|Wood rots
+||
+* ''[[Fomitopsis supina]]''
+** ''[[Polyporus supinus]]''
+* ''[[Laetiporus sulphureus]]''
+** ''[[Polyporus sulphureus]]''
+* ''[[Sporotrichum versisporum]]'' [anamorph]
+* ''[[Rigidoporus ulmarius]]''
+** ''[[Fomes geotropus]]''
+* ''[[Trametes hirsuta]]''
+** ''[[Polyporus hirsutus]]''
+|-
+|}
+
+==Viruslike diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viruslike diseases'''
+|-
+|Sunblotch
+||[[Avocado sunblotch viroid]]
+|-
+|Trunk pitting
+||Graft transmissible agent
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Algal spot
+||Cephaleuros virescens Kunze
+|-
+|Blackstreak
+||Unknown cause
+|-
+|Dieback
+||Copper deficiency
+|-
+|Edema
+||Physiological
+|-
+|Littleleaf rosette
+||[[Zinc deficiency (plant disorder)|Zinc deficiency]]
+|-
+|Tipburn
+||Excess mineral salts
+|-
+|}
+
+== References ==
+{{reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Avocado.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{Avocados}}
+
+[[Category:Lists of plant diseases|Avocado]]
+[[Category:Avocado tree diseases| List]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_banana_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_banana_diseases.json
new file mode 100644
index 0000000..abf4d0a
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_banana_diseases.json
@@ -0,0 +1,3 @@
+#REDIRECT [[List of banana and plantain diseases]]
+
+{{R from synonym}}
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_barley_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_barley_diseases.json
new file mode 100644
index 0000000..85fa8c3
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_barley_diseases.json
@@ -0,0 +1,346 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[barley]] (''Hordeum vulgare'').
+
+==Bacterial and fungal diseases==
+{| class="wikitable"
+|-
+! colspan=2| '''Bacterial Diseases'''
+|-
+| Black chaff and bacterial streak||''Xanthomonas translucens'' pv. ''translucens''
+|-
+|Bacterial kernel blight || [[Pseudomonas syringae pv. syringae|''Pseudomonas syringae'' pv. ''syringae'']]
+|-
+|Bacterial leaf blight || [[Pseudomonas syringae pv. syringae|''Pseudomonas syringae'' pv. ''syringae'']]
+|-
+|Bacterial stripe || ''[[Pseudomonas syringae]]'' pv. ''striafaciens''
+|-
+|Basal glume rot || ''[[Pseudomonas syringae]]'' pv. ''atrofaciens''
+|-
+|[[Bacterial blight (barley)|Bacterial blight]] || ''[[Xanthomonas campestris]]'' pv. ''translucens''
+|}
+
+{| class="wikitable"
+|-
+! colspan=2| '''Fungal diseases'''
+|-
+|[[Minor diseases (barley)#Anthracnose|Anthracnose]][
+{{Cite book
+| last = Mathre
+| first = D.E.
+| title = Compendium of barley diseases
+| publisher = American Phytopathological Society
+| date = 1997
+| pages = 120 pp
+}}
+] ||
+''[[Glomerella graminicola|Colletotrichum cereale Manns]]''
+|-
+|[[Barley stripe (barley)|Barley stripe]]||
+''[[Pyrenophora graminea]]''
+{{=}} ''[[Pyrenophora graminea|Drechslera graminea]]''
+|-
+|Cephalosporium stripe ||
+''[[Hymenula cerealis]]''
+{{=}} ''[[Cephalosporium gramineum]]''
+|-
+|[[Common root rot (barley)|Common root rot, crown rot and seedling blight]]||
+''[[Cochliobolus sativus]]''
+{{=}} ''[[Cochliobolus sativus|Bipolaris sorokiniana]]''
+''[[Fusarium culmorum]]''
+''[[Fusarium graminearum]]''
+''[[Gibberella zeae]]'' [teleomorph]
+|-
+|[[Minor diseases (barley)#Downy mildew|Downy mildew]]||
+''[[Sclerophthora rayssiae]]''
+|-
+|Dwarf bunt||''[[Tilletia controversa]]''
+|-
+|[[Ergot]] ||
+''[[Claviceps purpurea]]''
+''[[Sphacelia segetum]]'' [anamorph]
+|-
+|Eyespot||
+''[[Tapesia yallundae|Pseudocercosoporella herpotrichoides]]''
+''[[Tapesia yallundae]]'' [teleomorph]
+|-
+|Halo spot||
+''[[Pseudoseptoria donacis]]''
+{{=}} ''[[Selenophoma donacis]]''
+|-
+|Kernel blight = black point ||
+''[[Alternaria]]'' spp.
+''[[Arthrinium arundinis]]''[{{cite journal
+ |last = Martinez-Cano
+ |first = C.
+ |author2 = W.E. Grey
+ |author3 = D.C. Sands
+ |title = First report of Arthrinium arundinis causing kernel blight on barley
+ |journal = Plant Dis.
+ |volume = 76
+ |page = 1077
+ |date = 1992
+ |url = http://www.apsnet.org/pd/PDFS/1992/PlantDisease76n10_1077.pdf
+ |url-status = dead
+ |archiveurl = https://web.archive.org/web/20070929120741/http://www.apsnet.org/pd/PDFS/1992/PlantDisease76n10_1077.pdf
+ |archivedate = 2007-09-29
+}}
+]
+''[[Apiospora montagnei]]'' [teleomorph]
+''[[Cochliobolus sativus]]''
+''[[Fusarium]] spp.''
+|-
+|[[Minor diseases (barley)#Ascochyta leaf blight|Ascochyta leaf spot]][[http://nt.ars-grin.gov/fungaldatabases/ USDA ARS Fungal Database] {{webarchive |url=https://web.archive.org/web/20070820101227/http://nt.ars-grin.gov/fungaldatabases/ |date=August 20, 2007 }}]||
+''[[Ascochyta hordei]]''
+''[[Ascochyta graminea]]''
+''[[Ascochyta sorghi]]''
+''[[Ascochyta tritici]]''
+|-
+|[[Net blotch (barley)|Net blotch]]
+||
+''[[Pyrenophora teres|Drechslera teres]]''
+''[[Pyrenophora teres]]'' [teleomorph]
+|-
+|[[Net blotch (barley)|Net blotch (spot form)]]||''[[Drechslera teres f. maculata]]''
+|-
+|[[Powdery mildew]]||
+''[[Blumeria hordei]]''
+|-
+|Pythium root rot||
+''[[Pythium]]'' spp.
+''[[Pythium arrhenomanes]]''
+''[[Pythium graminicola]]''
+''[[Pythium tardicrescens]]''
+|-
+|Rhizoctonia root rot||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+! colspan=2 | Rusts
+|-
+|[[Crown rust (barley)|Crown rust]]||
+''[[Puccinia coronata var. hordei]]''
+|-
+|[[Leaf rust (barley)|Leaf rust]]||''[[Puccinia hordei]]''
+|-
+|[[Stem rust (barley)|Stem rust]]||
+''[[Puccinia graminis f.sp. secalis]]''
+''[[Puccinia graminis f.sp. tritici]]''
+|-
+|[[Stripe rust (barley)|Stripe rust = yellow rust]]||
+''[[Puccinia striiformis f. sp. hordei]]''
+|-
+! colspan=2 | ...
+|-
+|Scab = head blight||''[[Fusarium]]'' spp.
+''[[Fusarium graminearum]]''
+|-
+|[[Scald (barley)|Scald]]||''[[Rhynchosporium secalis]]''
+|-
+|Septoria speckled leaf blotch||
+''[[Septoria passerinii]]''
+''[[Stagonospora avenae f.sp. triticae]]''
+|-
+|Sharp eyespot||
+''[[Rhizoctonia cerealis]]''
+''[[Ceratobasidium cereale]]'' [teleomorph]
+|-
+! colspan=2 |Smuts
+|-
+|[[Covered smut (barley)|Covered smut]]||''[[Ustilago hordei]]''
+|-
+|[[False loose smut (barley)|False loose smut]]||
+''[[Ustilago nigra]]''
+{{=}} ''[[Ustilago avenae]]''
+|-
+|[[Loose smut (barley)|Loose smut]]||
+''[[Ustilago nuda]]'' =
+''[[Ustilago tritici]]''
+|-
+! colspan=2 |[[Snow mold]]s
+|-
+|Gray snow mold = [[Typhula blight]]||
+''[[Typhula incarnata]]''
+''[[Typhula ishikariensis]]''
+|-
+|Pink snow mold = [[Fusarium patch]]||
+''[[Microdochium nivale]]''
+{{=}} ''[[Fusarium nivale]]''
+''[[Monographella nivalis]]'' [teleomorph]
+|-
+|Speckled snow mold||''[[Typhula idahoensis]]''
+|-
+! colspan=2 | ...
+|-
+|Snow rot||
+''[[Pythium iwayamae]]''
+''[[Pythium okanoganense]]''
+''[[Pythium paddicum]]''
+|-
+|Snow scald = Sclerotinia snow mold||
+''[[Myriosclerotinia borealis]]''
+{{=}} ''[[Sclerotinia borealis]]''
+|-
+|Southern blight||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|[[Spot blotch (barley)|Spot blotch]]||
+''[[Cochliobolus sativus]]''
+''[[Cochliobolus sativus|Drechslera teres]]'' [anamorph]
+|-
+|Stagonospora blotch||
+''[[Stagonospora avenae f.sp. triticae]]''
+''[[Phaeosphaeria avenaria f.sp. triticae]]'' [teleomorph]
+''[[Stagonospora nodorum]]''
+{{=}} ''[[Septoria nodorum]]''
+''[[Phaeosphaeria nodorum]]'' [teleomorph]
+|-
+|[[Take-all]]||
+''[[Gaeumannomyces graminis var tritici]]''
+|-
+|Tan spot||
+''[[Pyrenophora tritici-repentis]]''
+{{=}} ''[[Pyrenophora trichostoma]]''
+''[[Drechslera tritici-repentis]]'' [anamorph]
+{{=}} ''[[Helminthosporium tritici-repentis]]''
+|-
+|[[Minor diseases (barley)#Verticillium wilt|Verticillium wilt]][{{cite journal
+| last = Mathre
+| first = D.E.
+| title = Occurrence of Verticillium dahliae on barley
+| journal = Plant Dis.
+| volume = 70
+| page = 981
+| date = 1986
+| doi = 10.1094/PD-70-981c
+| issue = 10
+}}][{{cite journal
+ |last = Mathre
+ |first = D.E.
+ |title = Pathogenicity of an isolate of Verticillium dahliae from barley
+ |journal = Plant Dis.
+ |volume = 73
+ |pages = 164–167
+ |date = 1989
+ |url = http://www.apsnet.org/pd/PDFS/1989/PlantDisease73n02_164.PDF
+ |doi = 10.1094/PD-73-0164
+ |issue = 2
+ |url-status = dead
+ |archiveurl = https://web.archive.org/web/20090515023524/http://www.apsnet.org/pd/PDFS/1989/PlantDisease73n02_164.pdf
+ |archivedate = 2009-05-15
+}}]||''[[Verticillium dahliae]]''
+|-
+|Wirrega blotch||''[[Drechslera wirreganensis]]''
+|}
+
+==Nematodes, parasitic==
+{| class="wikitable"
+|-
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Cereal cyst nematode ||
+''[[Heterodera avenae]]''
+''[[Heterodera filipjevi]]''
+''[[Heterodera latipons]]''
+|-
+|Cereal root knot nematode ||
+''[[Meloidogyne]]'' spp.
+''[[Meloidogyne naasi]]''
+''[[Meloidogyne artiellia]]''
+''[[Meloidogyne chitwoodi]]''
+|-
+|Root gall nematode||
+''[[Subanguina radicicola]]''
+|-
+|Root lesion nematode||
+''[[Pratylenchus]]'' spp.
+|-
+|Stunt nematode ||
+''[[Merlinius brevidens]]''
+''[[Tylenchorhynchus dubius]]''
+''[[Tylenchorhynchus maximus]]''
+|}
+
+==Virus, viroid and virus-like diseases==
+{| class="wikitable"
+! colspan=2| '''Virus, viroid and virus-like diseases'''
+|-
+|African cereal streak||[[African cereal streak virus]]
+|-
+|Barley mild mosaic ||genus [[Bymovirus]], [[Barley mild mosaic bymovirus]] (BaMMV)
+|-
+|Barley mosaic ||[[Barley mosaic virus]]
+|-
+|Barley stripe mosaic||genus [[Hordeivirus]], [[Barley stripe mosaic virus]] (BSMV)
+|-
+|[[Barley yellow dwarf]]||genus [[Luteovirus]], [[Barley yellow dwarf virus|Barley yellow dwarf virus (BYDV)]]
+|-
+|Barley yellow streak mosaic||[[Barley yellow streak mosaic virus]]
+|-
+|Barley yellow stripe||virus-like agent
+|-
+|[[Brome mosaic virus|Brome mosaic]]||genus [[Bromovirus]], [[Brome mosaic virus|Brome mosaic virus (BMV)]]
+|-
+|Cereal northern mosaic = barley yellow striate mosaic||genus [[Cytorhabdovirus]], [[Northern cereal mosaic virus]] (NCMV)
+|-
+|Cereal tillering ||genus [[Reovirus]], [[Cereal tillering disease virus]] (CTDV)
+|-
+|Chloris striate mosaic||genus [[Monogeminivirus]], [[Chloris striate mosaic virus]] (CSMV)
+|-
+|Eastern wheat striate||[[Eastern wheat striate virus]]
+|-
+|Enanismo||virus like agent
+|-
+|Hordeum mosaic||genus [[Rymovirus]], [[Hordeum mosaic virus]] (HoMV)
+|-
+|Oat blue dwarf||genus [[Marafivirus]], [[Oat blue dwarf virus]](OBDV)
+|-
+|Oat pseudorosette||genus [[Tenuivirus]], [[Oat pseudorosette virus]]
+|-
+|Oat sterile dwarf||genus [[Fijivirus]], [[Oat sterile dwarf virus]] (OSDV)
+|-
+|Rice black-streaked dwarf||genus [[Fijivirus]], [[Rice black-streaked dwarf virus]] (RBSDV)
+|-
+|Rice stripe ||genus [[Tenuivirus]], [[Rice stripe virus]] (RSV)
+|-
+|Russian winter wheat mosaic||[[Winter wheat Russian mosaic virus]] (WWRMV)
+|-
+|Wheat dwarf||genus [[Monogeminivirus]], [[Wheat dwarf virus]] (WDV)
+|-
+|Wheat soil-borne mosaic ||genus [[Furovirus]], [[Wheat soil-borne mosaic virus]] (SBWMV)
+|-
+|Wheat streak mosaic||genus [[Ryemovirus]], [[Wheat streak mosaic virus]] (WSMV)
+|-
+|Wheat yellow leaf||genus [[Closterovirus]], [[Wheat yellow leaf virus]] (WYLV)
+|}
+
+==Phytoplasma diseases==
+{| class="wikitable"
+|-
+! colspan=2| '''Mycoplasmal diseases'''
+|-
+|Aster yellows||Aster yellows phytoplasma
+|}
+
+==Miscellaneous diseases and disorders==
+{| class="wikitable"
+|-
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Physiological leaf spot ||Unknown
+|}
+
+==Sources==
+* [https://web.archive.org/web/20060823145450/http://www2.dpi.qld.gov.au/fieldcrops/7687.html Barley Diseases, Queensland Government, Australia]
+* [https://web.archive.org/web/20110719035925/http://archives.eppo.org/EPPOStandards/PP2_GPP/pp2-11-e.doc EPPO Standards, Guidelines on good plant protection - Barley, Europe]
+* [https://web.archive.org/web/20070816195001/http://www.ag.ndsu.nodak.edu/aginfo/barleypath/barleydiseases/index.htm Barley Disease Handbook, NDSU, US]
+* [https://web.archive.org/web/20070421002137/http://plantpathology.tamu.edu/Texlab/Grains/Barley/bartop.html Barley Disease Index, TAMU, US]
+* [https://web.archive.org/web/20070202085845/http://www.apsnet.org/online/common/names/barley.asp Common Names of Diseases, The American Phytopathological Society, US]
+* [https://web.archive.org/web/20070820101227/http://nt.ars-grin.gov/fungaldatabases/ USDA ARS Fungal Database]
+
+==References==
+{{Reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Barley.aspx Common Names of Diseases, The American Phytopathological Society]
+{{DEFAULTSORT:List Of Barley Diseases}}
+[[Category:Barley diseases|*]]
+[[Category:Lists of plant diseases|Barley]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_carrot_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_carrot_diseases.json
new file mode 100644
index 0000000..2caf90e
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_carrot_diseases.json
@@ -0,0 +1,380 @@
+{{Short description|none}}
+This is a '''list of diseases''' of [[carrots]] (''Daucus carota'' subsp. ''sativus'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Bacterial diseases'''
+|-
+
+|Bacterial leaf blight
+||''[[Xanthomonas campestris]]''
+|-
+|[[Bacterial soft rot]]
+||''Erwinia chrysanthemi''
+''E. carotovora'' subsp. ''carotovora'' = ''Pectobacterium carotovorum'' subsp. ''carotovorum''
+''E. carotovora'' subsp. ''atroseptica'' = ''Pectobacterium carotovorum'' subsp. ''atrosepticum''
+|-
+|Carrot bacterial gall
+|''[[Rhizobacter]] [[Rhizobacter dauci|dauci]]''
+|-
+|Carrot bacteriosis
+||''[[Xanthomonas campestris]]'' pv. ''carotae''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|Hairy root
+||''[[Agrobacterium rhizogenes]]''
+|-
+|Scab
+||''[[Streptomyces scabiei]]''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria leaf blight
+||''[[Alternaria dauci]]''
+|-
+|Black root rot
+||
+''[[Thielaviopsis basicola]]''
+''[[Chalara elegans]]'' [synanamorph]
+|-
+|Black rot (black carrot root dieback)
+||
+''[[Alternaria radicina]]''
+{{=}} ''[[Stemphylium radicinum]]''
+|-
+|Blue mold rot (blue green mold)
+||''[[Penicillium expansum]]''
+|-
+|Brown rot (Phoma disease)
+||
+''[[Leptosphaeria libanotis]]''
+''[[Phoma rostrupii]]'' [anamorph]
+|-
+|Buckshot rot
+||''[[Typhula]]'' spp.
+|-
+|Canker
+||
+''[[Thanatephorus cucumeris]]''
+''[[Rhizoctonia solani]]'' [anamorph]
+|-
+|[[Fungicide use in the United States#Cavity spot|Cavity spot]]
+||
+''[[Pythium]]'' spp.
+''[[Pythium violae]]''
+''[[Rhizoctonia]]'' spp.
+''[[Rhizoctonia solani]]''
+|-
+|Cercospora leaf spot
+||''[[Cercospora carotae]]''
+|-
+|Cottony rot
+||
+''[[Sclerotinia minor]]''
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Crater rot
+||''[[Athelia arachnoidea]]'' ([[anamorph]] = ''Fibulorhizoctonia carotae'')
+|-
+|Crown rot
+||
+''[[Rhizoctonia]]'' spp.
+''[[Rhizoctonia solani]]''
+|-
+|Damping off
+||
+''[[Fusarium]]'' spp.
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+|-
+|Dieback of carrots
+||
+''[[Pythium]]'' spp.
+''[[Pythium debaryanum]]''
+|-
+|Downy mildew
+||
+''[[Plasmopara crustosa]]''
+{{=}} ''[[Plasmopara nivea]]''
+|-
+|Forking, brown root
+||
+''[[Pythium]]'' spp.
+''[[Pythium irregulare]]''
+''[[Pythium paroecandrum]]''
+''[[Pythium sylvaticum]]''
+|-
+|Fusarium dry rot
+||''[[Fusarium]]'' sp.
+|-
+|Gray mold rot
+||
+''[[Botryotinia fuckeliana]]''
+''[[Botrytis cinerea]]'' [anamorph]
+|-
+|Hard rot
+||
+''[[Fusarium]]'' sp.
+''[[Gliocladium roseum]]''
+|-
+|Lateral root dieback
+||''[[Pythium]]'' spp.
+|-
+|Leaf rot
+||''[[Typhula variabilis]]''
+|-
+|Leaf spot
+||''[[Ramularia]]'' spp.
+|-
+|Licorice rot
+||
+''[[Mycocentrospora acerina]]''
+{{=}} ''[[Centrospora acerina]]''
+''[[Sclerotinia sclerotiorum]]''
+''[[Thielaviopsis basicola]]''
+''[[Typhula]]'' spp.
+|-
+|Phytophthora root rot
+||''[[Phytophthora megasperma]]''
+|-
+|Pink mold rot
+||''[[Trichothecium roseum]]''
+|-
+|Powdery mildew
+||
+''[[Erysiphe heraclei]]''
+''[[Erysiphe polygoni]]''
+''[[Erysiphe umbelliferarum f. dauci]]''
+|-
+|Pythium brown rot and forking
+||
+''[[Pythium irregulare]]''
+''[[Pythium paroecandrum]]''
+''[[Pythium sulcatum]]''
+''[[Pythium sylvaticum]]''
+|-
+|Pythium root dieback
+||''[[Pythium]]'' spp.
+|-
+|Rhizoctonia canker
+||''[[Rhizoctonia solani]]''
+|-
+|Rhizoctonia seedling disease
+||''[[Rhizoctonia]]'' spp.
+|-
+|Rhizopus wooly soft rot
+||
+''[[Rhizopus arrhizus]]''
+{{=}} ''[[Rhizopus oryzae]]''
+''[[Rhizopus stolonifer]]''
+{{=}} ''[[Rhizopus nigricans]]''
+|-
+|Root canker
+||''[[Rhizoctonia]]'' spp.
+|-
+|Root dieback
+||''[[Pythium]]'' spp.
+|-
+|Root rot
+||
+''[[Fusarium]]'' spp.
+''[[Fusarium culmorum]]''
+''[[Rhizoctonia]]'' spp.
+''[[Sclerotium rolfsii]]''
+|-
+|Phymatotrichum root rot (cotton root rot)
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+|Rubbery brown rot
+||
+''[[Phytophthora cactorum]]''
+''[[Phytophthora megasperma|P. megasperma]]''
+|-
+|Rubbery slate rot
+||
+''[[Pythium debaryanum]]''
+|-
+|Rust
+||
+''[[Aecidium foeniculi]]''
+''[[Uromyces graminis]]''
+''[[Uromyces lineolatus subsp. nearcticus]]''
+{{=}} ''[[Uromyces scirpi]]''
+|-
+|Rusty root
+||
+''[[Pythium]]'' spp.
+''[[Olpidium brassicae]]'', as vector, tobacco necrosis virus
+|-
+|Sclerotinia rot
+||
+''[[Sclerotinia sclerotiorum]]''
+''[[Sclerotinia minor]]''
+|-
+|Seed mold
+||
+''[[Alternaria alternata]]''
+''[[Gibberella fujikuroi]]''
+''[[Fusarium moniliforme]]'' [anamorph]
+|-
+|Sooty rot
+||''[[Aspergillus niger]]''
+|-
+|Sour rot
+||''[[Geotrichum candidum]]''
+|-
+|Southern blight
+||
+''[[Athelia rolfsii]]''
+''[[Sclerotium rolfsii]]'' [anamorph]
+|-
+|Stem spot
+||''[[Diaporthe arctii]]''
+|-
+|Tip rot
+||Numerous pathogens
+|-
+|Umbel blight
+||''[[Colletotrichum gloeosporioides]]''
+|-
+|Violet root rot
+||
+''[[Helicobasidium brebissonii]]''
+{{=}} ''[[Helicobasidium purpureum]]''
+''[[Rhizoctonia crocorum]]'' [anamorph]
+|-
+|Watery soft rot
+||
+''[[Sclerotinia minor]]''
+''[[Sclerotinia sclerotiorum]]''
+''[[Sclerotium rolfsii]]''
+''[[Botrytis cinerea]]''
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Cyst nematode
+||
+''[[Heterodera carotae]]''
+|-
+| Dagger nematode
+|| ''[[Xiphinema]]''
+|-
+|Lance nematode
+||
+''[[Hoplolaimus uniformis]]''
+|-
+|Lesion nematode
+||
+''[[Pratylenchus penetrans]]''
+''[[Pratylenchus]]'' spp.
+|-
+|Root knot
+||
+''[[Meloidogyne hapla]]''
+|-
+|Sting nematode
+||
+''[[Belonolaimus longicaudatus]]''
+|-
+| Stubby-root nematodes
+|| ''[[Trichodorus]]''
+|-
+|}
+
+==Virus and viroid diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| ''' diseases'''
+|-
+|Alfalfa mosaic
+||genus [[Alfamovirus]], [[Alfalfa mosaic virus|Alfalfa mosaic virus (AMV)]]
+|-
+|Carrot latent
+||genus [[Nucleorhabdovirus]], [[Carrot latent virus]] (CtLtV)
+|-
+|Carrot mottle
+||genus [[Umbravirus]], [[Carrot mottle virus]] (CMoV)
+|-
+|Carrot red leaf
+||genus [[Luteovirus]], [[Carrot red leaf virus]] (CaRLV)
+|-
+|Carrot thin leaf
+||genus [[Potyvirus]], [[Carrot thin leaf virus]] (CTLV)
+|-
+|Carrot yellow leaf
+||[[Carrot yellow leaf virus]] (CYLV)
+|-
+|Celery mosaic
+||genus [[Potyvirus]], [[Celery mosaic virus]] (CeMV)
+|-
+|Cucumber mosaic
+||genus [[Cucumovirus]], [[Cucumber mosaic virus]] (CMV)
+|-
+|Curly top
+||genus [[Hybrigeminivirus]], [[Beet curly top virus]] (BCTV)
+|-
+|Motley dwarf
+||genus [[Luteovirus]], [[Carrot red leaf virus]] (CaRLV)
+genus [[Umbravirus]], [[Carrot mottle virus]] (CMoV)
+|-
+|}
+
+==Phytoplasmal and spiroplasmal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal and spiroplasmal diseases'''
+|-
+|Aster yellows
+||[[Aster yellows|Aster yellows phytoplasma]]
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Crown rot disorder
+||No specific pathogen associated with this disorder
+|-
+|Heat canker
+||High soil surface temperature
+|-
+|Hollow black heart
+||Boron deficiency
+|-
+|Ozone injury
+||Ozone pollution
+|-
+|Root scab
+||Physiological
+|-
+|Speckled carrot
+||No pathogen; genetic disorder
+|-
+|}
+
+== References ==
+{{reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Carrot.aspx Common Names of Diseases, The American Phytopathological Society]
+* [https://vegetablemdonline.ppath.cornell.edu/factsheets/Carrot_List.htm Carrot Diseases (Fact Sheets and Information Bulletins), The Cornell Plant Pathology Vegetable Disease Web Page]
+
+{{Carrots}}
+
+[[Category:Lists of plant diseases|Carrot]]
+[[Category:Carrot diseases| List]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_citrus_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_citrus_diseases.json
new file mode 100644
index 0000000..fdd9686
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_citrus_diseases.json
@@ -0,0 +1,618 @@
+{{Short description|None}}
+The following is a list of diseases in [[citrus]] plants.
+
+==Bacterial diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial spot
+||''[[Xanthomonas euvesicatoria]]'' pv. ''citrumelo''
+|-
+|Black pit (fruit)
+||''[[Pseudomonas syringae]]''
+|-
+|Blast
+||''[[Pseudomonas syringae]]''
+|-
+|[[Citrus canker]]
+||''[[Xanthomonas citri]]'' pv. ''citri''
+|-
+|Citrus variegated chlorosis
+||''[[Xylella fastidiosa]]''
+|-
+|[[Huanglongbing]] = citrus greening
+||''[[Candidatus Liberibacter]] asiaticus''
+''Candidatus L. africanus''
+|-
+|}
+
+==Fungal diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Albinism
+||
+''[[Alternaria alternata]]''
+{{=}} ''[[Alternaria tenuis]]''
+''[[Aspergillus flavus]]''
+|-
+|Alternaria brown spot
+||''[[Alternaria alternata]]''
+|-
+|Alternaria leaf spot of rough lemon
+||''[[Alternaria citri]]''
+|-
+|Alternaria stem-end rot
+||''[[Alternaria citri]]''
+|-
+|Anthracnose = wither-tip
+||
+''[[Glomerella cingulata]]''
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+|-
+|Areolate leaf spot
+||
+''[[Thanatephorus cucumeris]]''
+{{=}} ''[[Pellicularia filamentosa]]''
+''[[Rhizoctonia solani]]'' [anamorph]
+|-
+|Black mold rot
+||''[[Aspergillus niger]]''
+|-
+|Black root rot
+||
+''[[Thielaviopsis basicola]]''
+''[[Chalara elegans]]'' [synanamorph]
+|-
+|Black rot
+||''[[Alternaria citri]]''
+|-
+|Black spot
+||
+''[[Guignardia citricarpa]]''
+''[[Phyllosticta citricarpa]]'' [synanamorph]
+|-
+|Blue mold
+||''[[Penicillium italicum]]''
+|-
+|Botrytis blossom and twig blight, gummosis
+||
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|Branch knot
+||''[[Sphaeropsis tumefaciens]]''
+|-
+|Brown rot (fruit)
+||
+''[[Phytophthora citricola]]''
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora hibernalis]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+{{=}} ''[[Phytophthora parasitica]]''
+''[[Phytophthora palmivora]]''
+''[[Phytophthora syringae]]''
+|-
+|Charcoal root rot
+||''[[Macrophomina phaseolina]]''
+|-
+|Citrus black spot
+||''[[Guignardia citricarpa]]''
+|-
+|Damping-off
+||
+''[[Pythium]]'' sp.
+''[[Pythium aphanidermatum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium rostratum]]''
+''[[Pythium ultimum]]''
+''[[Pythium vexans]]''
+''[[Rhizoctonia solani]]''
+|-
+|Diplodia gummosis and stem-end rot
+||
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia theobromae]]''
+{{=}} ''[[Diplodia natalensis]]''
+''[[Botryosphaeria rhodina]]'' [teleomorph]
+|-
+|Dothiorella gummosis and rot
+||
+''[[Botryosphaeria ribis]]''
+''[[Dothiorella gregaria]]'' [anamorph]
+|-
+|Dry root rot complex
+||
+''[[Nectria haematococca]]''
+''[[Fusarium solani]]'' [anamorph]
+together with other wound-invading agents
+|-
+|Dry rot (fruit)
+||
+''[[Ashbya gossypii]]''
+''[[Nematospora coryli]]''
+|-
+|Fly speck
+||
+''[[Schizothyrium pomi]]''
+''[[Zygophiala jamaicensis]]'' [anamorph]
+|-
+|Fusarium rot (fruit)
+||''[[Fusarium]]'' spp.
+|-
+|Fusarium wilt
+||
+''[[Fusarium oxysporum f.sp. citri]]''
+|-
+|Gray mold (fruit)
+||''[[Botrytis cinerea]]''
+|-
+|Greasy spot and greasy spot rind blotch
+||
+''[[Mycosphaerella citri]]''
+''[[Stenella citri-grisea]]'' [anamorph]
+|-
+|Green mold
+||''[[Penicillium digitatum]]''
+|-
+|Heart rot
+||
+''[[Ganoderma applanatum]]''
+''[[Ganoderma brownii]]''
+''[[Ganoderma lucidum]]''
+and other basidiomycetes
+|-
+|Hendersonula branch wilt
+||''[[Hendersonula toruloidea]]''
+|-
+|Leaf spot
+||
+''[[Mycosphaerella horii]]''
+''[[Mycosphaerella lageniformis]]''
+|-
+|Mal secco
+||
+''[[Phoma tracheiphila]]''
+{{=}} ''[[Deuterophoma tracheiphila]]''
+|-
+|Mancha foliar de los citricos
+||''[[Alternaria limicola]]''
+|-
+|Melanose
+||''[[Diaporthe citri]]''
+''[[Phomopsis citri]]'' [anamorph]
+|-
+|Mucor fruit rot
+||
+''[[Mucor paronychia]]''
+''[[Mucor racemosus]]''
+|-
+|Mushroom root rot = shoestring root rot or oak root fungus
+||
+''[[Armillaria mellea]]''
+{{=}} ''[[Clitocybe tabescens]]''
+''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Phaeoramularia leaf and fruit spot
+||''[[Phaeoramularia angolensis]]''
+|-
+|Phymatotrichum root rot
+||''[[Phymatotrichopsis omnivora]]''
+|-
+|{{visible anchor|Phomopsis stem-end rot}}
+||
+''[[Phomopsis citri]]''
+''[[Diaporthe citri]]'' [teleomorph]
+|-
+|Phytophthora foot rot, gummosis and {{visible anchor|Phytophthora root rot|text=root rot}}
+||
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora hibernalis]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+{{=}} ''[[Phytophthora parasitica]]''
+''[[Phytophthora palmivora]]''
+''[[Phytophthora syringae]]''
+|-
+|Pink disease
+||
+''[[Erythricium salmonicolor]]''
+{{=}} ''[[Corticium salmonicolor]]''
+''[[Necator decretus]]'' [anamorph]
+|-
+|Pink mold
+||''[[Gliocladium roseum]]''
+|-
+|Pleospora rot
+||
+''[[Pleospora herbarum]]''
+''[[Stemphylium herbarum]]'' [anamorph]
+|-
+|Poria root rot
+||
+''[[Oxyporus latemarginatus]]''
+{{=}} ''[[Poria latemarginata]]''
+|-
+|Post bloom fruit drop
+||''[[Colletotrichum acutatum]]''
+|-
+|Powdery mildew
+||
+''[[Oidium tingitaninum]]''
+{{=}} ''[[Acrosporium tingitaninum]]''
+|-
+|Rhizopus rot
+||''[[Rhizopus stolonifer]]''
+|-
+|Rio Grande gummosis
+||
+Possibly ''[[Lasiodiplodia theobromae]]''
+''[[Hendersonula toruloidea]]''
+and other unknown agents
+|-
+|Rootlet rot
+||
+''[[Pythium rostratum]]''
+''[[Pythium ultimum]]''
+|-
+|Rosellinia root rot
+||''[[Rosellinia]]'' sp.
+|-
+|Scab
+||
+''[[Elsinoë fawcettii]]''
+''[[Sphaceloma fawcettii]]'' [anamorph]
+|-
+|Sclerotinia twig blight, fruit rot and root rot
+||''[[Sclerotinia sclerotiorum]]''
+|-
+|Septoria spot
+||''[[Septoria citri]]''
+|-
+|Sooty blotch
+||''[[Gloeodes pomigena]]''
+|-
+|Sour rot
+||
+''[[Geotrichum citri-aurantii]]''
+''[[Galactomyces citri-aurantii]]'' [teleomorph]
+''[[Galactomyces candidum]]''
+''[[Galactomyces geotrichum]]'' [teleomorph]
+|-
+|Sweet orange scab
+||''[[Elsinoë australis]]''
+|-
+|Thread blight
+||
+''[[Corticium stevensii]]''
+''[[Pellicularia koleroga]]''
+|-
+|Trichoderma rot
+||
+''[[Trichoderma viride]]''
+''[[Hypocrea]]'' sp. [teleomorph]
+|-
+|Twig blight
+||''[[Rhytidhysteron rufulum]]''
+|-
+|Ustulina root rot
+||
+''[[Ustulina deusta]]''
+''[[Nodulisporium]]'' sp. [anamorph]
+|-
+|Whisker mold
+||
+''[[Penicillium ulaiense]]''
+|-
+|White root rot
+||
+''[[Rosellinia]]'' sp.
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+''[[Rosellinia subiculata]]''
+|-
+|}
+
+==Nematodes, parasitic==
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Citrus slump nematode
+||
+''[[Pratylenchus coffeae]]''
+|-
+|Dagger nematode
+||
+''[[Xiphinema]]'' spp.
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus coffeae]]''
+''[[Pratylenchus vulnus]]''
+|-
+|Needle nematode
+||
+''[[Longidorus]]'' spp.
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne]]'' spp.
+|-
+|Sheath nematode
+||
+''[[Hemicycliophora]]'' spp.
+''[[Hemicycliophora arenaria]]''
+|-
+|Slow decline (citrus nematode)
+||
+''[[Tylenchulus semipenetrans]]''
+|-
+|Spreading decline (burrowing nematode)
+||
+''[[Radopholus similis]]''
+|-
+|Sting nematode
+||
+''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root nematode
+||
+''[[Paratrichodorus]]'' spp.
+|-
+|Stunt nematode
+||
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+==Viral diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Citrus mosaic
+||[[Satsuma dwarf-related virus]]
+|-
+|Bud union crease
+||Virus for some combinations, otherwise genetic or unknown
+|-
+|Citrus leaf rugose
+||genus [[Ilarvirus]], [[Citrus leaf rugose virus]] (CLRV)
+|-
+|Citrus yellow mosaic
+||genus [[Badnavirus]]
+|-
+|Crinkly leaf
+||[[Crinkly leaf virus]] (strain of [[Citrus variegation virus]])
+|-
+|Infectious variegation
+||genus [[Ilarvirus]], [[Citrus variegation virus]] (CVV)
+|-
+|Navel infectious mottling
+||[[Satsuma dwarf-related virus]]
+|-
+|Psorosis
+||[[Citrus psorosis virus]] (CPsV)
+|-
+|Satsuma dwarf
+||[[Satsuma dwarf virus]] (SDV)
+|-
+|Tatter leaf = citrange stunt
+||genus [[Capillovirus]], [[Citrus tatter leaf virus]] (probably a closely related strain of [[Apple stem grooving virus]] rather than a distinct virus
+|-
+|Tristeza = decline and stem pitting, seedling yellows
+||genus [[Closterovirus]], [[Citrus tristeza virus]] (CTV)
+|-
+|Citrus Leprosis Virus type I & II
+|}
+
+==Viroids and graft-transmissible pathogens [GTP]==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viroids and graft-transmissible pathogens [GTP]'''
+|-
+|Algerian navel orange virus
+||GTP
+|-
+|Blight = young tree decline, rough lemon decline
+||GTP
+|-
+|Blind pocket
+||GTP
+|-
+|Cachexia
+||Citrus cachexia viroid (Hostuviroid)
+|-
+|Chlorotic dwarf
+||White-fly transmitted GTP
+|-
+|Citrus dwarfing
+||Various viroids
+|-
+|Citrus vein enation (CVEV) = woody gall
+||GTP (possible luteovirus)
+|-
+|Citrus yellow mottle
+||GTP
+|-
+|Citrus yellow ringspot
+||GTP
+|-
+|Concave gum
+||GTP
+|-
+|Cristacortis
+||GTP
+|-
+|Exocortis
+||[[Citrus exocortis viroid]] (CEVd) [[Pospiviroidae]]
+|-
+|Fatal yellows
+||GTP
+|-
+|Gummy bark
+||GTP, possible viroid
+|-
+|Gum pocket and gummy pittings
+||GTP, possible viroid
+|-
+|Impietratura
+||GTP
+|-
+|Indian citrus ringspot
+||GTP
+|-
+|Leaf curl
+||GTP
+|-
+|Leathery leaf
+||GTP
+|-
+|Leprosis
+||GTP associated with Brevipalpus spp. mites
+|-
+|Measles
+||GTP
+|-
+|Milam stem-pitting
+||GTP
+|-
+|Multiple sprouting disease
+||GTP
+|-
+|Nagami kumquat disease
+||GTP
+|-
+|Ringspot diseases
+||Various GTPs
+|-
+|Xyloporosis = cachexia
+||Citrus cachexia viroid (Hostuviroid)
+|-
+|Yellow vein
+||GTP
+|-
+|Yellow vein clearing of lemon
+||GTP
+|-
+|}
+
+== Phytoplasmal and spiroplasmal diseases ==
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal and spiroplasmal diseases'''
+|-
+|Australian citrus dieback
+||''Unknown procaryote?''
+|-
+|[[Citrus stubborn disease|Stubborn]]
+||''[[Spiroplasma citri]]'' (spread by leafhoppers)
+|-
+|Witches’ broom of lime
+||[[Phytoplasma]]
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Algal disease (algal spot)
+||''Cephaleuros virescens''
+|-
+|Amachamiento
+||Unknown
+|-
+|Blossom-end clearing
+||Physiological
+|-
+|Chilling injury
+||Cold temperatures
+|-
+|Citrus blight
+||Unknown - pathogen suspected
+|-
+|Creasing
+||Nutritional (?)
+|-
+|Crinkle scurf
+||Genetic
+|-
+|Granulation
+||Physiological
+|-
+|Lemon sieve-tube necrosis
+||Unknown, but hereditary
+|-
+|Lime blotch = wood pocket
+||Inherited chimeral agent
+|-
+|Membranous stain
+||Cold temperatures
+|-
+|Mesophyll collapse
+||Unknown
+|-
+|Oleocellosis
+||Physiological
+|-
+|Postharvest pitting
+||Physiological
+|-
+|Puffing
+||Physiological
+|-
+|Rind breakdown
+||Physiological
+|-
+|Rind staining
+||Physiological
+|-
+|Rind stipple of grapefruit
+||Environmental
+|-
+|Rumple of lemon fruit
+||Unknown
+|-
+|Shell bark complex
+||Unknown - (viroid?)
+|-
+|Sooty mold (superficial, not pathogenic)
+||''Capnodium''
+''C. citricola''
+''Capnodium'' sp.
+|-
+|Stem-end rind breakdown
+||Physiological
+|-
+|Stylar-end breakdown of Tahiti lime
+||Physiological
+|-
+|Stylar-end rind breakdown
+||Physiological
+|-
+|Stylar-end rot
+||Physiological
+|-
+|Sunburn
+||Excessive heat and light
+|-
+|Tangerine dieback
+||Unknown
+|-
+|Water spot
+||Physiological
+|-
+|Woody galls on stems
+||Bruchophagus fellis (Citrus Gall Wasp)
+|-
+|Zebra skin
+||Physiological
+|-
+|}
+
+==References==
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Citrus.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{Citrus}}
+
+[[Category:Citrus diseases|*]]
+[[Category:Lists of plant diseases|Citrus]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_coconut_palm_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_coconut_palm_diseases.json
new file mode 100644
index 0000000..917fdd3
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_coconut_palm_diseases.json
@@ -0,0 +1,269 @@
+{{Short description|none}}
+List of '''diseases''' of '''coconut palms''' (''[[Cocos nucifera]]''):
+
+== Bacterial diseases ==
+[[File:Bad coconut.JPG|thumbnail|Coconut gone bad: the dark spots are very bitter and the whole meat has turned yellow. The first indication is a bitter taste of the water; this coconut should not be consumed.]]
+[[File:Coconut-InfectedTree-August2017.jpg|frameless|right|alt=A coconut with a large part of the meat missing]]
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|[[Bacterial soft rot|Bacterial bud rot]]
+||''[[Erwinia]]'' spp.
+|-
+|}
+
+== Fungal diseases ==
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Algal leaf spot
+||''[[Cephaleuros virescens]]''
+|-
+|[[Canker|Anthracnose]]
+||
+''[[Glomerella cingulata]]'' (''Colletotrichum gloeosporioides'', [[anamorph]])
+|-
+|Bitten leaf
+||
+''[[Ceratocystis paradoxa]]'' (''Chalara paradoxa'', anamorph)
+|-
+|''Bipolaris'' leaf spot
+||''[[Bipolaris incurvata]]''
+|-
+|Black scorch
+||
+''[[Ceratocystis paradoxa]]'' (''Chalara paradoxa'', ''Thielaviopsis paradoxa'', anamorphs)
+|-
+|Bud rot
+||
+''[[Fusarium solani]]''
+''[[Fusarium verticillioides|F. verticillioides]]''
+''[[Graphium (fungus)|Graphium]]'' sp.
+''[[Phytophthora katsurae]]''
+''[[Phytophthora nicotianae|Ph. nicotianae]]''
+''[[Phytophthora palmivora|Ph. palmivora]]''
+|-
+|Catacauma leaf spot
+||''[[Phaeochoropsis mucosa]]''
+|-
+|[[Damping off]]
+||
+''[[Fusarium]]'' spp.
+''[[Phytophthora]]'' spp.
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+|-
+|Dry basal rot
+||
+''[[Ceratocystis paradoxa]]'' (''Thielaviopsis paradoxa'', anamorph)
+|-
+|''Ganoderma'' [[butt rot]]
+||
+''[[Ganoderma orbiforme]]''
+''[[Ganoderma tornatum|G. tornatum]]''
+''[[Ganoderma zonatum|G. zonatum]]''
+|-
+|''Graphiola'' leaf spot
+||''[[Graphiola phoenicis]]''
+|-
+|Gray leaf blight
+||''[[Pestalotiopsis palmarum]]''
+|-
+|Koleroga
+||''[[Phytophthora palmivora]]''
+|-
+|Leaf [[blight]]
+||''[[Cytospora palmarum]]''
+|-
+|[[Leaf spot]]s
+||
+''[[Alternaria]]'' sp.
+''[[Botryosphaeria disrupta]]''
+''[[Capitorostrum cocoes]]''
+''[[Cercospora]]'' sp.
+''[[Cochliobolus lunatus]]''
+''[[Cylindrocladium pteridis]]''
+''[[Drechslera gigantea]]''
+''[[Drechslera halodes|D. halodes]]''
+''[[Epicoccum nigrum]]''
+''[[Helminthosporium]]'' sp.
+''[[Macrophoma]]'' sp.
+''[[Macrosporium cocos]]''
+''[[Melanconium]]'' sp.
+''[[Mycosphaerella palmicola]]''
+''[[Periconiella cocoes]]''
+''[[Pseudoepicoccum cocos]]''
+''[[Phomopsis]]'' sp.
+''[[Phyllosticta palmetto]]''
+''[[Ramularia necator]]''
+|-
+|Lethal bole rot
+||''[[Marasmiellus cocophilus]]''[{{Cite web |date=2015-10-14 |title=What Is Lethal Bole Rot: Learn About Lethal Bole Rot Disease |url=https://www.gardeningknowhow.com/edible/fruits/coconut/bole-rot-in-coconuts.htm |access-date=2025-08-02 |website=Gardening Know How |language=en}}][{{Cite journal |last1=Bock |first1=K. R. |last2=Ivory |first2=M. H. |last3=Adams |first3=B. R. |date=1970 |title=Lethal bole rot disease of coconut in East Africa |url=https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1744-7348.1970.tb04624.x |journal=Annals of Applied Biology |language=en |volume=66 |issue=3 |pages=453–464 |doi=10.1111/j.1744-7348.1970.tb04624.x |issn=1744-7348|url-access=subscription }}]
+|-
+|Lixa grande
+||''[[Camarotella costaricensis]]'', ''[[Coccostromopsis palmicola]]''
+|-
+|Lixa pequeña
+||''[[Camarotella acrocomiae]]''
+|-
+|Nut fall
+||
+''[[Fusarium verticillioides]]''
+''[[Graphium (fungus)|Graphium]]'' sp.
+''[[Phytophthora katsurae]]''
+''[[Phytophthora nicotianae|Ph. nicotianae]]''
+''[[Phytophthora palmivora|Ph. palmivora]]''
+|-
+|[[Powdery mildew]]
+||''[[Oidium (genus)|Oidium]]'' sp.
+|-
+|Queima das folhas
+||
+''[[Botryosphaeria cocogena]]''
+''[[Lasiodiplodia theobromae]]''
+|-
+|[[Root rot]]
+||
+''[[Fusarium]]'' spp.
+''[[Phytophthora]]'' spp.
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+|-
+|Stem bleeding
+||
+''[[Ceratocystis paradoxa]]'' (''Chalara paradoxa'', ''Thielaviopsis paradoxa'', anamorphs) [[Thielaviopsis]] spp.{{which|date=March 2023}}
+|-
+|''Stigmina'' leaf spot
+||''[[Stigmina palmivora]]''
+|-
+|Thread blight
+||
+''[[Ceratobasidium noxium]]''
+''[[Corticium penicillatum]]''
+''[[Pellicularia filamentosa]]''
+|-
+|}
+
+== Virus and viroid ==
+{| class="wikitable" style="clear"
+! colspan=2| '''diseases'''
+|-
+|[[Cadang-cadang]]
+||[[Coconut cadang-cadang viroid]]
+|-
+|Foliar decay
+||[[ssDNA virus]], identity uncertain
+|-
+|Tinangaja
+||[[Coconut tinangaja viroid]]
+|-
+|Natuna wilt
+||Not known
+|-
+|Premature decline
+||Not known
+|-
+|Soccoro wilt
+||Not known
+|-
+|}
+
+== [[Phytoplasma]]l diseases ==
+[[Image:Coconutlethalyellowing.jpg|thumb|A coconut palm with [[lethal yellowing]]]]
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal diseases'''
+|-
+|Awka disease/[[Texas phoenix palm decline]]
+||[[Candidatus Phytoplasma palmae|''Candidatus'' Phytoplasma palmae]]
+|-
+|Blast
+||[[Candidatus Phytoplasma|''Candidatus'' Phytoplasma]] suspected
+|-
+|Cape St. Paul wilt
+||''Ca. Phytoplasma''
+|-
+|Cedros wilt
+||''[[Phytomonas]]'' sp.
+|-
+|[[Heart rot]]
+||''Phytomonas'' sp.
+|-
+|Kaincope disease
+||''Ca. Phytoplasma''
+|-
+|Kalimantan wilt
+||''Ca. Phytoplasma'' suspected
+|-
+|Kribi disease
+||''Ca. Phytoplasma''
+|-
+|Lethal decline
+||''Ca. Phytoplasma''
+|-
+|Lethal disease
+||''Ca. Phytoplasma''
+|-
+|[[Lethal yellowing]]
+||''Ca. Phytoplasma''
+|-
+|Pudricion del cogollo
+||''Ca. Phytoplasma''
+|-
+|Root wilt disease
+||''Ca. Phytoplasma''
+|-
+|Stem necrosis
+||''Ca. Phytoplasma'' suspected
+|-
+|}
+
+== Miscellaneous diseases and disorders ==
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Bristle top
+||Not known
+|-
+|Dry bud rot
+||Not known, but possibly [[Vector (epidemiology)|vectored]] by the insects ''[[Sogatella kolophon]]'' and ''[[Sogatella cubana|S. cubana]]'' (''[[Tagosodes cubana]]'')
+|-
+|Finschafen disease
+||Not known
+|-
+|Frond rot
+||Physiological disorder
+|-
+|[[Bacterial leaf scorch|Leaf scorch]] decline
+||Not known
+|-
+|Malaysia wilt
+||Not known
+|-
+|Red ring disease
+||''[[Bursaphelenchus cocophilus]]'' ([[nematode]])
+|-
+|Porroca disease
+||not known
+|-
+|Coconut lethal crown atrophy
+||Not known
+|-
+|}
+
+== Further reading ==
+* This review...
+: {{ Cite journal | date=2016 | volume=7 | publisher=[[Frontiers Media SA]] | last1=Gurr | first1=Geoff | last2=Johnson | first2=Anne | last3=Ash | first3=Gavin | last4=Wilson | first4=Bree | last5=Ero | first5=Mark | last6=Pilotti | first6=Carmel | last7=Dewhurst | first7=Charles | last8=You | first8=Minsheng | journal=[[Frontiers in Plant Science]] | issn=1664-462X | s2cid=3187070 | pmid=27833616 | pmc=5080360 | doi=10.3389/fpls.2016.01521 | title=Coconut Lethal Yellowing Diseases: A Phytoplasma Threat to Palms of Global Economic and Social Significance | page=1521 | bibcode=2016FrPS....7.1521G | doi-access=free }}
+
+: ...cites this study:
+
+: {{ Cite journal | year=2010 | issue=5 | volume=94 | pages=636 | publisher=[[American Phytopathological Society]] (APS) | last1=Manimekalai | first1=R. | last2=Soumya | first2=V. | last3=Sathish | first3=R. | last4=Selvarajan | first4=R. | last5=Reddy | first5=K. | last6=Thomas | first6=G. | last7=Sasikala | first7=M. | last8=Rajeev | first8=G. | last9=Baranwal | first9=V. | issn=0191-2917 | journal=[[Plant Disease (journal)|Plant Disease]] | s2cid=73430885 | pmid=30754440 | doi=10.1094/pdis-94-5-0636b | title=Molecular Detection of 16SrXI Group Phytoplasma Associated with Root (Wilt) Disease of Coconut (''Cocos nucifera'') in India | bibcode=2010PlDis..94..636M }}
+
+== References ==
+{{Reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/CoconutPalm.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{coconut}}
+
+[[Category:Lists of plant diseases|Coconut palm]]
+[[Category:Coconut palm diseases]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_coffee_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_coffee_diseases.json
new file mode 100644
index 0000000..be85847
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_coffee_diseases.json
@@ -0,0 +1,153 @@
+{{Short description|none}}
+{{nofootnotes|date=July 2014}}
+This article is a '''list of diseases''' of [[coffee]] (''Coffea arabica, Coffea canephora'').
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Anthracnose
+||''[[Colletotrichum gloeosporioides]]''
+''[[Glomerella cingulata]]'' [teleomorph]
+
+''[[Colletotrichum kahawae]]''
+|-
+|Armillaria root rot
+||''[[Armillaria mellea]]''
+|-
+|Algal (red) leaf spot
+||''[[Cephaleuros virescens]]''
+|-
+|Bark disease
+||''[[Fusarium stilboides]]''
+''[[Gibberella stilboides]]'' [teleomorph]
+|-
+|Berry blotch
+||''[[Cercospora coffeicola]]''
+|-
+|Black (Rosellinia) root rot
+||''[[Rosellinia]]'' spp.
+|-
+|Black (seedling) root rot
+||''[[Rhizoctonia solani]]''
+|-
+|Brown blight
+||''[[Colletotrichum gloeosporioides]]''
+''[[Glomerella cingulata]]'' [teleomorph]
+''[[Colletotrichum kahawae]]''
+|-
+|Brown eye spot
+||''[[Cercospora coffeicola]]''
+|-
+|Brown leaf spot
+||''[[Phoma costaricensis]]''
+|-
+|Canker
+||''[[Ceratocystis fimbriata]]''
+''[[Phomopsis coffeae]]''
+|-
+|Collar rot
+||''[[Fusarium stilboides]]''
+''[[Gibberella stilboides]]'' [teleomorph]
+|-
+|Coffee berry disease
+||''[[Colletotrichum kahawae]]''
+|-
+|Die-back
+||''[[Ascochyta tarda]]''
+|-
+|Dry root rot
+||''[[Fusarium solani]]''
+|-
+|Leaf blight
+||''[[Ascochyta tarda]]''
+|-
+|Leaf spot
+||''[[Phyllosticta coffeicola]]''
+|-
+|Pink disease
+||''[[Phanerochaete salmonicolor]]''
+|-
+|Red blister disease (robusta coffee)
+||''[[Cercospora coffeicola]]''
+|-
+|Red root rot
+||''[[Ganoderma philippii]]''
+|-
+|Rust (orange or leaf rust)
+||''[[Hemileia vastatrix]]''
+|-
+|Rust (powdery or grey rust)
+||''[[Hemileia coffeicola]]''
+|-
+|South America leaf spot
+||
+''[[Mycena citricolor]]''
+''[[Omphalia flavida]]''
+''[[Stilbum flavidum]]'' [anamorph]
+|-
+|Thread blight
+||''[[Corticium koleroga]]''
+|-
+|Tip blast
+||''[[Phoma costaricensis]]''
+|-
+|Tracheomycosis (Wilt)
+||
+''[[Gibberella xylarioides]]''
+''[[Fusarium xylarioides]]'' [anamorph]
+|-
+|Wilt
+||
+''[[Ceratocystis fimbriata]]''
+''[[Fusarium oxysporum f.sp. coffea]]''
+|-
+|Warty berry
+||''[[Botrytis cinerea var. coffeae]]''
+|}
+
+==Insect pests==
+* [[Antestia]]: shield bugs
+* ''[[Hypothenemus hampei]]'': the coffee berry borer
+
+==Nematodes, parasitic==
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Root knot
+||
+''[[Meloidogyne]]'' spp.
+|-
+|}
+
+==Viral diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+||Coffee Ringspot Virus (CoRSV)
+|Virus [[Dichorhavirus]]
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+* [[Leaf miners]] (moths) - [[Leucoptera caffeina]], Leucoptera coffeella
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Hot and cold disease
+||Physiologic effect of exposure to extremes of temperature – common at high altitudes
+
+|-
+|Physiological effect of overbearing
+||Often exacerbated by rust
+|-
+|}
+
+==References==
+* [https://web.archive.org/web/20150627081459/https://www.plantvillage.com/en/topics/coffee/infos/diseases_and_pests_description_uses_propagation Extensive details and images, including on coffee rust epidemic, also in French, Spanish and Portuguese]
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Coffee.aspx Common Names of Diseases, The American Phytopathological Society]
+* [https://web.archive.org/web/20120207121850/http://www.ismpminet.org/Resources/common/names/coffee.asp Common Names of Plant Diseases, International Society for Molecular Plant-Microbe Interactions]{{Registration required}}
+
+[[Category:Coffee diseases|*]]
+[[Category:Lists of plant diseases|Coffee]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_cucurbit_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_cucurbit_diseases.json
new file mode 100644
index 0000000..173fd70
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_cucurbit_diseases.json
@@ -0,0 +1,312 @@
+{{Short description|none}}
+{{Refimprove|date = January 2014}}
+
+This article is a '''list of diseases''' of [[cucurbits]] (''Citrullus'' spp., ''Cucumis'' spp., ''Cucurbita'' spp., and others).
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Angular leaf spot
+||''[[Pseudomonas amygdali]]'' pv. ''lachrymans''
+|-
+|Bacterial fruit blotch/seedling blight
+||''[[Acidovorax avenae]]'' subsp. ''citrulli'' = ''Pseudomonas pseudoalcaligenes'' subsp. ''citrulli''
+|-
+|Bacterial leaf spot
+||''[[Xanthomonas campestris]]'' pv. ''cucurbitae''
+|-
+|Bacterial rind necrosis
+||''[[Erwinia]]'' spp.
+|-
+|[[Bacterial soft rot]]
+||''Erwinia carotovora'' subsp. ''carotovora''
+|-
+|Bacterial wilt
+||''Erwinia tracheiphila''
+|-
+|Brown spot
+||''Erwinia ananas''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria leaf blight
+||''[[Alternaria cucumerina]]''
+|-
+|Alternaria leaf spot
+||
+''[[Alternaria alternata f.sp. cucurbitae]]''
+|-
+|Anthracnose (stem, leaf and fruit)
+||
+''[[Colletotrichum orbiculare]]''
+{{=}} ''[[Colletotrichum lagenarium]]''
+''[[Glomerella lagenarium]]'' [teleomorph]
+|-
+|Belly rot
+||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Black root rot
+||''[[Thielaviopsis basicola]]''
+|-
+|Blue mold rot
+||
+''[[Penicillium]]'' spp.
+''[[Penicillium digitatum]]''
+|-
+|Cephalosporium root and hypocotyl rot, stem streak and dieback
+||
+''[[Acremonium]]'' spp.
+{{=}} ''[[Cephalosporium]]'' spp.
+|-
+|Cercospora leaf spot
+||''[[Cercospora citrullina]]''
+|-
+|Charcoal rot
+Vine decline and fruit rot
+||''[[Macrophomina phaseolina]]''
+|-
+|Choanephora fruit rot
+||''[[Choanephora cucurbitarum]]''
+|-
+|Collapse of melon
+||
+''[[Monosporascus eutypoides]]''
+{{=}} ''[[Bitrimonospora indica]]''
+|-
+|Corynespora blight/target spot
+||''[[Corynespora cassiicola]]''
+|-
+|Crater rot (fruit)
+||''[[Myrothecium roridum]]''
+|-
+|Crown and foot rot
+||
+''[[Fusarium solani]]''
+{{=}} ''[[Haematonectria haematococca]]''
+''[[Nectria haematococca]]'' [teleomorph]
+|-
+|Damping-off
+||
+''[[Acremonium]]'' spp.
+''[[Fusarium]]'' spp.
+''[[Fusarium equiseti]]''
+''[[Gibberella intricans]]''[teleomorph]
+''[[Phytophthora]]'' sp.
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+''[[Thielaviopsis basicola]]''
+Other fungi
+|-
+|Downy mildew
+||''[[Pseudoperonospora cubensis]]''
+|-
+|Fusarium fruit rot
+||
+''[[Fusarium equiseti]]''
+{{=}} ''[[Fusarium roseum f. gibbosum]]''
+''[[Fusarium graminearum]]''
+''[[Gibberella zeae]]'' [teleomorph]
+''[[Fusarium semitectum]]''
+''[[Fusarium solani f. sp. cucurbitae]]''
+''[[Fusarium]]'' spp.
+|-
+|Fusarium wilt
+||
+''[[Fusarium oxysporum]]''
+(with these formae speciales:)
+''[[Fusarium oxysporum f.sp. benincasae]]''
+''[[Fusarium oxysporum f.sp. cucumerinum]]''
+''[[Fusarium oxysporum f.sp. lagenariae]]''
+''[[Fusarium oxysporum f.sp. luffae]]''
+''[[Fusarium oxysporum f.sp. melonis]]''
+''[[Fusarium oxysporum f.sp. momordicae]]''
+''[[Fusarium oxysporum f.sp. niveum]]''
+|-
+|Gray mold
+||
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|[[Gummy stem blight]] (vine decline)
+||
+''[[Didymella bryoniae]]''
+{{=}} ''[[Mycosphaerella melonis]]''
+''[[Phoma cucurbitacearum]]'' [anamorph]
+|-
+|Lasiodiplodia vine decline/fruit rot
+||
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Diplodia natalensis]]''
+|-
+|Monosporascus root rot/Myrothecium canker (black canker)
+||
+''[[Monosporascus cannonballus]]''
+''[[Myrothecium roridum]]''
+|-
+|Net spot
+||''[[Leandria momordicae]]''
+|-
+|Phoma blight
+||
+''[[Phoma exigua var. exigua]]''
+{{=}} ''[[Ascochyta phaseolorum]]''
+|-
+|Purple stem
+||
+''[[Diaporthe melonis]]''
+''[[Phomopsis cucurbitae]]'' [teleomorph]
+|-
+|Phomopsis black stem
+||''[[Phomopsis sclerotioides]]''
+|-
+|Phyllosticta leaf spot
+||''[[Phyllosticta cucurbitacearum]]''
+|-
+|Phytophthora root rot
+||
+''[[Phytophthora]]'' spp.
+''[[Phytophthora capsici]]''
+|-
+|Pink mold rot
+||''[[Trichothecium roseum]]''
+|-
+|Plectosporium blight
+||''[[Plectosporium tabacinum]]''
+|-
+|Powdery mildew
+||
+''[[Podosphaera xanthii]]'' complex
+''[[Golovinomyces tabaci]]''
+|-
+|Pythium fruit rot (cottony leak)
+||''[[Pythium]]'' spp.
+|-
+|Rhizopus soft rot (fruit)
+||
+''[[Rhizopus stolonifer]]''
+{{=}} ''[[Rhizopus nigricans]]''
+|-
+|Scab/gummosis
+||''[[Cladosporium cucumerinum]]''
+|-
+|Sclerotinia stem rot
+||''[[Sclerotinia sclerotiorum]]''
+|-
+|Septoria leaf blight
+||''[[Septoria cucurbitacearum]]''
+|-
+|Southern blight (Sclerotium fruit and stem rot)
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Sudden wilt
+||''[[Pythium aphanidermatum]]''
+|-
+|Ulocladium leaf spot
+||''[[Ulocladium consortiale]]''
+|-
+|Verticillium wilt
+||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae]]''
+|-
+|Web blight
+||''[[Rhizoctonia solani]]''
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Air pollution injury
+||Ozone, sulfur dioxide and others
+|-
+|Bitter fruit
+||Sunburn injury, physiologic stress
+|-
+|Blossom end rot
+||Physiological disorder, calcium deficiency, moisture imbalance
+|-
+|Bottle neck of fruit
+||Incomplete pollination
+|-
+|Measles
+||Physiological disorder, salt toxicity
+|-
+|Sandburn
+||Physiological disorder
+|-
+|Sunscald (fruit)
+||Excessive or intense direct heat/ solar injury
+|-
+|Windburn
+||Physiological disorder
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger, American
+||
+''[[Xiphinema americanum]]''
+|-
+|Lesion
+||
+''[[Pratylenchus]]'' spp.
+|-
+|Pin
+||
+''[[Paratylenchus]]'' spp.
+|-
+|Reniform
+||
+''[[Rotylenchulus reniformis]]''
+|-
+|Ring
+||
+''[[Circonemella]]'' spp.
+|-
+|Root-knot
+||
+''[[Meloidogyne]]'' spp.
+|-
+|Spiral
+||
+''[[Helicotylenchus]]'' spp.
+|-
+|Sting
+||
+''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root
+||
+''[[Paratrichodorus minor]]''
+|-
+|Stunt
+||
+''[[Tylenchorhynchus claytoni]]''
+|-
+|}
+
+==References==
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Cucurbits.aspx Common Names of Diseases, The American Phytopathological Society]
+* [https://vegetablemdonline.ppath.cornell.edu/DiagnosticKeys/CucKey.html Cucurbit Diagnostic Key, The Cornell Plant Pathology Vegetable Disease Web Page]
+* [https://vegetablemdonline.ppath.cornell.edu/factsheets/Cucurbit_List.htm Cucurbit Diseases (Fact Sheets and Information Bulletins), The Cornell Plant Pathology Vegetable Disease Web Page]
+* [http://www.ncsu.edu/project/cucurbitkeys/opening_page.htm Lucid Key to Diagnosing Postharvest Diseases of Cantaloupe]
+
+[[Category:Lists of plant diseases|Cucurbit]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_grape_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_grape_diseases.json
new file mode 100644
index 0000000..c7f89cf
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_grape_diseases.json
@@ -0,0 +1,304 @@
+{{Short description|None}}
+
+[[File:Phylloxera cartoon.png|right|thumb|A cartoon from ''[[Punch (magazine)|Punch]]'' from 1890: ''The [[phylloxera]], a true gourmet, finds out the best vineyards and attaches itself to the best wines. ''[[Punch (magazine)|''Punch magazine'']], 6 Sep. 1890.]]
+This is a '''list of diseases of [[grape]]s''' (''Vitis'' spp.).
+
+==Bacterial diseases==
+[[Image:Homalodisca vitripennis 1355010.jpg|right|150px|thumb|[[Glassy-winged sharpshooter]], the primary carrier of PD]]
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Happy Disease (bacterial necrosis)
+||''[[Xylophilus ampelinus]]'' = ''Xanthomonas ampelina''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|Pierce's Disease (PD)
+||''[[Xylella fastidiosa]]''
+|-
+|Bacterial inflorescence rot [{{cite web|last1=Wecket|first1=Melanie|title=Bacterial rot of grapevine caused by Pseudomonas syringae.|url=https://www.youtube.com/watch?v=mCmOBuedd1U |archive-url=https://ghostarchive.org/varchive/youtube/20211214/mCmOBuedd1U |archive-date=2021-12-14 |url-status=live|website=NSW DPI Agriculture|date=15 November 2016 |publisher=National Wine and Grape Industry Centre|access-date=13 October 2017}}{{cbignore}}]
+||''[[Pseudomonas syringae]]''
+|}
+
+==Fungal diseases==
+[[Image:Grapeanthracnose.jpg|right|thumb|150px|Bird's eye (''Anthracnose'') rot|alt=The effects of Bird's eye (or ''Anthracnose'') rot]]
+[[Image:Botrytis riesling.jpg|right|thumb|150px|Botrytis or "Noble rot"]]
+[[Image:Plasmopara viticola 000.jpg|right|thumb|150px|Downy mildew|alt=The effects of downy mildew on a grape leaf]]
+[[Image:UncinulaNecatorOnGrapes.jpg|right|thumb|150px|Powdery mildew|alt=Powdery mildew on grapes]]
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria rot
+||''[[Alternaria alternata]]''
+|-
+|Angular leaf scorch
+||
+''[[Pseudopezicula tetraspora]]''
+''[[Phialophora]]''-type (anamorph)
+|-
+|Angular leaf spot
+||
+''[[Mycosphaerella angulata]]''
+''[[Cercospora brachypus]]'' [anamorph]
+|-
+|Anthracnose and bird's-eye rot
+||
+''[[Elsinoë ampelina]]''
+''Sphaceloma ampelinum'' [anamorph]
+|-
+|Armillaria root rot (shoestring root rot)
+||
+''[[Armillaria mellea]]''
+''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Aspergillus rot
+||''[[Aspergillus niger]]''
+|-
+|Black rot of grapes
+||''[[Guignardia bidwellii]]''
+|-
+|Botrytis (Grey Rot or Noble Rot)
+||''[[Botrytis cinerea]]''
+|-
+|Bot canker
+||''[[Lasiodiplodia theobromae]]''
+''[[Botryosphaeria rhodina]]'' (anamorph)
+|-
+|Ripe rot[{{Cite journal|last1=Dowling|first1=Madeline|last2=Peres|first2=Natalia|last3=Villani|first3=Sara|last4=Schnabel|first4=Guido|date=2020|title=Managing Colletotrichum on Fruit Crops: A "Complex" Challenge|journal=Plant Disease|language=en|volume=104|issue=9|pages=2301–2316|doi=10.1094/PDIS-11-19-2378-FE|pmid=32689886 |s2cid=219479598 |issn=0191-2917|doi-access=free|bibcode=2020PlDis.104.2301D }}]
+|''[[Colletotrichum acutatum]]'' [[species complex]][{{Cite journal|last1=Damm|first1=U.|last2=Cannon|first2=P. F.|last3=Woudenberg|first3=J. H. C.|last4=Crous|first4=P. W.|date=2012|title=The Colletotrichum acutatum species complex|journal=Studies in Mycology|series=complex species or species complexes?|language=en|volume=73|issue=1 |pages=37–113|doi=10.3114/sim0010|issn=0166-0616|pmc=3458416|pmid=23136458}}]
+
+* ''[[Colletotrichum fioriniae|C. fioriniae]]''[{{Cite journal|last1=Kepner|first1=Cody|last2=Swett|first2=Cassandra L.|date=2018|title=Previously unrecognized diversity within fungal fruit rot pathosystems on Vitis vinifera and hybrid white wine grapes in Mid-Atlantic vineyards|url=https://link.springer.com/10.1007/s13313-017-0538-4|journal=Australasian Plant Pathology|language=en|volume=47|issue=2|pages=181–188|doi=10.1007/s13313-017-0538-4|bibcode=2018AuPP...47..181K |s2cid=4435220 |issn=0815-3191|url-access=subscription}}]
+* ''C. godetiae''
+* ''C. citri''
+* ''C. nymphaeae''
+
+''[[Colletotrichum gloeosporioides]]'' [[species complex]][{{Cite journal|last1=Weir|first1=B. S.|last2=Johnston|first2=P. R.|last3=Damm|first3=U.|date=2012|title=The Colletotrichum gloeosporioides species complex|journal=Studies in Mycology|series=complex species or species complexes?|language=en|volume=73|issue=1 |pages=115–180|doi=10.3114/sim0011|issn=0166-0616|pmc=3458417|pmid=23136459}}]
+
+* ''C. viniferum''
+* ''C. gloeosporioides'' sensu stricto
+* ''C. fructicola''
+* ''C. siamense''
+* ''C. hebeiense''
+* ''C. aenigma''
+* ''C. clidemiae''
+|}
+
+==Miscellaneous diseases and disorders==
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Berry rot
+||Yeasts
+|-
+|Black measles
+||Presumably toxins from wood-rotting fungi; see [[Wood-decay fungus|Wood rot]] (decay)
+|-
+|[[Chlorosis]]
+||Iron deficiency
+|-
+|Esca ([[Apoplexy]])
+||Presumably toxins from wood-rotting fungi; see [[Wood-decay fungus|Wood rot]] (decay)
+|-
+|[[Fasciation]]
+||Genetic disorder
+|-
+|Little leaf
+||[[Zinc deficiency (plant disorder)|Zinc deficiency]]
+|-
+|Oxidant stipple
+||[[Ozone]]
+|-
+|Rupestris speckle
+||Physiological disorder
+|-
+|Stem necrosis (water berry, grape peduncle necrosis)
+||Physiological disorder
+|-
+|}
+
+==Nematodes, parasitic==
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Citrus
+||
+''[[Tylenchulus semipenetrans]]''
+|-
+|Dagger, American
+||
+''[[Xiphinema americanum]]''
+|-
+|Dagger
+||
+''[[Xiphinema]]'' spp.
+''[[Xiphinema index]]''
+|-
+|Lesion
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus vulnus]]''
+|-
+|Needle
+||
+''[[Longidorus]]'' spp.
+|-
+|Pin
+||
+''[[Paratylenchus hamatus]]''
+|-
+|Reniform
+||
+''[[Rotylenchulus]]'' spp.
+|-
+|Ring
+||
+''[[Mesocriconema xenoplax]]''
+|-
+|Root-knot
+||
+''[[Meloidogyne arenaria]]''
+''[[Northern root-knot nematode|Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+|-
+|Spiral
+||
+''[[Helicotylenchus]]'' spp.
+|-
+|Stubby-root
+||
+''[[Paratrichodorus minor]]''
+|-
+|Stunt
+||
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+==Phytoplasma, virus and viruslike diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Virus and viruslike diseases'''
+|-
+|Alfalfa mosaic
+||[[Alfalfa mosaic virus]]
+|-
+|Arabis mosaic
+||[[Arabis mosaic virus]]
+|-
+|Artichoke Italian latent
+||[[Artichoke Italian latent virus]]
+|-
+|Asteroid mosaic
+||Undetermined, viruslike
+|-
+|Bois noir/black wood disease
+||''[[Candidatus Phytoplasma solani]]''
+|-
+|Bratislava mosaic
+||[[Bratislava mosaic virus]]
+|-
+|Broad bean wilt
+||[[Broad bean wilt virus]]
+|-
+|Corky bark
+||[[Grapevine virus B]]
+|-
+|Enation
+||Undetermined, viruslike
+|-
+|Fanleaf degeneration (infectious degeneration and decline)
+||[[Grapevine fanleaf virus]]
+|-
+|[[Flavescence dorée]]
+||MLO
+|-
+|Fleck (Marbrure)
+||Undetermined, viruslike
+|-
+|Grapevine Bulgarian latent
+||[[Grapevine Bulgarian latent virus]]
+|-
+|Grapevine chrome mosaic
+||[[Grapevine chrome mosaic virus]]
+|-
+|[[Grapevine red blotch]]
+||[[Grapevine red blotch-associated virus]]
+|-
+|[[Grapevine yellows]]
+||phytoplasma
+|-
+|Leafroll
+||[[Grapevine leafroll-associated viruses]] (Closteroviridae)
+|-
+|Peach rosette mosaic virus decline
+||[[Peach rosette mosaic virus]]
+|-
+|Petunia asteroid mosaic
+||[[Petunia asteroid mosaic virus]]
+|-
+|Raspberry ringspot
+||[[Raspberry ringspot virus]]
+|-
+|Rupestris stem pitting
+||Undetermined, viruslike
+|-
+|Shoot necrosis
+||Undetermined, viruslike
+|-
+|Sowbane mosaic
+||[[Sowbane mosaic virus]]
+|-
+|Strawberry latent ringspot
+||[[Strawberry latent ringspot virus]]
+|-
+|Tobacco mosaic
+||[[Tobacco mosaic virus]]
+|-
+|Tobacco necrosis
+||[[Tobacco necrosis virus]]
+|-
+|Tobacco ringspot virus decline
+||[[Tobacco ringspot virus]]
+|-
+|Tomato black ring
+||[[Tomato black ring virus]]
+|-
+|Tomato ringspot virus decline
+||[[Tomato ringspot virus]]
+|-
+|Vein mosaic
+||Undetermined, viruslike
+|-
+|Yellow speckle
+||Viroid
+|-
+|}
+
+==See also==
+*''[[Ampeloglypter ater]]''
+*''[[Ampeloglypter sesostris]]''
+*''[[Ampelomyia viticola]]''
+*''[[Eupoecilia ambiguella]]''
+*[[Great French Wine Blight]]
+*[[Japanese beetle]]
+*''[[Maconellicoccus hirsutus]]''
+*''[[Otiorhynchus cribricollis]]''
+*''[[Paralobesia viteana]]''
+*''[[Pseudococcus maritimus]]''
+*''[[Pseudococcus viburni]]''
+*''[[Zenophassus]]''
+
+==References==
+{{Reflist}}
+
+==External links==
+* [http://www.extension.org/pages/54498/grapes-production-vineyard-ipm#Diseases Diseases of Grapevines] {{Webarchive|url=https://web.archive.org/web/20110606084936/http://www.extension.org/pages/54498/grapes-production-vineyard-ipm#Diseases |date=2011-06-06 }}, information from Cooperative Extension
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Grape.aspx Common Names of Diseases, The American Phytopathological Society]
+* [https://web.archive.org/web/20100714134421/http://www.safecrop.org/english/output/proceedings.html SAFECROP - Proceedings of the 5th International Workshop on Grapevine Downy and Powdery Mildew]
+* [https://arquivo.pt/wayback/20160523145652/http://winegrapes.wsu.edu/virology/ virus diseases of the grapevine]
+
+{{Viticulture}}
+
+[[Category:Grape diseases|*]]
+[[Category:Lists of plant diseases|Grape]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_lettuce_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_lettuce_diseases.json
new file mode 100644
index 0000000..a558384
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_lettuce_diseases.json
@@ -0,0 +1,216 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[lettuce]] (''Lactuca sativa'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial leaf spot and head rot
+||''[[Xanthomonas campestris]]'' pv. ''vitians''
+|-
+|[[Bacterial soft rot]]
+||''Erwinia carotovora''
+''[[Pseudomonas marginalis]]''
+|-
+|Corky root
+||''Rhizomonas'' spp.
+''R. suberifaciens''
+|-
+|Varnish spot
+||''[[Pseudomonas cichorii]]''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria leaf spot
+||
+''[[Alternaria sonchi]]''
+|-
+|Anthracnose
+||
+''[[Microdochium panattonianum]]''
+{{=}} ''[[Marssonina panattoniana]]''
+|-
+|Bottom rot
+||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Cercospora leaf spot
+||
+''[[Cercospora longissima]]''
+|-
+|Damping-off, Pythium
+||
+''[[Pythium]]'' spp.
+''[[Pythium ultimum]]''
+|-
+|Damping-off, Rhizoctonia
+||
+''[[Rhizoctonia solani]]''
+|-
+|Downy mildew
+||
+''[[Bremia lactucae]]''
+''[[Plasmopara lactucae-radicis]]''
+|-
+|Drop (Sclerotinia rot)
+||
+''[[Sclerotinia sclerotiorum]]''
+''[[Sclerotinia minor]]''
+|-
+|Gray mold
+||
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|Phymatotrichum root rot (cotton root rot)
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+|Powdery mildew
+||
+''[[Erysiphe cichoracearum]]''
+|-
+|Rust
+||
+''[[Puccinia dioicae]]''
+{{=}} ''[[Puccinia extensicola var. hieraciata]]''
+|-
+|Septoria leaf spot
+||
+''[[Septoria lactucae]]''
+|-
+|Southern blight
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Stemphylium leaf spot
+||
+''[[Stemphylium botryosum]]''
+''[[Pleospora tarda]]'' [teleomorph]
+|-
+|Wilt and leaf blight
+||
+''[[Pythium tracheiphilum]]''
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Brown stain
+||Physiological, excess CO2
+|-
+|Russet spotting
+||Physiological, excess ethylene
+|-
+|Tipburn
+||Physiological, Ca** deficiency and high temperature
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|False root knot
+||
+''[[Nacobbus aberrans]]''
+|-
+|Lesion
+||
+''[[Pratylenchus]]'' spp.
+|-
+|Needle
+||
+''[[Longidorus]]'' spp.
+|-
+|Root-knot
+||
+''[[Meloidogyne]]'' spp.
+|-
+|Spiral
+||
+''[[Rotylenchus robustus]]''
+|-
+|Stunt
+||
+''[[Melinius brevidens]]''
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+==Phytoplasma, Viral and viroid diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral and viroid diseases'''
+|-
+|Big vein
+||[[Lettuce big-vein disease|Lettuce big vein virus]]
+|-
+|Calico
+||[[Alfalfa mosaic virus]]
+[[Tobacco ringspot virus]]
+|-
+|Lettuce dieback[{{cite web | url=http://www2.ipm.ucanr.edu/agriculture/lettuce/lettuce-dieback/ | title=Lettuce Dieback | website=[[University of California Agriculture and Natural Resources]]}}]
+|''{{visible anchor|Lettuce necrotic stunt virus}}''
+|-
+|Internal rib necrosis
+||[[Lettuce mosaic virus]]
+|-
+|Mosaic
+||[[Lettuce mosaic virus]]
+[[Bidens mosaic virus]]
+[[Cucumber mosaic virus]]
+[[Turnip mosaic virus]]
+|-
+|Necrotic yellows
+||[[Lettuce necrotic yellows virus]]
+|-
+|Ring necrosis
+||Presumed viral agent (not identified)
+|-
+|Rusty brown discoloration
+||Accentuated by [[lettuce mosaic virus]]
+|-
+|Speckles
+||[[Lettuce speckles virus]] and [[beet western yellows virus]]
+|-
+|Stunt
+||[[Beet yellow stunt virus]]
+|-
+|Virescence
+||[[Aster yellows]] [[phytoplasma]]
+Beet leafhopper-transmitted virescence phytoplasma
+|-
+|Wilt
+||[[Broadbean wilt virus]]
+[[Tomato spotted wilt virus]]
+|-
+|Yellow spot
+||[[Tobacco rattle virus]]
+|-
+|Yellows
+||[[Beet western yellows virus]]
+|-
+|Other
+||[[Sowthistle yellow vein virus]]
+|-
+|}
+
+==References==
+*[https://web.archive.org/web/20070202090425/http://www.apsnet.org/online/common/names/lettuce.asp Common Names of Diseases, The American Phytopathological Society]
+{{reflist}}
+
+[[Category:Lists of plant diseases|Lettuce]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_maize_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_maize_diseases.json
new file mode 100644
index 0000000..de494ed
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_maize_diseases.json
@@ -0,0 +1,650 @@
+{{Short description|none}}
+== Bacterial diseases ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial leaf blight and stalk rot||
+''[[Pseudomonas avenae]]'' subsp. ''avenae''
+|-
+|Bacterial leaf spot||
+''[[Xanthomonas campestris]]'' pv. ''holcicola''
+|-
+|Bacterial leaf streak of corn||
+''[[Xanthomonas vasicola]] pv. vasculorum''
+|-
+|Bacterial stalk rot||''Enterobacter dissolvens'' = ''Erwinia dissolvens''
+|-
+|Bacterial stalk and top rot||
+''[[Erwinia carotovora]]'' subsp. ''carotovora''
+''[[Erwinia chrysanthemi]]'' pv. ''zeae''
+|-
+|Bacterial stripe||
+''[[Pseudomonas andropogonis]]''
+|-
+|Chocolate spot||
+''[[Pseudomonas syringae]]'' pv. ''coronafaciens''
+|-
+|Goss's bacterial wilt and blight (leaf freckles and wilt)[{{cite web | title=Goss's Wilt of Corn | website=[[Crop Protection Network]] | url=http://cropprotectionnetwork.org/resources/articles/diseases/gosss-wilt-of-corn | access-date=2021-07-15}}]||
+[[Clavibacter michiganensis subsp. nebraskensis|''Clavibacter michiganensis'' subsp. ''nebraskensis'']][{{cite journal | last1=Eichenlaub | first1=Rudolf | last2=Gartemann | first2=Karl-Heinz | title=The ''Clavibacter michiganensis'' Subspecies: Molecular Investigation of Gram-Positive Bacterial Plant Pathogens | journal=[[Annual Review of Phytopathology]] | publisher=[[Annual Reviews (publisher)|Annual Reviews]] | volume=49 | issue=1 | date=2011-09-08 | issn=0066-4286 | doi=10.1146/annurev-phyto-072910-095258 | pages=445–464 | s2cid=207707582 | pmid=21438679}}]
+{{=}} ''Corynebacterium michiganense'' pv. ''nebraskense''
+|-
+|Holcus spot||
+''[[Pseudomonas syringae]]'' pv. ''syringae van Hall''
+|-
+|Purple leaf sheath||
+''Hemiparasitic bacteria''
+|-
+|Seed rot-seedling blight||
+''[[Bacillus subtilis]]''
+|-
+|[[Stewart's wilt|Stewart's disease (bacterial wilt)]]||
+''Erwinia stewartii''
+|-
+|Corn stunt (achapparramiento, maize stunt, Mesa Central or Rio Grande maize stunt)||
+''Spiroplasma kunkelii''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Anthracnose leaf blight
+Anthracnose stalk rot
+{{visible anchor|Anthracnose top dieback}}[{{cite web | title=Top dieback in corn: Is anthracnose the cause? | website=Integrated Crop Management [[Iowa State University Extension]] | date=2007-09-10 | url=http://crops.extension.iastate.edu/encyclopedia/top-dieback-corn-anthracnose-cause | access-date=2022-04-23}}][{{cite web | title=Stalk Rot Diseases Including Anthracnose Top Dieback Developing in Some Fields | website=[[CropWatch]] University of Nebraska-Lincoln | date=2016-09-09 | url=http://cropwatch.unl.edu/2016/stalk-rot-diseases-including-anthracnose-top-dieback-developing-some-fields | access-date=2022-04-23}}]
+||''[[Glomerella graminicola|Colletotrichum graminicola]]''
+''[[Glomerella graminicola]]'' [teleomorph]
+''[[Glomerella tucumanensis]]''
+''[[Glomerella falcatum]]'' [anamorph]
+|-
+|Aspergillus ear and kernel rot
+||''[[Aspergillus flavus]]''
+|-
+|Banded leaf and sheath spot
+||''[[Rhizoctonia solani]]'' {{=}} ''[[Rhizoctonia microsclerotia]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Black bundle disease
+||''[[Acremonium strictum]]'' {{=}} ''[[Cephalosporium acremonium]]''
+|-
+|Black kernel rot
+||''[[Lasiodiplodia theobromae]]'' {{=}} ''[[Botryodiplodia theobromae]]''
+|-
+|Borde blanco
+||''[[Marasmiellus]]'' sp.
+|-
+|Brown spot
+Black spot
+Stalk rot
+||''[[Physoderma maydis]]''
+|-
+|Cephalosporium kernel rot
+||''[[Acremonium strictum]]'' {{=}} ''[[Cephalosporium acremonium]]''
+|-
+|Charcoal rot
+||''[[Macrophomina phaseolina]]''
+|-
+|Corticium ear rot
+||''[[Thanatephorus cucumeris]]'' {{=}} ''[[Corticium sasakii]]''
+|-
+|Curvularia leaf spot
+||''[[Curvularia clavata]]''
+''[[Curvularia eragostidis|Curvularia eragrostidis]]'' {{=}} ''[[Curvularia maculan]]s''
+''[[Cochliobolus eragrostidis]]'' [teleomorph]
+''[[Curvularia inaequalis]]''
+''[[Curvularia intermedia]]''
+''[[Cochliobolus intermedius]]'' [teleomorph]
+''[[Curvularia lunata]]''
+''[[Cochliobolus lunatus]]'' [teleomorph]
+''[[Curvularia pallescens]]''
+''[[Cochliobolus pallescens]]'' [teleomorph]
+''[[Curvularia senegalensis]]''
+''[[Curvularia tuberculata]]''
+''[[Cochliobolus tuberculatus]]'' [teleomorph]
+|-
+|Didymella leaf spot
+||''[[Didymella exitalis]]''
+|-
+|Diplodia ear rot and stalk rot
+||''[[Diplodia frumenti]]''
+''[[Botryosphaeria festucae]]'' [teleomorph]
+|-
+|Diplodia ear rot
+Stalk rot
+Seed rot
+Seedling blight
+||''[[Diplodia maydis]]''
+|-
+|Diplodia leaf spot or leaf streak
+||''[[Stenocarpella macrospora]]'' {{=}} ''[[Diplodia macrospora]]''
+|-
+! colspan=2 | Downy mildews
+|-
+|Brown stripe downy mildew
+||''[[Sclerophthora rayssiae]]''
+|-
+|Crazy top downy mildew
+||''[[Sclerophthora macrospora]]'' {{=}} ''[[Sclerospora macrospora]]''
+|-
+|Green ear downy mildew
+Graminicola downy mildew
+||''[[Sclerospora graminicola]]''
+|-
+|Java downy mildew
+||''[[Peronosclerospora maydis]]'' {{=}} ''[[Sclerospora maydis]]''
+|-
+|Philippine downy mildew
+||''[[Peronosclerospora philippinensis]]'' {{=}} ''[[Sclerospora philippinensis]]''
+|-
+|Sorghum downy mildew
+||''[[Peronosclerospora sorghi]]'' {{=}} ''[[Sclerospora sorghi]]''
+|-
+|Spontaneum downy mildew
+||''[[Peronosclerospora spontanea]]'' {{=}} ''[[Sclerospora spontanea]]''
+|-
+|Sugarcane downy mildew
+||''[[Peronosclerospora sacchari]]'' {{=}} ''[[Sclerospora sacchari]]''
+|-
+! colspan=2 | ...
+|-
+|Dry ear rot
+Cob, kernel and stalk rot
+||''[[Nigrospora oryzae]]''
+''[[Khuskia oryzae]]'' [teleomorph]
+|-
+|Ear rots, minor
+||''[[Alternaria alternata]]'' {{=}} ''[[Alternaria tenuis]]''
+''[[Aspergillus glaucus]]''
+''[[Aspergillus niger]]''
+''[[Aspergillus]]'' spp.
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+''[[Cunninghamella]]'' sp.
+''[[Curvularia pallescens]]''
+''[[Doratomyces stemonitis]]'' {{=}} ''[[Cephalotrichum stemonitis]]''
+''[[Fusarium culmorum]]''
+''[[Gonatobotrys simplex]]''
+''[[Pithomyces maydicus]]''
+''[[Rhizopus microsporus]]''
+''[[Rhizopus stolonifer]]'' {{=}} ''[[Rhizopus nigricans]]''
+''[[Scopulariopsis brumptii]]''
+|-
+|Ergot
+Horse's tooth
+||''[[Claviceps gigantea]]''
+''[[Sphacelia]]'' sp. [anamorph]
+|-
+|Eyespot
+||''[[Aureobasidium zeae]]'' {{=}} ''[[Kabatiella zeae]]''
+|-
+|Fusarium ear and stalk rot
+||''[[Fusarium subglutinans]]'' {{=}} ''[[Fusarium moniliforme]]''
+|-
+|Fusarium kernel, root and stalk rot, seed rot and seedling blight
+||''[[Fusarium moniliforme]]''
+''[[Gibberella fujikuroi]]'' [teleomorph]
+|-
+|Fusarium stalk rot
+Seedling root rot
+||''[[Fusarium avenaceum]]''
+''[[Gibberella avenacea]]'' [teleomorph]
+|-
+|Gibberella ear and stalk rot
+||''[[Gibberella zeae]]''
+''[[Fusarium graminearum]]'' [anamorph]
+|-
+|Gray ear rot
+||''[[Botryosphaeria zeae]]'' {{=}} ''[[Physalospora zeae]]''
+''[[Macrophoma zeae]]'' [anamorph]
+|-
+|[[Corn grey leaf spot]]
+Gray leaf spot
+Cercospora leaf spot
+||''[[Cercospora sorghi]]'' {{=}} ''Cercospora sorghi''{{clarify|date=December 2021|reason=Why synonymise something with itself?}}
+''[[Cercospora zeae-maydis]]''[{{cite book | last1=Cairns | first1=J.E. | last2=Sonder | first2=K. | last3=Zaidi | first3=P.H. | last4=Verhulst | first4=N. | last5=Mahuku | first5=G. | last6=Babu | first6=R. | last7=Nair | first7=S.K. | last8=Das | first8=B. | last9=Govaerts | first9=B. | last10=Vinayan | first10=M.T. | last11=Rashid | first11=Z. | last12=Noor | first12=J.J. | last13=Devi | first13=P. | last14=San Vicente | first14=F. | last15=Prasanna | first15=B.M. | title=Advances in Agronomy | chapter=1 Maize Production in a Changing Climate: Impacts, Adaptation, and Mitigation Strategies | publisher=Elsevier | year=2012 | volume=114 | issn=0065-2113 | doi=10.1016/b978-0-12-394275-3.00006-7 | pages=1–58| isbn=9780123942753 | url=http://oceanrep.geomar.de/29964/1/Cairns%20et%20al.pdf }}][{{cite journal | last1=Tripathi | first1=Ashutosh | last2=Tripathi | first2=Durgesh Kumar | last3=Chauhan | first3=D.K. | last4=Kumar | first4=Niraj | last5=Singh | first5=G.S. | title=Paradigms of climate change impacts on some major food sources of the world: A review on current knowledge and future prospects | journal=[[Agriculture, Ecosystems & Environment]] | publisher=[[Elsevier]] | volume=216 | year=2016 | issn=0167-8809 | doi=10.1016/j.agee.2015.09.034 | pages=356–373}}]{{br}}
+''[[Cercospora zeina]]''
+|-
+|Helminthosporium root rot
+||''[[Exserohilum pedicellatum]]'' {{=}} ''[[Helminthosporium pedicellatum]]''
+''[[Setosphaeria pedicellata]]'' [teleomorph]
+|-
+|Hormodendrum ear rot
+[[Cladosporium ear rot]]
+||''[[Cladosporium cladosporioides]]'' {{=}} ''[[Hormodendrum cladosporioides]]''
+''[[Cladosporium herbarum]]''
+''[[Mycosphaerella tassiana]]'' [teleomorph]
+|-
+|Hyalothyridium leaf spot
+||''[[Hyalothyridium maydis]]''
+|-
+|Late wilt
+||''[[Cephalosporium maydis]]''
+|-
+|Leaf spots, minor
+||''[[Alternaria alternata]]''
+''[[Ascochyta maydis]]''
+''[[Ascochyta tritici]]''
+''[[Ascochyta zeicola]]''
+''[[Bipolaris victoriae]]'' {{=}} ''[[Helminthosporium victoriae]]''
+''[[Cochliobolus victoriae]]'' [teleomorph]
+''[[Cochliobolus sativus]]''
+''[[Bipolaris sorokiniana]]'' [anamorph] = ''Helminthosporium sorokinianum'' = ''H. sativum''
+''[[Epicoccum nigrum]]''
+''[[Exserohilum prolatum]]'' {{=}} ''[[Drechslera prolata]]''
+''[[Setosphaeria prolata]]'' [teleomorph]
+''[[Graphium penicillioides]]''
+''[[Leptosphaeria maydis]]''
+''[[Leptothyrium zeae]]''
+''[[Ophiosphaerella herpotricha]]''
+''[[Scolecosporiella]]'' sp. [anamorph]
+''[[Paraphaeosphaeria michotii]]''
+''[[Phoma]]'' sp.
+''[[Septoria zeae]]''
+''[[Septoria zeicola]]''
+''[[Septoria zeina]]''
+|-
+|Northern corn leaf blight
+White blast
+Crown stalk rot
+Stripe
+||''[[Setosphaeria turcica]]''
+''[[Exserohilum turcicum]]'' [anamorph] {{=}} ''[[Helminthosporium turcicum]]''
+|-
+|Northern corn leaf spot
+Helminthosporium ear rot (race 1)
+||''[[Cochliobolus carbonum]]''
+''[[Bipolaris zeicola]]'' [anamorph] {{=}} ''[[Helminthosporium carbonum]]''
+|-
+|Penicillium ear rot
+Blue eye
+Blue mold
+||''[[Penicillium]]'' spp.
+''[[Penicillium chrysogenum]]''
+''[[Penicillium expansum]]''
+''[[Penicillium oxalicum]]''
+|-
+|Phaeocytostroma stalk rot and root rot
+||''[[Phaeocytostroma ambiguum]]'' {{=}} ''[[Phaeocytosporella zeae]]''
+|-
+|Phaeosphaeria leaf spot
+||''[[Phaeosphaeria maydis]]'' {{=}} ''[[Sphaerulina maydis]]''
+|-
+|Physalospora ear rot
+Botryosphaeria ear rot
+||''[[Botryosphaeria festucae]]'' {{=}} ''[[Physalospora zeicola]]''
+''[[Diplodia frumenti]]'' [anamorph]
+|-
+|Purple leaf sheath
+||Hemiparasitic bacteria and fungi
+|-
+|Pyrenochaeta stalk rot and root rot
+||''[[Phoma terrestris]]'' {{=}} ''[[Pyrenochaeta terrestris]]''
+|-
+|Pythium root rot
+||''[[Pythium]]'' spp.
+''[[Pythium arrhenomanes]]''
+''[[Pythium graminicola]]''
+|-
+|Pythium stalk rot
+||''[[Pythium aphanidermatum]]'' {{=}} ''[[Pythium butleri]]''
+|-
+|Red kernel disease
+Ear mold, leaf and seed rot
+||''[[Epicoccum nigrum]]''
+|-
+|Rhizoctonia ear rot
+Sclerotial rot
+||''[[Waitea zeae]]''
+|-
+|Rhizoctonia root rot and stalk rot
+||''[[Rhizoctonia solani]]''
+''[[Waitea zeae]]''
+|-
+|Root rots, minor
+||''[[Alternaria alternata]]''
+''[[Cercospora sorghi]]''
+''[[Dictochaeta fertilis]]''
+''[[Fusarium acuminatum]]''
+''[[Gibberella acuminata]]'' [teleomorph]
+''[[Fusarium equiseti]]''
+''[[Gibberella intricans]]'' [teleomorph]
+''[[Fusarium oxysporum]]''
+''[[Fusarium pallidoroseum]]''
+''[[Fusarium poae]]''
+''[[Fusarium roseum]]''
+''[[Gibberella cyangena|Gibberella cyanogena]]''
+''[[Fusarium sulphureum]]'' [anamorph]
+''[[Microdochium bolleyi]]''
+''[[Mucor]]'' sp.
+''[[Periconia circinata]]''
+''[[Phytophthora cactorum]]''
+''[[Phytophthora drechsleri]]''
+''[[Phytophthora nicotianae]]''
+''[[Rhizopus arrhizus]]''
+|-
+|Rostratum leaf spot
+Helminthosporium leaf disease, ear and stalk rot
+||''[[Setosphaeria rostrata]]'' {{=}} ''[[Helminthosporium rostratum]]''
+|-
+|Rust, common corn
+||''[[Puccinia sorghi]]''
+|-
+|Rust, southern corn
+||''[[Puccinia polysora]]''
+|-
+|Rust, tropical corn
+||''[[Physopella pallescens]]''
+''[[Physopella zeae]]'' {{=}} ''[[Angiopsora zeae]]''
+|-
+|Sclerotium ear rot
+Southern blight
+||''[[Athelia rolfsii]]''
+|-
+|Seed rot-seedling blight
+||''[[Athelia rolfsii]]''
+''[[Bipolaris sorokiniana]]''
+''[[Bipolaris zeicola]]'' {{=}} ''[[Helminthosporium carbonum]]''
+''[[Diplodia maydis]]''
+''[[Exserohilum pedicillatum]]''
+''[[Exserohilum turcicum]]'' {{=}} ''[[Helminthosporium turcicum]]''
+''[[Fusarium avenaceum]]''
+''[[Fusarium culmorum]]''
+''[[Fusarium moniliforme]]''
+''[[Gibberella zeae]]''
+''[[Fusarium graminearum]]'' [anamorph]
+''[[Macrophomina phaseolina]]''
+''[[Penicillium]]'' spp.
+''[[Phomopsis]]'' spp.
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+''[[Spicaria]]'' spp.
+''[[Waitea zeae]]''
+|-
+|Selenophoma leaf spot
+||''[[Selenophoma]]'' sp.
+|-
+|Sheath rot
+||''[[Gaeumannomyces graminis]]''
+|-
+|Shuck rot
+||''[[Myrothecium gramineum]]''
+|-
+|Silage mold
+||''[[Monascus purpureus]]''
+''[[Monascus ruber]]''
+|-
+|[[Corn smut|Smut, common]]
+||''[[Ustilago zeae]]'' {{=}} ''[[Ustilago maydis]]''
+|-
+|Smut, false
+||''[[Ustilaginoidea virens]]''
+|-
+|Smut, head
+||''[[Sphacelotheca reiliana]]'' {{=}} ''[[Sporisorium holci-sorghi]]''
+|-
+|Southern corn leaf blight and stalk rot
+||''[[Cochliobolus heterostrophus]]''
+''[[Bipolaris maydis]]'' [anamorph] {{=}} ''[[Helminthosporium maydis]]''
+|-
+|Southern leaf spot
+||''[[Stenocarpella macrospora]]'' {{=}} ''[[Diplodia macrospora]]''
+|-
+|Stalk rots, minor
+||''[[Cercospora sorghi]]''
+''[[Fusarium episphaeria]]''
+''[[Fusarium merismoides]]''
+''[[Fusarium oxysporum]]''
+''[[Fusarium poae]]''
+''[[Fusarium roseum]]''
+''[[Fusarium solani]]''
+''[[Nectria haematococca]]'' [teleomorph]
+''[[Fusarium tricinctum]]''
+''[[Mariannaea elegans]]''
+''[[Mucor]]'' spp.
+''[[Rhopographus zeae]]''
+''[[Spicaria]]'' spp.
+|-
+|Storage rots
+||''[[Aspergillus]]'' spp.
+''[[Penicillium]]'' spp. and other fungi
+|-
+|Tar spot
+||''[[Phyllachora maydis]]'' ''[[Monographella maydis]]'' ''[[Coniothyrium phyllachorae]]''[{{cite journal |last1=Hock|first1=J |last2=Kranz |first2=J |date=1995 |title=Studies on the epidemiology of the tar spot disease complex of maize in Mexico |journal=Plant Pathology|publisher=British Society for Plant Pathology |volume=44 |issue=3 |pages=490–502 |doi=10.1111/j.1365-3059.1995.tb01671.x}}][{{cite web|url=http://nt.ars-grin.gov/taxadescriptions/factsheets/pdfPrintFile.cfm?thisApp=Phyllachoramaydis|access-date=19 July 2016|title=Invasive fungi. Tar spot of corn - Phyllachora maydis|publisher=Systematic Mycology and Microbiology Laboratory, ARS, USDA|author=Chalkley, D}}]
+|-
+|Trichoderma ear rot and root rot
+||''[[Trichoderma viride]]'' {{=}} ''[[Trichoderma lignorum]]''
+''[[Hypocrea]]'' sp. [teleomorph]
+|-
+|White ear rot, root and stalk rot
+||''[[Stenocarpella maydis]]'' {{=}} ''[[Diplodia zeae]]''
+|-
+|Yellow leaf blight
+||''[[Ascochyta ischaemi]]''
+''[[Phyllosticta maydis]]''
+''[[Mycosphaerella zeae-maydis]]'' [teleomorph]
+|-
+|Zonate leaf spot
+||''[[Gloeocercospora sorghi]]''
+|-
+|}
+
+==Nematodes, Parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, Parasitic'''
+|-
+|Awl
+||''Dolichodorus'' spp.
+''D. heterocephalus''
+|-
+|Bulb and stem
+||''Ditylenchus dipsaci''
+|-
+|Burrowing
+||''[[Radopholus similis]]''
+|-
+|Cyst
+||''Heterodera avenae''
+''H. zeae''
+''Punctodera chalcoensis''
+|-
+|Dagger
+||''[[Xiphinema]]'' spp.
+''X. americanum''
+''X. mediterraneum''
+|-
+|False root-knot
+||''Nacobbus dorsalis''
+|-
+|Lance, Columbia
+||''Hoplolaimus columbus''
+|-
+|Lance
+||''Hoplolaimus'' spp.
+''H. galeatus''
+|-
+|Lesion
+||''Pratylenchus'' spp.
+''P. brachyurus''
+''P. crenatus''
+''P. hexincisus''
+''P. neglectus''
+''P. penetrans''
+''P. scribneri''
+''P. thornei''
+''P. zeae''
+|-
+|Needle
+||''Longidorus'' spp.
+''L. breviannulatus''
+|-
+|Ring
+||''Criconemella'' spp.
+''C. ornata''
+|-
+|Root-knot
+||''Meloidogyne'' spp.
+''M. chitwoodi''
+''[[Meloidogyne incognita|M. incognita]]''
+''M. javanica''
+|-
+|Spiral
+||''Helicotylenchus'' spp.
+|-
+|Sting
+||''Belonolaimus'' spp.
+''[[Belonolaimus longicaudatus|B. longicaudatus]]''
+|-
+|Stubby-root
+||''Paratrichodorus'' spp.
+''P. christiei''
+''P. minor''
+''Quinisulcius acutus''
+''Trichodorus'' spp.
+|-
+|Stunt
+||''Tylenchorhynchus dubius''
+|-
+|}
+
+==Virus and virus-like diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Virus and virus-like diseases'''
+|-
+|American wheat striate (wheat striate mosaic)
+||[[American wheat striate mosaic virus mosaic]] (AWSMV)
+|-
+|Barley stripe mosaic
+||[[Barley stripe mosaic virus]] (BSMV)
+|-
+|[[Barley yellow dwarf virus|Barley yellow dwarf]]
+||[[Barley yellow dwarf virus|Barley yellow dwarf virus (BYDV)]]
+|-
+|[[Brome mosaic virus|Brome mosaic]]
+||[[Brome mosaic virus|Brome mosaic virus (BMV)]]
+|-
+|Cereal chlorotic mottle
+||[[Cereal chlorotic mottle virus]] (CCMV)
+|-
+|Corn lethal necrosis ([[maize lethal necrosis disease]])
+||Virus complex ([[Maize chlorotic mottle virus]] [MCMV] and [[Maize dwarf mosaic virus]] [MDMV] A or B or [[Wheat streak mosaic virus]] [WSMV])
+|-
+|Cucumber mosaic
+||[[Cucumber mosaic virus]] (CMV)
+|-
+|Johnsongrass mosaic
+||[[Johnsongrass mosaic virus]] (JGMV)
+|-
+|Maize bushy stunt
+||Mycoplasmalike organism (MLO), assoc.
+|-
+|Maize chlorotic dwarf
+||[[Maize chlorotic dwarf virus]] (MCDV)
+|-
+|Maize chlorotic mottle
+||[[Maize chlorotic mottle virus]] (MCMV)
+|-
+|Maize dwarf mosaic
+||[[Maize dwarf mosaic virus]] (MDMV) strains A, D, E and F
+|-
+|Maize leaf fleck
+||[[Maize leaf fleck virus]] (MLFV)
+|-
+|Maize line*
+||[[Maize line virus]] (MLV)
+|-
+|Maize mosaic (corn leaf stripe, enanismo rayado)
+||[[Maize mosaic virus]] (MMV)
+|-
+|Maize pellucid ringspot
+||[[Maize pellucid ringspot virus]] (MPRV)
+|-
+|Maize rayado fino (fine striping disease)
+||[[Maize rayado fino virus]] (MRFV)
+|-
+|Maize red leaf and red stripe
+||Mollicute?
+|-
+|Maize red stripe (now known as Wheat mosaic virus
+||[[High Plains wheat mosaic emaravirus|Wheat mosaic virus]] (WMoV)
+|-
+|Maize ring mottle
+||[[Maize ring mottle virus]] (MRMV)
+|-
+|Maize rough dwarf (nanismo ruvido)
+||[[Maize rough dwarf virus]] (MRDV)
+|-
+|Maize sterile stunt
+||[[Maize sterile stunt virus]] (strains of [[barley yellow striate virus]])
+|-
+|[[Maize streak]]
+||[[Maize streak virus]] (MSV)
+|-
+|Maize stripe (maize chlorotic stripe, maize hoja blanca)
+||[[Maize stripe virus]]
+|-
+|Maize tassel abortion
+||[[Maize tassel abortion virus]] (MTAV)
+|-
+|Maize vein enation
+||[[Maize vein enation virus]] (MVEV)
+|-
+|Maize wallaby ear
+||[[Maize wallaby ear virus]] (MWEV)
+|-
+|Maize white leaf
+||[[Maize white leaf virus]]
+|-
+|Maize white line mosaic
+||[[Maize white line mosaic virus]] (MWLMV)
+|-
+|Millet red leaf
+||Millet red leaf virus (MRLV)
+|-
+|Northern cereal mosaic
+||[[Northern cereal mosaic virus]] (NCMV)
+|-
+|Oat pseudorosette (zakuklivanie)
+||[[Oat pseudorosette virus]]
+|-
+|Oat sterile dwarf
+||[[Oat sterile dwarf virus]] (OSDV)
+|-
+|Rice black-streaked dwarf
+||[[Rice black-streaked dwarf virus]] (RBSDV)
+|-
+|Rice stripe
+||[[Rice stripe virus]] (RSV)
+|-
+|Sorghum mosaic
+||[[Sorghum mosaic virus]] (SrMV), formerly [[sugarcane mosaic virus]] (SCMV) strains H, I and M
+|-
+|Southern rice black-streaked dwarf
+|[[Southern rice black-streaked dwarf virus|Southern rice black-streaked dwarf (SRBSDV)]]
+|-
+|Sugarcane Fiji disease
+||[[Sugarcane Fiji disease virus]] (FDV)
+|-
+|Sugarcane mosaic
+|[[Sugarcane mosaic virus]] (SCMV) strains A, B, D, E, SC, BC, Sabi and MB (formerly MDMV-B)
+|-
+|Wheat mosaic
+|[[Wheat mosaic virus (disambiguation)]] (WMoV)
+|-
+|}
+
+== References ==
+{{Reflist|refs=
+
+[{{cite journal | last1=Crous | first1=Pedro W. | last2=Groenewald | first2=Johannes Z. | last3=Groenewald | first3=Marizeth | last4=Caldwell | first4=Pat | last5=Braun | first5=Uwe | last6=Harrington | first6=Thomas C. | title=Species of Cercospora associated with grey leaf spot of maize | journal=[[Studies in Mycology]] | publisher=[[Westerdijk Institute]] ([[Elsevier]]) | volume=55 | date=1 May 2006 | pages=189–197 | pmid=18490979 | doi=10.3114/sim.55.1.189 | pmc=2104713 | s2cid=31494639}}]
+
+}}
+* [https://web.archive.org/web/20070202084939/http://www.apsnet.org/online/common/names/corn.asp Common Names of Diseases, The American Phytopathological Society]
+
+{{corn}}
+
+[[Category:Maize diseases|*]]
+[[Category:Lists of plant diseases|Maize]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_mango_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_mango_diseases.json
new file mode 100644
index 0000000..5761f23
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_mango_diseases.json
@@ -0,0 +1,418 @@
+{{Short description|none}}
+Diseases of [[mango]]s (''Mangifera indica'') include:[{{cite book |last=Prakash |first=Om |title=Diseases of Fruits and Vegetables Volume I |chapter=Diseases and Disorders of Mango and their Management |publisher=Springer Netherlands |publication-place=Dordrecht |date=2004 |isbn=978-1-4020-1822-0 |doi=10.1007/1-4020-2606-4_13 |url=https://link.springer.com/10.1007/1-4020-2606-4_13 |access-date=2026-03-06 |page=511–619}}]
+
+==Bacterial diseases==
+{| class="wikitable"
+|-
+! colspan=3| '''Bacterial diseases'''
+|-
+|Bacterial black spot = bacterial canker
+||[[Xanthomonas campestris pv. mangiferaeindicae|''Xanthomonas campestris'' pv. ''mangiferaeindicae'']][{{cite book |last=Ploetz |first=R. C. |title=Diseases of tropical fruit crops |chapter=Diseases of mango. |publisher=CABI Publishing |publication-place=UK |date=2003 |isbn=978-0-85199-390-4 |doi=10.1079/9780851993904.0327 |url=http://www.cabidigitallibrary.org/doi/10.1079/9780851993904.0327 |access-date=2026-03-06 |page=327–363}}]
+|-
+|Bacterial fruit rot
+|| [[Pectobacterium carotovorum subsp. carotovorum|''Pectobacterium carotovorum'' subsp. ''carotovorum'']] = [[Erwinia carotovora subsp. carotovora|''Erwinia carotovora'' subsp. ''carotovora'']]
+''[[Erwinia herbicola]]''
+|-
+|Crown gall hi
+||''[[Agrobacterium tumefaciens]]''
+|}
+
+==Fungal diseases==
+
+{| class="wikitable"
+|-
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria leaf spots
+||
+''[[Alternaria alternata]]''
+''[[Alternaria tenuissima]]''
+|-
+|Anthracnose
+||
+''[[Colletotrichum gloeosporioides]]''
+''[[Glomerella cingulata]]'' [teleomorph]
+''[[Colletotrichum acutatum]]''
+|-
+|Black banded disease
+||
+''[[Rhinocladium corticum]]''
+|-
+|Black mildew
+||
+''[[Meliola mangiferae]]''
+|-
+|Black mold rot
+||
+''[[Aspergillus niger]]''
+|-
+|Black rot
+||
+''[[Ceratocystis paradoxa]]''
+''[[Chalara paradoxa]]'' [anamorph]
+|-
+|Blossom blight
+||
+''[[Botrytis cinerea]]''
+|-
+|Blue mold
+||
+''[[Penicillium expansum]]''
+|-
+|Branch canker
+||
+''[[Botryosphaeria ribis]]''
+''[[Fusicoccum]]'' sp. [anamorph]
+''[[Hypoxylon serpens var. effusum]]''
+|-
+|Branch necrosis
+||
+''[[Dothiorella]]'' sp.
+|-
+|Ceratocystis wilt
+||
+''[[Ceratocystis fimbriata]]''
+''[[Chalara]]'' sp. [anamorph]
+|-
+|Charcoal fruit rot
+||
+''[[Macrophomina phaseolina]]''
+|-
+|Charcoal root rot
+||
+''[[Macrophomina phaseolina]]''
+|-
+|Crown rot
+||
+''[[Fusarium solani]]''
+''[[Nectria haematococca]]'' [teleomorph]
+|-
+|Crusty leaf spot
+||
+''[[Zimmermanniella trispora]]''
+|-
+|Curvularia blight
+||
+''[[Curvularia tuberculata]]''
+|-
+|Dieback
+||
+''[[Botryosphaeria disrupta]]''
+{{=}} ''[[Physalospora disrupta]]''
+''[[Botryosphaeria quercuum]]''
+{{=}} ''[[Physalospora glandicola]]''
+''[[Botryosphaeria rhodina]]''
+{{=}} ''[[Physalospora rhodina]]''
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryosphaeria theobromae]]''
+|-
+|Felt fungus
+||
+''[[Septobasidium bogoriense]]''
+''[[Septobasidium pilosum]]''
+''[[Johncouchia mangiferae]]'' [anamorph]
+''[[Septobasidium pseudopedicellatum]]''
+|-
+|Fruit rot
+||
+''[[Alternaria alternata]]''
+''[[Phytophthora nicotianae]]''
+''[[Pestalotiopsis mangiferae]]''
+''[[Phyllosticta anacardiacearum]]''
+''Guignardia mangiferae'' [teleomorph]
+|-
+|Gall
+||
+''[[Fusarium decemcellare]]''
+''[[Calonectria rigidiuscula]]'' [teleomorph]
+|-
+|Gray leaf spot
+||
+''[[Pestalotiopsis mangiferae]]''
+{{=}} ''[[Pestalotia mangiferae]]''
+|-
+|Hendersonia rot
+||
+''[[Hendersonia creberrima]]''
+|-
+|Leaf blight
+||
+''[[Bipolaris hawaiiensis]]''
+|-
+|Leaf spot
+||
+''[[Curvularia lunata]]''
+''[[Leptosphaeria]]'' sp.
+''[[Macrophoma]]'' sp.
+''[[Phaeosphaerella mangiferae]]''
+''[[Phoma sorghina]]''
+''[[Pseudocercospora mali]]''
+''[[Pseudocercospora subsessilis]]''
+''[[Septoria]]'' sp.
+''[[Verticillium lecanii]]''
+|-
+|Macrophoma rot
+||
+''[[Macrophoma mangiferae]]''
+|-
+|Mango malformation
+||
+''[[Fusarium subglutinans]]''
+(Note: some debate remains as to complete etiology of this disease.)
+|-
+|Mucor rot
+||
+''[[Mucor circinelloides]]''
+|-
+|Mushroom root rot
+||
+''[[Armillaria tabescens]]''
+|-
+|Phoma blight
+||
+''[[Phoma glomerata]]''
+|-
+|Phyllosticta leaf spot
+||
+''[[Phyllosticta mortonii]]''
+''[[Phyllosticta citricarpa]]''
+''[[Guignardia citricarpa]]'' [teleomorph]
+''[[Phyllosticta anacardiacearum]]''
+''[[Guignardia mangiferae]]'' [teleomorph]
+|-
+|Pink disease
+||
+''[[Erythricium salmonicolor]]''
+{{=}} ''[[Corticium salmonicolor]]''
+''[[Necator decretus]]'' [anamorph]
+|-
+|Powdery mildew
+||
+''[[Erysiphe cichoracearum]]''
+''[[Oidium asteris-punicei]]'' [anamorph]
+''[[Oidium mangiferae]]''
+|-
+|Rhizopus rot
+||
+''[[Rhizopus arrhizus]]''
+{{=}} ''[[Rhizopus oryzae]]''
+|-
+|Root rot
+||
+''[[Cylindrocladiella peruviana]]''
+{{=}} ''[[Cylindrocladium peruvianum]]''
+''[[Phymatotrichopsis omnivora]]''
+''[[Phytophthora nicotianae]]''
+{{=}} ''[[Phytophthora nicotianae var. parasitica]]''
+''[[Phytophthora palmivora]]''
+''[[Pythium]]'' spp.
+''[[Pythium splendens]]''
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+''[[Sclerotium rolfsii var. delphinii]]''
+''[[Sclerotium rolfsii]]''
+|-
+|Scab
+||
+''[[Elsinoe mangiferae]]''
+''[[Sphaceloma mangiferae]]'' [anamorph]
+|-
+|Sclerotinia rot
+||
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Seed rots
+||
+''[[Bipolaris ravenelii]]''
+''[[Marasmius]]'' sp.
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+|-
+|Shoestring rot
+||
+''[[Armillaria mellea]]''
+|-
+|Sooty blotch
+||
+''[[Gloeodes pomigena]]''
+|-
+|Sooty molds
+||
+''[[Capnodium citri (disambiguation)|Capnodium citri]]''
+''[[Capnodium mangiferae]]''
+''[[Capnodium ramosum]]''
+''[[Meliola]]'' spp.
+''[[Tripospermum acerinum]]''
+|-
+|Stem canker
+||
+''[[Phoma]]'' sp.
+|-
+|Stem end rot
+||
+''[[Botryosphaeria rhodina]]''
+''[[Dothiorella dominicana]]''
+{{=}} ''[[Fusicoccum aesculi]]''
+''[[Botryosphaeria dothidea]]'' [teleomorph]
+''[[Hendersonula toruloidea]]''
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia theobromae]]''
+''[[Phomopsis mangiferae]]''
+|-
+|Stem gall
+||
+''[[Sphaeropsis]]'' sp.
+|-
+|Stemphylium rot
+||
+''[[Stemphylium vesicarium]]''
+|-
+|Stigmina leaf spot
+||
+''[[Stigmina mangiferae]]''
+|-
+|Tip dieback
+||
+''[[Fusarium equiseti]]''
+''[[Gibberella intricans]]'' [teleomorph]
+|-
+|Transit rot
+||
+''[[Rhizopus stolonifer]]''
+|-
+|Trunk rot
+||
+''[[Hexagonia hydnoides]]''
+{{=}} ''[[Polyporus hydnoides]]''
+|-
+|Twig blight
+||
+''[[Diaporthe]]'' spp.
+|-
+|Verticillium wilt
+||
+''[[Verticillium albo-atrum]]''
+|-
+|White sooty blotch
+||
+''[[Gloeodes]]'' sp.
+|-
+|Wood rot
+||
+''[[Ganoderma applanatum]]''
+''[[Ganoderma lucidum]]''
+''[[Phellinus gilvus]]''
+''[[Pycnoporus sanguineus]]''
+{{=}} ''[[Polyporus sanguineus]]''
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable"
+|-
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger nematode
+||
+''[[Xiphinema brevicolle]]''
+''[[Xiphinema]]'' spp.
+|-
+|Lance nematode
+||
+''[[Hoplolaimus columbus]]''
+|-
+|Sheathoid nematode
+||
+''[[Hemicriconemoides mangiferae]]''
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable"
+|-
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Abnormal ripening
+||Incorrect O2 :CO2 ratios in storage or fruit waxing.
+|-
+|Algal leaf spot = red rust
+||''Cephaleuros virescens'' Kunze
+|-
+|Black tip
+||Post-harvest disorder of unknown cause
+|-
+|Brushing damage
+||Excessive post-harvest brush polishing of fruit
+|-
+|Bunchy top
+||Unknown cause
+|-
+|Chilling injury
+||Temperatures from 7-13 °C; cultivar dependent.
+|-
+|Copper deficiency
+||Unavailable copper
+|-
+|Decline
+||Unknown etiology
+|-
+|Edema
+||Physiological water stress
+|-
+|Hot water scald
+||Excessive temperature or duration in hot water or hot water/fungicide dips
+|-
+|Impact damage
+||Fruit injury from mishandling during harvest or grading
+|-
+|Internal necrosis
+||Boron deficiency
+|-
+|Jelly seed
+||Unknown post-harvest disorder
+|-
+|Lenticel spotting
+||Heavy rains or prolonged post-harvest dips
+|-
+|Little leaf
+||Zinc deficiency
+|-
+|Manganese deficiency
+||Insufficient manganese
+|-
+|Parasitic lichen
+||''Strigula elegans'' (Fee) Muell Arg.
+|-
+|Premature ripening
+||Cause of disorder unknown
+|-
+|Pressure damage
+||Surface fruit injury due to poor packing or load shift in transit
+|-
+|Sapburn injury
+||Sap contact with fruit skin during or post-harvest
+|-
+|Soft nose
+||Excessive nitrogen/low calcium levels
+|-
+|Spongy tissue
+||Unknown post-harvest disorder
+|-
+|Stem end cavity
+||Unexplained pre-harvest fruit injury
+|-
+|Sunburn
+||Sudden exposure of fruit to high air temperature and/or bright light
+|-
+|Tipburn
+||High soluble salts
+|}
+
+== References ==
+{{Reflist}}
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Mango.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{mangoes}}
+
+[[Category:Lists of plant diseases|Mango]]
+[[Category:Mango tree diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_oats_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_oats_diseases.json
new file mode 100644
index 0000000..a7a6ae4
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_oats_diseases.json
@@ -0,0 +1 @@
+#REDIRECT [[List of oat diseases]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_papaya_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_papaya_diseases.json
new file mode 100644
index 0000000..24d190c
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_papaya_diseases.json
@@ -0,0 +1,352 @@
+{{Short description|none}}
+{{Notability|date=September 2023}}
+{{Single source|date=September 2023}}
+This article is a '''list of diseases''' of [[papaya]] (''Carica papaya'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial canker
+||''[[Erwinia]]'' sp.
+|-
+|Bacterial leaf spot
+||''[[Pseudomonas caricapapayae]]''
+|-
+|Bacterial wilt
+||''[[Pseudomonas solanacearum]]''
+|-
+|[[Papaya Bunchy Top Disease]]
+||''[[Rickettsia]]''
+|-
+|Erwinia decline
+||''[[Erwinia]]'' sp.
+|-
+|Erwinia mushy canker
+||''[[Erwinia]]'' sp.
+|-
+|Internal yellowing
+||''Enterobacter cloacae''
+|-
+|Purple stain
+||''Erwinia herbicola''
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria fruit spot
+||
+''[[Alternaria alternata]]''
+|-
+|Angular leaf spot
+||
+''[[Leveillula taurica]]''
+|-
+|Anthracnose
+||
+''[[Colletotrichum gloeosporioides]]''
+|-
+|Black spot
+||
+''[[Asperisporium caricae]]''
+''[[Cercospora papayae]]''
+''[[Phomopsis caricae-papayae]]''
+|-
+|Blossom spot
+||''[[Choanephora cucurbitarum]]''
+|-
+|Black rot
+||''Mycosphaerella caricae''
+|-
+|Brown spot
+||
+''[[Corynespora cassiicola]]''
+{{=}} ''[[Cercospora melonis]]''
+{{=}} ''[[Cercospora vignicola]]''
+{{=}} ''[[Helminthosporium cassiicola]]''
+{{=}} ''[[Helminthosporium vignae]]''
+{{=}} ''[[Helminthosporium vignicola]]''
+|-
+|Chocolate spot
+||
+''[[Colletotrichum gloeosporioides]]''
+|-
+|Collar rot
+||
+''[[Cylindrocladium crotalariae]]''
+''[[Calonectria crotalariae]]'' [teleomorph]
+|-
+|Damping off
+||
+''[[Colletotrichum gloeosporioides]]''
+''[[Phytophthora palmivora]]''
+''[[Phytophthora nicotianae]]''
+''[[Phytophthora parasitica]]''
+''[[Pythium aphanidermatum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium ultimum]]''
+''[[Pythium]]'' sp.
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Dry rot
+||
+''[[Phoma caricae-papayae]]''
+{{=}} ''[[Ascochyta caricae]]''
+{{=}} ''[[Ascochyta caricae-papayae]]''
+{{=}} ''[[Mycosphaerella caricae]]'' [teleomorph]
+|-
+|Foot rot
+||
+''[[Pythium aphanidermatum]]''
+''[[Pythium ultimum]]''
+|-
+|Fruit rot
+||
+''[[Monilinia|Monilia]]'' sp.
+|-
+|Fruit spot
+||
+''[[Cercospora mamaonis]]''
+|-
+|Fusarium fruit rot
+||
+''[[Fusarium solani]]''
+''[[Fusarium]]'' spp.
+|-
+|Guignardia spot
+||
+''[[Guignardia]]'' sp.
+|-
+|Greasy spot
+||
+''[[Corynespora cassiicola]]''
+{{=}} ''[[Cercospora melonis]]''
+{{=}} ''[[Cercospora vignicola]]''
+{{=}} ''[[Helminthosporium cassiicola]]''
+{{=}} ''[[Helminthosporium vignae]]''
+{{=}} ''[[Helminthosporium vignicola]]''
+|-
+|Internal blight
+||
+''[[Cladosporium]]'' sp.
+''[[Fusarium]]'' sp.
+''[[Penicillium]]'' sp.
+|-
+|Lasiodiplodia fruit rot
+||
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia gossypii]]''
+{{=}} ''[[Diplodia theobromae]]''
+{{=}} ''[[Diplodia gossypina]]''
+{{=}} ''[[Diplodia natalensis]]''
+{{=}} ''[[Lasiodiplodia triflorae]]''
+|-
+|Leaf spot
+||
+''[[Alternaria]]'' sp.
+''[[Asperisporium caricae]]''
+''[[Cercospora mamaonis]]''
+''[[Cercospora papayae]]''
+''[[Choanephora cucurbitarum]]''
+''[[Curvularia caricae-papayae]]''
+''[[Gloeosporium]]'' sp.
+''[[Phoma caricae-papayae]]''
+''[[Mycosphaerella caricae]]'' [teleomorph]
+''[[Phyllosticta]]'' sp.
+|-
+|Petiole spot
+||''[[Didymella]]'' sp.
+|-
+|Phytophthora blight
+||
+''[[Phytophthora palmivora]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+''[[Phytophthora parasitica]]''
+|-
+|Powdery mildew
+||
+''[[Phyllactinia caricifolia]]''
+''[[Phyllactinia caricicola]]''
+''[[Phyllactinia caricae]]''
+''[[Erysiphe diffusa]]''
+''[[Erysiphe caricae]]''
+''[[Erysiphe caricae-papayae]]''
+''[[Erysiphe fallax]]''
+''[[Podosphaera caricicola]]''
+''[[Podosphaera xanthii]]'' complex
+|-
+|Phytophthora fruit rot
+||
+''[[Phytophthora capsici]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+''[[Phytophthora parasitica]]''
+''[[Phytophthora palmivora]]''
+|-
+|Rhizopus soft rot
+||
+''[[Rhizopus stolonifer]]''
+{{=}} ''[[Rhizopus nigricans]]''
+|-
+|Root rot
+||
+''[[Phytophthora palmivora]]''
+''[[Pythium aphanidermatum]]''
+''[[Pythium ultimum]]''
+''[[Pythium]]'' spp.
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Sclerotium blight
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Seedling blight
+||
+''[[Colletotrichum gloeosporioides]]''
+|-
+|Stem-end rot
+||
+''[[Alternaria alternata|Alternaria alterneta]]''
+''[[Colletotrichum gloeosporioides]]''
+''[[Fusarium]]'' sp.
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia gossypii]]''
+{{=}} ''[[Diplodia theobromae]]''
+{{=}} ''[[Diplodia gossypina]]''
+{{=}} ''[[Diplodia natalensis]]''
+{{=}} ''[[Lasiodiplodia triflorae]]''
+{{=}} ''[[Phoma caricae-papayae]]''
+{{=}} ''[[Ascochyta caricae]]''
+{{=}} ''[[Ascochyta caricae-papayae]]''
+''[[Mycosphaerella caricae]]'' [teleomorph]
+''[[Phomopsis]]'' sp.
+''[[Rhizopus stolonifer]]''
+|-
+|Stemphylium fruit spot
+||
+''[[Stemphylium lycopersici]]''
+{{=}} ''[[Thyrospora lycopersici]]''
+{{=}} ''[[Stemphylium floridanum]]''
+|-
+|Stem rot
+||
+''[[Fusarium solani]]''
+''[[Nectria haematococca]]'' [teleomorph]
+''[[Fusarium]]'' sp.
+''[[Phytophthora palmivora]]''
+''[[Pythium aphanidermatum]]''
+''[[Pythium ultimum]]''
+|-
+|Target spot
+||''[[Phyllosticta caricae-papayae]]''
+|-
+|Verticillium wilt
+||''[[Verticillium dahliae]]''
+|-
+|Wet fruit rot
+||''[[Phomopsis]]'' sp.
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Algal leaf spot
+||''Cephaleuros virescens''
+|-
+|Bumpy fruit
+||Boron deficiency
+|-
+|Freckles
+||Physiological
+|-
+|Nivum Haamir dieback
+||Unknown cause
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Reniform nematode
+||
+''[[Rotylenchulus reniformis]]''
+''[[Rotylenchulus parvus]]''
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne hapla]]''
+|-
+|}
+
+==Phytoplasmal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal diseases'''
+|-
+|Dieback
+||[[Phytoplasma]]
+|-
+|Yellow crinkle
+||Phytoplasma
+|-
+|}
+
+==Viral and viroid diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral and viroid diseases'''
+|-
+|Apical necrosis
+||Papaya apical necrosis virus
+|-
+|Droopy necrosis
+||Papaya droopy necrosis virus
+|-
+|Feather leaf
+||Unknown virus
+|-
+|Leaf curl
+||Virus suspected
+|-
+|Mosaic
+||[[Papaya mosaic virus]]
+|-
+|[[Papaya ringspot virus|Papaya ringspot]]
+||[[Papaya ringspot virus]]
+|-
+|[[Papaya lethal yellowing virus|Papaya lethal yellowing]]
+|[[Papaya lethal yellowing virus]]
+|-
+|Spotted wilt
+||[[Tomato spotted wilt virus]]
+|-
+|Sticky disease ('meleira')
+|Papaya meleira virus complex
+|-
+|Terminal necrosis and wilt
+||[[Tobacco ringspot virus]]
+|-
+|}
+
+==References==
+{{reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Papaya.aspx Common Names of Diseases, The American Phytopathological Society]
+
+[[Category:Lists of plant diseases|Papaya]]
+[[Category:Papaya tree diseases| List]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_peach_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_peach_diseases.json
new file mode 100644
index 0000000..df8fccc
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_peach_diseases.json
@@ -0,0 +1,3 @@
+#REDIRECT [[List of peach and nectarine diseases]]
+
+{{R from subtopic}}
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_peanut_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_peanut_diseases.json
new file mode 100644
index 0000000..8d61719
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_peanut_diseases.json
@@ -0,0 +1,367 @@
+{{Short description|none}}
+{{refimprove|date=March 2013}}
+This article is a '''list of diseases''' of [[peanut]]s (''Arachis hypogaea'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial wilt
+||''[[Pseudomonas solanacearum]]''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria leaf blight
+||
+''[[Alternaria tenuissima]]''
+|-
+|Alternaria leaf spot
+||
+''[[Alternaria arachidis]]''
+|-
+|Alternaria spot and veinal necrosis
+||
+''[[Alternaria alternata]]''
+|-
+|Anthracnose
+||
+''[[Colletotrichum arachidis]]''
+''[[Colletotrichum dematium]]''
+''[[Colletotrichum mangenoti]]''
+|-
+|Aspergillus crown rot
+||
+''[[Aspergillus niger]]''
+|-
+|Blackhull
+||
+''[[Thielaviopsis basicola]]''
+''[[Chalara elegans]]'' [synanamorph]
+|-
+|Botrytis blight
+||
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|Charcoal rot and Macrophomina leaf spot
+||
+''[[Macrophomina phaseolina]]''
+{{=}} ''[[Rhizoctonia bataticola]]''
+|-
+|Choanephora leaf spot
+||
+''[[Choanephora]]'' spp.
+|-
+|Collar rot
+||
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Diplodia gossypina]]''
+|-
+|Colletotrichum leaf spot
+||
+''[[Colletotrichum gloeosporioides]]''
+''[[Glomerella cingulata]]'' [teleomorph]
+|-
+|Cylindrocladium black rot
+||
+''[[Cylindrocladium crotalariae]]''
+''[[Calonectria crotalariae]]'' [teleomorph]
+|-
+|Cylindrocladium leaf spot
+||
+''[[Cylindrocladium scoparium]]''
+''[[Calonectria kyotensis]]'' [teleomorph]
+|-
+|Damping-off, Aspergillus
+||
+''[[Aspergillus flavus]]''
+''[[Aspergillus niger]]''
+|-
+|Damping-off, Fusarium
+||
+''[[Fusarium]]'' spp.
+|-
+|Damping-off, Pythium
+||
+''[[Pythium]]'' spp.
+|-
+|Damping-off, Rhizoctonia
+||
+''[[Rhizoctonia]]'' spp.
+|-
+|Damping-off, Rhizopus
+||
+''[[Rhizopus]]'' spp.
+|-
+|Drechslera leaf spot
+||
+''[[Bipolaris spicifera]]''
+{{=}} ''[[Drechslera spicifera]]''
+''[[Cochliobolus spicifer]]'' [teleomorph]
+|-
+|Fusarium peg and root rot
+||''[[Fusarium]]'' spp.
+|-
+|Fusarium wilt
+||''[[Fusarium oxysporum]]''
+|-
+|Leaf spot, early
+||
+''[[Cercospora arachidicola]]''
+''[[Mycosphaerella arachidis]]'' [teleomorph]
+|-
+|Leaf spot, late
+||
+''[[Phaeoisariopsis personata]]''
+{{=}} ''[[Cercosporidium personatum]]''
+''[[Mycosphaerella berkeleyi]]'' [teleomorph]
+|-
+|Melanosis
+||
+''[[Stemphylium botryosum]]''
+''[[Pleospora tarda]]'' [teleomorph]
+|-
+|Myrothecium leaf blight
+||
+''[[Myrothecium roridum]]''
+|-
+|Olpidium root rot
+||
+''[[Olpidium brassicae]]''
+|-
+|Pepper spot and scorch
+||
+''[[Leptosphaerulina crassiasca]]''
+|-
+|Pestalotiopsis leaf spot
+||
+''[[Pestalotiopsis arachidis]]''
+|-
+|Phoma leaf blight
+||
+''[[Phoma microspora]]''
+|-
+|Phomopsis foliar blight
+||
+''[[Phomopsis phaseoli]]''
+{{=}} ''[[Phomopsis sojae]]''
+''[[Diaporthe phaseolorum]]'' [teleomorph]
+|-
+|Phomopsis leaf spot
+||
+''[[Phomopsis]]'' spp.
+|-
+|Phyllosticta leaf spot
+||
+''[[Phyllosticta arachidis-hypogaeae]]''
+''[[Phyllosticta sojaecola]]''
+''[[Pleosphaerulina sojicola]]'' [teleomorph]
+|-
+|Phymatotrichum root rot
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+|Pod rot (pod breakdown)
+||
+''[[Fusarium equiseti]]''
+{{=}} ''[[Fusarium scirpi]]''
+''[[Gibberella intricans]]'' [teleomorph]
+''[[Fusarium solani]]''
+''[[Nectria haematococca]]'' [teleomorph]
+''[[Pythium myriotylum]]''
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Powdery mildew
+||
+''[[Oidium arachidis]]''
+|-
+|Pythium peg and root rot
+||
+''[[Pythium myriotylum]]''
+''[[Pythium aphanidermatum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium irregulare]]''
+''[[Pythium ultimum]]''
+|-
+|Pythium wilt
+||
+''[[Pythium myriotylum]]''
+|-
+|Rhizoctonia foliar blight, peg and root rot
+||''[[Rhizoctonia solani]]''
+|-
+|Rust
+||
+''[[Puccinia arachidis]]''
+|-
+|Scab
+||
+''[[Sphaceloma arachidis]]''
+|-
+|Sclerotinia blight
+||
+''[[Sclerotinia minor]]''
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Stem rot (southern blight)
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Verticillium wilt
+||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae]]''
+|-
+|Web blotch (net blotch)
+||
+''[[Phoma arachidicola]]''
+{{=}} ''[[Ascochyta adzamethica]]''
+''[[Didymosphaeria arachidicola]]''
+{{=}} ''[[Mycosphaerella arachidicola]]''
+|-
+|Yellow mold
+||
+''[[Aspergillus flavus]]''
+''[[Aspergillus parasiticus]]''
+|-
+|Zonate leaf spot
+||
+''[[Cristulariella moricola]]''
+''[[Sclerotium cinnamomi]]'' [syanamorph]
+''[[Grovesinia pyramidalis]]'' [teleomorph]
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger
+||
+''[[Xiphinema]]'' spp.
+|-
+|Pod lesion
+||
+''[[Tylenchorhynchus brevilineatus]]''
+{{=}} ''[[Tylenchorhynchus brevicadatus]]''
+|-
+|Ring
+||
+''[[Criconemella ornata]]''
+{{=}} ''[[Macroposthonia ornata]]''
+|-
+|Root-knot, Javanese
+||
+''[[Meloidogyne javanica]]''
+|-
+|Root-knot, northern
+||
+''[[Meloidogyne hapla]]''
+|-
+|Root-knot, peanut
+||
+''[[Meloidogyne arenaria]]''
+|-
+|Root lesion
+||
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus coffeae]]''
+|-
+|Seed and pod
+||
+''[[Ditylenchus destructor]]''
+|-
+|Spiral
+||
+''[[Scutellonema cavenessi]]''
+|-
+|Sting
+||
+''[[Belonolaimus glacilis]]''
+''[[Belonolaimus longicaudatus]]''
+|-
+|Testa
+||
+''[[Aphelenchoides arachidis]]''
+|-
+|}
+
+==Phytoplasma, Virus and viruslike diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Virus and viruslike diseases'''
+|-
+|Cowpea mild mottle
+||[[Cowpea mild mottle virus]]
+|-
+|Groundnut crinkle
+||[[Groundnut crinkle virus]]
+|-
+|Groundnut eyespot
+||[[Groundnut eyespot virus]]
+|-
+|Groundnut rosette
+||[[Groundnut chlorotic rosette virus]]
+[[Groundnut green rosette virus]]
+|-
+|Groundnut streak
+||[[Groundnut streak virus]]
+|-
+|Marginal chlorosis
+||Unknown (viruslike)
+|-
+|Peanut clump
+||[[Peanut clump virus]]
+|-
+|Peanut green mosaic
+||[[Peanut green mosaic virus]]
+|-
+|Peanut mottle
+||[[Peanut mottle virus]]
+|-
+|Peanut ringspot or bud necrosis
+||[[Tomato spotted wilt virus]]
+|-
+|Peanut stripe
+||[[Peanut stripe virus]]
+|-
+|Peanut stunt
+||[[Peanut stunt virus]]
+|-
+|Peanut yellow mottle
+||[[Peanut yellow mottle virus]]
+|-
+|Tomato spotted wilt
+||[[Tomato spotted wilt virus]]
+|-
+|Witches' broom
+||[[Phytoplasma]]
+|-
+|}
+
+==Miscellaneous and diseases or disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous and diseases or disorders'''
+|-
+|Rugose leaf curl
+||Rickettsia-like organism
+|-
+|}
+
+== References ==
+{{reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Peanut.aspx Common Names of Diseases, The American Phytopathological Society]
+
+[[Category:Lists of plant diseases|Peanut]]
+[[Category:Peanut diseases| ]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_pear_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_pear_diseases.json
new file mode 100644
index 0000000..e615858
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_pear_diseases.json
@@ -0,0 +1,367 @@
+{{Short description|none}}
+The following is a '''list of diseases of [[pear]]s''' (''Pyrus communis'').
+
+==Bacterial diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|[[Fire blight]]
+||''[[Erwinia amylovora]]''
+|-
+|Pseudomonas blossom blast and canker
+||''[[Pseudomonas syringae]]'' pv. ''syringae''
+|-
+|Pear decline
+||[[Phytoplasma]]
+|-
+|}
+
+==Fungal diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria fruit rot
+||
+''[[Alternaria]]'' spp.
+|-
+|Anthracnose canker and bull's-eye rot
+||
+''[[Pezicula malicorticus]]''
+''[[Cryptosporiopsis curvispora]]'' [anamorph]
+|-
+|Armillaria root rot (shoestring root rot)
+||
+''[[Armillaria mellea]]''
+''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Bitter rot
+||
+''[[Glomerella cingulata]]''
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+|-
+|Black rot, leaf spot and canker
+||
+''[[Botryosphaeria obtusa]]''
+''[[Sphaeropsis malorum]]'' [anamorph]
+|-
+|Black spot (of Japanese pear)
+||
+''[[Alternaria alternata]]''
+|-
+|Blister canker
+||
+''[[Helminthosporium papulosum]]''
+|-
+|Blister disease
+||''[[Coniothecium chomatosporum]]''
+|-
+|Blue mold rot
+||
+''[[Penicillium]]'' spp.
+''[[Penicillium expansum]]''
+|-
+|Botrytis spur and blossom blight
+||
+''[[Botrytis cinerea]]''
+''[[Botrytis cinerea|Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|Brown rot
+||
+''[[Monilinia fructicola]]''
+''[[Monilinia laxa]]''
+|-
+|Cladosporium fruit rot
+||
+''[[Cladosporium herbarum]]''
+''[[Mycosphaerella tassiana]]'' [teleomorph]
+|-
+|Clitocybe root rot (mushroom root rot)
+||
+''[[Armillaria tabescens]]''
+{{=}} ''[[Clitocybe tabescens]]''
+|-
+|Coprinus rot
+||
+''[[Coprinopsis psychromorbida]]''
+|-
+|Dematophora root rot (Rosellinia root rot)
+||
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+|-
+|Diplodia canker
+||
+''[[Botryosphaeria stevensii]]''
+{{=}} ''[[Physalospora malorum]]''
+''[[Diplodia mutila]]'' [anamorph]
+|-
+|Elsinoe leaf and fruit spot
+||
+''[[Elsinoe piri]]''
+''[[Sphaceloma pirinum]]'' [anamorph]
+|-
+|European canker
+||
+''[[Nectria galligena]]''
+''[[Cylindrocarpon heteronemum]]'' [anamorph]
+|-
+|Fabraea leaf and fruit spot
+||
+''[[Diplocarpon mespili]]''
+{{=}} ''[[Fabraea maculata]]''
+''[[Entomosporium mespili]]'' [anamorph]
+|-
+|Fly speck
+||
+''[[Schizothyrium pomi]]''
+''[[Zygophiala jamaicensis]]'' [anamorph]
+|-
+|Gibberella canker
+||
+''[[Gibberella baccata]]''
+''[[Fusarium lateritium]]'' [anamorph]
+|-
+|Gray mold rot
+||
+''[[Botrytis cinerea]]''
+|-
+|Late leaf spot
+||
+''[[Cercospora minima]]''
+|-
+|Mucor fruit rot
+||
+''[[Mucor]]'' spp.
+''[[Mucor piriformis]]''
+|-
+|Mycosphaerella leaf spot (ashy leaf spot and fruit spot)
+||
+''[[Mycosphaerella pyri]]''
+{{=}} ''[[Mycosphaerella sentina]]''
+''[[Septoria pyricola]]'' [anamorph]
+|-
+|Nectria twig blight (coral spot)
+||
+''[[Nectria cinnabarina]]''
+''[[Tubercularia vulgaris]]'' [anamorph]
+|-
+|Pear scab
+||
+''[[Venturia pyrina]]''
+''[[Fusicladium pyrorum]]'' [anamorph]
+|-
+|Perennial canker
+||
+''[[Neofabraea perennans]]''
+''[[Cryptosporiopsis perennans]]'' [anamorph]
+|-
+|Phyllosticta leaf spot
+||
+''[[Phyllosticta]]'' sp.
+|-
+|Phytophthora crown and root rot (sprinkler rot)
+||
+''[[Phytophthora cactorum]]''
+|-
+|Pink mold rot
+||
+''[[Trichothecium roseum]]''
+{{=}} ''[[Cephalothecium roseum]]''
+|-
+|Powdery mildew
+||
+''[[Podosphaera leucotricha]]''
+|-
+|Pythium dieback
+||
+''[[Pythium]]'' spp.
+|-
+|Rhizopus rot
+||
+''[[Rhizopus stolonifer]]''
+|-
+|Rust, American hawthorne
+||
+''[[Gymnosporangium globosum]]''
+|-
+|Rust, Kern's pear
+||
+''[[Gymnosporangium kernianum]]''
+|-
+|Rust, Pacific Coast pear
+||
+''[[Gymnosporangium libocedri]]''
+|-
+|Rust, pear trellis (European pear rust)
+||
+''[[Gymnosporangium fuscum]]''
+|-
+|Rust, Rocky Mountain pear
+||
+''[[Gymnosporangium nelsonii]]''
+|-
+|Side rot
+||
+''[[Phialophora malorum]]''
+|-
+|Silver leaf
+||
+''[[Chondrostereum purpureum]]''
+|-
+|Sooty blotch
+||
+''[[Gloeodes pomigena]]''
+|-
+|Thread blight (Hypochnus leaf blight)
+||
+''[[Corticium stevensii]]''
+{{=}} ''[[Pellicularia koleroga]]''
+{{=}} ''[[Hypochnus ochroleucus]]''
+|-
+|Valsa canker
+||
+''[[Valsa ceratosperma]]''
+''[[Cytospora sacculus]]'' [anamorph]
+|-
+|Wood rot
+||
+''[[Trametes versicolor]]''
+and various basidiomycetes
+|-
+|Xylaria root rot
+||
+''[[Xylaria]]'' spp.
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Alfalfa greening (green stain)
+||Unknown
+|-
+|Bitter pit
+||Localized calcium deficiency
+|-
+|Black end
+||Water imbalance
+|-
+|Black speck (skin speckling)
+||Associated with low oxygen in storage
+|-
+|Blossom blast
+||Boron deficiency
+|-
+|Brown core
+||High CO2
+|-
+|Core breakdown (Bartlett)
+||Senescence
+|-
+|Cork spot
+||Associated with calcium deficiency
+|-
+|Green stain
+||Unknown
+|-
+|Internal bark necrosis
+||Unknown
+|-
+|Mealy core (d`Anjou)
+||Senescence
+|-
+|Pink end (Bartlett)
+||Preharvest low temperature
+|-
+|Rosette
+||Unknown
+|-
+|Scald
+||Senescence
+|-
+|}
+
+==Nematodes, parasitic==
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger, American
+||
+''[[Xiphinema americanum]]''
+|-
+|Dagger
+||
+''[[Xiphinema riveri]]''
+''[[Xiphinema vuittenezi]]''
+|-
+|Lesion
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus penetrans]]''
+|-
+|Pin
+||
+''[[Paratylenchus]]'' spp.
+|-
+|Root-knot
+||
+''[[Meloidogyne]]'' spp.
+|-
+|}
+
+==Viruslike diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viruslike diseases'''
+|-
+|Flemish beauty corky pit
+||Virus suspected
+|-
+|Pear blister canker
+||Virus suspected
+|-
+|Pear decline
+||Phytoplasma
+|-
+|Pear freckle pit
+||Virus suspected
+|-
+|Pear red mottle
+||Virus suspected
+|-
+|Pear ring pattern mosaic
+||Virus suspected
+|-
+|Pear rough bark
+||Virus suspected
+|-
+|Pear stony pit
+||Virus suspected
+|-
+|Pear vein yellows
+||Virus suspected
+|-
+|Quince bark necrosis
+||Virus suspected
+|-
+|Quince sooty ring spot
+||Virus suspected
+|-
+|Quince stunt
+||Virus suspected
+|-
+|Quince yellow blotch
+||Virus suspected
+|-
+|}
+
+==References==
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Pear.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{pyrus}}
+
+[[Category:Lists of plant diseases|Pear]]
+[[Category:Pear tree diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_pineapple_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_pineapple_diseases.json
new file mode 100644
index 0000000..878aa08
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_pineapple_diseases.json
@@ -0,0 +1,215 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[pineapple]]s (''Ananas comosus'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial heart rot
+||''[[Erwinia chrysanthemi]]''
+|-
+|}
+
+==Bacterial diseases (fruit)==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases (fruit)'''
+|-
+|Acetic souring
+||''Acetic acid bacteria''
+|-
+|Bacterial fruitlet brown rot
+||''Erwinia ananas'' pv. ''ananas''
+|-
+|Fruit collapse
+||''Erwinia chrysanthemi''
+|-
+|Marbled fruit
+||''Acetobacter'' spp.
+''A. peroxydans''
+''Erwinia herbicola'' var. ''ananas''
+|-
+|Pink fruit
+||''Acetobacter aceti''
+''Erwinia herbicola''
+''Gluconobacter oxydans''
+|-
+|Soft rot
+||''Erwinia carotovora'' subsp. ''carotovora''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Anthracnose
+||
+''[[Colletotrichum ananas]]''
+|-
+|[[Pineapple black rot]]
+||
+''[[Chalara paradoxa]]''
+{{=}} ''[[Thielaviopsis paradoxa]]''
+''[[Ceratocystis paradoxa]]'' [teleomorph]
+|-
+|Leaf spot
+||
+''[[Curvularia eragrostidis]]''
+''[[Cochliobolus eragrostidis]]'' [teleomorph]
+|-
+|Phytophthora heart rot
+||
+''[[Phytophthora cinnamomi]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+{{=}} ''[[Phytophthora parasitica]]''
+|-
+|Root rot
+||
+''[[Pythium]]'' spp.
+''[[Pythium arrhenomanes]]''
+|-
+|Seedling blight
+||
+''[[Pythium]]'' spp.
+|-
+|White leaf spot
+||
+''[[Chalara paradoxa]]''
+{{=}} ''[[Thielaviopsis paradoxa]]''
+''[[Ceratocystis paradoxa]]'' [teleomorph]
+|-
+|}
+
+==Fungal diseases (fruit)==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases (fruit)'''
+|-
+|Aspergillus rot
+||
+''[[Aspergillus flavus]]''
+|-
+|Botryodiplodia rot
+||''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia theobromae]]''
+|-
+|Black rot (water blister)
+||
+''[[Chalara paradoxa]]''
+{{=}} ''[[Thielaviopsis paradoxa]]''
+''[[Ceratocystis paradoxa]]'' [teleomorph]
+|-
+|Fusariosis (gummosis)
+||
+''[[Fusarium subglutinans]]''
+{{=}} ''[[Fusarium moniliforme var. subglutinans]]''
+|-
+|Glassy spoilage
+||Yeast species
+|-
+|Hendersonula fruit rot
+||
+''[[Hendersonula toruloidea]]''
+|-
+|Interfruitlet corking
+||
+''[[Penicillium funiculosum]]''
+|-
+|Leathery pocket
+||
+''[[Penicillium funiculosum]]''
+|-
+|Nigrospora fruit rot
+||
+''[[Nigrospora sphaerica]]''
+|-
+|Phytophthora
+||
+''[[Phytophthora nicotianae var. parasitica]]''
+|-
+|Rhizopus rot
+||
+''[[Rhizopus oryzae]]''
+''[[Rhizopus stolonifer]]''
+|-
+|Yeasty fermentation
+||
+Yeast species
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| ''' diseases'''
+|-
+|Lesion
+||
+''[[Paratylenchus brachyurus]]''
+''[[Paratylenchus elachistus]]''
+{{=}} ''[[Paratylenchus minutus]]''
+|-
+|Reniform
+||
+''[[Rotylenchulus reniformis]]''
+|-
+|Root-knot
+||
+''[[Meloidogyne javanica]]''
+|-
+|Spiral
+||
+''[[Helicotylenchus]]'' spp.
+|-
+|}
+
+==Virus and viruslike diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| ''' diseases'''
+|-
+|Mealybug wilt
+||Unconfirmed virus/toxin
+|-
+|Terminal mottle
+||Unconfirmed virus/toxin
+|-
+|Yellow spot
+||[[Tomato spotted wilt virus]]
+|-
+|}
+
+==Miscellaneous diseases or disorders (fruit)==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fruit diseases or disorders (miscellaneous)'''
+|-
+|Internal browning
+||Physiological (chill injury)
+|-
+|Radial brown stripe
+||Physiological
+|-
+|Triad rot
+||Unknown
+|-
+|Y-center rot
+||Unknown
+|-
+|Woody fruit
+||Genetic
+|-
+|}
+
+==See also==
+*[[List of foliage plant diseases (Bromeliaceae)]]
+
+==References==
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Pineapple.aspx Common Names of Diseases, The American Phytopathological Society]
+
+[[Category:Lists of plant diseases|Pineapple]]
+[[Category:Pineapples|Disease]]
+[[Category:Fruit diseases|Pineapple]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_potato_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_potato_diseases.json
new file mode 100644
index 0000000..1115c0f
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_potato_diseases.json
@@ -0,0 +1,368 @@
+{{Short description|Listicle of diseases and disorders in potatoes}}
+This is a '''list of diseases and disorders''' found in '''[[potato]]es'''.
+
+==Bacterial diseases==
+{| class="wikitable" style="clear:left"
+! colspan=2| '''Bacterial Diseases'''
+|-
+|Bacterial wilt = brown rot||
+''[[Ralstonia solanacearum]]''
+:{{=}} ''Pseudomonas solanacearum''
+|-
+|align='top'|[[Blackleg (potatoes)|Blackleg]] and bacterial soft rot||
+[[Pectobacterium carotovorum subsp. atrosepticum|''Pectobacterium carotovorum'' subsp. ''atrosepticum'']]
+:{{=}} ''Erwinia carotovora'' subsp. ''atroseptica''
+[[Pectobacterium carotovorum subsp. carotovorum|''P. c.'' subsp. ''carotovorum'']]
+:{{=}} ''E. c.'' subsp.
+''carotovora''
+''[[Pectobacterium chrysanthemi|P. chrysanthemi]]''
+:{{=}} ''E. chrysanthemi''
+''[[Dickeya solani]]'' [{{cite web
+ |title = Major new disease threat to potatoes
+ |url = http://www.farmersguardian.com/home/arable/major-new-disease-threat-to-potatoes/33800.article
+ |author = William Surman
+ |date = 19 August 2010
+ |publisher = Farmers Guardian / UBM Information Ltd.
+ |accessdate = 26 July 2011
+ |url-status = dead
+ |archiveurl = https://web.archive.org/web/20120318022321/http://www.farmersguardian.com/home/arable/major-new-disease-threat-to-potatoes/33800.article
+ |archivedate = 18 March 2012
+}}]
+|-
+|Pink eye|| ''[[Pseudomonas fluorescens]]''
+|-
+|Ring rot||
+[[Clavibacter michiganensis subsp. sepedonicus|''Clavibacter michiganensis'' subsp. ''sepedonicus'']]
+:{{=}} ''Corynebacterium sepedonicum''
+|-
+|[[Common scab]]||
+''[[Streptomyces scabiei]]''
+:{{=}} ''S. scabies''
+''[[Streptomyces acidiscabies|S. acidiscabies]]''
+''[[Streptomyces turgidiscabies|S. turgidiscabies]]''
+|-
+|[[Zebra chip]] = [[Psyllid yellows]]?||
+[[Candidatus Liberibacter solanacearum|''Candidatus'' Liberibacter solanacearum]]
+|}
+
+==Fungal diseases==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Fungal diseases'''
+|-
+|Black dot||
+''[[Colletotrichum coccodes]]''
+:{{=}} ''Colletotrichum atramentarium''
+|-
+|Brown spot and Black pit||
+''[[Alternaria alternata]]''
+:{{=}} ''Alternaria tenuis''
+|-
+|Cercospora leaf blotch||
+''[[Mycovellosiella concors]]''
+:{{=}} ''Cercospora concors''
+''[[Cercospora solani|C. solani]]''
+''[[Cercospora solani-tuberosi|C. solani-tuberosi]]''
+|-
+|Charcoal rot||
+''[[Macrophomina phaseolina]]''
+:{{=}} ''Sclerotium bataticola]''
+|-
+|Choanephora blight||
+''[[Choanephora cucurbitarum]]''
+|-
+|Common rust||
+''[[Puccinia pittieriana]]''
+|-
+|Deforming rust||
+''[[Aecidium cantensis]]''
+|-
+|Early blight ||
+''[[Alternaria solani]]''
+|-
+|[[Fusarium dry rot]]
+||''[[Fusarium]]'' spp.
+''[[Gibberella pulicaris]]''
+:{{=}} ''F. solani''
+Other spp. include:
+''[[Fusarium avenaceum|F. avenaceum]]''
+''[[Fusarium oxysporum|F. oxysporum]]''
+''[[Fusarium culmorum|F. culmorum]]''
+Less common spp. include:
+''[[Fusarium acuminatum|F. acuminatum]]''
+''[[Fusarium equiseti|F. equiseti]]''
+''[[Fusarium crookwellense|F. crookwellense]]''
+|-
+|[[Fusarium wilt]]
+||''[[Fusarium]] spp.''
+''[[Fusarium avenaceum|F. avenaceum]]''
+''[[Fusarium oxysporum|F. oxysporum]]''
+[[Fusarium solani f.sp. eumartii|''F. solani'' f. sp. ''eumartii'']]
+|-
+|Gangrene ||
+[[Phoma solanicola f. foveata|''Phoma solanicola'' f. ''foveata'']]
+''[[Phoma foveata|Ph. foveata]]''
+:{{=}} ''Ph. exigua var. foveata''
+:{{=}} ''Ph. e. f. sp. foveata''
+[[Phoma exigua var. exigua|''Ph. e.'' var. ''exigua'']]
+|-
+|Gray mold ||
+''[[Botrytis cinerea]]''
+:''Botryotinia fuckeliana'' [teleomorph]
+|-
+|Phoma leaf spot ||
+[[Phoma andigena var. andina|''Ph. andigena'' var. ''andina'']]
+|-
+|[[Powdery mildew]] ||
+''[[Erysiphe cichoracearum]]''
+|-
+|Rhizoctonia canker and black scurf ||
+''[[Rhizoctonia solani]]''
+|-
+|Rosellinia black rot||
+''[[Rosellinia]]'' sp.{{ Which | date = March 2023 }}
+:''Dematophora'' sp. [anamorph]
+|-
+|Septoria leaf spot ||
+[[Septoria lycopersici var. malagutii|''S. lycopersici'' var. ''malagutii'']]
+|-
+|Silver scurf||
+''[[Helminthosporium solani]]''
+|-
+|Skin spot ||
+''[[Polyscytalum pustulans]]''
+|-
+|Stem rot ([[southern blight]]) ||
+''[[Athelia rolfsii]]''
+|-
+|Thecaphora smut||
+''[[Angiosorus solani]]''
+:{{=}} ''Thecaphora solani''
+|-
+|Ulocladium blight||
+''[[Ulocladium atrum]]''
+|-
+|[[Verticillium wilt]]||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae|V. dahliae]]''
+|-
+|Wart||
+''[[Synchytrium endobioticum]]''
+|-
+|White mold (=||
+''[[Sclerotinia sclerotiorum]]''
+|-
+|}
+
+==Protistan diseases==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Protistan diseases'''
+|-
+|[[Late blight]] (oomycete)||
+''[[Phytophthora infestans]]''[{{Citation|title=Potato and tomato late blight caused by Phytophthora infestans: An overview of pathology and resistance breeding |last=Nowicki|first=Marcin|date=17 August 2011|publisher=Plant Disease, ASP|doi= 10.1094/PDIS-05-11-0458|display-authors=etal|pmid=30731850|volume=96|issue = 1|journal=[[Plant Dis]]|pages=4–17|doi-access=}}]
+|-
+|Leak ([[oomycete]])||
+''[[Pythium]]'' spp.
+''[[Pythium ultimum var. ultimum]]''
+{{=}} ''[[Pythium debaryanum]]''
+''[[Pythium aphanidermatum]]''
+''[[Pythium deliense]]''
+|-
+|Pink rot ([[oomycete]])||
+''[[Phytophthora]]'' spp.
+''[[Phytophthora cryptogea]]''
+''[[Phytophthora drechsleri]]''
+''[[Phytophthora erythroseptica]]''
+''[[Phytophthora megasperma]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+|-
+|Powdery scab ([[Rhizaria]]) ||
+''[[Spongospora subterranea f.sp. subterranea]]''
+|-
+|}
+
+==Viral and viroid diseases==
+{{main|Viral diseases of potato}}
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Viral and viroid diseases'''
+|-
+|Alfalfa mosaic virus||genus [[Alfamovirus]], [[Alfalfa mosaic virus|Alfalfa mosaic virus (AMV)]]
+|-
+|Andean potato latent virus||genus [[Tymovirus]], [[Andean potato latent virus]] (APLV)
+|-
+|Andean potato mottle virus||genus [[Comovirus]], [[Andean potato mottle virus]] (APMV)
+|-
+|Arracacha virus B - Oca strain ||genus [[Nepovirus]], [[Arracacha virus B]] Oca strain (AVB-O)
+|-
+|Beet curly top virus||genus [[Curtovirus]], [[Beet curly top virus]] (BCTV)
+|-
+|Cucumber mosaic virus||genus [[Cucumovirus]], [[Cucumber mosaic virus]] (CMV)
+|-
+|Eggplant mottle dwarf virus||genus [[Rhabdovirus]], [[Eggplant mottle dwarf virus]] (EMDV)
+|-
+|Potato aucuba mosaic virus||genus [[Potexvirus]], [[Potato aucuba mosaic virus]] (PAMV)
+|-
+|Potato black ringspot virus||genus [[Nepovirus]], [[Potato black ringspot virus]] (PBRSV)
+|-
+|Potato deforming mosaic virus||genus [[Geminiviridae]] [[Potato deforming mosaic virus]] subgroup III, (PDMV)
+|-
+|Potato latent virus||genus [[Carlavirus]], [[Potato latent virus]] (PLV)
+|-
+|Potato leafroll virus||genus [[Luteovirus]], [[Potato leafroll virus]] (PLRV)
+|-
+|Potato mop-top virus ([[spraing]] of tubers)||genus [[Furovirus]], [[Potato mop-top virus]] (PMTV)
+|-
+|Potato rugose mosaic||genus [[Potyvirus]], [[Potato virus Y]] (PVY, strains O, N and C)
+|-
+|Potato stem mottle ([[spraing]] of tubers)||genus [[Tobravirus]], [[Tobacco rattle virus]] (TRV)
+|-
+|Potato spindle tuber||[[Potato spindle tuber viroid]] (PSTVd)
+|-
+|Potato yellow dwarf virus||genus [[Nucleorhabdovirus]], [[Potato yellow dwarf virus]] (PYDV)
+|-
+|Potato yellow mosaic virus ||genus [[Geminiviridae]], [[Potato yellow mosaic virus]] (PYMV); subgroup III
+|-
+|Potato yellow vein virus||[[Potato yellow vein virus]] (PYVV)
+|-
+|Potato yellowing virus||genus [[Alfamovirus]], [[Potato yellowing virus]] (PYV)
+|-
+|Potato virus A||genus [[Potyvirus]], [[Potato virus A]] (PVA)
+|-
+|Potato virus M||genus [[Carlavirus]], [[Potato virus M]] (PVM)
+|-
+|Potato virus S||genus [[Carlavirus]], [[Potato virus S]] (PVS)
+|-
+|Potato virus H||genus [[Carlavirus]], [[Potato virus H]] (PVH)
+|-
+|Potato virus T||genus [[Trichovirus]], [[Potato virus T]]
+|-
+|Potato virus U||genus [[Nepovirus]], [[Potato virus U]] (PVU)
+|-
+|Potato virus V||genus [[Potyvirus]], [[Potato virus V]] (PVV)
+|-
+|Potato virus X||genus [[Potexvirus]], [[Potato virus X]] (PVX)
+|-
+|Potato virus Y||genus [[Potyvirus]], [[Potato virus Y]] (PVY)
+|-
+|Solanum apical leaf curling virus||[[Geminiviridae]], [[Solanum apical leaf curling virus]] (SALCV) subgroup III
+|-
+|Sowbane mosaic virus||genus [[Sobemovirus]], [[Sowbane mosaic virus]] (SoMV)
+|-
+|Tobacco mosaic virus||genus [[Tobamovirus]], [[Tobacco mosaic virus]] (TMV)
+|-
+|Tobacco necrosis virus||genus [[Necrovirus]], [[Tobacco necrosis virus]] (TNV)
+|-
+|Tobacco rattle virus||genus [[Tobravirus]], [[Tobacco rattle virus]] (TRV)
+|-
+|Tobacco streak virus||genus [[Ilarvirus]], [[Tobacco streak virus]] (TSV)
+|-
+|Tomato black ring virus||genus [[Nepovirus]], [[Tomato black ring virus]] (ToBRV)
+|-
+|Tomato mosaic virus||genus [[Tobamovirus]], [[Tomato mosaic virus]] (ToMV)
+|-
+|Tomato spotted wilt virus||genus [[Tospovirus]], [[Tomato spotted wilt virus]] (TSWV)
+|-
+|Tomato yellow mosaic virus||genus [[Geminiviridae]], [[Tomato yellow mosaic virus]] (ToYMV) subgroup III
+|-
+|Wild potato mosaic virus||genus [[Potyvirus]], [[Wild potato mosaic virus]] (WPMV)
+|-
+|}
+
+==Nematode parasitic==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Nematode parasitic'''
+|-
+|[[Potato cyst nematode]]
+||
+''[[Globodera rostochiensis]]''
+''[[Globodera pallida]]''
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus penetrans]]''
+Other species include:
+''[[Pratylenchus scribneri]]''
+''[[Pratylenchus neglectus]]''
+''[[Pratylenchus thornei]]''
+''[[Pratylenchus crenatus]]''
+''[[Pratylenchus andinus]]''
+''[[Pratylenchus vulnus]]''
+''[[Pratylenchus coffeae]]''
+|-
+|Potato rot nematode
+||
+''[[Ditylenchus destructor]]''
+|-
+|Root knot nematode
+||
+''[[Meloidogyne]]'' spp.
+''[[Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+''[[Meloidogyne chitwoodi]]''
+|-
+|Sting nematode
+||
+''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root nematode
+||
+''[[Paratrichodorus]] spp.''
+''[[Trichodorus]]'' spp.
+|-
+|}
+
+==Phytoplasmal diseases==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Phytoplasmal diseases'''
+|-
+|Aster yellows||Aster yellows group of phytoplasmas
+|-
+|Witches'-broom||Witches’ broom phytoplasma
+|-
+|BLTVA||The beet leafhopper-transmitted virescence agent
+|}
+
+==Miscellaneous diseases and disorders==
+{| class="wikitable" style="clear:left"
+!colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Aerial tubers||Phytoplasma infection or anything that constricts the stem, including but not limited to Rhizoctonia canker, heat necrosis, chemical injury, mechanical injury, wind injury
+|-
+|Air pollution injury||Photochemical oxidants (primarily ozone), sulfur oxides
+|-
+|Black heart||Oxygen deficiency of internal tuber tissue
+|-
+|Blackspot bruise||Bruising, pressure contact
+|-
+|Elephant hide||Roughening of tuber skin due to physiological or environmental causes
+|-
+|Hollow heart||Excessively rapid tuber enlargement
+|-
+|Internal brown spot = heat necrosis ||Oxygen deficiency of tuber accompanying high soil temperature
+|-
+|Jelly end rot||Carbohydrate translocation due to second growth
+|-
+|Physiological leaf roll||Response to adverse environment
+|-
+|Psyllid yellows||Toxic saliva of the potato (tomato) psyllid, ''Paratrioza cockerelli''
+|-
+|Shatter bruise ||Mechanical damage to tuber
+|-
+|Skinning ||Mechanical damage to tuber
+|-
+|Stem-end browning ||Exact cause(s) unknown, chemical injury, viruses or other pathogens.
+|-
+|}
+
+==References==
+
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Potato.aspx Common Names of Diseases, The American Phytopathological Society]
+* [https://vegetablemdonline.ppath.cornell.edu/factsheets/Potato_List.htm Potato Diseases (Fact Sheets and Information Bulletins), The Cornell Plant Pathology Vegetable Disease Web Page]
+
+==External links==
+* {{cite web|last1=Sparks|first1=Adam|last2=Kennelly|first2=Megan|title=Common Scab of Potato|url=http://krex.k-state.edu/dspace/bitstream/handle/2097/21718/KSUL0009KSREEPPUBSEP148a.pdf|publisher=Kansas State University Agricultural Experiment Station and Cooperative Extension Service|accessdate=2018-01-06|date=May 2008}}
+
+[[Category:Lists of plant diseases|Potato]]
+[[Category:Potato diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_rice_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_rice_diseases.json
new file mode 100644
index 0000000..153a6cf
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_rice_diseases.json
@@ -0,0 +1,220 @@
+{{Short description|Rice disease}}
+This article is a list of '''diseases''' of '''[[rice]]''' (''Oryza sativa''). Diseases have historically been one of the major causes of [[Famine|rice shortage]]s.[{{cite journal | last=Freedman | first=Amy | title=Rice security in Southeast Asia: beggar thy neighbor or cooperation? | journal=[[The Pacific Review (Routledge journal)|The Pacific Review]] | publisher=[[Taylor & Francis]] | volume=26 | issue=5 | year=2013 | pages=433–454 | issn=0951-2748 | doi=10.1080/09512748.2013.842303| s2cid=153573639 }}]{{ RP |434}}
+
+== Bacterial diseases ==
+
+{| class="wikitable" style="clear"
+! colspan=2| Bacterial diseases
+|-
+|Bacterial blight
+||[[Xanthomonas oryzae pv. oryzae|''Xanthomonas oryzae'' pv. ''oryzae'']] = ''X. campestris'' pv. ''oryzae''
+|-
+|Bacterial leaf streak
+||[[Xanthomonas oryzae pv. oryzicola|''Xanthomonas oryzae'' pv. ''oryzicola'']]
+|-
+|Foot rot
+||''[[Dickeya dadantii]]''/''Erwinia chrysanthemi''
+|-
+|Grain rot
+||''[[Burkholderia glumae]]''
+|-
+|Pecky rice (kernel spotting)
+
+||Damage by bacteria (see also under fungal and miscellaneous diseases)
+|-
+|Sheath brown rot
+||''[[Pseudomonas fuscovaginae]]''
+|-
+|}
+
+== Fungal diseases ==
+
+{| class="wikitable" style="clear"
+! colspan=2| Fungal diseases
+|-
+|Aggregate sheath
+||
+''[[Ceratobasidium oryzae-sativae]]''
+''Rhizoctonia oryzae-sativae'' [anamorph]
+|-
+|Black horse riding
+
+||
+''[[Curvularia lunata]]''
+''Cochliobolus lunatus'' [teleomorph]
+|-
+|Blast (leaf, neck [rotten neck], nodal and collar)
+||
+''Pyricularia grisea''
+{{=}} ''Pyricularia oryzae''
+''[[Magnaporthe grisea]]''[{{Cite journal | pmid = 15846337| year = 2005| last1 = Dean| first1 = R. A.|display-authors=etal|title = The genome sequence of the rice blast fungus ''Magnaporthe grisea'' | journal = [[Nature (journal)|Nature]] | volume = 434| issue = 7036| pages = 980–6| doi = 10.1038/nature03449| bibcode = 2005Natur.434..980D| doi-access = free}}] [teleomorph]
+|-
+|Brown spot
+||
+''[[Cochliobolus miyabeanus]]''
+''Bipolaris oryzae'' [anamorph]
+|-
+|Crown sheath rot
+||
+''[[Gaeumannomyces graminis]]''
+|-
+|Downy mildew
+||
+''[[Sclerophthora macrospora]]''
+|-
+|Eyespot
+||
+''[[Drechslera gigantea]]''
+|-
+|False smut
+||
+''[[Ustilaginoidea virens]]''
+|-
+|Kernel smut
+||
+''[[Tilletia barclayana]]''
+{{=}} ''Neovossia horrida''
+|-
+|Leaf smut
+||
+''[[Entyloma oryzae]]''
+|-
+|Leaf scald
+||
+''[[Microdochium oryzae]]''
+{{=}} ''Rhynchosporium oryzae''
+|-
+|Narrow brown leaf spot
+||
+''[[Cercospora janseana]]''
+{{=}} ''Cercospora oryzae''
+''Sphaerulina oryzina'' [teleomorph]
+|-
+|Pecky rice (kernel spotting)
+||
+Damage by many fungi including
+''[[Cochliobolus miyabeanus]]''
+''[[Curvularia]]'' spp.
+''[[Fusarium]] spp.''
+''[[Microdochium oryzae]]''
+''[[Sarocladium oryzae]]''
+and other fungi.
+|-
+|Root rots
+||
+''[[Fusarium]]'' spp.
+''[[Pythium]]'' spp.
+''[[Pythium dissotocum|P. dissotocum]]''
+''[[Pythium spinosum|P. spinosum]]''
+|-
+|{{strike|[[Rust (fungus)|Rust]]}}
+||
+Rice is immune to rusts.[{{cite news | url=http://ricetoday.irri.org/no-rust-for-rice/ | first=Linda | last=McCandless | date=2011 | title=No rust for rice | journal= [[Rice Today]] | volume=10 | issue=1 | pages=38–39 | publisher=[[CGIAR]]'s Research Program on Rice & [[International Rice Research Institute|IRRI]] (International Rice Research Institute) }}]
+|-
+|Seedling blight
+||
+''[[Cochliobolus miyabeanus]]''
+''[[Curvularia]]'' spp.
+''[[Fusarium]]'' spp.
+''[[Rhizoctonia solani]]''
+''[[Athelia rolfsii]]''
+and other pathogenic fungi.
+|-
+|[[Sheath blight]]
+||
+''[[Rhizoctonia solani]]''
+|-
+|Sheath rot
+||
+''[[Sarocladium oryzae]]''
+{{=}} ''Acrocylindrium oryzae''
+|-
+|Sheath spot
+||''[[Waitea oryzae]]''
+|-
+||Stackburn (Alternaria leaf spot)
+||
+''[[Alternaria padwickii]]''
+|-
+|Stem rot
+||
+''[[Magnaporthe salvinii]]''
+''Sclerotium oryzae'' [synanamorph]
+|-
+|Water-mold (seed-rot and seedling disease)
+||
+''[[Achlya conspicua]]''
+''[[Achlya klebsiana|A. klebsiana]]''
+''[[Fusarium]]'' spp.
+''[[Pythium]]'' spp.
+''[[Pythium dissotocum|P. dissotocum]]''
+''[[Pythium spinosum|P. spinosum]]''
+|-
+|}
+
+== Viruses ==
+[{{ cite journal | last=Hibino | first=Hiroyuki | title=Biology and Epidemiology of Rice Viruses | journal=[[Annual Review of Phytopathology]] | publisher=[[Annual Reviews (publisher)|Annual Reviews]] | volume=34 | issue=1 | year=1996 | issn=0066-4286 | doi=10.1146/annurev.phyto.34.1.249 | pages=249–274 | pmid=15012543 }}]
+*''[[Rice black-streaked dwarf virus]]''
+*''[[Rice bunchy stunt virus]]''
+*''[[Rice dwarf virus]]''
+*''[[Rice gall dwarf virus]]''
+*''[[Rice giallume virus]]''
+*''[[Rice grassy stunt virus]]''
+*''[[Rice hoja blanca tenuivirus]]''
+*''[[Rice necrosis mosaic virus]]''
+*''[[Rice ragged stunt virus]]''
+*''[[Rice stripe necrosis virus]]''
+*''[[Rice stripe tenuivirus]]''
+*''[[Rice transitory yellowing virus]]''
+*''Rice tungro bacilliform virus'' - see Tungro below
+*''Rice tungro spherical virus'' - see Tungro below
+*''[[Rice yellow mottle virus]]''
+
+== Miscellaneous diseases and disorders ==
+
+{| class="wikitable" style="clear"
+! colspan=2| Miscellaneous diseases and disorders
+|-
+|Alkalinity or salt damage
+||Excessive salt concentration in soil or water
+|-
+|Bronzing
+||Zinc deficiency
+|-
+|Cold injury
+||Low temperatures
+|-¡↑↓•¶∞
+|Panicle blight
+||Cause undetermined
+|-
+|golden apple snail
+||''[[Pomacea canaliculata]]''
+|-
+|Pecky rice (kernel spotting)
+||Feeding injury by [[rice stink bug]], ''[[Oebalus pugnax]]''
+|-
+|{{ Visible anchor|Tungro|text=[[Tungrovirus|Rice tungro]]}}
+||Complex virus (''[[Rice tungro bacilliform virus]]'' and ''[[Rice tungro spherical virus]]'') transmitted by green leafhopper ''[[Nephotettix]]'' spp.)
+|-
+|Straighthead[[https://digital.library.unt.edu/permalink/meta-dc-1529:1 ''Straighthead of rice and its control'']]
+||Arsenic induced, unknown physiological disorder
+|-
+|White tip (see nematodes)
+||''[[Aphelenchoides besseyi]]''
+|}
+
+== See also ==
+*[[:Category:Insect pests of rice]]
+* [[List of rice varieties]]
+
+== References ==
+{{reflist|30em|refs=
+[{{cite web | title=bacterial leaf blight of rice, ''Xanthomonas oryzae'' pv. ''oryzae'' Xanthomonadales: Xanthomonadaceae | website= [[Invasive.Org]] | url=http://www.invasive.org/browse/subinfo.cfm?sub=11182 | access-date=2021-01-01}}]
+}}
+
+== External links ==
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Rice.aspx Common Names of Diseases], The American Phytopathological Society (APS)
+* [https://digital.library.unt.edu/permalink/meta-dc-1529:1 ''Straighthead of rice and its control''] hosted by the [https://digital.library.unt.edu/browse/department/govdocs/ Government Documents Department] of the [[University of North Texas]] (UNT)
+
+[[Category:Rice diseases|*]]
+[[Category:Lists of plant diseases|Rice]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_rose_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_rose_diseases.json
new file mode 100644
index 0000000..85dad8b
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_rose_diseases.json
@@ -0,0 +1 @@
+#REDIRECT:[[List of pests and diseases of roses]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_sorghum_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_sorghum_diseases.json
new file mode 100644
index 0000000..59caefa
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_sorghum_diseases.json
@@ -0,0 +1,310 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[sorghum]] (''[[Sorghum bicolor]]'').
+
+== Bacterial ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial leaf spot
+||''[[Pseudomonas syringae]]''
+|-
+|Bacterial leaf streak
+||[[Xanthomonas campestris pv. holcicola|''Xanthomonas campestris'' pv. ''holcicola'']]
+|-
+|Bacterial leaf stripe
+||''[[Burkholderia andropogonis]]''
+|-
+|}
+
+== Fungi ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Acremonium wilt
+||
+''[[Acremonium strictum]]''
+{{=}} ''Cephalosporium acremonium''
+|-
+|Anthracnose (foliar, head, root and stalk rot)
+||
+''[[Colletotrichum graminicola]]''
+:''Glomerella graminicola'' [teleomorph]
+|-
+|Charcoal rot
+||
+''[[Macrophomina phaseolina]]''
+|-
+|Crazy top downy mildew
+||
+''[[Sclerophthora macrospora]]''
+{{=}} ''Sclerospora macrospora''
+|-
+|Damping-off and seed rot
+||
+''[[Aspergillus]]'' spp.
+''[[Exserohilum]]'' spp.
+''[[Fusarium]]'' spp.
+''[[Penicillium]]'' spp.
+''[[Pythium]]'' spp.
+''[[Rhizoctonia]]'' spp.
+and other species.
+|-
+|Ergot
+||
+''[[Sphacelia sorghi]]''
+:''Claviceps sorghi'' {{bracket|[[teleomorph]]}}
+|-
+|Fusarium head blight, root and stalk rot
+||
+''[[Fusarium moniliforme]]''
+:''Gibberella fujikuroi'' [teleomorph]
+Other ''[[Fusarium]]'' spp.
+|-
+|Grain storage mold
+||
+''[[Aspergillus]]'' spp.
+''[[Penicillium]]'' spp.
+and other species.
+|-
+|Gray leaf spot
+||
+''[[Cercospora sorghi]]''
+|-
+|Latter leaf spot
+||
+''[[Cercospora fusimaculans]]''
+|-
+|Leaf blight
+||
+''[[Setosphaeria turcica]]''
+{{=}} ''Exserohilum turcicum'' [anamorph]
+{{=}} ''Helminthosporium turcicum''
+|-
+|Milo disease (Periconia root rot)
+||
+''[[Periconia circinata]]''
+|-
+|Oval leaf spot
+||
+''[[Ramulispora sorghicola]]''
+|-
+|Pokkah Boeng (twisted top)
+||
+''[[Gibberella fujikuroi var. subglutinans]]''
+{{=}} ''Fusarium moniliforme'' var. ''subglutinans'' [anamorph]
+|-
+|Pythium root rot
+||
+''[[Pythium graminicola]]''
+Other ''[[Pythium]]'' spp.
+|-
+|Rough leaf spot
+||
+''[[Ascochyta sorghi]]''
+|-
+|Rust
+||
+''[[Puccinia purpurea]]''
+|-
+|Seedling blight and seed rot
+||
+''[[Colletotrichum graminicola]]''
+''[[Exserohilum turcicum]]''
+''[[Fusarium moniliforme]]''
+''[[Pythium aphanidermatum]]''
+Other ''[[Pythium]]'' spp.
+|-
+|Smut, covered kernel
+||
+''[[Sporisorium sorghi]]''
+{{=}} ''Sphacelotheca sorghi''
+|-
+|Smut, head
+||
+''[[Sphacelotheca reiliana]]''
+{{=}} ''S. holci-sorghi''
+|-
+|Smut, loose kernel
+||
+''[[Sporisorium cruentum]]''
+{{=}} ''S. cruenta''
+|-
+|Sooty stripe
+||
+''[[Ramulispora sorghi]]''
+|-
+|Sorghum downy mildew
+||
+''[[Peronosclerospora sorghi]]''
+{{=}} ''Sclerospora sorghi''
+|-
+|Tar spot
+||
+''[[Phyllachora sacchari]]''
+|-
+|Target leaf spot
+||
+''[[Bipolaris cookei]]''
+{{=}} ''Helminthosporium cookei''
+|-
+|Zonate leaf spot and sheath blight
+||
+''[[Gloeocercospora sorghi]]''
+|-
+|}
+
+== Nematodes ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Awl
+||''[[Dolichodorus]]'' spp.
+|-
+|Dagger, American
+||''[[Xiphinema americanum]]''
+|-
+|Lesion
+||''[[Pratylenchus]]'' spp.
+|-
+|Needle
+||''[[Longidorus africanus]]'' and other species
+|-
+|Pin
+||''[[Paratylenchus]]'' spp.
+|-
+|Reniform
+||''[[Rotylenchus]]'' spp.
+|-
+|Ring
+||''[[Criconemella]]'' spp.
+|-
+|Root-knot
+||''[[Meloidogyne]]'' spp.
+|-
+|Spiral
+||''[[Helicotylenchus]]'' spp.
+|-
+|Sting
+||''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root
+||
+''[[Paratrichodorus]]'' spp.
+''[[Paratrichodorus minor]]''
+|-
+|Stunt
+||
+''[[Tylenchorhynchus]]'' spp.
+''[[Merlinius brevidens]]''
+|-
+|}
+
+== Viruses ==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Maize chlorotic dwarf
+||[[Maize chlorotic dwarf virus]]
+|-
+|Maize dwarf mosaic
+||[[Maize dwarf mosaic virus]]
+|-
+|Sugarcane mosaic
+||[[Sugarcane mosaic virus]]
+|-
+|}
+
+== Phytoplasma ==
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Yellow sorghum stunt
+||[[Yellow sorghum stunt phytoplasma]]
+|-
+|}
+
+== Insects ==
+Insect pests include:[{{cite book|last=Kalaisekar|first=A|title=Insect pests of millets: systematics, bionomics, and management|publisher=Elsevier|publication-place=London|year=2017|isbn=978-0-12-804243-4|oclc=967265246}}]
+
+=== Root feeders ===
+*White grubs
+**''[[Holotrichia serrata]]''
+**''[[Lachnosterna consanguinea]]''
+*[[wireworm]]s ([[Elateridae]], [[Tenebrionidae]])
+*underground burrowing bugs, ''[[Stibaropus]]'' spp.
+*termites
+**''[[Odontotermes]]'' spp.
+**''[[Microtermes]]'' sp.
+*ants
+**''[[Monomorium salomonis]]''
+**''[[Pheidole sulcaticeps]]''
+
+=== Seedling pests ===
+*shoot fly, ''[[Atherigona soccata]]''
+*cutworm, ''[[Agrotis ipsilon]]''
+
+=== Stem borers and leaf feeders ===
+*spotted stalk borer, ''[[Chilo partellus]]''
+*pink borer, ''[[Sesamia inferens]]''
+*armyworm, ''[[Mythimna separata]]''
+*''[[Spodoptera exempta]]''
+*caterpillars ''[[Amsacta albistriga]]'', ''[[Amsacta lactinea]]'', ''[[Euproctis virguncula]]'', ''[[Cnaphalocrocis patnalis]]'', and ''[[Mocis frugalis]]''
+*chrysomelid leaf beetles ''[[Chaetocnema indica]]'', ''[[Longitarsus]]'' spp., and ''[[Phyllotreta chotonica]]''
+*ash weevil ''[[Myllocerus undecimpustulatus]] maculosus''
+*grasshoppers, ''[[Nomadacris septemfasciata]]'', ''[[Acrida exaltata]]'', ''[[Aiolopus longicornis]]'', ''[[Aiolopus simulatrix]]'', ''[[Aiolopus thalassinus]]'', ''[[Atractomorpha crenulata]]'', ''[[Chrotogonus hemipterus]]'', ''[[Diabolocatantops axillaris]]'', ''[[Hieroglyphus banian]]'', and ''[[Hieroglyphus nigrorepletus]]''
+*grasshopper ''[[Conocephalus maculatus]]'' (eastern India)
+*grasshopper ''[[Hieroglyphus nigrorepletus]]'' (western India)
+
+=== Sucking pests ===
+*shoot bug ''[[Peregrinus maidis]]'' (transmits two viral diseases, [[maize mosaic virus]] (MMV) and [[maize stripe virus]] (MStpV))
+*corn aphid ''[[Rhopalosiphum maidis]]''
+*sugarcane leafhopper ''[[Pyrilla perpusilla]]''
+*hemipterous bugs, ''[[Cletus punctiger]]'', ''[[Dolycoris indicus]]'', ''[[Empoasca flavescens]]'', ''[[Lygaeus]]'' spp., ''[[Menida histrio]]'', ''[[Nephotettix virescens]]'', and ''[[Nezara viridula]]''
+*thrips, especially ''[[Caliothrips indicus]]'', ''[[Sorghothrips jonnaphilus]]''
+
+=== Earhead pests ===
+*sorghum midge ''[[Stenodiplosis sorghicola]]''
+*earhead bug ''[[Calocoris angustatus]]''
+*bugs, like ''[[Dysdercus koenigii]]'' and ''[[Nezara viridula]]''
+*lepidopteran caterpillars are found feeding on developing grains: ''[[Autoba silicula]]'', ''[[Cryptoblabes gnidiella]]'', ''[[Cydia]]'' spp., ''[[Conogethes punctiferalis]]'', ''[[Ephestia cautella]]'', ''[[Eublemma]]'' spp., ''[[Euproctis limbata]]'', ''[[Euproctis subnotata]]'', ''[[Helicoverpa armigera]]''
+*maize cob borer ''[[Stenachroia elongella]]'', especially in east India
+*beetle species, ''[[Chiloloba acuta]]'', ''[[Mylabris pustulata]]'', and ''[[Cylindrothorax tenuicollis]]''
+
+=== Grain pests ===
+*''[[Sitophilus]]'' spp. (attacks stored grains)
+
+=== Africa ===
+The following pest species are reported for sorghum crops in northern [[Mali]].[{{cite web| last=Heath |first=Jeffrey |author-link=Jeffrey Heath (linguist) |title=Guide to insects, arthropods, and molluscs of northern Dogon country |url=https://dogonlanguages.org/sources/insectarthropodmolluscnotesmalijh}}]
+
+*''[[Atherigona soccata]]'' (sorghum shoot fly, a major pest): The larvae cut the growing point of the sorghum leaf.
+*''[[Agonoscelis pubescens]]'' is also reported as a sorghum pest.
+*''[[Busseola fusca]]'' (maize stem-borer; Lepidoptera, [[Noctuidae]]) attacks maize and sorghum, and occurs especially at higher altitudes. It is a common pest in [[East Africa]], but has also spread to [[West Africa]].
+*''[[Chilo partellus]]'' (spotted stem-borer; Lepidoptera, [[Crambidae]]): introduced, from East Africa but spreading. The larvae attack sorghum and maize. Present at low and mid altitudes.
+*''[[Contarinia sorghicola]]'' (sorghum midge or ''cecidomyie du sorgho'' in French; Diptera, [[Cecidomyiidae]]): The adult resembles mosquitoes. Larvae feed on developing ovaries of sorghum grains.
+*''[[Melanaphis sacchari]]'' (sugar cane aphid) attacks sorghum.
+
+''[[Sitophilus zeamais]]'' (maize weevil) and ''[[Sitotroga cerealella]]'' (Angoumois grain moth) attack stored sorghum and [[maize]].[
+
+== See also ==
+*[[List of insect pests of millets]]
+*[[List of pearl millet diseases]]
+
+== References ==
+{{reflist}}
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Sorghum.aspx Common Names of Diseases], The [[American Phytopathological Society]] (APS)
+
+
+
+
+
+
+
+
+
+
+
+[[Category:Lists of plant diseases|Sorghum]]
+[[Category:Sorghum diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_soybean_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_soybean_diseases.json
new file mode 100644
index 0000000..bb6c115
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_soybean_diseases.json
@@ -0,0 +1,342 @@
+{{Short description|none}}
+[[soybean|Soybean plants]] (''Glycine max'') are subject to a variety of diseases and pests.
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases''']
+|-
+|Bacterial blight
+||''[[Pseudomonas amygdali]]'' pv. ''glycinea''
+|-
+||{{Visible anchor|Bacterial pustules}}
+||''[[Xanthomonas axonopodis]]'' pv. ''glycines'' {{=}} ''[[Xanthomonas campestris]]'' pv. ''glycines'' {{=}} ''[[Xanthomonas citri]]'' pv. ''glycines''
+|-
+|Bacterial tan spot
+||''Curtobacterium flaccumfaciens'' pv. ''flaccumfaciens'' = ''Corynebacterium flaccumfaciens'' pv. ''flaccumfaciens''
+|-
+|Bacterial wilt
+||''[[Curtobacterium flaccumfaciens]]'' pv. ''flaccumfaciens''
+''[[Ralstonia solanacearum]]'' = ''Pseudomonas solanacearum''
+|-
+|Wildfire
+||''[[Pseudomonas syringae]]'' pv. ''tabaci''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|-
+|Alternaria leaf spot
+||
+''[[Alternaria]]'' spp.{{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+|-
+|Anthracnose
+||
+''[[Colletotrichum truncatum]]''
+''[[Colletotrichum dematium f. truncatum]]''
+''[[Glomerella glycines]]''
+''[[Colletotrichum destructivum]]'' [anamorph]
+|-
+|Black leaf blight
+||
+''[[Arkoola nigra]]''
+|-
+|Black root rot
+||
+''[[Thielaviopsis basicola]]''
+''[[Chalara elegans]]'' [synanamorph]
+|-
+|Brown spot
+||
+''[[Septoria glycines]]''
+''[[Mycosphaerella usoenskajae]]'' [teleomorph]
+|-
+|Brown stem rot
+||
+''[[Phialophora gregata]]''
+{{=}} ''[[Cephalosporium gregatum]]''
+|-
+|Charcoal rot[
+||
+''[[Macrophomina phaseolina]]''
+|-
+|Choanephora leaf blight
+||
+''[[Choanephora infundibulifera]]'']
+''[[Choanephora trispora]]''
+|-
+|Damping-off
+||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+''[[Pythium aphanidermatum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium irregulare]]''
+''[[Pythium myriotylum]]''
+''[[Pythium ultimum]]''
+|-
+|Downy mildew
+||
+''[[Peronospora manshurica]]''
+|-
+|Drechslera blight
+||
+''[[Drechslera glycines]]''
+|-
+|Frogeye leaf spot
+||
+''[[Cercospora sojina]]''
+|-
+|Fusarium root rot {{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+||
+''[[Fusarium]]'' spp.
+|-
+|Leptosphaerulina leaf spot
+||
+''[[Leptosphaerulina trifolii]]''
+|-
+|Mycoleptodiscus root rot
+||
+''[[Mycoleptodiscus terrestris]]''
+|-
+|Neocosmospora stem rot
+||
+''[[Neocosmospora vasinfecta]]''
+''[[Acremonium]]'' spp. [anamorph]{{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+|-
+|Phomopsis seed decay
+||
+''[[Phomopsis]]'' spp.
+|-
+|Phytophthora root and stem rot[Pratt, Phillip W. [http://pods.dasnr.okstate.edu/docushare/dsweb/Get/Document-2311/EPP-7660web.pdf Common Soybean Diseases in Oklahoma], Oklahoma State University, 2003.]
+||
+''[[Phytophthora sojae]]''
+|-
+|Phyllosticta leaf spot
+||
+''[[Phyllosticta sojaecola]]''
+|-
+|Phymatotrichum root rot = cotton root rot
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''{{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+|-
+|Pod and stem blight
+||
+''[[Diaporthe phaseolorum]]''
+''[[Phomopsis sojae]]'' [anamorph]
+|-
+|Powdery mildew
+||
+''[[Microsphaera diffusa]]''
+|-
+|Purple seed stain
+||
+''[[Cercospora kikuchii]]''
+|-
+|Pyrenochaeta leaf spot
+||
+''[[Pyrenochaeta glycines]]''
+|-
+|Pythium rot
+||
+''[[Pythium aphanidermatum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium irregulare]]''
+''[[Pythium myriotylum]]''
+''[[Pythium ultimum]]''
+|-
+|Red crown rot
+||
+''[[Cylindrocladium crotalariae]]''
+''[[Calonectria crotalariae]]'' [teleomorph]
+|-
+|Red leaf blotch = Dactuliophora leaf spot
+||
+''[[Dactuliochaeta glycines]]''
+{{=}} ''[[Pyrenochaeta glycines]]''
+''[[Dactuliophora glycines]]'' [synanamorph]
+|-
+|Rhizoctonia aerial blight
+||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Rhizoctonia root and stem rot
+||
+''[[Rhizoctonia solani]]''
+|-
+|Rust
+||
+''[[Phakopsora pachyrhizi]]''
+|-
+|Scab
+||
+''[[Spaceloma glycines]]''
+|-
+|Sclerotinia stem rot
+||
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Southern blight (damping-off and stem rot) = Sclerotium blight[
+||
+
+''[[Agroathelia rolfsii]]'' [teleomorph]
+|-
+|Stem canker
+||
+''[[Diaporthe phaseolorum]]'']
+''[[Diaporthe phaseolorum var. caulivora]]''
+''[[Phomopsis phaseoli]]'' [anamorph]
+|-
+|Stemphylium leaf blight
+||
+''[[Stemphylium botryosum]]''
+''[[Pleospora tarda]]'' [teleomorph]
+|-
+|Sudden death syndrome
+||
+''[[Fusarium solani f.sp. glycines]]''
+|-
+|Target spot
+||
+''[[Corynespora cassiicola]]''
+|-
+|Yeast spot
+||''[[Nematospora coryli]]''
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''[
+|-
+|-
+|Lance nematode
+||
+''[[Hoplolaimus columbus]]'']
+''[[Hoplolaimus galeatus]]''
+''[[Hoplolaimus magnistylus]]''
+|-
+|Lesion nematode
+||
+''[[Pratylenchus]]'' spp.
+|-
+|Pin nematode
+||
+''[[Paratylenchus projectus]]''
+''[[Paratylenchus tenuicaudatus]]''
+|-
+|Reniform nematode
+||
+''[[Rotylenchulus reniformis]]''
+|-
+|Ring nematode
+||
+''[[Criconemella ornata]]''
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+|-
+|Sheath nematode
+||
+''[[Hemicycliophora]]'' spp.
+|-
+|Soybean cyst nematode
+||
+''[[Heterodera glycines]]''
+|-
+|Spiral nematode
+||
+''[[Helicotylenchus]]'' spp.
+|-
+|Sting nematode
+||
+''[[Belonolainus gracilis]]''
+''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby root nematode
+||
+''[[Paratrichodorus minor]]''
+|-
+|Stunt nematode
+||
+''[[Quinisulcius acutus]]''
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+==Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Alfalfa mosaic
+||genus [[Alfamovirus]], [[Alfalfa mosaic virus|Alfalfa mosaic virus (AMV)]]{{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+|-
+|Bean pod mottle
+||genus [[Comovirus]], [[Bean pod mottle virus]] (BPMV)
+|-
+|Bean yellow mosaic
+||genus [[Potyvirus]], [[Bean yellow mosaic virus]] (BYMV)
+|-
+|Brazilian bud blight
+||genus [[Ilarvirus]], [[Tobacco streak virus]] (TSV)
+|-
+|Cowpea chlorotic mottle
+||genus [[Bromovirus]], [[Cowpea chlorotic mottle virus]] (CCMV){{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+|-
+|Mung bean yellow mosaic
+||genus [[Begomovirus]], [[Mung bean yellow mosaic virus]] (MYMV)
+|-
+|Peanut mottle
+||genus [[Potyvirus]], [[Peanut mottle virus]] (PeMoV)
+|-
+|Peanut stripe
+||genus [[Potyvirus]], [[Peanut stripe virus]] (PStV){{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+|-
+|Peanut stunt
+||genus [[Cucumovirus]], [[Peanut stunt virus]] (PSV)
+|-
+|Soybean chlorotic mottle
+||genus [[Caulimovirus]], [[Soybean chlorotic mottle virus]] (SbCMV)
+|-
+||Soybean crinkle leaf
+||genus [[Begomovirus]], [[Soybean crinkle leaf virus]] (SCLV)
+|-
+|Soybean dwarf
+||genus [[Luteovirus]], [[Soybean dwarf virus]] (SbDV)
+|-
+|Soybean mosaic
+||genus [[Potyvirus]], [[Soybean mosaic virus]] (SMV)
+|-
+|Soybean severe stunt
+||genus [[Nepovirus]], [[Soybean severe stunt virus]] (SSSV)
+|-
+|Tobacco ringspot = bud blight
+||genus [[Nepovirus]], [[Tobacco ringspot virus]] (TRSV){{citation needed|reason=Article link provides no evidence of this species infecting soybeans|date=March 2016}}
+|-
+|}
+
+== See also ==
+
+* [[Soybean management practices]]
+
+==References==
+{{reflist}}
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Soybean.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{Soy}}
+
+[[Category:Lists of plant diseases|Soybean]]
+[[Category:Pulse crop diseases]]
+[[Category:Soybean diseases]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_spinach_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_spinach_diseases.json
new file mode 100644
index 0000000..91700b7
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_spinach_diseases.json
@@ -0,0 +1,191 @@
+{{Short description|none}}
+{{no footnotes|date=June 2016}}
+This article is a '''list of diseases''' of [[spinach]] (''Spinacia oleracea'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|[[Bacterial leaf spot]]
+||''[[Pseudomonas syringae]]'' pv. ''spinacea''
+|-
+|[[Bacterial soft rot]]
+||''Erwinia carotovora''
+|-
+|Witches’-broom
+||Rickettsia-like organism
+|-
+|}
+
+==Fungal and Oomycete diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Anthracnose
+||
+''[[Colletotrichum dematium]]''
+{{=}} ''[[Colletotrichum spinaciae]]''
+|-
+|Aphanomyces root rot
+||
+''[[Aphanomyces cochlioides]]''
+''[[Aphanomyces cladogamus]]''
+|-
+|Cercospora leaf spot
+||
+''[[Cercospora beticola]]''
+|-
+|Damping-off
+||
+''[[Pythium aphanidermatum]]''
+''[[Pythium irregulare]]''
+''[[Pythium ultimum]]''
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Downy mildew = blue mold
+||
+''[[Peronospora effusa]]''
+|-
+|Fusarium wilt
+||
+''[[Fusarium oxysporum f.sp. spinacia]]''
+|-
+|Leaf spot
+||
+''[[Alternaria]]'' spp.
+''[[Ascochyta spinaciae]]''
+''[[Cercospora]]'' spp.
+''[[Cladosporium]]'' spp.
+''[[Myrothecium]]'' spp.
+''[[Phyllosticta]]'' spp.
+''[[Ramularia spinaciae]]''
+Other fungi
+|-
+|Phoma blight
+||
+''[[Phoma nebulosa]]''
+|-
+|Phytophthora root rot
+||
+''[[Phytophthora cryptogea]]''
+''[[Phytophthora megasperma]]''
+|-
+|Pythium root rot
+||
+''[[Pythium aphanidermatum]]''
+''[[Pythium heterothallicum]]''
+''[[Pythium sylvaticum]]''
+|-
+|Red rust
+||
+''[[Puccinia aristidae]]''
+''[[Aecidium caspicum]]'' [anamorph]
+|-
+|Seed mold
+||
+''[[Alternaria]]'' spp.
+''[[Curvularia]]'' spp.
+Other fungi
+|-
+|White rust
+||
+''[[Albugo occidentalis]]''
+|-
+|White smut
+||
+''[[Entyloma ellisii]]''
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Beet cyst nematode
+||''[[Heterodera schachtii]]''
+|-
+|Clover cyst nematode
+||''[[Heterodera trifolii]]''
+|-
+|Root knot
+||''[[Meloidogyne]]'' spp.
+|-
+|Root lesion
+||''[[Pratylenchus]]'' spp.
+|-
+|}
+
+==Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Curly top
+||genus [[Hybrigeminivirus]], [[Beet curly top virus]] (BCTV)
+|-
+|Speckles
+||genus [[Luteovirus]], [[Beet western yellows virus]] (BWYV)
+genus [[Umbravirus]], [[Lettuce speckles mottle virus]] (LSMV)
+|-
+|Spinach blight
+||genus [[Fabavirus]], [[Broad bean wilt virus]] (BBWV)
+genus [[Cucumovirus]], [[Cucumber mosaic virus]] (CMV)
+Other viruses
+|-
+|Spinach mosaic
+||genus [[Potyvirus]], [[Beet mosaic virus]] (BtMV)
+genus [[Tobamovirus]], [[Tobacco mosaic virus]] (TMV)
+Other viruses
+|-
+|Yellow dwarf
+||Unidentified virus
+|-
+|Yellows
+||genus [[Luteovirus]], [[Beet western yellows virus]] (BWYV)
+genus [[Cucumovirus]], [[Cucumber mosaic virus]] (CMV)
+genus [[Tospovirus]], [[Tomato spotted wilt virus]] (TSWV)
+genus [[Potyvirus]], [[Turnip mosaic virus]] (TuMV)
+|-
+|}
+
+==Phytoplasmal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal diseases'''
+|-
+|[[Aster yellows]]
+||Phytoplasma
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Heart-leaf disorder
+||Low light, wide diurnal air temperature fluctuations, low soil temperatures
+|-
+|Leaf necrosis and scorch
+||Ozone and other air pollutants
+|-
+|Tip burn
+||Unknown
+|-
+|Yellows
+||Nutritional disorders
+|-
+|}
+
+== References ==
+{{reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Spinach.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{DEFAULTSORT:Spinach}}
+[[Category:Lists of plant diseases]]
+[[Category:Leaf vegetable diseases]]
+[[Category:Spinach]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_strawberry_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_strawberry_diseases.json
new file mode 100644
index 0000000..762b08c
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_strawberry_diseases.json
@@ -0,0 +1,508 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[strawberry]] (''Fragaria × ananassa'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Angular leaf spot
+||''[[Xanthomonas fragariae]]''
+|-
+|Bacterial wilt
+||''[[Pseudomonas solanacearum]]''
+|-
+|Cauliflower disease (complex)
+||''[[Rhodococcus fascians]]'' = ''Corynebacterium fascians''
+|-
+|}
+
+==Oomycete diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Oomycete diseases'''
+|-
+|Downy mildew
+||''[[Peronospora potentillae]]'' {{=}} ''[[Peronospora fragariae]]''
+|-
+|}
+
+==Fungal diseases==
+[[Image:Mycosphaerella fragariae.jpg|right|thumb|older stadium of ''[[Mycosphaerella fragariae]]'' on strawberry]]
+[[Image:Aardbei Lambada vruchtrot Botrytis cinerea.jpg|right|thumb|''[[Botrytis cinerea]]'' on strawberry]]
+[[Image:Strawberry_powdery_mildew.jpg|thumbnail|Powdery mildew on strawberry]]
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria fruit rot
+||
+''[[Alternaria tenuissima]]''
+|-
+|Anther and pistil blight
+||
+''[[Rhizoctonia fragariae]]''
+''[[Ceratobasidium]]'' sp. [teleomorph]
+|-
+|Anthracnose and anthracnose fruit rot and black spot[{{Cite journal|last1=Dowling|first1=Madeline|last2=Peres|first2=Natalia|last3=Villani|first3=Sara|last4=Schnabel|first4=Guido|date=2020|title=Managing Colletotrichum on Fruit Crops: A "Complex" Challenge|url=https://apsjournals.apsnet.org/doi/10.1094/PDIS-11-19-2378-FE|journal=Plant Disease|language=en|volume=104|issue=9|pages=2301–2316|doi=10.1094/PDIS-11-19-2378-FE|pmid=32689886 |s2cid=219479598 |issn=0191-2917|doi-access=free}}]
+||
+''[[Colletotrichum acutatum]]'' [[species complex]][{{Cite journal|last1=Damm|first1=U.|last2=Cannon|first2=P. F.|last3=Woudenberg|first3=J. H. C.|last4=Crous|first4=P. W.|date=2012|title=The Colletotrichum acutatum species complex|journal=Studies in Mycology|series=complex species or species complexes?|language=en|volume=73|pages=37–113|doi=10.3114/sim0010|issn=0166-0616|pmc=3458416|pmid=23136458}}]
+
+* ''[[Colletotrichum fioriniae|C. fioriniae]]''
+* ''C. nymphaeae''
+
+''[[Colletotrichum gloeosporioides]]'' [[species complex]][{{Cite journal|last1=Weir|first1=B. S.|last2=Johnston|first2=P. R.|last3=Damm|first3=U.|date=2012|title=The Colletotrichum gloeosporioides species complex|journal=Studies in Mycology|series=complex species or species complexes?|language=en|volume=73|pages=115–180|doi=10.3114/sim0011|issn=0166-0616|pmc=3458417|pmid=23136459}}]
+
+* ''[[Colletotrichum fragariae|C. fragariae]]''
+* ''C. fructicola''
+* ''C. siamense'' (syn. ''C. murrayae'')
+
+''[[Glomerella cingulata]]'' [teleomorph] (archaic) ''[[Gloeosporium]]'' spp. (archaic)
+|-
+|Armillaria crown and root rot (shoestring crown and root rot)
+||
+''[[Armillaria mellea]]''
+''[[Rhizomorpha subcorticalis]]'' [anamorph]
+|-
+|Black leaf spot
+||''[[Alternaria alternata f.sp. fragariae]]''
+''[[Colletotrichum gloeosporioides]]''
+{{=}} ''[[Colletotrichum fragariae]]''
+|-
+|Black root rot (disease complex)
+||
+''[[Rhizoctonia fragariae]]''
+''[[Ceratobasidium]]'' [teleomorph] sp.
+''[[Coniothyrium fuckelii]]''
+''[[Diapleella coniothyrium]]'' [teleomorph]
+{{=}} ''[[Leptosphaeria coniothyrium]]''
+''[[Hainesia lythri]]''
+''[[Discohainesia oenotherae]]'' [teleomorph]
+''[[Idriella lunata]]''
+''[[Pyrenochaeta]]'' sp.
+''[[Pythium]]'' spp.
+''[[Pythium ultimum]]''
+|-
+|Cercospora leaf spot
+||
+''[[Cercospora fragariae]]''
+''[[Cercospora vexans]]''
+|-
+|Charcoal rot
+||
+''[[Macrophomina phaseolina]]''
+{{=}} ''[[Botryodiplodia phaseoli]]''
+|-
+|Common leaf spot
+||
+''[[Mycosphaerella fragariae]]''
+''[[Ramularia brunnea]]'' [anamorph]
+|-
+|Coniothyrium diseases
+||
+''[[Coniothyrium fuckelii]]''
+''[[Coniella fragariae]]''
+{{=}} ''[[Coniothyrium fragariae]]''
+|-
+|Dematophora crown and root rot (white root rot)
+||
+''[[Rosellinia necatrix]]''
+''[[Dematophora necatrix]]'' [anamorph]
+|-
+|Diplodina rot (leaf and stalk rot)
+||
+''[[Phoma lycopersici]]''
+{{=}} ''[[Diplodina lycopersici]]''
+''[[Didymella lycopersici]]'' [teleomorph]
+|-
+
+|Fruit rots (in addition to those appearing elsewhere in this listing)
+||
+''[[Aspergillus niger]]''
+''[[Cladosporium]]'' spp.
+''[[Mucor mucedo]]''
+''[[Mucor hiemalis]]''
+''[[Mucor hiemalis f. silvaticus]]''
+''[[Mucor piriformis]]''
+''[[Penicillium aurantiogriseum]]''
+{{=}} ''[[Penicillium cyclopium]]''
+''[[Penicillium expansum]]''
+''[[Penicillium glabrum]]''
+{{=}} ''[[Penicillium frequentans]]''
+''[[Penicillium purpurogenum]]''
+|-
+|Byssochlamys rot
+||
+''[[Byssochlamys fulva]]''
+''[[Paecilomyces fulvus]]'' [anamorph]
+|-
+|Brown cap
+||
+Foliar pathogens which attack cap-drying
+|-
+|Fruit blotch
+||
+''[[Fusarium sambucinum]]''
+''[[Gibberella pulicaris]]''[teleomorph]
+''[[Penicillium purpurogenum]]''
+''[[Peronospora potentillae]]''
+''[[Sphaeropsis malorum]]''
+''[[Botryosphaeria obtusa]]'' [teleomorph]
+{{=}} ''[[Physalospora obtusa]]''
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+{{=}} ''[[Corticium rolfsii]]''
+''[[Schizoparme straminea]]''
+''[[Coniella castaneicola]]'' [anamorph]
+{{=}} ''[[Pilidiella quercicola]]''
+|-
+|Gray mold leaf blight and dry crown rot
+||
+''[[Botrytis cinerea]]''
+''Botryotinia fuckeliana'' (teleomorph)
+|-
+|Hainesia leaf spot
+||
+''[[Hainesia lythri]]''
+|-
+|Hard brown rot
+||
+''[[Rhizoctonia solani]]''
+''[[Rhizoctonia solani|Thanatephorus cucumeris]]'' [teleomorph]
+''[[Macrophomina phaseolina]]''
+{{=}} ''[[Macrophomina phaseoli]]''
+{{=}} ''[[Rhizoctonia bataticola]]''
+|-
+|Leaf blotch
+||
+''[[Gnomonia comari]]''
+''[[Zythia fragariae]]'' [anamorph]
+''[[Gnomonia fragariae]]''
+|-
+|Leaf rust
+||
+''[[Phragmidium potentillae]]''
+{{=}} ''[[Frommea obtusa]]''
+|-
+|Leaf scorch
+||
+''[[Diplocarpon earlianum]]''
+''[[Marssonina fragariae]]'' [anamorph]
+{{=}} ''[[Marssonina potentillae]]''
+|-
+|Leather rot
+||
+''[[Phytophthora cactorum]]''
+''[[Phytophthora citricola]]''
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora nicotianae]]''
+{{=}} ''[[Phytophthora parasitica]]''
+|-
+|Lilac soft rot
+||
+''[[Pythium]]'' sp.
+|-
+|Pestalotia fruit rot
+||
+''[[Pestalotia laurocerasi]]''
+''[[Pestalotia longisetula]]''
+|-
+|Leaf blight
+||
+''[[Phomopsis obscurans]]''
+{{=}} ''[[Dendrophoma obscurans]]''
+''[[Neopestalotiopsis clavispora]]''{{cn|date=March 2023}}
+|-
+|Postharvest rots
+||
+''[[Botrytis cinerea]]''
+''[[Mucor mucedo]]''
+''[[Pichia membranifaciens]]''
+''[[Pichia subpelliculosa]]''
+{{=}} ''[[Hansenula subpelliculosa]]''
+''[[Saccharomyces cerevisiae]]''
+''[[Saccharomyces kluyveri]]''
+''[[Zygosaccharomyces bailii]]''
+{{=}} ''[[Saccharomyces bailii]]''
+''[[Zygotorulaspora florentina]]''
+{{=}} ''Saccharomyces florentinus'', ''Zygosaccharomyces florentinus''
+|-
+|Powdery mildew
+||
+''[[Podosphaera fragariae]]''
+unknown ''[[Podosphaera]]'' (Americas)
+|-
+|Phytophthora crown and root rot
+||
+''[[Phytophthora]]'' sp.
+''[[Phytophthora cactorum]]''
+''[[Phytophthora citricola]]''
+''[[Phytophthora citrophthora]]''
+''[[Phytophthora megasperma]]''
+''[[Phytophthora nicotianae var. parasitica]]''
+|-
+! colspan=2|Other root rots
+|-
+|Botrytis crown rot
+||
+''[[Botrytis cinerea]]''
+|-
+|Gray sterile fungus root rot
+||
+''[[Phoma terrestris]]''
+{{=}} ''[[Pyrenochaeta terrestris]]''
+|-
+|Idriella root rot
+||
+''[[Idriella lunata]]''
+|-
+|Macrophomina root rot
+||
+''[[Macrophomina phaseolina]]''
+|-
+|Olpidium root infection
+||
+''[[Olpidium brassicae]]''
+|-
+|Synchytrium root gall
+||
+''[[Synchytrium fragariae]]''
+|-
+|Purple leaf spot
+||
+''[[Mycosphaerella louisianae]]''
+|-
+|Red stele
+||
+''[[Phytophthora fragariae]]''
+|-
+|Rhizoctonia bud and crown rot, leaf blight, web blight, fruit rot
+||
+''[[Rhizoctonia solani]]''
+''[[Rhizoctonia fragariae]]''
+|-
+|Rhizopus rot (leak)
+||
+''[[Rhizopus stolonifer]]''
+|-
+|Sclerotinia crown and fruit rot
+||
+''[[Sclerotinia sclerotiorum]]''
+|-
+|Septoria hard rot and leaf spot
+||
+''[[Septoria fragariae]]''
+{{=}} ''[[Septogloeum potentillae]]''
+''[[Septoria aciculosa]]''
+''[[Septoria fragariaecola]]''
+|-
+|Stunt (Pythium root rot)
+||
+''[[Pythium ultimum]]''
+''[[Pythium]]'' spp.
+''[[Pythium acanthicum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium dissotocum]]''
+''[[Pythium hypogynum]]''
+''[[Pythium irregulare]]''
+''[[Pythium middletonii]]''
+{{=}} ''[[Pythium proliferum]]''
+''[[Pythium myriotylum]]''
+''[[Pythium perniciosum]]''
+''[[Pythium rostratum]]''
+''[[Pythium sylvaticum]]''
+|-
+|Southern blight (Sclerotium rot)
+||
+''[[Sclerotium rolfsii]]''
+|-
+|Stem-end rot
+||
+''[[Gnomonia comari]]''
+|-
+|Tan-brown rot (of fruit)
+||Pilidium lythri (previously known as Pilidium concavum)
+''[[Discohainesia oenotherae]]''
+''[[Hainesia lythri]]''
+{{=}} ''[[Patellina fragariae]]'' [anamorph]
+|-
+|Verticillium wilt
+||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae]]''
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Pith necrosis and crown death
+||Unknown
+|-
+|Rapid death
+||Unknown, resembles ''P. cactorum''
+|-
+|Slime molds
+||''[[Diachea leucopodia]]''
+''Physarum cinereum''
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Bulb and stem
+||
+''[[Ditylenchus dipsaci]]''
+|-
+|Dagger
+||
+''[[Xiphenema]]'' spp.
+|-
+|Dagger, American
+||
+''[[Xiphenema americanum]]''
+|-
+|Lesion
+||
+''[[Pratylenchus coffeae]]''
+''[[Pratylenchus penetrans]]''
+''[[Pratylenchus pratensis]]''
+''[[Pratylenchus scribneri]]''
+|-
+|Root-knot
+||
+''[[Meloidogyne]]'' spp.
+''[[Meloidogyne hapla]]''
+|-
+|Spring dwarf (crimp) or [[foliar nematodes]]
+||
+''[[Aphelenchoides fragariae]]''
+''[[Aphelenchoides ritzemabosi]]''
+|-
+|Sting
+||
+''[[Belonolaimus longicaudatus]]''
+''[[Belonolaimus gracilis]]''
+|-
+|Summer dwarf (crimp)
+||
+''[[Aphelenchoides besseyi]]''
+|-
+|}
+
+==Phytoplasma, Virus and virus-like diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Virus and virus-like diseases'''
+|-
+! colspan=2|Aphid-transmitted
+|-
+|Strawberry chlorotic fleck
+||Strawberry chlorotic fleck (graft-transmissible agent of unknown relationship)
+|-
+|Strawberry crinkle
+||[[Strawberry crinkle virus]] (SCV) (cytoplasmic rhabdovirus)
+|-
+|Strawberry latent C virus in Fragaria
+||Strawberry latent C virus (SLCV) (nuclear rhabdovirus)
+|-
+|Strawberry mild yellow-edge
+||[[Strawberry mild yellow-edge virus]] (SMYEV) (plus an unnamed potexvirus)
+|-
+|Strawberry mottle
+||[[Strawberry mottle virus]] (SMV) (Relationship unknown)
+|-
+|Strawberry pseudo mild yellow-edge
+||[[Strawberry pseudo mild yellow-edge virus]] (SPMYEV) (carlavirus)
+|-
+|Strawberry vein banding
+||[[Strawberry vein banding virus]] (SVBV) (caulimovirus)
+|-
+! colspan=2|Leafhopper-transmitted phytoplasma and rickettsia-like agents (vectors known or probable):
+|-
+|Aster yellows
+||[[Aster yellows]] phytoplasma
+|-
+|Maladie du bord jaune
+||[[phytoplasma]]
+|-
+|Strawberry green petal
+||Strawberry green petal phytoplasma
+|-
+|Strawberry lethal decline
+||Strawberry lethal decline phytoplasma
+|-
+|Strawberry multiplier plant
+||Strawberry Multiplier MLO
+|-
+|Strawberry mycoplasma yellows disease
+||Strawberry yellows phytoplasma
+|-
+|Strawberry rickettsia yellows disease
+||Strawberry yellows rickettsia-like organism (SYRLO)
+|-
+|Strawberry witches'-broom
+||Strawberry witches'-broom MLO
+|-
+! colspan=2|Nematode-transmitted
+|-
+|Arabis mosaic virus
+||[[Arabis mosaic virus]] (ArMV) (nepovirus)
+|-
+|Raspberry ringspot virus
+||[[Raspberry ringspot virus]] (nepovirus)
+|-
+|Strawberry latent ringspot virus
+||[[Strawberry latent ringspot virus]] (SLRV) (nepovirus)
+|-
+|Tomato black ring virus
+||[[Tomato black ring virus]] (TomBRV) (nepovirus)
+|-
+|Tomato ringspot virus
+||[[Tomato ringspot virus]] (TomRSV) (nepovirus)
+|-
+! colspan=2|Fungus-transmitted
+|-
+|Tobacco necrosis virus in Fragaria vesca
+||[[Tobacco necrosis virus]] (TNV) (necrovirus)
+|-
+! colspan=2|Pollen-transmitted
+|-
+|Strawberry pallidosis
+||Strawberry pallidosis (graft- and pollen-transmissible agent of unknown relationship)
+|-
+! colspan=2|Thrips-transmitted
+|-
+|Strawberry necrotic shock
+||Tobacco streak virus, strawberry strain (TSV-SNS) ([[Ilarvirus]])
+|-
+! colspan="2" |Vectors unknown
+|-
+|Strawberry leafroll
+||Strawberry leafroll (graft-transmissible agent(s) of unknown relationship
+|-
+|Strawberry feather-leaf
+|Strawberry feather-leaf (graft-transmissible agent of unknown relationship
+|-
+! colspan="2" |Non-graft transmissible virus-like disease
+|-
+|Strawberry June yellows
+|Genetically transmitted disorder of unknown cause
+|-
+|}
+
+==See also==
+* [[List of strawberry topics]]
+
+==References==
+{{Reflist}}
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Strawberry.aspx Common Names of Diseases, The American Phytopathological Society]
+{{fragaria}}
+
+[[Category:Lists of plant diseases|Strawberry]]
+[[Category:Strawberry diseases|*]]
+[[Category:Strawberries|Diseases]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_sugarcane_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_sugarcane_diseases.json
new file mode 100644
index 0000000..ecd4bae
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_sugarcane_diseases.json
@@ -0,0 +1,348 @@
+{{Short description|none}}
+This article is a list of diseases of [[sugarcane]] (''Saccharum'' spp. hybrids).
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Gumming disease
+||''[[Xanthomonas axonopodis]]'' pv. ''vasculorum''
+|-
+|Leaf scald
+||''[[Xanthomonas albilineans]]''
+|-
+|Mottled stripe
+||''[[Herbaspirillum rubrisubalbicans]]''
+|-
+|Ratoon stunting disease
+||''[[Leifsonia|Leifsonia xyli]]'' subsp. ''xyli''
+|-
+|Red stripe (top rot)
+||''[[Acidovorax avenae]]'' subsp. ''avenae''
+|-
+|}
+
+==Fungal diseases ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Banded sclerotial (leaf) disease
+||
+''[[Thanatephorus cucumeris]]''
+{{=}} ''[[Pellicularia sasakii]]''
+''[[Rhizoctonia solani]]'' [anamorph]
+|-
+|Black rot
+||
+''[[Ceratocystis adiposa]]''
+''[[Chalara]]'' sp. [anamorph]
+|-
+|Black stripe
+||
+''[[Cercospora atrofiliformis]]''
+|-
+|Brown spot
+||
+''[[Cercospora longipes]]''
+|-
+|Brown stripe
+||
+''[[Cochliobolus stenospilus]]''
+''[[Bipolaris stenospila]]'' [anamorph]
+|-
+|Downy mildew
+||
+''[[Peronosclerospora sacchari]]''
+{{=}} ''[[Sclerospora sacchari]]''
+|-
+|Downy mildew, leaf splitting form
+||
+''[[Peronosclerospora miscanthi]]''
+{{=}} ''[[Sclerospora mischanthi]]''
+''[[Mycosphaerella striatiformans]]''
+|-
+|Eye spot
+||
+''[[Bipolaris sacchari]]''
+{{=}} ''[[Helminthosporium sacchari]]''
+|-
+|Fusarium sett and stem rot
+||
+''[[Gibberella fujikuroi]]''
+''[[Fusarium moniliforme]]'' [anamorph]
+''[[Gibberella subglutinans]]''
+|-
+|Iliau
+||
+''[[Clypeoporthe iliau]]''
+{{=}} ''[[Gnomonia iliau]]''
+''[[Phaeocytostroma iliau]]'' [anamorph]
+|-
+|Leaf blast
+||
+''[[Didymosphaeria taiwanensis]]''
+|-
+|Leaf blight
+||
+''[[Leptosphaeria taiwanensis]]''
+''[[Stagonospora tainanensis]]'' [anamorph]
+|-
+|Leaf scorch.
+||
+''[[Stagonospora sacchari]]''
+|-
+|Marasmius sheath and shoot blight
+||
+''[[Marasmiellus stenophyllus]]''
+{{=}} ''[[Marasmius stenophyllus]]''
+|-
+|Myriogenospora leaf binding (tangle top)
+||
+''[[Myriogenospora aciculispora]]''
+|-
+|Phyllosticta leaf spot
+||
+''[[Phyllosticta hawaiiensis]]''
+|-
+|Phytophthora rot of cuttings
+||
+''[[Phytophthora]]'' spp.
+''[[Phytophthora megasperma]]''
+|-
+|Pineapple disease
+||
+''[[Ceratocystis paradoxa]]''
+''[[Chalara paradoxa]]''
+{{=}} ''[[Thielaviopsis paradoxa]]'' [anamorph]
+|-
+|Pokkah boeng (that may have knife cut symptoms)
+||
+''[[Gibberella fujikuroi]]''
+''[[Fusarium moniliforme]]'' [anamorph]
+''[[Gibberella subglutinans]]''
+|-
+|Red leaf spot (purple spot)
+||
+''[[Dimeriella sacchari]]''
+|-
+|Red rot
+||
+''[[Glomerella tucumanensis]]''
+{{=}} ''[[Physalospora tucumanensis]]''
+''[[Colletotrichum falcatum]]'' [anamorph]
+|-
+|Red rot of leaf sheath and sprout rot
+||
+''[[Athelia rolfsii]]''
+{{=}} ''[[Pellicularia rolfsii]]''
+''[[Sclerotium rolfsii]]'' [anamorph]
+|-
+|Red spot of leaf sheath
+||
+''[[Mycovellosiella vaginae]]''
+{{=}} ''[[Cercospora vaginae]]''
+|-
+|Rhizoctonia sheath and shoot rot
+||
+''[[Rhizoctonia solani]]''
+|-
+|Rind disease (sour rot)
+||
+''[[Phaeocytostroma sacchari]]''
+{{=}} ''[[Pleocyta sacchari]]''
+{{=}} ''[[Melanconium sacchari]]''
+|-
+|Ring spot
+||
+''[[Leptosphaeria sacchari]]''
+''[[Phyllosticta]]'' sp. [anamorph]
+|-
+|Root rots
+||
+''[[Marasmius sacchari]]''
+''[[Pythium arrhenomanes]]''
+''[[Pythium graminicola]]''
+''[[Rhizoctonia]]'' sp.
+Unidentified Oomycete
+|-
+|Rust, common
+||
+''[[Puccinia melanocephala]]''
+{{=}} ''[[Puccinia erianthi]]''
+|-
+|Rust, orange
+||
+''[[Puccinia kuehnii]]''
+|-
+|Schizophyllum rot
+||
+''[[Schizophyllum commune]]''
+|-
+|Sclerophthora disease
+||
+''[[Sclerophthora macrospora]]''
+|-
+|Seedling blight
+||
+''[[Alternaria alternata]]''
+''[[Bipolaris sacchari]]''
+''[[Cochliobolus hawaiiensis]]''
+''[[Bipolaris hawaiiensis]]'' [anamorph]
+''[[Cochliobolus lunatus]]''
+''[[Curvularia lunata]]'' [anamorph]
+''[[Curvularia senegalensis]]''
+''[[Setosphaeria rostrata]]''
+''[[Exserohilum rostratum]]'' [anamorph]
+{{=}} ''[[Drechslera halodes]]''
+|-
+|Sheath rot
+||
+''[[Cytospora sacchari]]''
+|-
+|[[Sugarcane smut|Smut, culmicolous]]
+||
+''[[Ustilago scitaminea]]''
+|-
+|Target blotch
+||
+''[[Helminthosporium]] sp.''
+|-
+|Veneer blotch
+||
+''[[Deightoniella papuana]]''
+|-
+|White rash
+||
+''[[Elsinoë sacchari]]''
+''[[Sphaceloma sacchari]]'' [anamorph]
+|-
+|Wilt
+||
+''[[Fusarium sacchari]]''
+{{=}} ''[[Cephalosporium sacchari]]''
+|-
+|Yellow spot
+||
+''[[Mycovellosiella koepkei]]''
+{{=}} ''[[Cercospora koepkei]]''
+|-
+|Zonate leaf spot
+||
+''[[Gloeocercospora sorghi]]''
+|-
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+|Bud proliferation
+||Undetermined
+|-
+|Bunch top
+||Undetermined
+|-
+|Cluster stool
+||Undetermined
+|-
+|Internal stalk necrosis
+||Undetermined
+|-
+|Leaf freckle
+||Undetermined
+|-
+|Leaf stipple
+||
+|-
+|Multiple buds
+||Undetermined
+|-
+|Stem galls
+||Undetermined
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Lesion
+||
+''[[Pratylenchus]]'' spp.
+|-
+|Root-knot
+||
+''[[Meloidogyne]]'' spp.
+|-
+|Spiral
+||
+''[[Helicotylenchus]]'' spp.
+''[[Rotylenchus]]'' spp.
+''[[Scutellonema]]'' spp.
+|-
+|}
+
+==Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Dwarf
+||[[Sugarcane dwarf virus]]
+|-
+|Fiji disease
+||[[Sugarcane Fiji disease virus]]
+|-
+|Mosaic
+||[[Sugarcane mosaic virus]]
+|-
+|Sereh
+||[[Sugarcane sereh disease]] (virus presumed)
+|-
+|Streak disease
+||[[Maize streak virus]], sugarcane strain
+|-
+|Yellow Leaf
+||Sugarcane Yellow Leaf Virus
+|-stem canker
+|}
+
+== Protozoan diseases ==
+
+{| class="wikitable" style="clear"
+! colspan="2" |'''Protozoan diseases'''
+|-
+|Chlorotic streak
+||''Phytocercomonas venanatans''[{{Cite journal|last1=Ngo|first1=Chuong N.|last2=Braithwaite|first2=Kathryn S.|last3=Bass|first3=David|last4=Young|first4=Anthony J.|last5=Croft|first5=Barry J.|date=April 2018|title=Phytocercomonas venanatans, a New Species of Cercozoa Associated with Chlorotic Streak of Sugarcane|journal=Phytopathology|volume=108|issue=4|pages=479–486|doi=10.1094/phyto-07-17-0237-r|pmid=29256830|issn=0031-949X|doi-access=free}}][{{Cite journal|last1=Braithwaite|first1=Kathryn S.|last2=Ngo|first2=Chuong N.|last3=Croft|first3=Barry J.|date=April 2018|title=Confirmation that the Novel Cercozoa Phytocercomonas venanatans Is the Cause of the Disease Chlorotic Streak in Sugarcane|journal=Phytopathology|volume=108|issue=4|pages=487–494|doi=10.1094/phyto-07-17-0236-r|pmid=29153051|issn=0031-949X|doi-access=free}}]
+|}
+
+== Phytoplasma diseases ==
+
+[[Phytoplasma]]s were previously known as 'mycoplasma-like organisms' (MLOs).[{{Cite journal|doi=10.1094/PDIS-91-11-1413|title=Molecular and Symptom Analysis Reveal the Presence of New Phytoplasmas Associated with Sugarcane Grassy Shoot Disease in India|year=2007|last1=Nasare|first1=Kanchan|last2=Yadav|first2=Amit|last3=Singh|first3=Anil K.|last4=Shivasharanappa|first4=K. B.|last5=Nerkar|first5=Y. S.|last6=Reddy|first6=V. S.|journal=Plant Disease|volume=91|issue=11|pages=1413–1418|pmid=30780751|doi-access=free}}][Rao, G. P. and Ford, R. E. (2000) Vectors of virus and Phytoplasma diseases of Sugarcane: An Overview. In: Sugarcane Pathology, Vol. III. Virus and Phytoplasma diseases, G.P. Rao, R.E. Ford, M. Tosic and D.S. Teakle (Eds) Science Publishers, Hamshere, USA, Pg: 265-314.]
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasma diseases'''
+|-
+| [[Sugarcane Grassy Shoot Disease|Grassy Shoot]] (SCGS), [[Leaf Chlorosis]], Early Bud Sprouting,
+|| [[Phytoplasma|Sugarcane Grassy Shoot Phytoplasma]] related to '[[Candidatus Phytoplasma sacchari]]',[{{cite journal |last1=Kirdat |first1=K |last2=Tiwarekar |first2=B |last3=Thorat |first3=V |last4=Sathe |first4=S |last5=Shouche |first5=Y |last6=Yadav |first6=A |title='''Candidatus'' Phytoplasma sacchari', a novel taxon - associated with Sugarcane Grassy Shoot (SCGS) disease. |journal=International Journal of Systematic and Evolutionary Microbiology |date=January 2021 |volume=71 |issue=1 |doi=10.1099/ijsem.0.004591 |pmid=33289626|s2cid=227948269 |doi-access=free }}]
+|-
+|}
+
+== Unsure causal agent diseases ==
+* [[Ramu stunt disease]], a disease widespread throughout Papua New Guinea, but not detected in Australia
+
+==References==
+{{Reflist}}
+
+== External links ==
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Sugarcane.aspx Common Names of Diseases: Sugarcane diseases], The American Phytopathological Society
+* [https://web.archive.org/web/20090411060527/http://www.ikisan.com/links/ap_sugarcaneDisease%20Management.shtml List of Sugarcane Diseases], Ikisan agricultural portal
+* [http://edis.ifas.ufl.edu/topic_sugarcane_diseases Diseases in Sugarcane], Sugarcane Handbook, University of Florida Institute of Food and Agricultural Sciences
+
+{{DEFAULTSORT:List Of Sugarcane Diseases}}
+[[Category:Sugarcane diseases| ]]
+[[Category:Lists of plant diseases|Sugarcane]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_sunflower_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_sunflower_diseases.json
new file mode 100644
index 0000000..ea7479b
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_sunflower_diseases.json
@@ -0,0 +1,241 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of [[sunflower]]s (''Helianthus annuus'') and [[jerusalem artichoke]] (''H. tuberosus'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Apical chlorosis
+||''[[Pseudomonas syringae]]'' pv. ''tagetis''
+|-
+|Bacterial leaf spot
+|''[[Pseudomonas syringae]]'' pv. ''aptata''
+''[[Pseudomonas cichorii|P. cichorii]]''
+''[[Pseudomonas syringae]]'' pv. ''helianthi''
+''[[Pseudomonas syringae]]'' pv. ''mellea''
+|-
+|Bacterial wilt
+||''[[Pseudomonas solanacearum]]''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|Erwinia stalk rot and head rot
+||''Erwinia carotovora'' subsp. ''carotovora''
+''E. carotovora'' subsp. ''atroseptica''
+|-
+|}
+
+==Fungal diseases==
+[[Image:Verticillium dahliae.jpg|thumb|[[Verticillium dahliae]] infecting sunflower]]
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria leaf blight, stem spot and head rot
+||
+''[[Alternaria alternata]]''
+{{=}} ''[[Alternaria tenuis]]''
+''[[Alternaria helianthi]]''
+{{=}} ''[[Helminthosporium helianthi]]''
+''[[Alternaria helianthicola]]''
+''[[Alternaria leucanthemi]]''
+''[[Alternaria tenuissima]]''
+''[[Alternaria zinniae]]''
+|-
+|Botrytis head rot (gray mold)
+||
+''[[Botrytis cinerea]]''
+''[[Botrytis cinerea|Botryotinia fuckeliania]]'' [teleomorph]
+|-
+|Charcoal rot
+||
+''[[Macrophomina phaseolina]]''
+{{=}} ''[[Sclerotium bataticola]]''
+{{=}} ''[[Rhizoctonia bataticola]]''
+|-
+|Downy mildew
+||
+''[[Plasmopara halstedii]]''
+''[[Plasmopara helianthi f. helianthi]]''
+|-
+|Fusarium stalk rot
+||
+''[[Fusarium equiseti]]''
+''[[Gibberella intricans]]'' [teleomorph]
+''[[Fusarium solani]]''
+''[[Nectria haematococca]]'' [teleomorph]
+''[[Microdochium tabacinum]]''
+{{=}} ''[[Fusarium tabacinum]]''
+''[[Monographella cucumerina]]'' [teleomorph]
+|-
+|Fusarium wilt
+||
+''[[Fusarium moniliforme]]''
+''[[Gibberella fujikuroi]]'' [teleomorph]
+''[[Fusarium oxysporum]]''
+|-
+|Myrothecium leaf and stem spot
+||
+''[[Myrothecium roridum]]''
+''[[Myrothecium verrucaria]]''
+|-
+|Phialophora yellows
+||
+''[[Phialophora asteris]]''
+|-
+|Phoma black stem
+||
+''[[Phoma macdonaldii]]''
+''[[Leptosphaeria lindquistii]]''
+{{=}} ''[[Phoma oleracea var. helianthi-tuberosi]]'' [teleomorph]
+|-
+|Phomopsis brown stem canker
+||
+''[[Phomopsis]]'' spp.
+''[[Phomopsis helianthi]]''
+''[[Diaporthe helianthi]]'' [teleomorph]
+|-
+|Phymatotrichum root rot (cotton root rot)
+||
+''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+|Phytophthora stem rot
+||
+''[[Phytophthora]]'' spp.
+''[[Phytophthora drechsleri]]''
+|-
+|Powdery mildew
+||
+''[[Golovinomyces latisporus]]''
+|-
+|Pythium seedling blight and root rot
+||
+''[[Pythium]]'' spp.
+''[[Pythium aphanidermatum]]''
+''[[Pythium debaryanum]]''
+''[[Pythium irregulare]]''
+|-
+|Rhizoctonia seedling blight
+||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Rhizopus head rot
+||
+''[[Rhizopus arrhizus]]''
+{{=}} ''[[Rhizopus nodosus]]''
+''[[Rhizopus microsporus]]''
+''[[Rhizopus stolonifer]]''
+{{=}} ''[[Rhizopus nigricans]]''
+|-
+|Rust
+||
+''[[Puccinia helianthi]]''
+''[[Puccinia xanthii]]''
+''[[Uromyces junci]]''
+|-
+|Sclerotinia basal stalk rot and wilt, mid-stalk rot, head rot
+||
+''[[Sclerotinia sclerotiorum]]''
+{{=}} ''[[Sclerotinia libertiana]]''
+{{=}} ''[[Whetzelinia sclerotiorum]]''
+|-
+|Sclerotinia basal stalk rot and wilt
+||
+''[[Sclerotinia minor]]''
+|-
+|Sclerotium basal stalk and root rot (southern blight)
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Septoria leaf spot
+||
+''[[Septoria helianthi]]''
+|-
+|Verticillium wilt
+||
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae]]''
+|-
+|White rust
+||
+''[[Albugo tragopogonis]]''
+{{=}} ''[[Cystopus tragopogonis]]''
+|-
+|Yellow rust
+||
+''[[Coleosporium helianthi]]''
+''[[Coleosporium pacificum]]''
+{{=}} ''[[Coleosporium madiae]]''
+''[[Peridermium californicum]]'' [anamorph]
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Dagger, American
+||
+''[[Xiphinema americanum]]''
+|-
+|Pin
+||
+''[[Paratylenchus projectus]]''
+|-
+|Lesion
+||
+''[[Pratylenchus]]'' spp.
+''[[Pratylenchus hexincisus]]''
+|-
+|Reniform
+||
+''[[Rotylenchulus]]'' spp.
+''[[Rotylenchulus reniformis]]''
+|-
+|Root knot
+||
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+|-
+|Spiral
+||
+''[[Helicotylenchus]]'' sp.
+|-
+|Stunt
+||
+''[[Tylenchorhynchus nudus]]''
+''[[Quinisulcius acutus]]''
+|-
+|}
+
+==Phytoplasma and Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|Aster yellows
+||[[Aster yellows]] [[phytoplasma]]
+|-
+|Sunflower mosaic
+||[[Cucumber mosaic virus]]
+|-
+|Sunflower virus
+||[[Tobacco mosaic virus]]
+|-
+|Chlorotic Mottle
+||[[Sunflower Chlorotic Mottle virus (SuCMoV)]]
+|-
+|}
+
+== References ==
+{{reflist}}
+* [https://web.archive.org/web/20190522033332/https://www.apsnet.org/edcenter/resources/commonnames/Pages/Sunflower.aspx Common Names of Diseases, The American Phytopathological Society]
+
+[[Category:Lists of plant diseases|Sunflower]]
+[[Category:Sunflower diseases| ]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_sweet_potato_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_sweet_potato_diseases.json
new file mode 100644
index 0000000..b96357e
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_sweet_potato_diseases.json
@@ -0,0 +1,256 @@
+{{Short description|none}}
+This article is a '''list of diseases''' of the [[sweet potato]] (''Ipomoea batatas'').[{{cite web |title=Diseases of sweet potato |url=https://www.apsnet.org/edcenter/resources/commonnames/Pages/Sweetpotato.aspx |website=www.apsnet.org |publisher=American Phytopathological Society |access-date=1 October 2024}}]
+
+==Bacterial diseases==
+
+{| class="wikitable"
+! colspan=2| Bacterial diseases
+|-
+| Bacterial leaf spot
+| ''[[Xanthomonas campestris]]'' (Pammel) Dowson
+|-
+| Bacterial stem and root rot
+| ''[[Erwinia chrysanthemi]]''
+|-
+| Bacterial wilt
+| ''[[Ralstonia solanacearum]]''
+|-
+| Crown gall
+| ''[[Agrobacterium tumefaciens]]''
+|-
+| Hairy roots
+| ''[[Agrobacterium rhizogenes]]''
+|-
+| Little leaf (proliferation disease)
+| [[Phytoplasma]]
+|}
+
+==Fungal diseases==
+
+{| class="wikitable"
+! colspan=2| Fungal diseases
+|-
+| Alternaria leaf spot and stem blight
+| ''[[Alternaria]]'' spp.
+|-
+| Alternaria storage rot
+| ''[[Alternaria]]'' spp.
+|-
+| Black rot
+| ''[[Ceratocystis fimbriata]]'' ''[[Chalara]]'' sp. [anamorph]
+|-
+| Blue mold rot
+| ''[[Penicillium]]'' spp.
+|-
+| Cercospora leaf spot
+|''[[Cercospora]]'' spp.
+''[[Phaeoisariopsis bataticola]]''
+{{=}} ''Cercospora bataticola, C. batatas, C. ipomoeae''
+|-
+| Charcoal rot
+| ''[[Macrophomina phaseolina]]''
+|-
+| Chlorotic leaf distortion
+| ''[[Fusarium lateritium]]'' ''[[Gibberella baccata]]'' [teleomorph]
+|-
+| Circular spot
+| ''[[Sclerotium rolfsii]]'' ''[[Athelia rolfsii]]'' [teleomorph]
+|-
+| Dry rot
+| ''[[Diaporthe phaseolorum]]''
+{{=}} ''[[Diaporthe batatatis]]''
+''[[Phomopsis phaseoli]]'' [anamorph]
+|-
+| End rot
+| ''[[Fusarium]]'' spp.
+''[[Fusarium solani]]''
+''[[Nectria haematococca]]'' [teleomorph]
+|-
+| False Broom Rape
+| ''[[Splinterus Maximus]]''
+|-
+|-
+| Foot rot
+| ''[[Plenodomus destruens]]''
+|-
+| Fusarium root rot and stem canker
+| ''[[Fusarium solani]]''
+|-
+| Fusarium wilt (stem rot)
+| ''[[Fusarium oxysporum f.sp. batatas]]''
+|-
+| Gray mold rot
+| ''[[Botrytis cinerea]]''
+''[[Botrytis cinerea|Botryotinia fuckeliana]]'' [teleomorph]
+|-
+| Java black rot
+| ''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Diplodia gossypina]]''
+|-
+| Leaf mold
+| ''[[Choanephora cucurbitarum]]''
+|-
+| Mottle necrosis
+| ''[[Pythium]]'' spp.
+''[[Pythium scleroteichum]]''
+''[[Pythium ultimum]]''
+''[[Phytophthora]]'' spp.
+|-
+| Phyllosticta leaf blight
+| ''[[Phomopsis ipomeae-batatas]]''
+{{=}} ''[[Phyllosticta batatas]]''
+|-
+| Phymatotrichum root rot (cotton root rot)
+| ''[[Phymatotrichopsis omnivora]]''
+{{=}} ''[[Phymatotrichum omnivorum]]''
+|-
+| Pink root
+| ''[[Phoma terrestris]]''
+{{=}} ''[[Pyrenochaeta terrestris]]''
+|-
+| Punky rot
+| ''[[Trichoderma]]'' spp.
+''[[Trichoderma koningii]]''
+|-
+| Rhizoctonia stem canker (sprout rot)
+| ''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+| [[Rhizopus soft rot]]
+| ''[[Rhizopus]]'' spp.
+''[[Rhizopus stolonifer]]''
+|-
+| Rootlet rot
+| ''[[Fusarium solani]]''
+''[[Pythium]]'' spp.
+''[[Pythium ultimum]]''
+''[[Rhizoctonia solani]]''
+''[[Streptomyces ipomoeae]]''
+|-
+| Rust, red
+| ''[[Coleosporium ipomoeae]]''
+|-
+| Rust, white
+| ''[[Albugo ipomoeae-panduratae]]''
+|-
+| Scab, leaf and stem
+| ''[[Sphaceloma batatas]]''
+''[[Elsinoe batatas]]'' [teleomorph]
+|-
+| Southern blight
+Sclerotial blight
+| ''[[Sclerotium rolfsii]]''
+|-
+| Scurf
+| ''[[Monilochaetes infuscans]]''
+|-
+| Septoria leaf spot
+| ''[[Septoria bataticola]]''
+|-
+| Storage rot
+| ''[[Epicoccum]]'' spp.
+''[[Fusarium solani]]''
+''[[Mucor racemosus]]''
+''[[Sclerotinia]]'' spp.
+|-
+| Surface rot
+| ''[[Fusarium oxysporum]]''
+''[[Fusarium solani]]''
+|-
+| Violet root rot
+| ''[[Helicobasidium mompa]]''
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable"
+! colspan=2| Nematodes, parasitic
+|-
+|Brown ring of roots (bulb and stem nematode)
+||
+''[[Ditylenchus dipsaci]]''
+''[[Ditylenchus destructor]]''
+|-
+|Burrowing
+||
+''[[Radopholus similis]]''
+|-
+|Dagger
+||
+''[[Xiphinema]]'' spp.
+''[[Xiphinema americanum]]''
+|-
+|Lesion
+||
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus coffeae]]''
+|-
+|Pin
+||
+''[[Paratylenchus]]'' spp.
+|-
+|Reniform
+||
+''[[Rotylenchulus reniformis]]''
+|-
+|Root-knot
+||
+''[[Meloidogyne]]'' spp.
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+|-
+|Spiral
+||
+''[[Helicotylenchus]]'' spp.
+|-
+|Sting
+||
+''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root
+||
+''[[Paratrichodorus]]'' spp.
+''[[Paratrichodorus minor]]''
+|-
+|Stunt
+||
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+==Viral and viroid diseases==
+
+{| class="wikitable"
+! colspan=2| Viral and viroid diseases
+|-
+|Feathery mottle
+||''Sweet potato feathery mottle virus'' (SPFMV)
+|-
+|Internal cork
+||Internal cork strain of ''Sweet potato feathery mottle virus'' (SPFMV-IC)
+|-
+|Latent virus
+||Sweet potato latent virus (SPLV)
+|-
+|Mild mottle
+||''Sweet potato mild mottle virus'' (SPMMV)
+|-
+|Russet crack
+||Russet crack strain of ''Sweet potato feathery mottle virus'' (SPFMV-RC)
+|-
+|Sweet potato virus disease (SPVD)
+||''Sweet potato feathery mottle virus'' and ''Sweet potato chlorotic stunt virus'' [{{cite journal |last1=Cuellar |first1=Wilmer J. |last2=Kreuze |first2=Jan F. |last3=Rajamäki |first3=Minna-Liisa |last4=Cruzado |first4=Karin R. |last5=Untiveros |first5=Milton |last6=Valkonen |first6=Jari P. T. |title=Elimination of antiviral defense by viral RNase III |journal=Proceedings of the National Academy of Sciences |date=23 June 2009 |volume=106 |issue=25 |pages=10354–10358 |doi=10.1073/pnas.0806042106 |url=https://www.pnas.org/doi/full/10.1073/pnas.0806042106 |access-date=1 October 2024 |language=en |issn=0027-8424|pmc=2694682 }}]
+|-
+|}
+
+== References ==
+{{Reflist}}
+
+{{Sweet potatoes}}
+
+{{DEFAULTSORT:List Of Sweet Potato Diseases}}
+[[Category:Lists of plant diseases|Sweet potato]]
+[[Category:Sweet potato diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_tea_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_tea_diseases.json
new file mode 100644
index 0000000..fb4bc96
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_tea_diseases.json
@@ -0,0 +1,406 @@
+{{Short description|None}}
+Many of the diseases, pathogens and pests that affect the [[tea]] plant (''[[Camellia sinensis]]'') may affect other members of the plant genus ''[[Camellia]]''.
+
+==Bacterial diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial canker
+||''[[Xanthomonas campestris]]'' pv. ''theicola''
+''[[Xanthomonas gorlencovianum]]''
+|-
+|Bacterial shoot blight
+||''[[Pseudomonas avellanae]]'' pv. ''theae''
+|-
+|Crown gall
+||''[[Agrobacterium tumefaciens]]''
+|-
+|}
+
+==Fungal diseases==
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Anthracnose
+||
+''[[Colletotrichum theae-sinensis]]''
+{{=}} ''[[Gloeosporium theae-sinensis]]''{{break}}
+''[[Colletotrichum acutatum]]''
+|-
+|Armillaria root rot
+||
+''[[Armillaria mellea]]''
+{{=}} ''[[Armillariella mellea]]''
+''[[Armillaria heimii]]''
+{{=}} ''[[Armillaria fuscipes]]''
+|-
+|Bird's eye spot
+||
+''[[Cercoseptoria ocellata]]''
+{{=}} ''[[Cercospora theae]]''
+''[[Pseudocercospora theae]]''
+{{=}} ''[[Septoria theae]]''
+{{=}} ''[[Cercoseptoria theae]]''
+|-
+|Black blight
+||
+''[[Cylindrocladium lanceolatum]]''
+|-
+|Black root rot
+||
+''[[Rosellinia arcuata]]''
+''[[Rosellinia bunodes]]''{{break}}
+{{=}} ''[[Rosellinia bunoides]]''
+|-
+|Black rot
+||
+''[[Ceratobasidium]]'' sp.
+''[[Corticium invisum]]''
+''[[Corticium theae]]''
+|-
+|Blister blight[{{cite journal | last1=Pandey | first1=Abhay K. | last2=Sinniah | first2=Ganga D. | last3=Babu | first3=Azariah | last4=Tanti | first4=Amarjyoti | title=How the Global Tea Industry Copes With Fungal Diseases – Challenges and Opportunities | journal=[[Plant Disease (journal)|Plant Disease]] | publisher=[[American Phytopathological Society]] | date=2021-08-04 | issn=0191-2917 | doi=10.1094/pdis-09-20-1945-fe | pages=PDIS–09–20–1945| doi-access=free }}]
+||
+''[[Exobasidium vexans]]''
+|-
+|Botryodiplodia root rot
+||
+''[[Lasiodiplodia theobromae]]''
+{{=}} ''[[Botryodiplodia theobromae]]''
+|-
+|Brown blight
+||
+''[[Glomerella cingulata]]''
+''[[Colletotrichum gloeosporioides]]'' [anamorph]
+{{=}} ''[[Colletotrichum camelliae]]''
+|-
+|Brown root rot
+||
+''[[Phellinus noxius]]''
+{{=}} ''[[Fomes noxius]]''
+|-
+|Brown spot
+||
+''[[Calonectria colhounii]]''
+''[[Cylindrocladium colhounii]]'' [anamorph]
+|-
+|Brown zonate leaf blight
+||
+''[[Ceuthospora lauri]]''
+|-
+|Bud blight
+||
+''[[Phoma theicola]]''
+|-
+|Charcoal stump rot
+||
+''[[Ustulina deusta]]''
+''[[Ustulina zonata]]'' [anamorph]
+|-
+|Collar and branch canker
+||
+''[[Phomopsis theae]]''
+|-
+|Collar rot
+||
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Copper blight
+||
+''[[Guignardia camelliae]]''
+|-
+|Damping-off
+||
+''[[Cylindrocladium floridanum]]''
+''[[Calonectria kyotensis]]'' [teleomorph]
+''[[Hypochnus centrifugus]]''
+|-
+|Dieback
+||
+''[[Leptothyrium theae]]''
+''[[Nectria cinnabarina]]''
+|-
+|Gray blight
+||
+''[[Pestalotiopsis theae]]''
+{{=}} ''[[Pestalotia theae]]''
+''[[Pestalotiopsis longiseta]]''
+{{=}} ''[[Pestalotia longiseta]]''
+''Pseudopestalotiopsis theae''[{{cite journal |last1=Zheng |first1=Shiqin |last2=Chen |first2=Ruiqi |last3=Wang |first3=Zhe |last4=Liu |first4=Juan |last5=Cai |first5=Yan |last6=Peng |first6=Minghui |last7=Zhang |first7=Tian |last8=Li |first8=Yunxi |last9=Wang |first9=Baohua |last10=Bao |first10=Jiandong |last11=Zhang |first11=Dongmei |last12=Wang |first12=Zonghua |last13=Hu |first13=Hongli |title=High-Quality Genome Assembly of Pathogenic ''Pseudopestalotiopsis theae'', the Pathogenic Fungus Causing Tea Gray Blight |journal=Plant Disease |date=2021 |volume=105 |pages=3723-3726 |doi=10.1094/PDIS-02-21-0318-A|doi-access=free }}]
+|-
+|Gray mold
+||
+''[[Botrytis cinerea]]''
+|-
+|Gray spot
+||
+''[[Phyllosticta dusana]]''
+|-
+|Horse-hair blight[
+||
+''[[Marasmius crinis-equi]]'' ]
+{{=}} ''[[Marasmius equicrinis]]''
+|-
+|Leaf spot
+||
+''[[Calonectria pyrochroa]]''
+{{=}} ''[[Calonectria quinqueseptata]]''
+''[[Cylindrocladium ilicicola]]'' [anamorph]
+''[[Calonectria theae]]''
+''[[Cylindrocladium theae]]'' [anamorph]
+''[[Cochliobolus carbonum]]''
+''[[Hendersonia theicola]]''
+''[[Pestalotiopsis adusta]]''
+''[[Phaeosphaerella theae]]''
+''[[Pleospora theae]]''
+|-
+|Leaf scab
+||
+''[[Elsinoë theae]]''
+|-
+|Macrophoma stem canker
+||
+''[[Macrophoma theicola]]''{{break}}
+{{=}} ''[[Macrophoma theiocola]]''{{break}}
+''[[Botryosphaeria dothidea]]''{{break}}
+''[[Botryosphaeria mamane]]''{{break}}
+''[[Fusarium solani]]''
+|-
+|Net blister blight
+||
+''[[Exobasidium reticulatum]]''
+|-
+|Pale brown root rot
+||
+''[[Pseudophaeolus baudonii]]''
+|-
+|Phloem necrosis
+||
+Phloem necrosis virus (Camellia Virus 1)
+|-
+|Phyllosticta leaf spot
+||
+''[[Phyllosticta erratica]]''
+''[[Phyllosticta theae]]''
+|-
+|Pink disease
+||
+''[[Corticium salmonicolor]]''
+|-
+|Poria root rot and stem canker
+||
+''[[Poria hypobrunnea]]''
+|-
+|Purple root rot
+||
+''[[Helicobasidium compactum]]''
+|-
+|Red leaf spot
+||
+''[[Phoma theicola]]''
+|-
+|Red root rot
+||
+''[[Ganoderma philippii]]''
+''[[Poria hypolateritia]]''{{break}}
+{{=}} ''[[Ceriporiopsis hypolateritia]]''
+|-
+|Red rust (alga)[Keith, Lisa; Ko, Wen-Hsiung; Sato, Dwight M.; University of Hawai'i at Mānoa. [http://www.ctahr.hawaii.edu/oc/freepubs/pdf/PD-33.pdf Identification Guide for Diseases of Tea (''Camellia sinensis'')], ''Plant Disease'', October 2006.]
+||
+''[[Cephaleuros virescens]]''
+{{=}} ''[[Cephaleuros parasiticus]]''
+|-
+|Rim blight
+||
+''[[Cladosporium]]'' sp.
+|-
+|Root rot
+||
+''[[Cylindrocarpon tenue]]''
+''[[Cylindrocladiella camelliae]]''
+{{=}} ''[[Cylindrocladium camelliae]]''
+''[[Cylindrocladium clavatum]]''
+''[[Fomes lamaënsis]]''
+''[[Ganoderma applanatum]]''
+''[[Ganoderma lucidum]]''
+|-
+|Rough bark
+||
+''[[Patellaria theae]]''
+|-
+|Sclerotial blight
+||
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+{{=}} ''[[Corticium rolfsii]]''
+|-
+|Shoot withering
+||''[[Diplodia theae-sinensis]]''
+|-
+|Sooty mold
+||
+''[[Capnodium footii]]''
+''[[Capnodium theae]]''
+''[[Meliola camelliae]]''
+|-
+|Stump rot
+||
+''[[Irpex destruens]]''
+|-
+|Tarry root rot
+||
+''[[Hypoxylon asarcodes]]''
+|-
+|Thorny stem blight
+||
+''[[Tunstallia aculeata]]''
+|-
+|Thread blight
+||
+''[[Marasmius tenuissimus]]''
+|-
+|Twig blight
+||
+''[[Patellaria theae]]''
+|-
+|Twig dieback, stem canker
+||
+''[[Macrophoma theicola]]''
+|-
+|[[Velvet blight]]
+||
+''[[Septobasidium bogoriense]]''
+''[[Septobasidium pilosum]]''
+''[[Septobasidium theae]]''
+|-
+|Violet root rot
+||
+''[[Sphaerostilbe repens]]''
+|-
+|White root rot
+||
+''[[Rigidoporus microporus]]''
+{{=}} ''[[Rigidoporus lignosus]]''
+{{=}} ''[[Fomes lignosus]]''
+|-
+|White scab
+||
+''[[Elsinoe leucospila]]''
+{{=}} ''[[Sphaceloma theae]]''
+|-
+|White spot
+||''[[Phyllosticta theifolia]]''
+|-
+|Wood rot
+||
+''[[Hypoxylon nummularium]]''
+''[[Hypoxylon serpens]]''
+''[[Hypoxylon vestitum]]''
+|-
+|Xylaria root rot
+||
+''[[Xylaria]]'' sp.
+|-
+|}
+
+==Nematodes, parasitic==
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Burrowing nematode
+||
+''[[Radopholus similis]]''
+|-
+|Dagger nematode
+||
+''[[Xiphinema insigne]]''
+|-
+|Lance nematode
+||
+''[[Hoplolaimus columbus]]''
+|-
+|Mature tea nematode
+||
+''[[Meloidogyne brevicauda]]''
+|-
+|Pin nematode
+||
+''[[Paratylenchus curvitatus]]''
+|-
+|Reniform nematode
+||
+''[[Rotylenchulus reniformis]]''
+|-
+|Root-knot nematode
+||
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+''[[Meloidogyne thamesi]]''
+|-
+|Root lesion nematode
+||
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus loosi]]''
+|-
+|Sheath nematode
+||
+''[[Hemicriconemoides kanayaensis]]''
+|-
+|Spiral nematode
+||
+''[[Helicotylenchus dihystera]]''
+''[[Helicotylenchus erythrinae]]''
+|-
+|Stunt nematode
+||
+''[[Tylenchorhynchus]]'' sp.
+|-
+|}
+
+==Lepidoptera (butterflies and moth) pests==
+{| class="wikitable" style="clear"
+! colspan=2| '''Lepidoptera (butterflies and moth) pests'''
+|-
+|[[Coleophoridae|Case-bearer]] species
+||
+''[[Coleophora scaleuta]]''
+|-
+|[[Coleophoridae|Case-bearer]] species
+||
+''[[Coleophora vigilis]]''
+|-
+|[[Hepialidae|Ghost moth]] species
+||
+''[[Endoclita malabaricus]]''
+|-
+|[[Hepialidae|Ghost moth]] species
+||
+''[[Endoclita punctimargo]]''
+|-
+|[[Hepialidae|Ghost moth]] species
+||
+''[[Endoclita purpurescens]]''
+|-
+|[[Hepialidae|Ghost moth]] species
+||
+''[[Endoclita sericeus]]''
+|-
+|[[Willow beauty]]
+||
+''Peribatodes rhomboidaria''
+|-
+|}
+
+== References ==
+{{reflist}}
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Tea.aspx Common Names of Diseases, The American Phytopathological Society]
+
+{{-}}
+{{Teas}}
+
+[[Category:Lists of plant diseases|Tea]]
+[[Category:Tea diseases| ]]
+[[Category:Camellia]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_tobacco_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_tobacco_diseases.json
new file mode 100644
index 0000000..fd38039
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_tobacco_diseases.json
@@ -0,0 +1,301 @@
+{{Short description|none}}
+{{for|diseases caused by human consumption of tobacco|Health effects of tobacco}}
+{{Tobacco}}
+
+This is a '''list of diseases of [[tobacco]] (''Nicotiana tabacum'')'''. They present challenges to the successful [[cultivation of tobacco]].
+
+== Bacterial diseases ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+| Angular leaf spot (Synonym: Wildfire, Black fire)
+| |''[[Pseudomonas syringae]]'' pv. ''tabaci'')
+|-
+| Granville wilt
+| |''[[Ralstonia solanacearum]]'', formerly ''Pseudomonas solanacearum''
+|-
+| Hairy roots
+| |''[[Agrobacterium rhizogenes]]''
+|-
+| Hollow stalk
+| |''Erwinia carotovora'' subsp. ''carotovora''
+''E. carotovora'' subsp. ''atroseptica''
+|-
+| Leaf gall
+| |''[[Rhodococcus fascians]]''
+|-
+|}
+
+== Fungal diseases ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+| Anthracnose
+| |
+''[[Colletotrichum destructivum]]''
+''[[Glomerella glycines]]'' [teleomorph]
+|-
+| Barn spot
+| |
+''[[Cercospora nicotianae]]''
+|-
+| Barn rot
+| |Several fungi and bacteria
+|-
+| Black root rot
+| |
+''[[Thielaviopsis basicola]]''
+|-
+| Bikini
+| |
+''[[Phytophthora nicotianae]]''
+
+|-
+| Blue mold (downy mildew)
+| |''[[Peronospora tabacina]]''
+{{=}} ''[[Peronospora hyoscyami f.sp. tabacina]]''
+|-
+| Brown spot
+| |
+''[[Alternaria alternata]]''
+|-
+| Charcoal rot
+| |
+''[[Macrophomina phaseolina]]''
+|-
+| Collar rot
+| |
+''[[Sclerotinia sclerotiorum]]''
+|-
+| Damping-off, Pythium
+| |
+''[[Pythium]]'' spp.
+''[[Pythium aphanidermatum]]''
+''[[Pythium ultimum]]''
+|-
+| Frogeye leaf spot
+| |
+''[[Cercospora nicotianae]]''
+|-
+| Fusarium wilt
+| |
+''[[Fusarium oxysporum]]'' (several f. sp.)
+|-
+| Gray mold
+| |
+''[[Botrytis cinerea]]''
+''[[Botryotinia fuckeliana]]'' [teleomorph]
+|-
+| Mycosphaerella leaf spot
+| |
+''[[Mycosphaerella nicotianae]]''
+|-
+| Olpidium seedling blight
+| |
+''[[Olpidium brassicae]]''
+|-
+| Phyllosticta leaf spot
+| |
+''[[Phyllosticta nicotiana]]''
+|-
+| Powdery mildew
+| |
+''[[Erysiphe cichoracearum]]''
+|-
+| Ragged leaf spot
+| |
+''[[Phoma exigua var. exigua]]''
+{{=}} ''[[Ascochyta phaseolorum]]''
+|-
+| Scab
+| |
+''[[Hymenula affinis]]''
+{{=}} ''[[Fusarium affine]]''
+|-
+| Sore shin and damping-off
+| |
+''[[Rhizoctonia solani]]''
+''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+| Southern stem rot
+Southern blight
+| |
+''[[Sclerotium rolfsii]]''
+''[[Athelia rolfsii]]'' [teleomorph]
+|-
+| Stem rot of transplants
+| |
+''[[Pythium]]'' spp.
+|-
+| Target spot
+| |
+''[[Rhizoctonia solani]]''
+|-
+| Verticillium wilt
+| |
+''[[Verticillium albo-atrum]]''
+''[[Verticillium dahliae]]''
+|-
+|}
+
+== Nematodes, parasitic ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+| Bulb and stem (stem break)
+| |
+''[[Ditylenchus dipsaci]]''
+|-
+| Cyst
+| |
+''[[Globodera solanacearum]]''
+{{=}} ''[[Globodera virginiae]]''
+''[[Globodera tabacum]]''
+|-
+| Dagger, American
+| |
+''[[Xiphinema americanum]]''
+|-
+| Foliar
+| |
+''[[Aphelenchoides ritzemabosi]]''
+|-
+| Lesion
+| |
+''[[Pratylenchus brachyurus]]''
+''[[Pratylenchus penetrans]]''
+''[[Pratylenchus]]'' spp.
+|-
+| Reniform
+| |
+''[[Rotylenchulus reniformis]]''
+|-
+| Root-knot
+| |
+''[[Meloidogyne arenaria]]''
+''[[Meloidogyne hapla]]''
+''[[Meloidogyne incognita]]''
+''[[Meloidogyne javanica]]''
+|-
+| Spiral
+| |
+''[[Helicotylenchus]]'' spp.
+|-
+| Stubby-root
+| |
+''[[Paratrichodorus]]'' spp.
+''[[Trichodorus]]'' spp.
+|-
+| Stunt
+| |
+''[[Merlinius]]'' spp.
+''[[Tylenchorhynchus]]'' spp.
+|-
+|}
+
+== Viral and phytoplasma diseases ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral mycoplasmalike organisms [MLO] diseases'''
+|-
+| Alfalfa mosaic
+| |[[Alfalfa mosaic virus]]
+|-
+| [[Aster yellows]]
+| |Phytoplasma
+|-
+| Beet curly top
+| |[[Beet curly top virus]]
+|-
+| Bushy top
+| |[[Tobacco vein distorting virus]] and [[tobacco bushy top virus]] in combination
+|-
+| Cucumber mosaic
+| |[[Cucumber mosaic virus]]
+|-
+| Lettuce necrotic yellows
+| |[[Lettuce necrotic yellows virus]] (in ''Nicotiana glutinosa'')
+|-
+| Peanut stunt
+| |[[Peanut stunt virus]]
+|-
+| Rosette disease
+| |[[Tobacco vein distorting virus]] and [[tobacco mottle virus]] in combination
+|-
+| [[Stolbur of tobacco|Stolbur]]
+| |[[Phytoplasma]]
+|-
+| Tobacco etch
+| |[[Tobacco etch virus]]
+|-
+| Tobacco leaf curl
+| |[[Tobacco leaf curl virus]]
+|-
+| Tobacco mosaic
+| |[[Tobacco mosaic virus]] and [[Satellite Tobacco Mosaic Virus]]
+|-
+| Tobacco necrosis
+| |[[Tobacco necrosis virus]]
+|-
+| Tobacco rattle
+| |[[Tobacco rattle virus]]
+|-
+| Tobacco ring spot
+| |[[Tobacco ring spot virus]]
+|-
+| Tobacco streak
+| |[[Tobacco streak virus]]
+|-
+| Tobacco stunt
+| |[[Tobacco stunt virus]]
+|-
+| Tobacco vein mottling
+| |[[Tobacco vein mottling virus]]
+|-
+| Tomato spotted wilt
+| |[[Tomato spotted wilt virus]]
+|-
+| Vein banding
+| |[[Potato virus Y]]
+|-
+| Wound tumor
+| |[[Wound tumor virus]]
+|-
+|}
+
+== Miscellaneous diseases and disorders ==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Miscellaneous diseases and disorders'''
+|-
+| Brown root rot
+| |''Pratylenchus'' spp. (nematodes)
+|-
+| Drought spot
+| |Drought
+|-
+| False broomrape
+| |Unknown
+|-
+| Frenching
+| |Metabolite of ''Bacillus cereus''
+|-
+| Stem break (in Europe)
+| |''Ditylenchus dipsaci'' (nematodes)
+|-
+| Sunscald
+| |High light intensity and high temperatures
+|-
+| Weather fleck
+| |Ozone
+|-
+|}
+
+== References ==
+* [https://www.apsnet.org/edcenter/resources/commonnames/Pages/Tobacco.aspx Common Names of Diseases, The American Phytopathological Society]
+
+[[Category:Lists of plant diseases|Tobacco]]
+[[Category:Tobacco diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_tomato_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_tomato_diseases.json
new file mode 100644
index 0000000..d3ae52c
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_tomato_diseases.json
@@ -0,0 +1,344 @@
+{{Short description|none}}
+{{refimprove|date=March 2013}}
+This article is a '''list of diseases''' of [[tomato]]es (''Solanum lycopersicum'').
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+|+Bacterial diseases (including phytoplasma)
+|-
+|[[Bacterial Canker of Tomato]]
+||''[[Clavibacter michiganensis]]'' subsp. ''michiganensis''
+|-
+|[http://www.grin.com/en/e-book/178581/bacterial-speck-disease-of-tomato-an-insight-into-host-bacteria-interaction Bacterial speck] ||''[[Pseudomonas syringae]]'' pv. ''tomato''
+|-
+|[[Bacterial spot]]
+||[[Xanthomonas campestris pv. vesicatoria|''Xanthomonas campestris'' pv. ''vesicatoria'']]
+|-
+|Bacterial stem rot and fruit rot
+||''[[Erwinia carotovora]]'' subsp. ''carotovora''
+|-
+|[[Bacterial Wilt of Potato|Bacterial wilt]]
+||''[[Ralstonia solanacearum]]''
+|-
+|Pith necrosis
+||''[[Pseudomonas corrugata]]''
+|-
+|Syringae leaf spot
+||''[[Pseudomonas syringae]]'' pv. ''syringae''
+|-
+|Aster yellows
+||''Ca.'' [[Phytoplasma]] asteris
+|-
+|Tomato big bud
+||''Ca.'' [[Phytoplasma]] sp.; may be multiple agents
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+|+Fungal diseases
+|-
+|Alternaria stem canker
+||
+* ''[[Alternaria alternata f.sp. lycopersici]]''
+|-
+|[[Anthracnose]]
+|
+* ''[[Colletotrichum coccodes]]''
+* ''[[Colletotrichum dematium]]''
+* ''[[Colletotrichum gloeosporioides]]''
+* ''[[Glomerella cingulata]]'' [teleomorph]
+|-
+|Black mold rot
+|
+* ''[[Alternaria alternata]]''
+* ''[[Stemphylium botryosum]]''
+* ''[[Pleospora tarda]]'' [teleomorph]
+* ''[[Stemphylium herbarum]]''
+* ''[[Pleospora herbarum]]'' [teleomorph]
+** ''[[Pleospora lycopersici]]''
+* ''[[Ulocladium consortiale]]''
+** ''[[Stemphylium consortiale]]''
+|-
+|Black root rot
+|
+* ''[[Thielaviopsis basicola]]''
+* ''[[Chalara elegans]]'' [synanamorph]
+|-
+|Black shoulder
+|
+* ''[[Alternaria alternata]]''
+|-
+|[[Buckeye rot of tomato]]
+|
+* ''[[Phytophthora capsici]]''
+* ''[[Phytophthora drechsleri]]''
+* ''[[Phytophthora nicotianae var. parasitica]]''
+** ''[[Phytophthora parasitica]]''
+|-
+|Cercospora leaf mold
+|
+* ''[[Pseudocercospora fuligena]]''
+** ''[[Cercospora fuligena]]''
+|-
+|Charcoal rot
+|
+* ''[[Macrophomina phaseolina]]''
+|-
+|Corky root rot
+|
+* ''[[Pyrenochaeta lycopersici]]''
+|-
+|Didymella stem rot
+||
+* ''[[Didymella lycopersici]]''
+|-
+|Early blight
+|
+* ''[[Alternaria solani]]''
+|-
+|Fusarium crown and root rot
+|
+* ''[[Fusarium oxysporum f.sp. radicis-lycopersici]]''
+|-
+|[[Fusarium wilt]]
+|
+* ''[[Fusarium oxysporum f.sp. lycopersici]]''
+|-
+|[[Gray Leaf Spot]]
+|
+* ''[[Stemphylium botryosum f.sp. lycopersici]]''
+* ''[[Stemphylium lycopersici]]''
+** ''[[Stemphylium floridanum]]''
+* ''[[Stemphylium solani]]''
+|-
+|[[Gray mold]]
+||
+* ''[[Botrytis cinerea]]''
+* ''[[Botryotinia fuckeliana]]'' [teleomorph]
+|-
+|[[Late Blight of Potato|Late blight]]
+|
+* ''[[Phytophthora infestans]]''[{{Citation|title=Potato and tomato late blight caused by ''Phytophthora infestans'': An overview of pathology and resistance breeding |last=Nowicki|first=Marcin|date=17 August 2011|publisher=Plant Disease, ASP|doi= 10.1094/PDIS-05-11-0458|display-authors=etal|volume=96|journal=Plant Disease|issue=1 |pages=4–17|pmid=30731850|doi-access=}}][{{Citation|title=Appraisal of artificial screening techniques of tomato to accurately reflect field performance of the late blight resistance|last=Nowakowska|first=Marzena|date=3 Oct 2014|doi=10.1371/journal.pone.0109328|display-authors=etal|volume=9|journal=PLOS ONE|issue=10|article-number=e109328|pmid=25279467|pmc=4184844|bibcode=2014PLoSO...9j9328N|doi-access=free}}]
+|-
+|[[Leaf mold]]
+|
+* ''[[Fulvia fulva]]''
+** ''[[Cladosporium fulvum]]''
+|-
+|Phoma rot
+|
+* ''[[Phoma destructiva]]''
+|-
+|[[Powdery mildew]]
+|
+* ''[[Oidiopsis sicula]]''
+* ''[[Leveillula taurica]]'' [teleomorph]
+|-
+|Pythium damping-off and fruit rot
+|
+* ''[[Pythium aphanidermatum]]''
+* ''[[Pythium arrhenomanes]]''
+* ''[[Pythium debaryanum]]''
+* ''[[Pythium myriotylum]]''
+* ''[[Pythium ultimum]]''
+|-
+|Rhizoctonia damping-off and fruit rot
+|
+* ''[[Rhizoctonia solani]]''
+* ''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Rhizopus rot
+|
+* ''[[Rhizopus stolonifer]]''
+|-
+|Septoria leaf spot
+|
+* ''[[Septoria lycopersici]]''
+|-
+|Sour rot
+|
+* ''[[Geotrichum candidum]]''
+* ''[[Galactomyces geotrichum]]'' [teleomorph]
+* ''[[Geotrichum klebahnii]]'' (= ''G. penicillatum'')
+|-
+|[[Southern Blight]]
+|
+* ''[[Sclerotium rolfsii]]''
+* ''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Target spot
+|
+* ''[[Corynespora cassiicola]]''
+|-
+|[[Verticillium wilt]]
+|
+* ''[[Verticillium albo-atrum]]''
+* ''[[Verticillium dahliae]]''
+|-
+|White mold
+|
+* ''[[Sclerotinia sclerotiorum]]''
+* ''[[Sclerotinia minor]]''
+|-
+|}
+
+==Lepidoptera larvae==
+
+{| class="wikitable" style="clear"
+|+Lepidoptera larvae
+|-
+|[[Cutworm]]
+|
+*''[[Noctua pronuba]]'' and other Noctuidae
+|-
+|[[tomato fruitworm]]
+|
+*''Helicoverpa zea''
+|-
+|[[Tomato hornworm]]
+|
+*''Manduca quinquemaculata''
+|-
+|[[Tobacco hornworm]]
+|
+*''Manduca sexta''
+|-
+|
+|
+*''[[Leucinodes africensis]]''[{{cite journal |last1=Mally |first1=Richard |last2=Hayden |first2=James E. |last3=Neinhuis |first3=Christoph |last4=Jordal |first4=Bjarte H. |last5=Nuss |first5=Matthias |year=2019 |title=The phylogenetic systematics of Spilomelinae and Pyraustinae (Lepidoptera: Pyraloidea: Crambidae) inferred from DNA and morphology |journal=Arthropod Systematics & Phylogeny |volume=77 |issue=1 |pages=141–204 |doi=10.26049/ASP77-1-2019-07 |issn=1863-7221 |url=https://www.senckenberg.de/wp-content/uploads/2019/07/07_asp_77-1_mally_141-204.pdf}}]
+|-
+|Brown-tipped pearl
+|
+*''[[Leucinodes laisalis]]''[
+|-
+|Eggplant borer
+|
+*''[[Leucinodes orbonalis]]''][{{cite web|last1=Hayden|first1=James E.| last2=Lee|first2=Sangmi|last3=Passoa|first3=Steven C.|last4=Young|first4=James|last5=Landry|first5=Jean-François|last6=Nazari|first6=Vazrick|last7=Mally|first7=Richard|last8=Somma|first8=Louis A.|last9= Ahlmark|first9=Kurt M.|date=2013|title=Digital Identification of Microlepidoptera on Solanaceae|publisher=USDA-APHIS-PPQ Identification Technology Program (ITP). Fort Collins, CO|access-date=2021-05-05|url=http://idtools.org/id/leps/micro/}}]
+|-
+|
+|
+*''[[Lineodes integra]]''[
+|-
+|Tomato fruit borer
+|
+*''[[Neoleucinodes elegantalis]]''][
+|-
+|Eggplant leafroller
+|
+*''[[Rhectocraspeda periusalis]]''][
+|-
+|Potato tuber moth
+|
+*''[[Phthorimaea operculella]]''][
+|-
+|Tomato borer
+|
+*''[[Tuta absoluta]]''][
+|-
+|Tomato pinworm
+|
+*''[[Keiferia lycopersicella]]''][
+|}
+
+==Nematodes==
+{| class="wikitable" style="clear"
+|+Nematodes, parasitic
+|-
+|[[Root-knot nematode|Root-knot]]
+|
+* ''[[Meloidogyne]]'' spp.
+|-
+|Sting
+|
+* ''[[Belonolaimus longicaudatus]]''
+|-
+|Stubby-root
+|
+* ''[[Paratrichodorus]]'' spp.
+* ''[[Trichodorus]]'' spp.
+|-
+|}
+
+==Viral and viroid==
+
+{| class="wikitable" style="clear"
+|+Viral and viroid diseases
+|-
+|Common mosaic of tomato (internal browning of fruit)
+||[[Tobacco mosaic virus]] (TMV)
+|-
+|[[Curly top]]
+||[[Curtovirus]]
+|-
+|Potato virus Y
+||[[Potato virus Y]]
+|-
+|Pseudo curly top
+||[[Tomato pseudo-curly top virus]]
+|-
+|Tomato bushy stunt
+||[[Tomato bushy stunt virus]]
+|-
+|Tomato etch
+||[[Tobacco etch virus]]
+|-
+|Tomato fern leaf
+||[[Cucumber mosaic virus]]
+|-
+|Tomato mosaic
+||[[Tomato mosaic virus]] ([[ToMV]])
+|-
+|Tomato mottle
+||[[Geminivirus|Tomato mottle geminivirus]]
+|-
+|Tomato necrosis
+||[[Alfalfa mosaic virus]]
+|-
+|Tomato spotted wilt
+||[[Tomato spotted wilt virus]]
+|-
+|Tomato yellow leaf curl
+||[[Tomato yellow leaf curl virus]]
+|-
+|Tomato yellow top
+||[[Tomato yellow top virus]]
+|-
+|[[Tomato bunchy top]]
+||[[Potato spindle tuber viroid]]][{{cite journal | last=Mink | first=G. I. | title=Pollen and Seed-Transmitted Viruses and Viroids | journal=[[Annual Review of Phytopathology]] | publisher=[[Annual Reviews (publisher)|Annual Reviews]] | volume=31 | issue=1 | year=1993 | issn=0066-4286 | doi=10.1146/annurev.py.31.090193.002111 | pages=375–402}}]
+|-
+|Tomato planto macho
+||[[Tomato planto macho viroid]]
+|}
+
+==Miscellaneous diseases and disorders==
+
+{| class="wikitable" style="clear"
+|+Miscellaneous diseases and disorders
+|-
+|Autogenous necrosis
+||Genetic
+|-
+|Fruit pox
+||Genetic
+|-
+|Gold fleck
+||Genetic
+|-
+|Graywall
+||Undetermined etiology
+|-
+|}
+
+==References==
+
+
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Tomato.aspx Common Names of Diseases, The American Phytopathological Society]
+*[https://vegetablemdonline.ppath.cornell.edu/DiagnosticKeys/TomKey.html Tomato Diagnostic Key, The Cornell Plant Pathology Vegetable Disease Web Page]
+*[https://vegetablemdonline.ppath.cornell.edu/factsheets/Tomato_List.htm Tomato Diseases (Fact Sheets and Information Bulletins), The Cornell Plant Pathology Vegetable Disease Web Page]
+* Gautam, P. 2008. Bacterial Speck Disease of Tomato: An Insight into Host-Bacteria Interaction. GRIN Publishing [http://www.grin.com/en/e-book/178581/bacterial-speck-disease-of-tomato-an-insight-into-host-bacteria-interaction]
+
+[[Category:Lists of plant diseases|Tomato]]
+[[Category:Tomato diseases]]
\ No newline at end of file
diff --git a/apps/web/scripts/.scraper-cache/wt-List_of_wheat_diseases.json b/apps/web/scripts/.scraper-cache/wt-List_of_wheat_diseases.json
new file mode 100644
index 0000000..49f42bf
--- /dev/null
+++ b/apps/web/scripts/.scraper-cache/wt-List_of_wheat_diseases.json
@@ -0,0 +1,502 @@
+{{Short description|none}}
+This article is a '''list of [[Wheat diseases|diseases of wheat]]''' (''Triticum'' spp.) grouped by causative agent.
+
+==Bacterial diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Bacterial diseases'''
+|-
+|Bacterial leaf blight
+|
+* [[Pseudomonas syringae ssp. syringae|''Pseudomonas syringae'' ssp. ''syringae'']]
+|-
+|Bacterial mosaic
+|
+* ''[[Clavibacter michiganensis]]'' subsp. ''tessellarius''
+|-
+|Bacterial sheath rot
+|
+* ''[[Pseudomonas fuscovaginae]]''
+|-
+|Basal glume rot
+|
+* ''[[Pseudomonas syringae]]'' pv. ''atrofaciens''
+|-
+|Black chaff = bacterial leaf streak
+|
+* ''[[Xanthomonas translucens]]'' pv. ''translucens''
+|-
+|Pink seed
+|
+* ''Erwinia rhapontici''
+|-
+|Spike blight = gummosis
+|
+* ''[[Rathayibacter tritici]]''
+** ''[[Clavibacter tritici]]''
+** [[Corynebacterium michiganense pv. tritici|''Corynebacterium michiganense'' pv. ''tritici'']]
+* ''[[Clavibacter iranicus|Cl. iranicus]]''
+|-
+|}
+
+==Fungal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Fungal diseases'''
+|-
+|Alternaria leaf blight[{{Cite journal|author= Chalkley, D.|year=2010|title=Invasive Fungi: ''Alternaria'' leaf blight of wheat - ''Alternaria triticina'' | publisher=[[Systematic Mycology and Microbiology Laboratory]], [[Agricultural Research Service]], United States Department of Agriculture (USDA ARS) |url=http://nt.ars-grin.gov/taxadescriptions/factsheets/index.cfm?thisapp=Alternariatriticina |archiveurl=https://web.archive.org/web/20141029172135/http://nt.ars-grin.gov/taxadescriptions/factsheets/index.cfm?thisapp=Alternariatriticina|archivedate=29 October 2014|url-status=live}}]
+|
+* ''[[Alternaria triticina]]''
+|-
+|[[Anthracnose]]
+|
+* ''[[Glomerella graminicola]]'' ([[anamorph]] ''Colletotrichum graminicola'')
+|-
+|Ascochyta leaf spot
+|
+* ''[[Ascochyta tritici]]''
+|-
+|Aureobasidium decay
+|
+* ''[[Microdochium bolleyi]]''
+** ''[[Aureobasidium bolleyi]]''
+|-
+|Black head molds = sooty molds
+|
+* ''[[Alternaria]]'' spp.
+* ''[[Cladosporium]]'' spp.
+* ''[[Epicoccum]]'' spp.
+* ''[[Sporobolomyces]]'' spp.
+* ''[[Stemphylium]]'' spp.
+* and other genera
+|-
+|[[Black point (disease)|Black point]] = kernel smudge
+||associated with fungal infection, primarily:[{{Cite web|author=Watkins, John E.|title=Black Point Disease of Wheat|publisher=Institute of Agriculture and Natural Resources at the [[University of Nebraska–Lincoln]]|url=http://www.totoagriculture.org/PDFs/PlantDiseasesPests/41.pdf|archiveurl=https://web.archive.org/web/20141025203331/http://www.totoagriculture.org/PDFs/PlantDiseasesPests/41.pdf|archivedate=25 October 2014|url-status=live}}]
+* ''[[Alternaria]]'' spp.
+* ''[[Cochliobolus sativus]]''
+* ''[[Cladosporium]]'' spp.
+|-
+|Cephalosporium stripe
+|
+* ''[[Hymenula cerealis]]''
+** ''[[Cephalosporium gramineum]]''
+|-
+|[[Common bunt (wheat)|Common bunt = stinking smut]]
+|
+* ''[[Tilletia tritici]]''
+** ''[[Tilletia caries]]''
+* ''[[Tilletia laevis]]''
+** ''[[Tilletia foetida]]''
+|-
+|[[Common root rot (wheat)|Common root rot]]
+|
+* ''[[Cochliobolus sativus]]'' [teleomorph]
+* ''Bipolaris sorokiniana'' [anamorph]
+** syn. ''Helminthosporium sativum''
+|-
+|Cottony [[snow mold]]
+|
+* ''[[Coprinus psychromorbidus]]''
+|-
+|[[crown rot of wheatCrown rot]] = foot rot, seedling blight, dryland root rot
+|
+* ''[[Fusarium]]'' spp.
+* ''[[Fusarium pseudograminearum]]''
+* ''[[Gibberella zeae]]''
+* ''[[Fusarium graminearum]]'' Group II [anamorph]
+* ''[[Gibberella avenacea]]''
+* ''[[Fusarium avenaceum]]'' [anamorph]
+* ''[[Fusarium culmorum]]''
+|-
+|Dilophospora leaf spot = twist
+|
+* ''[[Dilophospora alopecuri]]''
+|-
+|Downy mildew = crazy top
+|
+* ''[[Sclerophthora macrospora]]''
+|-
+|Dwarf bunt
+|
+* ''[[Tilletia controversa]]''
+|-
+|[[Ergot]]
+|
+* ''[[Claviceps purpurea]]''
+* ''[[Sphacelia segetum]]'' [anamorph]
+|-
+|[[Eyespot (wheat)|Eyespot = foot rot, strawbreaker]]
+|
+* ''[[Tapesia yallundae]]''
+* ''Ramulispora herpotrichoides'' [anamorph]
+** ''Pseudocercosporella herpotrichoides'' W-pathotype
+* ''[[Tapesia acuformis]]''
+* ''Ramulispora acuformis'' [anamorph]
+** ''Pseudocercosporella herpotrichoides'' var. ''acuformis'' R-pathoytpe
+|-
+|False eyespot
+|
+* ''[[Gibellina cerealis]]''
+|-
+|Flag smut
+|
+* ''[[Urocystis agropyri]]''
+|-
+|Foot rot = dryland foot rot
+|
+* ''[[Fusarium]]'' spp.
+|-
+|Halo spot
+|
+* ''[[Pseudoseptoria donacis]]''
+** ''[[Selenophoma donacis]]''
+|-
+|[[Karnal bunt|Karnal bunt = partial bunt]]
+|
+* ''[[Tilletia indica]]''
+** syn. ''Neovossia indica''
+|-
+|[[Wheat leaf rust|Leaf rust = brown rust]]
+|
+* ''[[Puccinia triticina]]''
+** syn. ''Puccinia recondita f.sp. tritici''
+* ''[[Puccinia tritici-duri]]''
+|-
+|Leptosphaeria leaf spot
+|
+* ''[[Phaeosphaeria herpotrichoides]]''
+** ''[[Leptosphaeria herpotrichoides]]''
+* ''[[Stagonospora]]'' sp. [anamorph]
+|-
+|Loose smut
+|
+* ''[[Ustilago tritici]]''
+** [[Ustilago segetum var. tritici|''Ustilago segetum'' var. ''tritici'']]
+* [[Ustilago segetum var. nuda|''Ustilago segetum'' var. ''nuda'']]
+* [[Ustilago segetum var. avenae|''Ustilago segetum'' var. ''avenae'']]
+|-
+|Microscopica leaf spot
+|
+* ''[[Phaeosphaeria microscopica]]''
+** syn. ''Leptosphaeria microscopica''
+|-
+|Phoma spot
+|
+* ''[[Phoma]]'' spp.
+* ''[[Phoma glomerata]]''
+* ''[[Phoma sorghina]]''
+** ''[[Phoma insidiosa]]''
+|-
+|Pink snow mold = [[Fusarium patch]]
+|
+* ''[[Microdochium nivale]]''
+** ''[[Fusarium nivale]]''
+*''[[Monographella nivalis]]'' [teleomorph]
+|-
+|Platyspora leaf spot
+|
+* ''[[Clathrospora pentamera]]''
+** ''[[Platyspora pentamera]]''
+|-
+|[[Powdery mildew]]
+|
+* ''[[Blumeria graminis]]''
+|-
+|Pythium root rot
+|
+* ''[[Pythium aphanidermatum]]''
+* ''[[Pythium arrhenomanes]]''
+* ''[[Pythium graminicola]]''
+* ''[[Pythium myriotylum]]''
+* ''[[Pythium volutum]]''
+|-
+|Rhizoctonia root rot
+|
+* ''[[Rhizoctonia solani]]''
+* ''[[Thanatephorus cucumeris]]'' [teleomorph]
+|-
+|Ring spot = Wirrega blotch
+|
+* ''[[Pyrenophora seminiperda]]''
+** ''[[Drechslera campanulata]]''
+* ''[[Drechslera wirreganensis]]''
+|-
+|Scab = head blight = Fusarium head blight (FHB)[{{Cite journal|author1=Zhang, Julia X. |author2=Jin, Yue |author3=Rudd, Jackie C. |author4=Bockelman, Harold E. |name-list-style=amp|year=2008|title=New Fusarium Head Blight Resistant Spring Wheat Germplasm Identified in the USDA National Small Grains Collection|journal=Crop Science|volume=48|pages=223–235|url=http://amarillo.tamu.edu/files/2010/12/New-Fusarium-head-blight-resistant-spring-wheat-germplasm-identified-in-the-USDA-national-small-grains-collection-.pdf|archiveurl=https://web.archive.org/web/20140811084520/http://amarillo.tamu.edu/files/2010/12/New-Fusarium-head-blight-resistant-spring-wheat-germplasm-identified-in-the-USDA-national-small-grains-collection-.pdf|archivedate=11 August 2014|url-status=live |doi=10.2135/cropsci2007.02.0116}}]
+|
+* ''[[Fusarium]]'' spp.
+* ''[[Gibberella zeae]]''
+* ''[[Fusarium graminearum]]'' Group II [anamorph]
+* ''[[Gibberella avenacea]]''
+* ''[[Fusarium avenaceum]]'' [anamorph]
+* ''[[Fusarium culmorum]]''
+* ''[[Microdochium nivale]]''
+** ''[[Fusarium nivale]]''
+* ''[[Monographella nivalis]]'' [teleomorph]
+|-
+|Sclerotinia snow mold = snow scald
+|
+* ''[[Myriosclerotinia borealis]]''
+** ''[[Sclerotinia borealis]]''
+|-
+|Sclerotium wilt (see Southern blight)
+|
+* ''[[Sclerotium rolfsii]]''
+* ''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Septoria blotch[{{Cite web|title=Septoria Leaf Blotch, Stagonospora Glume Blotch|date=4 November 2008|publisher=Texas AgriLife Extension Service, Texas A&M University |url=https://amarillo.tamu.edu/files/2010/11/SeptoriaStagonospora.pdf|archiveurl=https://web.archive.org/web/20140811063444/http://amarillo.tamu.edu/files/2010/11/SeptoriaStagonospora.pdf|archivedate=11 August 2014|url-status=live}}]
+|
+* ''[[Septoria tritici]]''
+* ''[[Mycosphaerella graminicola]]'' [teleomorph]
+|-
+|Sharp eyespot
+|
+* ''[[Rhizoctonia cerealis]]''
+* ''[[Ceratobasidium cereale]]'' [teleomorph]
+|-
+|Snow rot
+|
+* ''[[Pythium]]'' spp.
+* ''[[Pythium aristosporum]]''
+* ''[[Pythium iwayamae]]''
+* ''[[Pythium okanoganense]]''
+|-
+|Southern blight = Sclerotium base rot
+|
+* ''[[Sclerotium rolfsii]]''
+* ''[[Athelia rolfsii]]'' [teleomorph]
+|-
+|Speckled snow mold = gray snow mold or [[Typhula blight]]
+|
+* ''[[Typhula idahoensis]]''
+* ''[[Typhula incarnata]]''
+* ''[[Typhula ishikariensis]]''
+* ''[[Typhula ishikariensis var. canadensis]]''
+|-
+|[[Spot blotch (wheat)|Spot blotch]]
+|
+* ''[[Cochliobolus sativus]]'' [teleomorph]
+* ''[[Cochliobolus sativus|Bipolaris sorokiniana]]'' [anamorph]
+** ''[[Cochliobolus sativus|Helminthosporium sativum]]''
+|-
+|Stagonospora blotch
+|
+* ''[[Phaeosphaeria avenaria f.sp. triticae]]''
+* ''[[Stagonospora avenae f.sp. triticae]]'' [anamorph]
+** ''[[Septoria avenae f.sp. triticea]]''
+* ''[[Phaeosphaeria nodorum]]''
+* ''[[Stagonospora nodorum]]'' [anamorph]
+** ''[[Septoria nodorum]]''
+|-
+|Stem rust = black rust
+|
+* ''[[Puccinia graminis]]''
+** ''[[Puccinia graminis f.sp. tritici]]'' (Ug99)
+|-
+|Storage molds
+|
+* ''[[Aspergillus]]'' spp.
+* ''[[Penicillium]]'' spp.
+* and others
+|-
+|Stripe rust = yellow rust
+|
+* ''[[Puccinia striiformis]]''
+* ''[[Uredo glumarum]]'' [anamorph]
+|-
+|Take-all
+|
+* ''[[Gaeumannomyces graminis var. tritici]]''
+* ''[[Gaeumannomyces graminis var. avenae]]''
+|-
+|Tan spot = yellow leaf spot, red smudge
+|
+* ''[[Pyrenophora tritici-repentis]]''
+* ''[[Drechslera tritici-repentis]]'' [anamorph]
+|-
+|Tar spot
+|
+* ''[[Phyllachora graminis]]''
+* ''[[Linochora graminis]]'' [anamorph]
+|-
+|Wheat Blast
+|
+* ''[[Magnaporthe grisea]]''
+|-
+|Zoosporic root rot
+|
+* ''[[Lagena radicicola]]''
+* ''[[Ligniera pilorum]]''
+* ''[[Olpidium brassicae]]''
+* ''[[Rhizophydium graminis]]''
+|-
+|}
+
+==Viral diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Viral diseases'''
+|-
+|African cereal streak
+|see Maize streak
+|-
+|Agropyron mosaic
+|genus [[Rymovirus]], [[Agropyron mosaic virus]] (AgMV)
+|-
+|Australian wheat striate mosaic
+|see Chloris striate mosaic
+|-
+|Barley stripe mosaic
+|genus [[Hordeivirus]], [[Barley stripe mosaic virus]] (BSMV)
+|-
+|[[Barley yellow dwarf virus|Barley yellow dwarf]]
+|genus [[Luteovirus]], [[Barley yellow dwarf virus|Barley yellow dwarf virus (BYDV)]]
+|-
+|Barley yellow streak mosaic
+||[[Barley yellow streak mosaic virus]]
+|-
+|Barley yellow striate mosaic
+||genus [[Cytorhabdovirus]], [[Barley yellow striate mosaic virus]] (BYSMV)
+|-
+|Barley yellow stripe
+||see Barley stripe mosaic
+|-
+|[[Brome mosaic virus|Brome mosaic]]
+||genus [[Bromovirus]], [[Brome mosaic virus|Brome mosaic virus (BMV)]]
+|-
+|Cereal northern mosaic
+||genus [[Cytorhabdovirus]], [[Cereal northern mosaic virus]] (NCMV)
+|-
+|Cereal tillering
+||[[Cereal tillering virus]]
+|-
+|Chloris striate mosaic
+||genus [[Monogeminivirus]], [[Chloris striate mosaic virus]] (CSMV)
+|-
+|Cocksfoot mottle
+||genus [[Sobemovirus]], [[Cocksfoot mottle virus]] (CoMV)
+|-
+|Eastern wheat striate
+||[[Eastern wheat striate virus]]
+|-
+|Enanismo
+||Probable virus or phytoplasma
+|-
+|[[High plains disease]]
+||Probable virus. Vectored by wheat curl mite, ''[[Aceria tosichella]]''
+|-
+|Maize streak
+||genus [[Monogeminivirus]], [[Maize streak virus]] (MSV)
+|-
+|Northern cereal mosaic
+||genus [[Cytorhabdovirus]], [[Cereal northern mosaic virus]] (NCMV)
+|-
+|Oat sterile dwarf
+||genus [[Fijivirus]], [[Oat sterile dwarf virus]] (OSDV)
+|-
+|Rice black-streaked dwarf
+||genus [[Fijivirus]], [[Rice black-streaked dwarf virus]] (RBSDV)
+|-
+|Rice hoja blanca
+||genus [[Tenuivirus]], [[Rice hoja blanca virus]] (RHBV)
+|-
+|Russian winter wheat mosaic
+||genus [[Cytorhabdovirus]], [[Russian winter wheat mosaic virus]] (WWRMV)
+|-
+|Seedborne wheat yellows
+||Seedborne wheat yellows viroid
+|-
+|[[Tobacco mosaic virus|Tobacco mosaic]]
+||genus [[Tobamovirus]], [[Tobacco mosaic virus|Tobacco mosaic virus (TMV)]]
+|-
+|Wheat American striate mosaic
+||genus [[Nucleorhabdovirus]], [[Wheat American striate mosaic virus]] (WASMV)
+|-
+|Wheat chlorotic streak = Wheat chlorotic streak mosaic
+||see Barley yellow striate mosaic
+|-
+|Wheat dwarf
+||genus [[Monogeminivirus]], [[Wheat dwarf virus]] (WDV)
+|-
+|Wheat European striate mosaic
+||genus [[Tenuivirus]], [[Wheat European striate mosaic virus]] (EWSMV)
+|-
+||genus [[Emaravirus]], [[High Plains wheat mosaic emaravirus|Wheat mosaic virus]] (WMoV)
+|-
+|Wheat rosette stunt
+||see Cereal northern mosaic
+|-
+|Wheat soilborne mosaic
+||genus [[Furovirus]], [[Wheat soil-borne mosaic virus]] (SBWMV)
+|-
+|Wheat soilborne yellow mosaic
+||[[Wheat soil-borne yellow mosaic virus]]
+|-
+|Wheat spindle streak mosaic
+||a strain of [[Wheat yellow mosaic virus]]
+|-
+|Wheat spot mosaic
+||Probable virus or phytoplasma
+|-
+|Wheat streak mosaic
+||genus [[Tritimovirus]], [[Wheat streak mosaic virus]] (WSMV)
+|-
+|Wheat striate mosaic
+||see Wheat American striate mosaic
+|-
+|Wheat yellow leaf
+||genus [[Closterovirus]], [[Wheat yellow leaf virus]] (WYLV)
+|-
+|Wheat yellow mosaic
+||[[Wheat yellow mosaic virus]] = [[Wheat spindle streak mosaic virus]]
+|-
+|}
+
+==Phytoplasmal diseases==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Phytoplasmal diseases'''
+|-
+|Aster yellows
+||[[Aster yellows]] [[phytoplasma]]
+|-
+|}
+
+==Nematodes, parasitic==
+
+{| class="wikitable" style="clear"
+! colspan=2| '''Nematodes, parasitic'''
+|-
+|Cereal cyst nematode[{{Cite web|author=Wong, J.|title=Wheat Diseases and Pests: a guide for field identification|publisher=[[United States Department of Agriculture]]|url=http://wheat.pw.usda.gov/ggpages/wheatpests.html#nematodes|archive-url=https://archive.today/20121214141026/http://wheat.pw.usda.gov/ggpages/wheatpests.html#nematodes|url-status=dead|archive-date=December 14, 2012|display-authors=etal}}]
+||''[[Heterodera avenae]]''
+|-
+|Grass cyst nematode
+||''[[Punctodera punctata]]''
+|-
+|[[Root gall nematode]]
+||''Subanguina'' spp.
+|-
+|[[Root-knot nematode]]
+||''Meloidogyne'' spp.
+*''Meloidogyne naasi''
+*''Meloidogyne chitwoodi''
+|-
+|Seed gall = ear-cockle nematode = wheat gall nematode
+||''[[Anguina tritici]]''
+|-
+|}
+
+==References==
+{{Reflist}}
+*[https://www.apsnet.org/edcenter/resources/commonnames/Pages/Wheat.aspx Common Names of Diseases, The American Phytopathological Society]
+
+==Further reading==
+* {{Cite book|author=Bockus, William W.|year=2010|title=Compendium of wheat diseases and pests|edition=third|location=St. Paul, Minnesota|publisher=APS Press|isbn=978-0-89054-385-6|display-authors=etal}}
+* {{Cite book|author=Wiese, Maurice Victor|year=1987|title=Compendium of Wheat Diseases|edition=second|location=St. Paul, Minnesota|publisher=APS Press |isbn=978-0-89054-076-3}}, earlier but more detail
+* {{Cite book|author1=Gair, R |author2=Jenkins, J. E. E. |author3=Lester, E. |author4=Bassett, Peter |name-list-style=amp|year=1987|title=Cereal Pests and Diseases|edition=fourth|location=Ipswich, England|publisher=Farming Press|isbn=978-0-85236-164-1}}
+{{Clear}}
+
+{{Wheat}}
+
+{{DEFAULTSORT:Wheat diseases, list}}
+[[Category:Lists of plant diseases|Wheat]]
+[[Category:Wheat diseases|*]]
\ No newline at end of file
diff --git a/apps/web/scripts/retry-wiki.ts b/apps/web/scripts/retry-wiki.ts
new file mode 100644
index 0000000..42df03f
--- /dev/null
+++ b/apps/web/scripts/retry-wiki.ts
@@ -0,0 +1,71 @@
+#!/usr/bin/env node
+/**
+ * Retry Wikipedia pages that got rate-limited
+ *
+ * Uses longer delays (5s) for pages that previously got 429.
+ */
+import "dotenv/config";
+import { closeDb } from "../src/lib/db/index";
+import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
+import { resolve, dirname } from "path";
+import { fileURLToPath } from "url";
+
+const __filedir = dirname(fileURLToPath(import.meta.url));
+function cacheGet(k: string): string | null {
+ const p = resolve(__filedir, ".scraper-cache", encodeURIComponent(k) + ".json");
+ return existsSync(p) ? readFileSync(p, "utf-8") : null;
+}
+function cacheSet(k: string, v: string) {
+ const d = resolve(__filedir, ".scraper-cache");
+ if (!existsSync(d)) mkdirSync(d, { recursive: true });
+ writeFileSync(resolve(d, encodeURIComponent(k) + ".json"), v, "utf-8");
+}
+
+const PAGES_TO_RETRY = [
+ "List_of_cranberry_diseases",
+ "List_of_cucurbit_diseases",
+ "List_of_grape_diseases",
+ "List_of_hops_diseases",
+ "List_of_rice_diseases",
+ "List_of_rose_diseases",
+ "List_of_sorghum_diseases",
+ "List_of_soybean_diseases",
+ "List_of_spinach_diseases",
+ "List_of_strawberry_diseases",
+ "List_of_sugarcane_diseases",
+ "List_of_sunflower_diseases",
+ "List_of_sweet_potato_diseases",
+];
+
+async function fetchWT(page: string): Promise {
+ const key = `wt-${page}`;
+ const c = cacheGet(key);
+ if (c) return c;
+ const url = `https://en.wikipedia.org/w/api.php?action=parse&page=${encodeURIComponent(page)}&prop=wikitext&format=json&formatversion=2`;
+ const r = await fetch(url, { headers: { "User-Agent": "PlantDiseaseKB/1.0 (research)" } });
+ if (!r.ok) throw new Error(`HTTP ${r.status}`);
+ const d = (await r.json()) as { parse: { wikitext: string }; error?: { info: string } };
+ if (d.error) throw new Error(d.error.info);
+ cacheSet(key, d.parse.wikitext);
+ return d.parse.wikitext;
+}
+
+async function main() {
+ let success = 0;
+ for (const page of PAGES_TO_RETRY) {
+ process.stdout.write(`📋 ${page}... `);
+ try {
+ await new Promise((r) => setTimeout(r, 5000 + Math.random() * 2000));
+ const wt = await fetchWT(page);
+ console.log(`✅ ${wt.length} bytes`);
+ success++;
+ } catch (e) {
+ console.log(`❌ ${e instanceof Error ? e.message : e}`);
+ }
+ }
+ await new Promise((r) => setTimeout(r, 2000));
+ console.log(`\nDone. ${success}/${PAGES_TO_RETRY.length} pages fetched`);
+ closeDb();
+}
+
+main().catch(console.error);
diff --git a/apps/web/scripts/scrape-wikipedia.ts b/apps/web/scripts/scrape-wikipedia.ts
new file mode 100644
index 0000000..05b7ac2
--- /dev/null
+++ b/apps/web/scripts/scrape-wikipedia.ts
@@ -0,0 +1,1140 @@
+#!/usr/bin/env node
+/**
+ * Wikipedia Plant Disease Scraper
+ *
+ * Fetches disease data from Wikipedia "List of X diseases" pages via
+ * the MediaWiki API, parses wikitext tables, and stores in Turso.
+ *
+ * Usage: cd apps/web && npx tsx scripts/scrape-wikipedia.ts
+ */
+
+import "dotenv/config";
+import { sql } from "drizzle-orm";
+import { getDb, closeDb } from "../src/lib/db/index";
+import { plants, diseases, scrapeSources } from "../src/lib/db/schema";
+import type { CausalAgentType, Severity } from "../src/lib/types";
+import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
+import { resolve, dirname } from "path";
+import { fileURLToPath } from "url";
+
+// ─── Paths ───────────────────────────────────────────────────────────────────
+
+const __filedir = dirname(fileURLToPath(import.meta.url));
+
+// ─── Helpers ─────────────────────────────────────────────────────────────────
+
+function slugify(s: string): string {
+ return s
+ .toLowerCase()
+ .replace(/[^a-z0-9\s-]/g, "")
+ .replace(/\s+/g, "-")
+ .replace(/-+/g, "-")
+ .trim()
+ .replace(/^-|-$/g, "");
+}
+
+function clean(t: string): string {
+ return t
+ .replace(/\[\[[^\]]*?\|([^\]]*)\]\]/g, "$1")
+ .replace(/\[\[([^\]]*)\]\]/g, "$1")
+ .replace(/'''?/g, "")
+ .replace(/''/g, "")
+ .replace(/[]*>.*?<\/ref>/gi, "")
+ .replace(/] /gi, " ")
+ .replace(/&/g, "&")
+ .replace(/ /g, " ")
+ .replace(/{{[^}]*}}/g, "")
+ .replace(/\s{2,}/g, " ")
+ .trim();
+}
+
+// ─── Cache ───────────────────────────────────────────────────────────────────
+
+function cacheGet(k: string): string | null {
+ const p = resolve(__filedir, ".scraper-cache", encodeURIComponent(k) + ".json");
+ return existsSync(p) ? readFileSync(p, "utf-8") : null;
+}
+function cacheSet(k: string, v: string) {
+ const d = resolve(__filedir, ".scraper-cache");
+ if (!existsSync(d)) mkdirSync(d, { recursive: true });
+ writeFileSync(resolve(d, encodeURIComponent(k) + ".json"), v, "utf-8");
+}
+
+// ─── Wikipedia API ───────────────────────────────────────────────────────────
+
+let lastFetchTime = 0;
+const MIN_DELAY_MS = 600; // Wait at least 600ms between requests
+
+async function fetchWT(page: string): Promise {
+ const key = `wt-${page}`;
+ const c = cacheGet(key);
+ if (c) return c;
+
+ // Rate limiting
+ const now = Date.now();
+ const wait = Math.max(0, MIN_DELAY_MS - (now - lastFetchTime));
+ if (wait > 0) await new Promise((r) => setTimeout(r, wait));
+ lastFetchTime = Date.now();
+
+ const url = `https://en.wikipedia.org/w/api.php?action=parse&page=${encodeURIComponent(page)}&prop=wikitext&format=json&formatversion=2`;
+ const r = await fetch(url, { headers: { "User-Agent": "PlantDiseaseKB/1.0 (research)" } });
+
+ if (r.status === 429) {
+ // Rate limited — wait longer and retry once
+ console.log(` ⏳ Rate limited, waiting 5s...`);
+ await new Promise((r) => setTimeout(r, 5000));
+ const r2 = await fetch(url, { headers: { "User-Agent": "PlantDiseaseKB/1.0 (research)" } });
+ if (!r2.ok) throw new Error(`HTTP ${r2.status} for ${page} (after retry)`);
+ const d2 = (await r2.json()) as { parse: { wikitext: string }; error?: { info: string } };
+ if (d2.error) throw new Error(`API error: ${d2.error.info || JSON.stringify(d2.error)}`);
+ if (!d2.parse) throw new Error(`Page "${page}" not found`);
+ const wt2 = d2.parse.wikitext;
+ cacheSet(key, wt2);
+ return wt2;
+ }
+
+ if (!r.ok) throw new Error(`HTTP ${r.status} for ${page}`);
+ const d = (await r.json()) as { parse: { wikitext: string }; error?: { info: string } };
+ if (d.error) throw new Error(`API error: ${d.error.info || JSON.stringify(d.error)}`);
+ if (!d.parse) throw new Error(`Page "${page}" not found`);
+ const wt: string = d.parse.wikitext;
+ cacheSet(key, wt);
+ return wt;
+}
+
+// ─── Section → type ─────────────────────────────────────────────────────────
+
+const SECTION_RULES: [RegExp, CausalAgentType][] = [
+ [/bacteri/i, "bacterial"],
+ [/phytoplasma/i, "bacterial"],
+ [/fungus|fungal|fungi/i, "fungal"],
+ [/oomycete/i, "fungal"],
+ [/viral|viroid/i, "viral"],
+ [/nematode/i, "environmental"],
+ [
+ /miscellaneous|disorder|abiotic|nutrient|physiological|insect|pest|lepidoptera|mite|parasitic/i,
+ "environmental",
+ ],
+];
+
+function sectionType(name: string): CausalAgentType | null {
+ for (const [re, t] of SECTION_RULES) if (re.test(name)) return t;
+ return null;
+}
+
+// ─── Wikitable parser ────────────────────────────────────────────────────────
+
+interface Row {
+ name: string;
+ sci: string;
+}
+
+function parseRows(table: string): Row[] {
+ const out: Row[] = [];
+ const lines = table.split("\n").map((l) => l.trim());
+ let cells: string[] = [],
+ inRow = false;
+
+ for (const line of lines) {
+ if (line === "|-") {
+ if (cells.length) {
+ const r = mkRow(cells);
+ if (r) out.push(r);
+ }
+ cells = [];
+ inRow = true;
+ } else if (inRow && (line.startsWith("|") || line.startsWith("!"))) {
+ if (line.includes("||"))
+ cells.push(...line.split("||").map((p) => p.replace(/^[|!]+/, "").trim()));
+ else cells.push(line.replace(/^[|!]+/, "").trim());
+ } else if (inRow && line && !line.startsWith("|") && !line.startsWith("!")) {
+ if (cells.length) cells[cells.length - 1] += " " + line;
+ }
+ }
+ if (cells.length) {
+ const r = mkRow(cells);
+ if (r) out.push(r);
+ }
+ return out;
+}
+
+function mkRow(c: string[]): Row | null {
+ const name = clean(c[0] || "");
+ if (!name || /^(Common|Scientific|colspan)/i.test(name)) return null;
+ // Find first non-empty cell after name
+ let sci = "";
+ for (let i = 1; i < c.length; i++) {
+ const cl = clean(c[i]);
+ if (cl && cl.length > 2 && !cl.startsWith("'")) {
+ sci = cl;
+ break;
+ }
+ }
+ return { name, sci };
+}
+
+// ─── Fetch & parse one page ──────────────────────────────────────────────────
+
+interface TableData {
+ type: CausalAgentType;
+ rows: Row[];
+}
+
+async function scrapePage(page: string): Promise {
+ const wt = await fetchWT(page);
+ const tables: TableData[] = [];
+
+ // Strategy 1: section headers with embedded wikitable
+ const seenKeys = new Set();
+ const parts = wt.split(/\n(?===)/);
+ for (const part of parts) {
+ const h = part.match(/^==([^=]+)==/);
+ if (!h) continue;
+ const type = sectionType(h[1]);
+ if (!type) continue;
+
+ const tbl = part.match(/\{\|[\s\S]*?\|\}/);
+ if (!tbl) continue;
+
+ const rows = parseRows(tbl[0]);
+ if (rows.length) {
+ const key = type + "|" + rows.map((r) => r.name).join(",");
+ if (!seenKeys.has(key)) {
+ seenKeys.add(key);
+ tables.push({ type, rows });
+ }
+ }
+ }
+
+ // Strategy 2: tables with |+ caption (no section headers)
+ const capTbls = [...wt.matchAll(/\{\|[\s\S]*?\|\}/g)];
+ for (const m of capTbls) {
+ const blk = m[0];
+ const cap = blk.match(/^\|\+(.+)/m);
+ if (!cap) continue;
+ const type = sectionType(cap[1]);
+ if (!type) continue;
+
+ const rows = parseRows(blk);
+ if (rows.length) {
+ const key = type + "|" + rows.map((r) => r.name).join(",");
+ if (!seenKeys.has(key)) {
+ seenKeys.add(key);
+ tables.push({ type, rows });
+ }
+ }
+ }
+
+ return tables;
+}
+
+// ─── Disease templates (sourced from UW-Madison PDDC factsheets) ───────────
+
+const TEMPLATES: Record<
+ CausalAgentType,
+ {
+ symptoms: string[];
+ causes: string[];
+ treatment: string[];
+ prevention: string[];
+ severity: Severity;
+ }
+> = {
+ fungal: {
+ severity: "moderate",
+ symptoms: [
+ "Leaf spots or lesions with concentric rings or characteristic fungal growth",
+ "Yellowing and browning of infected plant tissue starting from lower leaves",
+ "Wilting, stunting, or dieback of infected plants under favorable conditions",
+ "Premature defoliation in moderate to severe cases",
+ "Reduced yield, fruit rot, or poor fruit quality on affected plants",
+ ],
+ causes: [
+ "Fungal pathogens surviving in soil, plant debris, or on infected seed material",
+ "Warm humid conditions (60-85°F) with extended leaf wetness periods",
+ "Spores spread by wind, rain splash, insects, or contaminated tools and hands",
+ "Dense plantings with poor air circulation and frequent overhead irrigation",
+ ],
+ treatment: [
+ "Remove and destroy all infected plant material — do not compost",
+ "Apply appropriate fungicide (copper, sulfur, chlorothalonil) as directed on label",
+ "Improve air circulation through proper plant spacing, pruning, and staking",
+ "Water at soil level using drip irrigation or soaker hoses to keep foliage dry",
+ "Apply 2-3 inches of organic mulch to reduce soil splash onto lower leaves",
+ ],
+ prevention: [
+ "Plant resistant varieties when available",
+ "Practice 2-3 year crop rotation with non-host plant families",
+ "Space plants adequately for good air movement",
+ "Avoid overhead watering; water early in the day",
+ "Remove and dispose of all plant debris at end of growing season",
+ ],
+ },
+ bacterial: {
+ severity: "high",
+ symptoms: [
+ "Water-soaked lesions on leaves, stems, and fruit that turn brown or black",
+ "Wilting of branches or entire plant despite adequate soil moisture",
+ "Vascular discoloration visible when stems are cut crosswise near soil line",
+ "Bacterial ooze or exudate from cut stems or infected tissue in humid weather",
+ "Cankers on stems with associated gumming or branch dieback",
+ ],
+ causes: [
+ "Bacterial pathogens entering through wounds, stomata, or other natural openings",
+ "Spread by rain splash, irrigation water, insects, and contaminated pruning tools",
+ "Warm humid conditions (75-90°F) favor rapid bacterial multiplication",
+ "Bacteria survive in infected plant debris, soil, and on seed surfaces between seasons",
+ ],
+ treatment: [
+ "Remove and destroy infected plants immediately — bag and remove from garden",
+ "Prune infected branches at least 12 inches below visible symptoms",
+ "Sterilize all pruning tools with 10% bleach or 70% alcohol between every cut",
+ "No chemical cure exists once plants are infected; copper may slow early infections",
+ "Disinfect hands, gloves, and clothing after handling infected plant material",
+ ],
+ prevention: [
+ "Use certified disease-free seed and pathogen-free transplants",
+ "Practice long crop rotation (3-5 years) with unrelated crop families",
+ "Avoid overhead irrigation; use drip irrigation or soaker hoses instead",
+ "Control insect vectors (cucumber beetles, flea beetles) that spread bacteria",
+ "Sanitize garden tools, stakes, and cages regularly",
+ ],
+ },
+ viral: {
+ severity: "high",
+ symptoms: [
+ "Mottled mosaic pattern of light and dark green patches on leaf surfaces",
+ "Leaf distortion, curling, puckering, or unusual narrowing of leaf blades",
+ "Yellowing along leaf veins (vein clearing) or intervenal chlorosis",
+ "Reduced plant vigor, stunted growth, and poor fruit or flower set",
+ "Discoloration, streaking, ringspots, or deformation on fruit and flowers",
+ ],
+ causes: [
+ "Virus particles transmitted by insect vectors including aphids, thrips, and whiteflies",
+ "Mechanical transmission through contaminated hands, pruning tools, or clothing",
+ "Propagation from infected parent material (cuttings, tubers, bulbs, seeds)",
+ "Virus overwintering in perennial weed hosts or wild reservoir plants near fields",
+ ],
+ treatment: [
+ "No cure available — remove and destroy infected plants as soon as detected",
+ "Decontaminate tools and work surfaces with 10% bleach or trisodium phosphate",
+ "Wash hands thoroughly with soap and water after handling infected plants",
+ "Control insect vectors using reflective mulches, row covers, and registered insecticides",
+ "Remove weeds and alternate host plants that may harbor the virus",
+ ],
+ prevention: [
+ "Purchase certified virus-free seed and transplants",
+ "Use insect-proof floating row covers during early growth stages",
+ "Isolate new plants for 2-3 weeks before introducing into the garden",
+ "Remove and destroy infected plants promptly at first symptom appearance",
+ "Rotate susceptible crops for 2-3 growing seasons",
+ ],
+ },
+ environmental: {
+ severity: "low",
+ symptoms: [
+ "Physiological symptoms resembling pathogen-caused disease without signs of infection",
+ "Symptoms often appear uniformly across planting or follow a distinct pattern",
+ "Tissue discoloration, necrosis, leaf margin scorch, or fruit deformation",
+ "Symptoms correlate with recent weather events, irrigation changes, or chemical use",
+ "No visible signs of fungal spores, bacterial ooze, or insect activity",
+ ],
+ causes: [
+ "Environmental stress including drought, flooding, temperature extremes, or sunscald",
+ "Nutrient deficiencies or toxicities in soil (calcium, boron, potassium, etc.)",
+ "Poor soil conditions: compaction, pH imbalance, poor drainage, or salt buildup",
+ "Chemical injury from pesticides, herbicides, fertilizers, or air pollutants",
+ ],
+ treatment: [
+ "Identify and correct the underlying environmental or nutritional issue",
+ "Test soil pH and nutrient levels; amend based on laboratory recommendations",
+ "Establish and maintain a consistent watering schedule appropriate for the crop",
+ "Provide shade, wind protection, or frost protection as needed for local conditions",
+ "Adjust fertilizer program to address specific identified nutrient deficiencies",
+ ],
+ prevention: [
+ "Test soil before planting and amend to recommended pH and nutrient levels",
+ "Choose plant varieties well-suited to local climate and soil conditions",
+ "Maintain consistent irrigation, especially during fruit development and hot weather",
+ "Apply balanced fertilizer according to soil test recommendations",
+ "Improve soil drainage with raised beds or incorporation of organic matter",
+ ],
+ },
+};
+
+function makeDesc(name: string, sci: string, plant: string, type: string): string {
+ return `${name} is a ${type} disease affecting ${plant}. Caused by ${sci || "a plant pathogen"}, this disease can significantly impact plant health under favorable environmental conditions. Early detection and integrated management practices are key to controlling spread and minimizing crop losses.`;
+}
+
+// ─── Source definitions ──────────────────────────────────────────────────────
+
+interface Src {
+ slug: string;
+ name: string;
+ sci: string;
+ fam: string;
+ cat: string;
+ page: string;
+ care: string;
+ img: string;
+}
+
+const SOURCES: Src[] = [
+ {
+ slug: "tomato",
+ name: "Tomato",
+ sci: "Solanum lycopersicum",
+ fam: "Solanaceae",
+ cat: "vegetable",
+ page: "List_of_tomato_diseases",
+ care: "Full sun (6-8h), consistent watering, well-drained soil pH 6.0-6.8.",
+ img: "",
+ },
+ {
+ slug: "potato",
+ name: "Potato",
+ sci: "Solanum tuberosum",
+ fam: "Solanaceae",
+ cat: "vegetable",
+ page: "List_of_potato_diseases",
+ care: "Full sun (6-8h), consistent watering, cool temps, loose soil pH 5.0-6.5.",
+ img: "",
+ },
+ {
+ slug: "apple",
+ name: "Apple",
+ sci: "Malus domestica",
+ fam: "Rosaceae",
+ cat: "tree",
+ page: "List_of_apple_diseases",
+ care: "Full sun (8h+), deep watering weekly, well-drained soil pH 6.0-7.0.",
+ img: "",
+ },
+ {
+ slug: "apricot",
+ name: "Apricot",
+ sci: "Prunus armeniaca",
+ fam: "Rosaceae",
+ cat: "tree",
+ page: "List_of_apricot_diseases",
+ care: "Full sun (8h+), moderate watering, well-drained soil pH 6.5-7.5.",
+ img: "",
+ },
+ {
+ slug: "avocado",
+ name: "Avocado",
+ sci: "Persea americana",
+ fam: "Lauraceae",
+ cat: "tree",
+ page: "List_of_avocado_diseases",
+ care: "Full sun (6-8h), moderate watering, well-drained soil pH 5.5-7.0.",
+ img: "",
+ },
+ {
+ slug: "banana",
+ name: "Banana",
+ sci: "Musa acuminata",
+ fam: "Musaceae",
+ cat: "fruit",
+ page: "List_of_banana_diseases",
+ care: "Full sun (8h+), consistent watering, warm temps 75-90°F.",
+ img: "",
+ },
+ {
+ slug: "barley",
+ name: "Barley",
+ sci: "Hordeum vulgare",
+ fam: "Poaceae",
+ cat: "vegetable",
+ page: "List_of_barley_diseases",
+ care: "Full sun (8h+), moderate watering, cool temps 55-75°F.",
+ img: "",
+ },
+ {
+ slug: "bean",
+ name: "Green Bean",
+ sci: "Phaseolus vulgaris",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_legume_diseases",
+ care: "Full sun (6-8h), moderate watering, warm temps 65-80°F.",
+ img: "",
+ },
+ {
+ slug: "blueberry",
+ name: "Blueberry",
+ sci: "Vaccinium corymbosum",
+ fam: "Ericaceae",
+ cat: "fruit",
+ page: "List_of_blueberry_diseases",
+ care: "Full sun, consistent moisture, acidic soil pH 4.5-5.5.",
+ img: "",
+ },
+ {
+ slug: "cabbage",
+ name: "Cabbage",
+ sci: "Brassica oleracea var. capitata",
+ fam: "Brassicaceae",
+ cat: "vegetable",
+ page: "List_of_brassica_diseases",
+ care: "Full sun, consistent watering, cool temps 50-85°F.",
+ img: "",
+ },
+ {
+ slug: "carrot",
+ name: "Carrot",
+ sci: "Daucus carota subsp. sativus",
+ fam: "Apiaceae",
+ cat: "vegetable",
+ page: "List_of_carrot_diseases",
+ care: "Full sun, consistent moisture, cool temps, loose sandy soil.",
+ img: "",
+ },
+ {
+ slug: "cherry",
+ name: "Cherry",
+ sci: "Prunus avium",
+ fam: "Rosaceae",
+ cat: "tree",
+ page: "List_of_cherry_diseases",
+ care: "Full sun, moderate watering, well-drained loam pH 6.0-7.0.",
+ img: "",
+ },
+ {
+ slug: "citrus",
+ name: "Citrus (Orange)",
+ sci: "Citrus × sinensis",
+ fam: "Rutaceae",
+ cat: "tree",
+ page: "List_of_citrus_diseases",
+ care: "Full sun, consistent watering, acidic soil pH 5.5-6.5.",
+ img: "",
+ },
+ {
+ slug: "cocoa",
+ name: "Cocoa (Cacao)",
+ sci: "Theobroma cacao",
+ fam: "Malvaceae",
+ cat: "tree",
+ page: "List_of_cocoa_diseases",
+ care: "Partial shade, consistent rainfall, warm tropics 65-90°F.",
+ img: "",
+ },
+ {
+ slug: "coconut",
+ name: "Coconut",
+ sci: "Cocos nucifera",
+ fam: "Arecaceae",
+ cat: "tree",
+ page: "List_of_coconut_palm_diseases",
+ care: "Full sun, moderate watering, warm temps 70-95°F.",
+ img: "",
+ },
+ {
+ slug: "coffee",
+ name: "Coffee",
+ sci: "Coffea arabica",
+ fam: "Rubiaceae",
+ cat: "tree",
+ page: "List_of_coffee_diseases",
+ care: "Partial shade, consistent rainfall, moderate temps 60-70°F.",
+ img: "",
+ },
+ {
+ slug: "corn",
+ name: "Corn (Maize)",
+ sci: "Zea mays",
+ fam: "Poaceae",
+ cat: "vegetable",
+ page: "List_of_maize_diseases",
+ care: "Full sun, consistent watering, warm temps 65-85°F.",
+ img: "",
+ },
+ {
+ slug: "cranberry",
+ name: "Cranberry",
+ sci: "Vaccinium macrocarpon",
+ fam: "Ericaceae",
+ cat: "fruit",
+ page: "List_of_cranberry_diseases",
+ care: "Full sun, constant moisture, acidic soil pH 4.5-5.5.",
+ img: "",
+ },
+ {
+ slug: "cucumber",
+ name: "Cucumber",
+ sci: "Cucumis sativus",
+ fam: "Cucurbitaceae",
+ cat: "vegetable",
+ page: "List_of_cucurbit_diseases",
+ care: "Full sun, consistent watering, warm temps 70-95°F.",
+ img: "",
+ },
+ {
+ slug: "grape",
+ name: "Grape",
+ sci: "Vitis vinifera",
+ fam: "Vitaceae",
+ cat: "fruit",
+ page: "List_of_grape_diseases",
+ care: "Full sun, moderate watering, well-drained soil pH 5.5-7.0.",
+ img: "",
+ },
+ {
+ slug: "hops",
+ name: "Hops",
+ sci: "Humulus lupulus",
+ fam: "Cannabaceae",
+ cat: "herb",
+ page: "List_of_hops_diseases",
+ care: "Full sun, consistent watering, well-drained soil pH 6.0-7.0.",
+ img: "",
+ },
+ {
+ slug: "lettuce",
+ name: "Lettuce",
+ sci: "Lactuca sativa",
+ fam: "Asteraceae",
+ cat: "vegetable",
+ page: "List_of_lettuce_diseases",
+ care: "Partial shade to full sun, consistent moisture, cool temps 55-75°F.",
+ img: "",
+ },
+ {
+ slug: "mango",
+ name: "Mango",
+ sci: "Mangifera indica",
+ fam: "Anacardiaceae",
+ cat: "tree",
+ page: "List_of_mango_diseases",
+ care: "Full sun, moderate watering, warm temps 70-100°F.",
+ img: "",
+ },
+ {
+ slug: "oats",
+ name: "Oats",
+ sci: "Avena sativa",
+ fam: "Poaceae",
+ cat: "vegetable",
+ page: "List_of_oats_diseases",
+ care: "Full sun, moderate watering, cool temps 50-70°F.",
+ img: "",
+ },
+ {
+ slug: "onion",
+ name: "Onion",
+ sci: "Allium cepa",
+ fam: "Amaryllidaceae",
+ cat: "vegetable",
+ page: "List_of_onion_diseases",
+ care: "Full sun, consistent watering, cool to warm temps 55-75°F.",
+ img: "",
+ },
+ {
+ slug: "papaya",
+ name: "Papaya",
+ sci: "Carica papaya",
+ fam: "Caricaceae",
+ cat: "fruit",
+ page: "List_of_papaya_diseases",
+ care: "Full sun, consistent watering, warm temps 70-90°F.",
+ img: "",
+ },
+ {
+ slug: "peach",
+ name: "Peach",
+ sci: "Prunus persica",
+ fam: "Rosaceae",
+ cat: "tree",
+ page: "List_of_peach_diseases",
+ care: "Full sun, consistent watering, well-drained sandy loam pH 6.0-7.0.",
+ img: "",
+ },
+ {
+ slug: "peanut",
+ name: "Peanut (Groundnut)",
+ sci: "Arachis hypogaea",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_peanut_diseases",
+ care: "Full sun, moderate watering, warm temps 75-95°F.",
+ img: "",
+ },
+ {
+ slug: "pear",
+ name: "Pear",
+ sci: "Pyrus communis",
+ fam: "Rosaceae",
+ cat: "tree",
+ page: "List_of_pear_diseases",
+ care: "Full sun, consistent watering, well-drained loam pH 6.0-7.0.",
+ img: "",
+ },
+ {
+ slug: "pepper",
+ name: "Bell Pepper",
+ sci: "Capsicum annuum",
+ fam: "Solanaceae",
+ cat: "vegetable",
+ page: "List_of_tomato_diseases",
+ care: "Full sun, consistent watering, warm soil 70-80°F.",
+ img: "",
+ },
+ {
+ slug: "pineapple",
+ name: "Pineapple",
+ sci: "Ananas comosus",
+ fam: "Bromeliaceae",
+ cat: "fruit",
+ page: "List_of_pineapple_diseases",
+ care: "Full sun, moderate watering, warm temps 65-95°F.",
+ img: "",
+ },
+ {
+ slug: "raspberry",
+ name: "Raspberry",
+ sci: "Rubus idaeus",
+ fam: "Rosaceae",
+ cat: "fruit",
+ page: "List_of_raspberry_diseases",
+ care: "Full sun, consistent watering, slightly acidic soil pH 5.5-6.5.",
+ img: "",
+ },
+ {
+ slug: "rice",
+ name: "Rice",
+ sci: "Oryza sativa",
+ fam: "Poaceae",
+ cat: "vegetable",
+ page: "List_of_rice_diseases",
+ care: "Full sun, flooded field conditions, warm temps 70-95°F.",
+ img: "",
+ },
+ {
+ slug: "rose",
+ name: "Rose",
+ sci: "Rosa spp.",
+ fam: "Rosaceae",
+ cat: "flower",
+ page: "List_of_rose_diseases",
+ care: "Full sun (6h+), deep watering, well-drained soil.",
+ img: "",
+ },
+ {
+ slug: "sorghum",
+ name: "Sorghum",
+ sci: "Sorghum bicolor",
+ fam: "Poaceae",
+ cat: "vegetable",
+ page: "List_of_sorghum_diseases",
+ care: "Full sun, moderate watering, warm temps 75-95°F.",
+ img: "",
+ },
+ {
+ slug: "soybean",
+ name: "Soybean",
+ sci: "Glycine max",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_soybean_diseases",
+ care: "Full sun, moderate watering, warm temps 60-85°F.",
+ img: "",
+ },
+ {
+ slug: "spinach",
+ name: "Spinach",
+ sci: "Spinacia oleracea",
+ fam: "Amaranthaceae",
+ cat: "vegetable",
+ page: "List_of_spinach_diseases",
+ care: "Partial shade to full sun, consistent moisture, cool temps 50-70°F.",
+ img: "",
+ },
+ {
+ slug: "strawberry",
+ name: "Strawberry",
+ sci: "Fragaria × ananassa",
+ fam: "Rosaceae",
+ cat: "fruit",
+ page: "List_of_strawberry_diseases",
+ care: "Full sun, consistent watering, acidic soil pH 5.5-6.5.",
+ img: "",
+ },
+ {
+ slug: "sugarcane",
+ name: "Sugarcane",
+ sci: "Saccharum officinarum",
+ fam: "Poaceae",
+ cat: "vegetable",
+ page: "List_of_sugarcane_diseases",
+ care: "Full sun, heavy watering, warm temps 75-95°F.",
+ img: "",
+ },
+ {
+ slug: "sunflower",
+ name: "Sunflower",
+ sci: "Helianthus annuus",
+ fam: "Asteraceae",
+ cat: "flower",
+ page: "List_of_sunflower_diseases",
+ care: "Full sun (6-8h+), moderate watering, warm temps 70-78°F.",
+ img: "",
+ },
+ {
+ slug: "sweet-potato",
+ name: "Sweet Potato",
+ sci: "Ipomoea batatas",
+ fam: "Convolvulaceae",
+ cat: "vegetable",
+ page: "List_of_sweet_potato_diseases",
+ care: "Full sun, moderate watering, warm temps 65-95°F.",
+ img: "",
+ },
+ {
+ slug: "tobacco",
+ name: "Tobacco",
+ sci: "Nicotiana tabacum",
+ fam: "Solanaceae",
+ cat: "vegetable",
+ page: "List_of_tobacco_diseases",
+ care: "Full sun, moderate watering, warm temps 65-85°F.",
+ img: "",
+ },
+ {
+ slug: "watermelon",
+ name: "Watermelon",
+ sci: "Citrullus lanatus",
+ fam: "Cucurbitaceae",
+ cat: "vegetable",
+ page: "List_of_cucurbit_diseases",
+ care: "Full sun, consistent watering, warm temps 75-85°F.",
+ img: "",
+ },
+ {
+ slug: "wheat",
+ name: "Wheat",
+ sci: "Triticum aestivum",
+ fam: "Poaceae",
+ cat: "vegetable",
+ page: "List_of_wheat_diseases",
+ care: "Full sun, moderate watering, cool to warm temps 55-75°F.",
+ img: "",
+ },
+ {
+ slug: "alfalfa",
+ name: "Alfalfa",
+ sci: "Medicago sativa",
+ fam: "Fabaceae",
+ cat: "herb",
+ page: "List_of_alfalfa_diseases",
+ care: "Full sun, drought tolerant, deep well-drained soil pH 6.5-7.5.",
+ img: "",
+ },
+ {
+ slug: "asparagus",
+ name: "Asparagus",
+ sci: "Asparagus officinalis",
+ fam: "Asparagaceae",
+ cat: "vegetable",
+ page: "List_of_asparagus_diseases",
+ care: "Full sun, consistent watering, well-drained sandy soil pH 6.5-7.5.",
+ img: "",
+ },
+ {
+ slug: "celery",
+ name: "Celery",
+ sci: "Apium graveolens",
+ fam: "Apiaceae",
+ cat: "vegetable",
+ page: "List_of_celery_diseases",
+ care: "Full sun, consistent moisture, cool temps 55-70°F.",
+ img: "",
+ },
+ {
+ slug: "chickpea",
+ name: "Chickpea",
+ sci: "Cicer arietinum",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_legume_diseases",
+ care: "Full sun, drought tolerant, warm temps 65-85°F.",
+ img: "",
+ },
+ {
+ slug: "clover",
+ name: "Clover",
+ sci: "Trifolium repens",
+ fam: "Fabaceae",
+ cat: "herb",
+ page: "List_of_clover_diseases",
+ care: "Full sun to partial shade, moderate watering, cool temps.",
+ img: "",
+ },
+ {
+ slug: "cowpea",
+ name: "Cowpea",
+ sci: "Vigna unguiculata",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_legume_diseases",
+ care: "Full sun, drought tolerant, warm temps 65-95°F.",
+ img: "",
+ },
+ {
+ slug: "faba-bean",
+ name: "Faba Bean",
+ sci: "Vicia faba",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_legume_diseases",
+ care: "Full sun, consistent watering, cool temps 55-70°F.",
+ img: "",
+ },
+ {
+ slug: "lentil",
+ name: "Lentil",
+ sci: "Lens culinaris",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_legume_diseases",
+ care: "Full sun, drought tolerant, cool temps 50-80°F.",
+ img: "",
+ },
+ {
+ slug: "pigeon-pea",
+ name: "Pigeon Pea",
+ sci: "Cajanus cajan",
+ fam: "Fabaceae",
+ cat: "vegetable",
+ page: "List_of_legume_diseases",
+ care: "Full sun, drought tolerant, warm tropical temps.",
+ img: "",
+ },
+ {
+ slug: "tea",
+ name: "Tea (Camellia sinensis)",
+ sci: "Camellia sinensis",
+ fam: "Theaceae",
+ cat: "tree",
+ page: "List_of_tea_diseases",
+ care: "Partial shade, consistent moisture, acidic soil pH 4.5-6.0.",
+ img: "",
+ },
+ {
+ slug: "turfgrass",
+ name: "Turfgrass (Lawn)",
+ sci: "Multiple Poaceae spp.",
+ fam: "Poaceae",
+ cat: "flower",
+ page: "List_of_turfgrass_diseases",
+ care: "Full sun to shade, consistent watering, mow at proper height.",
+ img: "",
+ },
+ {
+ slug: "oil-palm",
+ name: "Oil Palm",
+ sci: "Elaeis guineensis",
+ fam: "Arecaceae",
+ cat: "tree",
+ page: "List_of_oil_palm_diseases",
+ care: "Full sun, consistent moisture, warm tropics 75-95°F.",
+ img: "",
+ },
+];
+
+// ─── Main ────────────────────────────────────────────────────────────────────
+
+async function main() {
+ console.log("🌿 Wikipedia Plant Disease Scraper\n");
+
+ const db = getDb();
+ const totalDiseases = 0;
+ let totalPlants = 0;
+ const pageCache = new Map(); // page → tables
+
+ // Collect unique pages with their sources
+ const pageToSources = new Map();
+ for (const src of SOURCES) {
+ const list = pageToSources.get(src.page) || [];
+ list.push(src);
+ pageToSources.set(src.page, list);
+ }
+
+ console.log(`🌱 ${SOURCES.length} plant entries, ${pageToSources.size} unique Wikipedia pages\n`);
+
+ // Step 1: Scrape each unique page once
+ for (const [page, srcList] of pageToSources) {
+ const plantsForPage = srcList.map((s) => s.name).join(", ");
+ console.log(`📋 ${page} → ${plantsForPage}`);
+
+ try {
+ const tables = await scrapePage(page);
+ pageCache.set(page, tables);
+ const totalRows = tables.reduce((s, t) => s + t.rows.length, 0);
+ console.log(` → ${tables.length} disease categories, ${totalRows} entries`);
+
+ for (const t of tables) {
+ console.log(` ${t.type}: ${t.rows.length} diseases`);
+ }
+ } catch (err) {
+ console.error(` ❌ ${err instanceof Error ? err.message : err}`);
+ }
+ }
+
+ // Step 2: Build all disease entries per plant
+ interface DiseaseEntry {
+ id: string;
+ plantId: string;
+ name: string;
+ scientificName: string;
+ causalAgentType: CausalAgentType;
+ description: string;
+ symptoms: string[];
+ causes: string[];
+ treatment: string[];
+ prevention: string[];
+ lookalikeIds: string[];
+ severity: Severity;
+ sourceUrl: string;
+ }
+
+ const allDiseases: DiseaseEntry[] = [];
+ const insertedPlants = new Set();
+
+ for (const src of SOURCES) {
+ // Insert plant if not already
+ if (!insertedPlants.has(src.slug)) {
+ insertedPlants.add(src.slug);
+ totalPlants++;
+ await db
+ .insert(plants)
+ .values({
+ id: src.slug,
+ commonName: src.name,
+ scientificName: src.sci,
+ family: src.fam,
+ category: src.cat,
+ careSummary: src.care,
+ imageUrl: src.img,
+ })
+ .onConflictDoNothing();
+ }
+
+ // Get cached tables for this page
+ const tables = pageCache.get(src.page);
+ if (!tables) continue;
+
+ for (const table of tables) {
+ const template = TEMPLATES[table.type];
+ for (const row of table.rows) {
+ const diseaseId = `${src.slug}-${slugify(row.name)}`;
+
+ allDiseases.push({
+ id: diseaseId,
+ plantId: src.slug,
+ name: row.name,
+ scientificName: row.sci,
+ causalAgentType: table.type,
+ description: makeDesc(row.name, row.sci, src.name, table.type),
+ symptoms: template.symptoms,
+ causes: template.causes,
+ treatment: template.treatment,
+ prevention: template.prevention,
+ lookalikeIds: [],
+ severity: template.severity,
+ sourceUrl: `https://en.wikipedia.org/wiki/${src.page}`,
+ });
+ }
+ }
+ }
+
+ // Step 3: Link lookalikes (same plant, same type)
+ const byPlant = new Map();
+ for (const d of allDiseases) {
+ const list = byPlant.get(d.plantId) || [];
+ list.push(d);
+ byPlant.set(d.plantId, list);
+ }
+ for (const [, di] of byPlant) {
+ for (const d of di) {
+ if (d.severity === "low") continue;
+ const sameType = di.filter((o) => o.causalAgentType === d.causalAgentType && o.id !== d.id);
+ d.lookalikeIds = sameType.slice(0, 3).map((o) => o.id);
+ }
+ }
+
+ console.log(
+ `\n📊 Total: ${totalDiseases + allDiseases.length} disease entries across ${totalPlants} plants`,
+ );
+
+ // Step 4: Bulk insert into Turso using raw SQL batches
+ console.log("\n💾 Inserting into Turso via batch...");
+ const BATCH_SIZE = 100;
+ let inserted = 0;
+
+ // Use the raw libsql client for batch operations
+ const { createClient } = await import("@libsql/client");
+ const rawClient = createClient({
+ url: process.env.DATABASE_URL!,
+ authToken: process.env.DATABASE_TOKEN!,
+ });
+
+ for (let i = 0; i < allDiseases.length; i += BATCH_SIZE) {
+ const chunk = allDiseases.slice(i, i + BATCH_SIZE);
+ const stmts = chunk.map((d) => ({
+ sql: `INSERT OR IGNORE INTO diseases (id, plant_id, name, scientific_name, causal_agent_type, description, symptoms, causes, treatment, prevention, lookalike_ids, severity, source_url) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
+ args: [
+ d.id,
+ d.plantId,
+ d.name,
+ d.scientificName,
+ d.causalAgentType,
+ d.description,
+ JSON.stringify(d.symptoms),
+ JSON.stringify(d.causes),
+ JSON.stringify(d.treatment),
+ JSON.stringify(d.prevention),
+ JSON.stringify(d.lookalikeIds),
+ d.severity,
+ d.sourceUrl,
+ ],
+ }));
+
+ await rawClient.batch(stmts, "write");
+ inserted += chunk.length;
+ process.stdout.write(` ${Math.min(inserted, allDiseases.length)}/${allDiseases.length}\n`);
+ }
+
+ rawClient.close();
+
+ // Log scrape
+ await db
+ .insert(scrapeSources)
+ .values({
+ id: "wikipedia-scrape",
+ sourceType: "wikipedia",
+ sourceUrl: "https://en.wikipedia.org/wiki/Category:Plant_pathogens_and_diseases",
+ entriesCount: allDiseases.length,
+ status: "success",
+ lastScrapedAt: new Date().toISOString(),
+ })
+ .onConflictDoUpdate({
+ target: scrapeSources.id,
+ set: {
+ entriesCount: allDiseases.length,
+ status: "success" as const,
+ lastScrapedAt: new Date().toISOString(),
+ },
+ });
+
+ // Stats
+ const [pc] = await db.select({ c: sql`COUNT(*)` }).from(plants);
+ const [dc] = await db.select({ c: sql`COUNT(*)` }).from(diseases);
+ console.log(`\n✅ Done! Database: ${pc.c} plants, ${dc.c} diseases`);
+ closeDb();
+}
+
+main().catch((err) => {
+ console.error("❌", err);
+ process.exit(1);
+});
diff --git a/apps/web/scripts/seed-existing.ts b/apps/web/scripts/seed-existing.ts
new file mode 100644
index 0000000..7d0a958
--- /dev/null
+++ b/apps/web/scripts/seed-existing.ts
@@ -0,0 +1,90 @@
+#!/usr/bin/env node
+/**
+ * Seed Existing JSON Data into Turso
+ *
+ * Reads the existing plants.json and diseases.json files and inserts them
+ * into the Turso database via Drizzle ORM.
+ *
+ * Usage:
+ * cd apps/web && npx tsx scripts/seed-existing.ts
+ *
+ * Environment: DATABASE_URL and DATABASE_TOKEN from .env.development
+ */
+
+import "dotenv/config";
+import { readFileSync } from "fs";
+import { resolve } from "path";
+import { sql } from "drizzle-orm";
+import { getDb, closeDb } from "../src/lib/db/index";
+import { plants, diseases } from "../src/lib/db/schema";
+import type { Plant, Disease } from "../src/lib/types";
+
+// ─── Load JSON data ──────────────────────────────────────────────────────────
+
+const __dirname = resolve(new URL(".", import.meta.url).pathname);
+
+const plantsPath = resolve(__dirname, "../src/data/plants.json");
+const diseasesPath = resolve(__dirname, "../src/data/diseases.json");
+
+const rawPlants = JSON.parse(readFileSync(plantsPath, "utf-8")) as Plant[];
+const rawDiseases = JSON.parse(readFileSync(diseasesPath, "utf-8")) as Disease[];
+
+// ─── Seed ────────────────────────────────────────────────────────────────────
+
+async function main() {
+ const db = getDb();
+
+ console.log(`Seeding ${rawPlants.length} plants...`);
+ for (const p of rawPlants) {
+ await db
+ .insert(plants)
+ .values({
+ id: p.id,
+ commonName: p.commonName,
+ scientificName: p.scientificName,
+ family: p.family,
+ category: p.category,
+ careSummary: p.careSummary,
+ imageUrl: p.imageUrl,
+ })
+ .onConflictDoNothing();
+ }
+ console.log(`✅ ${rawPlants.length} plants inserted`);
+
+ console.log(`Seeding ${rawDiseases.length} diseases...`);
+ for (const d of rawDiseases) {
+ await db
+ .insert(diseases)
+ .values({
+ id: d.id,
+ plantId: d.plantId,
+ name: d.name,
+ scientificName: d.scientificName,
+ causalAgentType: d.causalAgentType,
+ description: d.description,
+ symptoms: d.symptoms,
+ causes: d.causes,
+ treatment: d.treatment,
+ prevention: d.prevention,
+ lookalikeIds: d.lookalikeDiseaseIds,
+ severity: d.severity,
+ sourceUrl: "",
+ })
+ .onConflictDoNothing();
+ }
+ console.log(`✅ ${rawDiseases.length} diseases inserted`);
+
+ // Verify
+ const [plantCount] = await db.select({ count: sql`COUNT(*)` }).from(plants);
+ const [diseaseCount] = await db.select({ count: sql`COUNT(*)` }).from(diseases);
+ console.log(`\n📊 Database now has:`);
+ console.log(` ${plantCount.count} plants`);
+ console.log(` ${diseaseCount.count} diseases`);
+
+ closeDb();
+}
+
+main().catch((err) => {
+ console.error("❌ Seed failed:", err);
+ process.exit(1);
+});
diff --git a/apps/web/src/app/api/diseases/diseases-api.test.ts b/apps/web/src/app/api/diseases/diseases-api.test.ts
new file mode 100644
index 0000000..22698c5
--- /dev/null
+++ b/apps/web/src/app/api/diseases/diseases-api.test.ts
@@ -0,0 +1,125 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { GET } from "./route";
+import * as diseasesLib from "@/lib/api/diseases";
+
+// Mock the diseases library
+vi.mock("@/lib/api/diseases", () => ({
+ listDiseases: vi.fn(),
+}));
+
+describe("GET /api/diseases", () => {
+ const createRequest = (searchParams: string) => {
+ const url = new URL(`http://localhost/api/diseases${searchParams}`);
+ const req = new Request(url);
+ // Mock NextRequest.nextUrl
+ (req as any).nextUrl = url;
+ return req;
+ };
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("returns all diseases with no filters", async () => {
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([
+ { id: "early-blight", name: "Early Blight" },
+ { id: "late-blight", name: "Late Blight" },
+ ]);
+
+ const response = await GET(createRequest(""));
+ expect(response.status).toBe(200);
+
+ const body = await response.json();
+ expect(body.diseases).toHaveLength(2);
+ expect(body.total).toBe(2);
+ });
+
+ it("filters diseases by plantId", async () => {
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([
+ { id: "early-blight", name: "Early Blight", plantId: "tomato" },
+ ]);
+
+ const response = await GET(createRequest("?plantId=tomato"));
+ expect(response.status).toBe(200);
+ });
+
+ it("filters diseases by search term", async () => {
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([
+ { id: "early-blight", name: "Early Blight" },
+ ]);
+
+ const response = await GET(createRequest("?search=blight"));
+ expect(response.status).toBe(200);
+ });
+
+ it("filters diseases by causalAgentType", async () => {
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([
+ { id: "early-blight", name: "Early Blight", causalAgentType: "fungal" },
+ ]);
+
+ const response = await GET(createRequest("?causalAgentType=fungal"));
+ expect(response.status).toBe(200);
+ });
+
+ it("filters diseases by severity", async () => {
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([
+ { id: "early-blight", name: "Early Blight", severity: "moderate" },
+ ]);
+
+ const response = await GET(createRequest("?severity=moderate"));
+ expect(response.status).toBe(200);
+ });
+
+ it("returns 400 for empty search term", async () => {
+ const response = await GET(createRequest("?search="));
+ expect(response.status).toBe(400);
+
+ const body = await response.json();
+ expect(body.error).toBe("Bad Request");
+ });
+
+ it("returns 400 for invalid causalAgentType", async () => {
+ const response = await GET(createRequest("?causalAgentType=invalid"));
+ expect(response.status).toBe(400);
+
+ const body = await response.json();
+ expect(body.message).toMatch(/Invalid causalAgentType/i);
+ });
+
+ it("returns 400 for invalid severity", async () => {
+ const response = await GET(createRequest("?severity=invalid"));
+ expect(response.status).toBe(400);
+
+ const body = await response.json();
+ expect(body.message).toMatch(/Invalid severity/i);
+ });
+
+ it("accepts valid causalAgentTypes", async () => {
+ const validTypes = ["fungal", "bacterial", "viral", "environmental"];
+
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([]);
+
+ for (const type of validTypes) {
+ const response = await GET(createRequest(`?causalAgentType=${type}`));
+ expect(response.status).toBe(200);
+ }
+ });
+
+ it("accepts valid severities", async () => {
+ const validSeverities = ["low", "moderate", "high", "critical"];
+
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([]);
+
+ for (const severity of validSeverities) {
+ const response = await GET(createRequest(`?severity=${severity}`));
+ expect(response.status).toBe(200);
+ }
+ });
+
+ it("returns cache control header", async () => {
+ (diseasesLib.listDiseases as ReturnType).mockReturnValue([]);
+ const response = await GET(createRequest(""));
+ const cacheControl = response.headers.get("Cache-Control");
+ expect(cacheControl).toContain("max-age=3600");
+ });
+});
diff --git a/apps/web/src/app/api/health/health.test.ts b/apps/web/src/app/api/health/health.test.ts
new file mode 100644
index 0000000..a1819da
--- /dev/null
+++ b/apps/web/src/app/api/health/health.test.ts
@@ -0,0 +1,27 @@
+import { describe, it, expect } from "vitest";
+import { GET } from "./route";
+
+describe("GET /api/health", () => {
+ it("returns 200 with status ok", async () => {
+ const response = await GET();
+ expect(response.status).toBe(200);
+
+ const body = await response.json();
+ expect(body.status).toBe("ok");
+ expect(body.timestamp).toBeDefined();
+ });
+
+ it("returns valid ISO timestamp", async () => {
+ const response = await GET();
+ const body = await response.json();
+
+ const date = new Date(body.timestamp);
+ expect(date.toString()).not.toBe("Invalid Date");
+ });
+
+ it("returns JSON content type", async () => {
+ const response = await GET();
+ const contentType = response.headers.get("content-type");
+ expect(contentType).toContain("application/json");
+ });
+});
diff --git a/apps/web/src/app/api/plants/plants.test.ts b/apps/web/src/app/api/plants/plants.test.ts
new file mode 100644
index 0000000..d04d24e
--- /dev/null
+++ b/apps/web/src/app/api/plants/plants.test.ts
@@ -0,0 +1,95 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { GET } from "./route";
+import * as diseasesLib from "@/lib/api/diseases";
+
+// Mock the diseases library
+vi.mock("@/lib/api/diseases", () => ({
+ listPlants: vi.fn(),
+}));
+
+describe("GET /api/plants", () => {
+ const createRequest = (searchParams: string) => {
+ const url = new URL(`http://localhost/api/plants${searchParams}`);
+ const req = new Request(url);
+ (req as any).nextUrl = url;
+ return req;
+ };
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("returns all plants with no filters", async () => {
+ (diseasesLib.listPlants as ReturnType).mockReturnValue([
+ { id: "tomato", commonName: "Tomato" },
+ { id: "pepper", commonName: "Pepper" },
+ ]);
+
+ const response = await GET(createRequest(""));
+ expect(response.status).toBe(200);
+
+ const body = await response.json();
+ expect(body.plants).toHaveLength(2);
+ expect(body.total).toBe(2);
+ });
+
+ it("filters plants by search term", async () => {
+ (diseasesLib.listPlants as ReturnType).mockReturnValue([
+ { id: "tomato", commonName: "Tomato" },
+ ]);
+
+ const response = await GET(createRequest("?search=tomato"));
+ expect(response.status).toBe(200);
+
+ const body = await response.json();
+ expect(body.plants[0].commonName).toBe("Tomato");
+ });
+
+ it("filters plants by category", async () => {
+ (diseasesLib.listPlants as ReturnType).mockReturnValue([
+ { id: "tomato", commonName: "Tomato", category: "vegetables" },
+ ]);
+
+ const response = await GET(createRequest("?category=vegetables"));
+ expect(response.status).toBe(200);
+ });
+
+ it("returns 400 for empty search term", async () => {
+ const response = await GET(createRequest("?search="));
+ expect(response.status).toBe(400);
+
+ const body = await response.json();
+ expect(body.error).toBe("Bad Request");
+ });
+
+ it("returns 400 for invalid category", async () => {
+ const response = await GET(createRequest("?category=invalid"));
+ expect(response.status).toBe(400);
+
+ const body = await response.json();
+ expect(body.message).toMatch(/Invalid category/i);
+ });
+
+ it("returns cache control header", async () => {
+ (diseasesLib.listPlants as ReturnType).mockReturnValue([]);
+ const response = await GET(createRequest(""));
+ const cacheControl = response.headers.get("Cache-Control");
+ expect(cacheControl).toContain("max-age=3600");
+ });
+
+ it("accepts valid categories", async () => {
+ const validCategories = [
+ "vegetables",
+ "herbs",
+ "houseplants",
+ "flowers",
+ ];
+
+ (diseasesLib.listPlants as ReturnType).mockReturnValue([]);
+
+ for (const cat of validCategories) {
+ const response = await GET(createRequest(`?category=${cat}`));
+ expect(response.status).toBe(200);
+ }
+ });
+});
diff --git a/apps/web/src/app/browse/BrowseContent.test.tsx b/apps/web/src/app/browse/BrowseContent.test.tsx
new file mode 100644
index 0000000..a793674
--- /dev/null
+++ b/apps/web/src/app/browse/BrowseContent.test.tsx
@@ -0,0 +1,152 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { render, screen, fireEvent } from "@testing-library/react";
+import BrowseContent from "@/app/browse/BrowseContent";
+
+// Mock Next.js navigation
+vi.mock("next/navigation", () => ({
+ useSearchParams: vi.fn(() => ({
+ get: vi.fn(() => null),
+ })),
+}));
+
+// Mock PlantCard
+vi.mock("@/components/PlantCard", () => ({
+ default: ({ plant }: any) => (
+
+ {plant.commonName}
+ {plant.emoji}
+
+ ),
+}));
+
+// Mock EmptyState
+vi.mock("@/components/EmptyState", () => ({
+ default: ({ title, description, actionLabel }: any) => (
+
+ {title}
+ {description}
+ {actionLabel && {actionLabel} }
+
+ ),
+}));
+
+describe("BrowseContent", () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("renders page header with plant count", () => {
+ render( );
+ expect(screen.getByText("Browse Plants")).toBeInTheDocument();
+ });
+
+ it("renders search input", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox", {
+ name: /Search plants and diseases/i,
+ });
+ expect(searchInput).toBeInTheDocument();
+ });
+
+ it("filters plants by search query", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox") as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "tomato" } });
+
+ // Should show tomato plant
+ expect(screen.getByText("Tomato")).toBeInTheDocument();
+ });
+
+ it("shows results count", () => {
+ render( );
+ expect(screen.getByText(/Showing \d+ plants/i)).toBeInTheDocument();
+ });
+
+ it("renders category filter tabs", () => {
+ render( );
+ const tablist = screen.getByRole("tablist", { name: /Plant categories/i });
+ expect(tablist).toBeInTheDocument();
+
+ // Should have category tabs
+ const tabs = screen.getAllByRole("tab");
+ expect(tabs.length).toBeGreaterThan(0);
+ });
+
+ it("filters by category when tab is clicked", () => {
+ render( );
+ const tabs = screen.getAllByRole("tab");
+
+ // Click a category tab (not 'all')
+ const vegTab = tabs.find((t) => t.textContent?.toLowerCase().includes("vegetable"));
+ if (vegTab) {
+ fireEvent.click(vegTab);
+ expect(screen.getByText(/in vegetable/i)).toBeInTheDocument();
+ }
+ });
+
+ it("clears search when clear button is clicked", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox") as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "tomato" } });
+ expect(searchInput.value).toBe("tomato");
+
+ const clearBtn = screen.getByRole("button", { name: /Clear search/i });
+ fireEvent.click(clearBtn);
+
+ expect(searchInput.value).toBe("");
+ });
+
+ it("shows empty state when no plants match search", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox") as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "xyznonexistent123" } });
+
+ expect(screen.getByTestId("empty-title")).toHaveTextContent("No plants found");
+ });
+
+ it("shows empty state with search query in description", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox") as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "xyznonexistent123" } });
+
+ expect(screen.getByTestId("empty-desc")).toHaveTextContent(/xyznonexistent123/i);
+ });
+
+ it("shows matching text in results count", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox") as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "tomato" } });
+
+ expect(screen.getByText(/matching "tomato"/i)).toBeInTheDocument();
+ });
+
+ it("renders all plant cards when no filter applied", () => {
+ render( );
+ // Should show all plants
+ const plantCards = screen.getAllByTestId(/plant-card-/);
+ expect(plantCards.length).toBeGreaterThan(0);
+ });
+
+ it("searches by scientific name", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox") as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "solanum" } });
+
+ expect(screen.getByText("Tomato")).toBeInTheDocument();
+ });
+
+ it("searches by family name", () => {
+ render( );
+ const searchInput = screen.getByRole("searchbox") as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "solanaceae" } });
+
+ expect(screen.getByText("Tomato")).toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/app/not-found.test.tsx b/apps/web/src/app/not-found.test.tsx
new file mode 100644
index 0000000..e4f8e6c
--- /dev/null
+++ b/apps/web/src/app/not-found.test.tsx
@@ -0,0 +1,30 @@
+import { describe, it, expect } from "vitest";
+import { render, screen } from "@testing-library/react";
+import NotFound from "@/app/not-found";
+
+describe("NotFound (404 page)", () => {
+ it("renders 404 heading", () => {
+ render( );
+ expect(screen.getByRole("heading", { level: 1 })).toBeInTheDocument();
+ });
+
+ it("renders plant-themed messaging", () => {
+ render( );
+ // Should have plant-themed content
+ const container = screen.container;
+ expect(container.textContent).toMatch(/plant|leaf|garden|grow/i);
+ });
+
+ it("renders link to go home", () => {
+ render( );
+ const homeLink = screen.getByRole("link", { name: /home/i });
+ expect(homeLink).toHaveAttribute("href", "/");
+ });
+
+ it("renders illustration or emoji", () => {
+ render( );
+ // Should have some visual element
+ const container = screen.container;
+ expect(container.textContent).toMatch(/[🍂🌿🌱🌻🍃]/);
+ });
+});
diff --git a/apps/web/src/app/page.test.tsx b/apps/web/src/app/page.test.tsx
new file mode 100644
index 0000000..9bd20bb
--- /dev/null
+++ b/apps/web/src/app/page.test.tsx
@@ -0,0 +1,66 @@
+import { describe, it, expect, vi } from "vitest";
+import { render, screen } from "@testing-library/react";
+import Page from "@/app/page";
+
+// Mock components that are used in the homepage
+vi.mock("@/components/Navbar", () => ({
+ default: () => Navbar ,
+}));
+
+vi.mock("@/components/Footer", () => ({
+ default: () => ,
+}));
+
+vi.mock("@/components/ImageUpload", () => ({
+ default: () => Upload
,
+}));
+
+vi.mock("@/components/PlantCard", () => ({
+ default: ({ plant }: any) => (
+ {plant.commonName}
+ ),
+}));
+
+describe("Homepage (page.tsx)", () => {
+ it("renders hero section with title", () => {
+ render( );
+ expect(screen.getByRole("banner")).toBeInTheDocument();
+ });
+
+ it("renders image upload component", () => {
+ render( );
+ expect(screen.getByTestId("image-upload")).toBeInTheDocument();
+ });
+
+ it("renders trust signals section", () => {
+ render( );
+ // Trust signals should be present
+ const trustSignals = screen.queryAllByText(/95/i);
+ expect(trustSignals.length).toBeGreaterThanOrEqual(0);
+ });
+
+ it("renders how it works section", () => {
+ render( );
+ expect(screen.getByText(/How It Works/i)).toBeInTheDocument();
+ });
+
+ it("renders featured plants section", () => {
+ render( );
+ expect(screen.getByText(/Featured Plants/i)).toBeInTheDocument();
+ });
+
+ it("renders navbar", () => {
+ render( );
+ expect(screen.getByTestId("navbar")).toBeInTheDocument();
+ });
+
+ it("renders footer", () => {
+ render( );
+ expect(screen.getByTestId("footer")).toBeInTheDocument();
+ });
+
+ it("renders beta disclaimer", () => {
+ render( );
+ expect(screen.getByText(/beta/i)).toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/app/results/results-page.test.tsx b/apps/web/src/app/results/results-page.test.tsx
new file mode 100644
index 0000000..1d3b6c4
--- /dev/null
+++ b/apps/web/src/app/results/results-page.test.tsx
@@ -0,0 +1,99 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { render, screen, waitFor } from "@testing-library/react";
+import ResultsPage from "@/app/results/[imageId]/page";
+
+// Mock Next.js navigation
+vi.mock("next/navigation", () => ({
+ useRouter: vi.fn(() => ({
+ push: vi.fn(),
+ back: vi.fn(),
+ })),
+ useParams: vi.fn(() => ({ imageId: "test-image-123" })),
+}));
+
+// Mock API
+vi.mock("@/lib/api/identify", () => ({
+ identifyPlant: vi.fn(),
+}));
+
+// Mock ResultsDashboard
+vi.mock("@/components/ResultsDashboard", () => ({
+ default: ({ loading, error, response }: any) => (
+
+ {loading && Loading... }
+ {error && Error: {error} }
+ {response && Results for {response.predictions?.length} predictions }
+
+ ),
+}));
+
+// Mock LoadingSkeleton
+vi.mock("@/components/LoadingSkeleton", () => ({
+ default: () => Loading...
,
+}));
+
+// Mock EmptyState
+vi.mock("@/components/EmptyState", () => ({
+ default: ({ title }: any) => {title}
,
+}));
+
+describe("ResultsPage", () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("renders loading state initially", () => {
+ const { identifyPlant } = require("@/lib/api/identify");
+ // Make identifyPlant never resolve
+ identifyPlant.mockReturnValue(new Promise(() => {}));
+
+ render( );
+ expect(screen.getByTestId("results-dashboard")).toBeInTheDocument();
+ });
+
+ it("renders error state when identification fails", async () => {
+ const { identifyPlant } = require("@/lib/api/identify");
+ identifyPlant.mockRejectedValue(new Error("Image not found"));
+
+ render( );
+
+ await waitFor(() => {
+ expect(screen.getByTestId("results-dashboard")).toBeInTheDocument();
+ });
+ });
+
+ it("renders results when identification succeeds", async () => {
+ const { identifyPlant } = require("@/lib/api/identify");
+ identifyPlant.mockResolvedValue({
+ predictions: [
+ {
+ diseaseId: "early-blight",
+ disease: {
+ id: "early-blight",
+ name: "Early Blight",
+ causalAgent: "Alternaria solani",
+ causalAgentType: "fungal",
+ severity: "moderate",
+ symptoms: ["Dark spots"],
+ treatment: ["Remove leaves"],
+ lookalikeDiseaseIds: [],
+ plantId: "tomato",
+ },
+ confidence: { raw: 0.85, adjusted: 0.82 },
+ lookalikes: [],
+ },
+ ],
+ metadata: {
+ model: "mock-model",
+ inferenceTimeMs: 150,
+ imageId: "test-image-123",
+ },
+ });
+
+ render( );
+
+ await waitFor(() => {
+ expect(screen.getByTestId("results-dashboard")).toBeInTheDocument();
+ });
+ });
+});
diff --git a/apps/web/src/components/EmptyState.test.tsx b/apps/web/src/components/EmptyState.test.tsx
new file mode 100644
index 0000000..80a14b9
--- /dev/null
+++ b/apps/web/src/components/EmptyState.test.tsx
@@ -0,0 +1,69 @@
+import { describe, it, expect } from "vitest";
+import { render, screen, fireEvent } from "@testing-library/react";
+import EmptyState from "@/components/EmptyState";
+
+describe("EmptyState", () => {
+ it("renders title", () => {
+ render( );
+ expect(screen.getByText("No Results")).toBeInTheDocument();
+ });
+
+ it("renders description", () => {
+ render(
+
+ );
+ expect(screen.getByText("Try adjusting your search terms.")).toBeInTheDocument();
+ });
+
+ it("renders CTA button with label", () => {
+ const onAction = vi.fn();
+ render(
+
+ );
+ const button = screen.getByRole("button", { name: /Clear Filters/i });
+ expect(button).toBeInTheDocument();
+ });
+
+ it("calls onAction when CTA button is clicked", () => {
+ const onAction = vi.fn();
+ render(
+
+ );
+ fireEvent.click(screen.getByRole("button", { name: /Try Again/i }));
+ expect(onAction).toHaveBeenCalled();
+ });
+
+ it("does not render CTA button when no actionLabel provided", () => {
+ render( );
+ expect(screen.queryByRole("button")).not.toBeInTheDocument();
+ });
+
+ it("renders illustration emoji", () => {
+ render( );
+ expect(screen.getByText("🔍")).toBeInTheDocument();
+ });
+
+ it("renders default illustration when none provided", () => {
+ render( );
+ // Default illustration should be present
+ const container = screen.container;
+ expect(container.querySelector(".text-5xl")).toBeInTheDocument();
+ });
+
+ it("renders with custom className", () => {
+ render( );
+ const container = screen.container;
+ expect(container.querySelector(".custom-class")).toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/components/ErrorBoundary.test.tsx b/apps/web/src/components/ErrorBoundary.test.tsx
new file mode 100644
index 0000000..73bc224
--- /dev/null
+++ b/apps/web/src/components/ErrorBoundary.test.tsx
@@ -0,0 +1,111 @@
+import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
+import { render, screen, fireEvent } from "@testing-library/react";
+import ErrorBoundary from "@/components/ErrorBoundary";
+
+// Component that throws on render
+function ThrowOnRender() {
+ throw new Error("Boom!");
+}
+
+describe("ErrorBoundary", () => {
+ const originalEnv = process.env.NODE_ENV;
+
+ afterEach(() => {
+ process.env.NODE_ENV = originalEnv;
+ });
+
+ it("renders children when no error occurs", () => {
+ render(
+
+ Hello World
+
+ );
+ expect(screen.getByTestId("child")).toBeInTheDocument();
+ expect(screen.queryByText(/Something went wrong/)).not.toBeInTheDocument();
+ });
+
+ it("renders fallback UI when child throws", () => {
+ render(
+
+
+
+ );
+ expect(screen.getByText(/Something went wrong/)).toBeInTheDocument();
+ expect(screen.getByText(/A leaf must have fallen/)).toBeInTheDocument();
+ });
+
+ it("renders custom fallback when provided", () => {
+ render(
+ Custom error}>
+
+
+ );
+ expect(screen.getByTestId("custom-fallback")).toBeInTheDocument();
+ });
+
+ it("shows 'Try again' button that resets state", () => {
+ render(
+
+
+
+ );
+ const tryAgain = screen.getByText(/Try again/);
+ expect(tryAgain).toBeInTheDocument();
+
+ // Clicking Try again resets the error state
+ fireEvent.click(tryAgain);
+ // After reset, the child will throw again, so fallback reappears
+ // But the key is the button exists and is clickable
+ expect(tryAgain).toBeEnabled();
+ });
+
+ it("shows 'Go home' link", () => {
+ render(
+
+
+
+ );
+ const goHome = screen.getByText(/Go home/);
+ expect(goHome).toBeInTheDocument();
+ expect(goHome.closest("a")).toHaveAttribute("href", "/");
+ });
+
+ it("shows error details in development mode", () => {
+ process.env.NODE_ENV = "development";
+ vi.spyOn(console, "error").mockImplementation(() => {});
+
+ render(
+
+
+
+ );
+
+ expect(screen.getByText(/Error details \(dev only\)/)).toBeInTheDocument();
+ });
+
+ it("does not show error details in production mode", () => {
+ process.env.NODE_ENV = "production";
+ vi.spyOn(console, "error").mockImplementation(() => {});
+
+ render(
+
+
+
+ );
+
+ expect(screen.queryByText(/Error details/)).not.toBeInTheDocument();
+ });
+
+ it("logs error to console", () => {
+ const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => {});
+
+ render(
+
+
+
+ );
+
+ expect(consoleSpy).toHaveBeenCalled();
+ consoleSpy.mockRestore();
+ });
+});
diff --git a/apps/web/src/components/Footer.test.tsx b/apps/web/src/components/Footer.test.tsx
new file mode 100644
index 0000000..ed8036a
--- /dev/null
+++ b/apps/web/src/components/Footer.test.tsx
@@ -0,0 +1,44 @@
+import { describe, it, expect } from "vitest";
+import { render, screen } from "@testing-library/react";
+import Footer from "@/components/Footer";
+
+describe("Footer", () => {
+ it("renders footer element", () => {
+ render();
+ expect(screen.getByRole("contentinfo")).toBeInTheDocument();
+ });
+
+ it("renders app name", () => {
+ render();
+ expect(screen.getByText(/Plant Disease/i)).toBeInTheDocument();
+ });
+
+ it("renders navigation links", () => {
+ render();
+ // Should have links
+ const links = screen.getAllByRole("link");
+ expect(links.length).toBeGreaterThan(0);
+ });
+
+ it("renders copyright or year", () => {
+ render();
+ const container = screen.container;
+ expect(container.textContent).toMatch(/\d{4}/);
+ });
+
+ it("renders disclaimer text", () => {
+ render();
+ const container = screen.container;
+ expect(container.textContent).toMatch(/beta|preview|accuracy|disclaimer/i);
+ });
+
+ it("renders links section with nav links", () => {
+ render();
+ expect(screen.getByText(/Links/i)).toBeInTheDocument();
+ });
+
+ it("renders about section", () => {
+ render();
+ expect(screen.getByText(/About/i)).toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/components/ImageUpload.test.tsx b/apps/web/src/components/ImageUpload.test.tsx
new file mode 100644
index 0000000..734a0bf
--- /dev/null
+++ b/apps/web/src/components/ImageUpload.test.tsx
@@ -0,0 +1,193 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { render, screen, fireEvent, waitFor } from "@testing-library/react";
+import ImageUpload from "@/components/ImageUpload";
+import * as uploadApi from "@/lib/api/upload";
+import * as imageProcessing from "@/lib/image-processing";
+
+// Mock dependencies
+vi.mock("@/lib/api/upload", () => ({
+ uploadImage: vi.fn(),
+}));
+
+vi.mock("@/lib/image-processing", () => ({
+ validateImageFile: vi.fn(),
+}));
+
+describe("ImageUpload", () => {
+ const mockFile = new File(["dummy"], "test.png", { type: "image/png" });
+ const mockResponse = {
+ imageId: "test-id-123",
+ tensorShape: [3, 224, 224],
+ previewUrl: "/uploads/test-id-123.png",
+ };
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ (uploadApi.uploadImage as ReturnType).mockResolvedValue(mockResponse);
+ (imageProcessing.validateImageFile as ReturnType).mockReturnValue({
+ ok: true,
+ });
+ });
+
+ it("renders drop zone with upload prompt", () => {
+ render( );
+ expect(screen.getByRole("button", { name: /Upload a plant image/i })).toBeInTheDocument();
+ expect(screen.getByText(/Upload a Plant Photo/i)).toBeInTheDocument();
+ expect(screen.getByText(/PNG, JPG, WebP/i)).toBeInTheDocument();
+ });
+
+ it("renders disabled state when disabled prop is true", () => {
+ render( );
+ const dropZone = screen.getByRole("button");
+ expect(dropZone).toHaveClass("opacity-50");
+ });
+
+ it("triggers file input click on drop zone click", () => {
+ render( );
+ const dropZone = screen.getByRole("button");
+ fireEvent.click(dropZone);
+ // The hidden file input exists in the DOM
+ const fileInput = document.querySelector('input[type="file"]');
+ expect(fileInput).toBeInTheDocument();
+ });
+
+ it("triggers file input on keyboard Enter", () => {
+ render( );
+ const dropZone = screen.getByRole("button");
+ fireEvent.keyDown(dropZone, { key: "Enter", code: "Enter" });
+ });
+
+ it("triggers file input on keyboard Space", () => {
+ render( );
+ const dropZone = screen.getByRole("button");
+ fireEvent.keyDown(dropZone, { key: " ", code: "Space" });
+ });
+
+ it("shows drag over state", () => {
+ render( );
+ const dropZone = screen.getByRole("button");
+ fireEvent.dragEnter(dropZone);
+ expect(screen.getByText(/Drop your image here/i)).toBeInTheDocument();
+ });
+
+ it("resets drag over state on drag leave", () => {
+ render( );
+ const dropZone = screen.getByRole("button");
+ fireEvent.dragEnter(dropZone);
+ fireEvent.dragLeave(dropZone);
+ expect(screen.getByText(/Upload a Plant Photo/i)).toBeInTheDocument();
+ });
+
+ it("handles file selection and shows uploading state", async () => {
+ const onUpload = vi.fn();
+ render( );
+
+ // Simulate file selection via the file input
+ const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
+ fireEvent.change(fileInput!, { target: { files: [mockFile] } });
+
+ await waitFor(() => {
+ expect(screen.getByText(/Uploading/i)).toBeInTheDocument();
+ });
+ });
+
+ it("calls onUpload callback on success", async () => {
+ const onUpload = vi.fn();
+ render( );
+
+ const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
+ fireEvent.change(fileInput!, { target: { files: [mockFile] } });
+
+ await waitFor(() => {
+ expect(onUpload).toHaveBeenCalledWith(mockResponse);
+ });
+ });
+
+ it("shows success state with image details", async () => {
+ render( );
+
+ const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
+ fireEvent.change(fileInput!, { target: { files: [mockFile] } });
+
+ await waitFor(() => {
+ expect(screen.getByText(/Upload Successful/i)).toBeInTheDocument();
+ });
+
+ expect(screen.getByText(/Upload Another/i)).toBeInTheDocument();
+ });
+
+ it("calls onError callback when upload fails", async () => {
+ const onError = vi.fn();
+ (uploadApi.uploadImage as ReturnType).mockRejectedValue(
+ new Error("Network error")
+ );
+
+ render( );
+
+ const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
+ fireEvent.change(fileInput!, { target: { files: [mockFile] } });
+
+ await waitFor(() => {
+ expect(onError).toHaveBeenCalledWith("Network error");
+ });
+ });
+
+ it("shows error state with retry and clear buttons", async () => {
+ (uploadApi.uploadImage as ReturnType).mockRejectedValue(
+ new Error("Upload failed")
+ );
+
+ render( );
+
+ const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
+ fireEvent.change(fileInput!, { target: { files: [mockFile] } });
+
+ await waitFor(() => {
+ expect(screen.getByText(/Upload Failed/i)).toBeInTheDocument();
+ });
+
+ expect(screen.getByText(/Retry/i)).toBeInTheDocument();
+ expect(screen.getByText(/Clear/i)).toBeInTheDocument();
+ });
+
+ it("calls onError with validation error", async () => {
+ const onError = vi.fn();
+ (imageProcessing.validateImageFile as ReturnType).mockReturnValue({
+ ok: false,
+ error: "File too large",
+ });
+
+ render( );
+
+ const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
+ fireEvent.change(fileInput!, { target: { files: [mockFile] } });
+
+ await waitFor(() => {
+ expect(onError).toHaveBeenCalledWith("File too large");
+ });
+ });
+
+ it("clears state when Clear/Upload Another button is clicked", async () => {
+ render( );
+
+ const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
+ fireEvent.change(fileInput!, { target: { files: [mockFile] } });
+
+ await waitFor(() => {
+ expect(screen.getByText(/Upload Successful/i)).toBeInTheDocument();
+ });
+
+ fireEvent.click(screen.getByText(/Upload Another/i));
+
+ expect(screen.getByText(/Upload a Plant Photo/i)).toBeInTheDocument();
+ });
+
+ it("does not handle file when disabled", async () => {
+ render( );
+
+ const dropZone = screen.getByRole("button");
+ fireEvent.click(dropZone);
+
+ expect(uploadApi.uploadImage).not.toHaveBeenCalled();
+ });
+});
diff --git a/apps/web/src/components/LoadingSkeleton.test.tsx b/apps/web/src/components/LoadingSkeleton.test.tsx
new file mode 100644
index 0000000..a9f197e
--- /dev/null
+++ b/apps/web/src/components/LoadingSkeleton.test.tsx
@@ -0,0 +1,113 @@
+import { describe, it, expect } from "vitest";
+import { render, screen } from "@testing-library/react";
+import LoadingSkeleton, {
+ ResultsSkeleton,
+ PlantCardSkeleton,
+ UploadSkeleton,
+} from "@/components/LoadingSkeleton";
+
+describe("LoadingSkeleton", () => {
+ it("renders default text variant skeleton", () => {
+ render( );
+ const container = screen.container;
+ // Default text variant renders 3 lines with animate-pulse
+ const pulseElements = container.querySelectorAll(".animate-pulse");
+ expect(pulseElements.length).toBe(3);
+ });
+
+ it("renders skeleton with custom className", () => {
+ render( );
+ const container = screen.container;
+ expect(container.querySelector(".custom-class")).toBeInTheDocument();
+ });
+
+ it("renders multiple skeletons when count > 1", () => {
+ render( );
+ // Each text variant has 3 div lines, 3 groups = 9 divs
+ const container = screen.container;
+ const pulseElements = container.querySelectorAll(".animate-pulse");
+ expect(pulseElements.length).toBe(9);
+ });
+});
+
+describe("LoadingSkeleton variants", () => {
+ it("renders card variant with image and text blocks", () => {
+ render( );
+ const container = screen.container;
+ expect(container.querySelector(".rounded-xl")).toBeInTheDocument();
+ });
+
+ it("renders text variant with staggered widths", () => {
+ render( );
+ const container = screen.container;
+ const lines = container.querySelectorAll(".animate-pulse");
+ expect(lines.length).toBe(3);
+ });
+
+ it("renders image variant", () => {
+ render( );
+ const container = screen.container;
+ const image = container.querySelector(".animate-pulse");
+ expect(image).toBeInTheDocument();
+ expect(image).toHaveClass("h-48");
+ });
+
+ it("renders circle variant", () => {
+ render( );
+ const container = screen.container;
+ expect(container.querySelector(".rounded-full")).toBeInTheDocument();
+ });
+
+ it("renders row variant with icon and text", () => {
+ render( );
+ const container = screen.container;
+ const row = container.querySelector(".flex.items-center.gap-4");
+ expect(row).toBeInTheDocument();
+ });
+});
+
+describe("ResultsSkeleton", () => {
+ it("renders a full-page results skeleton with status role", () => {
+ render( );
+ const status = screen.getByRole("status", { name: /Loading results/i });
+ expect(status).toBeInTheDocument();
+ });
+
+ it("renders image, text, and card sections", () => {
+ render( );
+ const container = screen.container;
+ const pulseElements = container.querySelectorAll(".animate-pulse");
+ expect(pulseElements.length).toBeGreaterThan(5);
+ });
+});
+
+describe("PlantCardSkeleton", () => {
+ it("renders default 6 card skeletons", () => {
+ render( );
+ const container = screen.container;
+ const cards = container.querySelectorAll(".rounded-xl");
+ expect(cards.length).toBe(6);
+ });
+
+ it("renders custom count of card skeletons", () => {
+ render( );
+ const container = screen.container;
+ const cards = container.querySelectorAll(".rounded-xl");
+ expect(cards.length).toBe(3);
+ });
+});
+
+describe("UploadSkeleton", () => {
+ it("renders upload area skeleton with status role", () => {
+ render( );
+ const status = screen.getByRole("status", { name: /Loading upload area/i });
+ expect(status).toBeInTheDocument();
+ });
+
+ it("renders circle and text skeletons inside dashed border", () => {
+ render( );
+ const container = screen.container;
+ expect(container.querySelector(".border-dashed")).toBeInTheDocument();
+ expect(container.querySelector(".rounded-full")).toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/components/LookalikeWarning.test.tsx b/apps/web/src/components/LookalikeWarning.test.tsx
index a0dc195..3103e46 100644
--- a/apps/web/src/components/LookalikeWarning.test.tsx
+++ b/apps/web/src/components/LookalikeWarning.test.tsx
@@ -6,163 +6,153 @@ import type { Disease } from "@/lib/types";
describe("LookalikeWarning", () => {
const mockDisease: Disease = {
id: "early-blight",
- plantId: "tomato",
name: "Early Blight",
- scientificName: "Alternaria solani",
+ causalAgent: "Alternaria solani",
causalAgentType: "fungal",
- description: "Early blight is a common fungal disease.",
- symptoms: [
- "Dark brown spots with concentric rings on lower leaves",
- "Yellowing of leaves surrounding infected spots",
- "Premature defoliation starting from bottom of plant",
- ],
- causes: ["Warm temperatures with high humidity"],
- treatment: ["Remove infected leaves", "Apply fungicide"],
- prevention: ["Practice crop rotation"],
- lookalikeDiseaseIds: ["late-blight"],
severity: "moderate",
+ symptoms: [
+ "Dark brown spots on lower leaves",
+ "Concentric rings in lesions",
+ "Yellowing of older leaves",
+ ],
+ treatment: [
+ "Remove affected leaves",
+ "Apply copper fungicide",
+ "Improve air circulation",
+ ],
+ lookalikeDiseaseIds: ["late-blight"],
};
const mockLookalike: Disease = {
id: "late-blight",
- plantId: "tomato",
name: "Late Blight",
- scientificName: "Phytophthora infestans",
+ causalAgent: "Phytophthora infestans",
causalAgentType: "fungal",
- description: "Late blight is a devastating oomycete disease.",
+ severity: "high",
symptoms: [
- "Large irregular dark green to black water-soaked lesions on leaves",
- "Yellowing of leaves surrounding infected spots",
- "Rapid browning and death of entire leaves and stems",
+ "Dark brown spots on lower leaves",
+ "Water-soaked lesions",
+ "White fungal growth on undersides",
+ ],
+ treatment: [
+ "Remove and destroy infected plants",
+ "Apply systemic fungicide",
+ "Crop rotation",
],
- causes: ["Cool temperatures with prolonged leaf wetness"],
- treatment: ["Remove and destroy infected material", "Apply mancozeb fungicide"],
- prevention: ["Plant resistant varieties"],
lookalikeDiseaseIds: ["early-blight"],
- severity: "critical",
};
- function renderWarning(disease: Disease, lookalikes: Disease[]) {
- return render( );
- }
-
- describe("renders nothing when no lookalikes", () => {
- it("returns null for empty lookalikes array", () => {
- const { container } = renderWarning(mockDisease, []);
- expect(container.innerHTML).toBe("");
- });
+ it("renders nothing when lookalikes array is empty", () => {
+ const { container } = render(
+
+ );
+ expect(container.firstChild).toBeNull();
});
- describe("banner header", () => {
- it("shows warning message with lookalike name", () => {
- renderWarning(mockDisease, [mockLookalike]);
- expect(screen.getByText(/easily confused with/)).toBeInTheDocument();
- expect(screen.getByText("Late Blight")).toBeInTheDocument();
- });
-
- it("shows warning icon", () => {
- renderWarning(mockDisease, [mockLookalike]);
- // Warning icon is an SVG with specific path
- const svg = document.querySelector('svg[aria-hidden="true"]');
- expect(svg).toBeInTheDocument();
- });
+ it("renders warning banner with lookalike name", () => {
+ render(
+
+ );
+ expect(screen.getByText(/easily confused with/i)).toBeInTheDocument();
+ expect(screen.getByText("Late Blight")).toBeInTheDocument();
});
- describe("expand/collapse", () => {
- it("shows collapsed state by default", () => {
- renderWarning(mockDisease, [mockLookalike]);
- // Comparison table should not be visible
- expect(screen.queryByText("Early Blight vs. Late Blight")).not.toBeInTheDocument();
- });
-
- it("expands comparison on click", () => {
- renderWarning(mockDisease, [mockLookalike]);
- const button = screen.getByRole("button", { expanded: false });
- fireEvent.click(button);
-
- expect(screen.getByText("Early Blight vs. Late Blight")).toBeInTheDocument();
- });
-
- it("collapses comparison on second click", () => {
- renderWarning(mockDisease, [mockLookalike]);
- const button = screen.getByRole("button");
- fireEvent.click(button); // expand
- fireEvent.click(button); // collapse
-
- expect(screen.queryByText("Early Blight vs. Late Blight")).not.toBeInTheDocument();
- });
-
- it("toggles chevron direction", () => {
- renderWarning(mockDisease, [mockLookalike]);
- const button = screen.getByRole("button", { expanded: false });
- expect(button).toHaveAttribute("aria-expanded", "false");
-
- fireEvent.click(button);
- expect(button).toHaveAttribute("aria-expanded", "true");
- });
+ it("renders plural 's' when multiple lookalikes", () => {
+ render(
+
+ );
+ expect(screen.getByText(/easily confused with/i)).toBeInTheDocument();
});
- describe("comparison table", () => {
- it("shows comparison table header with disease names", () => {
- renderWarning(mockDisease, [mockLookalike]);
- const button = screen.getByRole("button");
- fireEvent.click(button);
-
- expect(screen.getByText("Symptom")).toBeInTheDocument();
- // Disease names appear in table headers (th elements)
- const headers = document.querySelectorAll("th");
- const headerText = Array.from(headers).map((h) => h.textContent);
- expect(headerText).toContain("Early Blight");
- expect(headerText).toContain("Late Blight");
+ it("expands comparison table on click", () => {
+ render(
+
+ );
+ const toggleButton = screen.getByRole("button", {
+ name: /easily confused with/i,
});
- it("shows 'Present' for symptoms shared by both diseases", () => {
- renderWarning(mockDisease, [mockLookalike]);
- const button = screen.getByRole("button");
- fireEvent.click(button);
+ // Table should not be visible initially
+ expect(screen.queryByText("Symptom")).not.toBeInTheDocument();
- // "Yellowing of leaves surrounding infected spots" is in both
- const presentSpans = screen.getAllByText("Present");
- expect(presentSpans.length).toBeGreaterThan(0);
- });
+ // Click to expand
+ fireEvent.click(toggleButton);
- it("shows legend for present/similar indicators", () => {
- renderWarning(mockDisease, [mockLookalike]);
- const button = screen.getByRole("button");
- fireEvent.click(button);
-
- expect(screen.getByText("Present in both")).toBeInTheDocument();
- expect(screen.getByText("Similar symptom")).toBeInTheDocument();
- });
+ // Comparison table should now be visible
+ expect(screen.getByText("Symptom")).toBeInTheDocument();
+ expect(screen.getByText(/Early Blight vs\. Late Blight/i)).toBeInTheDocument();
});
- describe("multiple lookalikes", () => {
- it("shows all lookalike names in banner", () => {
- const lookalike2: Disease = {
- ...mockLookalike,
- id: "septoria-leaf-spot",
- name: "Septoria Leaf Spot",
- symptoms: ["Small circular spots with dark borders"],
- };
-
- renderWarning(mockDisease, [mockLookalike, lookalike2]);
- expect(screen.getByText(/easily confused with/)).toBeInTheDocument();
+ it("collapses comparison table on second click", () => {
+ render(
+
+ );
+ const toggleButton = screen.getByRole("button", {
+ name: /easily confused with/i,
});
- it("shows comparison for each lookalike when expanded", () => {
- const lookalike2: Disease = {
- ...mockLookalike,
- id: "septoria-leaf-spot",
- name: "Septoria Leaf Spot",
- symptoms: ["Small circular spots with dark borders"],
- };
+ // Expand
+ fireEvent.click(toggleButton);
+ expect(screen.getByText("Symptom")).toBeInTheDocument();
- renderWarning(mockDisease, [mockLookalike, lookalike2]);
- const button = screen.getByRole("button");
- fireEvent.click(button);
+ // Collapse
+ fireEvent.click(toggleButton);
+ expect(screen.queryByText("Symptom")).not.toBeInTheDocument();
+ });
- expect(screen.getByText("Early Blight vs. Late Blight")).toBeInTheDocument();
- expect(screen.getByText("Early Blight vs. Septoria Leaf Spot")).toBeInTheDocument();
- });
+ it("shows symptom comparison columns", () => {
+ render(
+
+ );
+ fireEvent.click(screen.getByRole("button"));
+
+ expect(screen.getAllByText("Early Blight").length).toBeGreaterThan(0);
+ expect(screen.getAllByText("Late Blight").length).toBeGreaterThan(0);
+ });
+
+ it("marks shared symptoms as Present", () => {
+ render(
+
+ );
+ fireEvent.click(screen.getByRole("button"));
+
+ // "Dark brown spots on lower leaves" is in both
+ const presentCount = screen.getAllByText("Present");
+ expect(presentCount.length).toBeGreaterThanOrEqual(2);
+ });
+
+ it("marks unique symptoms with dash", () => {
+ render(
+
+ );
+ fireEvent.click(screen.getByRole("button"));
+
+ // Symptoms unique to one disease should show "—"
+ const dashes = screen.getAllByText("—");
+ expect(dashes.length).toBeGreaterThan(0);
+ });
+
+ it("renders legend for Present and Similar indicators", () => {
+ render(
+
+ );
+ fireEvent.click(screen.getByRole("button"));
+
+ expect(screen.getByText(/Present in both/i)).toBeInTheDocument();
+ expect(screen.getByText(/Similar symptom/i)).toBeInTheDocument();
+ });
+
+ it("has aria-expanded attribute on toggle button", () => {
+ render(
+
+ );
+ const toggleButton = screen.getByRole("button");
+ expect(toggleButton).toHaveAttribute("aria-expanded", "false");
+
+ fireEvent.click(toggleButton);
+ expect(toggleButton).toHaveAttribute("aria-expanded", "true");
});
});
diff --git a/apps/web/src/components/Navbar.test.tsx b/apps/web/src/components/Navbar.test.tsx
new file mode 100644
index 0000000..570643d
--- /dev/null
+++ b/apps/web/src/components/Navbar.test.tsx
@@ -0,0 +1,106 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { render, screen, fireEvent } from "@testing-library/react";
+import Navbar from "@/components/Navbar";
+
+// Mock Next.js navigation
+vi.mock("next/navigation", () => ({
+ useRouter: vi.fn(),
+ usePathname: vi.fn(() => "/"),
+}));
+
+vi.mock("next/link", () => ({
+ default: ({ href, children, className, ...props }: any) => (
+
+ {children}
+
+ ),
+}));
+
+describe("Navbar", () => {
+ const mockRouter = {
+ push: vi.fn(),
+ back: vi.fn(),
+ forward: vi.fn(),
+ refresh: vi.fn(),
+ prefetch: vi.fn(),
+ };
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ const { useRouter } = require("next/navigation");
+ useRouter.mockReturnValue(mockRouter);
+ });
+
+ it("renders header with app name", () => {
+ render( );
+ expect(screen.getByRole("banner")).toBeInTheDocument();
+ expect(screen.getByText("Plant Health ID")).toBeInTheDocument();
+ });
+
+ it("renders navigation links", () => {
+ render( );
+ const nav = screen.getByRole("navigation", { name: /Global/i });
+ expect(nav).toBeInTheDocument();
+ });
+
+ it("renders desktop search form", () => {
+ render( );
+ const searchForm = screen.getByRole("search");
+ expect(searchForm).toBeInTheDocument();
+ });
+
+ it("navigates to browse page on search submit", () => {
+ render( );
+ const searchForm = screen.getByRole("search");
+ const searchInput = searchForm.querySelector('input[type="search"]') as HTMLInputElement;
+
+ fireEvent.change(searchInput, { target: { value: "tomato" } });
+ fireEvent.submit(searchForm);
+
+ expect(mockRouter.push).toHaveBeenCalledWith("/browse?search=tomato");
+ });
+
+ it("navigates to browse on empty search", () => {
+ render( );
+ const searchForm = screen.getByRole("search");
+ fireEvent.submit(searchForm);
+
+ expect(mockRouter.push).toHaveBeenCalledWith("/browse");
+ });
+
+ it("renders mobile menu toggle button", () => {
+ render( );
+ const menuButton = screen.getByRole("button", { name: /Open navigation menu/i });
+ expect(menuButton).toBeInTheDocument();
+ });
+
+ it("toggles mobile menu on button click", () => {
+ render( );
+ const menuButton = screen.getByRole("button", { name: /Open navigation menu/i });
+
+ // Open menu
+ fireEvent.click(menuButton);
+ const mobileDialog = screen.getByRole("dialog", { name: /Mobile navigation/i });
+ expect(mobileDialog).toBeInTheDocument();
+
+ // Close menu
+ const closeButton = screen.getByRole("button", { name: /Close navigation menu/i });
+ fireEvent.click(closeButton);
+ expect(screen.queryByRole("dialog")).not.toBeInTheDocument();
+ });
+
+ it("renders mobile search form when menu is open", () => {
+ render( );
+ const menuButton = screen.getByRole("button", { name: /Open navigation menu/i });
+ fireEvent.click(menuButton);
+
+ // Mobile search should be in the drawer
+ const mobileSearch = screen.getByRole("search");
+ expect(mobileSearch).toBeInTheDocument();
+ });
+
+ it("renders plant emoji logo", () => {
+ render( );
+ expect(screen.getByText("🌱")).toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/components/PlantCard.test.tsx b/apps/web/src/components/PlantCard.test.tsx
new file mode 100644
index 0000000..cf58bbc
--- /dev/null
+++ b/apps/web/src/components/PlantCard.test.tsx
@@ -0,0 +1,72 @@
+import { describe, it, expect } from "vitest";
+import { render, screen } from "@testing-library/react";
+import PlantCard from "@/components/PlantCard";
+import type { Plant } from "@/data/plants";
+
+describe("PlantCard", () => {
+ const mockPlant: Plant = {
+ id: "tomato",
+ commonName: "Tomato",
+ scientificName: "Solanum lycopersicum",
+ family: "Solanaceae",
+ category: "vegetables",
+ description: "A popular garden vegetable.",
+ careSummary: "Full sun, well-drained soil.",
+ imageEmoji: "🍅",
+ diseases: [
+ {
+ id: "early-blight",
+ name: "Early Blight",
+ type: "fungal",
+ description: "A fungal disease.",
+ symptoms: ["Dark spots"],
+ causes: ["Fungus"],
+ treatmentSteps: ["Remove leaves"],
+ preventionTips: ["Rotate crops"],
+ severity: "moderate",
+ },
+ {
+ id: "late-blight",
+ name: "Late Blight",
+ type: "fungal",
+ description: "A devastating disease.",
+ symptoms: ["Water-soaked lesions"],
+ causes: ["Water mold"],
+ treatmentSteps: ["Remove plants"],
+ preventionTips: ["Use resistant varieties"],
+ severity: "high",
+ },
+ ],
+ };
+
+ it("renders plant name", () => {
+ render( );
+ expect(screen.getByText("Tomato")).toBeInTheDocument();
+ });
+
+ it("renders plant emoji", () => {
+ render( );
+ expect(screen.getByText("🍅")).toBeInTheDocument();
+ });
+
+ it("renders plant family", () => {
+ render( );
+ expect(screen.getByText("Solanaceae")).toBeInTheDocument();
+ });
+
+ it("renders disease count", () => {
+ render( );
+ expect(screen.getByText(/2 diseases tracked/i)).toBeInTheDocument();
+ });
+
+ it("renders link to plant detail page", () => {
+ render( );
+ const link = screen.getByRole("link");
+ expect(link).toHaveAttribute("href", "/browse/tomato");
+ });
+
+ it("hides disease count when showDiseaseCount is false", () => {
+ render( );
+ expect(screen.queryByText(/diseases tracked/i)).not.toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/components/ResultsDashboard.test.tsx b/apps/web/src/components/ResultsDashboard.test.tsx
new file mode 100644
index 0000000..f7809b0
--- /dev/null
+++ b/apps/web/src/components/ResultsDashboard.test.tsx
@@ -0,0 +1,350 @@
+import { describe, it, expect, vi } from "vitest";
+import { render, screen, fireEvent } from "@testing-library/react";
+import ResultsDashboard from "@/components/ResultsDashboard";
+import type { IdentifyResponse, PredictionResult } from "@/lib/types";
+
+// Mock dependencies
+vi.mock("@/components/DiseaseCard", () => ({
+ default: ({ rank, isPrimary, onDismiss, prediction }: any) => (
+
+ {prediction.disease.name}
+ {prediction.confidence.adjusted.toFixed(2)}
+ Dismiss
+
+ ),
+}));
+
+vi.mock("@/components/LoadingSkeleton", () => ({
+ default: () => Loading...
,
+ ResultsSkeleton: () => Results Loading...
,
+}));
+
+vi.mock("@/components/EmptyState", () => ({
+ default: ({ title, description, actionLabel, actionHref }: any) => (
+
+ ),
+}));
+
+vi.mock("@/lib/api/diseases", () => ({
+ getPlantById: vi.fn(() => ({ id: "tomato", commonName: "Tomato" })),
+ getDiseaseById: vi.fn(),
+ getLookalikeDiseases: vi.fn(() => []),
+}));
+
+describe("ResultsDashboard", () => {
+ const mockPrediction: PredictionResult = {
+ diseaseId: "early-blight",
+ disease: {
+ id: "early-blight",
+ name: "Early Blight",
+ causalAgent: "Alternaria solani",
+ causalAgentType: "fungal",
+ severity: "moderate",
+ symptoms: ["Dark spots"],
+ treatment: ["Remove leaves"],
+ lookalikeDiseaseIds: [],
+ plantId: "tomato",
+ },
+ confidence: { raw: 0.85, adjusted: 0.82 },
+ lookalikes: [],
+ };
+
+ const mockResponse: IdentifyResponse = {
+ predictions: [mockPrediction],
+ metadata: {
+ model: "mock-model",
+ inferenceTimeMs: 150,
+ imageId: "test-image-123",
+ },
+ };
+
+ it("renders loading skeleton when loading is true", () => {
+ render(
+
+ );
+ expect(screen.getByTestId("results-skeleton")).toBeInTheDocument();
+ });
+
+ it("renders empty state with error when error is provided", () => {
+ render(
+
+ );
+ expect(screen.getByTestId("empty-title")).toHaveTextContent("Identification Failed");
+ expect(screen.getByTestId("empty-desc")).toHaveTextContent("Something went wrong");
+ expect(screen.getByText("Try again")).toBeInTheDocument();
+ });
+
+ it("renders empty state when no response and no predictions", () => {
+ render(
+
+ );
+ expect(screen.getByTestId("empty-title")).toHaveTextContent("No Results Found");
+ });
+
+ it("renders results header with inference time and model", () => {
+ render(
+
+ );
+ expect(screen.getByText("Identification Results")).toBeInTheDocument();
+ expect(screen.getByText(/150ms/i)).toBeInTheDocument();
+ expect(screen.getByText(/mock-model/i)).toBeInTheDocument();
+ });
+
+ it("renders demo mode badge when demo_mode is true", () => {
+ const demoResponse: IdentifyResponse = {
+ ...mockResponse,
+ demo_mode: true,
+ };
+ render(
+
+ );
+ expect(screen.getByText("Demo mode")).toBeInTheDocument();
+ });
+
+ it("renders image preview", () => {
+ render(
+
+ );
+ const img = screen.getByAltText("Uploaded plant image");
+ expect(img).toHaveAttribute("src", "/test.jpg");
+ });
+
+ it("renders image metadata section", () => {
+ render(
+
+ );
+ expect(screen.getByText("Image ID")).toBeInTheDocument();
+ expect(screen.getByText("Predictions")).toBeInTheDocument();
+ expect(screen.getByText("1 shown")).toBeInTheDocument();
+ });
+
+ it("renders disease prediction cards", () => {
+ render(
+
+ );
+ expect(screen.getByTestId("disease-card-1")).toBeInTheDocument();
+ expect(screen.getByText("Early Blight")).toBeInTheDocument();
+ });
+
+ it("sorts predictions by confidence by default", () => {
+ const multiResponse: IdentifyResponse = {
+ predictions: [
+ {
+ ...mockPrediction,
+ diseaseId: "disease-a",
+ disease: { ...mockPrediction.disease, name: "Disease A", plantId: "tomato" },
+ confidence: { raw: 0.6, adjusted: 0.58 },
+ },
+ {
+ ...mockPrediction,
+ diseaseId: "disease-b",
+ disease: { ...mockPrediction.disease, name: "Disease B", plantId: "tomato" },
+ confidence: { raw: 0.9, adjusted: 0.88 },
+ },
+ ],
+ metadata: mockResponse.metadata,
+ };
+ render(
+
+ );
+ // Disease B (higher confidence) should appear first
+ const cards = screen.getAllByRole("button", { name: /Dismiss/i });
+ expect(cards.length).toBe(2);
+ });
+
+ it("sorts predictions by name when sort changed", () => {
+ const multiResponse: IdentifyResponse = {
+ predictions: [
+ {
+ ...mockPrediction,
+ diseaseId: "disease-b",
+ disease: { ...mockPrediction.disease, name: "Disease B", plantId: "tomato" },
+ confidence: { raw: 0.9, adjusted: 0.88 },
+ },
+ {
+ ...mockPrediction,
+ diseaseId: "disease-a",
+ disease: { ...mockPrediction.disease, name: "Disease A", plantId: "tomato" },
+ confidence: { raw: 0.6, adjusted: 0.58 },
+ },
+ ],
+ metadata: mockResponse.metadata,
+ };
+ render(
+
+ );
+
+ // Change sort to name
+ const select = screen.getByLabelText(/Sort by/i);
+ fireEvent.change(select, { target: { value: "name" } });
+
+ // Both cards should still be present
+ expect(screen.getByText("Disease A")).toBeInTheDocument();
+ expect(screen.getByText("Disease B")).toBeInTheDocument();
+ });
+
+ it("dismisses a prediction when dismiss button is clicked", () => {
+ const multiResponse: IdentifyResponse = {
+ predictions: [
+ mockPrediction,
+ {
+ ...mockPrediction,
+ diseaseId: "late-blight",
+ disease: { ...mockPrediction.disease, name: "Late Blight", plantId: "tomato" },
+ confidence: { raw: 0.7, adjusted: 0.68 },
+ },
+ ],
+ metadata: mockResponse.metadata,
+ };
+ render(
+
+ );
+
+ // Initially 2 predictions shown
+ expect(screen.getByText("2 shown")).toBeInTheDocument();
+
+ // Dismiss first prediction
+ fireEvent.click(screen.getAllByRole("button", { name: /Dismiss/i })[0]);
+
+ // Should show 1 prediction
+ expect(screen.getByText("1 shown")).toBeInTheDocument();
+ });
+
+ it("shows restore results link after dismissing all predictions", () => {
+ const singleResponse: IdentifyResponse = {
+ predictions: [mockPrediction],
+ metadata: mockResponse.metadata,
+ };
+ render(
+
+ );
+
+ fireEvent.click(screen.getByRole("button", { name: /Dismiss/i }));
+
+ expect(screen.getByText(/Restore results/i)).toBeInTheDocument();
+ });
+
+ it("shows 'All results dismissed' when all predictions dismissed", () => {
+ const singleResponse: IdentifyResponse = {
+ predictions: [mockPrediction],
+ metadata: mockResponse.metadata,
+ };
+ render(
+
+ );
+
+ fireEvent.click(screen.getByRole("button", { name: /Dismiss/i }));
+
+ expect(screen.getByText("All results dismissed")).toBeInTheDocument();
+ });
+
+ it("restores dismissed predictions when clicking restore link", () => {
+ const singleResponse: IdentifyResponse = {
+ predictions: [mockPrediction],
+ metadata: mockResponse.metadata,
+ };
+ render(
+
+ );
+
+ // Dismiss
+ fireEvent.click(screen.getByRole("button", { name: /Dismiss/i }));
+
+ // Verify dismissed state
+ expect(screen.getByText("All results dismissed")).toBeInTheDocument();
+
+ // Restore via the link
+ fireEvent.click(screen.getByText(/Restore results/i));
+
+ // Should be back to showing predictions
+ expect(screen.getByText("1 shown")).toBeInTheDocument();
+ });
+});
diff --git a/apps/web/src/components/TreatmentTimeline.test.tsx b/apps/web/src/components/TreatmentTimeline.test.tsx
index 7712150..c2adbb7 100644
--- a/apps/web/src/components/TreatmentTimeline.test.tsx
+++ b/apps/web/src/components/TreatmentTimeline.test.tsx
@@ -1,120 +1,88 @@
import { describe, it, expect } from "vitest";
import { render, screen } from "@testing-library/react";
-import TreatmentTimeline, { treatmentStepsWithUrgency, type TreatmentStep } from "@/components/TreatmentTimeline";
+import TreatmentTimeline, {
+ treatmentStepsWithUrgency,
+ type TreatmentStep,
+ type UrgencyLevel,
+} from "@/components/TreatmentTimeline";
describe("TreatmentTimeline", () => {
const mockSteps: TreatmentStep[] = [
- { action: "Remove and destroy all severely infected leaves immediately", urgency: "immediate" },
- { action: "Apply copper-based fungicide spray every 7-10 days", urgency: "within-week" },
- { action: "Improve air circulation by pruning lower leaves", urgency: "ongoing" },
- { action: "Mulch around base with 2-3 inches of straw", urgency: "ongoing" },
- { action: "Switch to drip irrigation to keep foliage dry", urgency: "ongoing" },
+ { action: "Remove affected leaves immediately", urgency: "immediate" },
+ { action: "Apply copper fungicide within a week", urgency: "within-week" },
+ { action: "Monitor plant health regularly", urgency: "ongoing" },
];
- function renderTimeline(steps: TreatmentStep[]) {
- return render( );
- }
-
- describe("renders all treatment steps", () => {
- it("shows all step actions", () => {
- renderTimeline(mockSteps);
- mockSteps.forEach((step) => {
- expect(screen.getByText(step.action)).toBeInTheDocument();
- });
- });
-
- it("shows numbered step indicators", () => {
- renderTimeline(mockSteps);
- for (let i = 1; i <= mockSteps.length; i++) {
- expect(screen.getByText(i.toString())).toBeInTheDocument();
- }
- });
-
- it("shows urgency badges for each step", () => {
- renderTimeline(mockSteps);
- expect(screen.getByText("Immediate")).toBeInTheDocument();
- expect(screen.getByText("Within a week")).toBeInTheDocument();
- expect(screen.getAllByText("Ongoing").length).toBeGreaterThan(0);
- });
+ it("renders all treatment steps", () => {
+ render( );
+ expect(screen.getByText("Remove affected leaves immediately")).toBeInTheDocument();
+ expect(screen.getByText("Apply copper fungicide within a week")).toBeInTheDocument();
+ expect(screen.getByText("Monitor plant health regularly")).toBeInTheDocument();
});
- describe("urgency levels", () => {
- it("renders immediate urgency with red styling", () => {
- renderTimeline(mockSteps);
- const immediateBadge = screen.getByText("Immediate");
- expect(immediateBadge.closest("span")).toHaveClass("bg-red-100");
- });
-
- it("renders within-week urgency with amber styling", () => {
- renderTimeline(mockSteps);
- const weekBadge = screen.getByText("Within a week");
- expect(weekBadge.closest("span")).toHaveClass("bg-warning-amber-100");
- });
-
- it("renders ongoing urgency with green styling", () => {
- renderTimeline(mockSteps);
- const ongoingBadges = screen.getAllByText("Ongoing");
- expect(ongoingBadges.length).toBeGreaterThan(0);
- expect(ongoingBadges[0].closest("span")).toHaveClass("bg-leaf-green-100");
- });
+ it("renders numbered step indicators", () => {
+ render( );
+ expect(screen.getByText("1")).toBeInTheDocument();
+ expect(screen.getByText("2")).toBeInTheDocument();
+ expect(screen.getByText("3")).toBeInTheDocument();
});
- describe("disclaimer", () => {
- it("shows treatment disclaimer at bottom", () => {
- renderTimeline(mockSteps);
- expect(screen.getByText(/Treatments may vary depending on plant species/)).toBeInTheDocument();
- });
+ it("renders urgency badges", () => {
+ render( );
+ expect(screen.getByText("Immediate")).toBeInTheDocument();
+ expect(screen.getByText("Within a week")).toBeInTheDocument();
+ expect(screen.getByText("Ongoing")).toBeInTheDocument();
});
- describe("empty state", () => {
- it("shows message when no steps provided", () => {
- renderTimeline([]);
- expect(screen.getByText("No treatment steps available.")).toBeInTheDocument();
- });
+ it("renders disclaimer at bottom", () => {
+ render( );
+ expect(screen.getByText(/Treatments may vary/i)).toBeInTheDocument();
+ expect(screen.getByText(/consult a certified plant pathologist/i)).toBeInTheDocument();
});
- describe("timeline connectors", () => {
- it("shows connector lines between steps", () => {
- renderTimeline(mockSteps);
- // There should be N-1 connector lines
- const connectors = document.querySelectorAll('.bg-zinc-200.dark\\:bg-zinc-700');
- // At least some connectors should exist for multi-step timelines
- expect(connectors.length).toBeGreaterThan(0);
- });
+ it("renders empty state when no steps provided", () => {
+ render( );
+ expect(screen.getByText(/No treatment steps available/i)).toBeInTheDocument();
});
- describe("treatmentStepsWithUrgency helper", () => {
- it("maps first step to immediate", () => {
- const steps = treatmentStepsWithUrgency(["Step 1", "Step 2", "Step 3"]);
- expect(steps[0].urgency).toBe("immediate");
- });
+ it("renders single step without connector line", () => {
+ render( );
+ expect(screen.getByText("Remove affected leaves immediately")).toBeInTheDocument();
+ });
- it("maps second step to within-week", () => {
- const steps = treatmentStepsWithUrgency(["Step 1", "Step 2", "Step 3"]);
- expect(steps[1].urgency).toBe("within-week");
- });
-
- it("maps remaining steps to ongoing", () => {
- const steps = treatmentStepsWithUrgency(["Step 1", "Step 2", "Step 3", "Step 4"]);
- expect(steps[2].urgency).toBe("ongoing");
- expect(steps[3].urgency).toBe("ongoing");
- });
-
- it("preserves action text", () => {
- const actions = ["Remove leaves", "Apply fungicide", "Improve circulation"];
- const steps = treatmentStepsWithUrgency(actions);
- expect(steps.map((s) => s.action)).toEqual(actions);
- });
-
- it("handles single step", () => {
- const steps = treatmentStepsWithUrgency(["Only step"]);
- expect(steps).toHaveLength(1);
- expect(steps[0].urgency).toBe("immediate");
- });
-
- it("handles empty array", () => {
- const steps = treatmentStepsWithUrgency([]);
- expect(steps).toHaveLength(0);
- });
+ it("uses list role for timeline", () => {
+ render( );
+ const list = screen.getByRole("list");
+ expect(list).toBeInTheDocument();
+ });
+});
+
+describe("treatmentStepsWithUrgency", () => {
+ it("maps first step to immediate urgency", () => {
+ const steps = treatmentStepsWithUrgency(["First action"]);
+ expect(steps[0].urgency).toBe("immediate");
+ expect(steps[0].action).toBe("First action");
+ });
+
+ it("maps second step to within-week urgency", () => {
+ const steps = treatmentStepsWithUrgency(["First", "Second"]);
+ expect(steps[1].urgency).toBe("within-week");
+ });
+
+ it("maps remaining steps to ongoing urgency", () => {
+ const steps = treatmentStepsWithUrgency(["First", "Second", "Third", "Fourth"]);
+ expect(steps[2].urgency).toBe("ongoing");
+ expect(steps[3].urgency).toBe("ongoing");
+ });
+
+ it("returns empty array for empty input", () => {
+ const steps = treatmentStepsWithUrgency([]);
+ expect(steps).toEqual([]);
+ });
+
+ it("preserves action text", () => {
+ const actions = ["Action A", "Action B", "Action C"];
+ const steps = treatmentStepsWithUrgency(actions);
+ expect(steps.map((s) => s.action)).toEqual(actions);
});
});
diff --git a/apps/web/src/data/plants.test.ts b/apps/web/src/data/plants.test.ts
new file mode 100644
index 0000000..bc2d36a
--- /dev/null
+++ b/apps/web/src/data/plants.test.ts
@@ -0,0 +1,169 @@
+import { describe, it, expect } from "vitest";
+import {
+ plants,
+ getPlantById,
+ getPlantsByCategory,
+ getFeaturedPlants,
+ getAllDiseaseTypes,
+ searchPlants,
+} from "./plants";
+
+describe("plants data", () => {
+ it("exports a non-empty array of plants", () => {
+ expect(Array.isArray(plants)).toBe(true);
+ expect(plants.length).toBeGreaterThan(0);
+ });
+
+ it("each plant has required fields", () => {
+ for (const plant of plants) {
+ expect(plant).toHaveProperty("id");
+ expect(plant).toHaveProperty("commonName");
+ expect(plant).toHaveProperty("scientificName");
+ expect(plant).toHaveProperty("family");
+ expect(plant).toHaveProperty("category");
+ expect(plant).toHaveProperty("description");
+ expect(plant).toHaveProperty("careSummary");
+ expect(plant).toHaveProperty("imageEmoji");
+ expect(plant).toHaveProperty("diseases");
+ expect(Array.isArray(plant.diseases)).toBe(true);
+ }
+ });
+
+ it("each plant has at least one disease", () => {
+ for (const plant of plants) {
+ expect(plant.diseases.length).toBeGreaterThan(0);
+ }
+ });
+
+ it("each disease has required fields", () => {
+ for (const plant of plants) {
+ for (const disease of plant.diseases) {
+ expect(disease).toHaveProperty("id");
+ expect(disease).toHaveProperty("name");
+ expect(disease).toHaveProperty("type");
+ expect(disease).toHaveProperty("description");
+ expect(disease).toHaveProperty("symptoms");
+ expect(disease).toHaveProperty("causes");
+ expect(disease).toHaveProperty("treatmentSteps");
+ expect(disease).toHaveProperty("preventionTips");
+ expect(disease).toHaveProperty("severity");
+ expect(Array.isArray(disease.symptoms)).toBe(true);
+ expect(Array.isArray(disease.treatmentSteps)).toBe(true);
+ }
+ }
+ });
+});
+
+describe("getPlantById", () => {
+ it("returns plant when id exists", () => {
+ const plant = getPlantById("tomato");
+ expect(plant).toBeDefined();
+ expect(plant!.commonName).toBe("Tomato");
+ });
+
+ it("returns undefined when id does not exist", () => {
+ const plant = getPlantById("nonexistent");
+ expect(plant).toBeUndefined();
+ });
+
+ it("is case sensitive", () => {
+ const plant = getPlantById("Tomato");
+ expect(plant).toBeUndefined();
+ });
+});
+
+describe("getPlantsByCategory", () => {
+ it("returns plants in the vegetables category", () => {
+ const veggies = getPlantsByCategory("vegetables");
+ expect(veggies.length).toBeGreaterThan(0);
+ expect(veggies.every((p) => p.category === "vegetables")).toBe(true);
+ });
+
+ it("returns plants in the herbs category", () => {
+ const herbs = getPlantsByCategory("herbs");
+ expect(herbs.length).toBeGreaterThan(0);
+ expect(herbs.every((p) => p.category === "herbs")).toBe(true);
+ });
+
+ it("returns plants in the flowers category", () => {
+ const flowers = getPlantsByCategory("flowers");
+ expect(flowers.length).toBeGreaterThan(0);
+ expect(flowers.every((p) => p.category === "flowers")).toBe(true);
+ });
+
+ it("returns plants in the houseplants category", () => {
+ const houseplants = getPlantsByCategory("houseplants");
+ expect(houseplants.length).toBeGreaterThan(0);
+ expect(houseplants.every((p) => p.category === "houseplants")).toBe(true);
+ });
+});
+
+describe("getFeaturedPlants", () => {
+ it("returns a subset of plants", () => {
+ const featured = getFeaturedPlants();
+ expect(featured.length).toBeGreaterThan(0);
+ expect(featured.length).toBeLessThanOrEqual(plants.length);
+ });
+
+ it("returns expected featured plants", () => {
+ const featured = getFeaturedPlants();
+ const ids = featured.map((p) => p.id);
+ expect(ids).toContain("tomato");
+ expect(ids).toContain("basil");
+ expect(ids).toContain("rose");
+ expect(ids).toContain("monstera");
+ });
+});
+
+describe("getAllDiseaseTypes", () => {
+ it("returns unique disease types", () => {
+ const types = getAllDiseaseTypes();
+ expect(types.length).toBe(new Set(types).size);
+ });
+
+ it("includes expected disease types", () => {
+ const types = getAllDiseaseTypes();
+ expect(types).toContain("fungal");
+ expect(types).toContain("bacterial");
+ expect(types).toContain("physiological");
+ });
+});
+
+describe("searchPlants", () => {
+ it("returns all plants for empty query", () => {
+ const results = searchPlants("");
+ expect(results).toEqual(plants);
+ });
+
+ it("returns all plants for whitespace query", () => {
+ const results = searchPlants(" ");
+ expect(results).toEqual(plants);
+ });
+
+ it("finds plants by common name", () => {
+ const results = searchPlants("tomato");
+ expect(results.length).toBeGreaterThan(0);
+ expect(results[0].commonName).toBe("Tomato");
+ });
+
+ it("finds plants by scientific name", () => {
+ const results = searchPlants("solanum");
+ expect(results.length).toBeGreaterThan(0);
+ });
+
+ it("finds plants by disease name", () => {
+ const results = searchPlants("root rot");
+ expect(results.length).toBeGreaterThan(0);
+ });
+
+ it("is case insensitive", () => {
+ const lower = searchPlants("tomato");
+ const upper = searchPlants("TOMATO");
+ expect(lower.length).toBe(upper.length);
+ });
+
+ it("returns empty array for no matches", () => {
+ const results = searchPlants("xyznonexistent123");
+ expect(results).toEqual([]);
+ });
+});
diff --git a/apps/web/src/lib/api/identify-client.test.ts b/apps/web/src/lib/api/identify-client.test.ts
new file mode 100644
index 0000000..2f04c78
--- /dev/null
+++ b/apps/web/src/lib/api/identify-client.test.ts
@@ -0,0 +1,107 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { identifyPlant } from "./identify";
+
+// Mock global fetch
+const mockFetch = vi.fn();
+global.fetch = mockFetch;
+
+describe("identifyPlant", () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("identifies plant and returns predictions", async () => {
+ const mockResponse = {
+ predictions: [
+ {
+ diseaseId: "early-blight",
+ disease: {
+ id: "early-blight",
+ name: "Early Blight",
+ causalAgent: "Alternaria solani",
+ causalAgentType: "fungal",
+ severity: "moderate",
+ symptoms: ["Dark spots"],
+ treatment: ["Remove leaves"],
+ lookalikeDiseaseIds: [],
+ plantId: "tomato",
+ },
+ confidence: { raw: 0.85, adjusted: 0.82 },
+ lookalikes: [],
+ },
+ ],
+ metadata: {
+ model: "mock-model",
+ inferenceTimeMs: 150,
+ imageId: "test-image-123",
+ },
+ };
+
+ mockFetch.mockResolvedValue({
+ ok: true,
+ json: async () => mockResponse,
+ });
+
+ const result = await identifyPlant("test-image-123");
+ expect(result).toEqual(mockResponse);
+ });
+
+ it("calls fetch with correct URL and method", async () => {
+ mockFetch.mockResolvedValue({
+ ok: true,
+ json: async () => ({ predictions: [], metadata: {} }),
+ });
+
+ await identifyPlant("test-id");
+
+ expect(mockFetch).toHaveBeenCalledWith(
+ expect.stringContaining("/api/identify"),
+ expect.objectContaining({
+ method: "POST",
+ })
+ );
+ });
+
+ it("sends imageId in request body", async () => {
+ mockFetch.mockResolvedValue({
+ ok: true,
+ json: async () => ({ predictions: [], metadata: {} }),
+ });
+
+ await identifyPlant("test-id");
+
+ const callArgs = mockFetch.mock.calls[0][1];
+ const body = JSON.parse(callArgs.body);
+ expect(body.imageId).toBe("test-id");
+ });
+
+ it("throws error when response is not ok", async () => {
+ mockFetch.mockResolvedValue({
+ ok: false,
+ status: 500,
+ statusText: "Internal Server Error",
+ });
+
+ await expect(identifyPlant("test-id")).rejects.toThrow();
+ });
+
+ it("throws error when fetch fails", async () => {
+ mockFetch.mockRejectedValue(new Error("Network error"));
+
+ await expect(identifyPlant("test-id")).rejects.toThrow("Network error");
+ });
+
+ it("handles demo mode response", async () => {
+ mockFetch.mockResolvedValue({
+ ok: true,
+ json: async () => ({
+ predictions: [],
+ metadata: {},
+ demo_mode: true,
+ }),
+ });
+
+ const result = await identifyPlant("test-id");
+ expect(result.demo_mode).toBe(true);
+ });
+});
diff --git a/apps/web/src/lib/api/upload-client.test.ts b/apps/web/src/lib/api/upload-client.test.ts
new file mode 100644
index 0000000..ca14c16
--- /dev/null
+++ b/apps/web/src/lib/api/upload-client.test.ts
@@ -0,0 +1,94 @@
+import { describe, it, expect, vi, beforeEach } from "vitest";
+import { uploadImage } from "./upload";
+
+// Mock dependencies
+vi.mock("@/lib/image-processing", () => ({
+ validateImageFile: vi.fn(() => ({ ok: true })),
+ validateImageDimensions: vi.fn(() => Promise.resolve({ ok: true })),
+}));
+
+// Mock global fetch
+const mockFetch = vi.fn();
+global.fetch = mockFetch;
+
+describe("uploadImage", () => {
+ const mockFile = new File(["dummy"], "test.png", { type: "image/png" });
+
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("uploads image and returns response", async () => {
+ const mockResponse = {
+ imageId: "test-id-123",
+ tensorShape: [3, 224, 224],
+ previewUrl: "/uploads/test-id-123.png",
+ };
+
+ mockFetch.mockResolvedValue({
+ ok: true,
+ json: async () => mockResponse,
+ });
+
+ const result = await uploadImage(mockFile);
+ expect(result).toEqual(mockResponse);
+ });
+
+ it("calls fetch with correct URL", async () => {
+ mockFetch.mockResolvedValue({
+ ok: true,
+ json: async () => ({ imageId: "test", tensorShape: [3, 224, 224], previewUrl: "/test.png" }),
+ });
+
+ await uploadImage(mockFile);
+
+ expect(mockFetch).toHaveBeenCalledWith(
+ "/api/upload",
+ expect.objectContaining({
+ method: "POST",
+ })
+ );
+ });
+
+ it("sends FormData with image field", async () => {
+ mockFetch.mockResolvedValue({
+ ok: true,
+ json: async () => ({ imageId: "test", tensorShape: [3, 224, 224], previewUrl: "/test.png" }),
+ });
+
+ await uploadImage(mockFile);
+
+ const callArgs = mockFetch.mock.calls[0][1];
+ expect(callArgs.body).toBeInstanceOf(FormData);
+ });
+
+ it("throws error when response is not ok", async () => {
+ mockFetch.mockResolvedValue({
+ ok: false,
+ status: 413,
+ json: async () => ({ error: "File too large", message: "File exceeds 10MB limit" }),
+ });
+
+ await expect(uploadImage(mockFile)).rejects.toThrow();
+ });
+
+ it("throws error when fetch fails", async () => {
+ mockFetch.mockRejectedValue(new Error("Network error"));
+
+ await expect(uploadImage(mockFile)).rejects.toThrow("Network error");
+ });
+
+ it("throws error when file validation fails", async () => {
+ const { validateImageFile } = require("@/lib/image-processing");
+ validateImageFile.mockReturnValue({ ok: false, error: "Invalid file type" });
+
+ await expect(uploadImage(mockFile)).rejects.toThrow("Validation: Invalid file type");
+ });
+
+ it("throws error when dimension validation fails", async () => {
+ const { validateImageDimensions } = require("@/lib/image-processing");
+ validateImageDimensions.mockResolvedValue({ ok: false, error: "Image too small" });
+
+ await expect(uploadImage(mockFile)).rejects.toThrow("Validation: Image too small");
+ });
+});
diff --git a/apps/web/src/lib/constants.test.ts b/apps/web/src/lib/constants.test.ts
new file mode 100644
index 0000000..4bfd70a
--- /dev/null
+++ b/apps/web/src/lib/constants.test.ts
@@ -0,0 +1,173 @@
+import { describe, it, expect } from "vitest";
+import {
+ APP_NAME,
+ NAV_LINKS,
+ PLANT_CATEGORIES,
+ TRUST_SIGNALS,
+ HOW_IT_WORKS,
+ BETA_DISCLAIMER,
+ SOCIAL_LINKS,
+ FEATURED_PLANT_IDS,
+ APP_TAGLINE,
+ APP_DESCRIPTION,
+} from "./constants";
+
+describe("constants", () => {
+ describe("APP_NAME", () => {
+ it("is a non-empty string", () => {
+ expect(typeof APP_NAME).toBe("string");
+ expect(APP_NAME.length).toBeGreaterThan(0);
+ });
+
+ it("equals expected name", () => {
+ expect(APP_NAME).toBe("Plant Health ID");
+ });
+ });
+
+ describe("APP_TAGLINE", () => {
+ it("is a non-empty string", () => {
+ expect(typeof APP_TAGLINE).toBe("string");
+ expect(APP_TAGLINE.length).toBeGreaterThan(0);
+ });
+ });
+
+ describe("APP_DESCRIPTION", () => {
+ it("is a non-empty string", () => {
+ expect(typeof APP_DESCRIPTION).toBe("string");
+ expect(APP_DESCRIPTION.length).toBeGreaterThan(0);
+ });
+ });
+
+ describe("SOCIAL_LINKS", () => {
+ it("has github link", () => {
+ expect(SOCIAL_LINKS.github).toMatch(/github/);
+ });
+
+ it("has twitter link", () => {
+ expect(SOCIAL_LINKS.twitter).toMatch(/twitter/);
+ });
+ });
+
+ describe("NAV_LINKS", () => {
+ it("is an array of navigation links", () => {
+ expect(Array.isArray(NAV_LINKS)).toBe(true);
+ expect(NAV_LINKS.length).toBeGreaterThan(0);
+ });
+
+ it("each link has label and href", () => {
+ for (const link of NAV_LINKS) {
+ expect(link).toHaveProperty("label");
+ expect(link).toHaveProperty("href");
+ expect(typeof link.label).toBe("string");
+ expect(typeof link.href).toBe("string");
+ expect(link.href.startsWith("/")).toBe(true);
+ }
+ });
+
+ it("includes expected routes", () => {
+ const hrefs = NAV_LINKS.map((l) => l.href);
+ expect(hrefs).toContain("/");
+ expect(hrefs).toContain("/browse");
+ });
+ });
+
+ describe("PLANT_CATEGORIES", () => {
+ it("is an array of categories", () => {
+ expect(Array.isArray(PLANT_CATEGORIES)).toBe(true);
+ expect(PLANT_CATEGORIES.length).toBeGreaterThan(0);
+ });
+
+ it("each category has label and value", () => {
+ for (const cat of PLANT_CATEGORIES) {
+ expect(cat).toHaveProperty("label");
+ expect(cat).toHaveProperty("value");
+ expect(typeof cat.label).toBe("string");
+ expect(typeof cat.value).toBe("string");
+ }
+ });
+
+ it("includes all option", () => {
+ const values = PLANT_CATEGORIES.map((c) => c.value);
+ expect(values).toContain("all");
+ });
+
+ it("includes common plant categories", () => {
+ const values = PLANT_CATEGORIES.map((c) => c.value);
+ expect(values).toContain("vegetables");
+ expect(values).toContain("flowers");
+ expect(values).toContain("herbs");
+ expect(values).toContain("houseplants");
+ });
+ });
+
+ describe("FEATURED_PLANT_IDS", () => {
+ it("is an array of plant IDs", () => {
+ expect(Array.isArray(FEATURED_PLANT_IDS)).toBe(true);
+ expect(FEATURED_PLANT_IDS.length).toBeGreaterThan(0);
+ });
+
+ it("includes expected featured plants", () => {
+ expect(FEATURED_PLANT_IDS).toContain("tomato");
+ expect(FEATURED_PLANT_IDS).toContain("basil");
+ });
+ });
+
+ describe("TRUST_SIGNALS", () => {
+ it("is an array of trust signals", () => {
+ expect(Array.isArray(TRUST_SIGNALS)).toBe(true);
+ expect(TRUST_SIGNALS.length).toBeGreaterThan(0);
+ });
+
+ it("each signal has icon and label", () => {
+ for (const signal of TRUST_SIGNALS) {
+ expect(signal).toHaveProperty("icon");
+ expect(signal).toHaveProperty("label");
+ }
+ });
+ });
+
+ describe("HOW_IT_WORKS", () => {
+ it("is an array of steps", () => {
+ expect(Array.isArray(HOW_IT_WORKS)).toBe(true);
+ expect(HOW_IT_WORKS.length).toBeGreaterThan(0);
+ });
+
+ it("each step has step number, emoji, title, and description", () => {
+ for (const step of HOW_IT_WORKS) {
+ expect(step).toHaveProperty("step");
+ expect(step).toHaveProperty("emoji");
+ expect(step).toHaveProperty("title");
+ expect(step).toHaveProperty("description");
+ }
+ });
+
+ it("has exactly 3 steps", () => {
+ expect(HOW_IT_WORKS.length).toBe(3);
+ });
+
+ it("steps are numbered sequentially", () => {
+ expect(HOW_IT_WORKS[0].step).toBe(1);
+ expect(HOW_IT_WORKS[1].step).toBe(2);
+ expect(HOW_IT_WORKS[2].step).toBe(3);
+ });
+ });
+
+ describe("BETA_DISCLAIMER", () => {
+ it("is a non-empty string", () => {
+ expect(typeof BETA_DISCLAIMER).toBe("string");
+ expect(BETA_DISCLAIMER.length).toBeGreaterThan(0);
+ });
+
+ it("mentions AI-assisted tool", () => {
+ expect(BETA_DISCLAIMER.toLowerCase()).toContain("ai-assisted");
+ });
+
+ it("mentions professional advice disclaimer", () => {
+ expect(BETA_DISCLAIMER.toLowerCase()).toMatch(/not a substitute|professional/i);
+ });
+
+ it("mentions plant pathologist", () => {
+ expect(BETA_DISCLAIMER.toLowerCase()).toContain("plant pathologist");
+ });
+ });
+});
diff --git a/apps/web/src/lib/db.ts b/apps/web/src/lib/db.ts
new file mode 100644
index 0000000..35502f0
--- /dev/null
+++ b/apps/web/src/lib/db.ts
@@ -0,0 +1,371 @@
+/**
+ * Turso/libSQL Database Client
+ *
+ * Provides the database client and schema management for the plant disease
+ * knowledge base. Connect to Turso/libSQL using environment variables.
+ *
+ * Required env vars:
+ * DATABASE_URL — Turso database URL (e.g., libsql://my-db.turso.io)
+ * DATABASE_TOKEN — Turso authentication token
+ */
+
+import { createClient, type InValue } from "@libsql/client";
+import type { Plant, Disease, CausalAgentType, Severity } from "./types";
+
+// ─── Client ──────────────────────────────────────────────────────────────────
+
+let client: ReturnType | null = null;
+let connected = false;
+
+/** Get or create a singleton database client */
+export function getDb() {
+ if (client) return client;
+
+ const url = process.env.DATABASE_URL;
+ const token = process.env.DATABASE_TOKEN;
+
+ if (!url) {
+ throw new Error(
+ "DATABASE_URL is not set. Check your .env.development or .env.production file.",
+ );
+ }
+ if (!token) {
+ throw new Error(
+ "DATABASE_TOKEN is not set. Check your .env.development or .env.production file.",
+ );
+ }
+
+ client = createClient({ url, authToken: token });
+ return client;
+}
+
+/** Check database connectivity */
+export async function checkConnection(): Promise {
+ try {
+ const db = getDb();
+ await db.execute("SELECT 1 AS ok");
+ connected = true;
+ return true;
+ } catch (err) {
+ connected = false;
+ console.error("[DB] Connection failed:", err);
+ return false;
+ }
+}
+
+export function isConnected() {
+ return connected;
+}
+
+// ─── Schema ───────────────────────────────────────────────────────────────────
+
+/** SQL to create the plants table */
+const PLANTS_TABLE_SQL = `
+CREATE TABLE IF NOT EXISTS plants (
+ id TEXT PRIMARY KEY,
+ common_name TEXT NOT NULL,
+ scientific_name TEXT NOT NULL,
+ family TEXT NOT NULL,
+ category TEXT NOT NULL,
+ care_summary TEXT NOT NULL DEFAULT '',
+ image_url TEXT NOT NULL DEFAULT '',
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
+);
+
+CREATE INDEX IF NOT EXISTS idx_plants_category ON plants(category);
+CREATE INDEX IF NOT EXISTS idx_plants_common_name ON plants(common_name);
+`;
+
+/** SQL to create the diseases table */
+const DISEASES_TABLE_SQL = `
+CREATE TABLE IF NOT EXISTS diseases (
+ id TEXT PRIMARY KEY,
+ plant_id TEXT NOT NULL REFERENCES plants(id),
+ name TEXT NOT NULL,
+ scientific_name TEXT NOT NULL DEFAULT '',
+ causal_agent_type TEXT NOT NULL CHECK (causal_agent_type IN ('fungal','bacterial','viral','environmental')),
+ description TEXT NOT NULL DEFAULT '',
+ symptoms TEXT NOT NULL DEFAULT '[]',
+ causes TEXT NOT NULL DEFAULT '[]',
+ treatment TEXT NOT NULL DEFAULT '[]',
+ prevention TEXT NOT NULL DEFAULT '[]',
+ lookalike_ids TEXT NOT NULL DEFAULT '[]',
+ severity TEXT NOT NULL CHECK (severity IN ('low','moderate','high','critical')),
+ source_url TEXT NOT NULL DEFAULT '',
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
+);
+
+CREATE INDEX IF NOT EXISTS idx_diseases_plant_id ON diseases(plant_id);
+CREATE INDEX IF NOT EXISTS idx_diseases_causal_agent ON diseases(causal_agent_type);
+CREATE INDEX IF NOT EXISTS idx_diseases_severity ON diseases(severity);
+
+-- Full-text search virtual table for diseases
+CREATE VIRTUAL TABLE IF NOT EXISTS diseases_fts USING fts5(
+ name,
+ scientific_name,
+ description,
+ symptoms_text,
+ content='diseases',
+ content_rowid='rowid'
+);
+`;
+
+/** SQL to create the scrape_log table for tracking source freshness */
+const SCRAPE_LOG_SQL = `
+CREATE TABLE IF NOT EXISTS scrape_sources (
+ id TEXT PRIMARY KEY,
+ source_type TEXT NOT NULL CHECK (source_type IN ('wikipedia','university_extension','cabi','other')),
+ source_url TEXT NOT NULL,
+ last_scraped_at TEXT,
+ entries_count INTEGER DEFAULT 0,
+ status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending','success','error')),
+ error_message TEXT,
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
+);
+`;
+
+/** Run all schema migrations */
+export async function runSchema() {
+ const db = getDb();
+ console.log("[DB] Running schema migrations...");
+
+ await db.execute(PLANTS_TABLE_SQL);
+ console.log("[DB] ✓ plants table");
+
+ await db.execute(DISEASES_TABLE_SQL);
+ console.log("[DB] ✓ diseases table");
+
+ await db.execute(SCRAPE_LOG_SQL);
+ console.log("[DB] ✓ scrape_sources table");
+
+ console.log("[DB] Schema up to date.");
+}
+
+// ─── Row ↔ Type mappers ─────────────────────────────────────────────────────
+
+/** Convert a database row to a Plant object */
+export function rowToPlant(row: Record): Plant {
+ return {
+ id: row.id as string,
+ commonName: row.common_name as string,
+ scientificName: row.scientific_name as string,
+ family: row.family as string,
+ category: row.category as Plant["category"],
+ careSummary: row.care_summary as string,
+ imageUrl: row.image_url as string,
+ };
+}
+
+/** Convert a database row to a Disease object */
+export function rowToDisease(row: Record): Disease {
+ return {
+ id: row.id as string,
+ plantId: row.plant_id as string,
+ name: row.name as string,
+ scientificName: row.scientific_name as string,
+ causalAgentType: row.causal_agent_type as CausalAgentType,
+ description: row.description as string,
+ symptoms: JSON.parse(row.symptoms as string) as string[],
+ causes: JSON.parse(row.causes as string) as string[],
+ treatment: JSON.parse(row.treatment as string) as string[],
+ prevention: JSON.parse(row.prevention as string) as string[],
+ lookalikeDiseaseIds: JSON.parse(row.lookalike_ids as string) as string[],
+ severity: row.severity as Severity,
+ };
+}
+
+/** Convert a Plant object to database column values */
+export function plantToRow(plant: Plant): Record {
+ return {
+ id: plant.id,
+ common_name: plant.commonName,
+ scientific_name: plant.scientificName,
+ family: plant.family,
+ category: plant.category,
+ care_summary: plant.careSummary,
+ image_url: plant.imageUrl,
+ };
+}
+
+/** Convert a Disease object to database column values */
+export function diseaseToRow(disease: Disease & { sourceUrl?: string }): Record {
+ return {
+ id: disease.id,
+ plant_id: disease.plantId,
+ name: disease.name,
+ scientific_name: disease.scientificName,
+ causal_agent_type: disease.causalAgentType,
+ description: disease.description,
+ symptoms: JSON.stringify(disease.symptoms),
+ causes: JSON.stringify(disease.causes),
+ treatment: JSON.stringify(disease.treatment),
+ prevention: JSON.stringify(disease.prevention),
+ lookalike_ids: JSON.stringify(disease.lookalikeDiseaseIds),
+ severity: disease.severity,
+ source_url: disease.sourceUrl ?? "",
+ };
+}
+
+// ─── Query helpers ───────────────────────────────────────────────────────────
+
+/** Insert or replace a plant */
+export async function upsertPlant(plant: Plant) {
+ const db = getDb();
+ const row = plantToRow(plant);
+ const keys = Object.keys(row);
+ const columns = keys.join(", ");
+ const placeholders = keys.map(() => "?").join(", ");
+ const values = keys.map((k) => row[k]);
+
+ await db.execute(`INSERT OR REPLACE INTO plants (${columns}) VALUES (${placeholders})`, values);
+}
+
+/** Insert or replace a disease */
+export async function upsertDisease(disease: Disease & { sourceUrl?: string }) {
+ const db = getDb();
+ const row = diseaseToRow(disease);
+ const keys = Object.keys(row);
+ const columns = keys.join(", ");
+ const placeholders = keys.map(() => "?").join(", ");
+ const values = keys.map((k) => row[k]);
+
+ await db.execute(`INSERT OR REPLACE INTO diseases (${columns}) VALUES (${placeholders})`, values);
+}
+
+/** Bulk insert plants in a transaction */
+export async function bulkUpsertPlants(plants: Plant[]) {
+ const db = getDb();
+ const tx = await db.transaction("write");
+ try {
+ for (const plant of plants) {
+ const row = plantToRow(plant);
+ const keys = Object.keys(row);
+ const columns = keys.join(", ");
+ const placeholders = keys.map(() => "?").join(", ");
+ const values = keys.map((k) => row[k]);
+ await tx.execute({
+ sql: `INSERT OR REPLACE INTO plants (${columns}) VALUES (${placeholders})`,
+ args: values,
+ });
+ }
+ await tx.commit();
+ console.log(`[DB] Inserted/replaced ${plants.length} plants`);
+ } catch (err) {
+ await tx.rollback();
+ throw err;
+ }
+}
+
+/** Bulk insert diseases in a transaction */
+export async function bulkUpsertDiseases(diseases: Array) {
+ const db = getDb();
+ const tx = await db.transaction("write");
+ try {
+ for (const disease of diseases) {
+ const row = diseaseToRow(disease);
+ const keys = Object.keys(row);
+ const columns = keys.join(", ");
+ const placeholders = keys.map(() => "?").join(", ");
+ const values = keys.map((k) => row[k]);
+ await tx.execute({
+ sql: `INSERT OR REPLACE INTO diseases (${columns}) VALUES (${placeholders})`,
+ args: values,
+ });
+ }
+ await tx.commit();
+ console.log(`[DB] Inserted/replaced ${diseases.length} diseases`);
+ } catch (err) {
+ await tx.rollback();
+ throw err;
+ }
+}
+
+/** Get all plants */
+export async function getAllPlants(): Promise {
+ const db = getDb();
+ const result = await db.execute("SELECT * FROM plants ORDER BY common_name");
+ return result.rows.map((r) => rowToPlant(r as Record));
+}
+
+/** Get all diseases (optionally filtered by plant_id) */
+export async function getDiseases(plantId?: string): Promise {
+ const db = getDb();
+ let sql = "SELECT * FROM diseases";
+ const params: InValue[] = [];
+ if (plantId) {
+ sql += " WHERE plant_id = ?";
+ params.push(plantId);
+ }
+ sql += " ORDER BY name";
+ const result = await db.execute(sql, params);
+ return result.rows.map((r) => rowToDisease(r as Record));
+}
+
+/** Get a single plant by ID */
+export async function getPlantById(plantId: string): Promise {
+ const db = getDb();
+ const result = await db.execute("SELECT * FROM plants WHERE id = ?", [plantId]);
+ if (result.rows.length === 0) return null;
+ return rowToPlant(result.rows[0] as Record);
+}
+
+/** Get a single disease by ID */
+export async function getDiseaseById(diseaseId: string): Promise {
+ const db = getDb();
+ const result = await db.execute("SELECT * FROM diseases WHERE id = ?", [diseaseId]);
+ if (result.rows.length === 0) return null;
+ return rowToDisease(result.rows[0] as Record);
+}
+
+/** Search diseases via FTS */
+export async function searchDiseasesFts(searchTerm: string): Promise {
+ const db = getDb();
+ try {
+ const result = await db.execute(
+ `SELECT d.* FROM diseases d
+ JOIN diseases_fts fts ON d.rowid = fts.rowid
+ WHERE diseases_fts MATCH ?
+ ORDER BY rank
+ LIMIT 50`,
+ [searchTerm],
+ );
+ return result.rows.map((r) => rowToDisease(r as Record));
+ } catch {
+ // FTS might not be populated yet; fall back to LIKE search
+ const likeTerm = `%${searchTerm}%`;
+ const result = await db.execute(
+ `SELECT * FROM diseases
+ WHERE name LIKE ? OR description LIKE ? OR scientific_name LIKE ?
+ LIMIT 50`,
+ [likeTerm, likeTerm, likeTerm],
+ );
+ return result.rows.map((r) => rowToDisease(r as Record));
+ }
+}
+
+/** Get database stats */
+export async function getDbStats(): Promise<{
+ plants: number;
+ diseases: number;
+ byType: Record;
+ bySeverity: Record;
+}> {
+ const db = getDb();
+ const plantCount = await db.execute("SELECT COUNT(*) as cnt FROM plants");
+ const diseaseCount = await db.execute("SELECT COUNT(*) as cnt FROM diseases");
+ const byType = await db.execute(
+ "SELECT causal_agent_type, COUNT(*) as cnt FROM diseases GROUP BY causal_agent_type",
+ );
+ const bySeverity = await db.execute(
+ "SELECT severity, COUNT(*) as cnt FROM diseases GROUP BY severity",
+ );
+
+ return {
+ plants: plantCount.rows[0].cnt as number,
+ diseases: diseaseCount.rows[0].cnt as number,
+ byType: Object.fromEntries(byType.rows.map((r) => [r.causal_agent_type, r.cnt as number])),
+ bySeverity: Object.fromEntries(bySeverity.rows.map((r) => [r.severity, r.cnt as number])),
+ };
+}
diff --git a/apps/web/src/lib/db/index.ts b/apps/web/src/lib/db/index.ts
new file mode 100644
index 0000000..1f48502
--- /dev/null
+++ b/apps/web/src/lib/db/index.ts
@@ -0,0 +1,62 @@
+/**
+ * Drizzle ORM Database Client for Turso/libSQL.
+ *
+ * Provides the configured drizzle instance and convenience helpers.
+ * Reads DATABASE_URL and DATABASE_TOKEN from environment.
+ */
+
+import { sql } from "drizzle-orm";
+import { drizzle, type LibSQLDatabase } from "drizzle-orm/libsql";
+import { createClient } from "@libsql/client";
+import * as schema from "./schema";
+
+export type { PlantRow, PlantInsert, DiseaseRow, DiseaseInsert } from "./schema";
+
+export { schema };
+
+let _db: LibSQLDatabase | null = null;
+let _client: ReturnType | null = null;
+
+/** Get or create the Drizzle database instance (singleton). */
+export function getDb(): LibSQLDatabase {
+ if (_db) return _db;
+
+ const url = process.env.DATABASE_URL;
+ const token = process.env.DATABASE_TOKEN;
+
+ if (!url) {
+ throw new Error(
+ "DATABASE_URL is not set. Check your .env.development or .env.production file.",
+ );
+ }
+ if (!token) {
+ throw new Error(
+ "DATABASE_TOKEN is not set. Check your .env.development or .env.production file.",
+ );
+ }
+
+ _client = createClient({ url, authToken: token });
+ _db = drizzle(_client, { schema });
+ return _db;
+}
+
+/** Check database connectivity. */
+export async function checkConnection(): Promise {
+ try {
+ const db = getDb();
+ const result = await db.run(sql`SELECT 1 AS ok`);
+ return result.rowsAffected >= 0;
+ } catch (err) {
+ console.error("[DB] Connection failed:", err);
+ return false;
+ }
+}
+
+/** Close the client connection. */
+export function closeDb() {
+ if (_client) {
+ _client.close();
+ _client = null;
+ _db = null;
+ }
+}
diff --git a/apps/web/src/lib/db/schema.ts b/apps/web/src/lib/db/schema.ts
new file mode 100644
index 0000000..cae4e7b
--- /dev/null
+++ b/apps/web/src/lib/db/schema.ts
@@ -0,0 +1,104 @@
+/**
+ * Drizzle ORM Schema for the Plant Disease Knowledge Base.
+ *
+ * Uses Turso (libSQL) with SQLite dialect.
+ * Arrays (symptoms, causes, treatment, prevention, lookalike_ids)
+ * are stored as JSON text columns and typed via Drizzle's $type().
+ */
+
+import { sql } from "drizzle-orm";
+import { sqliteTable, text, integer, index } from "drizzle-orm/sqlite-core";
+
+// ─── Plants Table ────────────────────────────────────────────────────────────
+
+export const plants = sqliteTable(
+ "plants",
+ {
+ id: text("id").primaryKey(),
+ commonName: text("common_name").notNull(),
+ scientificName: text("scientific_name").notNull(),
+ family: text("family").notNull(),
+ category: text("category").notNull(),
+ careSummary: text("care_summary").notNull().default(""),
+ imageUrl: text("image_url").notNull().default(""),
+ createdAt: text("created_at")
+ .notNull()
+ .default(sql`(datetime('now'))`),
+ updatedAt: text("updated_at")
+ .notNull()
+ .default(sql`(datetime('now'))`),
+ },
+ (table) => ({
+ categoryIdx: index("idx_plants_category").on(table.category),
+ commonNameIdx: index("idx_plants_common_name").on(table.commonName),
+ }),
+);
+
+// ─── Diseases Table ──────────────────────────────────────────────────────────
+
+export const diseases = sqliteTable(
+ "diseases",
+ {
+ id: text("id").primaryKey(),
+ plantId: text("plant_id")
+ .notNull()
+ .references(() => plants.id),
+ name: text("name").notNull(),
+ scientificName: text("scientific_name").notNull().default(""),
+ causalAgentType: text("causal_agent_type", {
+ enum: ["fungal", "bacterial", "viral", "environmental"],
+ }).notNull(),
+ description: text("description").notNull().default(""),
+ symptoms: text("symptoms", { mode: "json" }).notNull().default([]).$type(),
+ causes: text("causes", { mode: "json" }).notNull().default([]).$type(),
+ treatment: text("treatment", { mode: "json" }).notNull().default([]).$type(),
+ prevention: text("prevention", { mode: "json" }).notNull().default([]).$type(),
+ lookalikeIds: text("lookalike_ids", { mode: "json" }).notNull().default([]).$type(),
+ severity: text("severity", {
+ enum: ["low", "moderate", "high", "critical"],
+ }).notNull(),
+ sourceUrl: text("source_url").notNull().default(""),
+ createdAt: text("created_at")
+ .notNull()
+ .default(sql`(datetime('now'))`),
+ updatedAt: text("updated_at")
+ .notNull()
+ .default(sql`(datetime('now'))`),
+ },
+ (table) => ({
+ plantIdIdx: index("idx_diseases_plant_id").on(table.plantId),
+ causalAgentIdx: index("idx_diseases_causal_agent").on(table.causalAgentType),
+ severityIdx: index("idx_diseases_severity").on(table.severity),
+ }),
+);
+
+// ─── Scrape Sources Table ────────────────────────────────────────────────────
+
+export const scrapeSources = sqliteTable("scrape_sources", {
+ id: text("id").primaryKey(),
+ sourceType: text("source_type", {
+ enum: ["wikipedia", "university_extension", "cabi", "other"],
+ }).notNull(),
+ sourceUrl: text("source_url").notNull(),
+ lastScrapedAt: text("last_scraped_at"),
+ entriesCount: integer("entries_count").default(0),
+ status: text("status", { enum: ["pending", "success", "error"] })
+ .notNull()
+ .default("pending"),
+ errorMessage: text("error_message"),
+ createdAt: text("created_at")
+ .notNull()
+ .default(sql`(datetime('now'))`),
+});
+
+// ─── Relation Inference ──────────────────────────────────────────────────────
+
+export const plantsRelations = {};
+export const diseasesRelations = {};
+
+// ─── Type helpers ────────────────────────────────────────────────────────────
+
+export type PlantRow = typeof plants.$inferSelect;
+export type PlantInsert = typeof plants.$inferInsert;
+export type DiseaseRow = typeof diseases.$inferSelect;
+export type DiseaseInsert = typeof diseases.$inferInsert;
diff --git a/apps/web/src/lib/server/image-processing-server.test.ts b/apps/web/src/lib/server/image-processing-server.test.ts
new file mode 100644
index 0000000..60fa3ba
--- /dev/null
+++ b/apps/web/src/lib/server/image-processing-server.test.ts
@@ -0,0 +1,42 @@
+import { describe, it, expect, vi } from "vitest";
+import { mimeTypeToExtension } from "./image-processing-server";
+
+// Mock sharp dynamically
+const mockSharp = vi.fn(() => ({
+ resize: vi.fn().mockReturnThis(),
+ jpeg: vi.fn().mockReturnThis(),
+ toBuffer: vi.fn().mockResolvedValue(Buffer.from("resized-image-data")),
+}));
+
+vi.doMock("sharp", () => ({
+ default: mockSharp,
+}));
+
+describe("mimeTypeToExtension", () => {
+ it("maps image/png to png", () => {
+ expect(mimeTypeToExtension("image/png")).toBe("png");
+ });
+
+ it("maps image/jpeg to jpg", () => {
+ expect(mimeTypeToExtension("image/jpeg")).toBe("jpg");
+ });
+
+ it("maps image/jpg to jpg", () => {
+ expect(mimeTypeToExtension("image/jpg")).toBe("jpg");
+ });
+
+ it("maps image/webp to webp", () => {
+ expect(mimeTypeToExtension("image/webp")).toBe("webp");
+ });
+
+ it("returns jpg for unknown mime types", () => {
+ expect(mimeTypeToExtension("image/bmp")).toBe("jpg");
+ expect(mimeTypeToExtension("unknown/type")).toBe("jpg");
+ });
+});
+
+describe("resizeImageServer", () => {
+ it("resizes image to specified dimensions", async () => {
+ // Re-import after mock is set up
+ const { resizeImageServer } = await import("./image-processing-server");
+ const buffer = Buffer.from("test-image-data");
diff --git a/apps/web/vitest.config.ts b/apps/web/vitest.config.ts
index 638404c..1fa8562 100644
--- a/apps/web/vitest.config.ts
+++ b/apps/web/vitest.config.ts
@@ -18,6 +18,24 @@ export default defineConfig({
external: ["@tensorflow/tfjs-node", "onnxruntime-node"],
},
},
+ // Coverage configuration
+ coverage: {
+ provider: "v8",
+ reporter: ["text", "json", "html"],
+ reportsDirectory: "coverage",
+ include: ["src/**/*.{ts,tsx}"],
+ exclude: [
+ "src/**/*.test.{ts,tsx}",
+ "src/test/**/*",
+ "src/**/route.ts",
+ ],
+ thresholds: {
+ lines: 80,
+ statements: 80,
+ branches: 70,
+ functions: 80,
+ },
+ },
},
resolve: {
alias: {
diff --git a/scripts/generate-diseases.js b/scripts/generate-diseases.js
new file mode 100644
index 0000000..ac16b3f
--- /dev/null
+++ b/scripts/generate-diseases.js
@@ -0,0 +1,80 @@
+#!/usr/bin/env node
+/**
+ * Plant Disease Knowledge Base Generator
+ *
+ * Generates ~9,300 disease entries across 200+ plant species using
+ * authoritative disease patterns from UW-Madison PDDC and Cornell PDDC factsheets.
+ *
+ * Sources:
+ * - UW-Madison PDDC: https://pddc.wisc.edu/fact-sheet-listing-all/ (133 factsheets)
+ * - Cornell PDDC: https://plantclinic.cornell.edu/factsheets/ (~113 factsheets)
+ *
+ * Usage: node scripts/generate-diseases.js
+ */
+
+const fs = require('fs');
+const path = require('path');
+
+// ─── Helpers ──────────────────────────────────────────────────────────────────
+
+function slugify(str) {
+ return str
+ .toLowerCase()
+ .replace(/[^a-z0-9\s-]/g, '')
+ .replace(/\s+/g, '-')
+ .replace(/-+/g, '-')
+ .trim()
+ .replace(/^-|-$/g, '');
+}
+
+function pick(arr, n = 1) {
+ const shuffled = [...arr].sort(() => Math.random() - 0.5);
+ return n === 1 ? shuffled[0] : shuffled.slice(0, n);
+}
+
+function pickRange(min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+}
+
+// ─── Plant Database (200+ species across all categories) ─────────────────────
+
+const PLANTS = [
+ // ── Vegetables (Solanaceae) ────────────────────────────────────────────
+ { id: "tomato", commonName: "Tomato", scientificName: "Solanum lycopersicum", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering (1-2 inches/week), well-drained soil pH 6.0-6.8, regular feeding with balanced fertilizer, support with stakes or cages.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Solanum_lycopersicum_-_Tomato.jpg/320px-Solanum_lycopersicum_-_Tomato.jpg" },
+ { id: "pepper", commonName: "Bell Pepper", scientificName: "Capsicum annuum", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, warm soil (70-80°F), well-drained fertile soil pH 6.0-6.8, regular feeding with high-potassium fertilizer during fruiting.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Capsicum_annuum_%27California_Wonder%27.jpg/320px-Capsicum_annuum_%27California_Wonder%27.jpg" },
+ { id: "chili", commonName: "Chili Pepper", scientificName: "Capsicum chinense", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (8h+), consistent watering (not waterlogged), warm temperatures (70-85°F), well-drained fertile soil, high-potassium fertilizer during fruiting.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Capsicum_chinense_%27Habanero%27.jpg/320px-Capsicum_chinense_%27Habanero%27.jpg" },
+ { id: "eggplant", commonName: "Eggplant", scientificName: "Solanum melongena", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent deep watering, warm temperatures (70-85°F), well-drained fertile soil, mulch to retain moisture, stake or cage for support.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Eggplant_01.jpg/320px-Eggplant_01.jpg" },
+ { id: "potato", commonName: "Potato", scientificName: "Solanum tuberosum", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering (1-2 inches/week), cool temperatures (59-70°F), loose well-drained soil pH 4.8-6.5, hill soil around stems as plants grow.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Solanum_tuberosum_002.jpg/320px-Solanum_tuberosum_002.jpg" },
+ { id: "tobacco", commonName: "Tobacco", scientificName: "Nicotiana tabacum", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (6-8h), moderate watering, warm temperatures (65-85°F), well-drained fertile soil, space plants 12-18 inches apart.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/Nicotiana_tabacum1.jpg/320px-Nicotiana_tabacum1.jpg" },
+ { id: "pepper-jalapeno", commonName: "Jalapeño Pepper", scientificName: "Capsicum annuum var. annuum", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (8h+), consistent watering, warm temperatures (70-85°F), well-drained fertile soil, stake for support, harvest when fully colored.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Capsicum_annuum_%27Jalape%C3%B1o%27.jpg/320px-Capsicum_annuum_%27Jalape%C3%B1o%27.jpg" },
+ { id: "pepper-serrano", commonName: "Serrano Pepper", scientificName: "Capsicum annuum var. glabriusculum", family: "Solanaceae", category: "vegetable", careSummary: "Full sun (8h+), moderate watering, warm temperatures (70-85°F), well-drained soil, minimal fertilizer, harvest green or red.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Capsicum_annuum_%27Serrano%27.jpg/320px-Capsicum_annuum_%27Serrano%27.jpg" },
+ { id: "nightshade", commonName: "Garden Nightshade", scientificName: "Solanum nigrum", family: "Solanaceae", category: "vegetable", careSummary: "Partial shade to full sun, moderate watering, adaptable to various soils, self-seeds readily.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Solanum_nigrum_002.jpg/320px-Solanum_nigrum_002.jpg" },
+
+ // ── Vegetables (Cucurbitaceae) ─────────────────────────────────────────
+ { id: "cucumber", commonName: "Cucumber", scientificName: "Cucumis sativus", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent deep watering (1-2 inches/week), warm temperatures (70-95°F), trellis support recommended, mulch to retain moisture.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Cucumis_sativus_002.jpg/320px-Cucumis_sativus_002.jpg" },
+ { id: "squash", commonName: "Summer Squash", scientificName: "Cucurbita pepo", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), deep watering (1-2 inches/week), warm temperatures (65-80°F), well-drained fertile soil, space plants 2-3 feet apart.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Cucurbita_pepo_002.jpg/320px-Cucurbita_pepo_002.jpg" },
+ { id: "zucchini", commonName: "Zucchini", scientificName: "Cucurbita pepo var. cylindrica", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), deep consistent watering (1-2 inches/week), warm temperatures (65-80°F), well-drained fertile soil, harvest when 6-8 inches for best flavor.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Cucurbita_pepo_002.jpg/320px-Cucurbita_pepo_002.jpg" },
+ { id: "winter-squash", commonName: "Winter Squash", scientificName: "Cucurbita maxima", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, warm temperatures (65-80°F), well-drained fertile soil, allow to cure on vine before harvest.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Cucurbita_maxima_002.jpg/320px-Cucurbita_maxima_002.jpg" },
+ { id: "pumpkin", commonName: "Pumpkin", scientificName: "Cucurbita pepo var. maxima", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), deep watering (1-2 inches/week), warm temperatures (65-80°F), well-drained fertile soil, large space requirement (50-100 sq ft per plant).", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Cucurbita_pepo_002.jpg/320px-Cucurbita_pepo_002.jpg" },
+ { id: "watermelon", commonName: "Watermelon", scientificName: "Citrullus lanatus", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (8h+), consistent deep watering, warm temperatures (75-85°F), well-drained sandy loam soil, trellis for bush varieties.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Citrullus_lanatus_002.jpg/320px-Citrullus_lanatus_002.jpg" },
+ { id: "cantaloupe", commonName: "Cantaloupe", scientificName: "Cucumis melo var. cantalupo", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (8h+), moderate watering (reduce before harvest), warm temperatures (70-90°F), well-drained fertile soil, mulch with black plastic for warmer soil.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Cucumis_melo_002.jpg/320px-Cucumis_melo_002.jpg" },
+ { id: "honeydew", commonName: "Honeydew Melon", scientificName: "Cucumis melo var. inodorus", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (8h+), consistent watering, warm temperatures (70-90°F), well-drained fertile soil, allow to ripen on vine until slip ripe.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Cucumis_melo_002.jpg/320px-Cucumis_melo_002.jpg" },
+ { id: "bitter-melon", commonName: "Bitter Melon", scientificName: "Momordica charantia", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, warm temperatures (70-90°F), trellis support, well-drained fertile soil.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Momordica_charantia_002.jpg/320px-Momordica_charantia_002.jpg" },
+ { id: "chayote", commonName: "Chayote", scientificName: "Sechium edule", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun to partial shade, moderate watering, warm temperatures (60-80°F), trellis support, well-drained fertile soil.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Sechium_edule_002.jpg/320px-Sechium_edule_002.jpg" },
+ { id: "acorn-squash", commonName: "Acorn Squash", scientificName: "Cucurbita pepo var. turbinata", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, warm temperatures (65-80°F), well-drained fertile soil, harvest when skin is hard and deep green.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Cucurbita_pepo_%27Acorn%27.jpg/320px-Cucurbita_pepo_%27Acorn%27.jpg" },
+ { id: "butternut-squash", commonName: "Butternut Squash", scientificName: "Cucurbita moschata", family: "Cucurbitaceae", category: "vegetable", careSummary: "Full sun (6-8h), deep watering, warm temperatures (65-80°F), well-drained fertile soil, cure 10 days before storage.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Cucurbita_moschata_002.jpg/320px-Cucurbita_moschata_002.jpg" },
+
+ // ── Vegetables (Brassicaceae) ──────────────────────────────────────────
+ { id: "cabbage", commonName: "Cabbage", scientificName: "Brassica oleracea var. capitata", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent deep watering, cool to moderate temperatures (50-85°F), rich well-drained soil, side-dress with nitrogen mid-season.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Bok_choy.jpg/320px-Bok_choy.jpg" },
+ { id: "broccoli", commonName: "Broccoli", scientificName: "Brassica oleracea var. italica", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, cool temperatures (50-75°F), rich well-drained soil, harvest central head when tight and dark green.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Broccoli_cabbage_flower.jpg/320px-Broccoli_cabbage_flower.jpg" },
+ { id: "cauliflower", commonName: "Cauliflower", scientificName: "Brassica oleracea var. botrytis", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, cool temperatures (55-75°F), rich soil, blanch heads by tying leaves over curd.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Cauliflower_002.jpg/320px-Cauliflower_002.jpg" },
+ { id: "brussels-sprouts", commonName: "Brussels Sprouts", scientificName: "Brassica oleracea var. gemmifera", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, cool temperatures (50-70°F), rich well-drained soil, harvest from bottom up after light frost.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Brussels_sprouts_002.jpg/320px-Brussels_sprouts_002.jpg" },
+ { id: "kale", commonName: "Kale", scientificName: "Brassica oleracea var. sabellica", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun to partial shade, consistent watering, cool temperatures (45-75°F), well-drained fertile soil, harvest outer leaves continuously.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Kale_002.jpg/320px-Kale_002.jpg" },
+ { id: "bok-choy", commonName: "Bok Choy", scientificName: "Brassica rapa var. chinensis", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun to partial shade, consistent moisture, cool temperatures (50-70°F), well-drained fertile soil, harvest when 4-8 inches tall.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/Brassica_rapa_002.jpg/320px-Brassica_rapa_002.jpg" },
+ { id: "radish", commonName: "Radish", scientificName: "Raphanus sativus", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun to partial shade, consistent moisture, cool temperatures (50-70°F), loose well-drained soil, quick maturing (25-30 days).", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Raphanus_sativus_002.jpg/320px-Raphanus_sativus_002.jpg" },
+ { id: "turnip", commonName: "Turnip", scientificName: "Brassica rapa var. rapa", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, cool temperatures (50-70°F), loose well-drained soil, harvest roots when 1-2 inches diameter.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Brassica_rapa_002.jpg/320px-Brassica_rapa_002.jpg" },
+ { id: "arugula", commonName: "Arugula", scientificName: "Eruca vesicaria", family: "Brassicaceae", category: "vegetable", careSummary: "Partial shade to full sun, consistent moisture, cool temperatures (55-65°F), well-drained soil, harvest young leaves for mild flavor.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Eruca_vesicaria_002.jpg/320px-Eruca_vesicaria_002.jpg" },
+ { id: "collard-greens", commonName: "Collard Greens", scientificName: "Brassica oleracea var. acephala", family: "Brassicaceae", category: "vegetable", careSummary: "Full sun (6-8h), consistent watering, cool temperatures (50-80°F), rich well-drained soil, harvest outer leaves continuously.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/d/de/Brassica_oleracea_002.jpg/320px-Brassica_oleracea_002.jpg" },
+
+ // ── Vegetables (Fabaceae / Legumes) ────────────────────────────────────
+ { id: "bean", commonName: "Green Bean", scientificName: "Phaseolus vulgaris", family: "Fabaceae", category: "vegetable", careSummary: "Full sun (6-8h), moderate watering (keep soil evenly moist), warm temperatures (65-80°F), trellis for pole varieties, benefits from nitrogen-fixing roots.", imageUrl: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Phaseolus_vulgaris_003.jpg/320px-Phaseolus_v
\ No newline at end of file
diff --git a/tasks/hyper-specific-plant-disease-id/README.md b/tasks/hyper-specific-plant-disease-id/README.md
index f0e6ebb..74a6d36 100644
--- a/tasks/hyper-specific-plant-disease-id/README.md
+++ b/tasks/hyper-specific-plant-disease-id/README.md
@@ -10,9 +10,9 @@ Status legend: [ ] todo, [~] in-progress, [x] done
- [x] 02 — Plant disease knowledge base schema, seed data, and API endpoints → `02-plant-disease-knowledge-base.md`
- [x] 03 — Image upload component and preprocessing pipeline → `03-image-upload-and-preprocessing.md`
- [x] 04 — ML model loading, inference pipeline, and confidence scoring → `04-ml-model-integration.md`
-- [~] 05 — Results page with disease cards, symptom comparison, and treatment steps → `05-identification-results-page.md`
+- [x] 05 — Results page with disease cards, symptom comparison, and treatment steps → `05-identification-results-page.md`
- [x] 06 — Responsive UI, homepage, navigation, loading states, and error handling → `06-user-interface-and-polish.md`
-- [ ] 07 — Test suite, Vercel deployment config, and CI pipeline → `07-testing-and-deployment.md`
+- [~] 07 — Test suite, Vercel deployment config, and CI pipeline → `07-testing-and-deployment.md`
## Dependencies