Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions .agents/product-marketing-context.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Product Marketing Context

*Last updated: 2026-05-10*

## Product Overview
**One-liner:** Capgo helps Capacitor teams ship live app updates, fixes, and assets without waiting for app store review.
**What it does:** Capgo provides an open-source updater, cloud delivery, channels, rollbacks, analytics, device logs, and native build support for Capacitor apps. Teams use it to move web-layer changes fast while keeping native changes on the normal App Store and Google Play review path.
**Product category:** Capacitor live updates, OTA updates, CodePush alternative, Appflow alternative.
**Product type:** SaaS developer platform with open-source client/plugin.
**Business model:** Usage-based subscriptions with free trial, paid plans, credits/overages, enterprise options, and optional premium support.

## Target Audience
**Target companies:** Indie apps, startups, agencies, and mobile teams running production Capacitor apps.
**Decision-makers:** Founder-developers, mobile leads, engineering managers, CTOs, and technical founders.
**Primary use case:** Ship urgent JavaScript, CSS, copy, and asset fixes without waiting days for store approval.
**Jobs to be done:**
- Recover quickly from production bugs and bad releases.
- Roll out updates safely by channel, audience, and version.
- Replace aging or shutting-down live update platforms without rebuilding the release pipeline.
**Use cases:**
- Emergency bug fixes.
- Staged rollouts and rollbacks.
- Appflow migration.
- Plugin and native build workflows.

## Personas

| Persona | Cares about | Challenge | Value we promise |
|---------|-------------|-----------|------------------|
| Solo developer | Speed, low cost, simple setup | App store delays slow fixes and learning | Start free, ship first update quickly, pay only when it proves value |
| Mobile lead | Release safety, observability, team workflow | Bad deploys create support load and uncertainty | Channels, device logs, analytics, rollback, and predictable usage limits |
| CTO / founder | Business continuity, cost, vendor risk | Proprietary tools can shut down or become too expensive | Open-source updater, sustainable pricing, transparent infrastructure, migration path |
| Enterprise buyer | Compliance, support, SLAs, procurement | Live updates must fit governance and uptime expectations | SSO, custom domain, SOC 2 path, SLA, direct support, enterprise terms |
Comment thread
coderabbitai[bot] marked this conversation as resolved.

## Problems & Pain Points
**Core problem:** Production mobile fixes often wait on app store review even when the broken code is web-layer JavaScript, CSS, copy, or assets.
**Why alternatives fall short:**
- Store-only releases are too slow for urgent fixes.
- All-in-one platforms can be expensive, rigid, or discontinued.
- DIY live update systems add maintenance and compliance risk.
**What it costs them:** Lost revenue, bad reviews, support volume, delayed campaigns, engineering context switching, and reduced trust in release velocity.
**Emotional tension:** Teams fear being stuck with a bad release in users' hands and no fast, controlled way to recover.

## Competitive Landscape
**Direct:** Ionic Appflow, CodePush-style live update platforms, Capawesome live updates.
**Secondary:** Custom OTA infrastructure, CI/CD-only workflows, native-only release pipelines.
**Indirect:** Waiting for store review, manual support workarounds, delaying risky releases.

## Differentiation
**Key differentiators:**
- Built specifically for Capacitor.
- Open-source updater and transparent backend ecosystem.
- Channels, rollbacks, analytics, device logs, and native build support.
- Sustainable pricing from indie through enterprise.
- Appflow migration positioning and human support.
**How we do it differently:** Capgo focuses on update delivery and release control rather than forcing teams into an all-in-one CI/CD suite.
**Why that's better:** Teams keep their existing build pipeline while adding a faster recovery path for web-layer changes.
**Why customers choose us:** Fast setup, lower cost than enterprise suites, open-source trust, Appflow continuity, and real production observability.

## Objections

| Objection | Response |
|-----------|----------|
| Is this store compliant? | Native changes still go through store review; Capgo is positioned for web-layer updates, assets, configuration, and controlled rollouts. |
| What if usage grows unexpectedly? | Plans expose MAU, bandwidth, storage, build time, and credit-based overages so teams can scale by real usage. |
| Can we trust a smaller vendor? | Capgo emphasizes open source, transparent infrastructure, bootstrapped sustainability, public status, and human support. |

