# IM-Press vs Beaver Builder + UABB Pro — Feature Parity Audit

**Date:** 2026-04-29
**Plugin version at audit:** v4.6.5
**Source corpus:** 4-hitech.com production database — `full-wp-2026-04-26-1854/database.sql.gz`
**Sample size:** 6,168 BB+UABB module instances across 302 published BB pages, 58 distinct module types

> **Why this audit exists.** IM-Press's product promise is to be a complete drop-in replacement for BB + BB Theme + UABB Pro, with AI features baked in. To know whether we're actually there yet, we need to compare against a real production BB site, not a marketing checklist. 4-hitech.com is the largest BB site in the fleet — every page built with BB+UABB+BB Theme over several years — so it's a representative sample of how those tools get used in the wild.

---

## Headline finding

| Lens | Result |
|---|---|
| Module-name parity | **98.6% covered** — IM-Press has a same-named block for 51 of 58 BB module types |
| Capability-depth parity | **Significant gaps** — when we look at *settings BB users actually configure in production*, IM-Press blocks are 3–10× shallower across the board |
| Truly missing blocks | **3 modules:** audio (1 instance), ihover image-hover-effects (10), widget-area/sidebar (14) |

**Reading the result.** "We have an `imp/info-box` and BB has an `info-box`" is not the same as "feature parity." Real BB users configure separator-under-title on 100% of info-boxes; the IM-Press info-box has no such attribute. There are dozens of similar deltas. The product gap is real, but it's almost entirely in the *depth* of existing blocks, not in the *count* of missing ones.

---

## Module-type frequency, ranked

The top 12 module types account for ~85% of all BB usage. The remaining 46 types are long-tail (≤2% each). Any prioritization should weight by frequency.

| Rank | BB module | Instances | % of usage | IM-Press block |
|---:|---|---:|---:|---|
| 1 | rich-text | 973 | 15.8% | `imp/rich-text` |
| 2 | spacer-gap | 962 | 15.6% | `imp/spacer` |
| 3 | uabb-photo | 748 | 12.1% | `imp/photo` |
| 4 | heading | 654 | 10.6% | `imp/heading` |
| 5 | photo | 623 | 10.1% | `imp/photo` |
| 6 | info-box | 359 | 5.8% | `imp/info-box` |
| 7 | uabb-heading | 346 | 5.6% | `imp/heading` |
| 8 | icon | 268 | 4.3% | `imp/icon` |
| 9 | callout | 176 | 2.9% | `imp/callout` |
| 10 | button | 150 | 2.4% | `imp/button` |
| 11 | numbers | 123 | 2.0% | `imp/numbers` |
| 12 | uabb-callout | 114 | 1.8% | `imp/callout` |
| 13 | uabb-beforeafterslider | 76 | 1.2% | `imp/before-after` |
| 14 | modal-popup | 65 | 1.1% | `imp/modal` |
| 15 | separator | 64 | 1.0% | `imp/divider` |

Full ranking lives in `docs/research/data/bb-module-frequency.json`.

---

## Cross-cutting capability gaps

These aren't single-block issues — they're patterns missing across many or all IM-Press blocks. Closing them is the highest-leverage work.

### 1. Universal entrance animations
- **BB:** every module has `animation` (fade-in, slide-left/right/up/down, zoom-in, etc.) + `animation_delay` settings
- **Production usage:** populated on **70–100%** of all BB instances (rich-text 69%, photo 75%, heading 53%, icon 61%, button has icon_animation on 91%)
- **IM-Press:** has a separate Block Animations module (per CLAUDE.md), but it's not wired into individual block settings UIs. BB users get this in the same settings panel as the block content, on every module.
- **Estimate:** small foundational PR. Add `animation` + `animationDelay` attrs to every block via a shared trait, render via existing Block Animations classes.

### 2. Universal link target + nofollow
- **BB:** every module with a link (`heading`, `button`, `icon`, `photo`, `callout`, `info-box`) exposes `link_target` and `link_nofollow`
- **Production usage:** populated on **100% of headings**, 100% of buttons, 75% of photos, etc.
- **IM-Press:** only `imp/button` has `target`. Others either lack a link entirely or have a URL but no target/nofollow.
- **Estimate:** add `linkTarget` (`_self`/`_blank`) and `linkRel` (`""`/`"nofollow"`/`"sponsored"`/`"ugc"`) to every block with a link. ~10 blocks.

### 3. Hover-state styling attributes
- **BB:** modules expose hover variants — `hover_opacity`, `hover_color`, `title_hover`, `back_*` (flip-box back face), etc.
- **Production usage:** 100% of uabb-photos have hover_opacity configured. 74% of photos have title_hover set.
- **IM-Press:** has `hoverColor` on `imp/icon` only, plus enum-style `hoverEffect: 'shadow'|'scale'|'border'` on `imp/callout`/`imp/photo`. Not granular.
- **Estimate:** prioritize on the visual blocks — photo, info-box, callout, flip-box, icon, button. Add hover-color + hover-opacity attrs.

