S

SideButton Marketing Website Knowledge Module

Pricing — SideButton Marketing Website Knowledge Module

Pricing page for SideButton with three tiers: **Free** (Chrome extension install CTA), **Pro** (contact sales, "14-day trial" badge, marked as "Most Popular"), and **Team** (contact sales). The page …

Available free v1.0.3 Browser
$ sidebutton install sidebutton.com
Download ZIP
/pricing 95% confidence Verified 2026-02-21

What This Is

Pricing page for SideButton with three tiers: Free (Chrome extension install CTA), Pro (contact sales, "14-day trial" badge, marked as "Most Popular"), and Team (contact sales). The page is fully static with no billing/payment integration -- Pro and Team CTAs link to mailto addresses. Page layout: hero section with gradient text, 3-column pricing cards, social proof stats bar, feature comparison table (7 categories, ~30 rows), FAQ accordion (8 questions), and a bottom CTA section. A PricingToggle component (monthly/annual switch) exists in the codebase but is not imported or rendered on the current page -- all pricing display is static.

URL Patterns

PatternDescription
/pricingMain pricing page

Page Structure

+--[Header]-----------------------------------------------------+
|                                                                |
|  [1. HERO]                                                     |
|  H1: "Free forever. Upgrade when you're ready."               |
|  Subtitle: "SideButton is open source and always will be..."  |
|                                                                |
|  [2. PRICING CARDS — 3-column grid, md:grid-cols-3]            |
|  +----------+  +---[Most Popular banner]---+  +----------+     |
|  | FREE     |  | PRO                      |  | TEAM     |     |
|  | tier dot |  | tier dot + "14-day trial" |  | tier dot |     |
|  | "Free"   |  | "Contact Sales"          |  | "Contact"|     |
|  | desc     |  | desc                     |  | desc     |     |
|  | [Install |  | [Contact Sales] purple   |  | [Contact |     |
|  |  Free]   |  |  gradient CTA            |  |  Sales]  |     |
|  | 10 feats |  | 9 feats (4 highlighted)  |  | 8 feats  |     |
|  +----------+  +--------------------------+  | (3 high) |     |
|                                              +----------+     |
|  Fine print: "All plans include the full open-source core..." |
|                                                                |
|  [3. SOCIAL PROOF STATS BAR — border-t, 4 items + dividers]   |
|  Unlimited (skill packs) | 50+ (integrations) |               |
|  100% (local & private) | OSS (GitHub icon)                   |
|                                                                |
|  [4. COMPARE PLANS — feature comparison table]                 |
|  H2: "Compare plans"                                          |
|  Subtitle: "Everything in the free plan, plus more..."        |
|  Desktop: <table> with 4 columns (Feature, Free, Pro, Team)   |
|  Mobile: accordion <details> per category                     |
|  7 categories: AI Models(3), Core(5), Workflows(5),           |
|    Embed Buttons(3), Cloud Features(4), Team & Admin(5),      |
|    Support(4) = 29 feature rows total                         |
|                                                                |
|  [5. FAQ — bg-slate-50 background, 8 questions]               |
|  H2: "Frequently asked questions"                             |
|  Subtitle: "Everything you need to know about our plans"      |
|  8x <details> elements, first one open by default             |
|                                                                |
|  [6. BOTTOM CTA]                                               |
|  H2: "Still not sure?"                                        |
|  Subtitle: "Start free — no account, no credit card..."       |
|  [Install Free Extension] [Talk to Us]                        |
+--[Footer]-----------------------------------------------------+

Key Elements

Hero Section

ElementSelectorNotes
Hero sectionsection.pt-20.pb-4Contains heading and subtitle
Main headingh1.text-4xlText: "Free forever. Upgrade when you're ready."
Gradient text spanh1 span.gradient-text"Upgrade when you're ready." with green-to-orange gradient
Subtitlesection.pt-20 p.text-lgDescription of open-source and Pro features

