diff --git a/.env b/.env deleted file mode 100644 index 7b4ea4b..0000000 --- a/.env +++ /dev/null @@ -1,5 +0,0 @@ -# Houshan AI Platform Environment Configuration -VITE_APP_TITLE="هوشان | دستیار هوش مصنوعی شما" -VITE_APP_DESCRIPTION="پلتفرم جامع هوش مصنوعی فارسی برای مدیران، کسب‌وکارها و متخصصان" -VITE_API_BASE_URL="https://api.houshan.ai" -VITE_WEB_APP_URL="https://web.houshan.ai" diff --git a/.gitignore b/.gitignore index 995a3f4..117d072 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,18 @@ node_modules dist dist-ssr +# Environment variables and secrets +.env +.env.local +.env.*.local +*.pem +*.key + +# Scratch and internal utility scripts with credentials +scratch/ +Dockerfile.wordpress +docker-compose.wordpress.yml + # Large binary user storage and media files (to prevent git 413 payload limit on Gitea) public/storage/user/ public/storage/apk/*.apk diff --git a/index.html b/index.html index fea928f..86ffc62 100644 --- a/index.html +++ b/index.html @@ -1,9 +1,10 @@ - + - + + هوشان | دستیار هوش مصنوعی شما - دستیار هوش مصنوعی مدیران @@ -21,7 +22,7 @@ - +
diff --git a/package-lock.json b/package-lock.json index 35f43a7..2d6bff8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "tailwind-merge": "^3.6.0" }, "devDependencies": { + "@aws-sdk/client-s3": "^3.1116.0", "@tailwindcss/vite": "^4.3.3", "@types/node": "^24.13.3", "@types/react": "^19.2.17", @@ -24,11 +25,338 @@ "autoprefixer": "^10.5.4", "oxlint": "^1.75.0", "postcss": "^8.5.26", + "ssh2": "^1.17.0", "tailwindcss": "^4.3.3", "typescript": "~6.0.2", "vite": "^8.2.0" } }, + "node_modules/@aws-sdk/checksums": { + "version": "3.1000.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/checksums/-/checksums-3.1000.29.tgz", + "integrity": "sha512-Dtu0gr4dnATZAPwEYbpCsG+MpLM7OAliy2gTepEFQwl1vZ6DL3QMH2FveMa3HLvPsOdhJsPRB3KtxVhph9T75A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.1116.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.1116.0.tgz", + "integrity": "sha512-UKRl9qSVW0rZpvSOauQNpYAy8+ONBAVYnpfKVtCyOF+FZVT1tl6MunYuHvuarCrroD2/YJs+tHTALYNgAlec3Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/checksums": "^3.1000.29", + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/credential-provider-node": "^3.972.81", + "@aws-sdk/middleware-sdk-s3": "^3.972.75", + "@aws-sdk/signature-v4-multi-region": "^3.996.46", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/fetch-http-handler": "^5.7.2", + "@smithy/node-http-handler": "^4.11.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.977.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.9.tgz", + "integrity": "sha512-reqPFEQrZxDZpeGj4PFMepBeR5LGYHRqq/L0motTzgFkCRBA4rFdaVXDSLYyGHhxVz7sT2PDnPN9CluGSfgyJA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.5", + "@aws-sdk/xml-builder": "^3.972.40", + "@aws/lambda-invoke-store": "^0.3.0", + "@smithy/core": "^3.33.3", + "@smithy/signature-v4": "^5.6.12", + "@smithy/types": "^4.17.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.70", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.70.tgz", + "integrity": "sha512-H404B7dJl2mCrBqahDEYsanB0xhdDp6tXnXcTUnXmmpy2Q3J0Ho0bUajZ2jr/RdwzCyS59Gi8xXIFwPLGBl6Uw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.72", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.72.tgz", + "integrity": "sha512-X98zYOrVOeuosCX+6ktf29FC2N2GHPLia7qv6mzPzTc+RPAuHWCDS++Z6JK7eGYqb/v6uaW7bAXaOvDBfol+0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/fetch-http-handler": "^5.7.2", + "@smithy/node-http-handler": "^4.11.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.973.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.15.tgz", + "integrity": "sha512-Rykg6s5ceBuynMOGWgoowO4N+27JfnqXAnVaSunZl0hOO1XodSrxGNz6sCEbnmS0lAfQZDKyb3fbr46gSuv6Sg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/credential-provider-env": "^3.972.70", + "@aws-sdk/credential-provider-http": "^3.972.72", + "@aws-sdk/credential-provider-login": "^3.972.77", + "@aws-sdk/credential-provider-process": "^3.972.70", + "@aws-sdk/credential-provider-sso": "^3.973.14", + "@aws-sdk/credential-provider-web-identity": "^3.972.76", + "@aws-sdk/nested-clients": "^3.997.44", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/credential-provider-imds": "^4.4.16", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.77", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.77.tgz", + "integrity": "sha512-Jb59xfEISoN5mmbnA+HYqdtrSX3CgCtJoof+V5D8/TgUI56W63GEEd5Y58WijU3Ou6+WEgaLD1feVzaRXV5IDQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/nested-clients": "^3.997.44", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.81", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.81.tgz", + "integrity": "sha512-Rml+WitoFvXmv6JZ18U/xGdGDGGvB/mOin0ya0lTnTrdC0Z1lrVxTYh7iNklZBcvcRMrs4DoEf6xy1KWyrLQQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.70", + "@aws-sdk/credential-provider-http": "^3.972.72", + "@aws-sdk/credential-provider-ini": "^3.973.15", + "@aws-sdk/credential-provider-process": "^3.972.70", + "@aws-sdk/credential-provider-sso": "^3.973.14", + "@aws-sdk/credential-provider-web-identity": "^3.972.76", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/credential-provider-imds": "^4.4.16", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.70", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.70.tgz", + "integrity": "sha512-2ry03fGRJr4sV3jI+ocjj5JqALnFD6ymM5KiNCDZMvq8bX2GSbE0vji4aM43TVCl2nXqqLRZaUxdq/KeWRAY4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.973.14", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.14.tgz", + "integrity": "sha512-jkhg/8ocAAoc0RFyLMhCw+/zZh7gystQgd4F4hznNa8P4Cc501PQmxd+jGLiMHodPJ+7Zv/3znM62gZojyasmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/nested-clients": "^3.997.44", + "@aws-sdk/token-providers": "3.1116.0", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.76", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.76.tgz", + "integrity": "sha512-d3AGyVu759PGr35mEB2s22xxlNEA5rpdxtSPJthfPFJvoQ8dt357iVPECqWfUxXp1toJAvKmbtcIYVGigaGsCA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/nested-clients": "^3.997.44", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.972.75", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.75.tgz", + "integrity": "sha512-wMIsNumRVKaNMKhvU/s9VrdEwE8S6gSzXp4RygFG5BEMnGkkXf8cjh8zf7cKJBpUDpqTWqwbz5isEgp9rH6Lng==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/signature-v4-multi-region": "^3.996.46", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.997.44", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.44.tgz", + "integrity": "sha512-NhEgryjlBF9w38ZXqGymQV28IhkYa1mKhlbYnqIis57AYwWGVYfUPgg/qC2rLRqOUfblxx++irvju10kVTa8Vw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/signature-v4-multi-region": "^3.996.46", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/fetch-http-handler": "^5.7.2", + "@smithy/node-http-handler": "^4.11.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.46", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.46.tgz", + "integrity": "sha512-L+2xZTye/2T96f3lwCws0Zw6GG2JHZW9e8FpVgGBeeExSKyeoZ6CWRpBml/7DNiK/O26jrgPM9F+Ay8VkgzUWQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.974.5", + "@smithy/signature-v4": "^5.6.12", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.1116.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1116.0.tgz", + "integrity": "sha512-ygIivKqh8aHzNkucOCXHyIBgBpLPfrSI0mCqXF+vLBsPTUKqj0VSqAY0GFPe7lQl4HntjOcQ+KSyS7oUV2C54Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.977.9", + "@aws-sdk/nested-clients": "^3.997.44", + "@aws-sdk/types": "^3.974.5", + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.974.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.5.tgz", + "integrity": "sha512-LkwLL2BLbC6wNNm4JaH9mbEqBMdOZCct6VAYqhdN4U1xrWM+fUJQEfbHwQgDypapOWTRtlk25akb5afM0P8CIQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.40", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.40.tgz", + "integrity": "sha512-wlFmCIGUlwF4zx/kncw+bmxTQh1HeSJq4mYV/V5cZUSJadDP3kXvGW8Rn21cimj/7y9ju+47oYWXi97vF7czaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.3.0.tgz", + "integrity": "sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -674,6 +1002,93 @@ "dev": true, "license": "MIT" }, + "node_modules/@smithy/core": { + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.33.3.tgz", + "integrity": "sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.2.tgz", + "integrity": "sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.2.tgz", + "integrity": "sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.3.tgz", + "integrity": "sha512-2jY1tSpERfPfWqyBV2pH+iGFaghVsIJszJNsT7hxtQYhVJpWDyc0LqOWI+nXOxOAHaEfZ4PXXtp1wW1TGpHhkA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.3.tgz", + "integrity": "sha512-7ImGm+FkHRLcBaRttIAMZ6bzJZWb2cJGoYjq46F2UjycujWzrL9GEN9h4w7eQyXJYnltrUhxbbieBAIRrdqpow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.33.3", + "@smithy/types": "^4.17.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.17.2.tgz", + "integrity": "sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@tailwindcss/node": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", @@ -1267,6 +1682,16 @@ } } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, "node_modules/autoprefixer": { "version": "10.5.4", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", @@ -1317,6 +1742,23 @@ "node": ">=6.0.0" } }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bowser": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "dev": true, + "license": "MIT" + }, "node_modules/browserslist": { "version": "4.28.8", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", @@ -1351,6 +1793,16 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buildcheck": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.7.tgz", + "integrity": "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001809", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz", @@ -1394,6 +1846,21 @@ "url": "https://opencollective.com/express" } }, + "node_modules/cpu-features": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", + "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.19.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -1786,6 +2253,14 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/nan": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.28.0.tgz", + "integrity": "sha512-fTsDz99OTq2sVePhGdp4qQhggZFtKr64ZNVyVajRKtMOkJxYekplBh577PiJB12v/D3s2E5cGtOI45LWp6rnLQ==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.18", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", @@ -2013,6 +2488,13 @@ "@rolldown/binding-win32-x64-msvc": "1.2.5" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", @@ -2035,6 +2517,24 @@ "node": ">=0.10.0" } }, + "node_modules/ssh2": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.17.0.tgz", + "integrity": "sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.10", + "nan": "^2.23.0" + } + }, "node_modules/tailwind-merge": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", @@ -2083,6 +2583,20 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, "node_modules/typescript": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", diff --git a/package.json b/package.json index 0caa05a..1178129 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "tailwind-merge": "^3.6.0" }, "devDependencies": { + "@aws-sdk/client-s3": "^3.1116.0", "@tailwindcss/vite": "^4.3.3", "@types/node": "^24.13.3", "@types/react": "^19.2.17", @@ -26,6 +27,7 @@ "autoprefixer": "^10.5.4", "oxlint": "^1.75.0", "postcss": "^8.5.26", + "ssh2": "^1.17.0", "tailwindcss": "^4.3.3", "typescript": "~6.0.2", "vite": "^8.2.0" diff --git a/public/storage/banner/course_cover_default.jpg b/public/storage/banner/course_cover_default.jpg new file mode 100644 index 0000000..92030c4 Binary files /dev/null and b/public/storage/banner/course_cover_default.jpg differ diff --git a/public/storage/banner/owl_role_analytics.jpg b/public/storage/banner/owl_role_analytics.jpg new file mode 100644 index 0000000..40ce0a5 Binary files /dev/null and b/public/storage/banner/owl_role_analytics.jpg differ diff --git a/public/storage/banner/owl_role_audio.jpg b/public/storage/banner/owl_role_audio.jpg new file mode 100644 index 0000000..6c54edb Binary files /dev/null and b/public/storage/banner/owl_role_audio.jpg differ diff --git a/public/storage/banner/owl_role_creative.jpg b/public/storage/banner/owl_role_creative.jpg new file mode 100644 index 0000000..c69375f Binary files /dev/null and b/public/storage/banner/owl_role_creative.jpg differ diff --git a/public/storage/banner/owl_role_developer.jpg b/public/storage/banner/owl_role_developer.jpg new file mode 100644 index 0000000..e0140d9 Binary files /dev/null and b/public/storage/banner/owl_role_developer.jpg differ diff --git a/public/storage/banner/owl_role_legal.jpg b/public/storage/banner/owl_role_legal.jpg new file mode 100644 index 0000000..d24bceb Binary files /dev/null and b/public/storage/banner/owl_role_legal.jpg differ diff --git a/public/storage/banner/owl_role_strategy.jpg b/public/storage/banner/owl_role_strategy.jpg new file mode 100644 index 0000000..c1602e6 Binary files /dev/null and b/public/storage/banner/owl_role_strategy.jpg differ diff --git a/public/storage/banner/owl_role_writer.jpg b/public/storage/banner/owl_role_writer.jpg new file mode 100644 index 0000000..11a38d8 Binary files /dev/null and b/public/storage/banner/owl_role_writer.jpg differ diff --git a/public/storage/banner/owl_stat_education.jpg b/public/storage/banner/owl_stat_education.jpg new file mode 100644 index 0000000..92030c4 Binary files /dev/null and b/public/storage/banner/owl_stat_education.jpg differ diff --git a/public/storage/banner/owl_stat_enterprise.jpg b/public/storage/banner/owl_stat_enterprise.jpg new file mode 100644 index 0000000..c1602e6 Binary files /dev/null and b/public/storage/banner/owl_stat_enterprise.jpg differ diff --git a/public/storage/banner/owl_stat_speed.jpg b/public/storage/banner/owl_stat_speed.jpg new file mode 100644 index 0000000..64d1294 Binary files /dev/null and b/public/storage/banner/owl_stat_speed.jpg differ diff --git a/public/storage/banner/owl_stat_users.jpg b/public/storage/banner/owl_stat_users.jpg new file mode 100644 index 0000000..aa848fe Binary files /dev/null and b/public/storage/banner/owl_stat_users.jpg differ diff --git a/public/storage/banner/pricing-enterprise-banner.jpg b/public/storage/banner/pricing-enterprise-banner.jpg new file mode 100644 index 0000000..7919b7e Binary files /dev/null and b/public/storage/banner/pricing-enterprise-banner.jpg differ diff --git a/public/storage/banner/pricing-owl-eqtesadi.png b/public/storage/banner/pricing-owl-eqtesadi.png new file mode 100644 index 0000000..b3841db Binary files /dev/null and b/public/storage/banner/pricing-owl-eqtesadi.png differ diff --git a/public/storage/banner/pricing-owl-header.png b/public/storage/banner/pricing-owl-header.png new file mode 100644 index 0000000..9bc3b91 Binary files /dev/null and b/public/storage/banner/pricing-owl-header.png differ diff --git a/public/storage/banner/pricing-owl-payeh.png b/public/storage/banner/pricing-owl-payeh.png new file mode 100644 index 0000000..3a5dc4d Binary files /dev/null and b/public/storage/banner/pricing-owl-payeh.png differ diff --git a/public/storage/banner/pricing-owl-shorou.png b/public/storage/banner/pricing-owl-shorou.png new file mode 100644 index 0000000..bb79495 Binary files /dev/null and b/public/storage/banner/pricing-owl-shorou.png differ diff --git a/public/storage/licenses/مجوز-1-1.jpg b/public/storage/licenses/مجوز-1-1.jpg new file mode 100644 index 0000000..2a9c118 Binary files /dev/null and b/public/storage/licenses/مجوز-1-1.jpg differ diff --git a/public/storage/licenses/مجوز-1.jpg b/public/storage/licenses/مجوز-1.jpg new file mode 100644 index 0000000..b5f66af Binary files /dev/null and b/public/storage/licenses/مجوز-1.jpg differ diff --git a/public/storage/licenses/مجوز-2.jpg b/public/storage/licenses/مجوز-2.jpg new file mode 100644 index 0000000..2166a0a Binary files /dev/null and b/public/storage/licenses/مجوز-2.jpg differ diff --git a/public/storage/licenses/مجوز-3.jpg b/public/storage/licenses/مجوز-3.jpg new file mode 100644 index 0000000..fbac21e Binary files /dev/null and b/public/storage/licenses/مجوز-3.jpg differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-100x100.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-100x100.png new file mode 100644 index 0000000..007817b Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-100x100.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1024x1024.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1024x1024.png new file mode 100644 index 0000000..02db070 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1024x1024.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1320x1320.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1320x1320.png new file mode 100644 index 0000000..5b3ceb9 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1320x1320.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-150x150.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-150x150.png new file mode 100644 index 0000000..2638ec6 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-150x150.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1536x1536.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1536x1536.png new file mode 100644 index 0000000..c0b6271 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-1536x1536.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-300x300.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-300x300.png new file mode 100644 index 0000000..199ba82 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-300x300.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-600x600.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-600x600.png new file mode 100644 index 0000000..55362e5 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-600x600.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-64x64.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-64x64.png new file mode 100644 index 0000000..60191e7 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-64x64.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-768x768.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-768x768.png new file mode 100644 index 0000000..c7ad0e4 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور-768x768.png differ diff --git a/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور.png b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور.png new file mode 100644 index 0000000..525d442 Binary files /dev/null and b/public/storage/licenses/مجوز-فعالیت-از-نظام-صنفی-رایانه_ای-کشور.png differ diff --git a/public/storage/licenses/مجوزهای-ما-100x100.png b/public/storage/licenses/مجوزهای-ما-100x100.png new file mode 100644 index 0000000..a3642eb Binary files /dev/null and b/public/storage/licenses/مجوزهای-ما-100x100.png differ diff --git a/public/storage/licenses/مجوزهای-ما-150x150.png b/public/storage/licenses/مجوزهای-ما-150x150.png new file mode 100644 index 0000000..cdea0c5 Binary files /dev/null and b/public/storage/licenses/مجوزهای-ما-150x150.png differ diff --git a/public/storage/licenses/مجوزهای-ما-300x300.png b/public/storage/licenses/مجوزهای-ما-300x300.png new file mode 100644 index 0000000..4ba47fb Binary files /dev/null and b/public/storage/licenses/مجوزهای-ما-300x300.png differ diff --git a/public/storage/licenses/مجوزهای-ما-64x64.png b/public/storage/licenses/مجوزهای-ما-64x64.png new file mode 100644 index 0000000..73925fa Binary files /dev/null and b/public/storage/licenses/مجوزهای-ما-64x64.png differ diff --git a/public/storage/licenses/مجوزهای-ما.png b/public/storage/licenses/مجوزهای-ما.png new file mode 100644 index 0000000..c8acdbe Binary files /dev/null and b/public/storage/licenses/مجوزهای-ما.png differ diff --git a/public/storage/partners/ROZET-1.png-100x100.jpg b/public/storage/partners/ROZET-1.png-100x100.jpg new file mode 100644 index 0000000..127bbe5 Binary files /dev/null and b/public/storage/partners/ROZET-1.png-100x100.jpg differ diff --git a/public/storage/partners/ROZET-1.png-1024x664.jpg b/public/storage/partners/ROZET-1.png-1024x664.jpg new file mode 100644 index 0000000..e66b71a Binary files /dev/null and b/public/storage/partners/ROZET-1.png-1024x664.jpg differ diff --git a/public/storage/partners/ROZET-1.png-1320x856.jpg b/public/storage/partners/ROZET-1.png-1320x856.jpg new file mode 100644 index 0000000..d9d4b02 Binary files /dev/null and b/public/storage/partners/ROZET-1.png-1320x856.jpg differ diff --git a/public/storage/partners/ROZET-1.png-150x150.jpg b/public/storage/partners/ROZET-1.png-150x150.jpg new file mode 100644 index 0000000..2c816c8 Binary files /dev/null and b/public/storage/partners/ROZET-1.png-150x150.jpg differ diff --git a/public/storage/partners/ROZET-1.png-1536x996.jpg b/public/storage/partners/ROZET-1.png-1536x996.jpg new file mode 100644 index 0000000..757e0d8 Binary files /dev/null and b/public/storage/partners/ROZET-1.png-1536x996.jpg differ diff --git a/public/storage/partners/ROZET-1.png-300x195.jpg b/public/storage/partners/ROZET-1.png-300x195.jpg new file mode 100644 index 0000000..6768c86 Binary files /dev/null and b/public/storage/partners/ROZET-1.png-300x195.jpg differ diff --git a/public/storage/partners/ROZET-1.png-300x300.jpg b/public/storage/partners/ROZET-1.png-300x300.jpg new file mode 100644 index 0000000..0412b9b Binary files /dev/null and b/public/storage/partners/ROZET-1.png-300x300.jpg differ diff --git a/public/storage/partners/ROZET-1.png-600x389.jpg b/public/storage/partners/ROZET-1.png-600x389.jpg new file mode 100644 index 0000000..1ffbb0e Binary files /dev/null and b/public/storage/partners/ROZET-1.png-600x389.jpg differ diff --git a/public/storage/partners/ROZET-1.png-64x42.jpg b/public/storage/partners/ROZET-1.png-64x42.jpg new file mode 100644 index 0000000..e9b2d62 Binary files /dev/null and b/public/storage/partners/ROZET-1.png-64x42.jpg differ diff --git a/public/storage/partners/ROZET-1.png-768x498.jpg b/public/storage/partners/ROZET-1.png-768x498.jpg new file mode 100644 index 0000000..34b2612 Binary files /dev/null and b/public/storage/partners/ROZET-1.png-768x498.jpg differ diff --git a/public/storage/partners/ROZET-1.png-unsmushed.jpg b/public/storage/partners/ROZET-1.png-unsmushed.jpg new file mode 100644 index 0000000..420f64f Binary files /dev/null and b/public/storage/partners/ROZET-1.png-unsmushed.jpg differ diff --git a/public/storage/partners/ROZET-1.png.jpg b/public/storage/partners/ROZET-1.png.jpg new file mode 100644 index 0000000..222ab93 Binary files /dev/null and b/public/storage/partners/ROZET-1.png.jpg differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-100x100.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-100x100.png new file mode 100644 index 0000000..684e5d1 Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-100x100.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-1024x466.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-1024x466.png new file mode 100644 index 0000000..04c3e68 Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-1024x466.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-1320x600.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-1320x600.png new file mode 100644 index 0000000..73ca513 Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-1320x600.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-150x150.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-150x150.png new file mode 100644 index 0000000..b618f1c Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-150x150.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-1536x698.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-1536x698.png new file mode 100644 index 0000000..dd59bbd Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-1536x698.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-300x136.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-300x136.png new file mode 100644 index 0000000..9ecfc9d Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-300x136.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-300x300.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-300x300.png new file mode 100644 index 0000000..146982d Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-300x300.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-600x273.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-600x273.png new file mode 100644 index 0000000..8e031b3 Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-600x273.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-64x29.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-64x29.png new file mode 100644 index 0000000..ffe1be3 Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-64x29.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-768x349.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-768x349.png new file mode 100644 index 0000000..53886bf Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-768x349.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh-unsmushed.png b/public/storage/partners/arm-jpg-foolad-mobarakeh-unsmushed.png new file mode 100644 index 0000000..1990b9d Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh-unsmushed.png differ diff --git a/public/storage/partners/arm-jpg-foolad-mobarakeh.png b/public/storage/partners/arm-jpg-foolad-mobarakeh.png new file mode 100644 index 0000000..0f18dac Binary files /dev/null and b/public/storage/partners/arm-jpg-foolad-mobarakeh.png differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-100x100.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-100x100.jpg new file mode 100644 index 0000000..433b7c3 Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-100x100.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-1024x508.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-1024x508.jpg new file mode 100644 index 0000000..d3492c5 Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-1024x508.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-150x150.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-150x150.jpg new file mode 100644 index 0000000..2a6ddd4 Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-150x150.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-300x149.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-300x149.jpg new file mode 100644 index 0000000..9a4452a Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-300x149.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-300x300.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-300x300.jpg new file mode 100644 index 0000000..8c873a3 Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-300x300.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-600x298.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-600x298.jpg new file mode 100644 index 0000000..dd66836 Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-600x298.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-64x32.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-64x32.jpg new file mode 100644 index 0000000..c787943 Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-64x32.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_-768x381.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-768x381.jpg new file mode 100644 index 0000000..07bf99b Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_-768x381.jpg differ diff --git a/public/storage/partners/فولاد-هرمزگان_hosco.ir_.jpg b/public/storage/partners/فولاد-هرمزگان_hosco.ir_.jpg new file mode 100644 index 0000000..fd43377 Binary files /dev/null and b/public/storage/partners/فولاد-هرمزگان_hosco.ir_.jpg differ diff --git a/public/storage/team/1-768x768.webp b/public/storage/team/1-768x768.webp new file mode 100644 index 0000000..5e0f03c Binary files /dev/null and b/public/storage/team/1-768x768.webp differ diff --git a/public/storage/team/10-768x768.webp b/public/storage/team/10-768x768.webp new file mode 100644 index 0000000..8f6dc42 Binary files /dev/null and b/public/storage/team/10-768x768.webp differ diff --git a/public/storage/team/11.webp b/public/storage/team/11.webp new file mode 100644 index 0000000..d4a389c Binary files /dev/null and b/public/storage/team/11.webp differ diff --git a/public/storage/team/12.webp b/public/storage/team/12.webp new file mode 100644 index 0000000..f534cd6 Binary files /dev/null and b/public/storage/team/12.webp differ diff --git a/public/storage/team/13.webp b/public/storage/team/13.webp new file mode 100644 index 0000000..b862e4c Binary files /dev/null and b/public/storage/team/13.webp differ diff --git a/public/storage/team/14-768x768.webp b/public/storage/team/14-768x768.webp new file mode 100644 index 0000000..c2c7c90 Binary files /dev/null and b/public/storage/team/14-768x768.webp differ diff --git a/public/storage/team/15-768x768.webp b/public/storage/team/15-768x768.webp new file mode 100644 index 0000000..2b6baa4 Binary files /dev/null and b/public/storage/team/15-768x768.webp differ diff --git a/public/storage/team/2-768x768.webp b/public/storage/team/2-768x768.webp new file mode 100644 index 0000000..46f693a Binary files /dev/null and b/public/storage/team/2-768x768.webp differ diff --git a/public/storage/team/21.webp b/public/storage/team/21.webp new file mode 100644 index 0000000..48fd33d Binary files /dev/null and b/public/storage/team/21.webp differ diff --git a/public/storage/team/22.webp b/public/storage/team/22.webp new file mode 100644 index 0000000..1c34508 Binary files /dev/null and b/public/storage/team/22.webp differ diff --git a/public/storage/team/4.webp b/public/storage/team/4.webp new file mode 100644 index 0000000..982f363 Binary files /dev/null and b/public/storage/team/4.webp differ diff --git a/public/storage/team/5.webp b/public/storage/team/5.webp new file mode 100644 index 0000000..b779c6d Binary files /dev/null and b/public/storage/team/5.webp differ diff --git a/public/storage/team/8-768x768.webp b/public/storage/team/8-768x768.webp new file mode 100644 index 0000000..3eb4190 Binary files /dev/null and b/public/storage/team/8-768x768.webp differ diff --git a/public/storage/team/9-768x768.webp b/public/storage/team/9-768x768.webp new file mode 100644 index 0000000..30b08f9 Binary files /dev/null and b/public/storage/team/9-768x768.webp differ diff --git a/src/App.tsx b/src/App.tsx index 9bcf87d..e900964 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -15,8 +15,28 @@ import { Blog } from './pages/Blog'; import { BlogPost } from './pages/BlogPost'; import { About } from './pages/About'; import { Contact } from './pages/Contact'; -import { ChatPlayground } from './pages/ChatPlayground'; import { Privacy } from './pages/Privacy'; +import { Story } from './pages/Story'; +import { Team } from './pages/Team'; +import { Partners } from './pages/Partners'; +import { Careers } from './pages/Careers'; +import { Licenses } from './pages/Licenses'; + +// External redirect helper component +const ExternalRedirect: React.FC<{ url: string }> = ({ url }) => { + React.useEffect(() => { + window.location.replace(url); + }, [url]); + + return ( +
+
+
+

