Skip to content

Make Timeful free: remove ads and premium, add supporter perks - #280

Merged
jonyTF merged 6 commits into
mainfrom
claude/tender-tesla-iu9otw
Oct 7, 2026
Merged

jonyTF merged 6 commits into
mainfrom
claude/tender-tesla-iu9otw

Conversation

@jonyTF

@jonyTF jonyTF commented Oct 4, 2026 •

Copy link
Copy Markdown
Member

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

  • Removed payment routes: Deleted server/routes/polar.go (Polar checkout, webhooks, billing portal) and server/routes/stripe.go (legacy Stripe support)
  • Removed payment service: Deleted server/services/polar/ package including API client and webhook verification
  • Removed analytics endpoints: Deleted /analytics/upgrade-dialog-viewed, /analytics/upgrade-user, and /analytics/downgrade-user endpoints
  • Removed user premium fields: Removed IsPremium and HasPremium() from the User model; removed GetUserByStripeCustomerId database function. StripeCustomerId/PolarCustomerId are kept as Mongo-only fields (json:"-") so past payers can be recognized (see below)
  • Removed premium check endpoint: Deleted GET /users/:userId/is-premium route
  • Cleaned up dependencies: Removed Stripe SDK import from main.go; removed unused alecthomas/template from go.mod

Frontend

  • Removed upgrade dialog: Deleted UpgradeDialog.vue component (764 lines) and related pricing dialogs (StudentProofDialog.vue, AlreadyDonatedDialog.vue)
  • Removed payment redirect: Deleted StripeRedirect.vue view
  • Removed ad components: Deleted Advertisement.vue, CarbonAd.vue, and PubliftAd.vue components
  • Removed ad assets: Deleted tomotime ad images
  • Removed ad scripts: Removed Publift ad network script from public/index.html
  • Removed ad breakpoints: Removed Publift-specific Tailwind breakpoints (publift-s, publift-m, publift-l, publift-xl)
  • Removed paywall state: Removed enablePaywall, upgradeDialogVisible, upgradeDialogType, upgradeDialogData, and pricingPageConversion from Vuex store
  • Removed premium UI: Removed premium badge from header in App.vue (replaced by the Supporter badge below); removed premium-related text from Dashboard.vue and EventType.vue
  • Removed premium checks: Removed isPremiumUser utility function and related premium user checks throughout components
  • Removed test route: Deleted Test.vue view used for testing upgrade dialog
  • Cleaned up dependencies: Removed canvas-confetti from package.json

Configuration & Documentation

  • Updated env template: Removed all Polar-related environment variables from server/.env.template
  • Updated Swagger docs: Removed payment and upgrade endpoints from generated API documentation
  • Updated router: Removed /stripe-redirect route
  • Updated constants: Removed UPGRADE auth type from authTypes
  • Updated Slack bot: Removed MONETIZATION message type

Free-to-use announcement & supporters

  • Landing page banner: "🎉 Timeful is now completely free to use!" linking to the blog post (the "We got rid of…" sentence is desktop-only)
  • Removed "Formerly known as Schej" link from Landing, Home, and Event pages; deleted FormerlyKnownAs.vue
  • hasPaid on user JSON: User.MarshalJSON adds a computed hasPaid flag (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 client
  • Supporter badge: green "Supporter" pill next to the logo in the header for past payers (styled like the old Premium badge)
  • Avatar glow: pulsing green ring on past payers' avatars everywhere UserAvatarContent is used (respects prefers-reduced-motion). Removed a redundant wrapping v-avatar in AuthUserMenu that would have clipped it
  • Donate: restored the PayPal donate button in the header and the event page menu, and added a Donate link to the footer
  • Footer: "Support" → "Contact us"; added the new blog post to Articles
  • Removed public/ads.txt

Before deploying

  • Cancel all remaining Premium subscriptions in the Stripe and Polar dashboards (the webhook handlers are gone, and the blog post tells users they won't be charged again)
  • Disable the Stripe/Polar webhook endpoints
  • Optionally remove the now-unused Stripe/Polar/ad env vars from the server

Implementation Details

  • All ad-related UI has been removed from event pages and schedule overlap views
  • Premium user checks that gated features have been removed; all users now have access to the same feature set
  • The application no longer tracks subscription status or manages billing relationships
  • Legacy Stripe support was kept in the codebase but is now also removed; new purchases never went through Stripe (only Polar)

https://claude.ai/code/session_01EcVVmFPmgnmC1skyWANoyM

🤖 Generated with Claude Code

claude and others added 6 commits October 4, 2026 19:17
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>
@jonyTF jonyTF changed the title Remove Polar payments integration and premium features Make Timeful free: remove ads and premium, add supporter perks Oct 7, 2026
@jonyTF
jonyTF merged commit 799f94b into main Oct 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants