Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Commercial Real Estate Software Directory
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Source for cresoftware.tech, a directory of commercial real estate software. Static site hosted on GitHub Pages (deploys from main).
All product and category pages are generated from the data files. Do not edit files under products/ or categories/ by hand; edit the data and rebuild.
data/products.json # 208 product records (the source of truth)
data/categories.json # 14 categories: membership, descriptions, editorial, FAQ
scripts/build.js # static site generator (zero dependencies)
Rebuild after any data change:
node scripts/build.js
This regenerates:
products/<slug>/index.html — one page per productcategories/<slug>/index.html — one page per categoryalternatives/<slug>/index.html + alternatives/index.html — alternatives guides and hub (from data/editorial.json)compare/<a>-vs-<b>/index.html — comparison pages (from data/editorial.json)starter-stacks/<role>/index.html + starter-stacks/index.html — starter software stacks by role (from data/stacks.json)integrations/<hub>/index.html + integrations/index.html — integration hubssitemap.xml — real URLs with lastmodllms.txt — site map for AI assistants and answer enginesSITE-FOOTER, HOME-COMPARISONS, HOME-ALTERNATIVES, POPULAR-COMPARISONS, GUIDE-RELATED). Never edit between markers; the build overwrites them.data/lastmod.json stores a content hash per URL. A page's sitemap lastmod (and the visible "Updated" date on editorial pages) only moves when the content between the nav and the footer changes, so leave that file alone and commit it with the rest of the build output.
Commit the regenerated output along with the data change.
data/stacks.json holds one entry per role with three tiers (start, add, skip). Each item names a product slug, the job it covers, alternatives, and a cost with monthly_usd (normalized from the vendor's published price, or null when sold by quote), the basis of that figure, the checked date and the vendor source URL ("listing" when the vendor site blocks automated checks). from: true marks a starting price. The lean total is the start tier; the fuller total adds the add tier and drops any start item an add item replaces. Text fields can use {{lean}} / {{full}} (or {{lean:<role>}}) and the build fills in the current totals. After a rebuild, run node scripts/check-stacks.js to recompute every total from the data and compare it with the generated pages.
index.html (homepage), market-map.html, compare.html, submit.htmlguides/*.html — editorial buyer's guides (nav, related-reading block and footer are injected by the build)
ai-underwriting-software.html) must be registered in TOPIC_GUIDES in scripts/build.js with a footer label and the category whose editorial feeds their related-reading block.css/style.css, js/app.js (homepage/compare interactivity + shared helpers)The old hash-based routes (product.html#slug, category.html#slug) are redirect
shells that forward to /products/<slug>/ and /categories/<slug>/. Keep them.
data/products.json (copy an existing well-filled record as a template; slug must be URL-safe: letters, digits, hyphens).products array in data/categories.json (one primary category; at most two).node scripts/build.js and commit.data/photos.json (Unsplash, credits shown on each page and listed on the about page), files in img/photos/ (1600px and 800px WebP). A new category or topic guide needs an entry keyed by its slug.scripts/og-images.sh builds 1200x630 JPEGs in img/og/ from the photos and from each product's first screenshot. Re-run it after adding photos or screenshots.