How it works Examples Docs Pricing Blog WP Blocks Install free

Blog /

Gravity Forms vs a DesignSetGo App for a custom quote builder

Gravity Forms is the WordPress form-builder most agencies install by default. It is mature, it is well-supported, the developer license pays for itself the first time a client asks for a 12-field intake form. For ordinary forms it is the right answer and this post is not going to argue otherwise.

For quote builders with branching logic, custom math, and per-line pricing breakdowns, the calculus changes. Gravity gets you most of the way and the last 20% is expensive in three currencies: licensing, click-effort, and future-you’s patience.

Here is the honest comparison, walked through a worked example: a service quote builder for a small home-services business. Roof cleaning, gutter clearing, pressure washing, with pricing that depends on house size, story count, and whether the customer needs evening scheduling.

The two approaches in one paragraph each

Gravity Forms. Drag fields into the form builder. Use Conditional Logic to show/hide fields based on earlier answers. Use the Pricing Fields add-on (Pro tier) for product and price calculations. Use the Quiz add-on for scoring if you want to score the answers. Pipe the result into an email and (optionally) store it in the database. License: $59 to $259/year depending on tier. UI: wp-admin.

DesignSetGo App. Scaffold with npx designsetgo apps init. Vibe-code the quote builder in Claude Code or Cursor with a prompt that describes the inputs, the branching, the pricing model, and the output format. Wire dsgo.email.send() for the submission. Manifest. Deploy. License: free for the runtime; Pro for dsgo.email.send() and the harness. UI: whatever you build.

Both produce a working quote builder. They do not produce the same thing.

Worked example: the service quote builder

The brief: a home-services business with three service types (roof cleaning, gutter clearing, pressure washing). Pricing depends on:

  • House size (sqft, range slider).
  • Story count (1, 2, or 3).
  • Service type (one or more, with bundle discounts).
  • Add-on: solar panel cleaning.
  • Add-on: evening scheduling (15% surcharge).
  • Result: an itemized quote with per-line totals, a discount line, and a “send to my email” button.

The Gravity version

Roughly the steps:

  1. Create a new form.
  2. Add a “House size” slider field (Pro add-on or a number field with min/max).
  3. Add a “Story count” radio field with three options.
  4. Add a “Service type” checkbox field with three options.
  5. Add an “Add-ons” checkbox field with two options.
  6. For each service, add a product field with a calculated price. Tie the calculation to the sqft and story fields via {:field_id} formula syntax.
  7. Add a total field that sums the product fields with discount logic. The discount logic is a series of conditional total adjustments.
  8. Add conditional visibility so the add-ons only appear when relevant.
  9. Style the form. This is mostly CSS overrides against Gravity’s class names.
  10. Configure email notifications with the calculated total in the merge tags.

What this gives you: a working form. What it costs:

  • ~$159/year for the Elite license (you’ll want the Pricing fields and Conditional Logic without surprises).
  • Three to five hours of fiddling with the Conditional Logic tab. (The interface is fine. It is also a place where complex branching becomes a maintenance burden.)
  • A form that looks like a Gravity form. You can override CSS, but you are styling against an existing layout.
  • A form whose math is in the form builder. The next developer to touch it has to learn Gravity’s calculation syntax to understand it.

The DesignSetGo version

npx designsetgo apps init quote-builder
cd quote-builder

Open in Claude Code. Prompt:

Build a quote builder for a home services company. Three service types (roof cleaning, gutter clearing, pressure washing) shown as cards the user can click to select one or more. A house-size slider (500 to 5000 sqft). A story-count selector (1, 2, 3). Two add-on toggles: solar panel cleaning, evening scheduling. Calculate price per service: roof cleaning = $0.10 per sqft, gutter clearing = $0.05 per linear foot estimated as sqft / 50, pressure washing = $0.08 per sqft. Story count multiplier: 1x, 1.5x, 2.2x. Bundle discount: 10% off two services, 18% off three. Add-ons: solar +15% of total, evening +15% of total. Show an itemized breakdown with per-line totals. Bottom button: “Email this quote to me” with an email input. On submit, call dsgo.email.send with the breakdown. Style it to look like a clean home-services site, white and forest green, sans-serif, big touch targets.

