@page @model SoroushAsadi.Pages.IndexModel @{ var fa = Model.IsFa; var locale = Model.Locale; }
@(fa ? "پذیرای پروژه‌های جدید" : "Available for new projects")

@(fa ? "سروش اسعدی" : "Soroush Asadi")

@(fa ? "هوش مصنوعی‌ای می‌سازم که " : "I build ")@(fa ? "فقط روی کاغذ نمی‌ماند" : "production-grade AI")@(fa ? "؛ از طراحی تا اجرا، در مقیاس سازمانی." : " for the enterprise, from strategy to live deployment.")

@(fa ? "مهندس هوش مصنوعی و معمار نرم‌افزار." : "AI Engineer, Consultant, and Solution Architect.")

@(fa ? "شش کاری که انجام می‌دهم" : "Six areas of practice")

@(fa ? "از همان جلسه‌ی اول تا وقتی محصول روی پای خودش می‌ایستد، کنارتان هستم؛ در تمام مسیر هوش مصنوعی." : "From the first strategy session to production rollout, one engineering partner for the full AI lifecycle.")

@{ var services = fa ? new[]{ ("strategy","راهبرد و نقشه‌ی راه هوش مصنوعی","با هم می‌بینیم سازمان کجای کار است، کدام ایده‌ها بیشترین ارزش را دارند، و نقشه‌ی راه ۱۲ تا ۱۸ ماهه با هدف‌های روشن می‌چینیم.",new[]{"Discovery","ROI Mapping","Roadmap"}), ("automation","اتوماسیون هوش مصنوعی","عامل‌های خودکار و گردش‌کارهای n8n که کارهای دستی را به سامانه‌هایی قابل‌ردیابی و قابل‌اتکا تبدیل می‌کنند.",new[]{"n8n","Agents","Workflows"}), ("llm-rag","مهندسی LLM و RAG","ساخت پایپ‌لاین‌های RAG با پایگاه‌های برداری، چارچوب ارزیابی، و پاسخ‌دهی با تأخیر زیر ۵۰ میلی‌ثانیه.",new[]{"RAG","Vector DB","Eval"}), ("architecture","معماری نرم‌افزار و سیستم","طراحی سیستم‌های توزیع‌شده روی Kubernetes؛ میکروسرویس، استریم رویداد، و الگوهایی که زیر بار سنگین هم پایدار می‌مانند.",new[]{"K8s","Microservices","Event-Driven"}), ("mobile","اپلیکیشن‌های موبایل هوش مصنوعی","اپ‌های Flutter، Swift و Kotlin با پردازش روی خود دستگاه، استریم LLM و تجربه‌ای روان و بومی.",new[]{"Flutter","Swift","Kotlin"}), ("google-stack","تخصص روی استک گوگل","راه‌اندازی روی Vertex AI، GKE و Gemini با کنترل هزینه و امنیت در سطح سازمانی.",new[]{"Vertex AI","GKE","Gemini"}), } : new[]{ ("strategy","AI Strategy and Roadmap","Maturity assessment, highest-ROI use-case discovery, and a 12 to 18 month roadmap with measurable KPIs.",new[]{"Discovery","ROI Mapping","Roadmap"}), ("automation","AI Automation","Autonomous agents and n8n workflows that turn manual processes into auditable, observable systems.",new[]{"n8n","Agents","Workflows"}), ("llm-rag","LLM and RAG Engineering","Production RAG pipelines with vector stores, evaluation frameworks, and sub-50ms serving.",new[]{"RAG","Vector DB","Eval"}), ("architecture","Solution Architecture","Distributed systems on Kubernetes: microservices, event streaming, and resilience patterns at scale.",new[]{"K8s","Microservices","Event-Driven"}), ("mobile","Mobile AI Apps","Flutter, Swift, and Kotlin apps with on-device inference, streaming LLM UX, and native polish.",new[]{"Flutter","Swift","Kotlin"}), ("google-stack","Google Stack Specialist","Vertex AI, GKE, and Gemini deployments with cost optimization and enterprise security patterns.",new[]{"Vertex AI","GKE","Gemini"}), }; } @{ int si = 0; } @foreach (var (id, title, desc, tags) in services) {

@title

@desc

@foreach (var tag in tags) { @tag }
si++; }