Pricing Cards

ElementSelectorNotes
Cards containerdiv.grid.grid-cols-1.md\\:grid-cols-33-column on desktop, stacked on mobile
Free carddiv.pricing-card:nth-child(1)No .popular class
Pro carddiv.pricing-card.popularPurple border + shadow, "Most Popular" banner
Team carddiv.pricing-card:nth-child(3)No .popular class
"Most Popular" bannerdiv.popular-bannerPurple gradient banner at top of Pro card
Tier dot (Free)span.tier-dot.freeGreen dot (#10b981)
Tier dot (Pro)span.tier-dot.proPurple dot (#a855f7)
Tier dot (Team)span.tier-dot.teamTeal dot (#15C39A)
Badge "14-day trial"span.bg-amber-100.text-amber-700Amber pill badge, only on Pro card
Price display (Free)span.text-4xl.font-boldStatic text "Free"
Price display (Pro/Team)span.text-2xl.font-boldStatic text "Contact Sales"
Free CTA buttona.pricing-cta.freeDark bg (#0f172a), links to Chrome Web Store
Pro CTA buttona.pricing-cta.proPurple gradient, links to mailto:[email protected]?subject=Pro%20Plan
Team CTA buttona.pricing-cta.teamTeal gradient, links to mailto:[email protected]?subject=Team%20Plan
Feature listul.space-y-3Inside each .card-body
Included featureli svg.text-emerald-500Green checkmark for standard features
Highlighted featureli svg.text-purple-500Purple checkmark for upgraded features
Excluded featureli.opacity-40 svg.text-slate-300Dash icon, 40% opacity
Fine printp.text-sm.text-slate-400.mt-8"All plans include the full open-source core..."

Social Proof Stats Bar

ElementSelectorNotes
Stats sectionsection.py-12.border-tHorizontal stat blocks with dividers
Stat valuediv.text-2xl.font-bold"Unlimited", "50+", "100%", "OSS"
Stat labeldiv.text-xs.text-slate-500Description below each value
Dividersdiv.w-px.h-8.bg-slate-200Vertical lines, hidden md:block
GitHub iconsvg.w-5.h-5 in OSS statInline SVG of GitHub logo

Compare Plans Table

ElementSelectorNotes
Section headingh2 with text "Compare plans"Centered, bold
Subtitlep.text-slate-500 after heading"Everything in the free plan, plus more as you scale"
Desktop table wrapperdiv.hidden.md\\:block.overflow-x-autoHidden below md breakpoint
Desktop tablediv.hidden.md\\:block table.w-full4 columns, no striping
Table header rowthead tr.border-b"Feature", "Free" (green dot), "Pro" (purple dot), "Team" (teal dot)
Category headertd[colspan="4"] span.text-xs.uppercase"AI Models", "Core", etc.
Feature rowtbody tr.border-b.border-slate-100Feature name + 3 value cells
Check icon (Free)svg.text-emerald-500 in table cellGreen checkmark
Check icon (Pro)svg.text-purple-500 in table cellPurple checkmark
Check icon (Team)svg.text-\\[\\#15C39A\\] in table cellTeal checkmark
Dash (not included)span.text-slate-300 with &mdash;Em dash for missing features
Text valuespan.text-sm.text-slate-600 in celle.g., "Up to 5", "Unlimited", "7 days"
Mobile accordiondiv.md\\:hidden.space-y-3Shown only below md breakpoint
Mobile categorydetails.group.bg-whiteOne per category, first one open by default
Mobile expand iconsummary svg.group-open\\:rotate-180Chevron rotates 180deg when open
Mobile feature griddiv.grid.grid-cols-3 per row3-col layout: Free / Pro / Team values

FAQ Accordion

ElementSelectorNotes
FAQ sectionsection.py-16.bg-slate-50Gray background distinguishes from comparison
Section headingh2 with text "Frequently asked questions"Centered
Subtitlep.text-slate-500 after heading"Everything you need to know about our plans"
FAQ containerdiv.space-y-3 inside FAQ section8 <details> elements
FAQ itemdetails.group.bg-white.border.rounded-xlNative <details> element
FAQ questiondetails summary span.text-sm.font-semiboldClick target to toggle
FAQ chevronsummary svg.group-open\\:rotate-180Rotates when open
FAQ answerdetails div.px-5.pb-4 pText content, hidden when closed
FAQ 11st details in FAQ section"Is SideButton really free?" -- open by default
FAQ 22nd details"What does Pro add?"
FAQ 33rd details"Do I need my own API key?"
FAQ 44th details"Can I try Pro before committing?"
FAQ 55th details"What happens if I cancel?"
FAQ 66th details"Do you offer discounts?"
FAQ 77th details"What is the Team plan for?"
FAQ 88th details"Is my data safe?"

Bottom CTA

ElementSelectorNotes
CTA sectionsection.py-16.bg-white (last section before footer)White background
Headingh2 with text "Still not sure?"Centered
Subtitlep.text-slate-600.mb-6"Start free -- no account, no credit card. Upgrade anytime."
Install buttona.btn.btn-primary in CTA sectionLinks to Chrome Web Store
Talk to Us buttona.btn.btn-secondaryLinks to mailto:[email protected]

Data Model

Plan Tiers

FieldTypeDescription
namestringDisplay name: "Free", "Pro", "Team"
tier'free' | 'pro' | 'team'Machine key, used for CSS classes (.pricing-cta.free, .tier-dot.pro, etc.)
descriptionstringOne-sentence summary shown below price
price{ monthly: number; yearly: number } | nullPrice object. Currently null for all tiers -- not passed from page data
cta.labelstringButton text: "Install Free Extension" or "Contact Sales"
cta.hrefstringButton link: Chrome Web Store URL or mailto:[email protected]?subject=<Plan>%20Plan
popularbooleanIf true, renders "Most Popular" banner and purple border. Only Pro
badgestring | undefinedOptional pill badge text. Pro has "14-day trial"
featuresFeature[]Array of feature items displayed in card
features[].textstringFeature description text
features[].includedbooleantrue = green/purple check; false = dash + 40% opacity
features[].highlightboolean | undefinedtrue = purple check + bold text (used for key differentiators)

Comparison Table Data

FieldTypeDescription
categorystringCategory group name: "AI Models", "Core", "Workflows", etc.
rowsFeatureRow[]Feature rows within this category
rows[].namestringFeature name displayed in first column
rows[].freestring | booleanFree tier value. true = check, false = dash, string = text value
rows[].prostring | booleanPro tier value. Same type logic as free
rows[].teamstring | booleanTeam tier value. Same type logic as free

FAQ Data

FieldTypeDescription
qstringQuestion text shown in <summary>
astringAnswer text shown in collapsed <div>, plain text (no markdown/HTML)

Plan Feature Lists (Current Content)

PlanFeature CountHighlightedCTA Target
Free100Chrome Web Store
Pro94 (Claude/GPT-4o, Pro library, unlimited custom, unlimited runs)mailto:[email protected]?subject=Pro%20Plan
Team83 (workspace, team library, RBAC)mailto:[email protected]?subject=Team%20Plan

Comparison Table Categories (Current Content)

CategoryRowsKey Differentiators
AI Models3Free: standard model; Pro/Team: top-tier (Claude, GPT-4o, Gemini Pro); all: BYOK
Core5All plans identical: chat, browser automation, OSS core, recording, MCP
Workflows5Free: 5 custom, 100 runs/mo; Pro/Team: unlimited + pro library + early access
Embed Buttons3Free: community only; Pro/Team: pro + custom buttons
Cloud Features4Free: none; Pro: sync, scheduled, webhooks, 90-day history; Team: unlimited history
Team & Admin5Team only: workspace, team library, RBAC, audit log, SSO/SAML
Support4Free: community; Pro: + email; Team: + priority + onboarding

States & Variations

Pricing Toggle (Component Exists but NOT Rendered)

The PricingToggle component (/components/pricing/PricingToggle.astro) exists in the codebase but is not imported on the pricing page. If wired in, it would:

  • Toggle data-active attribute between "monthly" and "yearly" on #pricing-toggle
  • Swap .active class between Monthly/Yearly labels
  • Update elements with class .price-amount using data-monthly / data-yearly attributes
  • Toggle visibility of .yearly-note elements
  • Toggle knob slides right (green bg) when annual is active
  • Show -20% save badge next to "Yearly" label (always visible, green pill)

Current state: all pricing displays are static text ("Free" or "Contact Sales") with no dynamic price switching.

Card Hover Effects

  • All cards: translateY(-4px) lift + box-shadow: 0 20px 40px rgba(0,0,0,0.08) on hover
  • Popular card at rest: purple border (#a855f7) + purple shadow (rgba(168,85,247,0.12))
  • Popular card on hover: intensified purple shadow (rgba(168,85,247,0.18))
  • CTA buttons: translateY(-1px) lift + colored shadow on hover
  • Transitions: transform 0.2s ease, box-shadow 0.2s ease on cards; all 0.15s ease on CTAs

Popular Card Treatment

  • Purple border: border-color: #a855f7
  • "Most Popular" banner: purple gradient header bar (#a855f7 to #7c3aed), white uppercase text
  • Purple CTA button: gradient bg (#a855f7 to #7c3aed), darkens on hover
  • Purple checkmarks for highlighted features (vs green for standard)

FAQ Accordion

  • First FAQ item (idx === 0) has open attribute by default
  • Native <details> / <summary> elements -- no JavaScript required for open/close
  • Chevron icon rotates 180 degrees when open via group-open:rotate-180 Tailwind class
  • White background cards on bg-slate-50 section background
  • Multiple items can be open simultaneously (no exclusive/radio behavior)

Comparison Table Responsive Behavior

  • Desktop (md: and above): full <table> element, 4 columns, hidden class hidden md:block
  • Mobile (below md): accordion <details> per category, class md:hidden
  • Mobile shows 3-column grid (Free/Pro/Team) per feature row within each accordion
  • First mobile accordion (idx === 0) is open by default
  • Desktop table wrapped in overflow-x-auto for safety, though content fits within max-w-4xl

Card Alignment

  • Cards use items-start on grid so they align to top (cards have different heights)
  • Description box has min-height: 3.75rem to keep CTA buttons aligned across cards
  • Feature list has flex-grow to push content down evenly

Common Tasks

1. Verify pricing page loads with all tiers

  • Navigate to /pricing
  • Assert h1 contains "Free forever"
  • Assert 3 .pricing-card elements exist
  • Assert .pricing-card.popular exists (Pro card)
  • Assert "Most Popular" banner text is visible

2. Verify pricing card content and CTAs

  • Check Free card: price text "Free", CTA "Install Free Extension" links to https://chromewebstore.google.com/detail/sidebutton/odaefhmdmgijnhdbkfagnlnmobphgkij
  • Check Pro card: price text "Contact Sales", CTA "Contact Sales" links to mailto:[email protected]?subject=Pro%20Plan
  • Check Team card: price text "Contact Sales", CTA "Contact Sales" links to mailto:[email protected]?subject=Team%20Plan
  • Verify feature counts: Free = 10 items, Pro = 9, Team = 8
  • Verify Pro has "14-day trial" badge (amber pill)

3. Verify comparison table content

  • Scroll to "Compare plans" heading
  • On desktop: assert table is visible with 4 column headers (Feature, Free, Pro, Team)
  • Verify 7 category headers exist: "AI Models", "Core", "Workflows", "Embed Buttons", "Cloud Features", "Team & Admin", "Support"
  • Spot-check values: "Custom workflows (YAML)" shows "Up to 5" / "Unlimited" / "Unlimited"
  • Verify check icons use correct colors: green (Free), purple (Pro), teal (Team)

4. Expand and collapse FAQ items

  • Scroll to "Frequently asked questions"
  • Assert first FAQ ("Is SideButton really free?") is open by default
  • Click second FAQ summary ("What does Pro add?") -- assert its answer becomes visible
  • Click first FAQ summary -- assert it closes
  • Verify all 8 FAQ items can be independently toggled

5. Verify comparison table mobile layout

  • Resize to mobile viewport (below 768px)
  • Assert desktop table is hidden, mobile accordion is visible
  • Assert first category accordion ("AI Models") is open by default
  • Expand another category -- verify 3-column grid shows Free/Pro/Team values
  • Verify multiple categories can be open simultaneously

6. Verify bottom CTA and links

  • Scroll to "Still not sure?" section
  • Assert "Install Free Extension" button links to Chrome Web Store
  • Assert "Talk to Us" button links to mailto:[email protected]
  • Verify social proof stats bar shows 4 items: "Unlimited", "50+", "100%", "OSS"

Tips

  • All pricing is currently static -- there is no billing system, payment gateway, or Stripe integration. Pro/Team CTAs open a mailto link, not a checkout flow.
  • The PricingToggle component exists at /components/pricing/PricingToggle.astro with full monthly/yearly switching logic, but it is not imported on the page. If prices are added later, this component is ready to wire in -- it looks for .price-amount, .price-period, and .yearly-note class elements.
  • The comparison table uses two completely separate DOM trees for desktop (table) and mobile (accordion) -- when testing content changes, both must be verified.
  • FAQ items use native <details> / <summary> HTML elements with no JavaScript. Open/close is handled by the browser. Multiple items can be open at the same time.
  • Highlighted features (purple checkmarks + bold text) are controlled by the highlight: true flag in the feature data. Pro has 4 highlighted, Team has 3, Free has 0.
  • Card vertical alignment is carefully controlled: description-box has a min-height to keep CTAs level, and items-start on the grid means cards can have different heights without stretching.
  • The popular card's purple treatment is all CSS: border color, box-shadow, banner gradient, and CTA gradient. No JavaScript is involved.
  • Social proof stats bar dividers (w-px h-8 bg-slate-200) are hidden on mobile via hidden md:block.

Gotchas

  • Two "Contact Sales" links, two "Install Free Extension" links: The Pro and Team CTAs both say "Contact Sales" but have different mailto subject lines (Pro%20Plan vs Team%20Plan). The bottom CTA also has "Install Free Extension". When targeting by link text, use positional selectors or check href attribute to disambiguate.
  • No pricing toggle on page: Despite PricingToggle.astro existing in the components folder, it is not rendered. Tests should NOT expect a monthly/annual toggle to be present. The toggle script targets .price-amount elements which do not exist on the current page.
  • Desktop/mobile comparison are separate DOM trees: Content is duplicated -- the desktop <table> and mobile accordion <details> elements render the same data independently. A content bug could appear in only one view. Always test both breakpoints.
  • First FAQ and first mobile category are pre-opened: Both the first FAQ item and the first comparison accordion on mobile have open attribute set at build time (open={idx === 0}). This is a server-rendered attribute, not JavaScript-controlled.
  • Card hover transitions may interfere with click targeting: Cards lift 4px on hover (translateY(-4px)) with a 200ms transition. Fast automated clicks right after hover may target the wrong position if the card is still animating.
  • Comparison table check icons have different colors per tier: Free = text-emerald-500 (green), Pro = text-purple-500, Team = text-[#15C39A] (teal, custom Tailwind value). The Team color uses an arbitrary Tailwind value, not a named color class, which makes it harder to grep for.