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.