Version 3.x Changelog
Good to know
- Please check the
versionfield in thepackage.jsonfile 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.tsnow supports reading Next.js local environment variables
3.1.5
- Fixed: Removed
npxfromdb:generatecommand inpackage.json - Optimized:
/api/admin/translateendpoint now supportsopenrouter - Fixed:
components/LanguageDetectionAlert.tsxwidth overflow on mobile screens - Optimized:
layout.tsxconditional logic for enabling VercelAnalyticscomponent, now automatically enabled only when deployed on Vercel - Added:
Headernow includes multi-level directory examples - Added: Regenerated Cursor Rules, better suited for current tech stack
- Fixed: Removed
emailfield value from email login incomponents/auth/LoginForm.tsx - Fixed: Email login button
disabledstate logic incomponents/auth/LoginForm.tsx, now supports Turnstile enablement detection
3.1.6
- Optimized:
components/footer/Footer.tsxremovedh2,h3tags - Fixed:
app/[locale]/(protected)/dashboard/(user)/settings/Setting.tsx, resetpreviewUrlafter submitting user profile - Fixed:
lib/cloudflare/r2.tsserverUploadFilemethod 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_ENABLEDapp/[locale]/layout.tsxhooks/useCookieConsent.tscomponents/shared/CookieConsent/
- Optimized: About, Privacy-Policy, and Terms-of-Service pages now only provide English versions and are written in
page.tsxfor 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 variableFIRECRAWL_API_KEY - Added: Discord notification templates
lib/discord/notifications.ts, and added environment variableDISCORD_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_KEYactions/newsletter/index.ts
- Optimized: Added
generatePublicPresignedUploadUrlfor scenarios where any user (including unauthenticated users) can upload imagesactions/r2-resources/index.ts
- Optimized:
lib/upstash/index.tsadded generic IP retrieval methodsgetClientIPFromRequestandgetClientIPFromHeaders - Optimized:
actions/stripe/webhook-handler.tsmigrated toapp/api/stripe/webhook/webhook-handlers.ts, content unchanged
3.1.8
- Optimized: Added Stripe order related fields
lib/db/schema.ts,orderstable added fieldsstripePaymentIntentId,stripeInvoiceIdandstripeChargeId, renamedsubscriptionProviderIdtosubscriptionIdapp/api/stripe/webhook/webhook-handlers.tsrecords related fieldshandleCheckoutSessionCompletedwrites toordersaddingstripePaymentIntentIdhandleInvoicePaid, invoice retrieval method expanded to include payments, writes toordersaddingstripePaymentIntentIdandstripeInvoiceId, and renamedsubscriptionProviderIdtosubscriptionIdhandleRefund, writes toordersaddingstripePaymentIntentIdandstripeChargeId, and renamedsubscriptionProviderIdtosubscriptionId
- Optimized:
handleRefundnow supports handling subscription downgrades after refunds, enabling support for scenarios where subscriptions are not deleted but only refunded - Optimized: For subscription expiration scenarios,
handleSubscriptionUpdatetriggersrevokeRemainingSubscriptionCreditsOnEndto reset remaining subscription credits - Optimized: After order refund, the original order
statusis also marked asrefund
3.1.9
- Fixed: Resolved the issue where
app/[locale]/(protected)/dashboard/(admin)/orders/DataTable.tsxcouldn't return to previous page after pagination - Optimized: Status field display on
app/[locale]/(protected)/dashboard/(admin)/orderspage - Added: User-side my-orders page
actions/orders/user.tsapp/[locale]/(protected)/dashboard/(user)/my-orders/
- Added: Support for handling Stripe
radar.early_fraud_warning.createdevent, 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
lastMethodincomponents/auth/LoginForm.tsx - Optimized: Added Cloudflare R2 public methods and optimized file organization for cloudflare related methods
actions/r2-resources/index.tsadded resource download methodslib/cloudflare/r2-client.tsdefines R2 clientlib/cloudflare/r2-utils.tsdefines helper methodslib/cloudflare/r2-download.tsdefines multiple download functionality related methodslib/cloudflare/r2.tsdefines R2 core methods
- Added:
app/[locale]/(protected)/dashboard/(admin)/r2-resources/page.tsxadded admin image upload functionality - Added: Support for hreflangs
- Other optimizations and minor fixes
- Fixed:
app/[locale]/(protected)/dashboard/(user)/credit-history/Columns.tsxupdated subscription cancellation identifier - Optimized: Changed environment variable
DISCORD_SUBMIT_WEBHOOK_URLtoDISCORD_WEBHOOK_URL - Optimized:
app/[locale]/(protected)/dashboard/(admin)/r2-resources/Columns.tsxsupports copying full resource URL - Optimized: Updated cursor rules
- Fixed:
lib/db/schema.tsdefined blogpublishedAtfield to auto-update - Optimized: Blog module tag management and selection styles
- Optimized: User-side blog card image display dimensions
- Fixed:
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.tsadapted for dynamicopengraph-image.tsx - Fixed: English-only interface metadata now only passes English identifiers
app/(site)/privacy-policy/page.tsxapp/(site)/refund-policy/page.tsxapp/(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_logstable records the credits granted each month.changelog
3.2.2
- Added: Subscription change support and complete implementation guide
3.2.3 - 3.2.4
- Optimized: Refactored CMS using tiptap and added multiple features