Stripe's compliance crawler fetches the apex URL without executing JS and declined live-mode review when `https://resolutionflow.com/` returned the empty SPA shell that redirected to /landing client-side. Restructure the router so / serves LandingPage directly: - `/` → new `PublicLanding` wrapper (LandingPage for anon; Navigate to /home for authed users so there's no marketing-frame flicker). - Authed tree converted to a path-less layout route with absolute child paths. QuickStartPage moves to `/home`; all other children (`/trees`, `/pilot`, `/admin/*`, `/account/*`, etc.) keep their URLs. - `/landing` kept as a one-release stale-bookmark redirect to /. - `ProtectedRoute` unauth redirect flipped /landing → /; `state.from` preserved for post-login return. Reference updates: - Post-login / post-onboarding destinations → /home: OAuthCallbackPage (incl. `?welcome=teammate` query), WelcomeStep1/2/3 dismiss-rest, AssistantChatPage post-escalate, WelcomeRouter completion/dismiss redirects, VerifyEmailPage's three "Go to dashboard" links. - Authed chrome → /home: TopBar logo, AppLayout mobile nav + drawer logo, CommandPalette Dashboard entry. - Dashboard onboarding → /home: NextStepCard `ran_session.ctaPath`, SetupChecklist `ran_session.path`, SessionHistoryPage empty-state CTA. - Public back-links → /: TermsPage, PrivacyPage, PoliciesPage, ContactPage, PromotionsPage, PublicTemplatesPage (header + footer). SharedSessionPage's `to="/"` left as-is — now correctly lands anon visitors on the public landing. Crawlability: - New `frontend/public/robots.txt` allowlisting public pages and disallowing the authed app. - New `frontend/public/sitemap.xml` for /, /pricing, /contact-sales, /contact, /templates, /terms, /privacy, /policies, /promotions. - `PageMeta` gains an `og:url` (defaults to `window.location.href`) and flips `twitter:card` to `summary_large_image` when an `ogImage` is passed. Tests: - `AppLayout.test.tsx` updated to mount at `/home`. - New `ProtectedRoute.test.tsx` asserts unauthenticated `/home` redirects to `/` (not `/landing`) and preserves origin in `state.from`. If Stripe's crawler still cannot see the site after this (zero-JS crawler), the documented next escalation is server-side prerendering of public routes via `vite-plugin-ssg`. Out of scope here. Plan: docs/plans/2026-05-13-public-landing-routing-refactor.md Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
50 lines
3.2 KiB
TypeScript
50 lines
3.2 KiB
TypeScript
import { Link } from 'react-router-dom'
|
|
import { PageMeta } from '@/components/common/PageMeta'
|
|
|
|
export default function TermsPage() {
|
|
return (
|
|
<>
|
|
<PageMeta title="Terms of Service" description="ResolutionFlow Terms of Service" />
|
|
<div className="min-h-screen bg-background text-foreground">
|
|
<div className="mx-auto max-w-3xl px-6 py-16">
|
|
<Link to="/" className="text-sm text-muted-foreground hover:text-foreground mb-8 inline-block">← Back to home</Link>
|
|
<h1 className="text-3xl font-bold font-heading mb-8">Terms of Service</h1>
|
|
<p className="text-muted-foreground mb-6">Last updated: March 21, 2026</p>
|
|
|
|
<div className="space-y-6 text-muted-foreground leading-relaxed">
|
|
<section>
|
|
<h2 className="text-xl font-semibold text-foreground mb-3">1. Acceptance of Terms</h2>
|
|
<p>By accessing or using ResolutionFlow, you agree to be bound by these Terms of Service. If you are using ResolutionFlow on behalf of an organization, you represent that you have authority to bind that organization to these terms.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 className="text-xl font-semibold text-foreground mb-3">2. Description of Service</h2>
|
|
<p>ResolutionFlow provides AI-guided troubleshooting decision trees, automated documentation generation, and PSA integration tools for managed service providers (MSPs). The service includes FlowPilot AI copilot, flow editor, session management, and team collaboration features.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 className="text-xl font-semibold text-foreground mb-3">3. Account Responsibilities</h2>
|
|
<p>You are responsible for maintaining the security of your account credentials and for all activities that occur under your account. You must notify us immediately of any unauthorized use.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 className="text-xl font-semibold text-foreground mb-3">4. Data Ownership</h2>
|
|
<p>You retain ownership of all content you create within ResolutionFlow, including flows, session documentation, and team knowledge. We do not claim ownership of your data.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 className="text-xl font-semibold text-foreground mb-3">5. Service Availability</h2>
|
|
<p>ResolutionFlow is currently in beta. We strive for high availability but do not guarantee uninterrupted access during the beta period. We will provide reasonable notice of planned maintenance.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2 className="text-xl font-semibold text-foreground mb-3">6. Contact</h2>
|
|
<p>Questions about these terms? Email <a href="mailto:support@resolutionflow.com" className="text-primary hover:underline">support@resolutionflow.com</a> or visit our <Link to="/contact" className="text-primary hover:underline">contact page</Link>. Billing, cancellation, refund, and promotional terms are governed by our <Link to="/policies" className="text-primary hover:underline">Customer Policies</Link>.</p>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</>
|
|
)
|
|
}
|