Menu

Version 3.x Changelog

Good to know

  • Please check the version field in the package.json file to get the version number
  • For v1 and v2 changelog, please refer to v2 version documentation

3.0.0

  • Authorization System: The authorization system has been upgraded from Supabase Auth to Better-auth, providing greater flexibility
  • Database Layer: The database has been upgraded from Supabase Database to Drizzle ORM, offering a better development experience

3.1.0

  • Unified admin dashboard page display
  • Removed edge runtime related code
  • Optimized Drizzle related file organization
  • Added support for admin user banning
  • Fixed bugs

3.1.1

  • Added support for locally recording user's last login method
  • Refresh routing after user logout to implement re-authentication

3.1.2

  • Added support for Plausible API integration (actions/plausible/index.ts)
  • Optimized Stripe related file organization
  • Admin user management list can now view user sources
  • Restructured .env.example with clearer content

3.1.3

  • Fixed the issue where drizzle.config.ts could not read .env.local

3.1.4

  • Fixed: Removed deprecated toast notifications
  • Fixed: lib/db/index.ts now supports reading Next.js local environment variables

3.1.5

  • Fixed: Removed npx from db:generate command in package.json
  • Optimized: /api/admin/translate endpoint now supports openrouter
  • Fixed: components/LanguageDetectionAlert.tsx width overflow on mobile screens
  • Optimized: layout.tsx conditional logic for enabling Vercel Analytics component, now automatically enabled only when deployed on Vercel
  • Added: Header now includes multi-level directory examples
  • Added: Regenerated Cursor Rules, better suited for current tech stack
  • Fixed: Removed email field value from email login in components/auth/LoginForm.tsx
  • Fixed: Email login button disabled state logic in components/auth/LoginForm.tsx, now supports Turnstile enablement detection

3.1.6

  • Optimized: components/footer/Footer.tsx removed h2, h3 tags
  • Fixed: app/[locale]/(protected)/dashboard/(user)/settings/Setting.tsx, reset previewUrl after submitting user profile
  • Fixed: lib/cloudflare/r2.ts serverUploadFile method now uses modified file key for uploads
  • Optimized: actions/users/admin.ts, banning a user now also clears that user's session
  • Added: Cookie Consent, supports enabling/disabling via environment variable NEXT_PUBLIC_COOKIE_CONSENT_ENABLED
    • app/[locale]/layout.tsx
    • hooks/useCookieConsent.ts
    • components/shared/CookieConsent/
  • Optimized: About, Privacy-Policy, and Terms-of-Service pages now only provide English versions and are written in page.tsx for greater flexibility

3.1.7

  • Added: About page example and refund policy page example
  • Added: lib/ai-model-factory.ts, reusable model detection methods
  • Added: URL processing related methods consolidated into lib/url.ts
  • Added: Web content scraping related methods consolidated into lib/scraping.ts, and added environment variable FIRECRAWL_API_KEY
  • Added: Discord notification templates lib/discord/notifications.ts, and added environment variable DISCORD_WEBHOOK_URL
  • Fixed: Email links now include email protocol in emails/user-welcome.tsx
  • Optimized: Newsletter rate limit key now uses product name as prefix, deprecated environment variable UPSTASH_REDIS_NEWSLETTER_RATE_LIMIT_KEY
    • actions/newsletter/index.ts
  • Optimized: Added generatePublicPresignedUploadUrl for scenarios where any user (including unauthenticated users) can upload images
    • actions/r2-resources/index.ts
  • Optimized: lib/upstash/index.ts added generic IP retrieval methods getClientIPFromRequest and getClientIPFromHeaders
  • Optimized: actions/stripe/webhook-handler.ts migrated to app/api/stripe/webhook/webhook-handlers.ts, content unchanged

3.1.8

  • Optimized: Added Stripe order related fields
    • lib/db/schema.ts, orders table added fields stripePaymentIntentId, stripeInvoiceId and stripeChargeId, renamed subscriptionProviderId to subscriptionId
    • app/api/stripe/webhook/webhook-handlers.ts records related fields
      • handleCheckoutSessionCompleted writes to orders adding stripePaymentIntentId
      • handleInvoicePaid, invoice retrieval method expanded to include payments, writes to orders adding stripePaymentIntentId and stripeInvoiceId, and renamed subscriptionProviderId to subscriptionId
      • handleRefund, writes to orders adding stripePaymentIntentId and stripeChargeId, and renamed subscriptionProviderId to subscriptionId
  • Optimized: handleRefund now supports handling subscription downgrades after refunds, enabling support for scenarios where subscriptions are not deleted but only refunded
  • Optimized: For subscription expiration scenarios, handleSubscriptionUpdate triggers revokeRemainingSubscriptionCreditsOnEnd to reset remaining subscription credits
  • Optimized: After order refund, the original order status is also marked as refund

3.1.9

  • Fixed: Resolved the issue where app/[locale]/(protected)/dashboard/(admin)/orders/DataTable.tsx couldn't return to previous page after pagination
  • Optimized: Status field display on app/[locale]/(protected)/dashboard/(admin)/orders page
  • Added: User-side my-orders page
    • actions/orders/user.ts
    • app/[locale]/(protected)/dashboard/(user)/my-orders/
  • Added: Support for handling Stripe radar.early_fraud_warning.created event, supports two processing methods: automatic refund and notification email, processing method configurable via environment variable
  • Optimized: Payment success page now checks latest order status, and provides appropriate notification if automatic refund order is encountered