@(fa ? "از سند خام تا پاسخ قابل اتکا" : "From raw document to a trustworthy answer")

@(fa ? "مسیری که هر پرسش در یک سامانه‌ی RAG واقعی طی می‌کند. هر مرحله را می‌شود اندازه گرفت، دنبال کرد و برای سرعت بهتر کرد." : "The path every query takes through a production RAG system. Each stage is measurable, auditable, and tuned for latency.")

    @{ var nodes = fa ? new[]{ ("دریافت","نرمال‌سازی، تکه‌تکه‌کردن و پاک‌سازی سندهای منبع"), ("برداری‌سازی","ساخت embedding و نمایه‌کردن در پایگاه برداری"), ("بازیابی","جستجوی ترکیبی معنایی و کلیدواژه‌ای"), ("بازرتبه‌بندی","چیدن دوباره‌ی نتایج با cross-encoder"), ("تولید","پاسخ مستند همراه با ذکر منبع"), } : new[]{ ("Ingest","Normalize, chunk, and clean source documents"), ("Embed","Generate embeddings and index in the vector store"), ("Retrieve","Hybrid semantic and keyword search"), ("Rerank","Re-order candidates with a cross-encoder"), ("Generate","Grounded answer with source citations"), }; int stepN = 0; } @foreach (var (nlabel, ndesc) in nodes) { stepN++;
  1. @stepN.ToString("D2")

    @nlabel

    @ndesc

  2. }

@(fa ? "تأخیر کل زیر ۵۰ میلی‌ثانیه؛ هر مرحله قابل مشاهده." : "Sub-50ms end-to-end, every stage observable.")

@(fa ? "ابزار روزمره" : "Daily tooling")

@(fa ? "هر چیزی که می‌سازم روی این‌ها بنا می‌شود؛ انتخاب‌شان کرده‌ام چون می‌مانند، نه چون مد روزند." : "Everything I ship sits on this foundation, chosen for longevity, not hype cycles.")

@{ var cats = fa ? new[]{ ("زبان‌ها", new[]{"Python","TypeScript","Go","Rust","SQL"}), ("موبایل", new[]{"Flutter","Swift / SwiftUI","Kotlin","React Native"}), ("زیرساخت", new[]{"Kubernetes","Terraform","Postgres","Redis","Kafka","NATS"}), ("هوش مصنوعی", new[]{"Vertex AI","Gemini","OpenAI","Anthropic","LangGraph","Pinecone","pgvector"}), } : new[]{ ("Languages", new[]{"Python","TypeScript","Go","Rust","SQL"}), ("Mobile", new[]{"Flutter","Swift / SwiftUI","Kotlin","React Native"}), ("Infrastructure",new[]{"Kubernetes","Terraform","Postgres","Redis","Kafka","NATS"}), ("AI / ML", new[]{"Vertex AI","Gemini","OpenAI","Anthropic","LangGraph","Pinecone","pgvector"}), }; } @foreach (var (catLabel, items) in cats) {

@catLabel

@foreach (var item in items) { @item }
}

@(fa ? "جاهایی که عمیق شده‌ام" : "What I go deep on")

@(fa ? "سامانه‌هایی که روزانه میلیون‌ها رویداد را تاب می‌آورند. این‌ها همان چیزهایی‌اند که سال‌ها رویشان کار کرده‌ام." : "Systems that survive millions of events per day. These are the areas I optimize for.")

