DevIdiot!
Free OCR sites cap you at 15 pages/hour, so I built an unlimited one that runs Tesseract in the browser
Every free OCR service I tried throttles you: 15 pages/hour, 50 pages/month, or a free tier that exists to push you to a paid plan. The cap makes sense for them, because server compute costs money on every page. The only genuinely unlimited free option has been raw Tesseract on the command line, which most people can't use.So I ran the same engine in the browser instead:Tesseract.js (Tesseract compiled to WebAssembly) runs on your own CPU, so there's no per-page cost and nothing to rationAccepts
How to Get a Visitorâs IP and Country in Express (Behind Proxies and CDNs)
Fix req.ip behind Nginx, load balancers and CDNs, skip the spoofable X-Forwarded-For pattern, and add a cached, fail-open country lookup with an honest accuracy radius. Why req.ip shows your proxyâs IPIn production your Express app almost never talks to the visitor directly. Nginx, a cloud load balancer or a CDN accepts the connection and opens a new one to Node. From Expressâs point of view, the âclientâ is that proxy, so req.ip returns something like 10.0.0.12 or 127.0.0.1.The real addres
I Built a Grocery Sim Where the Stock Only Exists on My Server
I work part-time in a grocery store. Stocking shelves, facing product, the whole thing. One night I thought: what if I made that into a game? So my team and I did. It's called STOCK BOY - a 16-bit grocery rush game, and it's the flagship of my little studio, Levi Studios.You clock in. Customers walk in with a list. You tap them and serve from your shelves. Empty shelves mean angry walkouts. Then the lunch rush hits and it gets wild.But here's the part I'm proud of, and the reason I'm writing thi
When crt.sh's website is down, query its public database instead
I maintain a small tool that searches Certificate Transparency logs for new certificates on a domain. It reads crt.sh's JSON output, and it already retries the 404s and 502s that crt.sh returns when it's busy.This week retrying stopped being enough. For more than an hour, every request to the website failed: a 502 in under a second, or no answer at all until my 40-second timeout. The platform I run the tool on tests it once a day with its default input, and it had failed 5 of its last 27 daily t
Screening the payee of an x402 payment with Privy: OFAC, UN, EU and UK in one signed call
Privy has a good recipe for blocking x402 payments to sanctioned addresses: https://docs.privy.io/recipes/agent-integrations/x402-sanctions-screeningThe enforcement point is Privy's policy engine. You load a denylist into a condition set, and Privy refuses to sign a payment whose recipient is on it. The recipe is clear about what it leaves to you: loading the addresses is "general code, so it is not reproduced here", the example source is the OFAC SDN list, and it suggests pairing the denylist w
Hello DEV! đ
Iâm Ayush, an AI & Data Science student whoâs currently learning by building real projects.Iâm working on improving my skills in:â Java & DSAđ JavaScript & Web Developmentđď¸ SQL & Databasesđ¤ Machine Learning & Data Analyticsđ§ Git & GitHubInstead of just collecting tutorials and certificates, Iâm trying to build things, break things, fix them, and actually understand how they work.Currently, Iâm working on projects involving web development, machine learning, data analytic
Turning off Chrome noise suppression made far-field speech usable
Chrome enables noise suppression on getUserMedia when the constraints leave it alone. Next to the mic that default is reasonable. A voice across the table is quieter and less stable, and the browser suppressor treats a lot of it as noise, so far-field speech arrives at STT already damaged.The mic stream goes to Solaria-1, which already handles noise. Putting the browser suppressor in front of that was what made distant speech unusable, so mic capture forces the three flags:{ echoCancellation: t
Stop Letting Agents Fill Your SSD With npm
Last week I asked an AI agent to prototype three small web apps. It spun up three Vite projects, configured Tailwind, and ran test builds.Thirty minutes in, my laptop showed a low disk space alert.The agent had downloaded three separate copies of React, Vite, TypeScript, and ESLint. Each project had its own 600 MB node_modules directory. If you run multiple subagents or test throwaway ideas during the week, you lose dozens of gigabytes to duplicate JavaScript packages. The default to npmLan
Your browser can detect your NAT type in 30 lines of JavaScript
Your browser can detect your NAT type in 30 lines of JavaScriptEver had a video call that connects fine on one network but refuses to establish peer-to-peer on another? Or a game where voice chat works for everyone except that one friend? Nine times out of ten, the culprit is the NAT sitting between you and the internet â and your browser already has everything needed to interrogate it. The 30-line versionasync function probeNat(stunUrl) { const pc = new RTCPeerConnection({ iceServer
How the Browser Renders a Page
⥠TL;DR: Trace HTML bytes to pixels through the critical rendering path: DOM, CSSOM, layout, paint, composite. Once you know what blocks rendering and why reflows are expensive, you can stop layout thrashing and fix the real performance killers. ContentsYou hit Enter, then what?One sentence, then a pictureThe critical rendering pathWhat happens at each stage, and what slows it downWhat blocks renderingReflow vs repaint vs composite (and layout thrashing)Common mistakes that cost hoursTakeaw
Stream an LLM object into React, field by field â in one hook
You asked the model for a JSON object and set stream: true so the UI can fillin as it arrives. Now you're in the usual mess:useEffect(() => { const ctrl = new AbortController(); (async () => { let buf = ""; for await (const chunk of stream(ctrl.signal)) { buf += chunk; try { setData(JSON.parse(buf)); // đĽ throws on every partial chunk } catch {} } })(); return () => ctrl.abort();}, [prompt]);JSON.parse throws until the very last token, you can't tell w
Marketing automation for devs: Heraldâs content scheduling
The problemIndie developers and small teams ship code faster than they can write about it. Every new release, demo, or bug fix is an opportunity to share a story, but manually drafting, reviewingentra, and posting content across multiple platforms is tedious. It also introduces friction: developers must juggle writing, formatting, social copy, and publishing while maintaining focus on the product. Feature spotlight: automated content scheduling and publishingHerald solves this frict
Fixing Follow-Ups in AI Recruiting with TalentPing
The Follow-Up Bottleneck in Outbound RecruitingInitial outreach rarely closes a candidate conversation on its own. For recruiters managing active searches across multiple roles, the real workload lies in the cadence: tracking response windows, drafting contextual follow-ups, and keeping candidate statuses synchronized with the applicant tracking system (ATS). When follow-up tracking is handled manually across spreadsheets or generic email tools, two failure modes inevitably appear. First,
AI Customer Service: Seamless Escalations for SMBs
The Challenge of Smooth HandoffsIndian SMB owners often juggle conversations across WhatsApp, Instagram DMs, SMS, web chat, and email. When an AI assistant canât resolve a query, the message must hand off to a human agent without losing context or duplicating effort. In the past, many platforms would either drop the conversation into a queue with no trace of the AIâs attempt or let the AI overârun a human agent who had already taken the thread. What GoSumo Does DifferentlyGoSumoâs AIâ
GSTR-2B Reconciliation with GSTBot: AIâPowered Accuracy
Feature Spotlight: GSTRâ2B Reconciliation with TolerancesIn the Indian GST ecosystem, the GSTRâ2B feed is the authoritative record of purchases that a taxpayer must match against invoices received from vendors. For smallâtoâmedium businesses, the volume of invoicesâoften hundreds per monthâmakes a manual, stringâbyâstring comparison tedious and errorâprone. GSTBot addresses this bottleneck with an automated reconciliation engine that tolerates minor discrepancies while still flagging genui
AI Recruiting with Automated Outreach in TalentPing
The Friction in Candidate Outreach SequencesRecruiters and hiring managers often spend significant parts of their working day managing outbound communication. Finding suitable candidates is only the first step; engaging them requires structured, multi-touch messaging sequences. When outreach is driven manually or through disconnected tools, several common operational failures emerge.First, follow-up messages are missed or sent at irregular intervals because tracking dozens of active thread
Reliable AI Recruiting with Automated Outreach
The Hidden Bottleneck in Automated Recruiting OutreachHiring teams rely on automated outreach to initiate candidate conversations at scale, but automated tools frequently hide operational issues behind superficial progress bars. A recruiter configures a sequence, queues a list of prospective candidates, and waits for responses. Behind the scenes, however, dispatches can stall silently. Mailbox quotas are hit, provider reputation holds pause delivery, or invalid addresses halt background ta
CDSS Comparison Page in Documedic
ProblemClinicians often need to evaluate multiple clinical decision support systems (CDSS) before integrating them into practice. Existing tools either provide a flat list of features or require manual data gathering, which is timeâconsuming and errorâprone.Documedic addresses this gap with a dedicated comparison page that aggregates key metricsâaccuracy, integration complexity, cost, and user satisfactionâinto a single, searchable view. The page is designed for physicians who need to make
AI Recruiting Beyond Single-Language Boundaries
The Edge Cases That Break Global OutreachAutomating sourcing and candidate communication across international markets often fails in the parsing layer. When recruiters run automated outreach across regional borders, systems encounter localized email clients, accented text, distinct employment contract structures, and non-standard time zones. In standard workflows, minor data mismatches cause disproportionate failures. An email client using a localized quoting prefix in Polish, German, or a
I built a copy-paste JSON viewer for shadcn/ui
Almost every app I work on ends up showing raw JSON somewhere: API responses, webhook payloads, debug panels. A <pre>{JSON.stringify(data, null, 2)}</pre> gets hard to read fast, and most JSON viewer packages bring their own styles and never quite match a shadcn/ui app. At the same time, when reading raw data, logs, analytics events, etc., having a decent way to quickly visualise complex json payloads is quite important (or at least it is for me!)So I built json-view-cn: a collapsibl