From 65fccc549ea9929cccf02d2fd039d61d69d46e96 Mon Sep 17 00:00:00 2001 From: Sekiph82 Date: Thu, 16 Jul 2026 21:33:34 +0300 Subject: [PATCH 1/2] fix(web): neutralize public AI wording in marketing copy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes "AI optimization"/"AI credits"/"AI Listing Optimization" and similar phrasing from the homepage hero, pricing preview, pricing page, /features metadata and safety list, FAQ, and feature-registry public copy, replacing it with neutral wording ("advanced workflows", "suggestion credits", "saved workflows") so public marketing no longer implies broader external AI processing than production currently performs. No authenticated in-app AI functionality is removed or renamed; backend fields (e.g. ai_credits_per_month) are unchanged — only public-facing display strings. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01RzUkp3csH7vBCA286nfaxL --- apps/frontend/app/features/page.tsx | 2 +- apps/frontend/app/pricing/page.tsx | 2 +- apps/frontend/app/private-beta/page.tsx | 2 +- apps/frontend/components/marketing/ExplainerBlocks.tsx | 2 +- apps/frontend/components/marketing/FaqContent.tsx | 6 +++--- apps/frontend/components/marketing/FeaturesContent.tsx | 2 +- apps/frontend/components/marketing/HomeContent.tsx | 4 ++-- apps/frontend/components/marketing/PricingContent.tsx | 2 +- apps/frontend/lib/featurePages.ts | 8 ++++---- apps/frontend/lib/pricingPlans.ts | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/frontend/app/features/page.tsx b/apps/frontend/app/features/page.tsx index cf6a733..94ee448 100644 --- a/apps/frontend/app/features/page.tsx +++ b/apps/frontend/app/features/page.tsx @@ -4,7 +4,7 @@ import FeaturesContent from "@/components/marketing/FeaturesContent"; export const metadata: Metadata = { title: "Etsy Bulk Edit Features — Bulk Edit App", description: - "Bulk title, tag, price, photo, and variation editing for Etsy sellers — with AI optimization, CSV import/export, dynamic pricing, listing health scoring, and Magic Revert.", + "Bulk title, tag, price, photo, CSV, variation, pricing, shop insights, and revert workflows for Etsy sellers.", alternates: { canonical: "https://bulkeditapp.com/features" }, openGraph: { title: "Etsy Bulk Edit Features — Bulk Edit App", diff --git a/apps/frontend/app/pricing/page.tsx b/apps/frontend/app/pricing/page.tsx index 0e5ae91..ca22632 100644 --- a/apps/frontend/app/pricing/page.tsx +++ b/apps/frontend/app/pricing/page.tsx @@ -4,7 +4,7 @@ import PricingContent from "@/components/marketing/PricingContent"; export const metadata: Metadata = { title: "Pricing — Bulk Edit App", description: - "Simple, transparent pricing for Etsy sellers. Start free, upgrade to Basic or Pro for more bulk edits, AI credits, and automation.", + "Simple, transparent pricing for Etsy sellers. Start free, upgrade to Basic or Pro for more bulk edits, advanced workflows, and automation.", alternates: { canonical: "https://bulkeditapp.com/pricing" }, openGraph: { title: "Pricing — Bulk Edit App", diff --git a/apps/frontend/app/private-beta/page.tsx b/apps/frontend/app/private-beta/page.tsx index e7d6b3d..5e09ec7 100644 --- a/apps/frontend/app/private-beta/page.tsx +++ b/apps/frontend/app/private-beta/page.tsx @@ -5,7 +5,7 @@ import MarketingFooter from "@/components/marketing/MarketingFooter"; export const metadata: Metadata = { title: "Account Access Temporarily Paused — Bulk Edit App", - description: "New account sign-ups are temporarily paused while we complete a required Etsy verification step. Contact us for status or early access.", + description: "New account sign-ups are temporarily paused while we complete a required Etsy verification step. Contact us for a status update.", robots: { index: false, follow: false }, alternates: { canonical: "https://bulkeditapp.com/private-beta" }, }; diff --git a/apps/frontend/components/marketing/ExplainerBlocks.tsx b/apps/frontend/components/marketing/ExplainerBlocks.tsx index 1e32a39..5df150c 100644 --- a/apps/frontend/components/marketing/ExplainerBlocks.tsx +++ b/apps/frontend/components/marketing/ExplainerBlocks.tsx @@ -16,7 +16,7 @@ const BLOCKS = [ }, { title: "What you can bulk edit", - body: "Titles, tags, descriptions, prices, photos, and variation prices/quantities/SKUs — plus CSV import/export, AI-generated suggestions, and rule-based pricing recommendations.", + body: "Titles, tags, descriptions, prices, photos, and variation prices/quantities/SKUs — plus CSV import/export, reviewed suggestion tools, and rule-based pricing recommendations.", }, { title: "What stays under your control", diff --git a/apps/frontend/components/marketing/FaqContent.tsx b/apps/frontend/components/marketing/FaqContent.tsx index 87414ee..a5ec3a8 100644 --- a/apps/frontend/components/marketing/FaqContent.tsx +++ b/apps/frontend/components/marketing/FaqContent.tsx @@ -73,7 +73,7 @@ const FAQ_DATA: Array<{ category: string; items: FaqItem[] }> = [ }, { q: "What features require a paid plan?", - a: "Photo and video bulk editing, variation editing, Magic Revert, AI listing optimization, Dynamic Pricing, and Scheduled Jobs are available on paid plans. Check the pricing page for full plan details.", + a: "Photo and video bulk editing, variation editing, Magic Revert, AI suggestion tools, Dynamic Pricing, and Scheduled Jobs are available on paid plans. Check the pricing page for full plan details.", }, { q: "Can I cancel my subscription?", @@ -115,8 +115,8 @@ const FAQ_DATA: Array<{ category: string; items: FaqItem[] }> = [ a: "Shop Insights shows real data computed from your connected, synced Etsy shop — total listings, listing status breakdown, how many listings are missing tags or have low photo counts, and your price range. It does not show revenue, views, or favourites, since Etsy does not provide reliable trend data through this app's connection — we'd rather show accurate listing insights than invented analytics.", }, { - q: "What are AI credits and bulk edit credits?", - a: "AI credits are consumed each time Bulk Edit App calls an AI model to generate suggestions (titles, tags, descriptions). Bulk edit credits are consumed when you apply a bulk edit session to Etsy. Your plan includes a monthly allowance of each. You can see your current usage in the dashboard.", + q: "What are suggestion credits and bulk edit credits?", + a: "Suggestion credits are consumed each time Bulk Edit App generates a suggestion (titles, tags, descriptions). Bulk edit credits are consumed when you apply a bulk edit session to Etsy. Your plan includes a monthly allowance of each. You can see your current usage in the dashboard.", }, ], }, diff --git a/apps/frontend/components/marketing/FeaturesContent.tsx b/apps/frontend/components/marketing/FeaturesContent.tsx index 11e3da8..64bed5a 100644 --- a/apps/frontend/components/marketing/FeaturesContent.tsx +++ b/apps/frontend/components/marketing/FeaturesContent.tsx @@ -115,7 +115,7 @@ const SAFETY_ITEMS = [ "Backup snapshots created before every apply", "Preview-first — no blind writes, ever", "Scheduled jobs create drafts, never auto-publish", - "AI suggestions are reviewed before acceptance", + "Suggestions are reviewed before acceptance", "Dynamic Pricing creates recommendations, not auto-edits", ]; diff --git a/apps/frontend/components/marketing/HomeContent.tsx b/apps/frontend/components/marketing/HomeContent.tsx index a870a2e..5026acd 100644 --- a/apps/frontend/components/marketing/HomeContent.tsx +++ b/apps/frontend/components/marketing/HomeContent.tsx @@ -105,7 +105,7 @@ export default function HomeContent() {

- Titles, tags, prices, photos, variations, CSV, AI optimization — update it all + Titles, tags, prices, photos, variations, and CSV workflows — update them across your whole Etsy shop with one safe engine: preview every change, apply with confidence, revert instantly if something looks wrong.

@@ -273,7 +273,7 @@ export default function HomeContent() {

A free plan to get started, plus Basic and Pro tiers for growing shops that need - more bulk edits, AI credits, and automation. + more bulk edits, advanced workflows, and automation.

diff --git a/apps/frontend/components/marketing/PricingContent.tsx b/apps/frontend/components/marketing/PricingContent.tsx index 78d942c..7e91a2f 100644 --- a/apps/frontend/components/marketing/PricingContent.tsx +++ b/apps/frontend/components/marketing/PricingContent.tsx @@ -144,7 +144,7 @@ export default function PricingContent() { - + diff --git a/apps/frontend/lib/featurePages.ts b/apps/frontend/lib/featurePages.ts index 97a1f02..b2346fd 100644 --- a/apps/frontend/lib/featurePages.ts +++ b/apps/frontend/lib/featurePages.ts @@ -279,7 +279,7 @@ export const FEATURE_PAGES: FeaturePage[] = [ intro: "No blind writes. Every bulk edit — no matter which feature created it — goes through the same preview step before it's ever sent to Etsy.", howItWorks: [ - "Build a bulk edit from any Bulk Edit App feature (listing editor, AI suggestions, CSV import, dynamic pricing).", + "Build a bulk edit from any Bulk Edit App feature (listing editor, CSV import, dynamic pricing, or scheduled drafts).", "Bulk Edit App generates a full before/after diff for every affected listing.", "Review the diff listing by listing, field by field.", "Only after you confirm does anything get written to Etsy.", @@ -331,7 +331,7 @@ export const FEATURE_PAGES: FeaturePage[] = [ "Copy the caption, download the image, or share when you're ready.", ], benefits: [ - "AI-prepared captions and images from your listings", + "Prepared captions and images from your listings", "Works for Pinterest and Instagram", "You control exactly when and where it's shared", "Saves time writing captions from scratch", @@ -350,13 +350,13 @@ export const FEATURE_PAGES: FeaturePage[] = [ "Automate the safe parts of your workflow — syncing listing data and preparing drafts — without ever giving up control over what gets published.", howItWorks: [ "Schedule a sync job to keep your listing data up to date automatically.", - "Schedule draft-creation jobs from CSV imports, AI sessions, or dynamic pricing rules.", + "Schedule draft-creation jobs from CSV imports, saved workflows, or dynamic pricing rules.", "Jobs run on schedule and prepare draft bulk edit sessions.", "Every draft still goes through the standard preview-and-confirm flow before anything reaches Etsy.", ], benefits: [ "Keeps listing data automatically in sync", - "Prepares drafts from CSV, AI, or pricing rules on a schedule", + "Prepares drafts from CSV imports, saved workflows, or pricing rules on a schedule", "Every draft still requires your explicit approval", "Removes manual, repetitive sync work", ], diff --git a/apps/frontend/lib/pricingPlans.ts b/apps/frontend/lib/pricingPlans.ts index 6f70c6f..e6f9923 100644 --- a/apps/frontend/lib/pricingPlans.ts +++ b/apps/frontend/lib/pricingPlans.ts @@ -30,7 +30,7 @@ export type HomepagePlanKey = "free" | "basic_monthly" | "pro_monthly"; export const HOMEPAGE_PLAN_SUMMARIES: { key: HomepagePlanKey; highlights: string[] }[] = [ { key: "free", - highlights: ["1 shop, up to 25 listings", "10 bulk edits / month", "5 AI credits / month"], + highlights: ["1 shop, up to 25 listings", "10 bulk edits / month", "5 suggestion credits / month"], }, { key: "basic_monthly", From 55e5635d3c3dc82b0faa2ee4ef9ae6777e84be30 Mon Sep 17 00:00:00 2001 From: Sekiph82 Date: Thu, 16 Jul 2026 21:33:41 +0300 Subject: [PATCH 2/2] fix(legal): align privacy and terms with current AI and retention safeguards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Privacy §6 (AI features) now states that sending Etsy-derived listing data to an external AI provider is disabled by default in production pending Etsy's written confirmation, without claiming Etsy prohibited or approved AI use. Privacy §10 (retention) documents that backup snapshots and CSV job records are retained for a 30-day conservative default (not Etsy-mandated), the automated daily cleanup that enforces it, the first successful run on 2026-07-15, and corrects stale copy that claimed self-service account deletion doesn't exist — it does, gated behind password re-confirmation and an active-subscription check (see app/services/auth.py delete_account). Terms §6 adds the same external-AI-disabled safeguard and softens "AI-generated" to "AI-assisted" to match the review-required framing used elsewhere. Terms §8 documents that account deletion does not auto-cancel Stripe subscriptions, matching the billing gate already enforced server-side. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01RzUkp3csH7vBCA286nfaxL --- apps/frontend/app/privacy/page.tsx | 65 ++++++++++++++++++++++-------- apps/frontend/app/terms/page.tsx | 17 +++++--- 2 files changed, 59 insertions(+), 23 deletions(-) diff --git a/apps/frontend/app/privacy/page.tsx b/apps/frontend/app/privacy/page.tsx index 63b9c91..3338d85 100644 --- a/apps/frontend/app/privacy/page.tsx +++ b/apps/frontend/app/privacy/page.tsx @@ -13,7 +13,7 @@ export const metadata: Metadata = { robots: { index: true, follow: true }, }; -const LAST_UPDATED = "2026-07-13"; +const LAST_UPDATED = "2026-07-16"; const SUPPORT_EMAIL = "support@bulkeditapp.com"; export default function PrivacyPage() { @@ -83,12 +83,25 @@ export default function PrivacyPage() {

6. AI features

- AI tools (title optimization, description writing, tag generation, alt text, SEO - scoring, category suggestions) process your listing text to generate suggestions. - Suggestions are shown to you for review and are never applied to Etsy - automatically. We make no guarantee that using AI suggestions will improve sales, - rankings, or shop performance — you are responsible for reviewing suggestions - before applying them. + Bulk Edit App includes optional, authenticated AI-assisted suggestion tools (for + example, title, description, tag, and alt-text suggestions). Suggestions are shown + to you for review only and are never applied to Etsy automatically — you decide + which ones to accept. +

+

+ While we await Etsy’s written confirmation on how AI processing of + Etsy-derived listing data may be used, sending your Etsy listing content to an + external, third-party AI provider is disabled by default in production. In this + default state, suggestions are generated without processing live Etsy listing data + through an external AI service. This is a conservative choice we have made while + guidance is pending — it is not a statement that Etsy has prohibited or restricted + AI use, and it is not a claim that Etsy has approved, certified, or endorsed any AI + feature. +

+

+ We make no guarantee that using AI suggestions will improve sales, search ranking, + or shop performance — you are responsible for reviewing any suggestion before + applying it.

@@ -126,16 +139,34 @@ export default function PrivacyPage() {

10. Data retention

We retain account and shop data while your account is active. Backup snapshots - created before a bulk edit, media, or variation write (used to power Magic - Revert) are automatically deleted no later than 30 days after creation — after - that window, that specific change can no longer be reverted through the app. - Synced listing data is treated as stale after 6 hours and is refreshed, or the - seller is shown a freshness warning, before it is relied on for a new write. - Disconnecting an Etsy shop deletes its stored access/refresh tokens immediately - and pauses any scheduled jobs tied to that shop. You can request deletion of your - account and associated data at any time (see Contact below); we do not yet offer - fully automated self-service account deletion, so these requests are currently - processed manually by support. + created before a bulk edit, media, or variation write (used to power Magic Revert) + and CSV import/export job records are retained for a maximum of 30 days by default + — after that window, they are automatically deleted by a daily automated retention + cleanup process, and that specific change can no longer be reverted through the + app. This 30-day window is Bulk Edit App’s own conservative, configurable + default; it is not a number mandated by Etsy. The first scheduled cleanup run + completed successfully on 2026-07-15. +

+

+ Live synced listing and shop data may continue to be stored while you keep your + Etsy shop connected, since this data is needed to display and bulk-edit your shop. + Synced listing data is treated as stale after 6 hours and is refreshed, or you are + shown a freshness warning, before it is relied on for a new write. Disconnecting an + Etsy shop deletes its stored access/refresh tokens immediately and pauses any + scheduled jobs tied to that shop. +

+

+ You can delete your account and its associated data at any time from within Bulk + Edit App’s billing settings, after re-confirming your password. Account + deletion is blocked while any organization you own has an active or billable + Stripe subscription — that subscription must be canceled or resolved first. + Account deletion does not automatically cancel your Stripe subscription or delete + your Stripe customer/subscription records; those remain in Stripe per Stripe’s + own retention practices and our accounting/legal requirements. Once the billing + check passes, deleting your account removes your organization(s) and associated app + data (shops, tokens, listings, bulk edit history, snapshots, subscriptions, and so + on) from Bulk Edit App. You can also contact support (see below) with any deletion + or data question.

diff --git a/apps/frontend/app/terms/page.tsx b/apps/frontend/app/terms/page.tsx index ce46168..753c0dd 100644 --- a/apps/frontend/app/terms/page.tsx +++ b/apps/frontend/app/terms/page.tsx @@ -13,7 +13,7 @@ export const metadata: Metadata = { robots: { index: true, follow: true }, }; -const LAST_UPDATED = "2026-07-13"; +const LAST_UPDATED = "2026-07-16"; const SUPPORT_EMAIL = "support@bulkeditapp.com"; const LEGAL_ENTITY_NAME = process.env.NEXT_PUBLIC_LEGAL_ENTITY_NAME || "Bulk Edit App"; @@ -80,10 +80,12 @@ export default function TermsPage() {

6. AI tools

- AI-generated titles, descriptions, tags, and other suggestions are suggestions - only. We make no guarantee of increased sales, search ranking, or shop - performance from using them. You must review AI output before applying it to your - listings. + AI-assisted titles, descriptions, tags, and other suggestions are suggestions + only. Sending Etsy-derived listing data to an external, third-party AI provider is + disabled by default in production while we await Etsy’s written confirmation + on how AI processing of Etsy-derived data may be used. We make no guarantee of + increased sales, search ranking, or shop performance from using these suggestions. + You must review any suggestion before applying it to your listings.

@@ -103,7 +105,10 @@ export default function TermsPage() { pricing page. Subscriptions renew automatically unless canceled before the next billing period. Plan limits apply as published. We do not yet have a formal refund policy in - place; refund requests are handled case-by-case through support. + place; refund requests are handled case-by-case through support. Closing or + deleting your Bulk Edit App account does not automatically cancel an active Stripe + subscription — an active or billable subscription must be canceled or resolved + through your billing settings before account deletion can complete.