Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
476 changes: 244 additions & 232 deletions public/sitemap.xml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions scripts/generate-sitemap.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ const urls = [
{ loc: '/guides', changefreq: 'weekly', priority: '0.9' },
{ loc: '/quiz', changefreq: 'weekly', priority: '0.85' },
{ loc: '/why', changefreq: 'monthly', priority: '0.7' },
{ loc: '/privacy', changefreq: 'yearly', priority: '0.3' },
{ loc: '/terms', changefreq: 'yearly', priority: '0.3' },
]

for (const cat of categories) {
Expand Down
10 changes: 10 additions & 0 deletions scripts/route-meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@ export function buildRouteMeta(): RouteMetaFile {
}
routes['/quiz'] = finalizeRouteMeta(quizSeo())
routes['/why'] = finalizeRouteMeta(whySeo())
routes['/privacy'] = finalizeRouteMeta({
title: 'Privacy Policy',
description: 'Privacy Policy for iBamboo.',
path: '/privacy',
} as any)
routes['/terms'] = finalizeRouteMeta({
title: 'Terms of Use',
description: 'Terms of Use for iBamboo.',
path: '/terms',
} as any)
routes['/gifts'] = finalizeRouteMeta(giftsHubSeo())
routes['/guides'] = finalizeRouteMeta(buyerGuidesHubSeo())

Expand Down
4 changes: 4 additions & 0 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import { Home } from './pages/Home'
import { Shop } from './pages/Shop'
import { ProductPage } from './pages/Product'
import { Why } from './pages/Why'
import { Privacy } from './pages/Privacy'
import { Terms } from './pages/Terms'
import { Quiz } from './pages/Quiz'
import { VibePage } from './pages/Vibe'
import { GiftsHubPage } from './pages/Gifts'
Expand Down Expand Up @@ -50,6 +52,8 @@ export default function App() {
<Route path="why" element={<Why />} />
<Route path="quiz" element={<Quiz />} />
<Route path="vibe/:vibeId" element={<VibePage />} />
<Route path="privacy" element={<Privacy />} />
<Route path="terms" element={<Terms />} />
<Route path="*" element={<Navigate to="/" replace />} />
</Route>
</Routes>
Expand Down
9 changes: 8 additions & 1 deletion src/components/Layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,14 @@ export function Layout() {
<p>© {new Date().getFullYear()} iBamboo · Bamboo living, elevated</p>
<p>
As an affiliate, iBamboo may earn a referral commission on
qualifying purchases.
qualifying purchases.{' '}
<Link to="/privacy" className="underline hover:text-paper">
Privacy
</Link>
{' · '}
<Link to="/terms" className="underline hover:text-paper">
Terms
</Link>
</p>
</div>
</footer>
Expand Down
72 changes: 72 additions & 0 deletions src/pages/Privacy.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { Link } from 'react-router-dom'
import { Seo } from '../components/Seo'

const HTML = `<p><strong>Effective date:</strong> August 7, 2026</p>
<p>This Privacy Policy describes how <strong>iBamboo</strong> (“we,” “us”), operated by SYMO, LLC (Sheridan, Wyoming, USA), handles information when you visit <strong>https://ibamboo.com</strong> (the “Site”).</p>
<h2>1. Who we are</h2>
<p>iBamboo is an Amazon Associates editorial site. We publish product information, guides, and links so you can discover bamboo home goods and related Amazon catalog picks. We are <strong>not</strong> the seller of record for products linked on the Site. Purchases are completed on Amazon or another third-party retailer.</p>
<h2>2. Information we collect</h2>
<ul>
<li><strong>Information you provide.</strong> If you use a contact form, waitlist, quiz, or similar feature, we may collect your name, email address, message content, and any other fields you submit.</li>
<li><strong>Automatic technical data.</strong> Servers and security providers (including Cloudflare) may log IP address, browser type, device type, referring URL, and timestamps for security, reliability, and basic operations.</li>
<li><strong>Cookies and similar tech.</strong> We may use analytics tools (for example Google Analytics or similar) to understand aggregate traffic and page performance. Those tools may set cookies or similar identifiers. You can control cookies through your browser settings.</li>
</ul>
<p>If you complete a quiz or profile tool, we may store your answers and any contact details you provide so we can return results and improve the experience.</p>
<h2>3. How we use information</h2>
<ul>
<li>To respond to inquiries and operate the Site</li>
<li>To improve content, performance, and security</li>
<li>To send follow-up only when you requested it</li>
<li>To comply with law and enforce our Terms</li>
</ul>
<p>Contact and lead information may be processed through our CRM provider (Parsimony Automate / LeadConnector infrastructure) on our behalf. We do not sell your personal information for money.</p>
<h2>4. Amazon and other third parties</h2>
<p>Links on the Site may send you to Amazon.com, partner specialty sites, or other retailers. Those sites have their own privacy policies and cookie practices. We do not control data collection after you leave our Site. As an Amazon Associate, we may earn commissions on qualifying purchases.</p>
<h2>5. Sharing</h2>
<p>We may share information with service providers who help us run the Site (hosting, security, CRM, email infrastructure), when required by law, or in connection with a business transfer. We do not sell personal information as defined under California law (CCPA/CPRA).</p>
<h2>6. Retention</h2>
<p>We keep information only as long as needed for the purposes above, unless a longer period is required by law.</p>
<h2>7. Security</h2>
<p>We use reasonable administrative and technical measures appropriate to a small editorial site. No method of transmission or storage is 100% secure.</p>
<h2>8. Children</h2>
<p>The Site is not directed to children under 13. We do not knowingly collect personal information from children under 13.</p>
<h2>9. Your choices</h2>
<ul>
<li>You may request access, correction, or deletion of contact information we hold by contacting us (see below).</li>
<li>You can block or delete cookies in your browser.</li>
<li>California residents may have additional rights under the CCPA/CPRA; contact us to exercise them. We will not discriminate for exercising privacy rights.</li>
</ul>
<h2>10. International visitors</h2>
<p>The Site is operated from the United States. If you visit from elsewhere, you understand information may be processed in the U.S.</p>
<h2>11. Changes</h2>
<p>We may update this policy from time to time. The effective date above will change when we do. Continued use of the Site after changes means you accept the updated policy.</p>
<h2>12. Contact</h2>
<p>Privacy questions: contact us via hello@ibamboo.com or the contact options on this website. Operator: SYMO, LLC, Sheridan, Wyoming, USA.</p>`

/** Minimum Privacy Policy for iBamboo. Not a substitute for legal counsel. */
export function Privacy() {
return (
<div className="pb-24">
<Seo
title="Privacy Policy"
description="Privacy Policy for iBamboo (ibamboo.com)."
path="/privacy"
/>
<article className="mx-auto max-w-3xl px-4 sm:px-6 py-16 sm:py-20">
<p className="text-xs uppercase tracking-widest text-muted mb-3">Legal</p>
<h1 className="font-display text-4xl sm:text-5xl font-extrabold mb-8">Privacy Policy</h1>
<div
className="legal-prose space-y-4 text-sm sm:text-base text-ink-soft leading-relaxed [&_h2]:text-ink [&_h2]:font-display [&_h2]:text-xl [&_h2]:font-bold [&_h2]:mt-8 [&_h2]:mb-3 [&_ul]:list-disc [&_ul]:pl-5 [&_ul]:space-y-2 [&_a]:underline"
dangerouslySetInnerHTML={{ __html: HTML }}
/>
<p className="mt-10 text-sm text-muted">
<Link to="/" className="hover:underline">Home</Link>
{' · '}
<Link to="/terms" className="hover:underline">
Terms of Use
</Link>
</p>
</article>
</div>
)
}
60 changes: 60 additions & 0 deletions src/pages/Terms.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { Link } from 'react-router-dom'
import { Seo } from '../components/Seo'

const HTML = `<p><strong>Effective date:</strong> August 7, 2026</p>
<p>These Terms of Use (“Terms”) govern your use of <strong>https://ibamboo.com</strong> (the “Site”), operated by SYMO, LLC (“iBamboo,” “we,” “us”). By using the Site, you agree to these Terms.</p>
<h2>1. What this Site is</h2>
<p>iBamboo is an <strong>editorial Amazon Associates</strong> website. We curate and describe products and gift routes related to bamboo home goods and related Amazon catalog picks. We provide information and outbound shopping links. We do <strong>not</strong> warehouse, sell, ship, or process payment for the products featured here.</p>
<h2>2. Amazon Associates</h2>
<p>We are a participant in the Amazon Services LLC Associates Program. We may earn a commission on qualifying purchases made through links on the Site. Amazon and the Amazon logo are trademarks of Amazon.com, Inc. or its affiliates. Product prices, availability, shipping, taxes, and returns are controlled by Amazon (or the listed seller) and may change without notice.</p>
<h2>3. No purchase contract with us</h2>
<p>Any purchase you make is solely between you and the third-party seller (often Amazon). Their terms, privacy policy, and customer service apply to your order.</p>
<h2>4. Informational content only</h2>
<p>Guides, calendars, FAQs, product notes, and recommendations are for general information and shopping convenience. They are not professional advice (including medical, legal, financial, or engineering advice). Always verify product fit, safety, and installation requirements with the manufacturer and qualified professionals where appropriate.</p>
<h2>5. Acceptable use</h2>
<p>You agree not to misuse the Site, attempt unauthorized access, scrape in a way that harms service, or use the Site for unlawful purposes.</p>
<h2>6. Intellectual property</h2>
<p>Site design, branding, and original written content are owned by us or our licensors. You may not copy the Site for commercial republication without permission. Product names and images may be trademarks of their respective owners.</p>
<h2>7. Disclaimer of warranties</h2>
<p>THE SITE AND ALL CONTENT ARE PROVIDED “AS IS” AND “AS AVAILABLE” WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SITE WILL BE UNINTERRUPTED OR ERROR-FREE.</p>
<h2>8. Limitation of liability</h2>
<p>TO THE MAXIMUM EXTENT PERMITTED BY LAW, SYMO, LLC AND IBAMBOO SHALL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR ANY LOSS OF PROFITS OR DATA, ARISING FROM YOUR USE OF THE SITE OR RELIANCE ON CONTENT. OUR TOTAL LIABILITY FOR ANY CLAIM RELATED TO THE SITE SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS (US \$100).</p>

Check warning on line 21 in src/pages/Terms.tsx

View workflow job for this annotation

GitHub Actions / Lint & build

eslint(no-useless-escape)

Unnecessary escape character '$'
<h2>9. Indemnity</h2>
<p>You agree to indemnify and hold harmless SYMO, LLC and its officers and agents from claims arising out of your misuse of the Site or violation of these Terms.</p>
<h2>10. Links</h2>
<p>Outbound links are provided for convenience. We are not responsible for third-party sites or services.</p>
<h2>11. Changes</h2>
<p>We may modify these Terms at any time by posting an updated version on the Site. Continued use after changes constitutes acceptance.</p>
<h2>12. Governing law</h2>
<p>These Terms are governed by the laws of the State of Wyoming, USA, without regard to conflict-of-law rules. Exclusive venue for disputes shall be state or federal courts located in Wyoming, unless applicable law requires otherwise.</p>
<h2>13. Contact</h2>
<p>Questions about these Terms: hello@ibamboo.com or the contact options on this website. Operator: SYMO, LLC, Sheridan, Wyoming, USA.</p>
<p class="muted tiny">© 2026 SYMO, LLC. All rights reserved.</p>`

/** Minimum Terms of Use for iBamboo. Not a substitute for legal counsel. */
export function Terms() {
return (
<div className="pb-24">
<Seo
title="Terms of Use"
description="Terms of Use for iBamboo (ibamboo.com)."
path="/terms"
/>
<article className="mx-auto max-w-3xl px-4 sm:px-6 py-16 sm:py-20">
<p className="text-xs uppercase tracking-widest text-muted mb-3">Legal</p>
<h1 className="font-display text-4xl sm:text-5xl font-extrabold mb-8">Terms of Use</h1>
<div
className="legal-prose space-y-4 text-sm sm:text-base text-ink-soft leading-relaxed [&_h2]:text-ink [&_h2]:font-display [&_h2]:text-xl [&_h2]:font-bold [&_h2]:mt-8 [&_h2]:mb-3 [&_ul]:list-disc [&_ul]:pl-5 [&_ul]:space-y-2 [&_a]:underline"
dangerouslySetInnerHTML={{ __html: HTML }}
/>
<p className="mt-10 text-sm text-muted">
<Link to="/" className="hover:underline">Home</Link>
{' · '}
<Link to="/privacy" className="hover:underline">
Privacy Policy
</Link>
</p>
</article>
</div>
)
}
2 changes: 1 addition & 1 deletion worker/generated/routeMeta.json

Large diffs are not rendered by default.

Loading