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
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:
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_ENABLEDto 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-sessionto 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