@{ var areas = fa ? new[]{ ("مهندسی LLM و RAG","ساخت پایپ‌لاین‌های بازیابی، ارزیابی و تولید پاسخ مستند برای محیط واقعی."), ("معماری ابری و Kubernetes","سرویس‌های توزیع‌شده، مقیاس‌پذیری خودکار و پایداری زیر بار سنگین."), ("سیستم‌های عامل‌محور و اتوماسیون","گردش‌کارهای خودکار و قابل‌ردیابی با n8n و LangGraph."), ("استک گوگل کلود (Vertex / GKE)","Vertex AI، GKE و Gemini، با حواس‌جمعی روی هزینه."), ("موبایل بومی و چندسکویی","Flutter، Swift و Kotlin با پردازش روی خود دستگاه."), } : new[]{ ("LLM and RAG engineering","Retrieval pipelines, evals, and grounded generation in production."), ("Cloud architecture and Kubernetes","Distributed services, autoscaling, and resilience at scale."), ("Agentic systems and automation","Auditable autonomous workflows with n8n and LangGraph."), ("Google Cloud stack (Vertex / GKE)","Vertex AI, GKE, and Gemini with real cost discipline."), ("Native and cross-platform mobile","Flutter, Swift, and Kotlin with on-device inference."), }; } @foreach (var (alabel, adesc) in areas) {
@alabel
@adesc
}

@(fa ? "نمونه‌کارهای منتخب" : "Selected work")

@(fa ? "محصولاتی که خودم طراحی و ساخته‌ام. روی هر کارت بزنید تا خودِ سایت را ببینید." : "Products I have designed and built. Tap any card to open the live site.")

@{ var projects = fa ? new[]{ ("hamkadr","همکادر","hamkadr.ir","بازاری که کادر درمان را برای شیفت و استخدام به بیمارستان‌ها و کلینیک‌ها وصل می‌کند؛ با پروفایل، فیلتر، تقویم هفتگی و اپ موبایل.",new[]{"Marketplace","Healthcare","Mobile"}), ("meezi","میزی","meezi.ir","سامانه‌ی یکپارچه برای کافه و رستوران: سفارش با QR، صندوق فروش، انبار، کارکنان و تحلیل فروش، روی زیرساخت داخلی.",new[]{"SaaS","POS","Analytics"}), ("bargevasat","برگ وسط","bargevasat.ir","بازی آنلاین حکم به‌صورت بلادرنگ مقابل بازیکنان واقعی یا ربات‌های هوشمند؛ با لیگ، رتبه‌بندی، جایزه‌ی روزانه و همگام‌سازی چنددستگاهه.",new[]{"Realtime","Multiplayer","Game"}), ("flatrender","فلت‌رندر","flatrender.ir","استودیوی هوش مصنوعی که بیش از ۱۲۰۰ قالب را در چند دقیقه به ویدیو و تصویر آماده‌ی انتشار تبدیل می‌کند؛ بر پایه‌ی ثانیه‌ی رندر. در نسخه‌ی بتا.",new[]{"AI","Video","SaaS"}), } : new[]{ ("hamkadr","Hamkadr","hamkadr.ir","A marketplace connecting healthcare staff with hospitals and clinics for shifts and hiring, with profiles, filters, weekly scheduling, and a mobile app.",new[]{"Marketplace","Healthcare","Mobile"}), ("meezi","Meezi","meezi.ir","An all-in-one SaaS for cafes and restaurants: QR ordering, POS, inventory, staff, and sales analytics, hosted in Iran.",new[]{"SaaS","POS","Analytics"}), ("bargevasat","Barge Vasat","bargevasat.ir","A real-time multiplayer Hokm card game against people or AI bots, with leagues, rankings, daily rewards, and cross-device play.",new[]{"Realtime","Multiplayer","Game"}), ("flatrender","Flatrender","flatrender.ir","An AI studio that turns 1,200+ templates into platform-ready videos and images in minutes, billed by render-seconds. In beta.",new[]{"AI","Video","SaaS"}), }; } @foreach (var (pid, pname, pdomain, pdesc, ptags) in projects) { var initial = char.ToUpperInvariant(pid[0]);
@foreach (var tag in ptags) { @tag }

@pname

@pdomain

@pdesc

@(fa ? "مشاهده‌ی سایت" : "Visit site")
}

