尚未偵測到更新。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.