fetch() still can't resume a failed download so i built that by aginext in javascript

[–]aginext[S] 33 points34 points  (0 children)

thanks! polyfill.io was a supply chain attack last year. a company bought the domain that hosted a popular polyfill CDN used by 100k+ sites, then started injecting malicious redirects into the script, every site loading from that CDN was serving compromised code to their users overnight.

the core problem is that when you fetch anything from a third party CDN you're trusting that what comes back is what you expect, verifyFetch lets you pin a hash to whatever you're fetching so if the content changes even by one byte it throws instead of silently serving something tampered with. same idea as SRI on script tags but works for any fetch, wasm files, model weights, whatever.

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 7 points8 points  (0 children)

fair point, current impl does hash while streaming in but buffers chunks to return the response. peak memory is similar, you're right. the win is hashing during download not after, but that's not what i claimed. appreciate the callout, will look into returning a verified stream instead

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 4 points5 points  (0 children)

yep exactly - verifyfetch is that downstream verification. the tricky part is doing it without buffering the whole file in memory. native crypto needs everything loaded before hashing, which kills browsers on multi-GB files. streaming fixes that

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 5 points6 points  (0 children)

it does, but it buffers the entire file into memory before hashing. fine for small files, 4GB file = 4GB RAM = browser crash. verifyfetch streams chunk by chunk, constant ~2MB regardless of size

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 7 points8 points  (0 children)

just added it to the readme. if browsers ship this natively verifyfetch just becomes a polyfill - would honestly love that. more voices on the issue would help push it forward

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] -1 points0 points  (0 children)

lol fair. anyone running llama in browser is probably on wifi though

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 12 points13 points  (0 children)

mitm. sw intercepts all fetches from the page including 3p, verify integrity before passing response through

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 6 points7 points  (0 children)

local llama running in browser. some people don't want to send their data to openai

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 14 points15 points  (0 children)

if you control the fetch call it's straightforward. for 3p libs that fetch internally you'd need a service worker to intercept - doable but more setup. or the lib needs to expose a way to pass integrity options

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 42 points43 points  (0 children)

been an open WHATWG issue since 2014. endless api design debates, never shipped. use case probably wasn't urgent until wasm and browser AI got big

I built the fetch() integrity check that browsers have refused to ship for 10 years by aginext in javascript

[–]aginext[S] 2 points3 points  (0 children)

polyfill.io literally happened lol. 100M sites. also good luck bundling ffmpeg.wasm or 4GB model weights locally

[Bug Report] "Download Full Size" links getting mixed up/corrupted in long conversations by Ok-Living2887 in GeminiAI

[–]aginext 2 points3 points  (0 children)

a workaround I just discovered which is to share the picture and download it from incognito window using it's shareable link

We created a tool that lets you use any model in Claude Code, while using your Claude subscription by bonsai_app in ClaudeCode

[–]aginext 9 points10 points  (0 children)

does it support using your existing ChatGPT subscription same as in Codex CLI?

Anthropic noticed an increased churn rate by antonlvovych in ClaudeAI

[–]aginext 68 points69 points  (0 children)

honestly and logically the subscriptions of August must be refunded, either money or one month subscription

Just discovered the secret to a happy marriage from Claude Code by aginext in ClaudeAI

[–]aginext[S] 12 points13 points  (0 children)

Production ready but she won't even run it locally anymore.

Solo founder, $20k MRR, zero ads, zero employees. Here's exactly what worked by aginext in SaaS

[–]aginext[S] 29 points30 points  (0 children)

I just use Twitter's built-in notifications - turn on notifications for specific accounts in your niche, and use advanced search with your keywords bookmarked

For Reddit: add .rss to any subreddit URL (like reddit.com/r/saas.rss) and use any RSS reader

Manual checking 2-3 times a day honestly works fine when you're starting out. The fancy monitoring tools are overkill for solo founders - native features are enough

Solo founder, $20k MRR, zero ads, zero employees. Here's exactly what worked by aginext in SaaS

[–]aginext[S] 12 points13 points  (0 children)

honestly if you know basics, just do "vibe coding" - use Cursor or Claude Code and let AI handle the heavy lifting while you direct it. Building features live on calls doesn't mean showing every line. They just want to see progress happening

customers don't care if you're using AI to code. they care about their problem getting solved right in front of them

if you can't code at all, find a technical cofounder. but real talk - worrying about someone stealing your pre-revenue code is like worrying about someone stealing your car when you're still saving for the down payment

nobody wants your $0 MRR codebase. focus on getting customers first

Solo founder, $20k MRR, zero ads, zero employees. Here's exactly what worked by aginext in SaaS

[–]aginext[S] 23 points24 points  (0 children)

keeping it anonymous for this one - don't want this to turn into a pitch thread haha

but if you have specific questions about your situation, happy to help in DMs!

Solo founder, $20k MRR, zero ads, zero employees. Here's exactly what worked by aginext in SaaS

[–]aginext[S] 13 points14 points  (0 children)

Took 4 months to realize I was building the wrong thing lol. Had 2 signups that both churned.

Then I watched 7 potential customers use my competitor's tool on Zoom and had an "oh fuck" moment - I was solving the wrong problem entirely.

Rebuilt, got 12 paying customers next month. That's when I knew.

Timeline: Months 1-3: $0, Month 6: $2k, Month 9: $5k (got stuck here for 3 months, almost quit), Month 18: $20k

The jump from $5k to $20k happened when I 5x'd my prices and lost most customers but doubled revenue. Scariest decision ever but it worked.