<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: prasoonds</title><link>https://news.ycombinator.com/user?id=prasoonds</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 30 May 2026 22:40:22 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=prasoonds" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by prasoonds in "I want to wash my car. The car wash is 50 meters away. Should I walk or drive?"]]></title><description><![CDATA[
<p>I've used LLMs enough that I have a good sense of their _edges_ of intelligence. I had assumed that reasoning models should easily be able to answer this correctly.<p>And indeed, Sonnet and Opus 4.5 (medium reasoning) say the following:<p>Sonnet: Drive - you need to bring your car to the car wash to get it washed!<p>Opus: You'll need to drive — you have to bring the car to the car wash to get it washed!<p>Gemini 3 Pro (medium): You should drive.<p>--<p>But OpenAI 5.2 reasoning, even at high, told me to walk. My first instinct was, I had underspecified the location of the car. The model seems to assume the car is already at the car wash from the wording. GPT 5.x series models behave a bit more on the spectrum so you need to tell them the specifics. So I asked:<p>"I want to wash my car. My car is currently at home. The car wash is 50 meters away. Should I walk or drive?"<p>GPT 5.2 Reasoning (medium):<p>"Drive—your goal is to get the car to the car wash, and it’s only 50 meters, so a slow, careful drive is simplest.<p>One small optimization: if you’re worried about starting the car for such a short trip or you want to avoid idling in a line, you can walk over first to check if there’s a queue / if it’s open, then come back and drive the car over when it’s your turn."<p>Which seems to turn out as I expected.</p>
]]></description><pubDate>Mon, 16 Feb 2026 07:14:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=47031882</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=47031882</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47031882</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>Hey, I’m on mobile right now and can’t remember this off the top of my head. Will check and update in a few hours.</p>
]]></description><pubDate>Wed, 11 Feb 2026 03:59:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46970654</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46970654</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46970654</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>Hey, no. We are not dealing with raw card numbers. It’s just a layer on top of the existing stripe SDK that makes using stripe easier. PCI compliance does not kick in here.</p>
]]></description><pubDate>Wed, 11 Feb 2026 03:52:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=46970582</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46970582</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46970582</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>haha yes, it’s definitely a bit of a silly name. The idea is you the user does not have to deal with the webhooks!</p>
]]></description><pubDate>Tue, 10 Feb 2026 20:37:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46966518</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46966518</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46966518</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>That’s a fair point. But of course, this library also helps with other matters - wallets, credits and a code as config based system which can be quite useful too.<p>And also, if you record all the webhooks events (and a backfill), that basically gives you your whole Stripe data available locally - I’ve actually put it to good use in diagnosing payment failure issues before.</p>
]]></description><pubDate>Tue, 10 Feb 2026 20:36:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=46966503</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46966503</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46966503</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>Well it’s a silly name, yes. _You_ don’t have to deal with webhooks - it happens in the background and is taken care of by the library!</p>
]]></description><pubDate>Tue, 10 Feb 2026 20:33:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46966463</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46966463</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46966463</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>Great question. Basically, you would change your billing.config.ts and update the price.<p>Then, you run the `sync` command - it matches prices by a composite key: `productId:amount:currency:interval`. Since the amount has changed, it won't find a match for the old price. So, it will create a new price in Stripe and update the Price ID. Your new customers automatically get the new price in the Pricing Table component.<p>Your old subscriptions stay on the old price - which is still active in Stripe. We haven't added support for migrating these customers to the new price yet but it's in the roadmap!<p>I would like to add that we've tried making the porcelain / user API for the library to best fit today's commonly uses SaaS pricing models so most actions usually do what you would expect (like this price update) but, it's hard to strike a balance between customizability and the _just works_ factor.</p>
]]></description><pubDate>Tue, 10 Feb 2026 18:42:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46964763</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46964763</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46964763</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>Yes, this is one of the bigger use-cases for this library. Lots of folks want custom analytics on their Stripe data and this provides a nice way to do just that.<p>Let me know how you find it! Happy to implement any fixes and PRs welcome!</p>
]]></description><pubDate>Tue, 10 Feb 2026 18:32:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=46964562</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46964562</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46964562</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB"]]></title><description><![CDATA[
<p>Hi HN, library creator here.<p>I've linked a demo app linked in the post to try this out:<p><<a href="https://snw-test.vercel.app" rel="nofollow">https://snw-test.vercel.app</a>><p>It uses Clerk for auth and Clerk seems to be having problems:<p><<a href="https://downdetector.com/status/clerk-inc/" rel="nofollow">https://downdetector.com/status/clerk-inc/</a>><p>So if you're having any issues loading the app, you may have to wait a bit!</p>
]]></description><pubDate>Tue, 10 Feb 2026 18:08:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46964143</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46964143</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46964143</guid></item><item><title><![CDATA[Show HN: Stripe-no-webhooks – Sync your Stripe data to your Postgres DB]]></title><description><![CDATA[
<p>Hey HN, stripe-no-webhooks is an open-source library that syncs your Stripe payments data to your own Postgres database:
<a href="https://github.com/pretzelai/stripe-no-webhooks" rel="nofollow">https://github.com/pretzelai/stripe-no-webhooks</a>.<p>Here's a demo video: <a href="https://youtu.be/cyEgW7wElcs" rel="nofollow">https://youtu.be/cyEgW7wElcs</a><p>Why is this useful? (1) You don't have to figure out which webhooks you need or write listeners for each one. The library handles all of that. This follows the approach of libraries like dj-stripe in the Django world (<a href="https://dj-stripe.dev/" rel="nofollow">https://dj-stripe.dev/</a>). (2) Stripe's API has a 100 rpm rate limit. If you're checking subscription status frequently or building internal tools, you'll hit it. Querying your own Postgres doesn't have this problem. (3) You can give an AI agent read access to the stripe.* schema to debug payment issues—failed charges, refunds, whatever—without handing over Stripe dashboard access. (4) You can join Stripe data with your own tables for custom analytics, LTV calculations, etc.<p>It creates a webhook endpoint in your Stripe account to forward webhooks to your backend where a webhook listener stores all the data into a new <i>stripe.*</i> schema. You define your plans in TypeScript, run a sync command, and the library takes care of creating Stripe products and prices, handling webhooks, and keeping your database in sync. We also let you backfill your Stripe data for existing accounts.<p>It supports pre-paid usage credits, account wallets and usage-based billing. It also lets you generate a pricing table component that you can customize. You can access the user information using the simple API the library provides:<p><pre><code>  billing.subscriptions.get({ userId });
  billing.credits.consume({ userId, key: "api_calls", amount: 1 });
  billing.usage.record({ userId, key: "ai_model_tokens_input", amount: 4726 });
</code></pre>
Effectively, you don't have to deal with either the Stripe dashboard or the Stripe API/SDK any more if you don't want to. The library gives you a nice abstraction on top of Stripe that should cover ~most subscription payment use-cases.<p>Let's see how it works with a quick example. Say you have a billing plan like Cursor (the IDE) used to have: $20/mo, you get 500 API completions + 2000 tab completions, you can buy additional API credits, and any additional usage is billed as overage.<p>You define your plan in TypeScript:<p><pre><code>  {
    name: "Pro",
    description: "Cursor Pro plan",
    price: [{ amount: 2000, currency: "usd", interval: "month" }],
    features: {
      api_completion: {
        pricePerCredit: 1,              // 1 cent per unit
        trackUsage: true,               // Enable usage billing
        credits: { allocation: 500 },
        displayName: "API Completions",
      },
      tab_completion: {
        credits: { allocation: 2000 },
        displayName: "Tab Completions",
      },
    },
  }
</code></pre>
Then on the CLI, you run the `init` command which creates the DB tables + some API handlers. Run `sync` to sync the plans to your Stripe account and create a webhook endpoint. When a subscription is created, the library automatically grants the 500 API completion credits and 2000 tab completion credits to the user. Renewals and up/downgrades are handled sanely.<p>Consume code would look like this:<p><pre><code>  await billing.credits.consume({
    userId: user.id,
    key: "api_completion",
    amount: 1,
  });
</code></pre>
And if they want to allow manual top-ups by the user:<p><pre><code>  await billing.credits.topUp({
    userId: user.id,
    key: "api_completion",
    amount: 500,     // buy 500 credits, charges $5.00
  });
</code></pre>
Similarly, we have APIs for wallets and usage.<p>This would be a lot of work to implement by yourself on top of Stripe. You need to keep track of all of these entitlements in your own DB and deal with renewals, expiry, ad-hoc grants, etc. It's definitely doable, especially with AI coding, but you'll probably end up building something fragile and hard to maintain.<p>This is just a high-level overview of what the library is capable of. It also supports seat-level credits, monetary wallets (with micro-cent precision), auto top-ups, robust failure recovery, tax collection, invoices, and an out-of-the-box pricing table.<p>I vibe-coded a little toy app for testing: <a href="https://snw-test.vercel.app" rel="nofollow">https://snw-test.vercel.app</a>. There's no validation so feel free to sign up with a dummy email, then subscribe to a plan with a test card: 4242 4242 4242 4242, any future expiry, any 3-digit CVV.<p>Screenshot: <a href="https://imgur.com/a/demo-screenshot-Rh6Ucqx" rel="nofollow">https://imgur.com/a/demo-screenshot-Rh6Ucqx</a><p>Feel free to try it out! If you end up using this library, please report any bugs on the repo. If you're having trouble / want to chat, I'm happy to help - my contact is in my HN profile.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46963177">https://news.ycombinator.com/item?id=46963177</a></p>
<p>Points: 66</p>
<p># Comments: 30</p>
]]></description><pubDate>Tue, 10 Feb 2026 17:14:48 +0000</pubDate><link>https://github.com/pretzelai/stripe-no-webhooks</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46963177</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46963177</guid></item><item><title><![CDATA[New comment by prasoonds in "[dead]"]]></title><description><![CDATA[
<p>Hey Felix, yes you can.<p>This library is simply a wrapper around Stripe with easier implementation and some additional primitives (credits / wallets / real-time usage).<p>So, just as in Stripe, where you would make a new custom plan for, say, an enterprise use, simiarly here, you'd do the same.<p>Though, I will admit your `billing.config.ts` file will get pretty crowded...<p>I will think on it and try to come up with a more user-friendly UX for this use case.</p>
]]></description><pubDate>Fri, 30 Jan 2026 18:04:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=46827700</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46827700</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46827700</guid></item><item><title><![CDATA[New comment by prasoonds in "Kidnapped by Deutsche Bahn"]]></title><description><![CDATA[
<p>Are you seriously asking why Airport infrastructure should support English or is it rhetorical?<p>If you are not a backwater that doesn't get any travelers, you should cater to tourists who, as a rule, do not speak your language. Even those tourists who do speak a few phrases will absolutely be unable to understand something as complex as a the <i>train spilling up into two</i> before going to the Airport.<p>> Why should anywhere cater to my failure to learn their language and systems? It’s nice if they do but I don’t expect it.<p>I certainly don't see this attitude from Germans in Spain.</p>
]]></description><pubDate>Tue, 30 Dec 2025 14:09:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46433459</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=46433459</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46433459</guid></item><item><title><![CDATA[New comment by prasoonds in "Launch HN: Poly (YC S22) – Cursor for Files"]]></title><description><![CDATA[
<p>This is really cool! I suck at organizing my filesystem and I've lost track of how many times I had to find _that ONE_ PDF which I KNOW I have but cannot find! This would have solved that many times over.<p>However, at least for my use-case, this is a very infrequent problem. So, a monthly subscription and the security risk wouldn't be worth it. Though I'm certain there are people who work with files all day and for them, this might be god-send!</p>
]]></description><pubDate>Thu, 20 Nov 2025 18:11:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=45995709</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=45995709</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45995709</guid></item><item><title><![CDATA[New comment by prasoonds in "Honda: 2 years of ml vs 1 month of prompting - heres what we learned"]]></title><description><![CDATA[
<p>Right? This one is also very clear ChatGPTese<p>> That’s not a marginal improvement; it’s a different way of building classifiers.<p>They've replaced an em-dash with a semi-colon.</p>
]]></description><pubDate>Fri, 14 Nov 2025 13:49:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=45926676</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=45926676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45926676</guid></item><item><title><![CDATA[New comment by prasoonds in "Hijacking Claude Code via Injected Marketplace Plugins"]]></title><description><![CDATA[
<p>Somewhat tangential but I’m curious how people are dealing with these new LLM addons (mcp, extensions for vscode, now CC plugins) at big orgs.<p>I’ve been using it for personal projects but surely large companies have _some_ way they’re trying to prevent security issues? For instance, I remember one company I worked at blocked us from installing VSCode extensions.</p>
]]></description><pubDate>Thu, 16 Oct 2025 16:18:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=45607303</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=45607303</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45607303</guid></item><item><title><![CDATA[New comment by prasoonds in "Trump to impose $100k fee for H-1B worker visas, White House says"]]></title><description><![CDATA[
<p>Offering a perspective from Berlin - a decent-to-good senior engineer goes for $120k-$130k so I'm guessing for Warsaw, you could get someone similar for $90k-100k</p>
]]></description><pubDate>Sat, 20 Sep 2025 07:19:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=45311226</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=45311226</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45311226</guid></item><item><title><![CDATA[Dewey.py: Rebuilding Deep Research with Open Models]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.ubicloud.com/blog/rebuilding-deep-research-with-open-models">https://www.ubicloud.com/blog/rebuilding-deep-research-with-open-models</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43579844">https://news.ycombinator.com/item?id=43579844</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 04 Apr 2025 09:06:53 +0000</pubDate><link>https://www.ubicloud.com/blog/rebuilding-deep-research-with-open-models</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=43579844</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43579844</guid></item><item><title><![CDATA[New comment by prasoonds in "100% Unemployment: on keeping busy when the robots take over (2013)"]]></title><description><![CDATA[
<p>Really illuminating. Reading the comments, I can't help but think how bad most of us are at predicting the future. While the OP's world might still be somewhat far away, it doesn't seem nearly as far-fetched now as it would have seemed in 2013.</p>
]]></description><pubDate>Fri, 24 Jan 2025 11:18:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=42812101</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=42812101</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42812101</guid></item><item><title><![CDATA[New comment by prasoonds in "Reflections"]]></title><description><![CDATA[
<p>I disagree.<p>Sonnet 3.6 (the 2022-10-22 release of Sonnet 3.5) is head and shoulders above GPT-4 and anyone who has been using both regularly can attest to this fact.<p>Reasoning models do reason quite well but you need the right problems to ask them. Don't throw open-ended problems at them. They perform well on problems with one (or many) correct solution(s). Code is a great example - o1 has fixed tricky code bugs for me where Sonnet and other GPT-4 class models have failed.<p>LLMs are leaky abstractions still - as the user, you need to know when and how to use them. This, I think, will get fixed in the 1-2 years. For now, there's no substitute for hands on time using these weird tools. But the effort is well worth it.</p>
]]></description><pubDate>Mon, 06 Jan 2025 08:45:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=42608875</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=42608875</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42608875</guid></item><item><title><![CDATA[New comment by prasoonds in "Show HN: FTWA – Turn any website into an app"]]></title><description><![CDATA[
<p>This is really cool! Any chance of adding support for the Arc browser? Right now, Chrome allows for some websites (WhatsApp, Spotify, YouTube Music) to be made into "apps" already via PWAs. Arc - which is based on chromium, for some mysterious reason, chooses to not support PWAs so this would be <i>extremely</i> useful for Arc!</p>
]]></description><pubDate>Wed, 16 Oct 2024 07:39:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=41856553</link><dc:creator>prasoonds</dc:creator><comments>https://news.ycombinator.com/item?id=41856553</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41856553</guid></item></channel></rss>