Session 9: api-football + FootApi + Tank01 adapters, grace period middleware, cookie consent, /pricing page, OOM fix documented (1240 tests)
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
import type { Metadata } from 'next';
|
||||
import Pricing from '@/components/Pricing';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Pricing — VYNDR',
|
||||
description: 'Founder pricing locks for life. $14.99/mo Analyst, $44.99/mo Desk. First 100 seats only.',
|
||||
openGraph: {
|
||||
title: 'VYNDR — Founder Pricing',
|
||||
description: 'Sports prop intelligence. Beta pricing locks for life. First 100 seats.',
|
||||
type: 'website',
|
||||
url: 'https://vyndr.app/pricing',
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'VYNDR — Founder Pricing',
|
||||
description: 'Sports prop intelligence. Beta pricing locks for life.',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Dedicated /pricing route. The Pricing component is also embedded on
|
||||
* the landing page under the `#pricing` anchor; this page exists so:
|
||||
* - The renewal email at `web/src/services/email.ts` (which links
|
||||
* to `/pricing`) lands on something real instead of 404'ing.
|
||||
* - Nav / CTA links can hand users a single stable URL whether
|
||||
* they're already authenticated or not.
|
||||
* - SEO crawlers see pricing on a canonical URL, not deep in the
|
||||
* landing-page anchor.
|
||||
*
|
||||
* The component itself is fully client-side rendered (it owns
|
||||
* checkout state + AuthContext access), so this page wraps it in a
|
||||
* minimal scroll-restoration-friendly shell.
|
||||
*/
|
||||
export default function PricingPage() {
|
||||
return (
|
||||
<main style={{ minHeight: '100vh', paddingTop: 64 }}>
|
||||
<Pricing />
|
||||
</main>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user