3.1.10

  • Fixed: Resolved hydration issue caused by lastMethod in components/auth/LoginForm.tsx
  • Optimized: Added Cloudflare R2 public methods and optimized file organization for cloudflare related methods
    • actions/r2-resources/index.ts added resource download methods
    • lib/cloudflare/r2-client.ts defines R2 client
    • lib/cloudflare/r2-utils.ts defines helper methods
    • lib/cloudflare/r2-download.ts defines multiple download functionality related methods
    • lib/cloudflare/r2.ts defines R2 core methods
  • Added: app/[locale]/(protected)/dashboard/(admin)/r2-resources/page.tsx added admin image upload functionality
  • Added: Support for hreflangs
  • Other optimizations and minor fixes
    • Fixed: app/[locale]/(protected)/dashboard/(user)/credit-history/Columns.tsx updated subscription cancellation identifier
    • Optimized: Changed environment variable DISCORD_SUBMIT_WEBHOOK_URL to DISCORD_WEBHOOK_URL
    • Optimized: app/[locale]/(protected)/dashboard/(admin)/r2-resources/Columns.tsx supports copying full resource URL
    • Optimized: Updated cursor rules
    • Fixed: lib/db/schema.ts defined blog publishedAt field to auto-update
    • Optimized: Blog module tag management and selection styles
    • Optimized: User-side blog card image display dimensions

3.1.11

  • Optimized: Error page style design synchronization and optimization
  • Fixed: Markdown table rendering
  • Added: Blog module page view statistics

3.1.12

  • Optimized: lib/metadata.ts adapted for dynamic opengraph-image.tsx
  • Fixed: English-only interface metadata now only passes English identifiers
    • app/(site)/privacy-policy/page.tsx
    • app/(site)/refund-policy/page.tsx
    • app/(site)/terms-of-service/page.tsx
  • Optimized: Updated FAQ component
  • Fixed: Updated pricing data seed SQL file
  • Optimized: Theme style management optimization

3.2.0

  • Tech stack upgrade: Tailwind upgraded to v4

3.2.1

  • Fixed: For annual subscriptions, the credit_logs table records the credits granted each month.changelog

3.2.2

3.2.3 - 3.2.4

  • Optimized: Refactored CMS using tiptap and added multiple features

3.2.5

  • Fixed: Resolved issue where oversized tables would overlap the Sidebar
  • ‼️Critical Fix: Built-in subscription upgrade method was recording incorrect time during annual renewals. If your product uses the built-in subscription upgrade method, please refer to the changelog to apply the fix.

3.2.6

  • Added: Creem payment integration
  • Optimized: Enhanced pricing creation functionality:
    • Benefits JSON now provides built-in method examples, changelog
    • Features now support drag-and-drop sorting, changelog
    • Pricing preview area can now be fixed to viewport, changelog

3.2.7

  • Tech stack upgrade: Next.js and React upgraded to Next.js 16.0.7 and React 19.2.1 respectively, refer to upgrade guide
  • Tech stack upgrade: Next-intl upgraded to 4.5.8

3.2.8

  • Optimized: Some styles and text optimizations
  • ‼️Critical Fix: Upgraded React and Next.js versions to fix RSC vulnerabilities

3.2.9 - 3.2.10

  • Added: Umami and Rybbit integration
  • Added: Support for email verification code login
  • Added: Login rate limiting
  • Added: Record user source information, supported by environment variable NEXT_PUBLIC_USER_SOURCE_TRACKING_ENABLED to set whether to enable
  • Optimized: User information is not displayed in the Header under Sidebar layout, displayed in the Sidebar footer

3.2.11

  • Optimized: TipTap editor now supports selecting output format, supporting "markdown" | "text" | "html", default is markdown
  • Added: Microsoft Clarity
  • Fixed: The method of uploading and downloading R2 resources no longer checks user roles
  • Tech stack upgrade: Resend upgraded to 6.6.0, no longer requires audience_id

3.2.12

  • Added:PostHog integration
  • Optimized:Better-Auth rate limiting function can be set via environment variable, and is disabled by default
  • Optimized:Optimized Redis Keys management
  • Fixed:Better-Auth captcha now includes whether to enable detection
  • Tech stack upgrade:Resend upgraded to 6.6.0, no longer requires audience_id
  • Tech stack upgrade:Better-Auth upgraded to 1.4.7
  • Optimized:Better-Auth rate limiting function sets /get-session to false, and this interface does not trigger rate limiting, which can significantly reduce Redis read and write operations
  • Optimized:Better-Auth session expiration time delay, freshAge setting canceled (using default value)
  • Optimized:User table shows more source data
  • Optimized:Use environment variable switch to determine whether to enable email alias filtering
  • Added:Crisp integration

3.2.13

  • Optimized:CMS tag function style optimization
  • Optimized:CMS module upgrade, supporting more features
    • Optional whether to enable reading count statistics
    • Optional whether to enable local mdx articles
    • When an article does not have a cover image, a dynamic OG image is automatically generated based on the title
    • Article list supports two display modes: cards and lists, the latter does not display cover images
    • Article cover image supports local upload, external link, CloudFlare R2 selection
  • Added:CMS module adds Glossary module, which can be used to manage vocabulary, improve website SEO

3.2.14

  • Tech stack upgrade: Next.js upgraded to 16.1.1
  • Fixed: TipTap editor image follows title, title cannot render Markdown format
  • Optimized: TipTap editor and renderer styles
  • Added: Pricing management supports group function, documentation
  • Fixed: Resolved Stripe pricing edit cannot submit issue
  • Optimized: Pricing component separated from Home component, maintained as an independent module
  • Optimized: Updated pricing and pricing group seed files

3.2.15

  • Optimized: Updated pricing data import/export scripts, supports combination with AI-generated pricing data

3.2.16

  • Added: Support for automatically syncing .env files to GitHub Actions, documentation