Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Truplexy is an independent AI customer support platform. It puts a human-like AI assistant on every channel you already use — website, WhatsApp, Instagram, Telegram, Discord, email and your own apps — and gives your team one platform to manage every conversation.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Every channel. One platform. The homepage positions Truplexy as an AI assistant on every channel a business uses, plus one platform where the team manages every conversation, as in the launch film.
Astro 7 + React islands + Tailwind v4, with GSAP/Lenis for motion. Structure mirrors zenova-v2.
| Command | What it does |
|---|---|
npm run dev | Dev server on http://localhost:4321 |
npm run build | Static build to dist/ |
npm run check | Type-check (astro check) |
npm run verify:seo | Sitemap, canonical, noindex and robots.txt audit of dist/ (run after build) |
npm run verify | Honesty audit of the built home, /channels/* and /docs/* pages (run after build) |
npm run brand | Regenerate trimmed logos and favicons from /logo |
npm run og | Render public/og-card.png from scripts/og-card.html |
vercel.json deploys this site and the dashboard (dashboard/) as one Vercel project with two
services: dashboard on app. hosts (app.truplexy.com), site on every other host.
vercel dev runs both locally (the dashboard at http://app.localhost:3000).
/sitemap.xml is built by @astrojs/sitemap from every page in the build except the 404, so a new
or deleted page appears or disappears with the next deploy. A small integration in astro.config.mjs
(sitemapAtRoot) publishes the result at /sitemap.xml: the single <urlset> while the site fits in
one file, or the sitemap index once it passes 45,000 URLs (each sitemap-N.xml chunk stays under the
protocol's 50,000 URL / 50 MB limits). /sitemap-index.xml, the old location, 308-redirects to it.lastmod is the date of the last commit touching that page's sources (PAGE_SOURCES /
PREFIX_SOURCES in astro.config.mjs). It is left out when the build runs from a shallow clone,
because every file would then show the same date. Add new pages to PAGE_SOURCES if they read from
more than their own file. changefreq and priority are omitted on purpose: Google ignores them./robots.txt is generated by src/pages/robots.txt.ts from the two lists in src/data/crawlers.ts:
SEARCH_CRAWLERS (Googlebot, Bingbot, OAI-SearchBot, ChatGPT-User, PerplexityBot, Perplexity-User,
Claude-SearchBot, Claude-User, Applebot, DuckDuckBot) may fetch everything except /404, and
TRAINING_CRAWLERS (GPTBot, ClaudeBot, Google-Extended, CCBot …) are blocked. Search access and model
training are separate decisions: to allow a training crawler, move its name between the lists. It names
https://truplexy.com/sitemap.xml. To keep a page out of search, pass noindex to Base.astro
(that also drops its canonical tag; add its route to the sitemap filter) rather than blocking it in
robots.txt, which cannot stop a URL from being indexed.src/components/home/WhatIs.astro)
that answers what it is, who it is for, which channels it supports and how it differs from a chatbot, and
says Truplexy is an independent product of Zenova Agency, not Perplexity AI. Channel names come from the
registry. The JSON-LD in Base.astro (Organization, WebSite, SoftwareApplication, WebPage and
BreadcrumbList, linked by @id) says the same. It deliberately has no ratings, reviews, offers or
sameAs: add sameAs to the Organization once official profiles exist.npm run verify:seo (after npm run build) checks dist/: sitemap well-formedness and limits, unique
absolute https URLs, every URL built, indexable and self-canonical, no indexable page missing from the
sitemap, no broken internal links, that every search crawler may fetch every URL while training crawlers stay blocked, one per page, valid linked JSON-LD with no ratings/reviews/offers, and the home page's "What is Truplexy?" and independence statements.src/data/channels.ts — channel registry. Every badge, diagram node and footer
list reads status from here. Flip a channel to 'live' and the whole page follows.src/data/demo.ts — every sample conversation, from one fictional cast. The build
fails if a demo uses a channel that isn't live.src/data/site.ts — name, domain, email and CTA links.src/components/home/* — one file per homepage section, in page order in src/pages/index.astro.src/islands/* — the interactive parts: the hero card stack (sample conversation playback) and the unified inbox.sdk/ holds the website chat SDK: the <truplexy-chat> widget (@truplexy/web), React and Vue wrappers, the server route (@truplexy/server) and a WordPress plugin. It is its own npm workspace. Run cd sdk && npm install && npm test, and see sdk/README.md. The typed server client and contact-based identity flow are documented in sdk/CHAT_API.md; API_REFERENCE.md is the API contract.
Both use the docs layout (src/layouts/Docs.astro + src/styles/docs.css: hero, sticky "On this page" list, .docs article), and each has one job:
/channels/<id> (src/pages/channels/[id].astro) is the overview: a sample conversation drawn in that platform's own look (src/components/channels/ChannelDemo.astro picks a skin from src/components/channels/demo/: the website widget, a phone app, a team workspace, an inbox or a help desk; the widget skin copies sdk/packages/web/src/styles.ts), what Truplexy does there, how a conversation runs, and key facts. No code or setup detail. Content: src/data/channel-pages.ts. Developer tools (REST API, webhooks, custom integrations) are not channels customers use, so they have no overview page; channelHref() sends their links to the docs.connect: true in src/data/channels.ts) have no docs page and no server code. Truplexy's own app connects them from the dashboard in one click (Integrations → Add a channel → Connect, which calls POST /channels/connect and comes back from the platform's sign-in), and their channel page points there instead of a guide (setupHref()). npm run verify fails if one of them gets a /docs/<id> page or a link into the docs./docs is the setup home: quickstart, core concepts, and every guide grouped (DOC_GROUPS). /docs/<id> (src/pages/docs/[id].astro) is a setup guide: before you start, steps, server code per language, testing and troubleshooting. Content: src/data/setup-guides.ts. Custom integrations are a section of /docs/api, WooCommerce a section of /docs/wordpress (same plugin), and Website chat has its own, longer guide at /docs/web-sdk.Adding a channel: add it to the registry, then its overview to PAGES in channel-pages.ts. If the platform has an app marketplace, mark it connect: true here and in the dashboard catalog (connect in catalog.tsx, with its channel type) and stop there; otherwise, if it needs its own guide, add it to GUIDES in setup-guides.ts (npm run check fails on a missing overview, and on a missing demo skin in ChannelDemo.astro). Plan availability is read from COMPARISON in src/data/pricing.ts by planLabel. Sample conversations reuse the fictional store and cast of src/data/demo.ts. The server code is not written here: src/data/snippets.ts arranges the dashboard's snippet packs (dashboard/src/features/integrations/snippets/) into tabs, so the dashboard guides and these pages share one source. The provider-side steps in setup-guides.ts extend dashboard/src/features/integrations/catalog.tsx; update both when a platform's setup changes. Those snippet files must stay free of dashboard-only imports (@/…), since the site imports them.
Its install guide is src/pages/docs/web-sdk.astro (/docs/web-sdk). That page reads the framework recipes from dashboard/src/features/integrations/snippets/web-sdk.ts, the same file the dashboard's Website chat guide uses. Its live demo widget is built from sdk/packages/web/src.
Search for PLACEHOLDER:
src/data/site.ts — contact email, sign-up URL and demo-booking URL (currently
mailto: links). The domain (url) set there feeds astro.config.mjs (site), canonical URLs,
robots.txt and the sitemap.src/data/legal.ts — the operator, address, governing law and minimum age behind /terms,
/privacy and /refunds. Have a lawyer review all three pages. Zenova Agency is unregistered
for now: once it is, update entity and address there and re-check the name on the Paddle
account. The contact email comes from SITE.email (see above).<h1>trailingSlash: 'never'). vercel.json sends a 308 from /page/ to
/page, and from www. to the apex domain.src/layouts/Base.astro sets the canonical URL, robots meta, Open Graph/Twitter tags and JSON-LD
(Organization, WebSite, SoftwareApplication, plus BreadcrumbList when a page passes
breadcrumbs). Pass noindex to keep a page out of search.PUBLIC_GOOGLE_SITE_VERIFICATION in the
build environment to render the verification meta tag. Then submit
https://truplexy.com/sitemap.xml (Bing Webmaster Tools: same URL, or import the site from Search Console).app.) is kept out of search with an X-Robots-Tag: noindex header
(vercel.json) and a noindex meta. Its robots.txt still allows crawling, so crawlers can see that.