Principle 1: Hierarchy Guides Action

Every screen should have one primary action. Everything else is secondary.

In practice:
- One primary CTA button per screen (solid, brand colour, full-width on mobile)
- Secondary actions use outlined or ghost buttons, visually subordinate
- Destructive actions (delete, cancel) are red and placed away from primary CTAs

Common mistake: giving "Save" and "Cancel" the same visual weight. The user's eye doesn't know where to go. Make "Save" primary, "Cancel" a text link.

In WeWeb: apply your design tokens consistently. Primary button = brand colour fill. Secondary button = transparent fill + brand colour border. Tertiary = text only. Never deviate.

Visual hierarchy extends beyond buttons. Every element on the screen competes for attention, and attention is finite. Typography size, colour contrast, white space, and positional weight all signal importance. Train yourself to look at any screen and identify immediately what the user's eye goes to first, second, and third. If the sequence doesn't match the actions you want the user to take in that order, something in the hierarchy needs to change.

Principle 2: Friction-Free Onboarding

The first 5 minutes after signup determine whether a user activates. Every step that isn't essential is friction.

Optimal onboarding flow:
1. Email + password only at signup (no phone number, no name yet)
2. One-screen setup wizard: 3 questions max, progress indicator visible
3. Land on a pre-populated dashboard, not a blank state
4. First "win" within 60 seconds: something the user can see, click, or do immediately

In FlutterFlow: use a conditional on app launch. If `onboarding_complete = false`, navigate to the onboarding flow. Set `onboarding_complete = true` in Supabase when they finish step 3.

Blank states are conversion killers. Pre-populate with sample data or an example so the user sees value before they've entered any real data.

Measure your onboarding completion rate ruthlessly. If you use PostHog, define an onboarding funnel with events at each step (step_1_completed, step_2_completed, activation_achieved). The drop-off report shows you exactly which step loses users. Most SaaS products lose 40–60% of new signups before activation, often because the onboarding requires information the user doesn't have ready, or because the first screen after signup is a blank, empty state that doesn't demonstrate value.

Principle 3: Copy Is Design

The words on your interface are as important as the layout. Bad copy costs conversions even on a beautiful design.

High-impact copy changes:
- Button copy: action verb + outcome. "Save" → "Save changes". "Submit" → "Create my account". "Get started" → "Start free trial".
- Error messages: specific and helpful. "Invalid email" → "Check the email format, it should look like name@company.com".
- Empty states: tell the user what to do, not what's missing. "No projects yet" → "Create your first project, it takes 2 minutes".
- Tooltips: explain the why, not the what. "Click to export" → "Export as CSV for Excel or Google Sheets".

Audit every string in your app. Fix the 10 worst ones and watch your support tickets drop.

The most neglected copy in no-code apps is error messages. Developers (and no-code builders) write error messages for themselves, they understand what "Error: 422 Unprocessable Entity" means. Users do not. Every error message should tell the user what went wrong in plain language, and ideally what to do about it. In WeWeb and FlutterFlow, error handling is implemented in Actions, replace the default error display with a custom message component that shows a human-readable description based on the error type.

Principle 4: Trust Signals Inside the App

Trust-building doesn't stop at the landing page. Inside the app, users need reassurance that their data is safe and their work is saved.

Trust signals inside no-code apps:
- Autosave indicator: "All changes saved" in the top bar, users shouldn't fear losing work
- Security badges on sensitive screens (payment, personal data): "256-bit SSL encryption", "SOC 2 compliant"
- Data attribution: show where data comes from ("Synced from Salesforce, updated 3 min ago")
- Transparent billing: in-app usage meter showing plan limits before the user hits them

In WeWeb: implement an autosave indicator with a WeWeb variable (saveStatus: "saving" | "saved" | "error") and a small status chip in the navigation bar.

Plan limit transparency is an underused conversion driver for SaaS. Show users how close they are to their plan limits, storage used, API calls made, team seats taken, proactively, not reactively. A user who can see they are at 80% of their plan limit is far more receptive to an upgrade prompt than a user who hits the limit unexpectedly and faces an error state. Build the usage meter into the navigation sidebar on the plan limit's most relevant screen: showing storage usage on the file upload screen, API call count on the integration settings screen, and so on.

Principle 5: Mobile Is a First-Class Screen

For B2C apps and mobile-first SaaS, 60–80% of usage happens on mobile. For internal tools and B2B SaaS, it's still 30–40%, higher than most teams assume.

Mobile-specific design rules:
- Tap targets minimum 48×48px (thumbs are not mouse cursors)
- Bottom navigation for primary app navigation (thumb zone)
- Avoid hover states as the only way to reveal information
- Forms: use the right keyboard type (email input type="email", phone type="tel")
- Tables: don't try to make data tables work on mobile, convert them to card lists instead

In FlutterFlow: build your mobile layout first in 375px width, then adapt for tablet and web. FlutterFlow's responsive widget tree makes this straightforward if you start mobile-first, retrofitting is significantly harder.

