From 405be6901ae121f2a14e6cedc4fc8c523b04e6d3 Mon Sep 17 00:00:00 2001 From: Michael McRoskey <148508623+michael-mcroskey@users.noreply.github.com> Date: Thu, 5 Jun 2025 15:25:47 -0400 Subject: [PATCH 01/15] =?UTF-8?q?=F0=9F=8E=9B=EF=B8=8F=20Initial=20plan=20?= =?UTF-8?q?comparison=20table?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../new-pricing-comparison.md | 606 ++++++++++++++++++ static/css/table_style.css | 23 +- 2 files changed, 627 insertions(+), 2 deletions(-) create mode 100644 docs/accounts-billing/new-pricing-comparison.md diff --git a/docs/accounts-billing/new-pricing-comparison.md b/docs/accounts-billing/new-pricing-comparison.md new file mode 100644 index 00000000..013c6488 --- /dev/null +++ b/docs/accounts-billing/new-pricing-comparison.md @@ -0,0 +1,606 @@ +--- +slug: plan-comparison +title: "Pricing Comparison" +description: "Compare FlutterFlow plans and features to find the right plan for your needs" +--- + +
+ + + +# Plan Comparison + +Choose the plan that fits your development needs and team size. + +Features | +Free $0 per month |
+ Individual $39 per month |
+ Growth $135 per month |
+ Business $495 per month |
+ Enterprise Custom pricing |
+
---|---|---|---|---|---|
Core Platform Features | +|||||
Visual Development Environment Drag & drop builder for creating apps visually |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
1K+ Prebuilt Templates Ready-to-use app templates and components |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Build Mobile, Web, & Desktop Applications Create apps for iOS, Android, Web, and Desktop platforms |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Project Count Number of projects you can create |
+ 2 projects | +Unlimited | +Unlimited | +Unlimited | +Unlimited | +
AI Generation AI-powered assistance for building and coding |
+ 5 requests/lifetime | +50 requests/mo | +200 requests/mo | +500 requests/mo | +Custom (unlimited) | +
Data & Integrations | +|||||
Firebase Integration Connect to Firestore, Firebase Auth, and more |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Supabase Integration Connect to Supabase for database and auth |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
AI Agents Create AI agents with OpenAI, Anthropic, and Google |
+ 0 | +1 | +Unlimited | +Unlimited | +Unlimited | +
API Endpoints Connect to external APIs and services |
+ 1 | +Unlimited | +Unlimited | +Unlimited | +Unlimited | +
Swagger/OpenAPI Imports Import API specifications automatically |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Development Environments Separate databases and configuration values for testing and production |
+ 1 | +1 | +Up to 2 | +Up to 3 | +Unlimited | +
Development Features | +|||||
Code Extensibility Add custom code to extend functionality |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Live Debugging Test your app in the brower and hot reload |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Visual Logic Builder Create app logic with a visual editor |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
State Management Manage app data and user interface states |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Custom Code Expressions Write custom expressions and logic |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
One-Click Localization (i18n) Automatically translate your app using Google Translate API |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Push to GitHub Push your project code to GitHub |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
VS Code Extension Sync custom code files back and forth between FlutterFlow and VS Code |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Automated Testing Run automated tests on your applications |
+ ❌ | +❌ | +❌ | +Up to 3 tests per project | +Unlimited tests | +
Custom Classes Bring custom Dart classes into your app |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
YAML Editing Refactor your project with by editing the YAML representation |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Project API Programmatic access to project data |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
MCP Server (Experimental) Model Context Protocol server integration |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Cloud Functions Write and deploy Firebase Cloud Functions directly from FlutterFlow |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
CLI Command-line interface for downloading code and project management |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Configuration File Snippets Directly modify Info.plist, main.dart, Android manifest, and other config files |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Local Run Desktop Emulator Run code locally with automatic environment setup |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Design Features | +|||||
Design Systems Consistent color schemes, typographic, icons, and more |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Animations & Haptic Touch Add animations and haptic feedback to your app |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Custom Fonts & Icons Upload and use custom fonts and icons |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Custom Typography Presets Create reusable text styles and presets |
+ ❌ | +❌ | +❌ | +✅ | +✅ | +
Screenshot Generator Generate app screenshots automatically for App Store review |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Figma Theme Import Import color and typography themes from Figma |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Figma Frame Import (AI) AI-powered import of Figma frames to FlutterFlow |
+ ❌ | +❌ | +❌ | +100 requests/mo | +Custom (unlimited) | +
Advanced App Features | +|||||
Push Notifications Send notifications to app users |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Payments Integration Integrate Stripe and other payment providers |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Ads Integration Monetize your app with advertisements |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Third-Party Package Imports Add pub.dev packages and GitHub dependencies |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Debug Panel Advanced debugging tools and console |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Collaboration Features | +|||||
Number of Editors Team members who can edit projects |
+ 1 | +1 | +Up to 2 | +Up to 5* | +Unlimited | +
Real-Time Collaboration Work together on projects simultaneously |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Project Commenting Add comments and feedback to projects |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Git-Style Visual Branching Create and manage project branches visually |
+ ❌ | +❌ | +❌ | +Up to 5 open branches | +Unlimited | +
Automated Snapshot Backups Automatic project backups and version control |
+ ❌ | +❌ | +Up to 1 day | +Up to 5 days | +Unlimited | +
Activity Logging Track project changes and user activity |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Project Level Access Control Manage permissions for individual projects |
+ ❌ | +❌ | +❌ | +✅ | +✅ | +
Centralized Billing Manage team billing from one account |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Library Features | +|||||
Library Imports Add FlutterFlow libraries to your projects |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Library Publishing Publish your projects as reusable libraries |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Deployment | +|||||
Free Subdomains Deploy your web app to FlutterFlow subdomains |
+ Up to 2 | +Up to 20 | +Up to 20 | +Up to 20 | +Unlimited | +
Custom Domains Deploy to your own custom domain |
+ ❌ | +1 free domain | +1 free domain | +1 free domain | +Unlimited | +
Custom Web Favicon Set custom favicon for web publishing |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
FlutterFlow Watermark Removal Remove FlutterFlow branding from published apps |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Code Download Download your project's source code |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
APK Download Download Android APK files |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
One-Click Apple & Google Store Deployment Deploy directly to app stores with one click |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Support | +|||||
Community Support Access to FlutterFlow community forums |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Email Support Get help via email from our support team |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Priority In-App Support Priority chat support directly within FlutterFlow |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Dedicated Live Support Direct access to dedicated support specialists |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Enterprise Features | +|||||
Version Pinning Control FlutterFlow platform upgrades |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Single Sign-On (SSO) Integrate with your organization's SSO provider |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Accessibility Advanced accessibility features and compliance |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Database Point-in-Time Recovery Restore database to any point in time |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Access to Custom Engineering Solutions Custom development and engineering support |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Features | +Plan | Free $0 per month |
Individual $39 per month |
Growth $135 per month |
@@ -397,10 +398,18 @@ Choose the plan that fits your development needs and team size.
✅ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Git-Style Visual Branching Create and manage project branches visually |
- ❌ | -❌ | -❌ | +Manual Commits Make explicit named commits to the current branch for version control |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Number of Branches Create and manage multiple project branches (all plans include main branch) |
+ 1 (main only) | +1 (main only) | +1 (main only) | Up to 5 open branches | Unlimited | Centralized Billing Manage team billing from one account |
❌ | ❌ | -✅ | +❌ | ✅ | ✅ | @@ -520,6 +529,14 @@ Choose the plan that fits your development needs and team size.||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Support | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Account and Billing Support Help with account management and billing questions |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Community Support Access to FlutterFlow community forums |
✅ | diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 524c8f8a..aeec2c39 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -11,6 +11,9 @@ const config: Config = { onBrokenMarkdownLinks: 'throw', onBrokenAnchors: 'throw', favicon: 'logos/favicon.png', + clientModules: [ + require.resolve('./src/js/table-helpers.js'), + ], i18n: { defaultLocale: 'en', locales: ['en'], diff --git a/src/js/table-helpers.js b/src/js/table-helpers.js new file mode 100644 index 00000000..f6a36dd2 --- /dev/null +++ b/src/js/table-helpers.js @@ -0,0 +1,166 @@ +import ExecutionEnvironment from "@docusaurus/ExecutionEnvironment"; + +let floatingHeader = null; +let cleanup = null; + +function createFloatingHeader(originalHeader) { + if (floatingHeader) return floatingHeader; + + // Get the original table for width measurements + const originalTable = originalHeader.closest("table"); + + // Clone the original header + const headerClone = originalHeader.cloneNode(true); + + // Create floating container + floatingHeader = document.createElement("div"); + + // Check if we're on a wide screen where sidebar is visible + const isWideScreen = window.innerWidth >= 997; + + // Get the actual sidebar width from CSS variables + let sidebarWidth = "0px"; + if (isWideScreen) { + const computedStyle = getComputedStyle(document.documentElement); + const docSidebarWidth = computedStyle.getPropertyValue( + "--doc-sidebar-width" + ); + sidebarWidth = docSidebarWidth || "300px"; // fallback to 300px + } + + floatingHeader.style.cssText = ` + position: fixed; + top: 60px; + left: ${sidebarWidth}; + right: 0; + z-index: 1000; + background: var(--ifm-background-color); + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + display: none; + overflow-x: auto; + padding: 0 20px; + `; + + // Create table wrapper for the floating header + const floatingTable = document.createElement("table"); + floatingTable.className = "simplified-pricing-table"; + floatingTable.style.cssText = ` + margin: 0 auto; + width: 100%; + max-width: 1200px; + table-layout: fixed; + border-collapse: collapse; + `; + + floatingTable.appendChild(headerClone); + floatingHeader.appendChild(floatingTable); + document.body.appendChild(floatingHeader); + + // Copy column widths from original table to floating table + const originalCells = originalHeader.querySelectorAll("th"); + const floatingCells = headerClone.querySelectorAll("th"); + + // Get the computed width of the original table + const originalTableRect = originalTable.getBoundingClientRect(); + floatingTable.style.width = originalTableRect.width + "px"; + + originalCells.forEach((originalCell, index) => { + if (floatingCells[index]) { + const cellRect = originalCell.getBoundingClientRect(); + floatingCells[index].style.width = cellRect.width + "px"; + floatingCells[index].style.minWidth = cellRect.width + "px"; + floatingCells[index].style.maxWidth = cellRect.width + "px"; + } + }); + + return floatingHeader; +} + +function handleScroll(originalHeader) { + if (!originalHeader) return; + + const headerRect = originalHeader.getBoundingClientRect(); + const isHeaderVisible = headerRect.bottom > 60; // Account for navbar + + if (!isHeaderVisible) { + // Original header is out of view, show floating header + const floating = createFloatingHeader(originalHeader); + floating.style.display = "block"; + } else { + // Original header is visible, hide floating header + if (floatingHeader) { + floatingHeader.style.display = "none"; + } + } +} + +function initFloatingHeader() { + // Clean up any existing setup + if (cleanup) cleanup(); + + const table = document.getElementById("pricing-table"); + const originalHeader = document.getElementById("table-header"); + + if (!table || !originalHeader) return; + + const scrollHandler = () => handleScroll(originalHeader); + + // Use passive event listeners for better performance + window.addEventListener("scroll", scrollHandler, { passive: true }); + + // Handle window resize to update column widths + const resizeHandler = () => { + if (floatingHeader) { + // Remove and recreate floating header with new measurements + if (floatingHeader.parentNode) { + floatingHeader.parentNode.removeChild(floatingHeader); + } + floatingHeader = null; + } + }; + window.addEventListener("resize", resizeHandler, { passive: true }); + + // Cleanup function + cleanup = () => { + window.removeEventListener("scroll", scrollHandler); + window.removeEventListener("resize", resizeHandler); + if (floatingHeader && floatingHeader.parentNode) { + floatingHeader.parentNode.removeChild(floatingHeader); + floatingHeader = null; + } + }; +} + +if (ExecutionEnvironment.canUseDOM) { + // Initialize on route changes + if (typeof window !== "undefined") { + // Safari might need a longer delay + const isSafari = + navigator.userAgent.includes("Safari") && + !navigator.userAgent.includes("Chrome"); + const delay = isSafari ? 300 : 100; + + // Initial setup + setTimeout(initFloatingHeader, delay); + + // Setup for route changes + const originalPushState = history.pushState; + const originalReplaceState = history.replaceState; + + const onRouteChange = () => { + setTimeout(initFloatingHeader, delay); + }; + + history.pushState = function (...args) { + originalPushState.apply(this, args); + onRouteChange(); + }; + + history.replaceState = function (...args) { + originalReplaceState.apply(this, args); + onRouteChange(); + }; + + window.addEventListener("popstate", onRouteChange); + } +} diff --git a/static/css/table_style.css b/static/css/table_style.css index 732bf82e..b528f064 100644 --- a/static/css/table_style.css +++ b/static/css/table_style.css @@ -2,10 +2,11 @@ * Pricing table styles for plan-pricing.md */ - .pricing-table-container { +/* Pricing table container */ +.pricing-table-container { max-width: 1200px; margin: 0 auto; - overflow: hidden; + overflow: auto; } .mobile-scroll-hint { @@ -46,21 +47,10 @@ vertical-align: top; } -/* Light mode table borders */ -[data-theme='light'] .simplified-pricing-table th, -[data-theme='light'] .simplified-pricing-table td { - border-bottom: 1px solid #ebeaf0; -} - -/* Dark mode table borders */ -[data-theme='dark'] .simplified-pricing-table th, -[data-theme='dark'] .simplified-pricing-table td { - border-bottom: 1px solid #404040; -} - .simplified-pricing-table th { background-color: #f5f5f5; font-weight: 600; + border-bottom: 2px solid #ddd; } /* Light mode header background */ @@ -75,6 +65,18 @@ color: #ffffff; } +/* Light mode table borders */ +[data-theme='light'] .simplified-pricing-table th, +[data-theme='light'] .simplified-pricing-table td { + border-bottom: 1px solid #ebeaf0; +} + +/* Dark mode table borders */ +[data-theme='dark'] .simplified-pricing-table th, +[data-theme='dark'] .simplified-pricing-table td { + border-bottom: 1px solid #404040; +} + .whats-changing-col { width: 50%; } From ab3943f187331fb3d11a9d541f534923aa7d6794 Mon Sep 17 00:00:00 2001 From: Michael McRoskey <148508623+michael-mcroskey@users.noreply.github.com> Date: Thu, 5 Jun 2025 16:11:25 -0400 Subject: [PATCH 03/15] =?UTF-8?q?=F0=9F=95=B8=EF=B8=8F=20Add=20web=20deplo?= =?UTF-8?q?yment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/accounts-billing/new-pricing-comparison.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/accounts-billing/new-pricing-comparison.md b/docs/accounts-billing/new-pricing-comparison.md index a5b0b51a..688bfcf9 100644 --- a/docs/accounts-billing/new-pricing-comparison.md +++ b/docs/accounts-billing/new-pricing-comparison.md @@ -469,6 +469,14 @@ Choose the plan that fits your development needs and team size.|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Deployment | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Web Deployment Deploy your app as a web application |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Free Subdomains Deploy your web app to FlutterFlow subdomains |
Up to 2 | From 7b89d844850d7b3c151729cf676aeca0ae592687 Mon Sep 17 00:00:00 2001 From: Michael McRoskey <148508623+michael-mcroskey@users.noreply.github.com> Date: Fri, 6 Jun 2025 09:31:38 -0400 Subject: [PATCH 04/15] =?UTF-8?q?=F0=9F=95=B8=EF=B8=8F=20Add=20sticky=20he?= =?UTF-8?q?ader=20and=20toggles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../new-pricing-comparison.md | 1375 +++++++++-------- src/js/table-helpers.js | 39 +- 2 files changed, 807 insertions(+), 607 deletions(-) diff --git a/docs/accounts-billing/new-pricing-comparison.md b/docs/accounts-billing/new-pricing-comparison.md index 688bfcf9..cee1c3fb 100644 --- a/docs/accounts-billing/new-pricing-comparison.md +++ b/docs/accounts-billing/new-pricing-comparison.md @@ -9,623 +9,792 @@ hide_table_of_contents: true -# Plan Comparison +import {useState, useEffect} from 'react'; -Choose the plan that fits your development needs and team size. +export const PricingToggles = () => { + const [currency, setCurrency] = useState('USD'); + const [billingPeriod, setBillingPeriod] = useState('monthly'); + + // Update sticky header when pricing changes + useEffect(() => { + // Trigger sticky header recreation when pricing data changes + const event = new CustomEvent('pricingChanged'); + window.dispatchEvent(event); + }, [currency, billingPeriod]); + + const pricingData = { + USD: { + monthly: { + free: 0, + individual: 39, + growth: 135, + business: 495, + enterprise: 'Custom' + }, + annual: { + free: 0, + individual: 30, // $360/year = $30/month effective + growth: 108, // $1296/year = $108/month effective + business: 396, // $4752/year = $396/month effective + enterprise: 'Custom' + } + }, + INR: { + monthly: { + free: 0, + individual: 1300, // Official INR rate + growth: 4500, // Official INR rate + business: 16500, // Official INR rate + enterprise: 'Custom' + }, + annual: { + free: 0, + individual: 975, // ₹11,700/year = ₹975/month effective + growth: 3375, // ₹40,500/year = ₹3,375/month effective + business: 12375, // ₹148,500/year = ₹12,375/month effective + enterprise: 'Custom' + } + } + }; -
Plan | +Free {formatPrice(currentPrices.free)} {getPeriodText()} |
+ Individual {formatPrice(currentPrices.individual)} {getPeriodText()} |
+ Growth {formatPrice(currentPrices.growth)} {getPeriodText()} |
+ Business {formatPrice(currentPrices.business)} {getPeriodText()} |
+ Enterprise {formatPrice(currentPrices.enterprise)} pricing |
+
---|---|---|---|---|---|
Core Platform Features | +|||||
Visual Development Environment Drag & drop builder for creating apps visually |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
1K+ Prebuilt Templates Ready-to-use app templates and components |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Build Mobile, Web, & Desktop Applications Create apps for iOS, Android, Web, and Desktop platforms |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Project Count Number of projects you can create |
+ 2 projects | +Unlimited | +Unlimited | +Unlimited | +Unlimited | +
AI Generation AI-powered assistance for building and coding |
+ 5 requests/lifetime | +50 requests/mo | +200 requests/mo | +500 requests/mo | +Custom (unlimited) | +
Plan | -Free $0 per month |
- Individual $39 per month |
- Growth $135 per month |
- Business $495 per month |
- Enterprise Custom pricing |
-
---|---|---|---|---|---|
Core Platform Features | -|||||
Visual Development Environment Drag & drop builder for creating apps visually |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
1K+ Prebuilt Templates Ready-to-use app templates and components |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Build Mobile, Web, & Desktop Applications Create apps for iOS, Android, Web, and Desktop platforms |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Project Count Number of projects you can create |
- 2 projects | -Unlimited | -Unlimited | -Unlimited | -Unlimited | -
AI Generation AI-powered assistance for building and coding |
- 5 requests/lifetime | -50 requests/mo | -200 requests/mo | -500 requests/mo | -Custom (unlimited) | -
Data & Integrations | +|||||
Firebase Integration Connect to Firestore, Firebase Auth, and more |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Supabase Integration Connect to Supabase for database and auth |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
AI Agents Create AI agents with OpenAI, Anthropic, and Google |
+ 0 | +1 | +Unlimited | +Unlimited | +Unlimited | +
API Endpoints Connect to external APIs and services |
+ 1 | +Unlimited | +Unlimited | +Unlimited | +Unlimited | +
Swagger/OpenAPI Imports Import API specifications automatically |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Development Environments Separate databases and configuration values for testing and production |
+ 1 | +1 | +Up to 2 | +Up to 3 | +Unlimited | +
Data & Integrations | -|||||
Firebase Integration Connect to Firestore, Firebase Auth, and more |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Supabase Integration Connect to Supabase for database and auth |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
AI Agents Create AI agents with OpenAI, Anthropic, and Google |
- 0 | -1 | -Unlimited | -Unlimited | -Unlimited | -
API Endpoints Connect to external APIs and services |
- 1 | -Unlimited | -Unlimited | -Unlimited | -Unlimited | -
Swagger/OpenAPI Imports Import API specifications automatically |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Development Environments Separate databases and configuration values for testing and production |
- 1 | -1 | -Up to 2 | -Up to 3 | -Unlimited | -
Development Features | +|||||
Code Extensibility Add custom code to extend functionality |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Live Debugging Test your app in the brower and hot reload |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Visual Logic Builder Create app logic with a visual editor |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
State Management Manage app data and user interface states |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Custom Code Expressions Write custom expressions and logic |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
One-Click Localization (i18n) Automatically translate your app using Google Translate API |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Push to GitHub Push your project code to GitHub |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
VS Code Extension Sync custom code files back and forth between FlutterFlow and VS Code |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Automated Testing Run automated tests on your applications |
+ ❌ | +❌ | +❌ | +Up to 3 tests per project | +Unlimited tests | +
Custom Classes Bring custom Dart classes into your app |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
YAML Editing Refactor your project with by editing the YAML representation |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Project API Programmatic access to project data |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
MCP Server (Experimental) Model Context Protocol server integration |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Cloud Functions Write and deploy Firebase Cloud Functions directly from FlutterFlow |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
CLI Command-line interface for downloading code and project management |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Configuration File Snippets Directly modify Info.plist, main.dart, Android manifest, and other config files |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Local Run Desktop Emulator Run code locally with automatic environment setup |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Development Features | -|||||
Code Extensibility Add custom code to extend functionality |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Live Debugging Test your app in the brower and hot reload |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Visual Logic Builder Create app logic with a visual editor |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
State Management Manage app data and user interface states |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Custom Code Expressions Write custom expressions and logic |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
One-Click Localization (i18n) Automatically translate your app using Google Translate API |
- ❌ | -❌ | -✅ | -✅ | -✅ | -
Push to GitHub Push your project code to GitHub |
- ❌ | -❌ | -✅ | -✅ | -✅ | -
VS Code Extension Sync custom code files back and forth between FlutterFlow and VS Code |
- ❌ | -❌ | -✅ | -✅ | -✅ | -
Automated Testing Run automated tests on your applications |
- ❌ | -❌ | -❌ | -Up to 3 tests per project | -Unlimited tests | -
Custom Classes Bring custom Dart classes into your app |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
YAML Editing Refactor your project with by editing the YAML representation |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Project API Programmatic access to project data |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
MCP Server (Experimental) Model Context Protocol server integration |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Cloud Functions Write and deploy Firebase Cloud Functions directly from FlutterFlow |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
CLI Command-line interface for downloading code and project management |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Configuration File Snippets Directly modify Info.plist, main.dart, Android manifest, and other config files |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Local Run Desktop Emulator Run code locally with automatic environment setup |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Design Features | +|||||
Design Systems Consistent color schemes, typographic, icons, and more |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Animations & Haptic Touch Add animations and haptic feedback to your app |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Custom Fonts & Icons Upload and use custom fonts and icons |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Custom Typography Presets Create reusable text styles and presets |
+ ❌ | +❌ | +❌ | +✅ | +✅ | +
Screenshot Generator Generate app screenshots automatically for App Store review |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Figma Theme Import Import color and typography themes from Figma |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Figma Frame Import AI-powered import of Figma frames to FlutterFlow |
+ ❌ | +❌ | +❌ | +100 requests/mo | +Custom (unlimited) | +
Design Features | -|||||
Design Systems Consistent color schemes, typographic, icons, and more |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Animations & Haptic Touch Add animations and haptic feedback to your app |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Custom Fonts & Icons Upload and use custom fonts and icons |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Custom Typography Presets Create reusable text styles and presets |
- ❌ | -❌ | -❌ | -✅ | -✅ | -
Screenshot Generator Generate app screenshots automatically for App Store review |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Figma Theme Import Import color and typography themes from Figma |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Figma Frame Import (AI) AI-powered import of Figma frames to FlutterFlow |
- ❌ | -❌ | -❌ | -100 requests/mo | -Custom (unlimited) | -
Advanced App Features | +|||||
Push Notifications Send notifications to app users |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Payments Integration Integrate Stripe and other payment providers |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Ads Integration Monetize your app with advertisements |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Third-Party Package Imports Add pub.dev packages and GitHub dependencies |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Debug Panel Advanced debugging tools and console |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Advanced App Features | -|||||
Push Notifications Send notifications to app users |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Payments Integration Integrate Stripe and other payment providers |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Ads Integration Monetize your app with advertisements |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Third-Party Package Imports Add pub.dev packages and GitHub dependencies |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Debug Panel Advanced debugging tools and console |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Collaboration Features | +|||||
Number of Editors Team members who can edit projects |
+ 1 | +1 | +Up to 2 | +Up to 5* | +Unlimited | +
Real-Time Collaboration Work together on projects simultaneously |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Project Commenting Add comments and feedback to projects |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Manual Commits Make explicit named commits to the current branch for version control |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Number of Branches Create and manage multiple project branches (all plans include main branch) |
+ 1 (main only) | +1 (main only) | +1 (main only) | +Up to 5 open branches | +Unlimited | +
Automated Snapshot Backups Automatic project backups and version control |
+ ❌ | +❌ | +Up to 1 day | +Up to 5 days | +Unlimited | +
Activity Logging Track project changes and user activity |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Project Level Access Control Manage permissions for individual projects |
+ ❌ | +❌ | +❌ | +✅ | +✅ | +
Centralized Billing Manage team billing from one account |
+ ❌ | +❌ | +❌ | +✅ | +✅ | +
Collaboration Features | -|||||
Number of Editors Team members who can edit projects |
- 1 | -1 | -Up to 2 | -Up to 5* | -Unlimited | -
Real-Time Collaboration Work together on projects simultaneously |
- ❌ | -❌ | -✅ | -✅ | -✅ | -
Project Commenting Add comments and feedback to projects |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Manual Commits Make explicit named commits to the current branch for version control |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Number of Branches Create and manage multiple project branches (all plans include main branch) |
- 1 (main only) | -1 (main only) | -1 (main only) | -Up to 5 open branches | -Unlimited | -
Automated Snapshot Backups Automatic project backups and version control |
- ❌ | -❌ | -Up to 1 day | -Up to 5 days | -Unlimited | -
Activity Logging Track project changes and user activity |
- ❌ | -❌ | -❌ | -❌ | -✅ | -
Project Level Access Control Manage permissions for individual projects |
- ❌ | -❌ | -❌ | -✅ | -✅ | -
Centralized Billing Manage team billing from one account |
- ❌ | -❌ | -❌ | -✅ | -✅ | -
Library Features | +|||||
Library Imports Add FlutterFlow libraries to your projects |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Library Publishing Publish your projects as reusable libraries |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Library Features | -|||||
Library Imports Add FlutterFlow libraries to your projects |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Library Publishing Publish your projects as reusable libraries |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Deployment | +|||||
Web Deployment Deploy your app as a web application |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Free Subdomains Deploy your web app to FlutterFlow subdomains |
+ Up to 2 | +Up to 20 | +Up to 20 | +Up to 20 | +Unlimited | +
Custom Domains Deploy to your own custom domain |
+ ❌ | +1 free domain | +1 free domain | +1 free domain | +Unlimited | +
Custom Web Favicon Set custom favicon for web publishing |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
FlutterFlow Watermark Removal Remove FlutterFlow branding from published apps |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Code Download Download your project's source code |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
APK Download Download Android APK files |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
One-Click Apple & Google Store Deployment Deploy directly to app stores with one click |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Deployment | -|||||
Web Deployment Deploy your app as a web application |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Free Subdomains Deploy your web app to FlutterFlow subdomains |
- Up to 2 | -Up to 20 | -Up to 20 | -Up to 20 | -Unlimited | -
Custom Domains Deploy to your own custom domain |
- ❌ | -1 free domain | -1 free domain | -1 free domain | -Unlimited | -
Custom Web Favicon Set custom favicon for web publishing |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
FlutterFlow Watermark Removal Remove FlutterFlow branding from published apps |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Code Download Download your project's source code |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
APK Download Download Android APK files |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
One-Click Apple & Google Store Deployment Deploy directly to app stores with one click |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Support | +|||||
Account and Billing Support Help with account management and billing questions |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Community Support Access to FlutterFlow community forums |
+ ✅ | +✅ | +✅ | +✅ | +✅ | +
Email Support Get help via email from our support team |
+ ❌ | +✅ | +✅ | +✅ | +✅ | +
Priority In-App Support Priority chat support directly within FlutterFlow |
+ ❌ | +❌ | +✅ | +✅ | +✅ | +
Dedicated Live Support Direct access to dedicated support specialists |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Support | -|||||
Account and Billing Support Help with account management and billing questions |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Community Support Access to FlutterFlow community forums |
- ✅ | -✅ | -✅ | -✅ | -✅ | -
Email Support Get help via email from our support team |
- ❌ | -✅ | -✅ | -✅ | -✅ | -
Priority In-App Support Priority chat support directly within FlutterFlow |
- ❌ | -❌ | -✅ | -✅ | -✅ | -
Dedicated Live Support Direct access to dedicated support specialists |
- ❌ | -❌ | -❌ | -❌ | -✅ | -
Enterprise Features | +|||||
Version Pinning Control FlutterFlow platform upgrades |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Single Sign-On (SSO) Integrate with your organization's SSO provider |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Accessibility Advanced accessibility features and compliance |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Database Point-in-Time Recovery Restore database to any point in time |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
Access to Custom Engineering Solutions Custom development and engineering support |
+ ❌ | +❌ | +❌ | +❌ | +✅ | +
fHj_?w;j+W=92w`J*CABI`BhKOC|Rr>T?-@Dyuv!jj?dFPKQ2*lf` zWE%=J^W3nlW~TFKH$a~!uYP)9koNzR8W(d@-LbXu``@{T*SA&F*4^#Y1Xmi`-c?1V=3jgi0M?MiTr}GqIAv~x8PoCO7A68 z1)nQTeQ=GCpCl$zlSl~54R(%7Y<0smk!0Spt(4vyb8`u#S_!~&aFde0bx__j @w2Xol6qsI2!)x6OS_%4oZ1&!_}5jb-f_>`AcQGc=E8p0CNzc) zX&uI**3`%q6OE{e!o8I?)n(}XE7CuE9ASlf$H{^4^k_qNt;vFBBjPX%r6=&!^2Y~@ zZf*mvjgR^-ICF&d%p?PLHOl$_p8KcST=WKid2iYH9%~L3hl2)>st xa>i7u*T zVX6sNNobFe8%N?+(IFe#hn5!INIAY0d?lZ|LrbWIl-!!aWKnhQD{?~PcTD>za=Pa# zs}fc2?eS}D?psEIq_M2YcTN`ww_07AF@(=@qR9CgV-`JURr%mv%uKlIjHOZk%LeNi z*pa-Wn;+A$Xfx$F`yKOLcX1mrCF-1=mQzAl$a>nq6z*MAsjf=V44Xx6ZP#++uU_)G z6U0dt$6>|55eMj|d9&bwF^jJzJCS$FByt!tCtUp%O034xA4B#~D9&tZ%)1 nc1AZOi z?H`4qfXkn=cv&R==WEVC8GK#VFXx7)ILf);v Xu@reh)S@Q6QT=}s38I|83 zGW3@VLSwJ{D<_$p3KX(R_M=!=v`LZLEzx^)CjreNq8Qsd;UDr$33xskYpI+c$-|iJ zU!`lWLfhdi8j=xiU*Q7YHP=)Eob52q;%4}lH`{lNu6{)}NN07zc$Y@VG_Ba>cByau zAJ6>Cn^?N^9(U_!2BvgcmwZ;TCO*uKPewJNh$cS6{4$+YaBHuTTO?hisoR${j*i-$ z@%(P81=Iw2&LyYzz3GS=S`52-xF(_Ub^=KXyUU5x(wb2}m`pzH9I^l1D0?e90hp z6f5-K5L$jYU(_`)1{hJKtyA9gX3@iJv?NZ0dJaMO)V=sBjCi2OcRAi)nK^fj(T~zy zz#Wp4zOdhY5)_t!?1`Xv^miO+On;w+645)<|5W?;{P)St)OW9BxpXooifkK(G>XZt z1=22a97^}cYJU63v2M`o81V-&?KWx+^omU*4oA>#7dH}>H&NOb#Gtd#nXn3FKc1O6 z=m|$)?#xL#-eeHT8O&3)|Ak(S*wn~nU~su1AZvHq6zvu5lC999qPuc 3iy;l@iweL4(cj2+a^#{*m?|fA+HChrLD>znmLcLfJ!EjQS}!Y!PkV=`ztH8k}#( zmEapnD%1vPFT}AMOQz_={E3TKMzX|+g7{{6COI%3X<*i02fD$tDx>xVTru3{C3cSL zpZlNI77BDYP%P;v`eK9i=`REe4IgE5?iwgPduGvqnkR1er0$G@`*|BrnHk1COks{@ zcwX@BmG_?_LxvA>a_HRP1{y6pqy2lkZc|7`TmY59(24Jnyj*HkZPL(O2g?XW+VNwV z&DM}fj0zHgoP(7lyJYAXjTs#Zm4&yT#L`6^NU8AfPf!J1I~>C+9;gNdzFpR-**EXHR-ijaF?XNr;1L *Tn*_k> zvFg;b)VxOm5jWWlMBZ8qt$Y`)A&wx>mq_~CQZ<0!x5qAe2YQhR1dTQ*-3@8i-nnA( z2!b<6ID&LPcZqyvSungkx=6zey0MC<&*hY2i1d?dWu-&^A{ox#T^VUbj2}cFcbwx5 zl#g(KPCeI5|7ADq0%^i}C6b;N@MY=F=Jh*HQNsh!s!v1#d7_K-gAsQvA3=T@K*>d* z-v!=g(EON=E(&rP&lr>bNwd-Vf^mkofkwrvG=s@8+?#`R&|S|TmPj!WNk8_5tY4oe z9lz#36%Q}Spy73X4Nvn!D+UsoA;CWl_$`@i$b#6gVQ`V5Mvaf8PoUxDU{?D^luRXt zq4(`AwGA~U!40YpLEU@kK19X55D*4DWnkoWFdIa5gqlIrTZ9!6IMQnsbgy0Zqbm!m z4mKjM!CED&)?V2k#_&c+lWxmybmIaz3#A=gRD)v1{*6N5k@U$h&1U&CZWZ0w&e5t0 zHnqo>= J6{N6C}T<%w&C2*-Y;~;f|nB03MN!IA!4M{x<7OHdy*E zbG#A1-q#10scmhY*ecl@zxN?w$t0Pz0gSVySq=MCM8n1o4e!ylh)Pwi(nHg{sTWd3 zu4NRtajxWhsck~_8!2%Y{$#$!hwT#A-tleLdv{eyH3%<3176YBQ}c4LsmX!1g;9n6 zrfG&cF}w|f`*gxr)>+3MwzerVJh^x1COZPRKNYd03V=L{xeRnLN~JqL2AUbp6P>;V ziGeKhPQPyeM3}|Br&E0id%h|rC3Zb26s|UE)CR=P@Q?ZV# 9ANYBJSptHW5*KgT}P&&PXWl|IySbn*H>K$pN9p-KqJ z-M!Xdp?@e19}RpvmbA}(j<+_jFp^%sOK~eR!C>ElAxQ>MtXH*z8ZJwm{^>8R@al{p z#;mikxWsPN-2jxOCpW46lcoHP3Ky?wkLY&fx}I~eUPZ6=$^ajZBMTPD6X9+_J=gwQ zLF^U%$;*a;^2=^PaQj*MFMZRo@zGo>ozd8>P`W7kV9?I7+@gM>Pd#_ Q5Gc ^!tNI2?Og&ooa3HpzQHlDeFG zDMeQpHyDOi1>}>zdjCa(G-uDLXam}zp&ldDziLs)-i<=rNW)wYxu`ML`vWOl#&=RI z*#DRk_IzKdQ_IfhKOw4c;%CJlK1+2JYuZtl;M8vgGySh;8*hL7wEEK!-6`l0+-w>) zX8fRlUhU7}^@y8vdzZ`dV*@ I3aMlf`i&d!=*CMD zSE65s }Q+X=0do z5nF$Euz3Tig$4QLtaOcyXZXs2{&dn izO zF}o`x^k4P`mjWXfQ6?9JdroqlRXJ@CMW_j9NvDiIFPON{xrwzChkY9}jB3=yL*_r$ z^$Hy=qGsSCv?GR`)kfF2M~!L=nSxBI=N!#oWw{B* E-gL3Rx9~Y3suPk2) zNaG+t%N()~s}#y|pE%&`kxH`$iE}F(7j&wR|8b~P&LhzWyb-=mu0E1Ey$4Lwqmo5+ z3kr3)qD4MsKm5&qgVuTV (DFK7@XYFtR(u><_R zLtnH_I=CBWFuoUfrzVio$;maN>qW;~p4U}$Bxk~!;LDxk)-d?B`nAFFZ#yCmYZ3RT zpeZ5ey?%>eaSK4#>Pih%Jud6*2p@1*^Zv8ANU!GUk}vfz6WLW}hxlMlQaBfP9Y^s( z`Ph$CP>{r!L+k9@s>iK=Hy2j{SnnTL 0oXu7jyG=5cS4 z!tOg1XTU`xNTsOh+gpVES{}oSk%VJ&?%ob*5Au`u89# 9}ts*OLt;@m$ +#`tQd&Si-MJ>kTudzH=EXNg8UT;k9ruTX6*vm5A7;bh@xtii}^rfc8Of|V-1 zNP{^_g|B0yaMkw0e=6nIkgLukh2!byIz+u~>Yt$dxb^`|Fm<3{{k{(xXCFK(LzCA= zXSC7c_r1fmC+qA}g_APCx$e9?y${I;qsXd=t!+KhKgqs2sTWl@%T^LEWJ0Z}+7%x@ zFe;2j$gSx)^|wwpbG#74=095^NUly6pzo$hTwV0e4EJb(_?Q_PTd@dp)Ae9`kZL{J zLmd%`J-M{y22*rsMF&gUYYq})^E?rxo0WB_vbZ6wsaIo3M>-TC5;Y+Gxj1{Djf^=5 zNFSGV)$ov@grd#(VH&hGOuJjAg4Wp?5mF@mDZr{9Q~k?HMzvC&)GO-4_SMN(8M{(j zhD7LWlN92LTvswDoF>bz!cKPeSCAV%Z6Cca@M6Sk6tGSkO0SD#R(g35tgl zmB~_x?@T3_wemc-4{%hr !nh}Wcm>b(7SLr1>-UdZhyq3j1YRGoK6-d#VWB-}YTpMa&L=54h>G<<&-PncHb z=(u=XfWLH_Blk{oWE14bn&GW=V}f#uWo|@K*fe-ygTLiU8#S*50-;(Y?_(j`09EW+ zAELA1RQuhiqD_}vEL2llh*7#a_B>bjVbe7gyjXd%#8t=7_smBTaD_9(JfFWW_J>ua zcq3ZEHlVYTHMqHDmX6NH=L+}3*6b~Z%C1UgB`zj(M~{bV+!X!GPEeFebew@TvOT_L zDC3gdTuWQX`I|m27NOKyWAqGu&9ou3Vh!iorkscV FeOmHxs_1*NPCT&NMLlfkHuJM6TPWK8kcv>)3Wve)NqqjLX !kT+&@|)g66k(Im zgB`nkmxV% $>l73=^AbiSe6mLz7N#ZUbfsKAxe;EEDRrQ~Pd%4J|3zG? zLX&z%aI6ArPus5Bt%z|h_|-$N#(AfZ4xctg_(!a5$AQKU-l$x)FNsLc{3Ctt=E+6w zO%-PoVzD$a_@d9h`kOVlH|_OS6~T@Or-HTDIfu12$JU2(A%DG)Dg=8;r@OWwm9i#& z4zEQacG_!)_!(Gp!SIue%GPg#6w8cnjOeAXwd=z4EM7ciHSVghLl>>fr*9)&}VuWXI@F+tO*f>?@QF0D?*qrxc3@fVhb7~Rr8|`mM^uTdf9L7)M@t& z!LWptILMhP0LQRE%LeX|$xS689LyX{^}2x9Rr!l)iOgzyV($037u+aCfnv|TSAxRI z)bL?fA0pD>!HGr57VP8a$ %=8ad;Ta?8F&0ih}?_pl;qpBn@29!jf@8=6R3iJbggx#Zq;Qy%b@vt zgR)h)YV8NTTD4IPZ<)~_4avi5R2c=AoODeCgdfK3?3EK1qu|<+Iez2_*ebqec$tY3 zGy4iYFor_&WxO72^O9 md0JNS2Hrnt=!Ocp&UOI}vkavsl{*vq{; zkp??KAZBmYlwqCEN@mSsW-b=cbX?~CmW=WCVh9?%k@#m*s%&LY1oF-Sk(+>c`UFvv zcblz99F$NPi`v_$hTQo@Sg;e~Fl*u*$rJ5$HSp1qjPkn|-(8Aq5LrN-gsmsOl+ZhL z$iA&Ynw1&eN|X7%A|PpgvucfBa3R mlSHtPnGRSdRx_7U}udVvy0`TSbd2z4NLk&1KJJ1pJ7coJAl&+Q)RVUIs&%Hn+=P zYziLr+6OZHOWRD1iG+ViR{hOR8%Gi9pbu}KK+LiVI(Q7ia(ZzTx|#ZdLQsIt&k(ak zbzAdJ!)w-ipSBmYEoJ?mBTP_>QUxriiRb>IzO*xQZ&!c)aSBSZk2n#H# dGvJo5Mv3}Fgw z_*yTLKyJ%IO~+K2SC5C5H&D!cP{d(QqKl9^>;gNg1l!|}P3L%(+z Fn);367>yQW7gWXiVp zVl}vBhelu}@c(83bh@shi>|-9NYeJ_;hm{Br`{9ix?emutEW@Qp;#6{-;dZ~&kTWK z5{txC`!TLvx#S-c_qv$toIXnx^|bb22D@SE=Lv#sDQl!)9CGDu>Vs_)wD!|192zg7 z8kg20SHOWj87> ?ICa^^>#zCCw7TUi*eMUgV;-_nX0onoq8}q9}3KA3p1%}rX zDj0mWu?gG$)BZwt{4eR)mj;?<$kZ@$cDcF}kE@c8&LG=6%F?@s=y9Yv_3my!61^Ju z!aWKRCWC|R1yX-lo4kERLLBsQRv=kLNY?|Wze|Q9BRvF kK1PKpE{ zaEv7YL;!bChN^ja+{wxnPw3SIpxlt0waqshb2U$zDaA$~7|dv|957#SxZSY)Ht(W; zQy0Q3Fdf-|QW}CNUTAwD&Ku#iN!w#(wR=9S!SBxIxW1=MCz+I5bi5~0Ca9XS $a(5D*0gk*Y!f=|yS?C{2o#0MbDP zL8S>uhtR=5009+43xUw2B!m`fcK+X5-&$+mor`mG&ffDPzhwSK#+>gMW4_}Z&-*-M z3evY_?nfn!w?#&jdQpI?U|_F_*^K8bPB=k_%453zCpV97FiX*!04RH(NEgjOalm {U>Tat>h{ zm-9t5x_FzrfPL4e>WYtH%H+Rd$bZ&ZY1yu(>Ee_qYnk-;ULKaJ %=x z(FTi_c=Qi<7o*~2_62uB@8)xeTXBI*@DJ@_X>EJ_AxAgg%b ZbZiH>t;cax2@V`O@V@X7d8sqH zsgbpURTiJ5uvT2eUVmqxjJy?!=^>PkQE;?w)2_c>C|ou1E}v=c?ljAzFP2CT`*J6Q zj?g47CW~IfGpQ^WQGAO6 VmOk8oH!(+3Eo=m0X3#VEDk%*{bMtDeIHPu=Qs{< zRK%pc+0jO0$08;uE2+tg5=2}S7SyJR7*5}!0W)oI4$p`*h+sF7O({8Ox@}g`Xi37& z_%JL@(6|;8lt0-28i(s3vuHk($7}Y%=X{`cK;+T>FJU^DQ%(`!h0+-mq#e~*(AY 6WiFAP(*Q4bY#pC8@9ycD>_!2UwhQtvh;3DEIo z |^e6nll zY15msQ%q^)&(Cu^*ijc=2XW$)dCQa5# G%6FakQ=N!G{6Tax1+&C*vfwU|VDNAfIZOU#FR^x52L&te3GivSqUlbiA zB|rX;ppRC5^ByiiD(~e#M6=i5GfJ;zQvUYe$E|;S=>Isrr~Z?u{U3)Ch(b>L9|c~s z#Q$^2|8e}^D*n4M{-3qQcd`q j63NJ)KWr}DxFkxY%bXpJJ3V{k{>OiR_Bh`^-G-s9W2Jet zISjIo+R(0Z`Hjl87LVr8Wf1-M$7?U$LAC$-^`GZk7^N5gUEtqES0zf4D3JO8R`f$& zs?y#6{gm$icPbRR6rzDlG(4+#^HtN}Ptm^KT p%LTS5mYYkwv{b;bo0G=I4-oMrQ>$A9!_oTagpS z{` F=0o+% N~-Lu+m-FDHjDPqB17iFT0ix6zuRd*S(8<7;@y&Nj|RYKNW5$3nGiRy=jXz%K&0 z6{e|R$B2AEb;5VUdad D$WC%s44xZ_6;%Nd&GF-T1<;>ki?h;iCz; z A zNM9& `q_>PH-R=A y@<9Pc{s%=Z-=qZDR!cdxrG+%Ul$>HK`xR=Jnrm^2=!?2c7 z+j!F3H$hXD&}}W_7kfDhPY} Tpqnw4qUP6os?Y2tK>RBalL3680~VSL!L7n znbdF^3SLe)(ln67uZws-8uHdYE`7VPiML@;yhTuh4)oXpBiV(4;!~$fEg#x9?tF-_ z@d{n)3`TtX(1CxTqwn|R?r}&M@=mXe+_<4%Uv~j&`r4i;Wq_d#<$v}@NWf+4^9EL# zv)&vi&ib2iVwiU8j;E3p2A$mCJAn&@eWB&DVjV-jk*S~+@n#dNwh8mLS tC7BHTzaj z;CVdty4oR0`tjyQ#d;7p(7W_?qLMuvhOnL9lRtWu`6uyr+UgFgXG*c*$a%~otG8ps z?Kc6X9XZXj+aE|9V$S)L?uF#D&07L=j#o85L*p6K9pF%^&S{@kJU*>06Srdg1TUtZ zjBC8Ipnm0KtDKOR0(0FqY&qSv3^~$3(gSVu^NfIZ8uSegGemO*9;Vkqu6n&Pgay-e z`U7*KAtAVx_f6h~vL{Q}1~H_a5%}D^9H2lQoQ`vtLPkilhw0}>xt|;`k|UhG>Y}Hg zDF!#QbZP>H^n{DZI>W%LDd)RS%&-vi{=U|{8^jQ}&SpuZjtJ5M>wHyd99D#DM~z4& zAtQaIP=Ti!M3}j>1Lm^2U?(jgK93L3RYz aOVzk_(6ZsamBo4QVq9 Jv>Ri;!6Y;7pK(crm25EszK>^uPk3aR3!!NT{#Iy+#)`P_<8c4t-gLXBvnR_#Sq;= zMWW3v(Rp#W%h-c}wlW#(_s}x4LGnx74x#0kJ8}}c6w0Wq4#y>rjg;&tDI}k4oIi`} z-}B{JtGG!l0vQ0o{PsZu=~}Ox;&$|n*gm9u#v~F(yQaqtj9|rr2qD9&i-%zaIO^+9 z#?_X(z66Rh2VI1|ywh@bsa0>efdjeoXf{xISY<`l5GMb(x5@QjS>~|%7E$;cdcQtx zE*FGPCKbM%M6RrPes#v~CmnsYQahC;s%gxOvK+jqJ*ayeNTvoUL{3g*0c~`SEJ!Zv zy7_cm#cs{K9btQM0svnM5l8;2^HHE8S=hqF#}Sov_zxNTte=yN&a!dJgu~b@ASqF) z@`2abN}zD;(0#M6Ay-;tc+TGT{kMyN2hZJs+qoU1-H+Oie`2)g$+zbuLo|_)(i )Ny42QrQqcL&2F9+Q~BHw2khPy=swp<>RY+qpJl{?(z z-jXw=OPh(t;TXu=cH7sYalJlauh6s+48EX{hth?aMhGrg$^`ulvZ#8D{Jj+Rj*z;r zGcGT35+-HgRI5OH`eS9``;3&Lf$*$J5?Sd)VPpov*tq>qpcIdb2@pL%5GZ}L@Ue-F ztpmxq#d73$WqVX*XQl}JM- WhSunoze`+3dF$DVWcM9Z6Y}ne=oRW0 zWj|X+JeFopH$oWko%q9qwmZ&GD)jGld1_^i@l>txdtDCE2v?HYUK!WUi#-Yl;L3U z&h~}G+FaE5pkB+X#0pZsOyLrNAx!hMH8dAjw6=75*YwCe_V^FefiG6I5WI@WwkMy@ zdb@S_u*m`b@xZZdI%Of0rOt@$2o!i!I50Ndwo~^_2h{9U?!u?b&2r(|^I~4& C0&aXLX?ldSh`BC96VV9Rl%_PvatL`<0a8*dl4 zeET$vOLw(%N5;o+nRW#PyvngfZU!T+{w`p2o}gKQD|9l2LzTK`1-2zr iXG3r7|R$6WeirIq+VSU9T=!BD}lNA^MOp5rzlD%iwMD zbCO19d2iCc`;QI124OCR@Pv JwBMQ71IxDb#KpOw#e!5P8yBVt$*)F4gPiH0@i5ek>`Xu8Fg*Vaaj_i~ z!Lf8T9%m~1SJnE8Kkrg~fNjx;t_n %^UT!sqs(#Tj>>hbbhv z!1C;4-B`3@aQnM8Tx-r5L(xk$3;Db8dl>_*tDC=#(K~JZAMECm-Vl#&`L;WgM1;1= zGRD#HGt)FMop$0}e`&+EhDx$$MA1hwOM69JZH?UQmyFwA+?&P7Bp*%DsyBT>&EBT7 zBmPn~@Ug z^ocFnFXu!GdOnCmWW9gQ)NyS@kk8F5i}4}vrrqCa3(W(M`z2as3y2;i^6}!C&7<#X zs!AEbAglPcQpD<7)7^x?Vwpxm@|;M?foh72o5|BBV%ORmdl^E*o8#x$O4~Ya`9+x{ zCIr!5zS@$Bp%2xozdt>5ibKgEX;;ifkNGIR3Y-Rgo9XM@9%O6g>;?>nI?ueso@vz? z6>|i@&cmwH^JQi_1icjMeD8Hg2}rXSDli;~eA~8lyAg2@8NO`-Oo{p9-z70Wkv44- z8Sdw?ih9KI;rnxE!8I8kKGX@^-17?3*+$!-FMQ%dlDOTUIklbjTMmi_N0(GtIgV?y z1s`{0^#8_!<3Gli=4yq@b$9f7{1R)oFEMHo{TOza`2dqO(~+t@6neR%Z hwtCQNomY>%sK+I*LKqJ!yEoI!wP^krhI|k=HSt9E z*9jK(`SS>@58jcb%Q%cIxyv79-Q+OPkAEQn?_lis?2(T$9#k8je)BR1^H`Q{B+Pm1 zGn>}EJ7w&Nj193t3em13F8BCV1?;?@e#>drdhj`^*o^LD{0gSVH|YCQSqUur;EXp@ zqxPLc_3Orqhj2^+_KbQuJJLxp{(w_}&w)R@QFtx=p}#XsD8o0PF2tg{eWqHrSJ%k0 z5NgWx-D1seBj5T+G7dBCF(G>mi678z%$zx{dDP~op*- #frcdQM+pk1f5H9zLdJ<-@8|rq zqcllJrm1p=LT#Fka-h)Ix?Sj7<2!DuQj6W5b-U1yU!%HDodYw5MwvRu-wsjbkdRYz zq(at^nZn`aDf9lAV-4*79qG0jQp1+xVz4`; hd^oz-IC4*bgOpx;&p4^b3zt zk|+AxHL~|NPmn%xzEi9HZM6a&W79l41@ma#38CnT)$8uhW1-*fp`s zG#@+}voApQ&;IhS&1OEdT0>-v__KVp-!Fu>`M4}2%$lxCy)WZYkq4_~p!2DjL$Km1 z`*H4Z(+0A`G-J~vAimRDT-M)F#N`9i?(p-JEx%wxU+?V;=QOVjHXWe dumQg fqkaC_;r-&Cs1meck`5s87^ SW&AqV>!#~SbF`^+sAm53K0uHoOEV8WWQ|~)Px0Xr z9Rf(c!Kd_{ae(EsV(Y?TrHFUiHU&bRR#*wWsobB8VA`)%pR2TJ=3h5yQ4A8B9i__V z@hV)696!+D@8k!-uOh;PP !Y|>jIHUGdzKwg!K7+jUzB5tA|9wjI`l227|GK&jq|{kM;QQm%U#p5F6U`5ppm_` zPFLFL94R^MQIa#uvt>ZN%0ADctSPB*u*zqaGz2XRh1Zj9z9fb?1Ye$d#uIF(B`;#E z2Nj=JlDg**YmklRfv8At<*>}NV;e6r$J`O&UiuaRRh2Fn17PD2SXtI0YU3F{618RU zBzM;c=uoNi#U5}*ezS0DUNfxAv4ve|WBb-h )1uS`@N(zbCN2MuUZhI!8iA| zVj#Knuz~g}d*qWP?`Gw1qLW3*%YNFccZQ4s4=RN?(>sfPfEv@>eu40_zP8OU7H}Z_ z#c2dYkZs c&_X>9J7f!j?k61vKFhXF-i4nh0Lo!1 ztuA8FitCJ>x{3o61uRrP4}K2xj`^ggh2PKiJ$EvDaL%VR=ejK6b%S#KT7+Xv^KT}) z?v50Sx^vAOsz7a+FwlZuB$*#;Gj_rV`%hj3hr5ruJVgAP3(#-9-Abcb$d{Y(hVSj* zu7|Rw*p#Rujp)DdlDE;FP4qK}!vw-hYh^m>Y#P{dmmOt|=2fY1`=SM4E8umAyO%p} zmX1GczT`l6RW(u*wNc3%qWd;$XjNu~PU7VxYUE!^(=>?#8u@u@aPzhLZZe9gF<)~q z{gH3Mh*x&`qTKB5xJ)ZW4m0Z6zgU%vu;p73z`>7EeH+;mSI9s%8VUJ*Cyfy>y1!@I zqF!40)SL;TGKgZ6F(dutq+Wdt* 0D!-}Icew_Cr~Xr{mhC`!qhyD ziPZimp)g?~xmDp)p5QIlbbb$c!B&N1>E4;8j-IdOz+~ *Su}l>F?Win`_q3Vf~3I~z@0dil`g4tunj7R|3coSU+M1=fB~-ePtx&a2Sr-W7M{ zuo=|ZyDm7#2ObL1BOxBq@zv>0?W^iueBbr(6;pyg4nmVUqGo(2>87kns~o+fb(6UQ z()bYl4jEwGnvkKFS)s^tL#eAN6y3qS&!lWKfC@y-u4$UQ)vw|BR8`$kEH<)D@VARx z%W54z?$9b?8NI+(bb^mc6&?0?mE$QKZqd_wEu3%oij)LtI!7 n^087t3 znCWc&D9Z4Ki$aUrTD5aHHhqk*;hLNXmi!b_o@b5raC2yhpGfKcyjg277I6?`_LoL} zV3^9PH{j7#C&+=QX3rOa=8pL3cAmxL``eoAr3Ii?4<5fm)v{aiIs>TRDs}CC2dP6= zH{6@sWDFO-tq*%R=?m+;Qs|}Dt&-a=IsEWCzs*)-<49LuJsW)nX-LQ^D4;LFUwh1@ zf2^#H7n4TIfAiqH(N6^|E7j46o2h1_TObWD> 0 hb=D#r9Oe|S#i6A0^oh103&V_Wls@PMnELQFqOdTq+| zdAA~UR%X6)2W?jv@vAoJ3qGZLzZr#(;n0OPDAr}Iy1Xc0a*Tjy <*syyy)&or#tK zSn54^yjhJ1H|pVW8Z&9Q*h@SEkMFIm?s|+j~_u z&|T=8Fc+g%euqyvuW4+X3NMCOvmqX RKJrN9^@H=^npWzW!9EUv{OaIk>j35$M4^4eOulGPV9_60Ce%6zb@JW&>Gsaw zxyVeStk$e`#=-SNz{U8jM*D5u7#s82q$ 5&a}tz7w$D_M9w_39e_7m?@tJUK4hkv7Tq%l`|6Z%?HPh(dV2qhfx={c#P!9W zTkmFlC!b0kky~mO9>5j4*GYqbu&X3ZO?ll62De;M{`VK{PaCT{n3aU e{wT^FXe=CB)(FR!WIk)Z5ixC0^eN8UC;s>uJ z-sze_m8PDE{FMv>SNJL@(_geISwYz>+Lxjo{|@ICghw)G+z_qkLB;k)65|L#ssQ+9 zBX6X*Q6Y Vlj^~iZ8#Ne*JAO5anJhdez4NV; zic{#KzjCYA`-LPRFgD8d=e)hjWU>D>3)J06_TFXp^K_ueNcJ=TboFQRgG=uLSk%$O zPo5n^Qj6O268?=*Iy-_u;Oh=mLoe?fw@0GUpSn>JsWU=|rYHVQPZv-8njU@2nA#@4 zM+ljv-#m;Se@KWg9Ul9XBtVU^z5(RvUCiq`M!RdMORMtq$;T)OIlZ|ec8cj4b}h5> zvA}AMY{gbvlJ(Q2T3S-%CPt3UAnZDCS&gb#G4Iogc(g8hfxV<6F(2+Nyf|m-+|AT@ z?!L+62q0qRA*iq4HqvYgKEpM~=f#d^UP&T1(i0%xry3gueN3JfF=k1c+e>syBI3Fw z$Ac;m0ymDGi=2*w@}k!=be~^zgDe$qotp89W|38JMEv{5^5pk9c8^68xiEhjfqngY zTd)jM`pV|Gb>BVX9KpV-Z?#%%0r&Y+^XU=(*K~Te!-2*gOke-Dsy0Zu+Y@j3p-AW` zLMj6tt&q`niFmNShMK7NL5GKs?!G$)pnP-tc2hiw<4;|%`k&se<6{*_wqF-4JEzlH z#ZLl#mi}mb+;)d~YkE4A7x?aU1uc}4{_>tl=o9j P3QDbG3! ze$&{F2@Ugb8Jmx5H+EHBI)i*m&miY* 3ED%li<&`+u#b)Qk2#n%e4kkRea` zBBmaO25M?%^d-H_@TI^gQxX#BgUGz+)>K}}Rd?Q*q=U_Jtuq-@TS$_ aP3BZxytwjb`hz<8#)ys0wi3ggwOPGS!c|ShJ7S6Idi}J*&a#o zA*{d&1SM7`)PBy_psGWwi!-NfSSf#g%hm={3%XXff?cT)ya>6}K@$<=-bp_<`d&?^ zL>dyP9GTbCJAWi)xhPLNZw@!Ezh6b)GYZRQY24JIh25s4ziud*j_g$;+J_9I%BGZg zyQ7gCK2O?b?V`22zLVM~Q7Z1dR|io2 $MV_ zs#6`8N7qU(AI5g>s?vHMJY;_aY(<}Qm3LUyma~Dsy36@33~2ZU|GWaxa|k{cDYLqw z{1M?}L+agS1+A2$oiqHYp>dtGq^-(nDy?i2Vw#ppx2ZQ;QvK<+#FNs20Nd8xDZTQX zS?c+>aN9GX;P&Qd+&ILtnMP*O5zvVnT8fBPs6{Oiiwv4th+i&_2JEAH-zupm*qJ@_ zG_%U=>LY~e(4EO|(Geb942scZ%to{vpNCf1O3IWKU$`)-*;APgz~1iF`y7%B2;}|U zWh6=>O^e;09l@T}o{k*snz-mKmcGuX*KSKbX0YEA?7^-KN3d0~*a;zIcG<17C+Bwr z!l|G=waPzB(`tPB9z_7tkNRo=yYGgits%<7OhK+&Vmzqb&<=p_Gg{Do#6u;14qdph zUD>D+OADOQI$AaP;a!`MTlDGm{BQ&PrZ1tHBSn?Z#V61)a&p9Mv?08)d#T1dU5g&^ z&i_heglfAr>fS2qA1+OS7~NC){w0O^^lfMOkCrQoGcT1ulVZ&>$h|xERs(p5lqE|k z @b8$=lj$gL^vKZyDJfP1B`#5<6S^d