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.
StayKeep is a modern hospitality platform for guests to discover & book stays, and for hosts to manage their properties effortlessly.
CommerceAstro · TypeScriptGitHub @StaykeepDevOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.