import React, { useEffect, useRef, useState } from 'react'; import { ArrowRight, Bell, Building2, CalendarDays, ChartNoAxesCombined, CheckCircle2, FileSearch, Gavel, Kanban, MapPin, Radar, Sparkles, Tag, Timer, TrendingUp, Zap, Microscope, FileSignature, Package, Search, Calculator, Trophy, Send, FolderCheck, ScanText, BookOpen, Smartphone, Plug, CalendarClock, MessageSquareText, FolderSearch, ShieldAlert } from 'lucide-react'; /* ---------- yeni eklenenler ---------- */ const YENILIKLER = [ { icon: MessageSquareText, baslik: 'Teklif Asistanı: belgeye sor, taslağı denetle, taslak üret', metin: 'Detaydaki yeni sekme: dokümana “teminat ne kadar?” diye sorun ([n] atıflı yanıt), teklif metninizi gerekliliklerle denetleyin (karşılanıyor / eksik / belirsiz), kapak-teknik-ticari taslağı üretin; rakam uydurmaz.' }, { icon: FolderSearch, baslik: 'Yeterlilik eşleştirme', metin: 'Derin analizin belge kontrol listesindeki her madde Doküman Deposu’ndaki evrakla eşlenir: Depoda hazır / Yakında dolacak / Süresi dolmuş / Depoda yok.' }, { icon: Plug, baslik: 'MCP sunucusu + RSS', metin: 'Claude Code, Cursor ve Claude Desktop’tan İhaleist’i doğrudan sorgulayın (ihale ara, sonuç ara, kalem ara, yaklaşan tarihler); filtreli RSS beslemesini okuyucunuza veya Slack’e ekleyin.' }, { icon: CalendarClock, baslik: 'Yaklaşan ihale tarihleri + haftalık brief', metin: 'Sağ panelde takipli ihalelerin 14 günlük geri sayımı; her Pazartesi 08:00 bu hafta yapılacaklar ve geçen hafta sonuçlananlar Telegram + e-postayla tek mesajda.' }, { icon: ShieldAlert, baslik: '5 yeni kırmızı bayrak kuralı', metin: 'Kısa süre, hafta sonu tarih, geç sözleşme, kazananı gizli ve doğrudan temin parçalama şüphesi (aynı idare + sektörde 30 günde 3+ DT) mevcut kurallara eklendi.' }, { icon: FileSignature, baslik: 'İhale dosyası hazırla', metin: 'Analizden sonra teklif mektubu, birim fiyat cetveli ve evrak listesi tek tıkla; eksik bilgiyi sorar, yazıyla tutarı kendisi yazar, yazdırmaya hazır çıkarır.' }, { icon: Package, baslik: 'Kartta teklif cetveli kalemleri', metin: 'Şartname indirmeden kalem adı, miktar ve birim ihale kartında. Ortak havuz: bir kullanıcının yüklediği doküman herkesin kartını doldurur.' }, { icon: Search, baslik: 'Ürün arama — cetvel ve şartname içinde', metin: 'Ürününüzün adıyla EKAP teklif cetveli ve teknik şartnamelerin içinde arayın; OKAS koduyla da tarayın. Başlıkta geçmeyen ihaleleri bulun.' }, { icon: Sparkles, baslik: 'Uyum skoru ve firma eşiği', metin: 'Firma profilinize göre her ihaleye hibrit (sözcük + anlamsal) uyum puanı; eşiğinizi kaydırın, yalnızca size uyanları görün, “Şirketime en uyumlu” sıralayın.' }, { icon: Calculator, baslik: 'Sınır değer hesaplayıcı', metin: 'Kamu İhale Genel Tebliği 2026 formülleriyle hizmet, personel dayalı, mal ve yapım işleri için sınır değer; aşırı düşük sorgusuna kimin gireceğini önceden görün.' }, { icon: Trophy, baslik: 'Kazanan istihbaratı', metin: 'Rakip firmanın kazandığı ihaleler, ortalama teklif, kırım oranı ve tek teklif oranı — kısmi ihale tuzağı ayıklanmış olarak.' }, { icon: Send, baslik: 'Zeyilname, sonuç ve Telegram', metin: 'Takipteki ihalede zeyilname/tarih değişimi ve sonuç açıklanınca uygulama içi bildirim, e-posta ve isterseniz Telegram. Kurulum kılavuzu içeride.' }, { icon: FolderCheck, baslik: 'Belge deposu süre takibi', metin: 'İmza sirküleri, ISO, yetki belgesi… toplu yükleyin, kategori ve son geçerlilik girin; süresi dolmadan 30 gün önce uyarı gelir.' }, { icon: ScanText, baslik: 'Taranmış PDF için OCR', metin: 'Metin katmanı olmayan taranmış şartnameler tarayıcıda Türkçe OCR ile okunur; analiz ve kalem çıkarımı bunlarda da çalışır.' }, { icon: BookOpen, baslik: 'Her ekranda kullanım kılavuzu', metin: 'Sağ alttaki “?” ya da klavyeden ? — bulunduğunuz ekrana özel adım adım kılavuz yan panelde açılır.' }, { icon: Smartphone, baslik: 'Mobil uyumlu PWA', metin: 'Telefon ana ekranına ekleyin; filtreler çekmecede, kartlar tek sütunda. Bildirimler ve çevrimdışı kabukla cebinizde.' }, ]; /* ---------- yardımcılar ---------- */ const useReveal = () => { useEffect(() => { const els = document.querySelectorAll('.lp-reveal'); const io = new IntersectionObserver( (entries) => entries.forEach((e) => e.isIntersecting && e.target.classList.add('lp-in')), { threshold: 0.14 } ); els.forEach((el) => io.observe(el)); return () => io.disconnect(); }, []); }; const CountUp = ({ to, suffix = '', duration = 1600 }) => { const ref = useRef(null); const [val, setVal] = useState(0); useEffect(() => { const el = ref.current; if (!el) return; let raf, started = false; const io = new IntersectionObserver(([entry]) => { if (!entry.isIntersecting || started) return; started = true; const t0 = performance.now(); const tick = (t) => { const p = Math.min(1, (t - t0) / duration); setVal(Math.round(to * (1 - Math.pow(1 - p, 3)))); if (p < 1) raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); }, { threshold: 0.5 }); io.observe(el); return () => { io.disconnect(); cancelAnimationFrame(raf); }; }, [to, duration]); return {val.toLocaleString('tr-TR')}{suffix}; }; /* ---------- örnek akış verisi (görsel amaçlı) ---------- */ const TICKER = [ { k: 'Yapım İşi', t: 'Okul binası güçlendirme', c: 'Ankara', renk: '#fbbf24' }, { k: 'Mal Alımı', t: 'Tıbbi sarf malzemesi', c: 'İzmir', renk: '#22d3ee' }, { k: 'Hizmet', t: 'Personel taşıma 12 ay', c: 'Bursa', renk: '#a78bfa' }, { k: '22/d', t: 'Bilgisayar ve çevre birimleri', c: 'İstanbul', renk: '#34d399' }, { k: 'Yapım İşi', t: 'İçme suyu hattı yenileme', c: 'Konya', renk: '#fbbf24' }, { k: 'Mal Alımı', t: 'Araç lastiği alımı', c: 'Antalya', renk: '#22d3ee' }, { k: 'Hizmet', t: 'Yemek hazırlama ve dağıtım', c: 'Gaziantep', renk: '#a78bfa' }, { k: '22/d', t: 'Kırtasiye malzemesi', c: 'Trabzon', renk: '#34d399' }, ]; const OZELLIKLER = [ { icon: Zap, baslik: 'Canlı ihale akışı', metin: 'ilan.gov.tr ilanları dakikalar içinde ekranınızda. Şehir, sektör ve bütçeye göre süzün; hiçbir fırsatı kaçırmayın.', renk: 'from-cyan-400/20 to-cyan-400/0', ikon: 'text-cyan-300' }, { icon: FileSearch, baslik: 'AI şartname analizi', metin: 'Yüzlerce sayfalık şartnameyi yükleyin; yeterlilik şartları, riskler ve kritik tarihler saniyeler içinde özetlensin.', renk: 'from-amber-400/20 to-amber-400/0', ikon: 'text-amber-300' }, { icon: Kanban, baslik: 'Kanban süreç takibi', metin: 'İlgilendiğiniz ihaleleri panoya taşıyın: İnceleme → Teklif Hazırlığı → Verildi → Sonuç. Ekipçe aynı ekranda.', renk: 'from-violet-400/20 to-violet-400/0', ikon: 'text-violet-300' }, { icon: Radar, baslik: 'Rakip radarı', metin: 'Hangi firma hangi ihaleyi, hangi bedelle kazandı? Rakiplerinizin izini sürün, stratejinizi veriyle kurun.', renk: 'from-rose-400/20 to-rose-400/0', ikon: 'text-rose-300' }, { icon: TrendingUp, baslik: 'Fiyat & piyasa analizi', metin: 'Geçmiş sonuçlardan yaklaşık maliyet ve kırım oranı analizi. Teklifinizi tahminle değil, veriyle verin.', renk: 'from-emerald-400/20 to-emerald-400/0', ikon: 'text-emerald-300' }, { icon: Bell, baslik: 'Günlük bülten & uyarılar', metin: 'Kriterlerinize uyan yeni ilanlar her sabah e-postanızda. Son teklif tarihi yaklaşınca otomatik hatırlatma.', renk: 'from-sky-400/20 to-sky-400/0', ikon: 'text-sky-300' }, { icon: Microscope, baslik: 'Derin analiz + yol haritası', yeni: true, metin: 'Şartname, sözleşme ve teklif cetvelini birlikte okur: elenme riskleri, gözden kaçan ince detaylar, kalem özellikleri, belge kontrol listesi ve teklif gününe geri sayan adım adım yol haritası.', renk: 'from-fuchsia-400/20 to-fuchsia-400/0', ikon: 'text-fuchsia-300' }, { icon: Tag, baslik: 'AB uyumlu CPV sınıflandırması', metin: 'Türkiye\'de bir ilk: her ihale, Avrupa Birliği standardı CPV koduna göre otomatik sınıflandırılır. Sektörünüze uyan ihaleleri AB standardında filtreleyin.', renk: 'from-teal-400/20 to-teal-400/0', ikon: 'text-teal-300' }, ]; /* ---------- bileşenler ---------- */ const TickerRow = ({ reverse = false }) => (
{[...TICKER, ...TICKER].map((x, i) => (
{x.t} · {x.c} {x.k}
))}
); const MockDashboard = () => (