Skip to content
Merged
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
2 changes: 1 addition & 1 deletion apps/frontend/app/features/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/app/pricing/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
65 changes: 48 additions & 17 deletions apps/frontend/app/privacy/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -83,12 +83,25 @@ export default function PrivacyPage() {
<section>
<h2 className="text-xl font-bold text-gray-900 mb-2">6. AI features</h2>
<p>
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.
</p>
<p>
While we await Etsy&rsquo;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.
</p>
<p>
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.
</p>
</section>

Expand Down Expand Up @@ -126,16 +139,34 @@ export default function PrivacyPage() {
<h2 className="text-xl font-bold text-gray-900 mb-2">10. Data retention</h2>
<p>
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&rsquo;s own conservative, configurable
default; it is not a number mandated by Etsy. The first scheduled cleanup run
completed successfully on 2026-07-15.
</p>
<p>
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.
</p>
<p>
You can delete your account and its associated data at any time from within Bulk
Edit App&rsquo;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&rsquo;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.
</p>
</section>

Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/app/private-beta/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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" },
};
Expand Down
17 changes: 11 additions & 6 deletions apps/frontend/app/terms/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand Down Expand Up @@ -80,10 +80,12 @@ export default function TermsPage() {
<section>
<h2 className="text-xl font-bold text-gray-900 mb-2">6. AI tools</h2>
<p>
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&rsquo;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.
</p>
</section>

Expand All @@ -103,7 +105,10 @@ export default function TermsPage() {
<a href="/pricing" className="text-indigo-600 hover:underline">pricing page</a>.
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.
</p>
</section>

Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/components/marketing/ExplainerBlocks.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
6 changes: 3 additions & 3 deletions apps/frontend/components/marketing/FaqContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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?",
Expand Down Expand Up @@ -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.",
},
],
},
Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/components/marketing/FeaturesContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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",
];

Expand Down
4 changes: 2 additions & 2 deletions apps/frontend/components/marketing/HomeContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ export default function HomeContent() {
</FadeUp>
<FadeUp delay={0.08}>
<p className="text-lg text-gray-500 leading-relaxed">
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.
</p>
Expand Down Expand Up @@ -273,7 +273,7 @@ export default function HomeContent() {
</h2>
<p className="text-gray-500">
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.
</p>
</FadeUp>

Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/components/marketing/PricingContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ export default function PricingContent() {
<FeatureRow label="shops" value={limits.max_shops} />
<FeatureRow label="listings" value={limits.max_listings.toLocaleString()} />
<FeatureRow label="bulk edits/month" value={limits.bulk_edits_per_month.toLocaleString()} />
<FeatureRow label="AI credits/month" value={limits.ai_credits_per_month.toLocaleString()} />
<FeatureRow label="Suggestion credits/month" value={limits.ai_credits_per_month.toLocaleString()} />
<FeatureRow label="media assets" value={limits.media_assets.toLocaleString()} />
<FeatureRow label="Photo bulk edit" value={limits.can_bulk_edit_photos} />
<FeatureRow label="Variation edit" value={limits.can_bulk_edit_variations} />
Expand Down
8 changes: 4 additions & 4 deletions apps/frontend/lib/featurePages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.",
Expand Down Expand Up @@ -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",
Expand All @@ -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",
],
Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/lib/pricingPlans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Loading