iBamboo is a curated affiliate storefront for 100% bamboo home goods—kitchen tools, cutting boards, desk risers, bath accents, and more. Each product links to Amazon with your Associates tag.
Modeled after the iFLOOR stack: Vite + React + TypeScript + Tailwind v4, deployable to Cloudflare Workers static assets.
- Vite + React 19 + TypeScript + Tailwind CSS v4
- React Router
- Cloudflare Workers (
wrangler deploy)
cd ibamboo
npm install
cp .env.example .env # set your Associates tag
npm run devOpen the URL Vite prints (usually http://localhost:5173).
- Join Amazon Associates.
- Create
.envfrom.env.example:
VITE_AMAZON_ASSOCIATE_TAG=yourstore-20- Restart
npm run dev. All “Shop on Amazon” buttons use this tag.
Links are built in src/lib/amazon.ts:
- With ASIN →
https://www.amazon.com/dp/{ASIN}?tag=YOUR_TAG - Without ASIN → Amazon keyword search with the same tag
src/data/products.tsholds 100 curated picks.- Only some rows have ASINs; others use search affiliate links.
- Always re-verify that a listing still claims 100% bamboo before promoting it—Amazon inventory changes.
- Display prices are approximate hints only.
npm run dev # local dev server
npm run build # typecheck + production build
npm run preview # preview dist/
npm run deploy # build + wrangler deploy
npm run lint # oxlintLogos and hero art live under public/brand/ (copied from your iBamboo Master kit).
iBamboo can render owner-managed editorial content from Conbal without a new
storefront build. src/hooks/useAdaptiveContentBalloons.ts uses Conbal's
public sampling endpoint directly, so fresh editorial decks also work after
React Router navigation.
Production defaults to the public iBamboo Conbal site key NYcKxGAVDdeF at
https://conbal.us. Preview environments can override either value:
VITE_CONBAL_ORIGIN=https://conbal.us
VITE_CONBAL_SITE_KEY=NYcKxGAVDdeFsrc/lib/balloonPlan.ts derives 3–8 natural anchors from each route's semantic
content units. src/components/AdaptiveContentBalloons.tsx makes one
route-scoped /_sample request per page visit, asks for the requested size,
topic, and editorial type at each anchor, and keeps that returned deck stable
through incidental React rerenders. A hard reload or route change receives a
new sample. The visitor sees only editorial labels such as “Did you know?” and
“Care tip”; the delivery implementation is never named in storefront copy.
The client rejects missing, duplicate, wrong-size, or wrong-editorial-type payloads and removes those slots rather than leaving an empty panel. Delivery calls—not guaranteed viewport impressions—roll up through the shared iBamboo site key.
Manual adaptive-deck checks: load each route with a populated catalog and confirm it renders its planned 3–8 notes; reload to confirm a fresh sample; navigate or filter without incidental React rerenders issuing duplicate calls; test at 320px for horizontal overflow; and confirm quiz notes render only below the active panel, never between answer choices.
src/
components/ Layout, ProductCard, ScrollToTop
data/ products, types, catalog helpers
lib/ amazon Associates helpers
pages/ Home, Shop, Product, Why
public/brand/ logos + marketing images
npm run deployRequires Wrangler logged in (npx wrangler login). Worker name: ibamboo (see wrangler.jsonc).
| URL | Notes |
|---|---|
| https://ibamboo.com | Production custom domain |
| https://www.ibamboo.com | Production custom domain |
| https://ibamboo.tech-bf6.workers.dev | workers.dev backup |
Custom domains are configured in wrangler.jsonc (routes with custom_domain: true). Outlook MX/TXT records on the zone were left intact when unhooking the GHL placeholder.
Marketing: OPTIONS ONLY AVAILABLE FOR A LIMITED TIME
# Pull Top ~100 BSR lists, filter bamboo, regenerate limited-time catalog
npm run import:bsr
# Full weekly pipeline: import → build → Cloudflare deploy
npm run refresh:weekly| File | Role |
|---|---|
scripts/bsr/categories.json |
BSR nodes + bamboo searches |
scripts/bsr/import-bsr.mjs |
Importer |
src/data/products.bsr.generated.ts |
Generated limited-time products |
src/data/bsr-snapshot.json |
Snapshot + marketing copy |
Suggested cron (Mondays 9am):
0 9 * * 1 cd /path/to/ibamboo && npm run refresh:weekly >> /tmp/ibamboo-bsr.log 2>&1See scripts/bsr/README.md for details.