From 30a0c8749c89088fc148117cc836dc95499397a3 Mon Sep 17 00:00:00 2001 From: Nikolay Samokhvalov Date: Thu, 27 Nov 2025 20:12:40 -0800 Subject: [PATCH] Console-style hero, ASCII diagram, signup refinements; remove GA and cookie block --- docs/questions-and-answers.md | 368 ++++++-------------- docusaurus.config.js | 104 +++--- package.json | 1 - plugins/meta-pixel/index.js | 33 -- src/components/signupForm/styles.module.css | 7 +- src/css/custom.css | 75 ++-- src/pages/index.module.css | 146 ++++++-- src/pages/index.tsx | 78 ++++- 8 files changed, 404 insertions(+), 408 deletions(-) delete mode 100644 plugins/meta-pixel/index.js diff --git a/docs/questions-and-answers.md b/docs/questions-and-answers.md index 8f9dc104..f4f1d486 100644 --- a/docs/questions-and-answers.md +++ b/docs/questions-and-answers.md @@ -2,263 +2,125 @@ title: Questions & answers sidebar_label: Questions & answers keywords: + - "self-driving postgres" + - "postgresql monitoring" - "database branching" - "postgresql thin cloning" - - "zero downtime postgres upgrades" - - "instant database clones" - - "postgresql development environments" + - "postgresai copilot" - "database lab engine" - - "postgresai assistant" - - "postgresql testing automation" - - "copy on write postgres" + - "postgresql automation" --- # Questions & answers -## About PostgresAI - -### What is PostgresAI? - -PostgresAI is a technology company revolutionizing PostgreSQL development and operations. We provide tools and services that make working with PostgreSQL databases faster, safer, and more efficient: - -- **DBLab Engine**: Our flagship open-source platform for instant database cloning and branching -- **PostgresAI Assistant**: Free AI-powered PostgreSQL expert available 24/7 -- **Zero-downtime solutions**: Tools and expertise for seamless PostgreSQL upgrades -- **Expert consulting**: PostgreSQL performance optimization and architecture services - -We help companies ship database changes 10x faster while reducing infrastructure costs and preventing production incidents. - -### What makes PostgresAI different? - -We provide a comprehensive PostgreSQL platform that transforms how teams work with databases: - -**DBLab Engine - Database Branching & Cloning:** -- **Instant database branching**: Create full-size database branches in 10 seconds (vs. hours with traditional methods) -- **True CI/CD for databases**: Test every migration with production data using DBLab clones -- **Cost efficiency**: Run 50+ DBLab clones on a single machine -- **Developer empowerment**: Self-service database environments on demand with DBLab - -**PostgresAI Assistant - AI-Powered Expertise:** -- **Multi-model AI support**: Choose between GPT, Claude, and Gemini for PostgreSQL assistance -- **24/7 availability**: Get expert-level answers instantly, no waiting for human experts -- **Context-aware responses**: Understands complex PostgreSQL scenarios and best practices - -**Professional Services & Tools:** -- **Zero-downtime upgrades**: Proven methodologies and tools for risk-free PostgreSQL migrations -- **Performance optimization**: Expert consulting for query tuning and architecture design -- **Custom solutions**: Tailored PostgreSQL tools for specific enterprise needs - -**Open Source Leadership:** -- **Community-driven development**: Core products are open source with transparent roadmaps -- **PostgreSQL ecosystem contributions**: Active participation in advancing PostgreSQL technology - -## DBLab - -### What is DBLab Engine? - -DBLab Engine is an open-source platform that enables instant cloning and branching for PostgreSQL databases. It allows you to: - -- Create full-size database clones in seconds, regardless of size -- Test migrations, optimize queries, and debug issues with real data -- Integrate database testing into CI/CD pipelines -- Provide isolated development environments to every team member - -### How fast is database cloning? - -- **1 TB database**: ~10 seconds -- **10 TB database**: ~10 seconds -- **Speed is constant** regardless of database size - -Traditional approaches would take hours or days for such operations. - -### What editions are available? - -**Community Edition (Free)** -- Open-source (Apache 2.0 license) -- Full thin cloning capabilities -- Community support -- Perfect for small teams and POCs - -**Standard Edition (SE)** -- Commercial support included -- Compatible with managed databases (RDS, Cloud SQL, etc.) -- One-click deployment via Console -- Monitoring and alerting included -- Starting from $0.27/hour - -**Enterprise Edition (EE)** -- Everything in SE, plus: -- Unified control plane for multiple instances -- SSO and advanced user management -- Comprehensive audit logs -- API for automation -- Custom pricing based on requirements - -### What is "thin cloning"? - -Thin cloning uses Copy-on-Write (CoW) technology to create virtual database copies that: -- Share unchanged data blocks between clones -- Appear as completely independent databases -- Support full read/write operations -- Use minimal additional storage - -This is fundamentally different from traditional copying, which duplicates all data. - -### How does DBLab Engine work? - -1. **Initial sync**: DBLab copies data from your source database (thick clone) -2. **Continuous sync**: Keeps data up-to-date using logical or physical replication -3. **Snapshot management**: Automatically creates and manages data snapshots -4. **Instant cloning**: Creates thin clones from any snapshot in seconds -5. **Isolation**: Each clone is fully isolated and can be modified independently - -### What technologies does DBLab use? - -- **Storage**: ZFS (recommended) or LVM for Copy-on-Write capabilities -- **Containerization**: Docker for clone isolation -- **Replication**: PostgreSQL logical/physical replication for data sync -- **API**: RESTful API for automation and integration - -### Do I need to modify my production database? - -**No.** DBLab runs completely separately from your production environment. It only needs: -- Read access to your database (for initial copy) -- Replication connection (for continuous sync) -- No ZFS, Docker, or special software on production - -### Who uses DBLab Engine? - -**Development Teams** -- Get production-like data for development -- Test database changes before deployment -- Debug production issues safely - -**DevOps Engineers** -- Automate database provisioning in CI/CD -- Reduce staging environment costs -- Standardize database workflows - -**QA Teams** -- Test with real data scenarios -- Reproduce production bugs -- Validate data migrations - -**DBAs** -- Optimize queries with production data -- Test PostgreSQL upgrades safely -- Train junior DBAs without risk - -### What problems does DBLab solve? - -✅ **Long wait times** for database copies -✅ **High infrastructure costs** for non-production environments -✅ **Production incidents** from untested database changes -✅ **Developer productivity** bottlenecks -✅ **Compliance issues** with production data access - -### What infrastructure do I need for DBLab? - -**For DBLab Engine:** -- Dedicated machine (VM or physical) -- Disk space = database size + 20% overhead -- 16GB+ RAM recommended -- Any modern Linux distribution -- Network access to source database - -**Supported environments:** -- ✅ AWS, GCP, Azure -- ✅ On-premises data centers -- ✅ VMware, Nutanix -- ✅ Any PostgreSQL 9.6+ - -### Can I use DBLab with managed databases? - -Yes! DBLab works with: -- Amazon RDS & Aurora -- Google Cloud SQL -- Azure Database for PostgreSQL -- Heroku Postgres -- Supabase -- Any PostgreSQL-compatible service - -For managed databases, we use logical replication for data synchronization. - -### How quickly can I get started with DBLab? - -- **Community Edition**: 1-2 hours to first clone -- **Standard Edition**: 15 minutes with guided setup -- **POC Support**: We offer free POC assistance - - -### Is my data secure? - -- DBLab runs in your infrastructure -- No data leaves your environment -- Full audit logging (Enterprise Edition) -- Encryption at rest and in transit -- Role-based access control - -### Can I mask sensitive data? - -Yes! DBLab supports: -- Custom data masking rules -- Subset data for smaller clones -- Compliance with GDPR, HIPAA, SOC2 - -### How is DBLab priced? - -**Community Edition**: Free forever (Apache 2.0 license) - -**Standard Edition**: Based on compute resources -- Starts at ~$63/month (excl. costs of cloud resources) -- No per-database or per-clone fees -- Transparent hourly billing - -**Enterprise Edition**: Annual contracts -- Custom pricing based on scale -- Includes professional services -- SLA guarantees - -### How do I get support? - -**Community Edition:** -- [Community Slack](https://slack.postgres.ai) -- [GitLab issues](https://gitlab.com/postgres-ai/database-lab/-/issues) -- [Documentation](/docs) - -**Paid Editions:** -- Dedicated support team -- Email/Slack/Zoom priority support -- Support of custom Postgres images and Postgres images for popular Postgres platforms ([details](https://postgres.ai/docs/database-lab/#paid-versions-dblab-se-and-ee)) -- Custom training available - -### Where can I learn more? - -- [Documentation](/docs) -- [DBLab Engine GitLab repository](https://gitlab.com/postgres-ai/database-lab) -- [Blog](/blog) – Technical articles and case studies - -### How do I contact PostgresAI? - -See the ["Contact us"](/contact) page. - -## PostgresAI Assistant - -### What is PostgresAI Assistant? - -An AI-powered chatbot specifically trained for PostgreSQL questions, supporting multiple leading AI models including GPT, Claude, and Gemini. It helps with: -- Query optimization -- Schema design -- Performance troubleshooting -- Best practices guidance -- PostgreSQL feature explanations - -Available at https://postgres.ai - no registration required for public conversations. - -### Is PostgresAI Assistant really free? - -Yes! Public conversations are completely free. For private conversations with sensitive data, you can register your organization in the Console. - ---- - -*Have a question not answered here? Contact us at support@postgres.ai* \ No newline at end of file +## What is PostgresAI? + +We're building self-driving Postgres. Your database monitors itself, +diagnoses problems, tests fixes, and hands you a PR. You approve, it ships. + +## What is self-driving Postgres? + +Every week, another million Postgres databases spin up. AI builders, startups, +side projects — everyone's shipping. But there are maybe 50,000 people on +Earth who truly understand Postgres internals. The math doesn't work. + +Self-driving Postgres is the solution: databases that take care of themselves. + +### The roadmap + +``` +2018-2024 │ FOUNDATION + │ + │ Consulting: GitLab, Midjourney, Miro, Chewy, Suno... + │ Thousands of RCAs, production incidents, 3am fixes + │ Clusters scaled from 10 GiB to 100+ TiB + │ + │ Building blocks: + │ ├── postgres-checkup (health analysis) + │ ├── DBLab Engine (thin cloning, branching) + │ ├── postgres_ai monitoring (FOSS) + │ └── PostgresAI Assistant (AI chat) + │ + │ +2025 │ COPILOT ◄── WE ARE HERE + │ + │ AI watches, diagnoses, suggests + │ Expert validation on every recommendation + │ You approve, you merge + │ + │ +2026 │ AUTOPILOT + │ + │ Safe operations run automatically + │ Risky changes still need approval + │ Self-driving: first versions late 2026 + │ + │ +2027+ │ SELF-DRIVING + │ + │ Full autonomy + │ Your Postgres runs itself + │ You ship product + │ + ▼ +``` + +## What is DBLab? + +DBLab Engine enables database branching — instant, full-size clones of your +Postgres in seconds, not hours. This lets us test every fix on a copy of your +real database before it reaches you. Experiment at incredible speed, risk-free. + +More: [DBLab Engine documentation](/docs/database-lab) + +## How does PostgresAI Copilot work? + +``` +╔════════════╗ ╔═ PostgresAI Copilot ═════════════════════╗ +║ Your ║░ ║ ┏━━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━┓ ║░ +║ Postgres ║░──────▶║ ┃ Monitoring ┃────▶┃ Health check ┃ ║░ +║ database ║░ ║ ┗━━━━━━━━━━━━━━┛ ┃ & Issues ┃ ║░ +╚════════════╝░ ║ ┗━━━━━━━━━━━━━━┛ ║░ + ░░░░░░░░░░░░░░ ╚══════════════════════════════════════════╝░ + ▲ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ + │ │ + │ ▼ + │ ╔═════════════════════════╗ ╔═════════════════════╗ + └─────║ GitHub PRs / GitLab MRs ║░◀───║ AI tool (Cursor, …) ║░ + ╚═════════════════════════╝░ ╚═════════════════════╝░ + ░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░ +``` + +Open-source monitoring (postgres_ai) runs in your infra. Copilot watches 24/7, +catches issues before they page you, and delivers fixes as pull requests. + +This isn't another monitoring tool with dashboards and alerts. Copilot gives +you actual solutions: + +> `CREATE INDEX idx_orders_customer_id ON orders(customer_id);` +> — tested on a clone, validated by experts, ready to merge. + +We don't throw metrics at an LLM and pray. Our AI is built on battle-tested +methodologies from 20 years of production incidents. Every recommendation is +verified against your actual data. We're a Google for Startups AI company with +rigorous experimental pipelines. + +Expert + AI > Either alone. + +## How much? + +$500/month per cluster. + +Monitoring is free, forever, open source. Copilot adds the AI layer, expert +validation, monthly deep-dive health checks, and direct Slack access to +people who've seen everything. + +## Is my data safe? + +Yes. Monitoring runs in your infrastructure. We see query shapes and +performance metrics — not your actual data. Your secrets stay yours. + +## How do I start? + +Currently in preview — reach out to nik@postgres.ai if you believe your case +can positively influence our development and need to get access faster. diff --git a/docusaurus.config.js b/docusaurus.config.js index 09c4e2e8..96c8bde0 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -5,6 +5,21 @@ const COLOR_MODE = typeof window !== 'undefined' && window.localStorage.getItem( const API_URL_PREFIX = !!process.env.API_URL_PREFIX ? process.env.API_URL_PREFIX : 'https://postgres.ai/api/general' // was: 'https://v2.postgres.ai/api/general/' const BASE_URL = !!process.env.BASE_URL ? process.env.BASE_URL : '/' const REPOSITORY_URL = 'https://github.com/postgres-ai/database-lab-engine' +const UMAMI_WEBSITE_ID = process.env.UMAMI_WEBSITE_ID || '' +const UMAMI_SCRIPT_URL = process.env.UMAMI_SCRIPT_URL || '' +const IS_PROD = process.env.NODE_ENV === 'production' + +const scripts = [ + BASE_URL + 'js/githubButton.js', +] + +if (IS_PROD && UMAMI_WEBSITE_ID && UMAMI_SCRIPT_URL) { + scripts.push({ + src: UMAMI_SCRIPT_URL, + async: true, + 'data-website-id': UMAMI_WEBSITE_ID, + }) +} const SIGN_IN_URL = !!process.env.SIGN_IN_URL ? process.env.SIGN_IN_URL : '/signin' @@ -15,7 +30,7 @@ module.exports = { title: 'PostgresAI', // Title for your website. tagline: - 'Branching 🖖 and thin cloning ⚡️ for any Postgres database. Empower database testing in CI/CD. Optimize DB-related costs while improving time-to-market and software quality.', + 'Self-healing Postgres for fast-growing startups. Ship features instead of fighting database fires.', url: URL, // Your website URL. baseUrl: BASE_URL, // Base URL for your project. onBrokenLinks: 'log', //'throw', @@ -28,12 +43,11 @@ module.exports = { apiUrlPrefix: API_URL_PREFIX, botWSUrl: BOT_WS_URL, consultingWebhook: CONSULTING_WEBHOOK, + umamiWebsiteId: UMAMI_WEBSITE_ID, + umamiScriptUrl: UMAMI_SCRIPT_URL, }, - scripts: [ - BASE_URL + 'js/githubButton.js', - { src: BASE_URL + 'js/cookieBanner.js?v3', async: true, defer: true }, - ], + scripts, themes: ['@docusaurus/theme-mermaid'], @@ -61,16 +75,16 @@ module.exports = { announcementBar: { id: 'postgres_marathon_banner', // Any value that will identify this message to save the hidden status. content: - "#PostgresMarathon is live: deep-dive technical insights every day", + "#PostgresMarathon is live: deep-dive technical insights", backgroundColor: '#D7EEF2', textColor: '#013A44', isCloseable: true, }, navbar: { - title: 'PostgresAI', + title: 'PostgresAI', logo: { - alt: 'PostgresAI logo', + alt: 'PostgresAI logo', src: 'img/logo.svg', width: '32px', height: '32px', @@ -91,7 +105,7 @@ module.exports = { to: '/products/dblab_engine' }, { - label: 'DBLab Pricing', + label: 'DBLab pricing', to: '/pricing' }, { @@ -157,7 +171,7 @@ module.exports = { footer: { style: 'light', logo: { - alt: 'Database Lab logo', + alt: 'PostgresAI logo', src: 'img/logo.svg', width: '64px', height: '64px', @@ -181,7 +195,7 @@ module.exports = { ], }, { - title: 'Docs', + title: 'DOCS', items: [ { label: 'Questions & answers', @@ -196,20 +210,8 @@ module.exports = { to: '/docs/reference-guides/postgres-ai-bot-reference', }, { - label: 'DBLab how-tos', - to: '/docs/dblab-howtos', - }, - { - label: 'DBLab API', - to: '/docs/reference-guides/database-lab-engine-api-reference', - }, - { - label: 'DBLab CLI', - to: '/docs/reference-guides/dblab-client-cli-reference', - }, - { - label: 'DBLab config', - to: '/docs/reference-guides/database-lab-engine-configuration-reference', + label: 'DBLab docs', + to: '/docs/database-lab', }, { label: 'AI rules', @@ -218,11 +220,11 @@ module.exports = { ], }, { - title: 'Products & Services', + title: 'PRODUCTS', items: [ { - label: 'Consulting', - to: '/consulting', + label: 'PostgresAI Console', + href: SIGN_IN_URL, }, { label: 'postgres_ai (monitoring)', @@ -241,13 +243,13 @@ module.exports = { to: '/blog/20240127-postgres-ai-bot', }, { - label: 'Joe bot for SQL Optimization', + label: 'Joe bot for SQL optimization', to: '/products/joe', }, ], }, { - title: 'Social', + title: 'SOCIAL', items: [ { label: 'Community Slack', @@ -261,14 +263,6 @@ module.exports = { label: 'Postgres FM (podcast)', href: 'https://postgres.fm', }, - { - label: 'GitLab', - href: 'https://gitlab.com/postgres-ai', - }, - { - label: 'GitHub', - href: 'https://github.com/postgres-ai', - }, { label: 'Twitter @postgres_ai', href: 'https://twitter.com/postgres_ai', @@ -284,23 +278,19 @@ module.exports = { ], }, { - title: 'Links', + title: 'LINKS', items: [ { - label: 'Home', - to: '/', - }, - { - label: 'Sign in', - href: SIGN_IN_URL, + label: 'GitLab', + href: 'https://gitlab.com/postgres-ai', }, { - label: 'Contact us', - to: '/contact/', + label: 'GitHub', + href: 'https://github.com/postgres-ai', }, { - label: 'Documentation', - to: '/docs/', + label: 'Blog', + to: '/blog', }, { label: 'Case studies', @@ -314,6 +304,10 @@ module.exports = { label: 'Privacy policy', to: '/privacy/', }, + { + label: 'Contact us', + to: '/contact/', + }, ], }, ], @@ -504,15 +498,9 @@ module.exports = { ], }, ], - [ - path.resolve(__dirname, 'plugins/docusaurus-plugin-google-gtm'), - { - trackingID: 'G-SM4CXEQJYY', - }, - ], - // Meta Pixel (Facebook) - path.resolve(__dirname, 'plugins/meta-pixel'), - require.resolve('./plugins/route-change'), + // Google Tag Manager disabled + // Meta Pixel (Facebook) disabled + path.resolve(__dirname, 'plugins/route-change'), ], presets: [ diff --git a/package.json b/package.json index ebefc136..1e0b8108 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "dependencies": { "@docusaurus/core": "2.4.3", "@docusaurus/plugin-client-redirects": "2.4.3", - "@docusaurus/plugin-google-gtag": "^2.4.3", "@docusaurus/plugin-ideal-image": "2.4.3", "@docusaurus/plugin-pwa": "2.4.3", "@docusaurus/preset-classic": "2.4.3", diff --git a/plugins/meta-pixel/index.js b/plugins/meta-pixel/index.js deleted file mode 100644 index b11526a3..00000000 --- a/plugins/meta-pixel/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Docusaurus plugin to inject Meta Pixel (Facebook) across all pages - */ - -function metaPixelPlugin() { - return { - name: 'meta-pixel', - injectHtmlTags() { - const initScript = `!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n n.queue=[];t=b.createElement(e);t.async=!0;\n t.src=v;s=b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t,s)}(window, document,'script',\n 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '1552857229428488');\n fbq('track', 'PageView');`; - - const noscriptImg = '' - - return { - headTags: [ - { - tagName: 'script', - innerHTML: initScript, - }, - ], - postBodyTags: [ - { - tagName: 'noscript', - innerHTML: noscriptImg, - }, - ], - } - }, - } -} - -module.exports = metaPixelPlugin - - diff --git a/src/components/signupForm/styles.module.css b/src/components/signupForm/styles.module.css index 8f252e8f..5c4b7646 100644 --- a/src/components/signupForm/styles.module.css +++ b/src/components/signupForm/styles.module.css @@ -62,13 +62,13 @@ .input { flex: 1; padding: 12px 16px; - font-size: 16px; + font-size: 15px; border: 2px solid #e0e0e0; border-right: none; border-radius: 4px 0 0 4px; background: #fff; transition: all 0.3s ease; - font-family: inherit; + font-family: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", monospace; } .input:focus { @@ -82,8 +82,9 @@ .button { padding: 12px 30px; - font-size: 16px; + font-size: 15px; font-weight: 500; + font-family: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", monospace; background-color: #ff6112; color: #fff; border: none; diff --git a/src/css/custom.css b/src/css/custom.css index 91862f7e..a97ec6a2 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -6,8 +6,7 @@ */ @import url("../../static/css/bootstrap.css"); -@import url("../../static/css/cookie-banner.css"); -@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,100..800;1,100..800&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono+Variable:ital,wght@0,100..800;1,100..800&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap"); /* You can override the default Infima variables here. */ @@ -20,7 +19,7 @@ --ifm-color-primary-lighter: #ff7c3a; --ifm-color-primary-lightest: #ff9763; --ifm-code-font-size: 90%; - --ifm-font-family-base: "JetBrains Mono", "Fira Code", "Source Code Pro", Consolas, monospace; + --ifm-font-family-base: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", Consolas, monospace; --ifm-font-size-base: 15px; } @@ -74,7 +73,7 @@ html[data-theme="dark"] .DocSearch { /* Apply monospace font to search input */ .DocSearch-Input { - font-family: "JetBrains Mono", "Fira Code", "Source Code Pro", Consolas, monospace !important; + font-family: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", Consolas, monospace !important; } .menu--responsive .menu__button { @@ -208,9 +207,9 @@ html[data-theme="dark"] .banner { } .banner h1 { - font-weight: bold; - font-size: 48px !important; - line-height: 1.2 !important; + font-weight: 700; + font-size: 1rem !important; + line-height: 1.4 !important; color: #ff6112; margin: 0; } @@ -262,9 +261,16 @@ article ul li ul li, .banner p { font-weight: 300; - font-size: 18px; - line-height: 24px; - margin: 30px 0; + font-size: 1rem; + line-height: 1.4; + margin: 0 0 20px 0; +} + +/* Limit hero content width on wide screens */ +.banner .row .col-lg-10 { + max-width: 740px; + margin-left: auto; + margin-right: auto; } html[data-theme="light"] .companies { @@ -523,12 +529,12 @@ table.docs-home td { min-height: 540px; } .banner h1 { - font-size: 48px !important; - line-height: 1.2 !important; + font-size: 1rem !important; + line-height: 1.4 !important; } .banner p { - font-size: 26px; - line-height: 30px; + font-size: 1rem; + line-height: 1.4; } .banner .btn { margin-bottom: 18px; @@ -604,12 +610,16 @@ table.docs-home td { min-height: 540px; } .banner h1 { - font-size: 32px !important; - line-height: 1.2 !important; + font-size: 1rem !important; + line-height: 1.4 !important; + } + .banner h1 { + font-size: 1rem !important; + line-height: 1.4 !important; } .banner p { - font-size: 26px; - line-height: 30px; + font-size: 1rem; + line-height: 1.4; } .banner .btn { margin-bottom: 18px; @@ -669,7 +679,7 @@ table.docs-home td { text-align: center; } - .six-sec h2, .banner p, .multi-sec p, .btn { + .six-sec h2, .multi-sec p, .btn { font-size: 16px; line-height: initial; } @@ -719,8 +729,8 @@ table.docs-home td { } .navbar__title { - font-size: 1.4rem; - line-height: 2rem; + font-size: 1rem; + line-height: 1.4rem; font-family: "JetBrains Mono", "Fira Code", "Source Code Pro", Consolas, monospace; font-weight: 400; } @@ -1107,6 +1117,21 @@ div[class*="announcementBar"] div[class*="content"] { border: none; } +/* Footer theming */ +html[data-theme="light"] .footer { + background: #ffffff; + color: #222222; +} + +html[data-theme="dark"] .footer { + background: #050509; + color: #7a7a84; +} + +html[data-theme="dark"] .footer a { + color: #a8a8b4; +} + /* FORCE announcement bar font size - highest specificity */ div[class*="announcementBar"] *, .announcement-bar *, @@ -1150,8 +1175,8 @@ html body > div:first-child { .navbar .navbar__title, .navbar__brand .navbar__title, .navbar__inner .navbar__brand .navbar__title { - font-size: 1.8rem !important; - line-height: 2.2rem !important; + font-size: 1rem !important; + line-height: 1.4rem !important; } /* Better mobile bot interface */ @@ -1231,8 +1256,8 @@ html body > div:first-child { .navbar .navbar__title, .navbar__brand .navbar__title, .navbar__inner .navbar__brand .navbar__title { - font-size: 1.6rem !important; - line-height: 2rem !important; + font-size: 1rem !important; + line-height: 1.4rem !important; } /* Compact bot interface for very small screens */ diff --git a/src/pages/index.module.css b/src/pages/index.module.css index cf5c75e3..109e46ba 100644 --- a/src/pages/index.module.css +++ b/src/pages/index.module.css @@ -1,19 +1,23 @@ .mainTitle { - margin: 40px 0 20px 0!important; - font-size: 48px !important; - line-height: 1.2; - font-weight: 700; + margin: 32px 0 12px 0 !important; + font-family: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", monospace; + font-size: 1rem !important; + line-height: 1.4; + font-weight: 900; + font-variation-settings: "wght" 900; } .subtitle { - font-weight: 300!important; - line-height: 28px; - margin: 0 0 20px 0!important; + font-family: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", monospace; + font-weight: 400 !important; + font-size: 1rem; + line-height: 1.4; + margin: 0 0 20px 0 !important; } .videoContainer { - max-width: 792px; - margin: 50px auto 40px auto; + max-width: 100%; + margin: 48px auto 32px auto; } .videoEmbed { @@ -22,8 +26,9 @@ height: 0; overflow: hidden; background: #000; - border-radius: 8px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border-radius: 4px; + box-shadow: none; + border: 1px solid #2a2a3a; } .videoEmbed iframe { @@ -32,7 +37,75 @@ left: 0; width: 100%; height: 100%; - border-radius: 8px; + border-radius: 4px; +} + +.copilotDiagram { + margin: 50px auto 40px auto; + max-width: 100%; + width: 100%; + display: flex; + justify-content: center; + padding: 24px 0; +} + +.copilotDiagramInner { + max-width: 100%; + overflow-x: visible; +} + +.copilotDiagramDesktop { + display: block; +} + +.copilotDiagramMobile { + display: none; +} + +.copilotDiagram pre { + font-family: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", monospace; + font-size: 13px; + font-weight: 450; + line-height: 1; + letter-spacing: 0px; + background: transparent; + padding: 1px; + color: inherit; + margin: 0; + text-align: left; + white-space: pre; + word-wrap: normal; + overflow-wrap: normal; + font-feature-settings: "kern" off; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: geometricPrecision; +} + +html[data-theme="dark"] .copilotDiagram { + background: #0a0a12; + color: #e8e8e8; + border: 1px solid #2a2a3a; +} + +html[data-theme="light"] .copilotDiagram { + background: #f8f8f8; + color: #1a1a1a; + border: 1px solid #e0e0e0; +} + +@media (max-width: 768px) { + .copilotDiagramInner { + overflow-x: auto; + } + + .copilotDiagramDesktop { + display: none; + } + + .copilotDiagramMobile { + display: block; + } } .featuresGrid { @@ -44,21 +117,21 @@ } .feature { - padding: 20px; + padding: 0 0 20px 0; } .feature h3 { font-weight: bold; - font-size: 18px; - line-height: 24px; + font-size: 1rem; + line-height: 1.4; margin-bottom: 10px; color: var(--ifm-heading-color); } .feature p { font-weight: 300; - font-size: 14px; - line-height: 20px; + font-size: 1rem; + line-height: 1.4; margin: 0; color: var(--ifm-font-color-base); } @@ -66,16 +139,25 @@ .signupSectionFullWidth { width: 100%; padding: 20px 0; - background: rgba(255, 97, 18, 0.05); + background: #f2f4f7; } html[data-theme="dark"] .signupSectionFullWidth { - background: rgba(255, 97, 18, 0.1); + background: #0a0a12; + border-top: 1px solid #2a2a3a; + border-bottom: 1px solid #2a2a3a; +} + +.signupSectionFullWidth h3, +.signupSectionFullWidth p { + font-family: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", "Source Code Pro", monospace; + font-size: 15px; + line-height: 1.4; } .demoLink { margin: 20px 0; - font-size: 18px; + font-size: 1rem; } .demoLink a { @@ -91,13 +173,19 @@ html[data-theme="dark"] .signupSectionFullWidth { /* Mobile Responsive */ @media (max-width: 767px) { .mainTitle { - font-size: 16px; - line-height: 22px; + font-size: 1rem; + line-height: 1.4; } .subtitle { - font-size: 16px; - line-height: 23px; + font-size: 1rem; + line-height: 1.4; + } + + .copilotDiagram pre { + font-size: 1rem; + padding: 15px; + line-height: 1.3; } .featuresGrid { @@ -111,11 +199,11 @@ html[data-theme="dark"] .signupSectionFullWidth { } .feature h3 { - font-size: 18px; + font-size: 1rem; } .feature p { - font-size: 14px; + font-size: 1rem; } .signupSectionFullWidth { @@ -123,17 +211,17 @@ html[data-theme="dark"] .signupSectionFullWidth { } .demoLink { - font-size: 16px; + font-size: 1rem; } } @media (min-width: 768px) and (max-width: 991px) { .mainTitle { - font-size: 48px !important; + font-size: 1rem !important; } .subtitle { - font-size: 18px; + font-size: 1rem; } .featuresGrid { diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d098b81b..a2b7568c 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -20,11 +20,19 @@ function IndexPage() {
+{/* Alternative value proposition for future consideration: +

+ Not dashboards. Fixes +

+

+ Ship your product features instead of fighting Postgres fires +

+*/}