Test on real devices across operating systems. Chrome's mobile device simulator and FlutterFlow's preview mode are useful for rapid iteration, but they do not replicate real-device behaviour precisely. Scroll inertia, keyboard appearance behaviour, and safe area handling (the iPhone notch and home indicator) all behave differently on physical hardware. Book a monthly testing session where you test the current build on an iPhone, a high-end Android, and a mid-range Android. These three devices cover the majority of your user base.

Reducing Friction in Forms

Forms are where the highest percentage of conversion attempts fail. A user who reaches a form has already decided to try your product, form friction turns an intent into an abandonment. Every design and UX decision in your forms should be evaluated against one question: does this reduce or increase the chance that a motivated user completes the form?

Field count is the biggest friction lever. For each required field, ask: what do we lose if we don't collect this at this step? For most first-touch forms, the answer is "nothing critical" for everything beyond email. Phone number, company size, use case, and job title can all be collected post-signup in an onboarding flow where the user has more context about why you're asking. Reduce your form to its minimum viable field set and measure the conversion rate change, it is almost always positive.

Inline validation, showing field-level error messages as the user types, consistently outperforms submit-time validation for conversion. When a user submits a form with 5 fields and gets 3 error messages at once, they often abandon the form entirely. When each field validates as they move to the next one, errors are caught and corrected in real time without the psychological discouragement of a failed submit. In WeWeb, implement inline validation by triggering a validation Action on each field's blur event, not on the form submit event.

Microcopy That Builds Trust

Microcopy refers to the small text elements scattered throughout an interface, field labels, placeholder text, help text, button labels, confirmation messages, and error states. Despite their size, these elements have an outsized impact on conversion because they answer the user's questions at the exact moment they are hesitating.

Below-field reassurances eliminate hesitation at the most critical conversion moments. Under an email field: "We'll never share your email. Unsubscribe any time." Under a credit card field: "Secured by Stripe. We never store card details." Under a phone field: "Optional. Used only for urgent account notifications." Each of these adds 5–10 words to the form but addresses a specific objection that would otherwise cause abandonment. The cost is negligible; the conversion benefit is measurable.

Confirmation messages after key actions are another high-impact microcopy surface. "Your account is ready, check your email for the verification link" is significantly better than "Account created successfully" because it tells the user what to do next. "Your payment of €49 has been received. Your invoice is on its way to name@email.com" is better than "Payment successful" because it provides specific confirmation details that build trust. In WeWeb and FlutterFlow, confirmation messages are displayed in Action sequences after a successful API call, take the extra 5 minutes to write them properly.

Exit-Intent Strategies

Exit intent, detecting when a visitor is about to leave the page and showing an intervention, is one of the highest-ROI tactics for landing pages targeting cold traffic. A visitor who has read 80% of your landing page but not converted is demonstrably interested. An exit-intent popup that addresses their primary objection can convert 5–10% of those abandoning visitors.

The most effective exit-intent interventions are specific, not generic. A generic "Sign up for our newsletter" popup on exit is ignored. A popup that says "Wait, most teams that try us start with this template. See it free." addresses the specific hesitation (not knowing how to start) with a specific offer (a template). The more specific your exit intervention to the page the visitor was reading, the higher the conversion rate.

In WeWeb, implement exit intent with a JavaScript event listener on the mouseleave event for the document element, this fires when the user's cursor moves above the browser chrome (toward the back button or address bar). Trigger a WeWeb variable change (showExitPopup: true) which makes a modal visible. The modal should have a clear close button, a single compelling offer, and a CTA that is different from the main page CTA. Do not show the same offer they already declined. For mobile, use a time-delayed popup (30–45 seconds on page) instead of mouseleave, since mobile users have no mouse to move.

Mobile Conversion Optimisation

Mobile conversion rates for SaaS landing pages are typically 40–60% lower than desktop, not because mobile users are less interested, but because most landing pages are designed and optimised for desktop first. Closing this gap is one of the highest-ROI activities for any SaaS with significant mobile traffic.

The biggest mobile conversion killers are form length, tap target size, and page speed. On mobile, every extra form field is proportionally more painful than on desktop because typing is slower and more error-prone. The mobile form should have fewer fields than the desktop version, or ideally, the same minimal set. Tap targets smaller than 44px are the mobile equivalent of hiding the button: they are clickable but frustrating, and frustration causes abandonment. In WeWeb, set all button heights to a minimum of 48px via your design tokens so the constraint is enforced globally.

Page speed has a disproportionate effect on mobile conversion because mobile networks are less reliable and slower than broadband. A page that loads in 1.5 seconds on desktop may load in 4 seconds on a 4G connection with moderate congestion. Run your Lighthouse audit in mobile mode (it uses simulated mobile network throttling), you may find your mobile score is significantly worse than your desktop score. Address the mobile-specific failures first: unoptimised images are almost always the primary culprit, followed by render-blocking third-party scripts.