Repository navigation
Make Timeful free: remove ads and premium, add supporter perks - #280
Merged
Merged
Conversation
Ads: - Remove Publift/Fuse ad slots, the Primis video ad, sticky footer handling, and the fuse.js script tag - Delete PubliftAd, CarbonAd, and the old tomotime Advertisement component and assets, plus commented-out AdSense code - Restore the pre-ads event page layout and drop publift breakpoints Billing: - Remove the upgrade dialog, free-event paywall, Premium badge, "Upgrade" links, billing settings section, and upgrade sign-in redirects - Delete StripeRedirect and the Test page that only showed the dialog - Remove Stripe and Polar routes/services, the is-premium endpoint, upgrade analytics endpoints, premium fields on the User model, and the monetization Slack channel - Drop stripe-go and canvas-confetti, regenerate Swagger docs, and remove payment env vars from the template and DEPLOYMENT.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EcVVmFPmgnmC1skyWANoyM
…as Schej" Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… article Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Timeful is now completely free. This PR removes ads, the Polar/Stripe payments integration, and all premium/paywall functionality, announces the change on the landing page, and thanks past paying users with a "Supporter" badge and a glowing avatar ring.
Blog post (already live): https://timeful.app/blog/timeful-is-now-free/
Key Changes
Backend
server/routes/polar.go(Polar checkout, webhooks, billing portal) andserver/routes/stripe.go(legacy Stripe support)server/services/polar/package including API client and webhook verification/analytics/upgrade-dialog-viewed,/analytics/upgrade-user, and/analytics/downgrade-userendpointsIsPremiumandHasPremium()from the User model; removedGetUserByStripeCustomerIddatabase function.StripeCustomerId/PolarCustomerIdare kept as Mongo-only fields (json:"-") so past payers can be recognized (see below)GET /users/:userId/is-premiumroutemain.go; removed unusedalecthomas/templatefromgo.modFrontend
UpgradeDialog.vuecomponent (764 lines) and related pricing dialogs (StudentProofDialog.vue,AlreadyDonatedDialog.vue)StripeRedirect.vueviewAdvertisement.vue,CarbonAd.vue, andPubliftAd.vuecomponentspublic/index.htmlpublift-s,publift-m,publift-l,publift-xl)enablePaywall,upgradeDialogVisible,upgradeDialogType,upgradeDialogData, andpricingPageConversionfrom Vuex storeApp.vue(replaced by the Supporter badge below); removed premium-related text fromDashboard.vueandEventType.vueisPremiumUserutility function and related premium user checks throughout componentsTest.vueview used for testing upgrade dialogcanvas-confettifrompackage.jsonConfiguration & Documentation
server/.env.template/stripe-redirectrouteUPGRADEauth type fromauthTypesMONETIZATIONmessage typeFree-to-use announcement & supporters
FormerlyKnownAs.vuehasPaidon user JSON:User.MarshalJSONadds a computedhasPaidflag (true if the user has a Stripe or Polar customer ID, which were only set on successful payment). The IDs themselves are never sent to the clientUserAvatarContentis used (respectsprefers-reduced-motion). Removed a redundant wrappingv-avatarinAuthUserMenuthat would have clipped itpublic/ads.txtBefore deploying
Implementation Details
https://claude.ai/code/session_01EcVVmFPmgnmC1skyWANoyM
🤖 Generated with Claude Code