Comment thread
coderabbitai[bot] marked this conversation as resolved.
**Anti-persona:** Teams that need to bypass store rules for native-code changes or want a full proprietary CI/CD suite to replace their entire release process.

## Switching Dynamics
**Push:** Store review delays, Appflow shutdown concerns, high platform cost, poor observability, brittle manual recovery.
**Pull:** Fast fixes, controlled rollout, rollback, open-source trust, lower entry price, migration help.
**Habit:** Existing CI/CD setup, store-only release muscle memory, fear of changing production update flow.
**Anxiety:** Compliance, migration complexity, unexpected usage bills, vendor longevity, support quality.

## Customer Language
**How they describe the problem:**
- "We cannot wait days for app review when production is broken."
- "We need to ship a fix without forcing a full app release."
- "We need an Appflow alternative that will not disappear."
**How they describe us:**
- "Live updates for Capacitor."
- "CodePush for Capacitor."
- "A way to patch the app safely after release."
**Words to use:** live updates, OTA updates, production fix, rollback, channels, device logs, Appflow alternative, open source, store-compliant, no credit card.
**Words to avoid:** bypass, hack, unlimited everything, guaranteed approval.
**Glossary:**
| Term | Meaning |
|------|---------|
| Live update | A web-layer update delivered to an installed app without a store release |
| Channel | A rollout target such as production, beta, staging, or a customer segment |
| Rollback | Reverting users to a previous known-good bundle |
| MAU | Monthly active users used for plan sizing |

## Brand Voice
**Tone:** Direct, practical, developer-friendly, transparent.
**Style:** Plain-language technical marketing with concrete proof and minimal hype.
**Personality:** Fast, honest, capable, pragmatic, community-minded.

## Proof Points
**Metrics:** Public pages cite large-scale update volume, apps served, global infrastructure, uptime, and recognizable customer logos.
**Customers:** Public logo cloud and pricing page examples include apps such as Nana, Snowqueen, Shelf, Suez, and Janitor.
**Testimonials:** Existing testimonial sections highlight migration speed, support responsiveness, open-source trust, and cost savings.
**Value themes:**

| Theme | Proof |
|-------|-------|
| Speed | Ship fixes in minutes instead of waiting for review |
| Safety | Channels, staged rollout, rollback, device logs |
| Trust | Open-source updater, transparent backend, status/history |
| Cost control | Free trial, usage-based plans, credit-based overages |
Comment thread
coderabbitai[bot] marked this conversation as resolved.