Self-healing Postgres for fast‑growing startups

- Ship features instead of fighting Postgres fires + Ship your product features instead of fighting Postgres fires

{/* Video Container */} @@ -34,7 +42,7 @@ function IndexPage() { width="100%" height="100%" src="https://www.youtube.com/embed/ZWGY64V8AHw?modestbranding=1&rel=0" - title="postgres_ai monitoring demo" + title="postgres_ai copilot demo" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen @@ -42,23 +50,81 @@ function IndexPage() {
+ {/* Copilot Diagram */} +
+
+
{`╔════════════╗        ╔══════════ POSTGRESAI COPILOT ════════════╗
+║    Your    ║░       ║  ┏━━━━━━━━━━━━━━┓     ┏━━━━━━━━━━━━━━┓   ║░
+║  Postgres  ║░──────▶║  ┃  Monitoring  ┃────▶┃ Health check ┃   ║░
+║  database  ║░       ║  ┗━━━━━━━━━━━━━━┛     ┃   & Issues   ┃   ║░
+╚════════════╝░       ║                       ┗━━━━━━━━━━━━━━┛   ║░
+ ░░░░░░░░░░░░░░       ╚══════════════════════════════════════════╝░
+      ▲                ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
+      │                                                │
+      │                                                ▼
+      │     ╔═════════════════════════╗     ╔═════════════════════╗
+      └─────║ GitHub PRs / GitLab MRs ║░◀───║ AI tool (Cursor, …) ║░
+            ╚═════════════════════════╝░    ╚═════════════════════╝░
+             ░░░░░░░░░░░░░░░░░░░░░░░░░░░     ░░░░░░░░░░░░░░░░░░░░░░░`}
+
{`    ╔════════════════╗
+    ║      Your      ║░
+    ║    Postgres    ║░◀─────────┐
+    ╚════════════════╝░          │
+     ░░░░░░░░░░░░░░░░░░          │
+            │                    │
+            ▼                    │
+╔══ POSTGRESAI COPILOT ══╗       │
+║  ┏━━━━━━━━━━━━━━━━━┓   ║░      │
+║  ┃   Monitoring    ┃   ║░      │
+║  ┗━━━━━━━━━━━━━━━━━┛   ║░      │
+║          ▼             ║░      │
+║  ┏━━━━━━━━━━━━━━━━━┓   ║░      │
+║  ┃  Health check   ┃   ║░      │
+║  ┃   & Issues      ┃   ║░      │
+║  ┗━━━━━━━━━━━━━━━━━┛   ║░      │
+╚════════════════════════╝░      │
+ ░░░░░░░░░░░░░░░░░░░░░░░░░░      │
+            │                    │
+            ▼                    │
+  ╔════════════════════╗         │
+  ║ AI tool (Cursor,…) ║░        │
+  ╚════════════════════╝░        │
+   ░░░░░░░░░░░░░░░░░░░░░░        │
+            │                    │
+            ▼                    │
+  ╔════════════════════╗         │
+  ║ GitHub PRs /       ║░────────┘
+  ║ GitLab MRs         ║░
+  ╚════════════════════╝░
+   ░░░░░░░░░░░░░░░░░░░░░░`}
+
+
+ {/* Key Features */}

Effortless index maintenance

-

Continuously clean up unused and redundant indexes. Automatically mitigate index bloat — all while maintaining full control

+

Copilot continuously cleans up unused and redundant indexes, mitigates bloat — following battle-tested methodologies, not just AI guessing

+
+
+

Query analysis

+

Copilot identifies slow queries, missing indexes, and delivers actionable fixes tested on clones of your database

+
+
+

Performance cliffs

+

Copilot detects and predicts issues like LWLock:LockManager contention, MultiXact exhaustion, XID wraparound — helping you avoid disastrous consequences

Built for fast-moving teams

-

For startups and growing companies with solid engineering teams. Focus on shipping features — we've got your database covered

+

For startups with solid engineering teams. Focus on shipping features — we've got your database covered

Universal integration

-

Works with any Postgres, from self-managed and Kubernetes setups to RDS, CloudSQL, Supabase, and other managed services

+

Works with any Postgres: self-managed, Kubernetes, RDS, CloudSQL, Supabase, and other managed services

Battle-tested expertise

-

We've helped companies like GitLab, Chewy, Supabase, Miro, ClickUp, Midjourney, Suno, Gamma, Photoroom, and many others. We'll help you avoid various cliffs, from XID wraparound to LWLock:LockManager. Don't fall — we've got you

+

Trusted by GitLab, Chewy, Supabase, Miro, Orb, Midjourney, Suno, Gamma, Photoroom, and many others