### 4. Per-breakpoint alignment
- **BB:** modules expose `alignment` plus `r_alignment` (responsive override) plus `r_custom_alignment` (custom mobile-only)
- **Production usage:** 100% on heading, 100% on button, 100% on icon
- **IM-Press:** uses Gutenberg's native align (wide/full) + textAlign on heading. No mobile-specific alignment override.
- **Estimate:** add `alignmentMobile` attr to text-bearing blocks, generate mobile-scoped CSS rule. Already have responsive infrastructure (`class-responsive.php`).

### 5. Per-breakpoint typography (lower priority)
- **BB:** every typography knob (font_size, font_family, font_weight, line_height, letter_spacing) has `_large` / `_medium` / `_responsive` variants
- **Production usage:** dense — heading has 13 typography fields populated on average
- **IM-Press:** Gutenberg's typography panel handles base values. No per-breakpoint overrides on attribute level.
- **Note:** This is the biggest single "gap" in raw setting count, but it's also the lowest-impact for a product comparison — most page builders, including the latest Gutenberg, are moving toward fluid typography rather than per-breakpoint controls. **Recommend deferring.**

---

## Block-level depth gaps (top 15 by frequency)

For each high-frequency block, the depth audit found these populated-in-production fields that IM-Press has no attribute for. Sorted by impact (frequency × usage rate).

### `imp/heading` (1,000+ BB instances → 8 attrs)
- **Missing:** link + target + nofollow, mobile alignment override, entrance animation, subheading + separator (UABB heading offers this, used in 70% of uabb-heading instances)
- **Effort:** medium (subheading is a new sub-attribute set)

### `imp/info-box` (359 BB instances → 6 attrs vs BB's 106 settings)
- **Missing:** image-or-icon toggle (BB uses both interchangeably), photo position (above/left/right/below), title separator (`enable_separator` populated 100%), responsive border, image_type variants
- **Effort:** **large** — this block is the most under-built relative to BB usage

### `imp/callout` (290 BB instances → 11 attrs vs BB's 89 settings)
- **Missing:** title_tag (h1–h6), photo_position, icon_position, icon_size, vertical_align, separator under title, link_target
- **Effort:** medium

### `imp/button` (160 BB instances → 11 attrs)
- **Missing:** `click_action` variants (link/lightbox/email/phone/scroll-to-anchor), icon_animation, button_transition, custom_width, link_nofollow
- **Effort:** medium — `click_action` variants are individually small but combined add real value

### `imp/numbers` (123 BB instances → 14 attrs)
- **Missing:** number_type variants (digits / circle progress / bar / pie), number_position (above/below label), animation_speed, delay, circle_dash_width
- **Effort:** medium — circle/bar variants are visual rebuilds

### `imp/before-after` (76 BB instances → 6 attrs)
- **Missing:** handle_back_overlay, initial_offset, move_on_hover, slider_label_position, slider_vertical_label_position
- **Effort:** small — these are slider behavior knobs

### `imp/modal` (65 BB instances → 5 attrs vs BB's 66 settings)
- **Missing:** content_type variants (text/video/iframe/inline-html), youtube_player_controls, youtube_related_videos, video_autoplay, preview_modal toggle, title_alignment
- **Effort:** medium

### `imp/divider` (90 BB instances → 5 attrs)
- **Missing:** align (left/center/right), explicit height, custom_width, opacity
- **Effort:** small

### `imp/flip-box` (22 BB instances → 5 attrs vs BB's 62 settings)
- **Missing:** front + back face background image (position, repeat, display, src), all back-face typography
- **Effort:** medium

### `imp/image-carousel` (slideshow, 21 BB instances → 10 attrs)
- **Missing:** click_action (lightbox/link/none), transition (slide/fade), transitionDuration, height, protect (right-click), source (uploaded/external)
- **Effort:** small

### `imp/fancy-text` (18 BB instances → 6 attrs)
- **Missing:** effect_type (typing/loading/scrolling/wave), typing_speed, back_speed, back_delay, enable_loop, show_cursor, cursor_text
- **Effort:** medium — multiple animation modes

### `imp/video` (15 BB instances → 8 attrs)
- **Missing:** video_lightbox toggle, sticky_on_scroll, play_pause controls UI, timer overlay
- **Effort:** small-medium

### `imp/ribbon` (15 BB instances → 5 attrs vs BB's 30 settings)
- **Missing:** ribbon_width, ribbon_align, stitching, shadow, bg_type, text_tag_selection
- **Effort:** small

### `imp/photo` (1,371 BB instances → 12 attrs)
- **Missing:** photo_source (media-library / external-URL / Unsplash), opacity, hover_opacity, grayscale (image filter), title_hover overlay
- **Effort:** medium

### `imp/icon-group` (27 BB instances → 6 attrs)
- **Missing:** explicit alignment, animation
- **Effort:** small

---

## Truly missing blocks

Blocks BB+UABB has that IM-Press has no equivalent for at all.