Claude Code writes the bundle. The math is in JavaScript. The UI is React or vanilla HTML, whichever the agent chose. The styling is in your colors.

Manifest:

{
  "manifest_version": 1,
  "id": "quote-builder",
  "name": "Service quote builder",
  "version": "0.1.0",
  "entry": "index.html",
  "display": { "modes": ["block", "page"], "default": "block" },
  "permissions": {
    "read": [],
    "send": ["email"]
  },
  "runtime": { "sandbox": "strict", "external_origins": [] }
}

Deploy:

npx designsetgo apps deploy

What this gives you: a working quote builder. What it costs:

  • The DesignSetGo Pro tier (currently $99/year) for dsgo.email.send(). Free if the email submission can be a mailto: link instead.
  • About 20 minutes the first time, including the prompt and one or two iterations to get the visual styling right.
  • A quote builder that looks like your client’s brand, because Claude styled it from a one-line prompt instead of you overriding Gravity’s CSS.
  • Math that lives in plain JavaScript in your repo, that the next developer can read without learning Gravity’s calculation syntax.

What Gravity is better at

Three things, and they are not small.

Form submission as a data pipeline. Gravity stores submissions, has a built-in entries view, exports CSV, integrates with every CRM under the sun via its add-ons. If your form is fundamentally a data-capture event with an email confirmation, Gravity has spent twelve years making that flow correct.

Built-in deliverability. Gravity’s email sending has thoughtful retry logic, SMTP integration, the Notifications screen, the conditional notification logic. dsgo.email.send() inherits the site’s SMTP plugin (because it routes through wp_mail), but the configuration of email per-form is Gravity territory.

Non-coder maintainability. A marketing manager can change a field label or add a question in Gravity without ever writing a prompt. They cannot do that in a DesignSetGo App without re-running the build.

12 years of edge cases. Phone validation per locale, address autocomplete, signature capture, file uploads with size limits, GDPR consent fields, partial entry saves. Gravity has implemented every one. A DesignSetGo App has whatever Claude wrote that morning.

What DesignSetGo is better at

Three things, also not small.

Visual flexibility. Sliders, swatches, drag-and-drop, image-grid pickers, custom canvases, interactive maps, branded layouts. Gravity’s UI primitives are form fields. A DesignSetGo App’s UI primitive is “an HTML page Claude wrote.”

Pricing math that reads from your site. Want the quote to incorporate the customer’s saved address from their WordPress account? dsgo.user.current(). Want it to look up service availability from a custom post type? dsgo.posts.list({ type: 'service' }). Gravity does not see WordPress; it sees its own form database.

Branching logic that does not live in a tab. Branching in Gravity is a UI affordance and works fine for two or three rules. At ten rules it becomes hard to read and harder to debug. A DesignSetGo App’s branching is JavaScript, version-controlled, diff-able, and unit-testable.

How to decide

The honest version, the way I would tell an agency client.

If it is fundamentally a form with math at the end: Gravity. Or WPForms. Or Fluent. Any of the mature form-builders. Stop reading.

If it is fundamentally a configurator that produces a quote: DesignSetGo. The configurator UI is the whole experience; the quote is the byproduct. The form-builders are the wrong shape because they default to a stack-of-fields layout.

If it is both: use both. The DesignSetGo App is the configurator; on submit it pre-fills a Gravity form via the URL query string for the actual capture event. The configurator owns the experience; Gravity owns the data pipeline. This is the pattern Calculated Fields Form vs DesignSetGo covers in more detail.

The shorter version

Gravity Forms is the right answer when the form is the thing. A DesignSetGo App is the right answer when the experience is the thing and the form is a byproduct. Both are real categories. The mistake is using a hammer for a screw.

Further reading