PageSourceSearch

https://balance-engine.vercel.app/packages/marketing/siteConfig.js?v=20260920a

js balance-engine.vercel.app collected 2026-10-03 06:13:27 UTC 3,058 bytes, 88 lines download raw bytes

1/**
2 * 站点 SEO / 国际化
3 * App 生产域:Vercel(月历 / Core / join)— Cursor 本地主入口仍是月历
4 * 国内备案域:免费流月笔记 + 开通备用页 join.html(Vercel 连不上时顶上)
5 * Generate sitemap:npm run sitemap
6 */
7export const SITE_ORIGIN = 'https://balance-engine.vercel.app';
8
9/**
10 * 国内流月笔记(免费博客)根地址 · 备案域名 + COS/OSS
11 * 打开该域 = 笔记首页,不是月历。
12 * 生成镜像:npm run marketing:cn-mirror → 上传 dist/cn-stories/
13 */
14export const CN_STORIES_MIRROR_ORIGIN = 'https://balanceengine.cn';
15
16/**
17 * 工信部备案号(页脚展示)。拿到号后填这里,再跑 npm run marketing:cn-mirror
18 * 例: 粤ICP备xxxxxxxx号
19 */
20export const CN_BEIAN_ICP = '苏ICP备2026053074号-1';
21
22/**
23 * 公安部联网备案号(页脚展示)。拿到号后填这里,再跑 npm run marketing:cn-mirror
24 * 例: 苏公网安备3205xxxxxxxx号
25 * 全国平台: https://beian.mps.gov.cn/
26 */
27export const CN_BEIAN_GONGAN = '苏公网安备32058302006853号';
28
29/**
30 * Notion 模板 Duplicate 链接(notion.so / marketplace)
31 * 填好后流月笔记 #notion 显示「打开 Notion 模板」;
32 * 留空则显示「即将」,并链到站内说明 docs/notion-rhythm-template.md
33 * 模板内按钮应指向 /stories/ 与月历(见该说明 Lite 节)
34 *
35 * 公开入口开关:NOTION_COMPANION_PUBLIC === true 时才在 stories 展示。
36 * 现默认 false(文字信任主战场);要用时改 true 并填 Duplicate URL。
37 */
38export const NOTION_TEMPLATE_DUPLICATE_URL = '';
39
40/** 站内模板说明路径 */
41export const NOTION_TEMPLATE_GUIDE_PATH = 'docs/notion-rhythm-template.md';
42
43/**
44 * 流月笔记页是否展示 Notion 灵感本栏目(侧栏 / 区块 / 页脚)
45 * false = 隐藏(生长本「复制到 Notion」不受影响)
46 */
47export const NOTION_COMPANION_PUBLIC = false;
48
49/**
50 * Substack 公众页 URL(海外旬度邮件订阅)
51 * 例: https://balanceengine.substack.com
52 * 留空:流月笔记页脚显示「即将」;填好后出现订阅 CTA + 社交图标
53 * 开通步骤: docs/SUBSTACK_SETUP.md
54 */
55export const SUBSTACK_PUBLIC_URL = 'https://balanceenginejade.substack.com';
56
57/** @typedef {'zh-CN'|'en'} SiteLocale */
58
59/** @type {SiteLocale} */
60export const DEFAULT_LOCALE = 'zh-CN';
61
62/** @type {SiteLocale[]} */
63export const LOCALES = ['zh-CN', 'en'];
64
65/**
66 * @param {string} path 以 / 开头,如 /index.html
67 * @param {SiteLocale} [locale]
68 */
69export function absoluteUrl(path, locale = DEFAULT_LOCALE) {
70  const base = path.startsWith('/') ? path : `/${path}`;
71  if (locale === DEFAULT_LOCALE) {
72    return `${SITE_ORIGIN}${base}`;
73  }
74  const enPath = base.startsWith('/en/') ? base : `/en${base}`;
75  return `${SITE_ORIGIN}${enPath}`;
76}
77
78/**
79 * @param {string} zhPath
80 * @returns {{ zh: string, en: string, xDefault: string }}
81 */
82export function hreflangPair(zhPath) {
83  return {
84    zh: absoluteUrl(zhPath, 'zh-CN'),
85    en: absoluteUrl(zhPath, 'en'),
86    xDefault: absoluteUrl(zhPath, 'zh-CN'),
87  };
88}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.