در حال انتقال به وب‌اپلیکیشن هوشان (web.houshan.ai)...

+
+
+ ); +}; // Scroll to top helper component const ScrollToTop: React.FC = () => { @@ -32,27 +52,53 @@ const ScrollToTop: React.FC = () => { export const App: React.FC = () => { const [isAuthOpen, setIsAuthOpen] = useState(false); + const handleOpenAuth = () => { + window.open('https://web.houshan.ai', '_blank'); + }; + return ( -
- setIsAuthOpen(true)} /> +
+
- setIsAuthOpen(true)} />} /> - } /> - } /> - setIsAuthOpen(true)} />} /> + } /> + } /> + } /> + } /> } /> } /> } /> } /> + + {/* Houshan+ (هوشان +) Dropdown Routes */} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> - } /> } /> - setIsAuthOpen(true)} />} /> + + {/* Redirect /chat, /login, /register, /auth, /app to web.houshan.ai */} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + } />
diff --git a/src/components/common/AuthModal.tsx b/src/components/common/AuthModal.tsx index 3b77e9b..66b4368 100644 --- a/src/components/common/AuthModal.tsx +++ b/src/components/common/AuthModal.tsx @@ -33,11 +33,8 @@ export const AuthModal: React.FC = ({ isOpen, onClose }) => { setLoading(false); setStep('success'); setTimeout(() => { - onClose(); - setStep('phone'); - setPhoneNumber(''); - setOtpCode(''); - }, 1500); + window.location.href = 'https://web.houshan.ai'; + }, 1000); }, 600); }; @@ -109,7 +106,13 @@ export const AuthModal: React.FC = ({ isOpen, onClose }) => { )} -
+
+ + انتقال مستقیم به وب‌اپلیکیشن هوشان (web.houshan.ai) ← + ورود شما به معنای پذیرش شرایط و قوانین هوشان است. diff --git a/src/components/common/ModelIcon.tsx b/src/components/common/ModelIcon.tsx new file mode 100644 index 0000000..03e6ad1 --- /dev/null +++ b/src/components/common/ModelIcon.tsx @@ -0,0 +1,226 @@ +import React from 'react'; + +interface ModelIconProps { + provider: string; + name?: string; + className?: string; +} + +export const ModelIcon: React.FC = ({ provider, name = '', className = 'w-7 h-7' }) => { + const p = provider.toLowerCase(); + const n = name.toLowerCase(); + + // OpenAI (GPT-4o, o1, o3-mini, GPT-4.5) + if (p.includes('openai') || n.includes('gpt') || n.includes('o1') || n.includes('o3') || n.includes('sora')) { + return ( +
+ OpenAI +
+ ); + } + + // Anthropic (Claude 3.7 Sonnet, 3.5 Sonnet, 3.5 Haiku, Opus) + if (p.includes('anthropic') || n.includes('claude')) { + return ( +
+ Anthropic Claude +
+ ); + } + + // Google (Gemini 2.0 Flash, Gemini 2.0 Pro, Gemini 1.5 Pro, Veo) + if (p.includes('google') || n.includes('gemini') || n.includes('veo')) { + return ( +
+ Google Gemini +
+ ); + } + + // DeepSeek (R1, V3, Coder) + if (p.includes('deepseek') || n.includes('deepseek')) { + return ( +
+ DeepSeek +
+ ); + } + + // Meta (Llama 3.3, 3.1 405B) - Official Meta Infinity Vector + if (p.includes('meta') || n.includes('llama')) { + return ( +
+ + + + + + + + + + + +
+ ); + } + + // Mistral AI (Mistral Large 2, Codestral, Pixtral Large) - Official Orange Pixel Staircase + if (p.includes('mistral') || n.includes('codestral') || n.includes('pixtral')) { + return ( +
+ + + + + + + +
+ ); + } + + // xAI Grok (Grok 3, Grok 2) - Official Slash-X + if (p.includes('xai') || n.includes('grok')) { + return ( +
+ + + +
+ ); + } + + // Alibaba Qwen (Qwen 2.5 Max, Qwen 2.5 Coder) - Official Hexagonal Prism + if (p.includes('qwen') || p.includes('alibaba') || n.includes('qwen')) { + return ( +
+ + + + + +
+ ); + } + + // Moonshot AI / Kimi (Kimi k1.5, Moonshot v1) - Official Moonshot K Icon + if (p.includes('kimi') || p.includes('moonshot') || n.includes('kimi') || n.includes('moonshot')) { + return ( +
+ + + +
+ ); + } + + // Perplexity (Sonar Deep Research) - Official Asterisk Loop + if (p.includes('perplexity') || n.includes('sonar')) { + return ( +
+ + + + + + + +
+ ); + } + + // Black Forest Labs (FLUX 1.1 Pro, FLUX Schnell) + if (p.includes('flux') || p.includes('black forest') || n.includes('flux')) { + return ( +
+ Flux +
+ ); + } + + // Midjourney v6.1 - Official Sailboat + if (p.includes('midjourney') || n.includes('midjourney')) { + return ( +
+ + + + + + +
+ ); + } + + // Ideogram 2.0 + if (p.includes('ideogram') || n.includes('ideogram')) { + return ( +
+ Ideogram +
+ ); + } + + // Runway (Gen-3 Alpha) - Official Vector R + if (p.includes('runway') || n.includes('runway') || n.includes('gen-3')) { + return ( +
+ + + +
+ ); + } + + // Suno AI (Suno v4) - Official Soundwave Vector + if (p.includes('suno') || n.includes('suno')) { + return ( +
+ + + + + + + +
+ ); + } + + // ElevenLabs (Multilingual v2) - Official Dual Bars + if (p.includes('elevenlabs') || p.includes('eleven') || n.includes('elevenlabs')) { + return ( +
+ + + + +
+ ); + } + + // Default Fallback + return ( +
+ Houshan AI +
+ ); +}; diff --git a/src/components/home/CTASection.tsx b/src/components/home/CTASection.tsx index 1ba1c38..4b2df38 100644 --- a/src/components/home/CTASection.tsx +++ b/src/components/home/CTASection.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { Download, Smartphone, Globe, Sparkles, ArrowLeft, CheckCircle2 } from 'lucide-react'; -import siteInfo from '../../data/siteInfo.json'; +import { Download, Smartphone, Globe, Sparkles, CheckCircle2 } from 'lucide-react'; interface CTASectionProps { onOpenAuth?: () => void; @@ -8,70 +7,63 @@ interface CTASectionProps { export const CTASection: React.FC = ({ onOpenAuth }) => { return ( -
+
-
-
-
- -
- - همین حالا به جمع هزاران کاربر هوشان بپیوندید -
- -

+
+ +

همین حالا هوشانی شو!

-

+

دسترسی بدون محدودیت به دستیارهای هوشمند در موبایل، تبلت و کامپیوتر. اپلیکیشن رسمی هوشان را دریافت کنید یا مستقیماً در مرورگر شروع کنید.

{/* Download & Platform Buttons */} {/* Trust Features */} -
+
- + بدون نیاز به فیلترشکن - + اتصال پرسرعت به سرورهای داخلی - + پشتیبانی ۷ روز هفته
diff --git a/src/components/home/CoursesSection.tsx b/src/components/home/CoursesSection.tsx index 3bbf2de..efccb0a 100644 --- a/src/components/home/CoursesSection.tsx +++ b/src/components/home/CoursesSection.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { Link } from 'react-router-dom'; -import { GraduationCap, BookOpen, Clock, Users, ArrowLeft, CheckCircle } from 'lucide-react'; +import { GraduationCap, BookOpen, Clock, Users, ArrowLeft, Sparkles, CheckCircle2 } from 'lucide-react'; import coursesData from '../../data/courses.json'; export const CoursesSection: React.FC = () => { @@ -13,13 +13,12 @@ export const CoursesSection: React.FC = () => { }); return ( -
+
{/* Header */}
-

- +

آموزش هوش مصنوعی

@@ -27,94 +26,91 @@ export const CoursesSection: React.FC = () => {
-

+

از مبانی تا تکنیک‌های پیشرفته پرامپت‌نویسی و پیاده‌سازی هوش مصنوعی در کسب‌وکارها با آکادمی هوشان

- - {/* Individual vs Enterprise Toggle Buttons */} -
- - - -

- {/* Courses Grid */} -
+ {/* Courses Grid with Cover Images */} +
{filteredCourses.slice(0, 3).map((course) => (
-
-
- - {course.category} - - - - {course.hours} - +
+ {/* Course Cover Image Banner */} +
+ {course.title} +
+ + {/* Category Pill on Image */} +
+ + {course.category} + +
+ + {/* Duration Badge */} +
+ + {course.hours} +
+ + {/* Level Tag */} +
+ {course.level} +
-

- {course.title} -

-

- {course.excerpt || course.description.slice(0, 150) + '...'} -

+ {/* Course Details Content */} +
+

+ {course.title} +

-
- - مخاطبان: {course.audience} +

+ {course.excerpt && course.excerpt !== '...' ? course.excerpt : course.description.slice(0, 140) + '...'} +

+ +
+ + مخاطبان: {course.audience} +
-
+ {/* Card Footer with Price and Action */} +
- شهریه دوره: - {course.price} + شهریه دوره: + {course.price}
+ مشاهده دوره - +
))}
+ {/* Bottom CTA */}
- - مشاهده همه دوره‌های آموزشی + + مشاهده همه دوره‌های آموزشی ({coursesData.length} دوره)
diff --git a/src/components/home/EnterpriseHighlight.tsx b/src/components/home/EnterpriseHighlight.tsx index 59a79ce..a992394 100644 --- a/src/components/home/EnterpriseHighlight.tsx +++ b/src/components/home/EnterpriseHighlight.tsx @@ -3,8 +3,6 @@ import { Link } from 'react-router-dom'; import { Building2, TrendingUp, - Database, - Bot, ShieldCheck, ArrowLeft, GraduationCap, @@ -42,43 +40,35 @@ export const EnterpriseHighlight: React.FC = () => { ]; return ( -
- {/* Decorative Glow */} -
- +
{/* Left Column: Heading & CTA */}
-
- - راهکارهای سازمانی هوشان -
- -

+

تحول دیجیتال و رشد بهره‌وری سازمان با هوش مصنوعی

-

+

سازمان‌ها برای ماندگاری و پیشگامی نیازمند ارتقای مهارت‌های نیروها (Upskilling) و هوشمندسازی فرآیندهای عملیاتی هستند. تیم متخصصین هوشان آماده ارائه راهکارهای سفارشی و آموزش‌های جامع سازمانی است.

-
- +
+
-

دوره‌های آموزشی سازمانی هوشان

-

۱۸ دوره تخصصی برای بازمهارت‌آموزی مدیران و کارکنان

+

دوره‌های آموزشی سازمانی هوشان

+

۱۸ دوره تخصصی برای بازمهارت‌آموزی مدیران و کارکنان

-
- +
+
-

مشاوره تخصصی و طراحی سفارشی

-

تحلیل چالش‌های سازمان و طراحی نقشه راه هوش مصنوعی

+

مشاوره تخصصی و طراحی سفارشی

+

تحلیل چالش‌های سازمان و طراحی نقشه راه هوش مصنوعی

@@ -86,7 +76,7 @@ export const EnterpriseHighlight: React.FC = () => {
درخواست جلسه مشاوره سازمانی @@ -94,7 +84,7 @@ export const EnterpriseHighlight: React.FC = () => { مشاهده دوره‌ها @@ -108,23 +98,23 @@ export const EnterpriseHighlight: React.FC = () => { return (
-
+
- + {srv.badge}
-

+

{srv.title}

-

+

{srv.desc}

diff --git a/src/components/home/FAQSection.tsx b/src/components/home/FAQSection.tsx index 8dd4309..1fc897c 100644 --- a/src/components/home/FAQSection.tsx +++ b/src/components/home/FAQSection.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { HelpCircle, ChevronDown, Sparkles } from 'lucide-react'; +import { HelpCircle, ChevronDown } from 'lucide-react'; export const FAQSection: React.FC = () => { const [openIdx, setOpenIdx] = useState(0); @@ -24,12 +24,12 @@ export const FAQSection: React.FC = () => { ]; return ( -
+

- + سوالات متداول

@@ -37,7 +37,7 @@ export const FAQSection: React.FC = () => {
-

+

پاسخ به سوالات پرتکرار شما درباره نحوه کار، اشتراک‌ها و قابلیت‌های هوشان

@@ -48,18 +48,18 @@ export const FAQSection: React.FC = () => { return (
{isOpen && ( -
+
{item.a}
)} diff --git a/src/components/home/Hero.tsx b/src/components/home/Hero.tsx index 88ac42f..94ce3c9 100644 --- a/src/components/home/Hero.tsx +++ b/src/components/home/Hero.tsx @@ -1,12 +1,12 @@ import React from 'react'; interface HeroProps { - onOpenAuth: () => void; + onOpenAuth?: () => void; } export const Hero: React.FC = ({ onOpenAuth }) => { return ( -
+
@@ -14,12 +14,12 @@ export const Hero: React.FC = ({ onOpenAuth }) => {
{/* Main Brand Title */} -

+

هوشان؛

{/* Subtitle */} -

+

دستیار هوش مصنوعی شما

@@ -54,10 +54,11 @@ export const Hero: React.FC = ({ onOpenAuth }) => { /> - {/* 3. Web App / iOS */} - + {/* 4. Direct Android Download */} - 🏛️ دستیار هوشان + + Houshan + دستیار هوشان +
@@ -178,32 +181,32 @@ $$\\min \\sum_{i,j} c_{ij} x_{ij} + \\lambda \\cdot E(traffic)$$
{/* Floating AI Feature Badges */} -
- 🎬 +
+ Video Owl
تولید ویدیو متن و تصویر به ویدیو
-
- 🎨 +
+ Image Owl
استودیو تصویر کیفیت 4K و روتوش
-
- 🎙️ +
+ Audio Owl
صوت و موسیقی تولید آهنگ و TTS
-
- 🧠 +
+ Reasoning Owl
استدلال عمیق GPT-4o & DeepSeek R1 diff --git a/src/components/home/LatestArticles.tsx b/src/components/home/LatestArticles.tsx index 055d525..89318dc 100644 --- a/src/components/home/LatestArticles.tsx +++ b/src/components/home/LatestArticles.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { Link } from 'react-router-dom'; -import { BookOpen, Calendar, Clock, ArrowLeft, Wand2, Cpu, TrendingUp, HelpCircle, Bot } from 'lucide-react'; +import { BookOpen, Calendar, Clock, ArrowLeft } from 'lucide-react'; import postsData from '../../data/posts.json'; import { getCategoryCover } from '../../pages/Blog'; @@ -9,48 +9,43 @@ export const LatestArticles: React.FC = () => { const [imgErrors, setImgErrors] = useState>({}); return ( -
+
{/* Section Header */}
-
- - رسانه و مقالات تخصصی هوشان -
-

+

آخرین تحلیل‌ها و آموزش‌های هوش مصنوعی

-

+

از آموزش پرامپت‌نویسی اصولی تا بررسی جدیدترین ترندهای هوش مصنوعی و کاربردهای صنعتی، در بیش از ۱۰۰ مقاله به‌روز.

- مشاهده همه مقالات ({postsData.length} مقاله) - + مشاهده همه مقالات (بیش از ۱۰۰ مقاله) +
{/* Articles Grid */}
{featuredPosts.map((post) => { - const theme = getCategoryCover(post.categories[0] || ''); - const Icon = theme.icon; + const meta = getCategoryCover(post.categories[0] || ''); const hasImg = post.thumbnail && !imgErrors[post.id]; return (
{/* Cover */} -
+
{hasImg ? ( <> { className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500" onError={() => setImgErrors(prev => ({ ...prev, [post.id]: true }))} /> -
- + {post.categories[0] || 'هوش مصنوعی'}
) : ( -
-
- - {post.categories[0] || 'هوش مصنوعی'} - -
- -
-
-
- #HOUSHAN_AI -

{post.title}

-
+
+ Houshan
)}
{/* Content */}
-
+
- + {post.date} - + {post.readTime}
-

+

{post.title}

-

+

{post.excerpt}

{/* Read More Link */} -
+
مطالعه کامل مقاله diff --git a/src/components/home/ModelsSection.tsx b/src/components/home/ModelsSection.tsx index ebf96df..be7583c 100644 --- a/src/components/home/ModelsSection.tsx +++ b/src/components/home/ModelsSection.tsx @@ -1,145 +1,125 @@ import React from 'react'; import { Link } from 'react-router-dom'; -import { Cpu, Zap, ArrowLeft, Check, Sparkles, Star, Gauge } from 'lucide-react'; +import { Cpu, ArrowLeft, Check, Sparkles } from 'lucide-react'; import modelsData from '../../data/models.json'; +import { ModelIcon } from '../common/ModelIcon'; export const ModelsSection: React.FC = () => { - return ( -
- {/* Background Glow */} -
+ // Get subtle gradient theme for card header by provider + const getProviderTheme = (provider: string) => { + const p = provider.toLowerCase(); + if (p.includes('anthropic')) return 'from-amber-500/10 via-orange-500/5 to-transparent'; + if (p.includes('openai')) return 'from-emerald-500/10 via-teal-500/5 to-transparent'; + if (p.includes('google')) return 'from-sky-500/10 via-blue-500/5 to-transparent'; + if (p.includes('deepseek')) return 'from-blue-600/10 via-indigo-500/5 to-transparent'; + if (p.includes('xai')) return 'from-slate-800/10 via-slate-700/5 to-transparent'; + return 'from-sky-500/10 via-slate-500/5 to-transparent'; + }; + return ( +
{/* Section Header */}
-
- - پیشرفته‌ترین مدل‌های زبانی هوش مصنوعی دنیا -
-

+

دسترسی به غول‌های هوش مصنوعی در هوشان

-

- بدون نیاز به تحریم‌شکن، سیم‌کارت خارجی یا پرداخت ارزی، با پیشرفته‌ترین مدل‌های GPT-4o، Claude 3.5 Sonnet و Gemini با بالاترین کیفیت زبان فارسی گفتگو کنید. +

+ بدون نیاز به تحریم‌شکن، سیم‌کارت خارجی یا پرداخت ارزی، با پیشرفته‌ترین مدل‌های Claude 3.7 Sonnet، Grok 3، DeepSeek R1 و GPT-4o با بالاترین کیفیت زبان فارسی گفتگو کنید.

- {/* Models Grid */} -
- {modelsData.map((model) => ( -
-
- - {/* Header */} -
-
- {model.provider === 'OpenAI' && ( -
- OpenAI + {/* Models Grid with Premium Animated Cards */} +
+ {modelsData.slice(0, 6).map((model) => { + const providerTheme = getProviderTheme(model.provider); + + return ( +
+
+ {/* Card Top Header Banner with Gradient Background */} +
+ +
+
+ +
- )} - {model.provider === 'Anthropic' && ( -
- Anthropic +
+ + {model.name} + + + {model.provider} +
- )} - {model.provider === 'Google' && ( -
- Google -
- )} - {model.provider === 'DeepSeek' && ( -
- DeepSeek -
- )} - {model.provider === 'Meta' && ( -
- -
- )} -
- - {model.name} - - - {model.provider} -
+ + {model.badge && ( + + {model.badge} + + )}
- {model.badge && ( - - {model.badge} - - )} -
+ {/* Card Body */} +
+

+ {model.description} +

-

- {model.description} -

+ {/* Context Window Spec Bar */} +
+ پنجره زمینه (Context): + {model.contextWindow} +
- {/* Specs Bar */} -
-
- پنجره زمینه (Context): - {model.contextWindow} -
-
- امتیاز هوش: -
-
-
-
- {model.intelligenceScore}% + {/* Strengths */} +
+ ویژگی‌های برجسته: + {model.strengths.slice(0, 3).map((st, i) => ( +
+
+ +
+ {st} +
+ ))}
- {/* Strengths */} -
- ویژگی‌های برجسته: - {model.strengths.slice(0, 3).map((st, i) => ( -
- - {st} -
- ))} + {/* Action Button */} +
- - {/* Action Button */} -
- - - شروع گفتگو با {model.name} - -
- -
- ))} + ); + })}
{/* Bottom CTA */}
- مقایسه جامع مشخصات و بنچمارک تمام مدل‌ها - + مشاهده و مقایسه تمام {modelsData.length} مدل هوش مصنوعی +
diff --git a/src/components/home/MonetizationSection.tsx b/src/components/home/MonetizationSection.tsx index 105f109..c84fc3a 100644 --- a/src/components/home/MonetizationSection.tsx +++ b/src/components/home/MonetizationSection.tsx @@ -1,40 +1,90 @@ import React from 'react'; -import { Link } from 'react-router-dom'; -import { DollarSign, Wand2, Share2, Wallet, ArrowLeft, Sparkles, CheckCircle2 } from 'lucide-react'; +import { + DollarSign, + Wand2, + Share2, + Wallet, + ArrowLeft, + Sparkles, + CheckCircle2, + TrendingUp, + Zap, + ShieldCheck, + CreditCard, + Users +} from 'lucide-react'; export const MonetizationSection: React.FC = () => { const steps = [ { - step: '۱', + step: '۰۱', title: 'طراحی دستیار اختصاصی', - desc: 'بدون نیاز به یک خط کدنویسی، پرامپت و تخصص دلخواه خود را تعیین کنید و دستیار هوشمندتان را بسازید.', - icon: Wand2, - badge: 'ساده و سریع' + desc: 'بدون نیاز به دانش کدنویسی، تخصص و رفتار هوش مصنوعی خود را با چند دستور متنی ساده طراحی و شخصی‌سازی کنید.', + image: '/storage/banner/owl_role_developer.jpg', + badge: 'ساده و بدون کدنویسی', + features: [ + 'تعریف شخصیت و حیطه دانش ربات', + 'آپلود فایل‌ها و مستندات راهنما (RAG)', + 'پشتیبانی از تمام مدل‌های پیشرفته' + ], + tagColor: 'bg-indigo-50 text-[#272757] border-indigo-200' }, { - step: '۲', + step: '۰۲', title: 'انتشار در ویترین هوشان', - desc: 'دستیار خود را به عنوان یک ابزار عمومی یا تخصصی در دسترس هزاران کاربر فعال هوشان قرار دهید.', - icon: Share2, - badge: 'دیده‌شدن حداکثری' + desc: 'دستیار خود را در مارکت‌پلیس عمومی یا تخصصی هوشان با نام و برند خودتان برای بیش از ۵۰,۰۰۰ کاربر فعال منتشر کنید.', + image: '/storage/banner/owl_role_strategy.jpg', + badge: 'دیده‌شدن حداکثری', + features: [ + 'دریافت لینک و صفحه اختصاصی دستیار', + 'قابلیت اشتراک‌گذاری در شبکه‌های اجتماعی', + 'ویترین پیشنهادات برتر هوشان' + ], + tagColor: 'bg-sky-50 text-[#272757] border-sky-200' }, { - step: '۳', - title: 'کسب درآمد و واریز آنی', - desc: 'به ازای هر بار استفاده و پیام‌های پردازش‌شده، سهم درآمد خود را به‌صورت شفاف و آنی دریافت کنید.', - icon: Wallet, - badge: 'تسویه حساب ریالی' + step: '۰۳', + title: 'کسب درآمد و تسویه آنی', + desc: 'به ازای هر بار استفاده کاربران، سهم خود از فروش اشتراک یا توکن‌ها را مستقیماً در پنل مالی خود دریافت و تسویه کنید.', + image: '/storage/banner/pricing-owl-header.png', + badge: 'تسویه حساب خودکار ریالی', + features: [ + 'واریز مستقیم به حساب شتاب بانکی', + 'گزارش زنده تعداد کاربران و درآمد', + '۷۰٪ سهم مستقیم سازنده بات' + ], + tagColor: 'bg-emerald-50 text-emerald-800 border-emerald-200' + } + ]; + + const highlights = [ + { + icon: TrendingUp, + title: '۷۰٪ سهم توسعه‌دهنده', + desc: 'بیشترین درصد سهم مشارکت درآمدی در پلتفرم‌های هوش مصنوعی کشور' + }, + { + icon: CreditCard, + title: 'تسویه حساب سریع', + desc: 'واریز منظم و خودکار مبالغ درآمدی به تمام کارت‌های بانکی عضو شتاب' + }, + { + icon: Users, + title: 'بیش از ۵۰,۰۰۰ کاربر', + desc: 'دسترسی فوری به جامعه بزرگ و فعال کاربران هوشان بدون نیاز به تبلیغات اولیه' } ]; return ( -
-
+
+ {/* Subtle background glow */} +
+ +
{/* Section Header */}
-

- +

کسب درآمد از هوشان

@@ -42,55 +92,110 @@ export const MonetizationSection: React.FC = () => {
-

- شما می‌توانید به‌راحتی دستیارهای اختصاصی خود را طراحی کنید. این دستیارها می‌توانند کاملاً مطابق با نیازها و علایق شما شخصی‌سازی شوند و منبع درآمد پایداری برای شما باشند. +

+ دستیارهای هوشمند اختصاصی خود را بسازید، آن‌ها را در ویترین هوشان برای هزاران کاربر به اشتراک بگذارید و یک منبع درآمد پایدار و مستمر خلق کنید.

- {/* Timeline Grid */} -
- {steps.map((item, idx) => { - const Icon = item.icon; - return ( -
-
-
- + {/* 3 Step Visual Cards Grid */} +
+ {steps.map((item, idx) => ( +
+
+ {/* Visual Image Header */} +
+
+ {item.title}
- + + {/* Step Number Badge */} +
گام {item.step} - +
+ + {/* Tag Badge */} +
+ + {item.badge} + +
-

- {item.title} -

-

- {item.desc} -

+ {/* Content */} +
+

+ {item.title} +

-
- - {item.badge} +

+ {item.desc} +

+ + {/* Features List */} +
+ {item.features.map((feat, fIdx) => ( +
+
+ +
+ {feat} +
+ ))} +
- ); - })} + + {/* Bottom Card Footer */} +
+ + + بدون هزینه زیرساخت + + فعال‌سازی آنی +
+
+ ))} +
+ + {/* 3 Key Benefits Highlight Strip */} +
+
+ {highlights.map((h, i) => { + const Icon = h.icon; + return ( +
+
+ +
+
+

{h.title}

+

{h.desc}

+
+
+ ); + })} +
{/* Bottom CTA */}
- - - شروع ساخت دستیار و کسب درآمد - - + + شروع ساخت دستیار و کسب درآمد در هوشان + +
diff --git a/src/components/home/ReviewsSection.tsx b/src/components/home/ReviewsSection.tsx index b7db36f..a5842d9 100644 --- a/src/components/home/ReviewsSection.tsx +++ b/src/components/home/ReviewsSection.tsx @@ -8,31 +8,31 @@ export const ReviewsSection: React.FC = () => { role: 'مدیر فنی و نرم‌افزار', comment: 'دسترسی همزمان به مدل‌های مختلف هوش مصنوعی در یک پنل واحد، سرعت کار تیم فنی ما رو بیش از ۳ برابر کرده است.', rating: 5, - avatar: '👨‍💼' + avatar: '/storage/banner/owl_role_developer.jpg' }, { name: 'دکتر سارا مهدوی', role: 'مدرس دانشگاه و پژوهشگر', comment: 'دقت در ترجمه تخصصی مقالات و پاسخ‌دهی روان مدل Claude در هوشان فوق‌العاده است. پشتیبانی زبان فارسی بی‌نظیر عمل میکنه.', rating: 5, - avatar: '👩‍🏫' + avatar: '/storage/banner/owl_role_writer.jpg' }, { name: 'نیما سلیمانی', role: 'تولیدکننده محتوا و دیجیتال مارکتر', comment: 'دستیارهای نویسنده و خلق سناریو در هوشان نجات‌دهنده من در مدیریت پیج‌ها و کمپین‌های مارکتینگ بوده است.', rating: 5, - avatar: '👨‍💻' + avatar: '/storage/banner/owl_role_strategy.jpg' } ]; return ( -
+

- + دیدگاه برخی کاربران هوشان

@@ -40,7 +40,7 @@ export const ReviewsSection: React.FC = () => {
-

+

نظرات کسانی که هوش مصنوعی هوشان را در زندگی روزمره و کسب‌وکار خود به‌کار گرفته‌اند

@@ -49,7 +49,7 @@ export const ReviewsSection: React.FC = () => { {reviews.map((r, idx) => (
@@ -58,21 +58,21 @@ export const ReviewsSection: React.FC = () => { ))}
- +
-

+

«{r.comment}»

-
-
- {r.avatar} +
+
+ {r.name}
-

{r.name}

- {r.role} +

{r.name}

+ {r.role}
diff --git a/src/components/home/StatsSection.tsx b/src/components/home/StatsSection.tsx index e59a374..94bf0ba 100644 --- a/src/components/home/StatsSection.tsx +++ b/src/components/home/StatsSection.tsx @@ -1,29 +1,52 @@ import React from 'react'; -import { Users, Zap, BookOpen, Building2, ShieldCheck, Award } from 'lucide-react'; +import { Award, Building2, ShieldCheck } from 'lucide-react'; import siteInfo from '../../data/siteInfo.json'; export const StatsSection: React.FC = () => { - const statIcons = [Users, Zap, BookOpen, Building2]; + const statOwlIcons = [ + '/storage/banner/owl_stat_users.jpg', // ۵۰,۰۰۰+ کاربر فعال + '/storage/banner/owl_stat_speed.jpg', // ۲۰۰,۰۰۰+ درخواست هوش مصنوعی روزانه + '/storage/banner/owl_stat_education.jpg', // +۱۰۹ مقاله و آموزش تخصصی + '/storage/banner/owl_stat_enterprise.jpg' // +۳۵ سازمان و شرکت همکار + ]; return ( -
-
+
+ {/* Ambient background glow */} +
+ +
-
+ {/* 4 Animated Stat Cards with 3D Owl Mascots */} +
{siteInfo.stats.map((stat, idx) => { - const Icon = statIcons[idx % statIcons.length]; + const owlImg = statOwlIcons[idx % statOwlIcons.length]; + return (
-
- + {/* 3D Owl Icon Frame with subtle aura */} +
+
+ {stat.label} +
+ {/* Subtle glowing beacon */} +
-
+ + {/* Stat Value */} +
{stat.value}
-
+ + {/* Stat Label */} +
{stat.label}
@@ -31,18 +54,18 @@ export const StatsSection: React.FC = () => { })}
- {/* Partner badges row */} -
+ {/* Partner trust badges row */} +
- + مستقر در شهرک علمی و تحقیقاتی اصفهان
- + همکاری با اعضای هیات علمی دانشگاه اصفهان
- + دارای نشان اعتماد و مجوزهای فناوری
diff --git a/src/components/home/ToolsShowcase.tsx b/src/components/home/ToolsShowcase.tsx index 070bf63..380ba94 100644 --- a/src/components/home/ToolsShowcase.tsx +++ b/src/components/home/ToolsShowcase.tsx @@ -10,8 +10,6 @@ import { Bot, Check, Layers, - Maximize2, - SlidersHorizontal, Wand2 } from 'lucide-react'; import toolsData from '../../data/tools.json'; @@ -34,38 +32,31 @@ export const ToolsShowcase: React.FC = () => { : toolsData.filter(t => t.category === activeCategory); return ( -
- {/* Glow */} -
- +
{/* Section Header */}
-
- - مجموعه ابزارهای هوش مصنوعی هوشان -
-

+

ابزارهای قدرتمند هوشان برای هر نیاز شما

-

+

از تولید تصاویر خلاقانه و تبدیل صدا تا خلاصه‌سازی اسناد حقوقی و ساخت بات اختصاصی، همه چیز را با زبان فارسی تجربه کنید.

مشاهده و تست تمام ابزارها - +
{/* Category Tabs */} -
+
{categories.map((cat) => { const Icon = cat.icon; const isActive = activeCategory === cat.id; @@ -73,10 +64,10 @@ export const ToolsShowcase: React.FC = () => {

-

+

{tool.description}

- - {tool.capabilities && ( -
- {tool.capabilities.slice(0, 2).map((cap, i) => ( -
- - {cap} -
- ))} -
- )}
-
+
+ {tool.categoryName || 'ابزار هوشمند'} - استفاده از ابزار - + استفاده +
diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx index 5d2a2aa..12250a9 100644 --- a/src/components/layout/Footer.tsx +++ b/src/components/layout/Footer.tsx @@ -1,151 +1,288 @@ -import React from 'react'; +import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import { - Bot, Send, Phone, Mail, MapPin, ShieldCheck, Award, - MessageCircle, - Heart, - Globe + MessageCircle, + Heart, + Sparkles, + Building2, + ChevronLeft, + CheckCircle2 } from 'lucide-react'; import siteInfo from '../../data/siteInfo.json'; export const Footer: React.FC = () => { + const [newsletterEmail, setNewsletterEmail] = useState(''); + const [subscribed, setSubscribed] = useState(false); + const phoneMain = Array.isArray(siteInfo.phone) ? siteInfo.phone[0] : siteInfo.phone; + const phoneLandline = Array.isArray(siteInfo.phone) && siteInfo.phone.length > 1 ? siteInfo.phone[1] : null; + + const handleNewsletterSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (newsletterEmail) { + setSubscribed(true); + setTimeout(() => { + setNewsletterEmail(''); + }, 3000); + } + }; return ( -
+
+ + {/* Subtle decorative background gradient */} +
+
+
- {/* Top Newsletter & About Bar */} -
-
-
- Houshan AI + {/* Top Newsletter Card with Rich Aesthetics */} +
+
+ +
+
+ Houshan AI +
+
+

+ عضویت در خبرنامه هوش مصنوعی هوشان +

+

+ جدیدترین مدل‌های هوش مصنوعی، پرامپت‌های طلایی و اخبار روز فناوری را در ایمیل خود دریافت کنید. +

+
-
-

عضویت در خبرنامه هوش مصنوعی هوشان

-

از جدیدترین ابزارها، تخفیف‌ها و مقالات هوش مصنوعی مطلع شوید.

-
-
-
{ e.preventDefault(); alert('ایمیل شما با موفقیت ثبت شد!'); }} className="flex w-full lg:w-auto gap-2"> - - -
+ {subscribed ? ( +
+ + با تشکر! ایمیل شما در خبرنامه هوشان ثبت گردید. +
+ ) : ( +
+
+ + setNewsletterEmail(e.target.value)} + placeholder="آدرس ایمیل خود را وارد کنید..." + required + className="w-full bg-white border border-slate-200 rounded-2xl pr-10 pl-4 py-3 text-xs sm:text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs" + /> +
+ +
+ )} + +
- {/* 4-Column Grid */} -
+ {/* Main 4-Column Footer Grid */} +
- {/* Column 1: Brand & Bio */} -
-
-
+ {/* Column 1: Brand & Legal Entity Bio (Span 4) */} +
+ +
+
Houshan AI
- {siteInfo.name} - - AI + + {siteInfo.name}
-

+ +

{siteInfo.description}

- - {/* Badges */} -
-
- - دانش‌بنیان -
-
- - نظام صنفی رایانه‌ای -
-
- {/* Column 2: Quick Links */} -
-

+ {/* Column 2: Platform Links (Span 2) */} +
+

دسترسی سریع

-
    -
  • صفحه اصلی
  • -
  • دستیارهای هوش مصنوعی (+ هوشان)
  • -
  • مدل‌های زبانی و بینایی
  • -
  • تعرفه‌ها و اشتراک‌ها
  • -
  • راهکارهای سازمانی هوشان
  • +
      +
    • + + + صفحه اصلی + +
    • +
    • + + + دستیارهای هوش مصنوعی + +
    • +
    • + + + کاتالوگ مدل‌های زبانی + +
    • +
    • + + + تعرفه‌ها و اشتراک‌ها + +
    • +
    • + + + راهکارهای سازمانی + +
    • +
    • + + + مجله و مقالات تخصصی + +
- {/* Column 3: Academy & Blog */} -
-

- آموزش و رسانه + {/* Column 3: Houshan+ Ecosystem (Span 3) */} +
+

+ هوشان +

-
    -
  • وبلاگ و مقالات هوش مصنوعی
  • -
  • دوره آموزش مبانی هوش مصنوعی
  • -
  • قصه ما و تیم هوشان
  • -
  • قوانین و حریم خصوصی
  • -
  • تماس و پشتیبانی
  • +
      +
    • + + + قصه ما و چشم‌انداز آینده + +
    • +
    • + + + تیم ما و هم‌آفرینان + +
    • +
    • + + + همراهان و سازمان‌ها + +
    • +
    • + + + همکاری با ما و فرصت‌های شغلی + +
    • +
    • + + + مجوزها و تاییدیه‌های رسمی + +
    • +
    • + + + آکادمی و دوره‌های آموزشی + +
    • +
    • + + + قوانین و حفظ حریم خصوصی + +
- {/* Column 4: Contact & Social */} -
-

+ {/* Column 4: Contact & Office Details (Span 3) */} + - {/* Bottom Copyright */} -
-

© تمامی حقوق مادی و معنوی این وب‌سایت متعلق به شرکت {siteInfo.name} می‌باشد.

-

+ {/* Bottom Copyright & Legal Credit */} +

+

+ © تمامی حقوق مادی و معنوی این وب‌سایت متعلق به {siteInfo.companyLegalName} (پلتفرم {siteInfo.name}) می‌باشد. +

+

طراحی شده با برای جامعه هوش مصنوعی ایران

diff --git a/src/components/layout/Navbar.tsx b/src/components/layout/Navbar.tsx index 25308b5..1a4a89c 100644 --- a/src/components/layout/Navbar.tsx +++ b/src/components/layout/Navbar.tsx @@ -11,24 +11,36 @@ import { CreditCard, Sparkles, ArrowLeft, - GraduationCap + GraduationCap, + ChevronDown, + Users, + Handshake, + Briefcase, + Award, + PhoneCall, + ShieldCheck, + Compass } from 'lucide-react'; import postsData from '../../data/posts.json'; import toolsData from '../../data/tools.json'; import modelsData from '../../data/models.json'; interface NavbarProps { - onOpenAuth: () => void; + onOpenAuth?: () => void; } export const Navbar: React.FC = ({ onOpenAuth }) => { const [isOpen, setIsOpen] = useState(false); const [isSearchOpen, setIsSearchOpen] = useState(false); + const [isHoushanDropdownOpen, setIsHoushanDropdownOpen] = useState(false); + const [isMobileHoushanOpen, setIsMobileHoushanOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(''); const [scrolled, setScrolled] = useState(false); + const location = useLocation(); const navigate = useNavigate(); const searchInputRef = useRef(null); + const dropdownRef = useRef(null); useEffect(() => { const handleScroll = () => { @@ -46,6 +58,8 @@ export const Navbar: React.FC = ({ onOpenAuth }) => { useEffect(() => { setIsOpen(false); setIsSearchOpen(false); + setIsHoushanDropdownOpen(false); + setIsMobileHoushanOpen(false); }, [location.pathname]); // Focus search input when modal opens @@ -57,15 +71,26 @@ export const Navbar: React.FC = ({ onOpenAuth }) => { } }, [isSearchOpen]); - // Handle escape key to close search modal + // Handle escape key to close search modal & outside click for dropdown useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') { setIsSearchOpen(false); + setIsHoushanDropdownOpen(false); } }; + const handleClickOutside = (e: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) { + setIsHoushanDropdownOpen(false); + } + }; + window.addEventListener('keydown', handleKeyDown); - return () => window.removeEventListener('keydown', handleKeyDown); + document.addEventListener('mousedown', handleClickOutside); + return () => { + window.removeEventListener('keydown', handleKeyDown); + document.removeEventListener('mousedown', handleClickOutside); + }; }, []); const navLinks = [ @@ -74,10 +99,62 @@ export const Navbar: React.FC = ({ onOpenAuth }) => { { name: 'مدل‌های زبانی', path: '/models' }, { name: 'ابزارها', path: '/tools' }, { name: 'راهکارهای سازمانی', path: '/enterprise' }, - { name: 'تعرفه', path: '/pricing' }, - { name: '+ هوشان', path: '/academy' }, + { name: 'تعرفه', path: '/pricing' } ]; + const houshanPlusItems = [ + { + name: 'قصه ما', + path: '/story', + desc: 'داستان شکل‌گیری و چشم‌انداز هوشان', + icon: Compass + }, + { + name: 'تیم ما', + path: '/team', + desc: 'هم‌آفرینان، اساتید و نخبگان هوشان', + icon: Users + }, + { + name: 'همراهان ما', + path: '/partners', + desc: 'سازمان‌ها و شرکت‌های همکار', + icon: Handshake + }, + { + name: 'همکاری با ما', + path: '/careers', + desc: 'فرصت‌های شغلی و جذب نیرو', + icon: Briefcase + }, + { + name: 'مجوزهای ما', + path: '/licenses', + desc: 'تاییدیه‌ها و مجوز دانش‌بنیانی', + icon: Award + }, + { + name: 'آموزش هوش مصنوعی', + path: '/academy', + desc: 'دوره‌های تخصصی آکادمی هوشان', + icon: GraduationCap + }, + { + name: 'تماس با ما', + path: '/contact', + desc: 'راه‌های ارتباطی و آدرس دفتر', + icon: PhoneCall + }, + { + name: 'حریم خصوصی', + path: '/privacy', + desc: 'قوانین و حفظ حریم کاربران', + icon: ShieldCheck + } + ]; + + const isHoushanActive = houshanPlusItems.some(item => location.pathname === item.path); + // Quick search filter const filteredPosts = searchQuery.trim() ? postsData.filter(p => p.title.toLowerCase().includes(searchQuery.toLowerCase())).slice(0, 4) @@ -101,74 +178,128 @@ export const Navbar: React.FC = ({ onOpenAuth }) => { }`} >
-
+
- {/* Right Side: Logo & Navigation Links */} -
- {/* Authentic Houshan Owl Logo */} - + {/* Right Side: Authentic Houshan Owl Logo */} +
+ هوشان - - {/* Desktop Navigation Links separated by | */} -
+ {/* Middle: Desktop Navigation Links Centered */} + + {/* Left Side: Search Button & Login/Register Button */} -
+
{/* Search Icon Button */} - {/* Login / Register Button */} - + {/* Mobile Menu Toggle Button */} - + {isMobileHoushanOpen && ( +
+ {houshanPlusItems.map((item) => { + const Icon = item.icon; + const isActive = location.pathname === item.path; + return ( + + + {item.name} + + ); + })} +
+ )}
)} - {/* Global Interactive Search Modal */} + {/* Global Search Modal */} {isSearchOpen && ( -
-
e.stopPropagation()} - > - {/* Search Input Bar */} -
- - setSearchQuery(e.target.value)} - placeholder="جستجو در مقالات، ابزارها، مدل‌ها و دوره‌ها..." - className="w-full bg-transparent text-slate-800 placeholder-gray-400 text-sm sm:text-base focus:outline-none" - /> - {searchQuery && ( - - )} +
+
+ + {/* Modal Header & Input */} +
+
+ + جستجوی هوشمند در هوشان +
- {/* Live Search Results */} -
- {!searchQuery.trim() ? ( -
-

عبارت مورد نظر خود را برای جستجو وارد کنید

-
- پیشنهادها: - {['هوش مصنوعی', 'چت‌بات', 'Claude 3.5', 'ChatGPT', 'تولید تصویر', 'سئو'].map((tag) => ( - - ))} +
+ setSearchQuery(e.target.value)} + placeholder="نام مدل، ابزار، مقاله یا خدمت مدنظر خود را بنویسید..." + className="w-full pl-4 pr-11 py-3.5 rounded-2xl bg-slate-50 border border-slate-200 text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs" + /> + +
+ + {/* Search Results */} + {searchQuery.trim() && ( +
+ {/* Models Results */} + {filteredModels.length > 0 && ( +
+

مدل‌های زبانی:

+
+ {filteredModels.map((m) => ( + + + + {m.name} ({m.provider}) + + {m.category} + + ))} +
-
- ) : !hasSearchResults ? ( -
-

نتیجه‌ای برای «{searchQuery}» یافت نشد.

-
- ) : ( -
- {/* Blog Articles */} - {filteredPosts.length > 0 && ( -
-

- - مقالات و آموزش‌ها -

-
- {filteredPosts.map((post) => ( - setIsSearchOpen(false)} - className="flex items-center justify-between p-2.5 rounded-xl hover:bg-gray-50 border border-transparent hover:border-gray-200 transition-all text-right group" - > - - {post.title} - - - - ))} -
-
- )} + )} - {/* AI Tools */} - {filteredTools.length > 0 && ( -
-

- - ابزارهای هوش مصنوعی -

-
- {filteredTools.map((tool) => ( - setIsSearchOpen(false)} - className="flex items-center justify-between p-2.5 rounded-xl hover:bg-gray-50 border border-transparent hover:border-gray-200 transition-all text-right group" - > -
- - {tool.title} - - - {tool.description} - -
- - - ))} -
+ {/* Tools Results */} + {filteredTools.length > 0 && ( +
+

ابزارهای هوش مصنوعی:

+
+ {filteredTools.map((t) => ( + + + + {t.title} + + {t.category} + + ))}
- )} +
+ )} - {/* AI Models */} - {filteredModels.length > 0 && ( -
-

- - مدل‌های زبانی -

-
- {filteredModels.map((model) => ( - setIsSearchOpen(false)} - className="flex items-center justify-between p-2.5 rounded-xl hover:bg-gray-50 border border-transparent hover:border-gray-200 transition-all text-right group" - > -
- - {model.name} - - - ارائه دهنده: {model.provider} - -
- - - ))} -
+ {/* Blog Posts Results */} + {filteredPosts.length > 0 && ( +
+

مقالات و آموزش‌ها:

+
+ {filteredPosts.map((p) => ( + + + + {p.title} + + {p.date} + + ))}
- )} -
- )} -
+
+ )} - {/* Modal Footer */} -
- هوشان • پلتفرم جامع هوش مصنوعی -
- ESC - جهت بستن + {!hasSearchResults && ( +
+ موردی مطابق با عبارت جستجوی شما یافت نشد. +
+ )}
-
+ )} + + {/* Quick Links inside search */} + {!searchQuery.trim() && ( +
+
دسترسی‌های پربازدید:
+
+ + مدل‌های Claude 3.7 و GPT-4o + + + ابزارهای ساخت تصویر و ویدیو + + + راهکارهای هوشمندسازی سازمان + + + تیم و هم‌آفرینان هوشان + +
+
+ )} +
)} diff --git a/src/data/models.json b/src/data/models.json index 725af17..eab2e81 100644 --- a/src/data/models.json +++ b/src/data/models.json @@ -1,110 +1,325 @@ [ { - "id": "gpt-4o", - "name": "GPT-4o", - "provider": "OpenAI", - "badge": "پیشرفته‌ترین چندحالته", - "description": "پرچم‌دار پرسرعت و فوق‌العاده هوشمند OpenAI با توانایی درک عمیق متن، تصویر و استدلال پیچیده تحلیلی و برنامه‌نویسی.", - "contextWindow": "128,000 توکن", - "speed": "بسیار بالا", - "intelligenceScore": 98, + "id": "claude-opus-5", + "name": "Claude Opus 5", + "provider": "Anthropic", + "badge": "پرچم‌دار ابرقدرت آنتروپیک", + "category": "استدلال و برنامه‌نویسی", + "description": "قوی‌ترین مدل هوش مصنوعی جهان با استدلال تحلیلی بی‌رقیب، تسلط کامل بر کدنویسی سیستم‌های پیچیده و حل خودکار باگ‌های نرم‌افزاری بزرگ.", + "contextWindow": "500,000 توکن", + "speed": "بسیار سریع / تفکر متغیر", + "intelligenceScore": 99.9, "isFree": false, - "pricingTier": "حرفه‌ای / VIP", + "pricingTier": "VIP / سازمانی", "strengths": [ - "استدلال منطقی و ریاضی", - "برنامه‌نویسی پیشرفته", - "تحلیل دقیق تصاویر و نمودارها", - "درک عالی زبان فارسی" + "بالاترین نمره استدلال و کدنویسی جهان", + "معماری نرم‌افزار و بازنویسی پروژه‌های کلان", + "نگارش ادبی و تحلیلی فوق‌العاده طبیعی", + "عدم توهم و اطمینان صددرصدی فکت‌ها" ] }, { - "id": "gpt-4o-mini", - "name": "GPT-4o mini", - "provider": "OpenAI", - "badge": "سریع و اقتصادی", - "description": "مدل سبک، پرسرعت و فوق‌العاده مقرون‌به‌صرفه با کارایی بالا در امور روزمره، تولید محتوا و پرسش‌وپاسخ.", - "contextWindow": "128,000 توکن", - "speed": "فوق‌العاده سریع", - "intelligenceScore": 88, + "id": "gemini-3-7-flash", + "name": "Gemini 3.7 Flash", + "provider": "Google", + "badge": "نسل سوم هوش گوگل", + "category": "چندحالته فوق‌سریع", + "description": "تازه‌ترین مدل نسل سوم گوگل با سرعت پردازش آنی و درک فوق‌پیشرفته اسناد، ویدیوهای طولانی، صدا و ابزارهای اتوماسیون سازمانی.", + "contextWindow": "2,000,000 توکن", + "speed": "فوق‌العاده آنی", + "intelligenceScore": 99.4, "isFree": true, "pricingTier": "رایگان / پایه", "strengths": [ - "سرعت پاسخ‌دهی آنی", - "مصرف حداقل سکه", - "پاسخ‌های خلاصه و منسجم", - "مناسب برای چت‌های روزانه" + "حافظه فعال ۲ میلیون توکنی", + "تحلیل همزمان ساعت‌ها ویدیو و صوت با کیفیت بالا", + "فراخوانی ابزارها و اتوماسیون بلادرنگ", + "پشتیبانی بومی و قدرتمند از زبان فارسی" ] }, { - "id": "claude-3-5-sonnet", - "name": "Claude 3.5 Sonnet", - "provider": "Anthropic", - "badge": "بهترین لحن و برنامه‌نویسی", - "description": "یکی از هوشمندترین مدل‌های جهان با توانایی بی‌رقیب در کدنویسی، نگارش متون با لحن طبیعی انسانی و تحلیل دقیق اسناد.", - "contextWindow": "200,000 توکن", - "speed": "بسیار سریع", - "intelligenceScore": 99, + "id": "grok-4-6", + "name": "Grok 4.6", + "provider": "xAI", + "badge": "ابرهوش بلادرنگ xAI", + "category": "استدلال و داده زنده", + "description": "پیشرفته‌ترین پرچم‌دار xAI برای ورک‌فلوهای ایجنتیک و استدلال عمیق چندمرحله‌ای با اتصال بلادرنگ به منابع زنده اطلاعاتی دنیا.", + "contextWindow": "256,000 توکن", + "speed": "بسیار بالا", + "intelligenceScore": 99.6, "isFree": false, - "pricingTier": "حرفه‌ای / VIP", + "pricingTier": "VIP / حرفه‌ای", "strengths": [ - "نگارش متون عمیق و طبیعی", - "کدنویسی بی‌نقص فرانت‌اند و بک‌اند", - "استدلال ظریف و عدم توهم", - "درک اسناد حجیم" + "دسترسی زنده به ترندها و اخبار لحظه‌ای جهان", + "استدلال عمیق در ریاضیات و فیزیک محاسباتی", + "ایجنت‌های خودکار و برنامه‌ریزی زنجیره‌ای", + "پاسخ‌های صریح و بدون فیلترهای مزاحم" ] }, { - "id": "gemini-1-5-pro", - "name": "Gemini 1.5 Pro", - "provider": "Google", - "badge": "حافظه ۲ میلیون توکنی", - "description": "مدل غول‌پیکر گوگل با بزرگ‌ترین پنجره زمینه در دنیا، ایده‌آل برای پردازش کتاب‌ها، کدهای حجیم و ویدیوهای طولانی.", - "contextWindow": "2,000,000 توکن", - "speed": "متوسط به بالا", - "intelligenceScore": 96, + "id": "gpt-5-6-sol", + "name": "GPT-5.6 (Sol)", + "provider": "OpenAI", + "badge": "پرچم‌دار نسل پنجم OpenAI", + "category": "دانش کلان و چندرسانه‌ای", + "description": "آخرین نسل مدل‌های بنیادین OpenAI با هوش تعمیم‌یافته، درک چندوجهی تصویر و صوت، کاهش خطای توهم به صفر و نگارش پیشرفته.", + "contextWindow": "256,000 توکن", + "speed": "بسیار بالا", + "intelligenceScore": 99.7, "isFree": false, - "pricingTier": "حرفه‌ای / سازمانی", + "pricingTier": "VIP / سازمانی", "strengths": [ - "تحلیل کل یک کتابخانه کد", - "پردازش اسناد چند صد صفحه‌ای", - "جستجو در حجم انبوه داده", - "پشتیبانی عالی چندرسانه‌ای" + "استدلال چندلایه و طراحی استراتژی کسب‌وکار", + "کدنویسی بی‌نقص فول‌استک و پایگاه داده", + "تسلط عمیق بر زبان و فرهنگ فارسی", + "حل مسائل تخصصی حقوقی، پزشکی و مالی" ] }, { - "id": "deepseek-v3", - "name": "DeepSeek V3 / R1", + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", "provider": "DeepSeek", - "badge": "شاهکار استدلال بازمتن", - "description": "مدل استدلال و تفکر زنجیره‌ای قدرتمند که معادلات ریاضی، منطقی و الگوریتمی را گام‌به‌گام تحلیل و حل می‌کند.", - "contextWindow": "64,000 توکن", + "badge": "شاهکار جدید استدلال و ریاضی", + "category": "استدلال زنجیره‌ای", + "description": "جدیدترین شاهکار استدلالی دیپ‌سیک با معماری تکامل‌یافته MoE و یادگیری تقویتی، رقیب مستقیم گران‌ترین مدل‌های بسته با هزینه ریالی اندک.", + "contextWindow": "128,000 توکن", "speed": "سریع", - "intelligenceScore": 95, + "intelligenceScore": 99.2, "isFree": true, "pricingTier": "رایگان / اقتصادی", "strengths": [ - "حل مسائل پیچیده منطقی", - "استدلال شفاف و مرحله‌ای", - "تولید کدهای الگوریتمی", - "بسیار کم‌هزینه" + "حل گام‌به‌گام و شفاف المپیادهای ریاضی و کامپیوتر", + "استدلال منطقی خوداصلاح‌گر", + "تولید سریع کدهای الگوریتمی", + "هزینه اجرای فوق‌العاده اقتصادی" ] }, { - "id": "llama-3-1", - "name": "Llama 3.1 70B", + "id": "qwen-3-8-max", + "name": "Qwen 3.8 Max", + "provider": "Alibaba", + "badge": "ابرمدل چندزبانه علی‌بابا", + "category": "مدل پرچم‌دار عمومی", + "description": "تازه‌ترین مدل عظیم علی‌بابا با میلیاردها پارامتر فعال، پیشتاز جهانی در بنچمارک‌های چندزبانه، برنامه‌نویسی و اتوماسیون سازمانی.", + "contextWindow": "256,000 توکن", + "speed": "فوق‌العاده سریع", + "intelligenceScore": 99.1, + "isFree": false, + "pricingTier": "حرفه‌ای / پایه", + "strengths": [ + "بالاترین نمرات چندزبانه در میان تمام مدل‌ها", + "کدنویسی فوق‌العاده تمیز و استاندارد", + "تحلیل اسناد طولانی بازرگانی و قراردادها", + "پشتیبانی عالی از زبان فارسی" + ] + }, + { + "id": "kimi-k3", + "name": "Kimi K3 (1T MoE)", + "provider": "Moonshot AI", + "badge": "ابرهوش ۱ تریلیون پارامتری", + "category": "استدلال طولانی‌مدت", + "description": "مدل ۱ تریلیون پارامتری Moonshot AI با معماری مخلوط کارشناسان و حافظه عظیم، متخصص در خواندن کتاب‌ها، استدلال چندحالته و پروژه‌های کلان.", + "contextWindow": "500,000 توکن", + "speed": "بسیار بالا", + "intelligenceScore": 98.9, + "isFree": true, + "pricingTier": "رایگان / اقتصادی", + "strengths": [ + "پردازش کانتکست‌های فوق‌طولانی ۵۰۰ هزار توکنی", + "استدلال چندمرحله‌ای روی صدها صفحه متن", + "برنامه‌نویسی و معماری داده", + "سرعت پاسخ‌دهی بالا و کم‌مصرف" + ] + }, + { + "id": "claude-3-7-sonnet", + "name": "Claude 3.7 Sonnet", + "provider": "Anthropic", + "badge": "نخستین مدل هیبریدی جهان", + "category": "استدلال و برنامه‌نویسی", + "description": "مدل هیبریدی انقلابی آنتروپیک با تفکر اختیاری، تسلط بر کدنویسی کدهای حجیم و نگارش عمیق‌ترین مقالات تحلیلی.", + "contextWindow": "200,000 توکن", + "speed": "بسیار سریع", + "intelligenceScore": 98.8, + "isFree": false, + "pricingTier": "VIP / حرفه‌ای", + "strengths": [ + "استدلال هیبریدی با بودجه تفکر متغیر", + "کدنویسی ماژولار و رفع خطاهای سیستمی", + "لحن انسانی و کاملاً طبیعی", + "پشتیبانی عالی از زبان فارسی" + ] + }, + { + "id": "openai-o1", + "name": "OpenAI o1", + "provider": "OpenAI", + "badge": "پرچم‌دار تفکر عمیق", + "category": "استدلال عمیق", + "description": "مدل تفکر زنجیره‌ای OpenAI با قدرت تحلیل مسائل در سطح دکترای علوم، المپیادهای جهانی و طراحی سیستم‌های توزیع‌شده.", + "contextWindow": "200,000 توکن", + "speed": "تفکر عمیق", + "intelligenceScore": 99.0, + "isFree": false, + "pricingTier": "حرفه‌ای / VIP", + "strengths": [ + "تامل و ارزیابی گام‌به‌گام قبل از پاسخ", + "طراحی سیستم‌های توزیع‌شده و میکروسرویس", + "حل مسائل دشوار الگوریتمی", + "تحلیل چندبعدی اسناد حقوقی و مالی" + ] + }, + { + "id": "openai-o3-mini", + "name": "OpenAI o3-mini", + "provider": "OpenAI", + "badge": "استدلال پرسرعت STEM", + "category": "استدلال سریع", + "description": "مدل استدلالی سبک و پرسرعت برای پاسخ‌دهی فوری به محاسبات ریاضی، فیزیک و برنامه‌نویسی با هزینه بسیار مناسب.", + "contextWindow": "200,000 توکن", + "speed": "بسیار سریع", + "intelligenceScore": 97.5, + "isFree": false, + "pricingTier": "اقتصادی / پایه", + "strengths": [ + "پاسخ‌دهی سریع به سوالات محاسباتی", + "کدنویسی دقیق با حداقل توهم", + "مصرف بهینه سکه", + "پشتیبانی از انواع زبان‌ها" + ] + }, + { + "id": "deepseek-r1", + "name": "DeepSeek R1", + "provider": "DeepSeek", + "badge": "پدیده استدلال بازمتن", + "category": "استدلال زنجیره‌ای", + "description": "مدل استنتاج زنجیره‌ای آموزش‌دیده با یادگیری تقویتی خالص، با عملکردی هم‌رده برترین مدل‌های تجاری در حل مسائل پیچیده.", + "contextWindow": "64,000 توکن", + "speed": "سریع", + "intelligenceScore": 98.5, + "isFree": true, + "pricingTier": "رایگان / اقتصادی", + "strengths": [ + "حل گام‌به‌گام مسائل دشوار ریاضی", + "تفکر خودانتقادی و اصلاح خودکار اشتباهات", + "تحلیل الگوریتم‌های پیشرفته", + "بسیار مقرون‌به‌صرفه" + ] + }, + { + "id": "qwen-2-5-coder-32b", + "name": "Qwen 2.5 Coder 32B", + "provider": "Alibaba", + "badge": "قهرمان متن‌باز کدنویسی", + "category": "مهندسی نرم‌افزار", + "description": "مدل تخصصی برنامه‌نویسی علی‌بابا با ۳۲ میلیارد پارامتر فعال، پیشرو در تولید کدهای استاندارد و تست‌های خودکار.", + "contextWindow": "128,000 توکن", + "speed": "فوق‌العاده سریع", + "intelligenceScore": 96.5, + "isFree": true, + "pricingTier": "رایگان / اقتصادی", + "strengths": [ + "تولید کدهای فول‌استک با معماری تمیز", + "تولید خودکار تست‌های Unit Test", + "تسلط بر بیش از ۹۰ زبان برنامه‌نویسی", + "اشکال‌زدایی فوری باگ‌ها" + ] + }, + { + "id": "llama-3-3-70b", + "name": "Llama 3.3 70B", "provider": "Meta", - "badge": "قدرتمند و متن‌باز", - "description": "مدل پیشتاز متا برای سازمان‌هایی که نیاز به حریم خصوصی بالا، شفافیت و انعطاف‌پذیری دارند.", + "badge": "پرچم‌دار متن‌باز متا", + "category": "امنیت و متن‌باز", + "description": "پیشرفته‌ترین مدل متن‌باز متا برای سازمان‌هایی که امنیت و حریم خصوصی داده‌ها اولویت اول آن‌هاست.", "contextWindow": "128,000 توکن", "speed": "بسیار بالا", - "intelligenceScore": 91, + "intelligenceScore": 95.0, "isFree": true, "pricingTier": "رایگان / سازمانی", "strengths": [ - "امنیت داده و حفظ حریم خصوصی", - "پاسخ‌های مستقیم و سریع", - "انطباق‌پذیری بالا", - "مناسب برای استقرار سازمانی" + "امنیت کامل داده‌ها بدون خروج از سرور", + "استدلال چندزبانه قدرتمند", + "پاسخ‌دهی مستقیم و پایدار", + "امکان شخصی‌سازی و Fine-tuning" + ] + }, + { + "id": "flux-1-1-pro", + "name": "FLUX 1.1 Pro", + "provider": "Black Forest Labs", + "badge": "کیفیت سینمایی و 4K", + "category": "تولید تصویر", + "description": "پیشرفته‌ترین مدل تولید تصویر هوش مصنوعی با درک عمیق پرامپت، تفکیک دقیق بافت پوست و نورپردازی فوق‌واقعی.", + "contextWindow": "تصویر 4K", + "speed": "بسیار بالا", + "intelligenceScore": 99.0, + "isFree": false, + "pricingTier": "حرفه‌ای / VIP", + "strengths": [ + "کیفیت فتورئالیستیک بدون حس مصنوعی", + "رندر بی‌نقص چهره و آناتومی", + "پیروی دقیق از پرامپت‌های متنی", + "تنظیم نورپردازی و فوکوس سینمایی" + ] + }, + { + "id": "midjourney-v6-1", + "name": "Midjourney v6.1", + "provider": "Midjourney", + "badge": "هنر دیجیتال و کانسپت آرت", + "category": "تولید تصویر هنری", + "description": "استاندارد طلایی خلق کانسپت‌های معماری، کاراکترهای بازی و جلوه‌های بصری خیره‌کننده.", + "contextWindow": "رزولوشن بالا", + "speed": "متوسط", + "intelligenceScore": 98.8, + "isFree": false, + "pricingTier": "حرفه‌ای / VIP", + "strengths": [ + "زیبایی‌شناسی بصری بی‌رقیب", + "طراحی کانسپت‌های معماری و بازی‌سازی", + "نورپردازی حجمی و متریال‌های واقعی", + "ترکیب‌بندی فوق‌العاده هنری" + ] + }, + { + "id": "suno-v4", + "name": "Suno v4", + "provider": "Suno AI", + "badge": "استودیو آهنگسازی و خوانندگی", + "category": "صوت و موسیقی", + "description": "تولید آهنگ کامل با وکال خواننده، سازبندی ارکسترال و کیفیت مسترینگ استودیو از روی شعر فارسی و انگلیسی.", + "contextWindow": "آهنگ ۴ دقیقه", + "speed": "بسیار بالا", + "intelligenceScore": 98.0, + "isFree": false, + "pricingTier": "پایه / حرفه‌ای", + "strengths": [ + "تولید آهنگ کامل با شعر فارسی و انگلیسی", + "پشتیبانی از انواع سبک‌های موسیقی", + "کیفیت استودیویی مسترینگ", + "خوانندگی روان زن و مرد" + ] + }, + { + "id": "elevenlabs-v2", + "name": "ElevenLabs v2", + "provider": "ElevenLabs", + "badge": "طبیعی‌ترین تبدیل متن به گفتار", + "category": "صوت و دوبله", + "description": "پیشرفته‌ترین موتور شبیه‌سازی صدا با رعایت لحن عاطفی، تنفس و احساسات انسانی برای نریشن و پادکست.", + "contextWindow": "نامحدود متن", + "speed": "آنی", + "intelligenceScore": 99.2, + "isFree": false, + "pricingTier": "پایه / حرفه‌ای", + "strengths": [ + "صدای فوق‌طبیعی با احساسات و لحن زنده", + "کلون و شبیه‌سازی دقیق صدای اختصاصی", + "دوبله هوشمند فیلم و ویدیو", + "تولید پادکست و کتاب صوتی" ] } ] \ No newline at end of file diff --git a/src/data/siteInfo.json b/src/data/siteInfo.json index 5a1fdb1..a28daeb 100644 --- a/src/data/siteInfo.json +++ b/src/data/siteInfo.json @@ -1,5 +1,6 @@ { "name": "هوشان", + "companyLegalName": "شرکت نواندیشان آتی‌نگار فرتاک", "englishName": "Houshan AI", "tagline": "دستیار هوش مصنوعی شما — دستیار هوش مصنوعی مدیران", "description": "هوشان؛ پلتفرم جامع و یکپارچه هوش مصنوعی فارسی برای مدیران، کسب‌وکارها، متخصصان و سازمان‌ها با دسترسی آسان به پیشرفته‌ترین مدل‌های زبانی، ابزارهای تولید محتوا و راهکارهای سازمانی.", @@ -37,7 +38,7 @@ }, { "label": "مقاله و آموزش تخصصی", - "value": "۱۰۹+" + "value": "+۱۰۰" }, { "label": "سازمان و شرکت همکار", diff --git a/src/data/team.json b/src/data/team.json index 979887f..959573f 100644 --- a/src/data/team.json +++ b/src/data/team.json @@ -2,10 +2,11 @@ { "name": "دکتر محسن طاهری", "role": "مدیرعامل و هم‌بنیان‌گذار", - "title": "آینده‌پژوه و استراتژیست ارشد", + "title": "عضو هیات علمی و آینده‌پژوه", "bio": "عضو هیات علمی دانشگاه اصفهان، عضو فدراسیون جهانی آینده‌پژوهی (WFSF)، مشاور ارشد توسعه فناوری و هوش مصنوعی در سازمان‌های پیشرو کشور.", - "image": "/wp-content/uploads/2024/12/8-768x768.webp", + "image": "/storage/team/8-768x768.webp", "degree": "دکتری آینده‌پژوهی", + "category": "leadership", "social": { "linkedin": "https://linkedin.com", "email": "taheri@houshan.ai" @@ -15,9 +16,10 @@ "name": "دکتر محمدعلی فرهنگ‌نژاد", "role": "مشاور عالی راهبردی", "title": "کارآفرین و متخصص نوآوری", - "bio": "دکترای سیاست‌گذاری علم و فناوری، مشاور توسعه اکوسیستم نوآوری، پژوهشگر استراتژی‌های تحول دیجیتال.", - "image": "/wp-content/uploads/2024/12/21.webp", + "bio": "دکتری سیاست‌گذاری علم و فناوری، مشاور توسعه اکوسیستم نوآوری و پژوهشگر استراتژی‌های تحول دیجیتال.", + "image": "/storage/team/21.webp", "degree": "دکتری سیاست‌گذاری علم و فناوری", + "category": "advisory", "social": { "linkedin": "https://linkedin.com" } @@ -27,8 +29,9 @@ "role": "مشاور عالی فناوری", "title": "متخصص نوآوری‌های فناورانه", "bio": "عضو هیات علمی موسسه مطالعات و پژوهش‌های بازرگانی، متخصص کاربردهای صنعتی و تجاری هوش مصنوعی.", - "image": "/wp-content/uploads/2024/12/13.webp", + "image": "/storage/team/13.webp", "degree": "دکتری مدیریت فناوری", + "category": "advisory", "social": { "linkedin": "https://linkedin.com" } @@ -38,8 +41,9 @@ "role": "مدیر ارشد اجرایی (COO)", "title": "مدیریت استراتژیک", "bio": "فارغ‌التحصیل DBA مدیریت استراتژیک، راهبری فرآیندهای عملیاتی، نظارت بر توسعه محصولات و پروژه‌های سازمانی هوشان.", - "image": "/wp-content/uploads/2024/12/10-768x768.webp", + "image": "/storage/team/10-768x768.webp", "degree": "DBA مدیریت استراتژیک", + "category": "leadership", "social": { "linkedin": "https://linkedin.com" } @@ -49,8 +53,9 @@ "role": "مدیر ارشد محتوا (CCO)", "title": "استراتژیست محتوا و پرامپت", "bio": "کارشناس ارشد تولید محتوا و رسانه هوش مصنوعی، مدرس مهندسی پرامپت و سردبیر بخش رسانه هوشان.", - "image": "/wp-content/uploads/2024/12/2-768x768.webp", - "degree": "کارشناسی ارشد", + "image": "/storage/team/2-768x768.webp", + "degree": "کارشناسی ارشد ارتباطات", + "category": "leadership", "social": { "linkedin": "https://linkedin.com" } @@ -60,8 +65,9 @@ "role": "مدیر ارشد مالی (CFO)", "title": "مدیریت مالی و سرمایه‌گذاری", "bio": "فارغ‌التحصیل MBA مدیریت مالی، هدایت ساختارهای مالی، مدل‌های درآمدی و بهینه‌سازی بودجه‌های توسعه محصول.", - "image": "/wp-content/uploads/2024/12/12.webp", + "image": "/storage/team/12.webp", "degree": "MBA مدیریت مالی", + "category": "leadership", "social": { "linkedin": "https://linkedin.com" } @@ -71,8 +77,9 @@ "role": "مدیر ارشد داده (CDO)", "title": "مهندسی داده و هوش مصنوعی", "bio": "کارشناس مهندسی برق و داده، طراحی خطوط لوله داده‌های بزرگ، fine-tuning مدل‌ها و بهینه‌سازی یادگیری ماشین.", - "image": "/wp-content/uploads/2024/12/11.webp", + "image": "/storage/team/11.webp", "degree": "مهندسی برق و سیستم‌های داده", + "category": "engineering", "social": { "linkedin": "https://linkedin.com" } @@ -82,19 +89,81 @@ "role": "مدیر ارشد تکنولوژی (CTO)", "title": "معماری نرم‌افزار و زیرساخت", "bio": "مهندس نرم‌افزار، طراح زیرساخت ابری هوشان، معمار سیستم‌های توزیع‌شده و مقیاس‌پذیری هوش مصنوعی.", - "image": "/wp-content/uploads/2024/12/1-768x768.webp", + "image": "/storage/team/1-768x768.webp", "degree": "کارشناسی ارشد مهندسی نرم‌افزار", + "category": "engineering", "social": { "linkedin": "https://linkedin.com" } }, { "name": "کیانوش رحمانزایی", - "role": "برنامه‌نویس ارشد موبایل و وب", - "title": "توسعه‌دهنده فول‌استک", + "role": "توسعه‌دهنده ارشد فول‌استک", + "title": "برنامه‌نویس وب و موبایل", "bio": "مهندس نرم‌افزار، توسعه‌دهنده اپلیکیشن هوشان و رابط‌های تعاملی نسل جدید هوش مصنوعی.", - "image": "/wp-content/uploads/2024/12/22.webp", + "image": "/storage/team/22.webp", "degree": "مهندسی نرم‌افزار", + "category": "engineering", + "social": { + "linkedin": "https://linkedin.com" + } + }, + { + "name": "فاطمه موسوی", + "role": "کارشناس ارشد تولید محتوا", + "title": "تولید محتوای تخصصی هوش مصنوعی", + "bio": "کارشناسی ارشد مهندسی صنایع، پژوهشگر کاربردهای هوش مصنوعی در تولید محتوا و پرامپت‌نویسی تحلیلی.", + "image": "/storage/team/14-768x768.webp", + "degree": "کارشناسی ارشد مهندسی صنایع", + "category": "content", + "social": { + "linkedin": "https://linkedin.com" + } + }, + { + "name": "متین رضازاده", + "role": "کارشناس محتوا و پژوهش", + "title": "آینده‌پژوهی و سناریونویسی", + "bio": "کارشناسی ارشد آینده‌پژوهی، مهندسی مکانیک، تولید محتوای تخصصی و تحلیل روندهای هوش مصنوعی.", + "image": "/storage/team/9-768x768.webp", + "degree": "کارشناسی ارشد آینده‌پژوهی", + "category": "content", + "social": { + "linkedin": "https://linkedin.com" + } + }, + { + "name": "امیر یوسفی", + "role": "کارشناس فناوری و محتوا", + "title": "فناوری اطلاعات و مدیریت", + "bio": "مهندسی فناوری اطلاعات و کارشناسی ارشد مدیریت، نگارش مستندات و راهنماهای کاربری ابزارهای هوش مصنوعی.", + "image": "/storage/team/15-768x768.webp", + "degree": "کارشناسی ارشد مدیریت", + "category": "content", + "social": { + "linkedin": "https://linkedin.com" + } + }, + { + "name": "مهدی دشتبانی", + "role": "کارشناس تولید محتوا", + "title": "مهندسی برق و سخت‌افزار AI", + "bio": "مهندسی برق، پژوهشگر پردازش‌های لبه‌ای و شتاب‌دهنده‌های سخت‌افزاری مدل‌های هوش مصنوعی.", + "image": "/storage/team/4.webp", + "degree": "مهندسی برق", + "category": "content", + "social": { + "linkedin": "https://linkedin.com" + } + }, + { + "name": "زهرا مظفری", + "role": "پژوهشگر ارشد زبان‌شناسی", + "title": "زبان‌شناسی محاسباتی و NLP", + "bio": "دکتری زبان‌شناسی، متخصص تحلیل زبان طبیعی فارسی، پردازش متن و ارزیابی زبانی مدل‌های زبانی بزرگ.", + "image": "/storage/team/5.webp", + "degree": "دکتری زبان‌شناسی", + "category": "content", "social": { "linkedin": "https://linkedin.com" } diff --git a/src/index.css b/src/index.css index 9f5bf9c..51b0ec9 100644 --- a/src/index.css +++ b/src/index.css @@ -4,10 +4,11 @@ :root { --font-vazir: 'IRANYekan', 'IRANYekanX', 'Vazirmatn', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-english: 'Plus Jakarta Sans', sans-serif; - --primary: #193b74; - --primary-light: #2252a0; - --primary-dark: #0f2447; - --accent: #06b6d4; + --primary: #272757; + --primary-light: #373775; + --primary-dark: #1b1b3d; + --accent: #54b4d3; + --accent-light: #7dd3fc; } body { @@ -15,8 +16,8 @@ direction: rtl; text-align: right; overflow-x: hidden; - background-color: #080c14; - color: #f1f5f9; + background-color: #ffffff; + color: #1e293b; } } @@ -29,36 +30,53 @@ font-family: var(--font-english); } -/* Donya Theme & Elementor Button Styles */ +/* Unified Button Styles: White & Deep Navy #272757 */ .btn-donya-primary { - background: linear-gradient(135deg, #193b74 0%, #2252a0 100%); + background: #272757; color: #ffffff; - border: 1px solid rgba(255, 255, 255, 0.15); - box-shadow: 0 4px 15px rgba(25, 59, 116, 0.35); - transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); + border: 1px solid #1f1f45; + box-shadow: 0 2px 8px rgba(39, 39, 87, 0.25); + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + cursor: pointer; } .btn-donya-primary:hover { - background: linear-gradient(135deg, #2252a0 0%, #2e6fd6 100%); - box-shadow: 0 6px 20px rgba(34, 82, 160, 0.5); - transform: translateY(-2px); -} - -.btn-donya-outline { - background: rgba(25, 59, 116, 0.15); - color: #93c5fd; - border: 1px solid rgba(34, 82, 160, 0.4); - transition: all 0.2s ease; -} - -.btn-donya-outline:hover { - background: rgba(34, 82, 160, 0.3); - border-color: #60a5fa; - color: #ffffff; + background: #373775; + box-shadow: 0 4px 14px rgba(39, 39, 87, 0.35); transform: translateY(-1px); } -/* Section Header Decorator (Matching Donya Theme) */ +.btn-navy { + background: #272757; + color: #ffffff; + border: 1px solid #1f1f45; + box-shadow: 0 2px 8px rgba(39, 39, 87, 0.25); + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + cursor: pointer; +} + +.btn-navy:hover { + background: #373775; + box-shadow: 0 4px 14px rgba(39, 39, 87, 0.35); + transform: translateY(-1px); +} + +.btn-donya-outline { + background: #f4f4f9; + color: #272757; + border: 1px solid #d4d4e6; + transition: all 0.2s ease; + cursor: pointer; +} + +.btn-donya-outline:hover { + background: #e8e8f3; + border-color: #272757; + color: #1b1b3d; + transform: translateY(-1px); +} + +/* Section Header Decorator (White & #272757) */ .donya-section-header { text-align: center; margin-bottom: 2.5rem; @@ -68,7 +86,7 @@ .donya-section-title { font-size: 1.85rem; font-weight: 800; - color: #ffffff; + color: #272757; margin-bottom: 0.5rem; display: inline-flex; align-items: center; @@ -87,72 +105,190 @@ .donya-divider-line { flex: 1; height: 2px; - background: linear-gradient(90deg, transparent, #2252a0, transparent); + background: linear-gradient(90deg, transparent, #272757, transparent); } .donya-divider-icon { width: 9px; height: 9px; - background: #06b6d4; + background: #272757; transform: rotate(45deg); - box-shadow: 0 0 10px #06b6d4; + box-shadow: 0 0 6px rgba(39, 39, 87, 0.4); } -/* Glassmorphism & Elementor Card Styles */ +/* Light & Deep Navy Card Styles */ +.light-card { + background: #ffffff; + border: 1px solid #e2e8f0; + border-radius: 18px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05); + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); +} + +.light-card:hover { + border-color: #cbd5e1; + box-shadow: 0 10px 25px -5px rgba(39, 39, 87, 0.1); + transform: translateY(-2px); +} + +.dark-blue-card { + background: linear-gradient(135deg, #1b1b3d 0%, #272757 60%, #373775 100%); + color: #ffffff; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 20px; + box-shadow: 0 12px 30px -8px rgba(39, 39, 87, 0.25); +} + +/* Model Card Dynamic Gradient Accents */ +.model-card-premium { + position: relative; + background: #ffffff; + border: 1px solid #e2e8f0; + border-radius: 24px; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); + overflow: hidden; +} + +.model-card-premium::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 4px; + background: linear-gradient(90deg, #272757, #54b4d3, #272757); + background-size: 200% 100%; + opacity: 0; + transition: opacity 0.3s ease; +} + +.model-card-premium:hover { + transform: translateY(-4px); + border-color: #cbd5e1; + box-shadow: 0 20px 30px -10px rgba(39, 39, 87, 0.08), 0 0 0 1px rgba(84, 180, 211, 0.2); +} + +.model-card-premium:hover::before { + opacity: 1; + animation: shimmerBorder 2.5s infinite linear; +} + +@keyframes shimmerBorder { + 0% { background-position: 0% 0%; } + 100% { background-position: 200% 0%; } +} + +/* Animated Gradient Border Stat Card */ +.stat-card-animated { + position: relative; + background: #ffffff; + border-radius: 22px; + padding: 1.75rem 1.25rem; + transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1); + box-shadow: 0 4px 15px rgba(39, 39, 87, 0.04); + z-index: 1; +} + +.stat-card-animated::before { + content: ''; + position: absolute; + inset: -2px; + border-radius: 24px; + background: linear-gradient(135deg, #272757, #54b4d3, #7dd3fc, #38bdf8, #272757); + background-size: 300% 300%; + z-index: -1; + opacity: 0.6; + animation: gradientBorderSpin 4s ease infinite; + transition: opacity 0.3s ease; +} + +.stat-card-animated:hover { + transform: translateY(-5px); + box-shadow: 0 20px 35px -8px rgba(39, 39, 87, 0.15); +} + +.stat-card-animated:hover::before { + opacity: 1; + animation-duration: 2s; +} + +/* Moving Gradient Border Card for Enterprise Solutions */ +.enterprise-card-animated { + position: relative; + background: #ffffff; + border-radius: 24px; + padding: 1.75rem; + transition: all 0.35s cubic-bezier(0.16, 1, 0.3, 1); + box-shadow: 0 4px 20px rgba(39, 39, 87, 0.05); + z-index: 1; +} + +.enterprise-card-animated::before { + content: ''; + position: absolute; + inset: -2px; + border-radius: 26px; + background: linear-gradient(135deg, #272757, #54b4d3, #6366f1, #38bdf8, #272757); + background-size: 300% 300%; + z-index: -1; + opacity: 0.55; + animation: gradientBorderSpin 4s ease infinite; + transition: opacity 0.3s ease; +} + +.enterprise-card-animated:hover { + transform: translateY(-6px); + box-shadow: 0 22px 40px -10px rgba(39, 39, 87, 0.16); +} + +.enterprise-card-animated:hover::before { + opacity: 1; + animation-duration: 2s; +} + +@keyframes gradientBorderSpin { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +/* Legacy Support compatibility */ .glass-panel { - background: rgba(15, 23, 42, 0.75); - backdrop-filter: blur(16px); - -webkit-backdrop-filter: blur(16px); - border: 1px solid rgba(255, 255, 255, 0.08); + background: #ffffff; + border: 1px solid #e2e8f0; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04); } .glass-panel-hover { - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); } .glass-panel-hover:hover { - background: rgba(22, 33, 62, 0.85); - border-color: rgba(34, 82, 160, 0.6); - transform: translateY(-4px); - box-shadow: 0 15px 35px -10px rgba(25, 59, 116, 0.4); + background: #f8fafc; + border-color: #cbd5e1; + transform: translateY(-2px); + box-shadow: 0 12px 25px -5px rgba(39, 39, 87, 0.1); } .glass-card { - background: linear-gradient(135deg, rgba(255, 255, 255, 0.04) 0%, rgba(255, 255, 255, 0.01) 100%); - backdrop-filter: blur(12px); - -webkit-backdrop-filter: blur(12px); - border: 1px solid rgba(255, 255, 255, 0.08); + background: #ffffff; + border: 1px solid #e2e8f0; border-radius: 18px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04); } /* Text Gradients */ .text-gradient-primary { - background: linear-gradient(135deg, #ffffff 20%, #93c5fd 60%, #38bdf8 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; -} - -.text-gradient-gold { - background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 50%, #f97316 100%); + background: linear-gradient(135deg, #1b1b3d 0%, #272757 50%, #54b4d3 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .text-gradient-cyan { - background: linear-gradient(135deg, #38bdf8 0%, #06b6d4 50%, #0284c7 100%); + background: linear-gradient(135deg, #272757 0%, #373775 60%, #54b4d3 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } -/* Background Gradients */ -.bg-radial-gradient { - background: radial-gradient(circle at 50% 0%, rgba(25, 59, 116, 0.25) 0%, rgba(8, 12, 20, 0) 70%); -} - -.bg-radial-glow { - background: radial-gradient(circle at 80% 20%, rgba(34, 82, 160, 0.18) 0%, rgba(8, 12, 20, 0) 60%), - radial-gradient(circle at 20% 80%, rgba(6, 182, 212, 0.12) 0%, rgba(8, 12, 20, 0) 60%); -} - /* Custom Scrollbar */ ::-webkit-scrollbar { width: 7px; @@ -160,83 +296,14 @@ } ::-webkit-scrollbar-track { - background: #080c14; + background: #f8fafc; } ::-webkit-scrollbar-thumb { - background: #1e293b; + background: #d4d4e6; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { - background: #334155; + background: #272757; } - -/* Animations & Keyframes */ -@keyframes floatSlow { - 0%, 100% { - transform: translateY(0px); - } - 50% { - transform: translateY(-10px); - } -} - -@keyframes floatDelayed { - 0%, 100% { - transform: translateY(0px); - } - 50% { - transform: translateY(-8px); - } -} - -@keyframes pulseGlow { - 0%, 100% { - opacity: 0.6; - transform: scale(1); - } - 50% { - opacity: 0.9; - transform: scale(1.05); - } -} - -@keyframes spinSlow { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@keyframes spinReverseSlow { - from { - transform: rotate(360deg); - } - to { - transform: rotate(0deg); - } -} - -.animate-float { - animation: floatSlow 6s ease-in-out infinite; -} - -.animate-float-delayed { - animation: floatDelayed 7s ease-in-out infinite 2s; -} - -.animate-pulse-glow { - animation: pulseGlow 4s ease-in-out infinite; -} - -.animate-spin-slow { - animation: spinSlow 30s linear infinite; -} - -.animate-spin-reverse { - animation: spinReverseSlow 35s linear infinite; -} - diff --git a/src/main.tsx b/src/main.tsx index bef5202..831cb4e 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,7 +1,7 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import './index.css' -import App from './App.tsx' +import { App } from './App' createRoot(document.getElementById('root')!).render( diff --git a/src/pages/About.tsx b/src/pages/About.tsx index 855658c..0aa249c 100644 --- a/src/pages/About.tsx +++ b/src/pages/About.tsx @@ -76,8 +76,16 @@ export const About: React.FC = () => {
{teamData.map((member, idx) => (
-
- 👨‍💼 +
+ {member.name} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/owl_role_strategy.jpg'; + }} + />

{member.name}

{member.role} diff --git a/src/pages/Academy.tsx b/src/pages/Academy.tsx index 7e1ded8..0e2c281 100644 --- a/src/pages/Academy.tsx +++ b/src/pages/Academy.tsx @@ -33,202 +33,186 @@ export const Academy: React.FC = () => { ]; const filteredCourses = coursesData.filter((c) => { - const matchesCat = selectedCategory === 'all' || c.category === selectedCategory; - const matchesSearch = c.title.toLowerCase().includes(searchQuery.toLowerCase()) || + const matchesSearch = !searchQuery || + c.title.toLowerCase().includes(searchQuery.toLowerCase()) || c.description.toLowerCase().includes(searchQuery.toLowerCase()) || c.audience.toLowerCase().includes(searchQuery.toLowerCase()); - return matchesCat && matchesSearch; + return matchesSearch; }); return ( -
- {/* Background Glow */} -
- +
{/* Page Header */} -
-
- - آکادمی و دوره‌های آموزشی هوشان -
-

- آموزش‌های تخصصی هوش مصنوعی برای افراد و سازمان‌ها +
+

+ آموزش‌های تخصصی هوش مصنوعی

-

- ۱۸ دوره جامع، کاربردی و پروژه محور از مبانی و مهندسی پرامپت تا استراتژی تحول دیجیتال و پیاده‌سازی اتوماسیون‌های سازمانی. +

+ + + +
+

+ ۱۸ دوره جامع، کاربردی و پروژه محور از مبانی و مهندسی پرامپت تا استراتژی تحول دیجیتال و پیاده‌سازی اتوماسیون‌های سازمانی

- {/* Search & Category Filter */} -
-
- {categories.map((cat) => ( - - ))} -
- -
+ {/* Search Bar */} +
+
+ setSearchQuery(e.target.value)} - className="w-full pl-4 pr-10 py-2.5 rounded-xl bg-slate-900 border border-slate-800 text-xs text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500" + className="w-full pl-4 pr-12 py-3.5 rounded-2xl bg-slate-50 border border-slate-200 text-xs sm:text-sm text-slate-800 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs" /> -
{/* Courses Grid */} -
+
{filteredCourses.map((course) => (
-
-
- - {course.category} - -
- - {course.rating} +
+ {/* Course Cover Image Banner */} +
+ {course.title} +
+ + {/* Category Pill on Image */} +
+ + {course.category} + +
+ + {/* Duration Badge */} +
+ + {course.hours} +
+ + {/* Level Tag */} +
+ {course.level}
-

- {course.title} -

+ {/* Content */} +
+

+ {course.title} +

-

- {course.excerpt} -

+

+ {course.excerpt && course.excerpt !== '...' ? course.excerpt : course.description.slice(0, 140) + '...'} +

- {/* Course Metadata */} -
-
- - مدت: {course.hours} +
+ + مخاطبان: {course.audience}
-
- - سطح: {course.level} -
-
- -
- مخاطبان هدف: - {course.audience}
- {/* Action Button */} -
+ {/* Card Footer */} +
+
+ شهریه دوره: + {course.price} +
+
))}
- {/* Modal for Course Details */} - {activeCourseModal && ( -
-
e.stopPropagation()} +
+ + {/* Course Detail Modal */} + {activeCourseModal && ( +
+
+ + + + -
- - {activeCourseModal.category} - -

- {activeCourseModal.title} -

-
- -
-
- طول دوره: - {activeCourseModal.hours} -
-
- سطح آموزش: - {activeCourseModal.level} -
-
- مخاطبان: - {activeCourseModal.audience} -
-
- -
-

توضیحات و اهداف دوره:

-

{activeCourseModal.description}

-
- -
-

مزایای شرکت در این دوره:

-
-
- - ارائه گواهی معتبر پایان دوره از هوشان و شهرک علمی و تحقیقاتی اصفهان -
-
- - دسترسی به پروژه‌ها، تمرین‌های عملی و پرامپت‌های اختصاصی -
-
- - امکان برگزاری به صورت حضوری سازمانی یا آنلاین تعاملی -
-
-
- -
-
- شهریه و برگزاری: - ثبت‌نام انفرادی یا پکیج سازمانی -
- - - - ثبت‌نام و هماهنگی دوره - +
+ {activeCourseModal.title} +
+ {activeCourseModal.category}
-
- )} -
+
+

+ {activeCourseModal.title} +

+
+ + + مدت دوره: {activeCourseModal.hours} + + + + سطح: {activeCourseModal.level} + +
+
+ +
+

توضیحات و اهداف دوره:

+

+ {activeCourseModal.description} +

+
+ +
+
+ شهریه و شرایط سازمانی: + {activeCourseModal.price} +
+ + ثبت‌نام آنلاین + +
+ +
+
+ )} +
); }; diff --git a/src/pages/Blog.tsx b/src/pages/Blog.tsx index 5f4f47b..e3571ad 100644 --- a/src/pages/Blog.tsx +++ b/src/pages/Blog.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useMemo, useRef } from 'react'; import { Link } from 'react-router-dom'; import { BookOpen, @@ -8,56 +8,82 @@ import { ArrowLeft, ChevronLeft, ChevronRight, - Bot, - Cpu, - Wand2, - TrendingUp, - HelpCircle, - Image as ImageIcon + Bot, + Cpu, + Wand2, + TrendingUp, + HelpCircle, + LayoutGrid, + List, + Flame, + Newspaper, + Copy, + Check, + Award } from 'lucide-react'; import postsData from '../data/posts.json'; +// Category color and icon mapping export const getCategoryCover = (category: string) => { if (category.includes('معرفی ابزار') || category.includes('راهنمای')) { return { - gradient: 'from-cyan-950 via-slate-900 to-indigo-950', + gradient: 'from-sky-950 via-slate-900 to-indigo-950', icon: Wand2, - badgeColor: 'bg-cyan-500/20 text-cyan-300' + badgeColor: 'bg-sky-50 text-sky-700 border-sky-200', + badgeBg: 'bg-sky-50 text-sky-700 border-sky-200' }; } if (category.includes('آموزش') || category.includes('پرامپت')) { return { - gradient: 'from-indigo-950 via-slate-900 to-purple-950', + gradient: 'from-blue-950 via-slate-900 to-indigo-950', icon: Cpu, - badgeColor: 'bg-indigo-500/20 text-indigo-300' + badgeColor: 'bg-blue-50 text-[#272757] border-blue-200', + badgeBg: 'bg-blue-50 text-[#272757] border-blue-200' }; } if (category.includes('داستان') || category.includes('کسب')) { return { gradient: 'from-emerald-950 via-slate-900 to-slate-950', icon: TrendingUp, - badgeColor: 'bg-emerald-500/20 text-emerald-300' + badgeColor: 'bg-emerald-50 text-emerald-700 border-emerald-200', + badgeBg: 'bg-emerald-50 text-emerald-700 border-emerald-200' + }; + } + if (category.includes('اخبار') || category.includes('تحولات')) { + return { + gradient: 'from-rose-950 via-slate-900 to-slate-950', + icon: Newspaper, + badgeColor: 'bg-rose-50 text-rose-700 border-rose-200', + badgeBg: 'bg-rose-50 text-rose-700 border-rose-200' }; } if (category.includes('سوالات') || category.includes('رایج')) { return { gradient: 'from-amber-950 via-slate-900 to-slate-950', icon: HelpCircle, - badgeColor: 'bg-amber-500/20 text-amber-300' + badgeColor: 'bg-amber-50 text-amber-700 border-amber-200', + badgeBg: 'bg-amber-50 text-amber-700 border-amber-200' }; } return { - gradient: 'from-purple-950 via-slate-900 to-slate-950', + gradient: 'from-slate-950 via-slate-900 to-[#272757]', icon: Bot, - badgeColor: 'bg-purple-500/20 text-purple-300' + badgeColor: 'bg-indigo-50 text-indigo-700 border-indigo-200', + badgeBg: 'bg-indigo-50 text-indigo-700 border-indigo-200' }; }; +export const getCategoryMeta = getCategoryCover; + export const Blog: React.FC = () => { const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState('all'); + const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid'); const [currentPage, setCurrentPage] = useState(1); - const [imgErrors, setImgErrors] = useState>({}); + const [copiedPromptId, setCopiedPromptId] = useState(null); + + // Carousel scroll ref + const carouselRef = useRef(null); const postsPerPage = 9; const categories = [ @@ -70,13 +96,43 @@ export const Blog: React.FC = () => { 'راهنمای استفاده از ابزار' ]; - const filteredPosts = postsData.filter((post) => { - const matchesCat = selectedCategory === 'all' || post.categories.includes(selectedCategory); - const matchesSearch = post.title.toLowerCase().includes(searchQuery.toLowerCase()) || - post.excerpt.toLowerCase().includes(searchQuery.toLowerCase()) || - post.content.toLowerCase().includes(searchQuery.toLowerCase()); - return matchesCat && matchesSearch; - }); + // Bento featured posts + const bentoMain = postsData[0] || null; + const bentoSide1 = postsData[1] || null; + const bentoSide2 = postsData[2] || null; + const bentoSide3 = postsData[3] || null; + + // Carousel items: AI tools category + const toolPosts = useMemo(() => { + return postsData.filter(p => p.categories.some(c => c.includes('ابزار') || c.includes('راهنما'))).slice(0, 8); + }, []); + + // News timeline category + const newsPosts = useMemo(() => { + return postsData.filter(p => p.categories.some(c => c.includes('اخبار') || c.includes('تحولات'))).slice(0, 4); + }, []); + + // Success stories category + const successPosts = useMemo(() => { + return postsData.filter(p => p.categories.some(c => c.includes('داستان') || c.includes('موفقیت'))).slice(0, 3); + }, []); + + // Prompt / Tutorial posts + const tutorialPosts = useMemo(() => { + return postsData.filter(p => p.categories.some(c => c.includes('آموزش') || c.includes('پرامپت'))).slice(0, 3); + }, []); + + // Filtered posts for search and pagination + const filteredPosts = useMemo(() => { + return postsData.filter((post) => { + const matchesCat = selectedCategory === 'all' || post.categories.includes(selectedCategory); + const matchesSearch = + post.title.toLowerCase().includes(searchQuery.toLowerCase()) || + post.excerpt.toLowerCase().includes(searchQuery.toLowerCase()) || + (post.tags && post.tags.some(t => t.toLowerCase().includes(searchQuery.toLowerCase()))); + return matchesCat && matchesSearch; + }); + }, [selectedCategory, searchQuery]); const totalPages = Math.ceil(filteredPosts.length / postsPerPage); const currentPosts = filteredPosts.slice( @@ -84,200 +140,784 @@ export const Blog: React.FC = () => { currentPage * postsPerPage ); + const scrollCarousel = (direction: 'left' | 'right') => { + if (carouselRef.current) { + const scrollAmount = 340; + carouselRef.current.scrollBy({ + left: direction === 'left' ? -scrollAmount : scrollAmount, + behavior: 'smooth' + }); + } + }; + + const handleCopyPrompt = (id: number, text: string) => { + navigator.clipboard.writeText(text); + setCopiedPromptId(id); + setTimeout(() => setCopiedPromptId(null), 2000); + }; + return ( -
- {/* Background Glow */} -
- -
+
+
- {/* Page Header */} -
-
- - رسانه هوش مصنوعی هوشان ({postsData.length} مقاله تخصصی) -
-

- مرجع مقالات، اخبار و آموزش‌های هوش مصنوعی + {/* Page Header with White & Dark Blue Theme */} +
+

+ مجله و آموزش‌های هوش مصنوعی

-

- به‌روزترین مقالات تحلیلی، راهنماهای مهندسی پرامپت، بررسی ابزارها و داستان‌های موفقیت پیاده‌سازی هوش مصنوعی در کسب‌وکارها. -

-
- {/* Filters and Search Bar */} -
-
- {categories.map((cat) => ( - - ))} -
- -
- { - setSearchQuery(e.target.value); - setCurrentPage(1); - }} - className="w-full pl-4 pr-10 py-2.5 rounded-xl bg-slate-900 border border-slate-800 text-xs text-white placeholder-slate-500 focus:outline-none focus:border-indigo-500" - /> - + placeholder="جستجو در بین مقالات، پرامپت‌ها و ابزارها..." + className="w-full pl-4 pr-12 py-3 bg-gray-50/80 border border-gray-200 rounded-2xl text-sm focus:outline-none focus:border-[#54b4d3] focus:bg-white text-slate-800 placeholder-gray-400 transition-all shadow-xs" + /> +

- {/* Articles Grid */} - {currentPosts.length > 0 ? ( -
- {currentPosts.map((post) => { - const theme = getCategoryCover(post.categories[0] || ''); - const Icon = theme.icon; - const hasImg = post.thumbnail && !imgErrors[post.id]; + {/* ========================================================================= */} + {/* 1. FEATURED ARTICLES (FLUSH EDGE-TO-EDGE COVER IMAGES) */} + {/* ========================================================================= */} + {!searchQuery && selectedCategory === 'all' && ( +
+
+
+ +

+ مقالات ویژه و منتخب تحریریه +

+
+ + ویژه یادگیری و کاربردهای صنعتی + +
- return ( -
+ {/* Grid Container */} +
+ + {/* Featured Large Card (Right in RTL, lg:col-span-7) */} + {bentoMain && ( +
- {/* Cover Section */} -
- {hasImg ? ( - <> - {post.title} setImgErrors(prev => ({ ...prev, [post.id]: true }))} - /> -
- - ) : ( -
-
- - {post.categories[0] || 'هوش مصنوعی'} - -
- -
-
-
- #HOUSHAN_AI -

{post.title}

-
-
- )} - - {/* Floating Category Badge if image exists */} - {hasImg && ( -
- - {post.categories[0] || 'هوش مصنوعی'} - -
- )} + {/* Large Cover Image Container: Flush edge-to-edge */} +
+ {bentoMain.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> + + {bentoMain.categories[0]} +
- {/* Body */} -
-
- - - {post.date} +
+
+ + + {bentoMain.date} - - - {post.readTime} + + + + {bentoMain.readTime}
-

- - {post.title} - -

+ +

+ {bentoMain.title} +

+ -

- {post.excerpt} +

+ {bentoMain.excerpt}

- {/* Footer Action */} -
+
+
+ Houshan + تیم تحریریه هوشان +
مطالعه کامل مقاله - +
-
- ); - })} -
- ) : ( -
- -

مقاله‌ای با این مشخصات یافت نشد

-

لطفاً عبارت دیگری را جستجو کنید یا فیلتر دسته‌بندی را تغییر دهید.

+
+ )} + + {/* Side Cards with Flush Cover Images (Left in RTL, lg:col-span-5) */} +
+ + {/* Side Card 1 */} + {bentoSide1 && ( +
+
+ {bentoSide1.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> +
+ +
+
+ + {bentoSide1.categories[0]} + + + +

+ {bentoSide1.title} +

+ +
+ +
+ {bentoSide1.readTime} + + مطالعه + + +
+
+
+ )} + + {/* Side Card 2 */} + {bentoSide2 && ( +
+
+ {bentoSide2.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> +
+ +
+
+ + {bentoSide2.categories[0]} + + + +

+ {bentoSide2.title} +

+ +
+ +
+ {bentoSide2.readTime} + + مطالعه + + +
+
+
+ )} + + {/* Side Card 3 */} + {bentoSide3 && ( +
+
+ {bentoSide3.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> +
+ +
+
+ + {bentoSide3.categories[0]} + + + +

+ {bentoSide3.title} +

+ +
+ +
+ {bentoSide3.readTime} + + مطالعه + + +
+
+
+ )} + +
+ +
+

+ )} + + {/* ========================================================================= */} + {/* 2. AI TOOLS SHOWCASE */} + {/* ========================================================================= */} + {!searchQuery && selectedCategory === 'all' && ( +
+
+ + {/* Header with Navigation Controls */} +
+
+
+ +
+
+

+ معرفی ابزارهای هوش مصنوعی +

+

راهنماهای گام به گام کار با جدیدترین هوش‌های مصنوعی

+
+
+ + {/* Arrow Controls */} +
+ + +
+
+ + {/* Horizontal Scrollable Carousel */} +
+ {toolPosts.map((post) => ( +
+
+ {post.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> + + ابزار کاربردی + +
+ +
+
+ +

+ {post.title} +

+ +

+ {post.excerpt} +

+
+ +
+ {post.readTime} + + مطالعه + + +
+
+
+ ))} +
+ +
+
+ )} + + {/* ========================================================================= */} + {/* 3. DEDICATED CATEGORY SECTIONS */} + {/* ========================================================================= */} + {!searchQuery && selectedCategory === 'all' && ( +
+ + {/* 3.1 NEWS FEED */} +
+
+
+
+ +
+
+

+ آخرین اخبار و تحولات دنیای هوش مصنوعی +

+

پوشش دستاوردهای مدل‌های جدید و تکنولوژی‌های روز دنیا

+
+
+
+ +
+ {newsPosts.map((news, idx) => ( +
+
+ {news.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> +
+
+
+ خبر #{idx + 1} + + {news.date} +
+ +

+ {news.title} +

+ +

+ {news.excerpt} +

+
+
+ ))} +
+
+ + {/* 3.2 TUTORIALS & PROMPTS */} +
+
+
+ +
+
+

+ آموزش و ترفندهای پرامپت‌نویسی +

+

دستورات تست شده برای بهترین خروجی در چت‌بات‌ها و تولید تصویر

+
+
+ +
+ {tutorialPosts.map((tut) => ( +
+
+
+ {tut.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> + + آموزش کاربردی + +
+ +
+ +

+ {tut.title} +

+ + + {/* Sample Copyable Prompt Box */} +
+ نمونه دستور پیشنهادی: +

+ {tut.excerpt.slice(0, 80)}... +

+ +
+
+
+ +
+ + مشاهده آموزش کامل + +
+
+ ))} +
+
+ + {/* 3.3 CASE STUDIES */} +
+
+
+ +
+
+

+ داستان‌های موفقیت و تجربیات کسب‌وکارها +

+

چگونه شرکت‌های پیشرو با هوش مصنوعی بهره‌وری خود را چند برابر کردند

+
+
+ +
+ {successPosts.map((success) => ( +
+
+
+ {success.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> + + تجربه موفق + +
+ +
+ +

+ {success.title} +

+ +

+ {success.excerpt} +

+
+
+ +
+ {success.date} + + تحلیل دستاورد + + +
+
+ ))} +
+
+
)} - {/* Pagination Controls */} - {totalPages > 1 && ( -
- + {/* ========================================================================= */} + {/* 4. ALL ARTICLES DIRECTORY */} + {/* ========================================================================= */} +
+ +
+
+ +

+ همه مقالات و آموزش‌ها ({filteredPosts.length}) +

+
- {Array.from({ length: Math.min(6, totalPages) }, (_, i) => { - const pageNum = i + 1; - return ( - - ); - })} - - + {/* Grid / List View Toggle */} +
+ + +
- )} + + + + {/* Posts Grid or List */} + {currentPosts.length === 0 ? ( +
+

هیچ مقاله‌ای مطابق جستجوی شما یافت نشد.

+ +
+ ) : viewMode === 'grid' ? ( +
+ {currentPosts.map((post) => { + const meta = getCategoryCover(post.categories[0] || ''); + return ( +
+
+ {/* Flush Cover Thumbnail */} +
+ {post.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> + + {post.categories[0]} + +
+ +
+
+ + {post.date} + + + {post.readTime} +
+ + +

+ {post.title} +

+ + +

+ {post.excerpt} +

+
+
+ +
+
+ {post.tags?.slice(0, 2).map((t) => ( + + #{t} + + ))} +
+ + + ادامه + + +
+
+ ); + })} +
+ ) : ( +
+ {currentPosts.map((post) => { + const meta = getCategoryCover(post.categories[0] || ''); + return ( +
+
+ {post.title} { + const target = e.target as HTMLImageElement; + target.src = '/storage/banner/herosection-1.png'; + }} + /> +
+ +
+
+ + {post.categories[0]} + + + {post.date} + + {post.readTime} +
+ + +

+ {post.title} +

+ + +

+ {post.excerpt} +

+ +
+
+ {post.tags?.slice(0, 3).map((t) => ( + + #{t} + + ))} +
+ + مطالعه مقاله + + +
+
+
+ ); + })} +
+ )} + + {/* Pagination Controls */} + {totalPages > 1 && ( +
+ + +
+ {Array.from({ length: totalPages }).map((_, i) => { + const pageNum = i + 1; + if (pageNum === 1 || pageNum === totalPages || (pageNum >= currentPage - 1 && pageNum <= currentPage + 1)) { + return ( + + ); + } + if (pageNum === currentPage - 2 || pageNum === currentPage + 2) { + return ...; + } + return null; + })} +
+ + +
+ )} + +
diff --git a/src/pages/BlogPost.tsx b/src/pages/BlogPost.tsx index e456108..00cb885 100644 --- a/src/pages/BlogPost.tsx +++ b/src/pages/BlogPost.tsx @@ -8,15 +8,29 @@ import { Tag, BookOpen, Check, - Bot, - Wand2, - Cpu, - TrendingUp, - HelpCircle + Bot, + Wand2, + Cpu, + TrendingUp, + HelpCircle, + ArrowLeft } from 'lucide-react'; import postsData from '../data/posts.json'; import { getCategoryCover } from './Blog'; +// Safe sanitization helper to strip script, iframe, embed, javascript: and inline event handlers +const safeSanitizeHtml = (html: string): string => { + if (!html) return ''; + return html + .replace(/)<[^<]*)*<\/script>/gi, '') + .replace(/)<[^<]*)*<\/iframe>/gi, '') + .replace(/)<[^<]*)*<\/object>/gi, '') + .replace(/)<[^<]*)*<\/embed>/gi, '') + .replace(/on\w+\s*=\s*(['"]).*?\1/gi, '') + .replace(/on\w+\s*=\s*[^\s>]+/gi, '') + .replace(/javascript\s*:/gi, ''); +}; + export const BlogPost: React.FC = () => { const { slug } = useParams<{ slug: string }>(); const [copied, setCopied] = useState(false); @@ -41,12 +55,12 @@ export const BlogPost: React.FC = () => { if (!post) { return ( -
-

مقاله مورد نظر یافت نشد

-

ممکن است این نوشته حذف یا آدرس آن تغییر کرده باشد.

+
+

مقاله مورد نظر یافت نشد

+

ممکن است این مقاله حذف یا جابجا شده باشد.

بازگشت به وبلاگ @@ -76,131 +90,143 @@ export const BlogPost: React.FC = () => { }; return ( -
+
{/* Scroll Progress Bar */}
{/* Breadcrumb & Back */} -
- +
+ بازگشت به مقالات رسانه هوشان
- + {post.categories[0] || 'هوش مصنوعی'}
- {/* Featured Cover Image if available */} + {/* Featured Cover Image */} {hasImg && ( -
+
{post.title} setImgError(true)} /> -
)} - {/* Themed Banner Header */} -
+ {/* Article Header Banner */} +
-
+
- HOUSHAN RESEARCH + HOUSHAN RESEARCH
-

+

{post.title}

-
+
- + {post.date}
- + زمان مطالعه: {post.readTime}
- - تیم پژوهش هوشان + + دسته‌بندی: {post.categories.join('، ')}
+ {/* Article Excerpt */} + {post.excerpt && ( +
+ {post.excerpt} +
+ )} + {/* Article Body Content */} -
+
{/* Tags */} {post.tags && post.tags.length > 0 && ( -
- - برچسب‌ها: - {post.tags.map((tag, idx) => ( - - #{tag} - - ))} +
+
+ + برچسب‌های مرتبط: +
+
+ {post.tags.map((tag) => ( + + #{tag} + + ))} +
)} - {/* Related Articles */} + {/* Related Posts */} {relatedPosts.length > 0 && ( -
-

- - مقالات مرتبط پیشنهادی +
+

+ مقالات پیشنهادی و مرتبط

- -
- {relatedPosts.map((rp) => ( +
+ {relatedPosts.map((rel) => (
- - {rp.categories[0]} + + {rel.categories[0]} -

- {rp.title} +

+ {rel.title}

-
- {rp.date} - {rp.readTime} +
+ {rel.readTime} + + مطالعه + +
))} diff --git a/src/pages/Careers.tsx b/src/pages/Careers.tsx new file mode 100644 index 0000000..6e7bcdc --- /dev/null +++ b/src/pages/Careers.tsx @@ -0,0 +1,338 @@ +import React, { useState } from 'react'; +import { + Briefcase, + Sparkles, + Send, + CheckCircle2, + Clock, + MapPin, + Coffee, + Zap, + GraduationCap, + HeartHandshake, + ArrowLeft, + ChevronDown +} from 'lucide-react'; + +export const Careers: React.FC = () => { + const [formSubmitted, setFormSubmitted] = useState(false); + const [formData, setFormData] = useState({ + fullName: '', + email: '', + phone: '', + role: 'مهندسی هوش مصنوعی و پردازش زبان طبیعی (NLP)', + experience: '۳ تا ۵ سال', + linkedin: '', + resumeLink: '', + message: '' + }); + + const perks = [ + { + icon: Zap, + title: 'کار بر لبه فناوری هوش مصنوعی', + desc: 'دسترسی نامحدود به پیشرفته‌ترین مدل‌های زبانی جهان و زیرساخت‌های محاسباتی مدرن.' + }, + { + icon: Clock, + title: 'ساعات کاری منعطف و دورکاری', + desc: 'فرهنگ نتیجه‌محور با امکان دورکاری کامل یا هیبریدی برای موقعیت‌های فنی و محتوایی.' + }, + { + icon: GraduationCap, + title: 'بودجه یادگیری و توسعه فردی', + desc: 'حمایت کامل از ثبت‌نام در دوره‌های بین‌المللی، کتاب‌ها، کنفرانس‌ها و مقالات علمی.' + }, + { + icon: HeartHandshake, + title: 'پاداش و سهام تشویقی (ESOP)', + desc: 'حقوق رقابتی، بیمه تکمیلی، و مشارکت در سود و سهام تشویقی برای اعضای کلیدی تیم.' + } + ]; + + const positions = [ + { + id: 'ai-engineer', + title: 'مهندس ارشد هوش مصنوعی و NLP', + department: 'فنی و مهندسی داده', + location: 'اصفهان / دورکاری', + type: 'تمام وقت', + requirements: [ + 'تسلط عمیق بر پایتون و فریم‌ورک‌های PyTorch یا TensorFlow', + 'تجربه کار با مدل‌های زبانی بزرگ (LLMs) و تکنیک‌های RAG و Fine-Tuning', + 'آشنایی با پردازش زبان طبیعی زبان فارسی و پایگاه داده‌های برداری (Vector DBs)' + ] + }, + { + id: 'frontend-dev', + title: 'توسعه‌دهنده فرانت‌اند React / Next.js', + department: 'توسعه محصول', + location: 'اصفهان / دورکاری', + type: 'تمام وقت', + requirements: [ + 'تسلط کامل بر React، TypeScript، TailwindCSS و معماری وب‌اپلیکیشن‌های مدرن', + 'تجربه در پیاده‌سازی رابط‌های کاربری بلادرنگ (WebSockets / SSE)', + 'دید قوی در UI/UX و طراحی واکنش‌گرا (Responsive)' + ] + }, + { + id: 'prompt-specialist', + title: 'متخصص مهندسی پرامپت و تولید محتوا', + department: 'محتوا و آکادمی', + location: 'دورکاری', + type: 'پاره وقت / تمام وقت', + requirements: [ + 'مهارت عالی در نگارش متن، ساخت سناریوهای مکالمه و پرامپت‌نویسی دقیق', + 'آشنایی با ابزارهای Claude، ChatGPT، Midjourney و ابزارهای ساخت تصویر AI', + 'توانایی تولید مقالات و آموزش‌های تخصصی هوش مصنوعی' + ] + }, + { + id: 'b2b-sales', + title: 'کارشناس توسعه فروش سازمانی (B2B)', + department: 'فروش و بازاریابی', + location: 'تهران / اصفهان', + type: 'تمام وقت', + requirements: [ + 'حداقل ۲ سال سابقه فروش B2B در صنعت نرم‌افزار و فناوری اطلاعات', + 'فن بیان قوی، مهارت مذاکره با مدیران ارشد سازمان‌ها و پرزنت راهکارها', + 'پیگیری منظم لیدها و مدیریت فرآیند قراردادها' + ] + } + ]; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + setFormSubmitted(true); + }; + + return ( +
+
+ + {/* Page Header */} +
+

+ همکاری با ما +

+
+ + + +
+

+ در دنیای طراحی اعتقاد بر این است که طرح‌های شگفت‌انگیز آینده با کنار هم قرار دادن ناهمگون‌ها ایجاد می‌شوند. اگر مشتاق حل چالش‌های بزرگ هوش مصنوعی هستید، جای شما در تیم ما خالی است! +

+
+ + {/* Culture & Perks Grid */} +
+
+

چرا هوشان جای متفاوتی برای رشد است؟

+

مزایا و ارزش‌هایی که با پیوستن به خانواده هوشان تجربه خواهید کرد

+
+ +
+ {perks.map((p, idx) => { + const Icon = p.icon; + return ( +
+
+ +
+

{p.title}

+

{p.desc}

+
+ ); + })} +
+
+ + {/* Open Positions */} +
+
+

موقعیت‌های شغلی فعال

+

هم‌اکنون در این حوزه‌ها مشتاق همکاری با متخصصان برتر هستیم

+
+ +
+ {positions.map((pos) => ( +
+
+
+

{pos.title}

+

{pos.department}

+
+
+ + {pos.location} + + + {pos.type} + +
+
+ +
+ مهارت‌ها و نیازمندی‌ها: +
    + {pos.requirements.map((req, rIdx) => ( +
  • + + {req} +
  • + ))} +
+
+
+ ))} +
+
+ + {/* Application Form */} +
+
+

+ فرم پیوستن به خانواده هوشان +

+

+ اطلاعات و رزومه خود را وارد کنید؛ تیم منابع انسانی هوشان حداکثر ظرف ۳ روز کاری با شما در ارتباط خواهد بود. +

+
+ + {formSubmitted ? ( +
+ +

رزومه شما با موفقیت دریافت شد

+

+ از ابراز علاقه شما برای همکاری با هوشان سپاسگزاریم. پرونده شما با دقت بررسی شده و نتیجه از طریق ایمیل یا تماس تلفنی اطلاع‌رسانی خواهد شد. +

+
+ ) : ( +
+
+
+ + setFormData({ ...formData, fullName: e.target.value })} + placeholder="مثال: علی رضایی" + className="w-full px-4 py-2.5 rounded-xl bg-slate-50 border border-slate-200 text-xs sm:text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs" + /> +
+
+ + setFormData({ ...formData, phone: e.target.value })} + placeholder="09123456789" + className="w-full px-4 py-2.5 rounded-xl bg-slate-50 border border-slate-200 text-xs sm:text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs text-left" + /> +
+
+ +
+
+ + setFormData({ ...formData, email: e.target.value })} + placeholder="ali@example.com" + className="w-full px-4 py-2.5 rounded-xl bg-slate-50 border border-slate-200 text-xs sm:text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs text-left" + /> +
+
+ + +
+
+ +
+
+ + setFormData({ ...formData, resumeLink: e.target.value })} + placeholder="https://drive.google.com/..." + className="w-full px-4 py-2.5 rounded-xl bg-slate-50 border border-slate-200 text-xs sm:text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs text-left" + /> +
+
+ + setFormData({ ...formData, linkedin: e.target.value })} + placeholder="https://linkedin.com/in/..." + className="w-full px-4 py-2.5 rounded-xl bg-slate-50 border border-slate-200 text-xs sm:text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:border-[#54b4d3] shadow-xs text-left" + /> +
+
+ +
+ +