diff --git a/apps/www/components/Solutions/CtaSection.tsx b/apps/www/components/Solutions/CtaSection.tsx index 9ea1715eac5f2..f3e40dde692ae 100644 --- a/apps/www/components/Solutions/CtaSection.tsx +++ b/apps/www/components/Solutions/CtaSection.tsx @@ -4,7 +4,7 @@ import { Button, cn } from 'ui' import SectionContainer from '@/components/Layouts/SectionContainer' -interface Props { +export interface CtaSectionProps { id: string title: string | React.ReactNode subtitle?: string @@ -25,7 +25,14 @@ interface Props { className?: string } -const CtaSection = ({ id, title, subtitle, primaryCta, secondaryCta, className }: Props) => { +const CtaSection = ({ + id, + title, + subtitle, + primaryCta, + secondaryCta, + className, +}: CtaSectionProps) => { return ( { +const FeatureGrid = ({ id, features, heading, subheading, className }: FeatureGridProps) => { return ( + {(heading || subheading) && ( +
+ {heading &&

{heading}

} + {subheading &&

{subheading}

} +
+ )}
- {feature.icon && ( - - - - )} + {feature.icon && + (typeof feature.icon === 'string' ? ( + + + + ) : ( + + ))}

{feature.title}

{feature.description}

diff --git a/apps/www/components/Solutions/PricingComparisonSection.tsx b/apps/www/components/Solutions/PricingComparisonSection.tsx new file mode 100644 index 0000000000000..6af3802440500 --- /dev/null +++ b/apps/www/components/Solutions/PricingComparisonSection.tsx @@ -0,0 +1,121 @@ +import { Check, Minus } from 'lucide-react' +import React, { type FC, type ReactNode } from 'react' +import { cn } from 'ui' +import { TextLink } from 'ui-patterns/TextLink' + +import SectionContainer from '@/components/Layouts/SectionContainer' + +export interface PricingComparisonPlan { + name: string + /** Highlights the column visually (eg. the recommended plan). */ + highlight?: boolean +} + +export interface PricingComparisonRow { + feature: ReactNode + /** One value per plan, in the same order as `plans`. Booleans render as a check or dash. */ + values: (ReactNode | boolean)[] +} + +export interface PricingComparisonSectionProps { + id?: string + heading: ReactNode + subheading?: ReactNode + plans: PricingComparisonPlan[] + rows: PricingComparisonRow[] + cta?: { + label: string + url: string + } + className?: string +} + +const PlanValue = ({ value }: { value: ReactNode | boolean }) => { + if (value === true) { + return + } + if (value === false) { + return ( + + ) + } + return {value} +} + +const PricingComparisonSection: FC = ({ + id, + heading, + subheading, + plans, + rows, + cta, + className, +}) => { + return ( + +
+

{heading}

+ {subheading &&

{subheading}

} +
+ +
+ + + + + {plans.map((plan) => ( + + ))} + + + + {rows.map((row, rowIndex) => ( + + + {row.values.map((value, valueIndex) => ( + + ))} + + ))} + +
+ What you get + + {plan.name} +
+ {row.feature} + + + + +
+
+ + {cta && } +
+ ) +} + +export default PricingComparisonSection diff --git a/apps/www/data/Footer.ts b/apps/www/data/Footer.ts index 5fa08c94530d1..19f6e136634eb 100644 --- a/apps/www/data/Footer.ts +++ b/apps/www/data/Footer.ts @@ -50,6 +50,10 @@ const footerData = [ { title: 'Solutions', links: [ + { + text: 'Hosted Postgres', + url: '/solutions/hosted-postgres', + }, ...skillBasedSolutions.solutions.map((solution) => ({ text: solution.text, url: solution.url, diff --git a/apps/www/data/Solutions.tsx b/apps/www/data/Solutions.tsx index 281ea1c336301..37f0ca6d486e2 100644 --- a/apps/www/data/Solutions.tsx +++ b/apps/www/data/Solutions.tsx @@ -2,6 +2,7 @@ import { BotIcon, Building2Icon, Code2Icon, + Database, HammerIcon, Heart, LightbulbIcon, @@ -33,6 +34,7 @@ export enum Solutions { finserv = 'finserv', healthcare = 'healthcare', agents = 'agents', + hostedPostgres = 'hosted-postgres', } export const skillBasedSolutions = { @@ -154,6 +156,13 @@ export const useCaseSolutions = { export const appTypeSolutions = { label: 'Solutions', solutions: [ + { + id: Solutions.hostedPostgres, + text: 'Hosted Postgres', + description: '', + url: '/solutions/hosted-postgres', + icon: Database, + }, { id: Solutions.b2bSaaS, text: 'B2B SaaS', diff --git a/apps/www/data/company-stats.ts b/apps/www/data/company-stats.ts index 65a4c924b06ea..a84ae813c930a 100644 --- a/apps/www/data/company-stats.ts +++ b/apps/www/data/company-stats.ts @@ -3,18 +3,18 @@ // Number is used for animated components (eg. AnimatedCounter) export const companyStats = { databasesManaged: { - number: 16_000_000, - text: '16,000,000+', + number: 44_000_000, + text: '44,000,000+', label: 'Databases Created', }, databasesLaunchedDaily: { - number: 90_000, - text: '90,000+', + number: 200_000, + text: '200,000+', label: 'Databases launched daily', }, developersRegistered: { - number: 7_000_000, - text: '7,000,000+', + number: 9_000_000, + text: '9,000,000+', label: 'Users', }, developersRegisteredChange: { diff --git a/apps/www/data/solutions/hosted-postgres.tsx b/apps/www/data/solutions/hosted-postgres.tsx new file mode 100644 index 0000000000000..1c2d1d338dfa2 --- /dev/null +++ b/apps/www/data/solutions/hosted-postgres.tsx @@ -0,0 +1,682 @@ +import { useBreakpoint } from 'common' +import { + Activity, + Blocks, + Bot, + Cable, + CalendarClock, + Code2, + Database, + DatabaseBackup, + GitBranch, + GitFork, + Globe, + HardDrive, + HeartPulse, + History, + KeyRound, + LayoutDashboard, + Lightbulb, + List, + ListOrdered, + Lock, + LockKeyhole, + Network, + Scaling, + ShieldAlert, + ShieldCheck, + Sparkles, + SquareTerminal, + Table2, + Users, + UserX, + Wallet, + Webhook, + Workflow, +} from 'lucide-react' + +import { FrameworkLink, getEditors, type HeroSection, type Metadata } from './solutions.utils' +import type { SecuritySectionProps } from '@/components/Enterprise/Security' +import { frameworks } from '@/components/Hero/HeroFrameworks' +import Logos from '@/components/logos' +import type { CtaSectionProps } from '@/components/Solutions/CtaSection' +import type { FeatureGridProps } from '@/components/Solutions/FeatureGrid' +import type { MPCSectionProps } from '@/components/Solutions/MPCSection' +import type { PricingComparisonSectionProps } from '@/components/Solutions/PricingComparisonSection' +import type { ResultsSectionProps } from '@/components/Solutions/ResultsSection' +import { TwoColumnsSectionProps } from '@/components/Solutions/TwoColumnsSection' +import { companyStats } from '@/data/company-stats' +import type { FeaturesSection } from '@/data/solutions/solutions.utils' +import { useSendTelemetryEvent } from '@/lib/telemetry' + +const TELEMETRY_LOCATION = 'Solutions: Hosted Postgres page' + +const data: () => { + metadata: Metadata + heroSection: HeroSection + why: FeaturesSection + pricing: PricingComparisonSectionProps + included: FeatureGridProps + bundled: FeatureGridProps + resultsSection: ResultsSectionProps + performanceGrid: FeatureGridProps + securitySection: SecuritySectionProps + platformUpsell: CtaSectionProps + platformStarterSection: TwoColumnsSectionProps + mcp: MPCSectionProps +} = () => { + const isXs = useBreakpoint(640) + const editors = getEditors(isXs) + const sendTelemetryEvent = useSendTelemetryEvent() + + return { + metadata: { + metaTitle: 'Hosted Postgres | Supabase', + metaDescription: + 'A managed Postgres database in seconds, free to start and just $25 a month in production. Plus a dashboard, backups, Point-in-Time Recovery, connection pooling, read replicas, and the full Postgres extension ecosystem.', + }, + heroSection: { + id: 'hero', + title: 'Hosted Postgres', + h1: <>Managed Postgres in seconds., + subheader: [ + <> + Free to start, just $25 a month in production. More than a database: backups, logs, + advisors, connection pooling, APIs, and everything you need to run Postgres in production. + The rest of the platform is ready when you need it. + , + ], + image: undefined, + ctas: [ + { + label: 'Start your project', + href: 'https://supabase.com/dashboard', + type: 'primary' as any, + onClick: () => + sendTelemetryEvent({ + action: 'start_project_button_clicked', + properties: { buttonLocation: `${TELEMETRY_LOCATION} hero` }, + }), + }, + { + label: 'Request a demo', + href: 'https://supabase.com/contact/sales', + type: 'default' as any, + onClick: () => + sendTelemetryEvent({ + action: 'request_demo_button_clicked', + properties: { buttonLocation: `${TELEMETRY_LOCATION} hero` }, + }), + }, + ], + footer: ( +
+

+ Postgres is trusted in production by teams of every size +

+ +

+ {companyStats.databasesManaged.text} databases created and{' '} + {companyStats.developersRegistered.text} developers on Supabase +

+
+ ), + }, + why: { + id: 'why-supabase', + label: '', + heading: ( + <> + Why developers choose Supabase for{' '} + hosted Postgres + + ), + subheading: + 'You came for a Postgres database. You get a fully managed one, plus the tools you would otherwise build or buy. Pure Postgres, no lock-in.', + features: [ + { + id: 'real-postgres', + icon: Database, + heading: 'Real Postgres, fully managed', + subheading: + 'Connect with psql, pgAdmin, or any standard client. Use native extensions and Row Level Security. We handle provisioning, patching, backups, and uptime.', + }, + { + id: 'free-to-start', + icon: Wallet, + heading: 'Free to start, $25 when you need more', + subheading: + 'Launch a database for free in seconds. Upgrade to Pro for daily backups, email support, and additional production features.', + }, + { + id: 'more-than-a-database', + icon: LayoutDashboard, + heading: 'More than a database, from day one', + subheading: + 'Every project ships with a Dashboard, a SQL Editor, a Table Editor, logs, performance and security advisors, and auto-generated APIs.', + }, + { + id: 'built-to-scale', + icon: Scaling, + heading: 'Built to scale, dependable under pressure', + subheading: + 'Read replicas, point-in-time recovery, and high availability when you need them.', + }, + ], + }, + pricing: { + id: 'pricing', + heading: ( + <> + Pay for Postgres, not for surprises + + ), + subheading: + 'Most hosted Postgres plans start cheap and stay just okay. Supabase is free to start and $25 a month for a production database, with no charges for reads or writes and no per-connection fees. Here is what is included at each tier.', + plans: [{ name: 'Free' }, { name: 'Pro', highlight: true }], + rows: [ + { feature: 'Monthly price', values: ['$0', '$25'] }, + { feature: 'Dedicated Postgres database', values: [true, true] }, + { feature: 'Dashboard, SQL editor, table editor', values: [true, true] }, + { feature: 'Auto-generated REST and GraphQL APIs', values: [true, true] }, + { + feature: 'Full extension ecosystem (pgvector, PostGIS, and more)', + values: [true, true], + }, + { feature: 'Connection pooling', values: [true, true] }, + { feature: 'Charges per read or write', values: ['Never', 'Never'] }, + { feature: 'Automatic daily backups', values: [false, '7-day retention'] }, + { feature: 'Point-in-Time Recovery', values: [false, 'Add-on'] }, + { feature: 'Read replicas', values: [false, 'Add-on'] }, + { feature: 'Database branching', values: [false, 'Usage-based'] }, + { feature: 'Projects never pause', values: [false, true] }, + { feature: 'Email support', values: ['Community', true] }, + ], + cta: { + label: 'See full pricing', + url: '/pricing', + }, + }, + included: { + id: 'included', + heading: 'More than a database', + subheading: + 'Backups, connection pooling, branching, observability, point-in-time recovery, and developer tools included from day one.', + features: [ + { + id: 'managed-postgres', + title: 'Fully managed Postgres', + description: + 'A dedicated Postgres instance, provisioned in seconds and kept patched and online.', + icon: Database, + }, + { + id: 'studio-dashboard', + title: 'Studio dashboard', + description: + 'Manage your database from a clean UI: browse data, inspect schema, and run queries from anywhere.', + icon: LayoutDashboard, + }, + { + id: 'table-editor', + title: 'Table editor', + description: + 'A spreadsheet-style view to create, edit, and explore tables without writing SQL.', + icon: Table2, + }, + { + id: 'sql-editor', + title: 'SQL editor', + description: + 'Write and run SQL in the browser, save snippets, and share queries with your team.', + icon: SquareTerminal, + }, + { + id: 'automatic-backups', + title: 'Automatic backups', + description: + 'Daily backups with retention, so a bad migration is never the end of the world.', + icon: DatabaseBackup, + }, + { + id: 'pitr', + title: 'Point-in-Time Recovery', + description: 'Restore to any moment, down to the second, for true disaster recovery.', + icon: History, + }, + { + id: 'connection-pooling', + title: 'Connection pooling', + description: + 'Supavisor pools and shares connections so your app scales past Postgres connection limits.', + icon: Network, + }, + { + id: 'read-replicas', + title: 'Read replicas', + description: + 'Add read-only databases in other regions to spread load and cut latency for global users.', + icon: GitFork, + }, + { + id: 'branching', + title: 'Branching', + description: + 'Spin up isolated database branches for development and preview, then merge with confidence.', + icon: GitBranch, + }, + { + id: 'migrations-cli', + title: 'Migrations and CLI', + description: ( + <> + Version-control your schema and run the full stack locally with{' '} + supabase start. + + ), + icon: SquareTerminal, + }, + { + id: 'full-sql-access', + title: 'Full SQL access', + description: + 'CTEs, triggers, foreign keys, JSONB, full-text search, stored procedures, and PL/pgSQL.', + icon: Code2, + }, + { + id: 'extension-ecosystem', + title: 'The Postgres extension ecosystem', + description: + 'pgvector, PostGIS, pg_cron, pg_stat_statements, and dozens more, one click away.', + icon: Blocks, + }, + ], + }, + bundled: { + id: 'bundled', + heading: 'Your database is an application platform', + subheading: + 'Generate APIs, schedule work, trigger workflows, manage secrets, and connect external systems without leaving Postgres.', + features: [ + { + id: 'rest-apis', + title: 'Auto-generated REST APIs', + description: + 'PostgREST turns your schema into a REST API instantly, ready for any framework.', + icon: Webhook, + }, + { + id: 'graphql', + title: 'GraphQL', + description: 'pg_graphql reflects a GraphQL API straight from your database schema.', + icon: Workflow, + }, + { + id: 'observability', + title: 'Observability and logs', + description: 'Built-in logs, reports, and query performance tools for fast debugging.', + icon: Activity, + }, + { + id: 'advisors', + title: 'Performance and Security Advisors', + description: + 'Automatic checks that flag missing indexes, slow queries, and risky access policies before they bite.', + icon: Lightbulb, + }, + { + id: 'cron', + title: 'Cron', + description: + 'Schedule recurring jobs with cron syntax, managed inside Postgres with pg_cron.', + icon: CalendarClock, + }, + { + id: 'queues', + title: 'Queues', + description: + 'A Postgres-native durable message queue with guaranteed delivery, powered by pgmq.', + icon: ListOrdered, + }, + { + id: 'vault', + title: 'Vault', + description: 'Store secrets and encryption keys securely, right in your database.', + icon: KeyRound, + }, + { + id: 'fdw', + title: 'Foreign Data Wrappers', + description: + 'Query BigQuery, Redshift, MySQL, and external APIs as if they were local tables.', + icon: Cable, + }, + { + id: 'database-webhooks', + title: 'Database webhooks', + description: + 'Trigger functions and external services automatically when your data changes.', + icon: Webhook, + }, + { + id: 'mcp-server', + title: 'MCP Server and AI Assistant', + description: 'Connect Cursor, Claude, and other AI tools directly to your database.', + icon: Bot, + }, + ], + }, + resultsSection: { + id: 'performance', + heading: ( + <> + Top performance, +
+ at any scale + + ), + subheading: + 'Supabase is Postgres, so the ceiling is Postgres. Scale compute and storage independently, add replicas, and keep query times low whether you are handling a launch spike or steady growth. You will not outgrow it and need to start over somewhere else.', + highlights: [ + { + heading: companyStats.databasesManaged.label, + subheading: companyStats.databasesManaged.text, + }, + { + heading: 'Postgres performance gains', + subheading: '20-30x', + }, + ], + }, + performanceGrid: { + id: 'performance-features', + features: [ + { + id: 'postgres-core', + title: 'Postgres at its core', + description: + 'ACID-compliant and battle-tested, trusted by startups and enterprises alike.', + icon: Database, + }, + { + id: 'scaling', + title: 'Vertical and horizontal scaling', + description: 'Scale compute and storage independently, with support for read replicas.', + icon: Scaling, + }, + { + id: 'high-performance-disk', + title: 'High-performance disk', + description: 'Fast, configurable storage tuned for demanding workloads.', + icon: HardDrive, + }, + { + id: 'multi-region', + title: 'Multi-region deployments', + description: + 'Place read replicas close to your users for global availability and low latency.', + icon: Globe, + }, + { + id: 'high-availability', + title: 'High availability', + description: 'Automatic failover and redundancy for mission-critical applications.', + icon: ShieldCheck, + }, + { + id: 'pitr-backups', + title: 'Point-in-Time Recovery and automatic backups', + description: 'Recover quickly from any failure or mistake.', + icon: DatabaseBackup, + }, + { + id: 'multigres', + title: 'Multigres is coming', + description: ( + <>Learn more about Multigres and the performance benefits you'll get when it ships. + ), + icon: Sparkles, + }, + ], + }, + securitySection: { + id: 'security', + label: 'Security', + heading: + 'Postgres is trusted for medical records, missions to the moon, and everything in between', + subheading: + 'Keep your data secure with SOC 2, HIPAA, and GDPR compliance. Your data is encrypted at rest and in transit, with built-in tools for monitoring and managing security threats.', + features: [ + { + icon: ShieldCheck, + heading: 'SOC 2 Type II certified', + }, + { + icon: HeartPulse, + heading: 'HIPAA compliant', + }, + { + icon: Lock, + heading: 'Encryption at rest and in transit', + }, + { + icon: LockKeyhole, + heading: 'SSL enforcement', + }, + { + icon: UserX, + heading: 'Network restrictions', + }, + { + icon: Users, + heading: 'Row Level Security and Role-Based Access Control', + }, + { + icon: List, + heading: 'Database audit logs', + }, + { + icon: Lightbulb, + heading: 'Security Advisors', + }, + { + icon: KeyRound, + heading: 'Multi-factor authentication', + }, + { + icon: ShieldAlert, + heading: 'DDoS protection and vulnerability management', + }, + ], + cta: { + label: 'Learn about security', + url: '/security', + }, + }, + platformUpsell: { + id: 'platform-upsell', + title: <>Postgres now. The rest of the backend when you want it., + subtitle: + 'Your hosted Postgres comes from the same platform that gives you Auth, Storage, Edge Functions, Realtime, and Vector search. Start with the database. Add the rest later without migrating, re-architecting, or changing vendors.', + primaryCta: { + label: 'Explore the full platform', + url: '/', + }, + }, + platformStarterSection: { + id: 'platform-starter', + heading: ( + <> + Choose your platform to get started in + seconds + + ), + headingRight: ( + <> + Or, start with Supabase AI Prompts{' '} + + + ), + docsUrl: 'https://supabase.com/docs/guides/getting-started/ai-prompts', + leftFooter: ( +
+ {frameworks.map((framework) => ( + + ))} +
+ ), + aiPrompts: [ + { + id: 'auth-setup', + title: 'Bootstrap Next.js app with Supabase Auth', + description: + '## Overview of implementing Supabase Auth SSR\n1. Install @supabase/supabase-js and...', + code: `1. Install @supabase/supabase-js and @supabase/ssr packages. +2. Set up environment variables. +3. Write two utility functions with \u0060createClient\u0060 functions to create a browser client and a server client. +4. Hook up middleware to refresh auth tokens +`, + language: 'markdown', + docsUrl: + 'https://supabase.com/docs/guides/getting-started/ai-prompts/nextjs-supabase-auth', + }, + { + id: 'edge-functions', + title: 'Writing Supabase Edge Functions', + description: + "You're a Supabase Postgres expert in writing row level security policies. Your purpose is to generate...", + code: `1. Try to use Web APIs and Deno's core APIs instead of external dependencies (eg: use fetch instead of Axios, use WebSockets API instead of node-ws) +2. If you are reusing utility methods between Edge Functions, add them to 'supabase/functions/_shared' and import using a relative path. Do NOT have cross dependencies between Edge Functions. +3. Do NOT use bare specifiers when importing dependecnies. If you need to use an external dependency, make sure it's prefixed with either 'npm:' or 'jsr:'. +`, + language: 'markdown', + docsUrl: 'https://supabase.com/docs/guides/getting-started/ai-prompts/edge-functions', + }, + { + id: 'declarative-db-schema', + title: 'Declarative Database Schema', + description: + "You're a Supabase Postgres expert in writing row level security policies. Your purpose is to generate...", + code: `Mandatory Instructions for Supabase Declarative Schema Management +## 1. **Exclusive Use of Declarative Schema** +-**All database schema modifications must be defined within '.sql' files located in the 'supabase/schemas/' directory.`, + language: 'markdown', + docsUrl: + 'https://supabase.com/docs/guides/getting-started/ai-prompts/declarative-database-schema', + }, + { + id: 'rls-policies', + title: 'Create RLS policies', + description: + "You're a Supabase Postgres expert in writing row level security policies. Your purpose is to generate...", + code: `You're a Supabase Postgres expert in writing row level security policies. Your purpose is to generate a policy with the constraints given by the user. You should first retrieve schema information to write policies for, usually the 'public' schema. +The output should use the following instructions: + +- The generated SQL must be valid SQL.`, + language: 'markdown', + docsUrl: + 'https://supabase.com/docs/guides/getting-started/ai-prompts/database-rls-policies', + }, + ], + }, + mcp: { + id: 'mcp', + heading: ( +
+ Supabase works seamlessly with{' '} + your favorite AI code editor +
+ ), + ctaLabel: 'Connect your AI tools', + documentationLink: '/docs/guides/getting-started/mcp', + frameworks: editors, + apiExamples: [ + { + lang: 'json', + title: 'macOS', + code: `{ +"mcpServers": { + "supabase": { + "command": "npx", + "args": [ + "-y", + "@supabase/mcp-server-supabase@latest", + "--read-only", + "--project-ref=" + ], + "env": { + "SUPABASE_ACCESS_TOKEN": "" + } + } +} +}`, + }, + { + lang: 'json', + title: 'Windows', + code: `{ +"mcpServers": { + "supabase": { + "command": "cmd", + "args": [ + "/c", + "npx", + "-y", + "@supabase/mcp-server-supabase@latest", + "--read-only", + "--project-ref=" + ], + "env": { + "SUPABASE_ACCESS_TOKEN": "" + } + } +} +}`, + }, + { + lang: 'json', + title: 'Windows (WSL)', + code: `{ +"mcpServers": { + "supabase": { + "command": "wsl", + "args": [ + "npx", + "-y", + "@supabase/mcp-server-supabase@latest", + "--read-only", + "--project-ref=" + ], + "env": { + "SUPABASE_ACCESS_TOKEN": "" + } + } +} +}`, + }, + { + lang: 'json', + title: 'Linux', + code: `{ + "mcpServers": { + "supabase": { + "command": "npx", + "args": [ + "-y", + "@supabase/mcp-server-supabase@latest", + "--read-only", + "--project-ref=" + ], + "env": { + "SUPABASE_ACCESS_TOKEN": "" + } + } + } +}`, + }, + ], + }, + } +} + +export default data diff --git a/apps/www/pages/solutions/hosted-postgres.tsx b/apps/www/pages/solutions/hosted-postgres.tsx new file mode 100644 index 0000000000000..258c52b4b04fb --- /dev/null +++ b/apps/www/pages/solutions/hosted-postgres.tsx @@ -0,0 +1,67 @@ +import Layout from 'components/Layouts/Default' +import ProductHeader from 'components/Sections/ProductHeader2' +import SolutionsStickyNav from 'components/SolutionsStickyNav' +import { Solutions } from 'data/Solutions' +import getContent from 'data/solutions/hosted-postgres' +import { NextPage } from 'next' +import { NextSeo } from 'next-seo' +import dynamic from 'next/dynamic' + +const WhySupabase = dynamic(() => import('components/Solutions/FeaturesSection')) +const PricingComparison = dynamic(() => import('components/Solutions/PricingComparisonSection')) +const FeatureGrid = dynamic(() => import('components/Solutions/FeatureGrid')) +const ResultsSection = dynamic(() => import('components/Solutions/ResultsSection')) +const Security = dynamic(() => import('components/Enterprise/Security')) +const CtaSection = dynamic(() => import('components/Solutions/CtaSection')) +const PlatformStarterSection = dynamic(() => import('components/Solutions/TwoColumnsSection')) +const MPCSection = dynamic(() => import('components/Solutions/MPCSection')) + +const HostedPostgresPage: NextPage = () => { + const content = getContent() + + return ( + <> + + + + + + + + + + + + + + + + + ) +} + +export default HostedPostgresPage