尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗The public marketing site for SORMALITICS, served at sormalitics.com.
The product lives at app.sormalitics.com (the SORMALITICS repo).
next build → out/). No server, no API, no cookies, no analytics.app() / APP_URL in src/lib/site.ts./api/contact/submit, /api/careers), which allows this origin via lib/http/marketingCors.ts in the app.app.sormalitics.com/pricing?plan=…&cycle=…¤cy=…;
the app's pricing page resumes checkout from those params./dashboard/*, /auth/*, /api/*, /legal/*, …)
are 308-redirected to the app by vercel.json, so emailed links and bookmarks keep working.pnpm sync here (copies from ../SORMALITICS), then pnpm type-check && pnpm build, then push.pnpm install
pnpm dev # http://localhost:3001
pnpm build # writes out/
vercel.json is the only source of security headers. With output: 'export', headers() in
next.config.mjs does nothing. If hosting or export mode changes, re-establish every header there.'unsafe-inline' on script-src/style-src: the static export emits inline hydration
scripts with no per-request nonce, and there is no server to inject one. Residual risk is low (no cookies,
no user content, tight connect-src). If dynamic/user content is ever added, switch to build-time sha256
hashes of each inline script and drop 'unsafe-inline'. Try dropping it from style-src first (test a build).https://app.sormalitics.com/api/csp-report (report-uri + report-to).
The app must implement that endpoint (accept application/csp-report and application/reports+json, return 204).preload: confirm this domain is submitted/accepted at https://hstspreload.org.includeSubDomains HSTS means a taken-over subdomain inherits trust..github/dependabot.yml) and a pnpm audit workflow (.github/workflows/audit.yml) run automatically.
The audit workflow needs a committed pnpm-lock.yaml.node scripts/verify-headers.mjs [url] compares live headers to vercel.json; the verify-headers workflow runs it
after production deploys and every 6 hours (needs Vercel's GitHub integration to emit deployment events).secret-scan workflow runs gitleaks. Also enable GitHub secret scanning + push protection in repo settings.public/.well-known/security.txt — update Expires yearly, create the security@ mailbox, and publish the /security policy page it links to.main, least-privilege
access, and keep production secrets out of Preview environment variables.SORMALITICS repo; this static site cannot validate it.NEXT_PUBLIC_APP_LIVE is unset, so every app link (Sign in, Start free, Get started,
store checkout, FISI sign-up) lands on /in-development — a "launching soon" page
that says what the visitor tried to do and offers early access by email. Old app URLs
(/dashboard, /auth/…) redirect there too. Contact and Careers open the visitor's
email client (hello@ / careers@) instead of posting to the app.
At launch (once app.sormalitics.com is up and tested):
pnpm app-live on → commit → push (switches the old-URL redirects to the app)NEXT_PUBLIC_APP_LIVE=true → redeploy
Both, or links and redirects disagree. pnpm app-live off + removing the variable reverses it.1. Ship this site to a preview
git init, commit, push to a new public repo AlloBTeQ/sorma_frontendmark.sorma_frontendmark. Framework: Next.js. No env vars needed.*.vercel.app URL and check the page, mobile included.2. Give the app its subdomain (no downtime; the root keeps serving the app)
sormalitics (app) project → Settings → Domains → add app.sormalitics.com.
If DNS is not on Vercel, add CNAME app → cname.vercel-dns.com at the DNS host.NEXTAUTH_URL → https://app.sormalitics.com/api/oauth (NextAuth is mounted at /api/oauth)APP_URL → https://app.sormalitics.com, plus any NEXT_PUBLIC_*_URL pointing at the rootCANONICAL_HOST → app.sormalitics.com (required: left as sormalitics.com it bounces every app request back to the marketing site and refuses POSTs. The staff portal stays at support.sormalitics.com.)CONTACT_EMAIL → the inbox for the Contact form (defaults to [email protected])MARKETING_ORIGINS only when testing forms from a vercel.app preview of this siteSTORAGE_PROVIDER=s3https://app.sormalitics.com
and redirect URI https://app.sormalitics.com/api/oauth/callback/google. Keep the old ones until cutover is done.https://app.sormalitics.com/api/webhooks/stripe
(/api/webhooks/stripe, same path as today). Editing keeps the signing secret. Stripe does not follow redirects,
so this must be done before step 3.sormalitics-documents-prod → Permissions → CORS → add https://app.sormalitics.com.3. Cut over the root domain
sormalitics.com and www.sormalitics.com.sormalitics.com, and www.sormalitics.com redirecting to the apex.sormalitics.com shows the landing; sormalitics.com/dashboard lands on
app.sormalitics.com/dashboard; a pricing card opens Stripe checkout; Stripe shows webhook deliveries succeeding.Users signed in on the old domain will need to sign in once more on app.sormalitics.com (cookies don't move between hosts).
app.sormalitics.com/ go to /dashboard (or login) instead of rendering the old landing; set noindex on the app.