@(fa ? "یادداشت‌های مهندسی" : "Engineering notes")

@(fa ? "درس‌هایی از پروژه‌های واقعی. نه ترجمه‌ی مقاله، نه شعار توخالی." : "Findings from real engagements. Not translated articles, not hype lists.")

@{ var posts = fa ? new[]{ ("rag-eval-framework","LLM","چارچوب ارزیابی RAG که در عمل جواب می‌دهد","چرا BLEU و ROUGE برای RAG کافی نیستند، و معیارهایی که واقعاً به تصمیم کمک می‌کنند.",8), ("agentic-n8n-patterns","Automation","الگوهای عامل‌محور با n8n برای سازمان","چطور n8n را با LangGraph ترکیب کنیم تا گردش‌کارهای خودکار و قابل‌ردیابی بسازیم.",11), ("vertex-cost-control","Google Stack","کنترل هزینه روی Vertex AI در مقیاس بالا","سه اشتباه رایج که در بیشتر پروژه‌های Vertex می‌بینم، و اینکه چطور ۶۰٪ هزینه را کم کردیم.",6), ("k8s-llm-inference","Infra","اجرای LLM روی Kubernetes با تأخیر زیر ۵۰ میلی‌ثانیه","الگوی استقرار با KEDA، اشتراک GPU و request hedging برای سرویس‌دهی پایدار.",14), ("flutter-on-device-ai","Mobile","هوش مصنوعی روی دستگاه در Flutter","استفاده از Gemini Nano و LiteRT برای پردازش آفلاین در اپ‌های موبایل.",9), ("enterprise-ai-roadmap","Strategy","نقشه‌ی راه هوش مصنوعی سازمانی در ۹۰ روز","چارچوبی که برای مدیران فنی می‌چینم؛ از پیدا کردن بهترین ایده تا اولین اجرای واقعی.",7), } : new[]{ ("rag-eval-framework","LLM","A RAG evaluation framework that holds up in production","Why BLEU and ROUGE fall short for RAG, and the metrics that actually drive decisions in real projects.",8), ("agentic-n8n-patterns","Automation","Agentic patterns with n8n for the enterprise","How to combine n8n with LangGraph to build auditable, debuggable autonomous workflows.",11), ("vertex-cost-control","Google Stack","Vertex AI cost control at scale","Three anti-patterns I see in 80% of Vertex projects, and how we cut 60% of monthly spend.",6), ("k8s-llm-inference","Infra","Sub-50ms LLM inference on Kubernetes","Deployment pattern with KEDA, GPU sharing, and request hedging for stable serving.",14), ("flutter-on-device-ai","Mobile","On-device AI in Flutter","Using Gemini Nano and LiteRT for offline inference inside mobile apps.",9), ("enterprise-ai-roadmap","Strategy","A 90-day enterprise AI roadmap","The framework I build for CTOs, from use-case discovery to first production deployment.",7), }; } @foreach (var (slug, cat, btitle, excerpt, readTime) in posts) {
@cat @readTime @(fa ? "دقیقه" : "min")

@btitle

@excerpt

@(fa ? "خواندن" : "Read")
}

@(fa ? "رزرو یک جلسه‌ی ۳۰ دقیقه‌ای" : "Book a 30-minute call")

@(fa ? "بدون هزینه، بدون تعهد. با هم می‌بینیم چه می‌خواهید، چه محدودیت‌هایی هست، و قدم بعد چیست." : "No cost, no commitment. We map the use case, the constraints, and the next step together.")

@(fa ? "معمولاً ظرف ۲۴ ساعت کاری جواب می‌دهم." : "Typical reply within 24 working hours.")

@functions { static string ServiceIcon(string id) => id switch { "strategy" => """""", "automation" => """""", "llm-rag" => """""", "architecture" => """""", "mobile" => """""", "google-stack" => """""", _ => """""", }; }