## Goals
**Business goal:** Convert more product-page visitors into free trials and qualified enterprise conversations.
**Conversion action:** Start free trial, view live update product details, or contact enterprise/support.
**Current metrics:** Not captured in repo context.
52 changes: 34 additions & 18 deletions apps/shared/copy/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1310,9 +1310,14 @@ const messages = {
help_customers_with_app_issues: 'Help customers with app issues efficiently',
here: 'here.',
hero_secondary_cta: 'See live updates',
hero_subtitle_line2: 'Protect users with channels, rollback, logs, and CLI checks.',
hero_subtitle_part1: 'Ship JS and asset fixes in minutes.',
hero_highlight_capacitor: 'without app review',
hero_subtitle_line2: 'Protect users with channels, rollback, device logs, and CLI safety checks.',
hero_subtitle_part1: 'Ship JavaScript, CSS, copy, and asset fixes in minutes.',
hero_subtitle_part2: '',
hero_trust_signal_open_source: 'Open-source updater',
hero_trust_signal_rollback: 'Rollback protection',
hero_trust_signal_store_review: 'Store-compliant native releases',
hero_trust_signal_trial: '14-day trial, no card',
high_enterprise_response: '2 business hours<br />Monday - Friday',
high_priority_response: '2 hours<br />24/7 × 365',
high_support_desc:
Expand Down Expand Up @@ -1343,12 +1348,12 @@ const messages = {
'Build as usual, upload changed JavaScript and assets with the CLI or API, and target the channels that should receive them. Start automatic in 5 minutes or go manual for advanced release logic.',
home_global_infrastructure_desc: 'Powered by serverless edge computing and distributed databases across 300+ cities and 13,000+ networks for ultra-fast global delivery.',
home_global_network_label: 'Global Network',
home_hero_outcome_compliance_desc: 'Update JavaScript, CSS, copy, configuration, and assets while native code keeps going through normal App Store and Play review.',
home_hero_outcome_compliance_title: 'Keep store review for native changes',
home_hero_outcome_observe_desc: 'Track device status, adoption, failures, and bundle history so support and engineering can explain every release.',
home_hero_outcome_observe_title: 'Prove what shipped',
home_hero_outcome_recover_desc: 'Push urgent fixes without waiting days for review, then roll back fast if a rollout does not behave as expected.',
home_hero_outcome_recover_title: 'Recover production faster',
home_hero_outcome_compliance_desc: 'Ship only web-layer changes through Capgo while native code, plugins, and permissions keep the normal App Store and Play path.',
home_hero_outcome_compliance_title: 'Stay inside store rules',
home_hero_outcome_observe_desc: 'Track adoption, failures, bundle history, and device state so support and engineering know exactly what each user received.',
home_hero_outcome_observe_title: 'Know every device state',
home_hero_outcome_recover_desc: 'Patch urgent JavaScript, CSS, copy, and asset issues without waiting days for review, then stop a rollout if signals look wrong.',
home_hero_outcome_recover_title: 'Patch incidents in minutes',
home_important_update_badge: 'Important Update',
home_latency_from_users: 'From 95% of users',
home_locations_active: '300+ Locations Active',
Expand Down Expand Up @@ -1401,7 +1406,7 @@ const messages = {
instant_updates_for_capacitor_apps: 'Live updates for Capacitor apps',
instant_updates_for_capacitor_apps_description:
'When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.',
instant_updates_for_your: 'Ship live updates to your',
instant_updates_for_your: 'Fix Capacitor bugs',
instant_version_switching: 'Instant version switching',
integrate_identity_provider_mfa: 'Integrate with your identity provider and enforce multi-factor authentication across your organization.',
integration_and_api: 'Integration & API',
Expand Down Expand Up @@ -2006,8 +2011,9 @@ const messages = {
plan_payasyougo_desc: 'Best for Enterprise with millions of users',
plan_solo_desc: 'Best for independent developers',
plan_team_desc: 'Best for medium enterprises',
plans_that_scale_with_your_business: 'Start Free. Scale to Millions.',
plans_that_scale_with_your_business_description: "Every dollar saved extends your runway. No credit card required. Upgrade when you're ready.",
plans_that_scale_with_your_business: 'Pricing that scales with release risk and real usage.',
plans_that_scale_with_your_business_description:
'Start with the coverage your app needs today, prove the update workflow in production, and upgrade only when active users, build minutes, or compliance needs grow.',
platform_compliance: 'Platform compliance.',
platform_compliance_desc: 'Any activities that are deemed unacceptable by the platforms used by the Capgo Site and Services.',
platform_independence: 'Platform Independence',
Expand All @@ -2023,13 +2029,23 @@ const messages = {
practicing_what_we_preach: 'Practicing What We Preach',
premium_plugin_suite: 'Premium Plugin Suite',
pricing: 'Pricing',
pricing_description: 'Move forward with confidence. Capgo is the enterprise-grade cloud platform for Capacitor applications.',
pricing_proof_risk_text: 'Pick a plan that covers the apps and active users that need emergency update coverage, not a bloated suite you will not use.',
pricing_proof_risk_title: 'Start by release risk',
pricing_proof_upgrade_text: 'Move up when you need higher limits, more native build time, enterprise support, or a stronger compliance path.',
pricing_proof_upgrade_title: 'Upgrade when process requires it',
pricing_proof_usage_text: 'Usage-based bandwidth, storage, MAU, and build credits make the buying conversation concrete for finance and engineering.',
pricing_proof_usage_title: 'Scale by real usage',
pricing_description: 'Choose the Capgo plan that protects your Capacitor release flow today, then scale by real users, bandwidth, storage, and support needs.',
pricing_hero_signal_no_auto_bill: 'No automatic billing until confirmation',
pricing_hero_signal_no_card: 'No credit card to start',
pricing_hero_signal_trial: '14-day free trial',
pricing_plan_card_trial_note: 'No card required. Test on a real app before paying.',
pricing_plan_enterprise_fit: 'Best when procurement, SSO, custom domain, SLA, or compliance reviews are part of the release process.',
pricing_plan_maker_badge: 'Most teams start here',
pricing_plan_maker_fit: 'Best when one production app needs predictable update coverage and faster recovery from release issues.',
pricing_plan_solo_fit: 'Best when you are validating live updates on a small app or replacing manual hotfix workflows.',
pricing_plan_start_trial_aria: 'Start {name} trial',
pricing_plan_team_fit: 'Best when multiple teammates need higher limits, priority support, and more room for production rollouts.',
pricing_proof_risk_text: 'Choose the plan by how painful a broken mobile release would be, then add limits only when your user base or workflow needs them.',
pricing_proof_risk_title: 'Buy risk coverage first',
pricing_proof_upgrade_text: 'Move up when process requires more native build time, team support, enterprise controls, or a stronger compliance path.',
pricing_proof_upgrade_title: 'Upgrade when governance grows',
pricing_proof_usage_text: 'MAU, bandwidth, storage, and build credits keep the pricing conversation concrete for engineering and finance.',
pricing_proof_usage_title: 'Scale by usage, not seats',
priority_bug_fixes_on_our_plugins: 'Priority bug fixes on our plugins',
priority_plus_plan: 'Priority Plus',
priority_support: 'Priority support',
Expand Down
24 changes: 23 additions & 1 deletion apps/web/src/components/Hero.astro
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@ import m from '@/copy/messages'
import { getRelativeLocaleUrl } from 'astro:i18n'

const ctaSubtext = `${m.days_free_trial({}, { locale: Astro.locals.locale })}. ${m.no_credit_card_required({}, { locale: Astro.locals.locale })}`
const trustSignals = [
m.hero_trust_signal_trial({}, { locale: Astro.locals.locale }),
m.hero_trust_signal_store_review({}, { locale: Astro.locals.locale }),
m.hero_trust_signal_open_source({}, { locale: Astro.locals.locale }),
m.hero_trust_signal_rollback({}, { locale: Astro.locals.locale }),
]
---

<section>
Expand Down Expand Up @@ -183,7 +189,7 @@ const ctaSubtext = `${m.days_free_trial({}, { locale: Astro.locals.locale })}. $
<h1 class="font-pj text-4xl leading-tight font-bold tracking-tight sm:text-5xl sm:leading-tight lg:text-6xl lg:leading-tight xl:text-7xl">
{m.instant_updates_for_your({}, { locale: Astro.locals.locale })}
<br />
<span class="text-azure-500">CapacitorJS app</span>
<span class="text-azure-500">{m.hero_highlight_capacitor({}, { locale: Astro.locals.locale })}</span>
</h1>
<p class="font-inter mx-auto mt-6 max-w-2xl text-lg leading-8 text-gray-400 sm:text-xl">
{m.hero_subtitle_part1({}, { locale: Astro.locals.locale })}
Expand Down Expand Up @@ -212,6 +218,22 @@ const ctaSubtext = `${m.days_free_trial({}, { locale: Astro.locals.locale })}. $
</a>
</div>
<p class="font-inter text-sm leading-6 text-gray-400">{ctaSubtext}</p>
<ul class="flex max-w-3xl flex-wrap items-center justify-center gap-x-4 gap-y-2 text-sm text-gray-300">
{
trustSignals.map((signal) => (
<li class="inline-flex items-center gap-2 whitespace-nowrap">
<svg class="h-4 w-4 shrink-0 text-blue-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path
fill-rule="evenodd"
d="M16.704 5.29a1 1 0 010 1.42l-7.25 7.25a1 1 0 01-1.415 0L3.296 9.217a1 1 0 011.414-1.414l4.036 4.035 6.543-6.546a1 1 0 011.415-.002z"
clip-rule="evenodd"
/>
</svg>
<span>{signal}</span>
</li>
))
}
</ul>
</div>
</div>
</div>
Expand Down
Loading
Loading