50 best practices for building full-stack apps with Softr
.avif)
We've compiled a solid list of 50 best practices to help you build better Softr apps. These tips are based on the real-world methodologies we demonstrated in our recent content, including the AI CRM tutorial, the Vendor Portal build, our live strategy sessions, and our AI Co-Builder live demo with the Softr co-founders.
If 2025 was the year of shiny demos, 2026 is the shift from prototypes to business software that teams actually rely on. Most non-technical users don't want to architect authentication systems from scratch — they just want a login for their app. These practices are built for that second phase: software that works, ships fast, and doesn't need a developer to maintain.
Softr now gives you three ways to build the same app: the AI Co-Builder for speed, visual editing for precision, and the Vibe Coding block for the custom 20%. Every best practice below applies to all three. The AI Co-Builder uses the exact same configurations the visual editor exposes, which means anything you can configure manually, you can also describe to the AI, and vice versa. The art is knowing which mode is faster for a given task. Where prompting genuinely beats clicking, we've added a short AI shortcut note inside the tip.
Let's dive in!
I. Strategy & data structure
1. Map your database objects before building
- One-liner: Map out your database tables (objects) and their relationships clearly before opening the Softr Studio to build.
- Core principle: Success in Softr is 80% data structure; treating data as relational "Objects" (Entities) rather than flat spreadsheets is the foundation of a scalable application.
- Deep dive and benefits: Imagine building a Vendor Portal. Instead of creating one giant spreadsheet, you should identify the distinct "Nouns" involved: Users, Vendors, Tasks, and Invoices. These should be separate tables. If you try to jam disparate data into one table (e.g., putting Invoice amounts inside a generic "Documents" table), you lose the ability to perform calculations or specific workflows later. Planning this structure beforehand makes your app "AI-Ready" because the data is organized in a way AI can easily read and summarize.
- How to implement:
- Visualize your entities on paper (e.g., "Users," "Companies," "Deals").
- Draw lines to define relationships (e.g., One Company -> Many Deals).
- Create a unique Table for each entity in Softr Data Sources.
- Create "Linked Record" fields immediately to physically establish these connections.
- AI shortcut: Once you've mapped the entities, hand the list to the AI Co-Builder ("Build a Vendor Portal with tables for Users, Vendors, Tasks, and Invoices, with appropriate relationships"). Per Mariam Hakobyan, co-founder and CEO of Softr: "If you use the AI Co-Builder to generate the database, you can trust that you are in the top 10% of database design already." One thing worth observing live: the Co-Builder generates the database before any UI — you'll watch your schema get built first. That's exactly why a well-planned structure matters, so you're not backtracking on the foundation once pages start appearing.
2. Use a single table for all user types
- One-liner: Keep all app users (Admins, Vendors, Sales Reps) in a single database table distinguished by a "Role" field.
- Core principle: Centralized authentication simplifies permission management and prevents data fragmentation.
- Deep dive and benefits: It is often tempting to create separate tables for "Admins" and "Clients." However, keeping everyone in one
Userstable allows you to map the Softr User System to a single source. This simplifies management significantly: promoting a standard user to a Manager becomes as simple as changing a dropdown value from "Standard" to "Manager," rather than migrating data between different tables. - How to implement:
- Create one
Userstable. - Add a Single Select field named
Role(orAccount Type). - Add options like "Admin," "Vendor," "Sales Rep."
- Sync this single table to the Softr User System in the "Users" tab.
- Create one
3. Use email as the primary field for the users table
- One-liner: Always use the Email field as the primary unique identifier for your Users table to avoid ambiguity in linking and filtering.
- Core principle: Uniqueness is non-negotiable for system reliability; names are rarely unique, but emails are always distinct.
- Deep dive and benefits: In Softr, the Primary Column of a table is what users see when selecting a record in a dropdown (e.g., assigning a task). If your Primary Column is "First Name," your dropdown will just show "Thomas," "Thomas," and "Thomas." You won't know which one is the right Thomas. By using Email as the primary field, you ensure clarity in selection (
thomas.b@acme.comvsthomas.k@acme.com). Furthermore, this prevents critical data leaks in filters: filtering tasks by "First Name" could accidentally display tasks belonging to all users named Thomas, whereas filtering by Email guarantees isolation to the specific individual. - How to implement:
- In your
Userstable, set the very first column (Primary Field) toEmail. - Ensure the field type is set to
Emailfor validation. - When syncing users in Softr Studio, map the
Email IDfield to this specific column.
- In your
4. Separate distinct objects into different tables
- One-liner: Create separate tables for distinct entities (e.g., Invoices vs. Documents) rather than merging them into one generic table.
- Core principle: Data segregation allows for specific properties and distinct behaviors/workflows for different types of items.
- Deep dive and benefits: Consider a scenario where you have Invoices and generic Documents (like contracts). It is better to create a specific "Invoices" table because Invoices need unique fields like "Amount," "Currency," and "Payment Status," which a standard PDF contract does not. Separating them allows you to build specific charts (e.g., "Total Outstanding Amount") that would be messy or impossible in a merged "All Files" table.
- How to implement:
- Ask: "Does this item have unique fields that other items don't?"
- If yes, create a new Table (e.g.,
Invoices). - Define the specific fields (Amount, Due Date) for that table.
- Link it back to the parent entity (e.g., Link
InvoicestoVendors).
5. Include a record ID field for absolute references
- One-liner: Include a "Record ID" field in your database tables to ensure every row has a permanent, machine-readable reference.
- Core principle: Absolute references are required for reliable automation and complex workflows.
- Deep dive and benefits: While emails work for users, other objects (like Tasks or Deals) need a unique ID. If you reference a task by its name, and someone renames it, your automations will break. A Record ID never changes. For example, if you have a "Summarize Deal" button, the button sends the Record ID to the workflow so the system knows exactly which row to summarize without ambiguity.
- How to implement:
- In your Softr Database table, add a new field.
- Select the field type
Record ID. - Use this field whenever you need to pass a specific record to a Workflow or API.
6. Use linked records instead of text for relationships
- One-liner: Use Linked Records (Relations) to connect tables rather than text fields to ensure data integrity and scalability.
- Core principle: Relational databases rely on "pointers" to other data, not copy-pasted text, to ensure updates propagate automatically.
- Deep dive and benefits: If you link a User to a Company using a relationship field, the data is dynamically connected. If the Company changes its name from "Acme Inc" to "Acme Corp," every User record linked to it updates automatically. If you had just typed "Acme Inc" into a text field for each user, you would have to manually update every single user record when the name changed.
- How to implement:
- In Softr Database, choose the field type
Linked Record(orRelation). - Select the target table (e.g., Link
TaskstoUsers). - Configure whether it allows "One" or "Many" links (e.g., A task has one owner).
- In Softr Database, choose the field type
7. Identify painful spreadsheet processes to replace first
- One-liner: Start your building journey by identifying spreadsheets that are difficult to maintain or access on mobile.
- Core principle: The best return on investment for internal tools comes from replacing fragile manual processes.
- Deep dive and benefits: The ideal candidates for apps are processes where teams are losing time maintaining massive shared spreadsheets, struggling with version control, or cannot access data while in the field. Solving a specific pain point (like "Delivery managers can't log inventory on their phone") ensures high adoption because it solves an immediate, tangible problem.
- How to implement:
- Audit your business for "Master Spreadsheets" that are shared by too many people.
- Look for workflows where people text/email data to be entered manually.
- Build your first app specifically to solve that bottleneck.
II. Database logic & enrichment (AI)
8. Use database AI agents to classify records automatically
- One-liner: Use Database AI Agents to automatically categorize records based on descriptions, removing manual tagging effort.
- Core principle: Automating data entry at the database level ensures data consistency and saves user time.
- Deep dive and benefits: For example, you can set up an AI Agent to look at a "Vendor Description" text field and automatically fill the "Category" field based on keywords it finds. This ensures that even if a human forgets to tag a vendor as "Software" or "Logistics," the database self-corrects. It keeps reports accurate without relying on strict manual discipline.
- How to implement:
- In Softr Database, add a field and select
AI Agent. - Choose the
ClassifyorTagoption. - Reference the source field (e.g.,
@Description) in the prompt. - Set the trigger to run "On Record Creation" or "On Update."
- In Softr Database, add a field and select
- AI shortcut: The database AI Co-Builder can now create the agent itself, not just configure the field: "Add an AI Agent on the Vendors table that classifies each vendor into Software, Logistics, or Services based on the Description field."
9. Use database AI agents to enrich data via web search
- One-liner: Use AI Agents with Web Search enabled to automatically fill missing public data like logos, industry, or employee counts.
- Core principle: Enriched data improves decision-making; automation makes enrichment free and instant.
- Deep dive and benefits: Consider a "Demo Request" form that asks only for an email address. You can use an AI field that takes the domain from that email, browses the web, and automatically finds the company logo, employee count, and industry summary. This keeps your forms short (increasing conversion) while still giving your sales team a fully populated record to work with.
- How to implement:
- Enable
Web Searchin the AI Agent field settings. - Write a prompt: "Find the logo and employee count for the company at this URL: @Website."
- Map the output to the respective fields in your table.
- Enable
- AI shortcut: Prompt the database Co-Builder to scaffold the enrichment in one go: "Add an AI Agent with web search enabled that enriches the Companies table with logo, employee count, and industry, based on the Website field."
10. Use roll-up fields to calculate stats on parent records
- One-liner: Use Roll-up fields to count or aggregate related data directly on the parent record.
- Core principle: Pre-calculating stats in the database is faster and easier than trying to filter and count on the frontend interface.
- Deep dive and benefits: If you want to display a badge saying "3 Open Tasks" on a Vendor's card, it is inefficient to query the tasks table every time. Instead, use a Roll-up on the Vendor table to count the linked tasks where status is "Open." Now the Vendor record itself "knows" how many tasks it has, making display instant and simple.
- How to implement:
- Create a
Roll-upfield in the parent table (e.g., Vendors). - Select the Relation (e.g.,
Tasks). - Choose the Function (e.g.,
Count) and apply filters (e.g., where Status is not "Done").
- Create a
- AI shortcut: "Add a rollup on Vendors that counts the related Tasks where Status is not Done." The database Co-Builder picks the right relation and function automatically.
11. Use formulas to create standardized record titles
- One-liner: Use formulas to create standardized record titles by combining multiple data points.
- Core principle: Standardized naming conventions improve searchability and readability in lists.
- Deep dive and benefits: Sometimes a record doesn't have a natural name. For example, an interaction log might just be a date and a note. You can use a formula to combine "Direction + Type + Contact Name" (e.g., "Outbound - Email - John Doe"). This automatically generates a clear, readable title for every interaction in a timeline without the user having to manually type a subject line.
- How to implement:
- Create a
Formulafield. - Use the
CONCATENATEfunction or simple addition syntax. - Combine fields:
Direction & " - " & Type & " - " & Contact Name.
- Create a
- AI shortcut: Describe the desired title pattern: "Create a formula primary field on Interactions that combines Direction, Type, and Contact Name, separated by hyphens." The Co-Builder writes the formula and sets it as primary.
12. Use native field types like email and phone for validation
- One-liner: Use specific field types (Email, URL, Phone) rather than generic text fields to enforce data validation at the database level.
- Core principle: Clean input data prevents broken links and communication errors later in the workflow.
- Deep dive and benefits: Using specific field types ensures functionality works as expected. If you use a
Phonefield type, mobile devices will automatically prompt to dial when the number is clicked. If you use aURLfield, it will open as a link. This also prevents users from typing text like "N/A" into an email field, which would otherwise break your automated email workflows. - How to implement:
- When creating a column, scroll past "Short Text."
- Select the specific type:
Email,Phone,URL,Currency. - Softr's forms will now automatically validate user input against these formats.
13. Distinguish between database agents and workflows
- One-liner: Use Database Agents for fast, row-level data cleaning/transformation, and reserve Workflows for complex multi-step logic.
- Core principle: Efficient architecture uses the lightest tool for the job; Agents are for data states, Workflows are for actions.
- Deep dive and benefits: It is important to choose the right tool. If you just need to format a phone number or tag a company industry based on a description, use a Database Agent (it happens instantly on the specific row). If you need to perform actions, like "Check if a contact exists, if not create them, then send a Slack message," that requires a Workflow. Overusing workflows for simple data cleanup slows down the application.
- How to implement:
- Ask: "Does this change affect only this one row?" -> Use Database Agent.
- Ask: "Does this need to create new records elsewhere or send an email?" -> Use Workflow.
III. Building with the AI Co-Builder
These tips come directly from our AI Co-Builder live demo with the Softr co-founders and from real builds since launch. They apply specifically when you're using the Co-Builder, and they make every other tip in this article faster to implement.
14. Start every app with a prompt that names roles, sign-up flow, and major entities
- One-liner: A prompt that specifies roles, the sign-up model, and the major entities gets the user system, permissions, and database wired correctly from minute one.
- Core principle: The Co-Builder asks clarifying questions to fill any gaps — about sign-up flow, storage type, access levels, approval logic. A detailed initial prompt reduces those questions and the back-and-forth; a vague prompt still works, but you'll spend more iteration cycles getting to the same result.
- Deep dive and benefits: A vague prompt ("build me an internal tool") leaves the Co-Builder to guess at roles, navigation, and access patterns. A specific prompt ("Build a vendor portal where admins manage vendors, tasks, and invoices, and vendors can only see their own records; sign-up is invite-only via email") generates a working V1 with the user groups, the global data restrictions, and the navigation already aligned to the real workflow. You save the iteration loop.
- How to implement:
- List the major entities (tables) you expect.
- Name the roles and what each role can do.
- Specify the sign-up flow (invite-only, public, domain-gated).
- Mention the navigation if you have a preference (sidebar, top nav).
- Paste the whole thing into the Co-Builder.
15. Treat AI Co-Builder output as a 70-80% draft, then take the wheel
- One-liner: The Co-Builder generates the bones of the app in five minutes. The remaining 20-30% (specific permissions, exact field types, fine-tuned configurations) is faster to do visually.
- Core principle: Each mode has a sweet spot. The Co-Builder excels at scaffolding and bulk configuration; visual editing excels at precision and trial-and-error.
- Deep dive and benefits: Per Mariam Hakobyan in the AI Co-Builder live: "Now like 70, 80% of the work is done. You can already publish, go live, or you might need to do certain adjustments." Trying to get the Co-Builder to nail every last percent wastes credits and tries your patience. Generate the structure, then refine the details visually. You'll save time and credits both.
- How to implement:
- Run the initial prompt and accept the V1 as a starting point.
- Open the visual editor and walk through each page.
- Tighten permissions, adjust field types, polish layouts manually.
- Return to the Co-Builder for the next bulk task (a new page, a new workflow), not for tiny visual edits.
16. Use the AI Co-Builder as a learning tool
- One-liner: When the Co-Builder configures something you don't fully understand, open the visual editor and inspect the result. The configuration is fully exposed, so you learn the manual setup by reading the AI's output.
- Core principle: The Co-Builder doesn't generate code; it applies the same configurations the visual editor exposes. Inspecting its output is a fast path to learning Softr itself.
- Deep dive and benefits: Most platforms hide what AI generates behind code or auto-magic. Softr keeps everything visible. If the Co-Builder adds a rollup field, you can open the field settings and see exactly how it's configured. If it sets up a permission rule, you can read the visibility panel. The next time you want to do the same thing, you'll know how to do it manually. Treat the Co-Builder as a tutorial that writes itself based on your real app.
- How to implement:
- After every Co-Builder generation, open the affected page, field, or workflow visually.
- Read the configuration and try to replicate it on a new field/page yourself.
- Over time, you'll know which features to do manually first time around.
17. Always verify AI-generated permission rules visually
- One-liner: Whenever the Co-Builder sets up a permission rule, open the visibility panel and read what it actually configured. Most of the time it's right. The few times it's not, you catch it before a real user does.
- Core principle: Speed matters everywhere except where data security is at stake. For permissions and global data restrictions, the cost of a missed verification is far higher than the time saved by skipping it.
- Deep dive and benefits: Per Artur Galstyan in the AI Co-Builder live: "I had a friend who is actually an engineer and has some side business. They build custom admin panel in Lovable. And one day I asked, like, how do you know who has access to what? And suddenly he was silent for a few minutes. After five minutes checking the code, he was still not sure who has access to what." The Softr difference is that permissions live in a visible panel, not in generated code. Use that visibility. It's the whole point.
- How to implement:
- After any Co-Builder run that touches access control (user groups, action visibility, page access, data restrictions), click into the relevant panel.
- Read the rule out loud as a sentence ("vendors can only see tasks where vendor company equals logged-in user's company").
- Confirm or correct it visually.
18. Trust destructive-change confirmations and version history as your safety net
- One-liner: The Co-Builder requires explicit confirmation for any destructive change (deleting a page, removing a field), and apps have version history. Together, these make prompting safe to experiment with.
- Core principle: Reversibility encourages experimentation. The two safety mechanisms (confirmations and history) mean you can prompt boldly and still recover if something goes sideways.
- Deep dive and benefits: Per Mariam Hakobyan in the AI Co-Builder live: "When there is a change that AI tries to delete, like let's say something, it's going to ask you for confirmation. We want all the destructive actions to be confirmed. And additionally, there is also versioning on the apps. Like if really something goes wrong, you can roll back like a few hours back and still have a starting point." Use both. Don't second-guess every prompt; if the Co-Builder is about to do something destructive, you'll see the dialog. If a non-destructive change goes wrong, the history is there.
- How to implement:
- Read the confirmation dialog before approving destructive changes.
- Save a known-good version before running a particularly bold prompt.
- Use version history (in App Settings) to roll back if a prompt produced a worse result than what you had.
19. Match model power to task complexity
- One-liner: Use lighter models for simple edits and heavier models for complex generations (org charts, dense logic, multi-step workflows). Soon you'll be able to choose the model per task.
- Core principle: Cost and quality trade off. For easy edits, the cheapest model is fine; for complex generations, paying for a heavier model is worth the credits.
- Deep dive and benefits: Per Mariam Hakobyan in the live: "If you are really building something very complicated, let's say org chart to visualize something scalable, it's a non-easy problem. For that, you need the most powerful models. It's going to be a bit costly because it's a powerful model, but it can do a better job and have less errors. So you will have this control of deciding which model to use. For simple edits, you can use simpler models, and for powerful features, you can go for most powerful models." This control is rolling out incrementally. Until then, accept that complex prompts may need a few iterations.
- How to implement:
- For "add a button," "rename this field," "change this color," expect one shot to be enough.
- For "build a custom analytics page," "generate a workflow with branching logic," expect to iterate, and switch to the heavier model when it's available.
- Track your credit usage in the Activity History to learn what each kind of prompt typically costs.
IV. User management & security
20. Sync the Softr user system to your database
- One-liner: Sync the Softr User System directly to your Data Source's "Users" table to manage authentication dynamically.
- Core principle: Your database should be the "source of truth" for user access, not a separate hidden list.
- Deep dive and benefits: Instead of manually inviting users via email one by one through the app settings, you can map the User System to your database table. This means simply adding a row to your database automatically grants that person access. It connects your data directly to your authentication logic, making onboarding scalable.
- How to implement:
- Go to the
Userssection in Softr Studio. - Click
Sync with Data Source. - Map the
Email,Name, andAvatarfields to your database columns.
- Go to the
21. Define user groups using conditional logic
- One-liner: Define User Groups based on dynamic conditions (e.g., Role == Admin) rather than manually assigning users to groups.
- Core principle: Dynamic permissions scale; manual permissions cause administrative bottlenecks.
- Deep dive and benefits: You should define groups by logic, not manual lists. By setting a rule like "Role equals Admin," you never have to manually update permissions in the app settings. If you change a user's role in the database from "Standard" to "Admin," they instantly gain Admin access in the app. This makes managing large teams effortless.
- How to implement:
- Navigate to
Users > User Groups. - Create a group (e.g., "Vendors").
- Set the condition:
Role(field)isVendor(value).
- Navigate to
22. Apply global data restrictions for security
- One-liner: Use "Data Restrictions" settings to limit data visibility at the global level rather than relying solely on block-level filters.
- Core principle: Security should be a "blanket" policy to prevent accidental data leaks if a filter is forgotten on a specific page.
- Deep dive and benefits: For example, in a Vendor Portal, you can enforce a global rule: "Vendors can only see Tasks where the Vendor Company matches the Logged-in User's Company." This acts as a safety net. Even if you build a new page and forget to add a specific filter to a list block, the system will still refuse to serve data belonging to other vendors because the global restriction blocks it.
- How to implement:
- Go to
Users > Data Restrictions. - Select a table (e.g.,
Tasks). - Set the rule:
Vendor(field)equalsLogged-in User > Vendor.
- Go to
- Set this one visually: Global Data Restrictions are the canonical example of work you should configure visually rather than delegate to the AI Co-Builder. The Co-Builder can write the rule, but you want the moment of explicit verification that comes with reading the panel and confirming, "yes, vendors can never see other vendors' data." Artur Galstyan, Softr's co-founder and CTO, captured the failure mode best in our AI Co-Builder live: a developer friend who built an internal tool with Lovable couldn't tell him who had access to what, even after five minutes of reading the generated code. Save the verification step. Write the rule visually.
23. Create an approval workflow for new users
- One-liner: Use a "Status" field for Users and filter the User Sync so that only "Active" users can log in, creating an approval gate.
- Core principle: Control access by gating the login capabilities, allowing for a "Pending" state where users exist in data but cannot access the app.
- Deep dive and benefits: You can utilize a "Status" field (Pending vs. Active) to create an approval system. In the User Sync settings, add a filter: "Sync only if Status is Active." This allows people to apply or be invited (creating "Pending" rows), but they cannot actually log in until an Admin reviews the record and flips the status to "Active."
- How to implement:
- Add a
Statusfield to your Users table. - In Softr User Sync settings, add a condition:
StatusisActive. - Build an Admin dashboard button that updates a user's status from "Pending" to "Active."
- Add a
- AI shortcut: Add this to your initial prompt: "New users start as Pending and can only log in after an admin approves them by flipping their status to Active." The Co-Builder generates the field, the sync filter, and the admin approval button as a set.
24. Use onboarding flows for mandatory data
- One-liner: Use Onboarding Flows to force new users to fill in mandatory profile information before accessing the app.
- Core principle: Progressive profiling ensures you get necessary data (Avatar, Job Title) without making the initial signup friction too high.
- Deep dive and benefits: For example, you can direct new users to an Onboarding Block immediately after they log in for the first time. This block can force them to upload a profile picture and set a job title. The system prevents them from clicking away or accessing the dashboard until this is done, ensuring you always have 100% data completeness for critical profile fields.
- How to implement:
- Go to
Pages>Utility Pagesand select the Onboarding flow. - Click the block. Under
Settings>Flow type, choose Complete user profile and configure the required steps (mapping inputs to your User table columns). - Go to
Pages>Page Rules(icon beside the search bar) and set this page as the onboarding flow for logged-in users or specified user groups.
- Go to
V. Interface design (UI/UX)
25. Configure the global theme before designing pages
- One-liner: Configure global styles (Typography, Accent Color, Roundness) immediately to ensure consistency across all blocks.
- Core principle: Design consistency builds trust; configuring it globally saves hours of repetitive styling.
- Deep dive and benefits: By setting the accent color (e.g., your brand's specific blue) globally at the start, every button and link you add later will automatically inherit this style. This avoids the need to manually color-correct dozens of buttons later. It also ensures consistency in things like corner roundness, making the app feel professional and polished.
- How to implement:
- Go to the
Themetab on the left sidebar. - Set
Heading Font,Body Font, andAccent Color. - Adjust
App Width(M or L) andRoundness.
- Go to the
26. Assign separate homepages for different user groups
- One-liner: Use "Page Rules" to route different user groups to their own dedicated homepages, keeping your design workspace clean and secure.
- Core principle: Separation of Environments. It is safer and cleaner to route users to different pages than to toggle visibility on dozens of individual blocks.
- Deep dive and benefits: If your Admins and Vendors see completely different content (e.g., a Dashboard vs. a Landing Page), trying to manage this on a single "Home" page using block visibility is messy and error-prone. If you forget to hide one block, data leaks. Instead, build distinct pages (e.g., a public /home and a private /vendor-dashboard). This gives you a clean canvas for each user type. You then simply tell Softr to "traffic control" the users upon login, sending them to the correct environment automatically.
- How to implement:
- Create your distinct pages (e.g.,
home-admin,home-vendor). - Open the Pages panel on the left and click the Page Rules icon (located right beside the search bar).
- Define the routing logic: "If User Group is
Vendor-> Redirect tohome-vendor."
- Create your distinct pages (e.g.,
27. Configure navigation visibility for different user groups
- One-liner: Use Softr's native Navigation settings to hide specific links or assign unique menus to different user groups, reducing clutter.
- Core principle: Navigation should only show accessible paths; showing "Access Denied" links frustrates users.
- Deep dive and benefits: Instead of manually stacking multiple header blocks on every page (the old method), use Softr's modern Navigation system. You can hide specific links within a single global menu (e.g., make "Settings" visible only to Admins) or create entirely separate Navigation menus for distinct user roles (e.g., a dedicated "Vendor Nav" vs. "Admin Nav"). This keeps your page editor clean and ensures global consistency.
- How to implement:
- Open the Navigation panel in the Studio sidebar.
- Option A (Link Visibility): Click on a specific link (e.g., "Invoices") and set the visibility rule to a specific User Group (e.g.,
Admin). - Option B (Distinct Menus): Create a new Navigation menu (e.g., "Vendor Menu") and assign it to specific pages via
Page Settings > Navigation.
28. Use tab containers to organize dense information
- One-liner: Use Tab Containers to organize dense information (Tasks, Documents, Invoices) on a single page to avoid scrolling fatigue.
- Core principle: Categorization reduces cognitive load; keeping related data on one page improves workflow efficiency.
- Deep dive and benefits: Instead of creating separate pages for "Vendor Documents" and "Vendor Invoices," use a Tab Container on the Detail page. One tab shows "Tasks," another "Documents," another "Invoices." This keeps the user focused on the context of that specific record without having to navigate back and forth between different pages.
- How to implement:
- Add a
Tabcontainer block (under Blocks > Container). - Define the tab names.
- Drag and drop your List/Table blocks into the respective tabs.
- Add a
29. Use column blocks to display metrics side-by-side
- One-liner: Use Column layouts to display metric charts side-by-side for a compact, readable dashboard.
- Core principle: Key Performance Indicators (KPIs) should be viewable "at a glance" without scrolling.
- Deep dive and benefits: For a Sales dashboard, you might want to show "Total Deals," "Pipeline Value," and "Win Rate." Instead of stacking these vertically, use a multi-column layout to display them in a single horizontal row. This dense display allows users to assess high-level performance in seconds.
- How to implement:
- Add a
Chartblock (specificallySummary Cardsor similar). - Or use a
Containerblock and set the layout to3 Columnsor4 Columns. - Place individual metric blocks inside each column slot.
- Add a
- AI shortcut: Generating a dashboard manually means picking the data source, chart type, axes, and aggregation for every chart. Replace that with one prompt: "Add a dashboard page with metric cards for total deals, total revenue this month, and conversion rate, plus a bar chart of revenue by month and a pie chart of deals by stage." The Co-Builder configures every chart against your existing schema. Tweak any individual one visually if its choice isn't quite right.
30. Display filtered lists inside detail pages
- One-liner: Display a list block (e.g., Contacts) inside a Detail page (e.g., Company Details) and use "Conditional Filters" to show only relevant records.
- Core principle: Context is king; show the child data exactly where the user is viewing the parent data.
- Deep dive and benefits: When viewing a Company Detail page, the user should ideally see a list of Contacts right there on the page. You can embed a list block and filter it to show only records where "Company Name matches the Record currently on screen." This creates a drill-down experience where you can see all child data (contacts, orders, tasks) without leaving the parent page.
- How to implement:
- On a Detail Page (e.g., Company), add a
Tableblock (e.g., Contacts). - In the Table settings, go to
Conditional Filters. - Set:
Company(in Contacts)equalsCompany Name(from the Record Detail above).
- On a Detail Page (e.g., Company), add a
31. Open detail pages in modals to preserve context
- One-liner: Open detail pages in "Sliding Modals" or "Center Modals" so users don't lose their place in the list view.
- Core principle: Preserving user context (the list they were scrolling) improves navigation speed and user satisfaction.
- Deep dive and benefits: For example, clicking a Vendor in a list shouldn't necessarily load a new URL page. Instead, it can open a sliding panel from the right. The user can review or edit the vendor, close the panel, and be right back at their exact scroll position in the main list. This makes the interface feel fast and app-like.
- How to implement:
- In your List block's "Actions" settings (On Click).
- Choose
Open Page. - Select the destination page but change "Open in" from
Same TabtoSliding ModalorCenter Modal.
32. Mix AI Co-Builder, visual editing, and Vibe Coding for each task
- One-liner: Use the AI Co-Builder for scaffolding and bulk configuration, visual editing for permissions and trial-and-error refinement, and the Vibe Coding block for the custom 20% no native block can produce.
- Core principle: Anything you can configure visually, you can prompt the AI to do, and vice versa. The two modes target the same outcome through different doors. The Vibe Coding block then handles the rare component that doesn't fit any native block.
- Deep dive and benefits: The reflex with AI tools is to use them for everything, because they feel fast. The reflex with visual editors is to use them for everything, because they feel safe. Softr rejects both reflexes by giving you parity between the two modes, plus a dedicated escape hatch for custom UI. Per Mariam Hakobyan, Softr co-founder and CEO: "Anything you actually work with AI to generate, it's going to be 100% working all the time. It's not going to hallucinate, because it's building on the infrastructure and building blocks that we already have in Softr." The AI doesn't generate code; it applies configurations to the same building blocks the visual editor uses. Artur Galstyan, co-founder and CTO, draws the sharpest line between the two modes: "AI Co-Builder uses existing blocks 90% of the time — that's why it's reliable and has a low failure rate. Vibe Coding block, in contrast, is pure code generation. You use it when you want to create something very custom that Softr doesn't offer natively."
- The right call, by task:
- AI Co-Builder: scaffolding a new app, repetitive configuration across many blocks, generating analytics pages, adding rollups and formulas, learning a feature you've never used.
- Visual editing: permissions on individual buttons and pages, global data restrictions, connecting workflows to interface elements, trial-and-error refinement (drag a column wider, change a color, move a tab).
- Vibe Coding block: drag-and-drop scheduling, audio capture, custom data visualizations, floating widgets, any UI that needs human-in-the-loop AI flows via webhooks.
- How to implement:
- Generate the bones with the AI Co-Builder.
- Refine permissions and small visual tweaks visually.
- Reach for the Vibe Coding block only for the specific custom 20%.
- Read more: For the deeper breakdown, see How to mix AI Co-Builder, visual editing, and Vibe Coding to ship a business app in minutes and When to use the Vibe Coding block vs. native blocks.
33. Use Kanban blocks for status pipelines
- One-liner: Use Kanban blocks for any object that moves through stages (Deals, Tasks) to allow drag-and-drop updates.
- Core principle: Visualizing "Work in Progress" is more intuitive than reading status text in a spreadsheet.
- Deep dive and benefits: For example, managing Sales Deals is much easier when you can visualize them as cards in columns (e.g., "Negotiation," "Won," "Lost"). Using a Kanban block allows users to drag a card from one stage to another, which automatically updates the status in the database. This provides an immediate, interactive overview of the pipeline.
- How to implement:
- Add a
Kanbanblock. - Map the
Group Byfield to your Single Select status field (e.g.,Stage). - Configure the card cover image and primary text.
- Add a
34. Use one-click update actions on list items
- One-liner: Use "One-click Update" action buttons on list items for quick tasks like "Approve User" without opening a form.
- Core principle: Reducing clicks for repetitive administrative tasks drastically improves efficiency.
- Deep dive and benefits: Imagine a list of "Pending Users." Instead of opening each record individually to edit their status, you can add an "Approve" button directly on the list row. Clicking it instantly updates the status to "Active" in the background. This turns a multi-step chore into a single click.
- How to implement:
- In the List block
Actionstab, add a button. - Type:
Update Record. - Pre-define the field value: Set
StatustoActive. - Hide the form (make it a "one-click" action).
- In the List block
35. Use loading screens for workflows and forms
- One-liner: Enable "Show Waiting Screen" on both Action Buttons and Form submissions to bridge the gap between user input and backend processing.
- Core principle: Feedback loops reduce anxiety during wait times, while dynamic handoffs create a seamless "smart app" experience rather than a static form submission.
- Deep dive and benefits:
- For Buttons: If a "Summarize with AI" button takes 5 seconds, a loading screen tells the user the system is working, preventing frustration.
- For Forms (the "Smart Handoff"): This is where it gets powerful. Instead of a static "Success" message, you can set a Form Ending to "Run Custom Workflow."
- Example: Imagine a Lead Routing form. The user submits their details. The data is stored, and a workflow triggers immediately. While the user sees a custom loading screen (e.g., "Finding your account manager..."), the workflow uses AI to assign the best rep and update the record. Once finished, the workflow doesn't just say "Done", it redirects the user specifically to that new Account Manager's booking page. This turns a passive form into an intelligent, active process.
- How to implement:
- For Buttons: In Action Button settings, select
Run Custom Workflow, toggleShow Waiting Screen, and customize the text. - For Forms: In the Form Block's "On Submit" settings, choose
Run Custom Workflow. Set up the loading screen text, and configure the Workflow to handle the final redirect (e.g., "Open Page") once the logic is complete.
- For Buttons: In Action Button settings, select
VI. Forms & data entry
36. Use hidden fields to pass context in forms
- One-liner: Use Hidden Fields in forms to automatically pass values like "Logged In User" or "Current Record ID."
- Core principle: Never ask a user for information the system already knows; it creates friction and data errors.
- Deep dive and benefits: If a user adds a "Contact" while viewing a "Company" page, they shouldn't have to select the Company manually from a list. You can use a Hidden Field to grab the ID of the company page they are currently on and auto-fill the "Company" link field. The user doesn't even see this happen, but the record is linked perfectly in the background.
- How to implement:
- In Form fields, set the visibility to
Hidden. - In the "Value" setting, choose
Logged In User > EmailorPage Param > Record ID.
- In Form fields, set the visibility to
37. Break complex inputs into multi-step forms
- One-liner: Break long data entry tasks into multi-step forms to improve user experience and reduce abandonment.
- Core principle: Cognitive chunking makes complex tasks feel manageable.
- Deep dive and benefits: For complex forms like a "New Invoice," which might require 15 different fields (Dates, Amounts, Attachments, Notes), it's best to split them. You can create a 3-step wizard: Step 1 for Basic Info, Step 2 for File Uploads, and Step 3 for Notes. This fits better on mobile screens and feels less overwhelming to the user.
- How to implement:
- Add a
Formblock. - Enable
Multi-stepin the layout settings. - Drag fields into the different step groups (Step 1, Step 2).
- Add a
38. Use default values to capture date and time automatically
- One-liner: Use hidden form fields to pass the "Current Date/Time" timestamp automatically when a record is created.
- Core principle: Accurate timestamping is crucial for audit trails and sorting, and manual entry is unreliable.
- Deep dive and benefits: In a "Lead Capture" form, the visitor shouldn't have to enter today's date manually. The form should have a hidden field mapped to "Submission Date" with the default value set to
Current Date/Time. This ensures the system captures the exact moment the lead arrived, which is critical for response time tracking. - How to implement:
- Add a form field mapped to your Date column.
- Set visibility to
Hidden. - Set the default value to
Current Date.
39. Keep public and private pages separate
- One-liner: Keep public-facing pages (like Demo Requests) separate from internal logged-in app pages to simplify logic.
- Core principle: Separation of concerns makes security and navigation logic much cleaner.
- Deep dive and benefits: If you have a public "Contact Us" form, keep it on a purely public page. Keep your internal dashboards on separate, gated pages. This avoids the need for complex visibility rules (e.g., "Hide this specific block if the user is logged in"). It keeps the logic simple: Public URL vs. Private URL.
- How to implement:
- Create a
Publicpage. In Page Settings, set visibility to "All Users." - Create an
Apppage. Set visibility to "Logged-in Users." - Do not mix the two audiences on the same URL path if possible.
- Create a
VII. Automation & workflows
A note on workflows and the AI Co-Builder: cross-entity context (prompting from the page editor and having the workflow get built automatically) is improving rapidly. Per Artur Galstyan, co-founder and CTO of Softr, in the AI Co-Builder live: "Those are the parts that we are actively working and trying to improve." For now, prompt within the Workflows area for workflow generation and within the interface for blocks. We'll update this section as the boundary fades.
40. Use workflows to send transactional emails
- One-liner: Use Workflows to send automated emails triggered by specific data changes (e.g., Status changing to "Approved").
- Core principle: Automating communication ensures consistency and speed (e.g., instant welcome emails).
- Deep dive and benefits: For instance, as soon as a User Status flips to "Active," you can trigger an automation to send a "Welcome" email with a login link. This replaces manual processes where an admin would have to draft an email every time they approved a user, ensuring new users get immediate access.
- How to implement:
- Go to
Workflows > Create New. - Trigger:
Record Updated(Table: Users, Field: Status, Value: Active). - Action:
Send Email. Map theUser Emailand insert theMagic Linkvariable.
- Go to
- AI shortcut (workflows): Inside the Workflows area, prompt: "When a user's Status changes to Active, send them a welcome email with a magic link." The Co-Builder builds the trigger and the email step as one workflow.
41. Use the "find records" step to fetch related data
- One-liner: Use the "Find Record" step to fetch related data (e.g., finding the User assigned to a Task) to personalize emails.
- Core principle: Relational data is powerful, but you often need to "hop" across tables to get the email address or name you need.
- Deep dive and benefits: Imagine a Task is due; the system knows the Task details, but it needs to email the Assignee. The workflow can use a "Find Record" step to search the Users table for the person linked to that Task. Once found, it pulls their specific email address to send the reminder.
- How to implement:
- In a Workflow, add a step
Datasource > Find Records. - Condition:
NameequalsTrigger Record > Assignee. - Use the output of this step (the Email) in the subsequent "Send Email" step.
- In a Workflow, add a step
42. Prevent duplicates using conditional branching
- One-liner: Use conditional logic (Branching) in workflows to check if a record exists before creating a new one.
- Core principle: Data hygiene requires defensive logic; always assume data might already exist.
- Deep dive and benefits: In a "New Lead" workflow, the system should first check: "Does a Contact with this email already exist?" If YES, it should simply link the new request to the existing contact. If NO, it should create a new contact. This logic prevents your database from filling up with duplicate entries for the same person.
- How to implement:
- In Workflow, add a
Find Recordstep (Search by Email). - Add a
Conditional Branch(If/Else). - If
Find Recordreturns a result -> Stop/Link. - If
Find Recordis empty -> Create Record.
- In Workflow, add a
- AI shortcut: "When a new lead arrives, find the matching company by email domain, create a contact only if one doesn't already exist, and send a Slack message to #sales-wins with the result." The workflow Co-Builder generates the branch, the find step, and the Slack action together.
43. Use AI steps to generate workflow content
- One-liner: Use AI steps within workflows to generate content like personalized email drafts or interaction summaries.
- Core principle: AI transforms raw data into usable content, saving human processing time.
- Deep dive and benefits: Instead of a generic email template for task reminders, you can use an AI step to read the specific Task Title and Description and write a polite, context-aware email. It can generate a message like "Hi Jane, just a reminder to finish the Safety Compliance upload..." which feels much more human and engaging than a robotic alert.
- How to implement:
- In Workflow, add an
AI / LLMstep. - Prompt: "Write a polite reminder email for a task titled @Title with description @Description."
- Map the AI's output (Body) into the "Send Email" action.
- In Workflow, add an
44. Use the AI helper to write custom code in workflows
- One-liner: Use the AI code helper within Workflows to generate specific code snippets (e.g., Regex) without needing coding knowledge.
- Core principle: Low-code doesn't mean no-code; AI bridges the gap for complex data manipulation.
- Deep dive and benefits: For example, if you need to extract a domain name (e.g.,
softr.io) from an email address to find a Company, you might need a snippet of Javascript. Softr allows you to type "Write code to extract domain from email" into an AI helper, and it will generate the functional code for you, allowing you to perform complex data logic without being a developer. - How to implement:
- Add a
Codestep in the workflow. - Click the
AI Helperbutton. - Describe the logic ("Extract text after the @ symbol").
- Insert the generated code.
- Add a
45. Trigger custom workflows directly from the interface
- One-liner: Use "Run Custom Workflow" buttons in the interface to allow users to trigger complex backend processes on demand.
- Core principle: Give users superpowers; let them initiate batch jobs or complex logic with a single click.
- Deep dive and benefits: For example, a "Summarize Deal" button allows a user to trigger a complex sequence: fetch all 20 emails related to a deal, send them to AI for summarization, and update the record. This is not an automatic background task, but a specific tool you give the user to run exactly when they need it.
- How to implement:
- In the Interface, add an Action Button:
Run Custom Workflow. - Create the matching Workflow with the
Run Custom Workflowtrigger. - Connect the two by selecting the workflow in the button settings.
- In the Interface, add an Action Button:
46. Send Slack notifications for high-value events
- One-liner: Integrate Slack/Messaging steps in workflows to notify internal teams of high-value events instantly.
- Core principle: Push notifications to where the team lives (Slack/Teams) ensure faster response times than email.
- Deep dive and benefits: When a high-value lead arrives or a critical issue is logged, sending a message to a specific Slack channel (e.g., #sales-wins) ensures the team sees it immediately. This allows for "swarming" on opportunities much faster than waiting for someone to check their inbox.
- How to implement:
- Connect your Slack account in Softr Integrations.
- In Workflow, add a
Send Slack Messagestep. - Construct the message using variables from the trigger record.
- In practice: The 8-min Softr demo shows this live: a Slack notification fires whenever a new document is uploaded — trigger on new record in the Documents table, action posts a channel message. Wired up in the Workflows tab in under a minute.
- AI shortcut: "When a deal is marked as Won and the amount is over $10,000, send a message to #sales-wins with the deal name, amount, and owner." The workflow Co-Builder builds the trigger, the conditional, and the Slack step in one pass.
VIII. User interaction & collaboration
47. Enable "Ask AI" on list blocks for natural language queries
- One-liner: Enable "Ask AI" on data-heavy tables to allow users to query data using natural language.
- Core principle: Chat interfaces democratize data access; users shouldn't need to know how to filter/sort to find answers.
- Deep dive and benefits: A Sales Manager shouldn't have to export data to Excel to find answers. If you enable "Ask AI" on a Deals table, they can simply type: "Why did we lose deals this month?" The AI reads the table rows, analyzes the "Loss Reason" column, and summarizes the answer (e.g., "Most deals were lost due to pricing").
- How to implement:
- On a Table/List block, go to
Actions>Add topbar button>Ask AI. - Configure the prompt instructions (e.g., "You are a sales analyst...").
- Select which fields the AI can "read."
- On a Table/List block, go to
- Pair with: Ask AI is one of several AI features that work on top of your data layer. The others (database AI agents, AI workflow steps, the Vibe Coding block, the AI Co-Builder itself) all draw on the same secure permissions and database. Wire them up together for compounding effects.
48. Enable native commenting on detail pages
- One-liner: Enable native Commenting on detail pages to facilitate collaboration between User Groups.
- Core principle: Contextual communication keeps the conversation attached to the data, rather than lost in emails.
- Deep dive and benefits: For example, if Admins and Vendors need to discuss Invoices, enabling Comments directly on the Invoice Detail page keeps that conversation attached to the record. Users can ask questions ("Is this approved?") and get answers right where the data lives, creating a unified audit trail.
- How to implement:
- On a Detail Page block, click
Actionsand toggle onComments. - Go to the Comment settings to enable Mentions and Notifications.
- Users can now tag each other and leave notes.
- On a Detail Page block, click
49. Configure search to include related lookup fields
- One-liner: Configure search bars to include relevant related fields (e.g., search Contacts by Company Name).
- Core principle: Search should match user mental models; users often search for a person by the company they work for.
- Deep dive and benefits: If searching for a contact, a user might remember the company name but not the person's name. By configuring the search bar to look at "First Name," "Last Name," AND the linked "Company Name," you ensure the user finds "John Doe" even if they search for "Google."
- How to implement:
- Click on the Search Bar in the List Block settings.
- Check the boxes for all relevant fields (including Lookup fields like Company Name).
50. Create separate views for "my items" and "all items"
- One-liner: Create dashboard views filtered by "Logged In User" so users can toggle between seeing "My Tasks" and "All Tasks."
- Core principle: Users operate in two modes: "Focus Mode" (My work) and "Management Mode" (Team work).
- Deep dive and benefits: Consider a dashboard with two tabs: "My Deals" and "All Deals." The "My Deals" tab uses a filter to show only records owned by the logged-in user, allowing them to focus on their quota. The "All Deals" tab has no filter, allowing them to peek at broader team performance without navigating to a different page.
- How to implement:
- Create two identical List blocks (or use Tabs).
- On the first one, set a Conditional Filter:
OwnerisLogged-in User. - On the second one, remove the filter.
- AI shortcut: "On the Deals dashboard, add a tab container with two tabs: My Deals (filtered to the logged-in user) and All Deals (no filter)." The Co-Builder builds the structure in one prompt.
You now have the playbook
Whether you're building a simple internal tool or a complex client portal, applying these 50 best practices will save you hours of trial and error. Each tip works in every mode the platform offers: prompt the AI Co-Builder when speed wins, click through the visual editor when precision wins, drop in a Vibe Coding block when nothing else fits.
Ready to put these tips into practice?



