ShopNex
A ready-to-use, self-hostable commerce platform: admin, hosted checkout, Storefront API, webhooks and an app marketplace. No developers required to run a shop.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗The StayKeep marketing site. Astro (static output) + a couple of React islands for the interactive bits, deployed to a Cloudflare Worker with static assets.
Core message: 0% commission, on every booking. Two doors — "Find a
stay" sends guests to the guest app (app.staykeep.com), "List your
property" leads to /owners, which itself CTAs to the owner app
(manage.staykeep.com).
@astrojs/react — only for the savings calculator (client:visible).
Everything else is plain .astro with zero shipped JS beyond the header's
accessible mobile-menu toggle.src/styles/global.css). The original booking app logo is preserved.wrangler.toml + worker/index.ts)
— no adapter; the worker only handles the www -> apex redirect and falls
back to env.ASSETS.fetch(request) for everything else, including the
legacy redirects in public/_redirects and the headers in
public/_headers.npm install
npm run dev # astro dev, http://localhost:4321
npm run check # astro check
npm run build # generates public/og.png + icons, then astro check + astro build
npm run preview # build, then `wrangler dev` against dist/
src/content/site.ts — URLs (app/manage), contact details, nav/footer
links, the fee footnote.src/content/pricing.ts — every pricing-related string, and the
PRICING_ENABLED flag. No prices are published yet; see the file's own
comment for what changes when that's ready.src/content/features.ts, src/content/faq.ts, src/content/comparison.ts
— the only-real-features feature lists, FAQ copy and the comparison table
rows.Deploys are not run from here in the normal course of things — see
.github/workflows/deploy.yml (push to prod, or manual dispatch). It
needs a CLOUDFLARE_API_TOKEN repo secret; without one it skips the deploy
step with a notice instead of failing. Account id and Worker name are in
wrangler.toml / the workflow. The routes staykeep.com/* and
www.staykeep.com/* are declared in wrangler.toml (live since 2026-09-24);
both hostnames are proxied DNS records whose origin is still the old Vercel
deployment, so removing the two routes rolls the site back. Manual deploy:
npm run build && npx wrangler deploy (wrangler OAuth or a token).
All eight pages use the new shared theme: home, owners, about, contact, privacy, terms, refund, and 404. The homepage shows booking/listing actions and an illustrative ₹5,000 booking comparison immediately. The calculator accepts the visitor’s actual commission percentage (15% is an example, not a claimed industry-wide rate). Estimates are commission avoided, not net savings after subscriptions, taxes or payment charges.
The booking app source mark is copied unchanged from
staykeep_flutter_v2/assets/images/app_logo.png into
src/assets/brand/booking-app-logo.png. The build uses that source for
favicon, Apple touch icon and social image. The hosting walkthrough and property website preview use responsive HTML, CSS and SVG
illustrations with example data instead of enlarged screenshots.
Legal wording was preserved. Existing privacy copy names Airbnb/Booking.com
channel-manager integrations even though the shipped-feature list does not
claim those. The refund policy still mentions a 14-day free trial, while
FREE_TRIAL_ENABLED is false. Terms and refund policies refer to subscriptions,
and all policies carry a January 2024 update date. Confirm the actual terms,
integrations and contact address before updating that legal copy. The
redesign does not introduce or endorse new pricing or legal commitments.
The homepage uses native scrolling with an expanding, pinned photo scene and a transforming commission illustration. StayKeep Manage has a sticky product walkthrough on desktop and individual interface-demo chapters on mobile. src/components/Motion.astro coordinates requestAnimationFrame updates, entrance reveals and reduced-motion preferences. It never intercepts wheel or touch events and does not run a permanent frame loop.
All content remains available without JavaScript. The system reduced-motion preference disables pinned sequences; a footer control also lets visitors choose a static presentation. Short phone viewports show a static, complete commission comparison. Booking and listing links remain usable independently of the animations.
The original booking icon is retained at src/assets/brand/booking-app-logo.png. booking-app-logo-hq.png is a 1254 × 1254 image-generated restoration of the same roof-and-dot identity. The header and footer serve responsive 2×, 3× and 4× renditions. The build regenerates favicons and the social image from that asset.
src/components/demos/ contains reusable, responsive previews for bookings, room availability, billing, guest messages and the property website. Each illustrative sequence runs once for ten seconds on entering view, pauses when offscreen or when its desktop chapter is inactive, and offers pause/resume/replay controls. The property website scrolls to room selection and ends with a direct-booking confirmation. Native text, CSS shapes and an inline SVG illustration stay sharp at every size. No preview submits a real booking.
Reduced-motion preferences and the footer toggle show the complete still state and hide playback controls. Without JavaScript the same complete state remains visible. The existing booking and property-listing links remain the actual calls to action.
PUBLIC_GA4_ID (a G-... measurement id) and PUBLIC_CLARITY_ID (a Clarity project id) are public, build-time values. Unset, nothing is rendered or loaded and the CSP is unchanged. Set, scripts/patch-csp-hashes.mjs adds the GA4 and/or Clarity origins to dist/_headers, and the tags load only after the visitor accepts the cookie banner (src/components/Analytics.astro). Plan: ../docs/analytics-plan.md. Test: node --test scripts/patch-csp-hashes.test.mjs.
src/lib/structured-data.ts, one @graph per page via BaseLayout), robots.txt with explicit AI crawler groups, sitemap.xml with lastmod, and /llms.txt + /llms-full.txt (generated from src/content/*.ts by src/lib/llms.ts).npm run build && node --test scripts/*.test.mjs (also run in CI).public/c2d6bf704b73e87cb5f6423cea2ef751.txt. After a deploy, run node scripts/indexnow.mjs (reads the live sitemap; pass dist/sitemap.xml to use the local build) to submit every URL to api.indexnow.org. Do not run it before the deploy: the key file must be live first.