Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Next.js 14 (App Router) + Tailwind. Data hələlik lib/data.ts-dəki mock datadır.
npm install
cp .env.example .env.local
npm run dev
app/[locale]/ səhifələr: ana, /vakansiyalar, /vakansiya/[slug], /is-elanlari/[şəhər]/[kateqoriya], /elan-yerlesdirapp/sitemap.ts, app/robots.ts, app/api/ dil prefiksindən kənardadırlib/data.ts data qatı (sonra Supabase ilə əvəz olunacaq)lib/seo.ts JobPosting schema və formatlarcomponents/ Header, Footer, Logo, VacancyCard, SearchForm, Pagination, PostForm, LanguageSwitcher, ThemeSwitcher, ScrollFx, Reveal, CountUp, ShareButton, MobileNav, CategoryChips, PricingTable, SubscribeFormmiddleware.ts dil yönləndirməsi, lib/i18n.ts köməkçilərNEXT_PUBLIC_DEMO_MODE təyin olunmayıbsa sayt demo rejimində işləyir: bütün səhifələr noindex, robots.txt hamını bloklayır, üstdə "Test rejimi" xəbərdarlığı görünür.
Real elanlarla açılışdan əvvəl Vercel-də NEXT_PUBLIC_DEMO_MODE=false yaz.
/elan-yerlesdir forması POST /api/vacancies-ə göndərir. Hazırda yalnız yoxlayır, bazaya yazmır (Supabase növbəti addımdır).
/vakansiyalar. Digərləri: /ru/vakansiyalar, /en/vakansiyalar. /az/... avtomatik prefikssizə yönlənir.lib/dictionaries.ts-dədir (hər dil üçün eyni quruluş, TypeScript çatışmayan açarı göstərir).lib/content-i18n.ts-dədir.hreflang + canonical, sitemap-də hər URL üçün 3 dil, <html lang> və OpenGraph locale dilə görə dəyişir.lib/i18n.ts-də locales və localeMeta-ya əlavə et, lib/dictionaries.ts-də yeni obyekt yaz, lib/content-i18n.ts-də şəhər/sahə/rayon/şablon tərcümələrini əlavə et.title_ru, title_en...) və ya ayrıca tərcümə cədvəli lazım olacaq. İndi tərcümə yalnız nümunə datadadır.localStorage-də saxlanır.app/globals.css-də CSS dəyişənləridir (:root ağ, [data-theme="dark"] qara). Komponentlərdə bg-surface, text-ink, text-body, text-muted, text-on-brand, gold kimi adlardan istifadə et (bg-white, text-slate-* yox).lib/theme.ts-dəki kiçik skript temanı qoyur, ona görə yanıb-sönmə olmur.tailwind.config.ts-dədir.prefers-reduced-motion açıq olanda animasiyalar söndürülür. JS işləməsə, kontent adi halda görünür./qiymetler. 3 paket: Başlanğıc (pulsuz), Biznes, Korporativ; aylıq/illik (−20%) keçid, tez-tez verilən suallar.lib/plans.ts-dədir, paket mətnləri 3 dildə lib/dictionaries.ts-dədir (pricing)./elan-yerlesdir?plan=pro açılır və formada seçilmiş paket göstərilir.SubscribeForm var (e-poçt + istəyə bağlı sahə). POST /api/subscribe e-poçtu yoxlayır, spam üçün gizli xana var.app/api/subscribe/route.ts-dəki TODO yerinə Supabase və ya email xidməti (Resend, Mailchimp) qoşulmalıdır./vakansiyalar səhifəsində bütün sahələr çip kimi (telefonda 2 sıralı sürüşmə, kompüterdə hamısı görünür).safe-area nəzərə alınıb.lib/boosts.ts (BOOSTS). Server də oradan oxuyur./one-cixar səhifəsində xidməti seçir, karta köçürür, çekin şəklini yükləyir. POST /api/receipt çeki Gemini ilə yoxlayır.GEMINI_API_KEY — çeki oxumaq üçün (vacib)TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID — hər çek şəkli ilə Telegram-a gəlsinNEXT_PUBLIC_PAY_CARD — kart nömrəsini dəyişmək üçün (istəyə bağlı)tier, tier_until, bumped_at sahələri yazılacaq./cv-bazasi, /cv/[slug], /cv-yerlesdir. Nümunə namizədlər lib/candidates.ts-dədir. CV səhifələri şəxsi məlumat olduğu üçün noindex-dir.lib/blog/-dadır: index.ts (slug, kateqoriya, tarix, ikon, rəng), posts-az.ts, posts-ru.ts, posts-en.ts (mətn).p (abzas), h (başlıq, mündəricata düşür), ul/ol (siyahı), tip (məsləhət), quote (nümunə), cta (çağırış: cv, interview, jobs, remote, post, boost, cvdb, cvpost).index.ts-də metas siyahısına yaz, sonra 3 dil faylında eyni slug ilə mətni əlavə et. Hansısa dildə mətn yoxdursa, yazı o dildə avtomatik gizlənir. Sitemap özü yenilənir.