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