diff --git a/COMPANY_PROFILE.md b/COMPANY_PROFILE.md
new file mode 100644
index 0000000..3443d37
--- /dev/null
+++ b/COMPANY_PROFILE.md
@@ -0,0 +1,10 @@
+# ملف الشركة الناشئة
+
+* **الاسم**: Tripz
+* **القطاع**: Mobility (التنقل)، تقنيات النقل، السفر
+* **المرحلة**: Pre-seed
+* **الدولة**: مصر (تستهدف التوسع في الشرق الأوسط وشمال أفريقيا)
+* **الإيرادات**: في مرحلة مبكرة / بناء منتج عامل (MVP)
+* **نوع التمويل المطلوب**: رأس مال جريء (VC)، منح (Grants)، مسرعات أعمال (Accelerators)
+
+هذا الملف يستخدم لتحليل الفرص الاستثمارية وتحديد مدى توافقها (Fit Score) مع الشركة.
diff --git a/INVESTOR_PITCH_AR.md b/INVESTOR_PITCH_AR.md
new file mode 100644
index 0000000..3714324
--- /dev/null
+++ b/INVESTOR_PITCH_AR.md
@@ -0,0 +1,22 @@
+
+
+# منصة ScoutIQ: ذكاء استثماري متطور
+
+**ScoutIQ** هي منصة متقدمة لذكاء المستثمرين (Investor Intelligence Platform) مصممة خصيصاً لسوق منطقة الشرق الأوسط وشمال أفريقيا (MENA).
+
+### ما هي ScoutIQ؟
+هي أداة تعتمد على الذكاء الاصطناعي لجمع وتحليل الفرص الاستثمارية بشكل آلي. تهدف المنصة إلى تزويد المستثمرين برؤى دقيقة ومدعومة بالبيانات لاتخاذ قرارات استثمارية مدروسة بسرعة وكفاءة عالية.
+
+### لماذا ScoutIQ؟
+1. **الذكاء الاصطناعي في صميم العمل:** نستخدم خوارزميات متطورة لتحليل السوق وتحديد الفرص الواعدة.
+2. **الأتمتة والفعالية:** تقليل الوقت والجهد في البحث والتحليل اليدوي.
+3. **جزء من منظومة متكاملة:** ScoutIQ ليست منتجاً معزولاً، بل هي جزء من منظومة تقنية شاملة تشمل منصات التنقل (Tripz, Intaleq)، ومنصة التحقق من الهوية (Musadeq)، ومنصة الأتمتة والذكاء الاصطناعي (Nabeeh).
+4. **التوسع:** نركز على أسواق واعدة مثل مصر، سوريا، ومنطقة الشرق الأوسط عموماً.
+
+### الرؤية الاستثمارية
+نحن نبني بنية تحتية تقنية تمكن المستثمرين من استغلال البيانات لاتخاذ قرارات حاسمة في أسواق سريعة النمو.
+
+---
+**للمزيد من المعلومات والتواصل حول فرص الاستثمار، يرجى مراسلتنا عبر تليجرام.**
+
+
diff --git a/app/Services/Crawler/AiAnalyzer.php b/app/Services/Crawler/AiAnalyzer.php
index 677d166..3e67637 100644
--- a/app/Services/Crawler/AiAnalyzer.php
+++ b/app/Services/Crawler/AiAnalyzer.php
@@ -23,24 +23,41 @@ class AiAnalyzer
*/
public function analyze(string $title, string $description): array
{
+ $companyProfile = '';
+ $profilePath = __DIR__ . '/../../../COMPANY_PROFILE.md';
+ if (file_exists($profilePath)) {
+ $companyProfile = file_get_contents($profilePath);
+ }
+
if (!$this->apiKey) {
return $this->fallbackAnalysis($title, $description);
}
$prompt = << $type,
'opportunity_type' => $opportunityType,
- 'score' => $score,
+ 'fit_score' => $score,
'tags' => $tags,
'is_opportunity' => $isOpportunity,
'summary' => substr($description, 0, 200),
'organization_name' => $orgName,
'country' => $country,
+ 'why_it_matters' => ['فرصة عامة'],
+ 'requirements' => ['غير محدد'],
+ 'deadline' => null,
+ 'effort' => 'متوسط',
+ 'potential_return' => 'متوسط',
];
}
}
\ No newline at end of file
diff --git a/app/Services/Crawler/Collector.php b/app/Services/Crawler/Collector.php
index 51bfe47..601d3fa 100644
--- a/app/Services/Crawler/Collector.php
+++ b/app/Services/Crawler/Collector.php
@@ -250,7 +250,7 @@ class Collector
private function createOpportunity(array $entry, array $analysis, ?int $orgId, array $source): void
{
try {
- $score = min(100, max(0, $analysis['score'] ?? 10));
+ $score = min(100, max(0, $analysis['fit_score'] ?? $analysis['score'] ?? 10));
$stmt = $this->pdo->prepare(
"INSERT INTO opportunities (title, description, type, organization_id, url, status, score, raw_data)
@@ -293,7 +293,7 @@ class Collector
$oppType = $analysis['opportunity_type'] ?? $analysis['type'] ?? 'other';
$importantTypes = ['vc_funding', 'accelerator', 'incubator', 'grant', 'competition'];
- if ($score >= $minScore && in_array($oppType, $importantTypes)) {
+ if ($score >= $minScore && in_array($oppType, $importantTypes) && !empty($analysis['is_opportunity'])) {
$orgName = '';
if ($orgId) {
$orgStmt = $this->pdo->prepare("SELECT name FROM organizations WHERE id = ?");
@@ -304,10 +304,15 @@ class Collector
$this->notifier->notifyNewOpportunity([
'title' => $entry['title'],
'type' => $oppType,
- 'score' => $score,
+ 'fit_score' => $score,
'url' => $entry['url'],
'description' => $analysis['summary'] ?? $entry['description'],
'org_name' => $orgName,
+ 'why_it_matters' => $analysis['why_it_matters'] ?? [],
+ 'requirements' => $analysis['requirements'] ?? [],
+ 'deadline' => $analysis['deadline'] ?? null,
+ 'effort' => $analysis['effort'] ?? 'متوسط',
+ 'potential_return' => $analysis['potential_return'] ?? 'متوسط',
]);
}
}
diff --git a/app/Services/Notification/TelegramNotifier.php b/app/Services/Notification/TelegramNotifier.php
index 9a814c4..be8a905 100644
--- a/app/Services/Notification/TelegramNotifier.php
+++ b/app/Services/Notification/TelegramNotifier.php
@@ -159,36 +159,52 @@ class TelegramNotifier
public function notifyNewOpportunity(array $opportunity): void
{
$title = $opportunity['title'] ?? 'Untitled';
- $type = $opportunity['type'] ?? 'other';
- $score = $opportunity['score'] ?? 0;
+ $fitScore = $opportunity['fit_score'] ?? 0;
$url = $opportunity['url'] ?? '';
- $desc = $opportunity['description'] ?? '';
$orgName = $opportunity['org_name'] ?? '';
+ $whyItMatters = $opportunity['why_it_matters'] ?? [];
+ $requirements = $opportunity['requirements'] ?? [];
+ $deadline = $opportunity['deadline'] ?? null;
+ $effort = $opportunity['effort'] ?? 'متوسط';
+ $potentialReturn = $opportunity['potential_return'] ?? 'متوسط';
- $typeTranslations = [
- 'vc_funding' => 'تمويل رأس مال جريء (VC)',
- 'accelerator' => 'مسرعة أعمال (Accelerator)',
- 'incubator' => 'حاضنة أعمال (Incubator)',
- 'grant' => 'منحة (Grant)',
- 'competition' => 'مسابقة (Competition)',
- 'demo_day' => 'يوم عرض المشاريع (Demo Day)',
- 'event' => 'فعالية (Event)',
- 'partnership' => 'شراكة (Partnership)',
- 'other' => 'أخرى',
- ];
- $translatedType = $typeTranslations[$type] ?? $type;
+ $effortEmoji = (str_contains($effort, 'عالي') || str_contains(strtolower($effort), 'high')) ? '🔴' : ((str_contains($effort, 'متوسط') || str_contains(strtolower($effort), 'medium')) ? '🟡' : '🟢');
+ $returnEmoji = (str_contains($potentialReturn, 'عالي') || str_contains(strtolower($potentialReturn), 'high')) ? '🟢' : ((str_contains($potentialReturn, 'متوسط') || str_contains(strtolower($potentialReturn), 'medium')) ? '🟡' : '🔴');
- $message = "💡 *فرصة استثمارية جديدة:* {$title}\n\n";
- $message .= "▪️ *النوع:* {$translatedType}\n";
- $message .= "▪️ *درجة الأهمية:* {$score}/100\n";
+ $message = "💡 *ScoutIQ*\n\n";
+ $message .= "*{$title}*";
if ($orgName) {
- $message .= "▪️ *الجهة:* {$orgName}\n";
+ $message .= " – {$orgName}";
}
- if ($desc) {
- $message .= "\n*الملخص ونقاط القوة:*\n_{$desc}_\n";
+
+ $message .= "\n\n🔥 *Match Score:* {$fitScore}/100\n";
+
+ if (!empty($whyItMatters)) {
+ $message .= "\n*لماذا تهمك؟*\n";
+ foreach ((array)$whyItMatters as $why) {
+ $message .= "• {$why}\n";
+ }
}
+
+ if (!empty($requirements)) {
+ $message .= "\n*المتطلبات:*\n";
+ foreach ((array)$requirements as $req) {
+ $message .= "• {$req}\n";
+ }
+ }
+
+ if ($deadline) {
+ $message .= "\n*الموعد النهائي:*\n{$deadline}\n";
+ }
+
+ $message .= "\n*الجهد المطلوب:*\n{$effortEmoji} {$effort}\n";
+ $message .= "\n*العائد المحتمل:*\n{$returnEmoji} {$potentialReturn}\n";
+
+ $message .= "\n*الإجراء:*\n";
if ($url) {
- $message .= "\n🔗 [رابط التقديم والتواصل]({$url})";
+ $message .= "[قدم الآن]({$url})";
+ } else {
+ $message .= "لا يوجد رابط متاح";
}
$this->send($message, 'opportunity');