| Block | BB module | Instances | Recommendation |
|---|---|---:|---|
| **Image hover effects** | `ihover` (UABB) | 10 | **Build.** CSS-driven photo overlay effects (caption-on-hover, slide-up text, fade-in title). Closes a recurring "make this photo do something on hover" need. Frontend-only, no JS dependency. |
| **Audio embed** | `audio` | 1 | **Build (cheap).** HTML5 audio block with native controls + cover image + provider auto-detect (SoundCloud, Spotify already in `imp/embed`, but no local-file or generic-URL audio). |
| **Sidebar / widget area** | `sidebar`, `widget` | 14+8=22 | **Defer.** BB sidebar embeds a registered widget area at any insertion point. Closing this requires either: (a) a `core/legacy-widget` wrapper block, which Gutenberg already provides, or (b) IM-Press's own widget-host block. Sidebars are an aging pattern in modern WP design — most production sites don't need them. Not worth a v4.6.6 slot. |

---

## Out-of-scope but tracked: BB Theme + BB Theme Builder parity

This audit covered BB+UABB *modules*. It did not look at:

- **BB Theme** — header/footer/archive/single layouts as theme templates
- **BB Theme Builder** — global header/footer regions with conditional display rules (show on X post type, hide on Y page, etc.)
- **Saved rows and modules** — reusable page sections
- **Global modules** — single source of truth for content edited once and used many places

IM-Press has Page Templates (`class-page-templates.php`) that handle some of this, plus the Passthrough theme as a chassis. There's also Site Config for branding. But there's no equivalent to BB Theme Builder's *global header/footer regions with conditional display rules*.

**Open question for John:** is BB Theme Builder parity a v4.6.7+ track, or is it explicitly out of scope? The Passthrough-is-invisible design (each page brings its own header/footer) is intentionally opposite to BB Theme Builder. Worth deciding before we build anything in this direction.

---

## Recommended scope for v4.6.6

Three tracks, ranked by leverage. Pick what fits the release.

### Track A — Cross-cutting infrastructure (highest leverage)
1. **Universal entrance animation system** — `animation` + `animationDelay` attrs on every block, rendered through a shared trait that wires into the existing Block Animations module
2. **Universal link controls** — `linkTarget` + `linkRel` attrs on every block with a link
3. **Per-breakpoint alignment helper** — `alignmentMobile` attr on text-bearing blocks
4. **Hover-state attribute set** — standard `hoverColor`, `hoverOpacity`, `hoverBackground` on visual blocks (photo, info-box, callout, flip-box, icon, button)

**Estimated effort:** 1 sprint. Each is a small PR that touches many blocks.
**Production-usage coverage:** addresses 70–100% of BB instances on a single feature.

### Track B — High-frequency block depth (medium leverage)
Order by frequency × current shallowness:
1. `imp/info-box` — image/icon toggle, photo position, separator
2. `imp/callout` — title_tag, photo_position, separator, vertical_align
3. `imp/heading` — link with target/nofollow, subheading + separator
4. `imp/button` — click_action variants, custom_width, nofollow
5. `imp/numbers` — number_type variants (circle/bar/digits)
6. `imp/photo` — photo_source modes, hover_opacity, grayscale
7. `imp/modal` — content_type variants (video/iframe), youtube controls
8. `imp/divider` — align, height, custom_width, opacity

**Estimated effort:** 2 sprints. Each block is its own modest PR.

### Track C — Net-new blocks (smaller leverage, but completes the pitch)
1. `imp/image-hover` — CSS overlay effects (caption-on-hover, slide-up, fade-in)
2. `imp/audio` — HTML5 audio block with cover + controls + URL/file source

**Estimated effort:** 0.5 sprint.

---

## Method notes

- BB layout data lives in `wp_postmeta._fl_builder_data` as PHP-serialized stdClass tree (rows → column-groups → columns → modules)
- Each module node has a `settings` stdClass with all configured fields
- Production frequency is the count across all 6,168 module instances
- "Populated" means the field is set to something other than empty string, `'0'`, `0`, `null`, `'#'`, or empty array/object — i.e., the user actually touched it
- Capability-miss = a populated field used by ≥10% of instances of that module type, where the IM-Press equivalent block has no attribute matching the field name (after camelCase ↔ snake_case normalization and a small alias table for renames like `heading` → `text`, `tag` → `level`)

Raw data (kept under `docs/research/data/` for future re-runs):
- `bb-module-frequency.json` — full 58-type frequency table
- `bb-module-settings-samples.json` — settings shape per module type
- `imp-block-attrs.json` — IM-Press block attribute schemas
- `bb-vs-imp-depth-audit.json` — full per-module gap rows

---

## Decisions needed from John before v4.6.6 starts

1. **Track scope:** A only? A + B? All three?
2. **Universal animation system:** confirm we should wire entrance animations into per-block settings, not leave them as a separate Block Animations module
3. **Per-breakpoint typography:** confirm we're deferring (matches modern fluid-type direction)
4. **BB Theme Builder track:** v4.6.7+, or explicitly out of scope?
5. **Sidebar / widget area:** confirm defer
