Vampiro LifeVampiro Life
← Back to Blog
• Entry 8 • 3 min read

Vampiro Life - Build in Public: Entry Eight

Hey folks,

This entry covers two connected pieces of work: making the product itself more honest and easier to leave (or stay in), and making sure we can actually see what's happening once people are inside it.

What shipped

Product & pricing

  • Self-serve subscription cancellation — you can now cancel from the account page. Cancelling stops future renewal but keeps your plan's features active until the end of your current billing cycle. No refunds on unused credits.
  • The pricing page and account page now highlight our recommended plan instead of showing three equal-weight cards.
  • The in-app upgrade prompt (shown when you hit a message or credit limit) now leads with what's paused, not just what you'd gain.
  • The empty "no campaigns yet" screen now says something instead of nothing.
  • The landing page no longer claims multiplayer — that was never shipped, so we dropped it and replaced it with the feature that's actually real: campaigns that remember every choice and relationship, session after session. We also added our first real testimonial from an actual player, instead of leaving the page with zero social proof.

Analytics

  • We ran a full audit of our PostHog setup and found three real gaps: our "conversion" numbers were measuring checkout intent, not confirmed payment; involuntary churn (a card failing, a subscription lapsing) was completely invisible; and we had no way to segment users by plan natively.
  • All three are fixed now — server-side events fire on confirmed subscription payment and on lapsed-subscription downgrades, and every identified user carries their plan as a property.
  • We also added tracking for the things we actually want to learn: which character-creation path people pick (template, custom, or importing an existing VTM character), whether people browse worlds before picking one or just click the first one, how long it takes someone to send their first message, and whether people finish the onboarding tour or bail partway through.

Lessons learned

Merging a PR on GitHub does not deploy anything to Supabase. We caught this on a post-merge check: the edge functions behind the cancellation flow and the new analytics events were still running three-week-old code in production, even though the PR had been merged for hours. The secrets were set correctly; the code that would have used them just wasn't live yet. If you're running Supabase edge functions without a CI deploy step, "merged" and "deployed" are two different verbs — check both.

Next

Back to gameplay. The instrumentation is there now so we can tell whether the next few features actually move the needle, instead of guessing.

Thanks for following the project.

  • Rodrigo