The best Hacker News stories from Show from the past day
Latest posts:
Show HN: WebPtoPNG – I built a WebP to PNG tool, everything runs in the browser
I built WebPtoPNG after getting frustrated with converters that throttle uploads or phone data; everything runs straight in the browser, and never asks for a signup.
Show HN: LazyPromise = Observable – Signals
A Promise-like primitive which is lazy/cancelable, has typed errors, and emits synchronously instead of on the microtask queue. In a way LazyPromise is what you get if you take an Observable and make it impossible to misuse it for what the Signals were built to do.
Show HN: Spice Cayenne – SQL acceleration built on Vortex
Hi HN, we’re Luke and Phillip, and we’re building Spice.ai OSS - a lightweight, portable data and AI engine and powered by Apache DataFusion & Ballista for SQL query, hybrid-search, and LLM-inference across disaggregated-storage used by enterprises like Barracuda Networks and Twilio.<p>We first introduced Spice [1] on HN in 2021 and re-launched it on HN [2] in 2024 re-built from the ground up in Rust.<p>Spice includes the concept of a Data Accelerator [3], which is a way to materialize data from disparate sources, such as other databases, in embedded databases like SQLite and DuckDB.<p>Today we’re excited to announce a new Ducklake-inspired Data Accelerator built on Vortex [3], a highly performant, extensible columnar data format that claims 100x faster random access, 10-20x faster scans, 5x faster writes with a similar compression ratio vs. Apache Parquet.<p>In our tests with Spice, Vortex performs faster than DuckDB with a third of the memory usage, and is much more scalable (multi-file). For real-world deployments, we see the DuckDB Data Accelerator often capping out around 1TB, but Spice Cayenne can do Petabyte-scale.<p>You can read about it at <a href="https://spice.ai/blog" rel="nofollow">https://spice.ai/blog</a> and in the Spice OSS release notes [4].<p>This is just the first version, and we’d love to get your feedback!<p>GitHub: <a href="https://github.com/spiceai/spiceai" rel="nofollow">https://github.com/spiceai/spiceai</a><p>[1] <a href="https://news.ycombinator.com/item?id=28448887">https://news.ycombinator.com/item?id=28448887</a><p>[2] <a href="https://news.ycombinator.com/item?id=39854584">https://news.ycombinator.com/item?id=39854584</a><p>[3] <a href="https://github.com/vortex-data/vortex" rel="nofollow">https://github.com/vortex-data/vortex</a><p>[4] <a href="https://spiceai.org/blog/releases/v1.9.0" rel="nofollow">https://spiceai.org/blog/releases/v1.9.0</a>
Show HN: A local-first, reversible PII scrubber for AI workflows
Hi HN,<p>I’m one of the maintainers of Bridge Anonymization. We built this because the existing solutions for translating sensitive user content are insufficient for many of our privacy-concious clients (Governments, Banks, Healthcare, etc.).<p>We couldn't send PII to third-party APIs, but standard redaction destroyed the translation quality. If you scrub <i>"John"</i> to <i>"[PERSON]"</i>, the translation engine loses gender context (often defaulting to masculine), which breaks grammatical agreement in languages like French or German.<p>So we built a reversible, local-first pipeline for Node.js/Bun. Here is how we implemented the tricky parts:<p>0. The Mapping<p>We use XML-like tags with ID’s that uniquely identify the PII, `<PII type=”PERSON” id=”1”>`. Translation models and the systems around them work with XML data structures since the dawn of Computer Aided Translation tools, so this improves compatibility with existing workflows and systems. A `PIIMap` is stored locally for rehydration after translation (AES-256-GCM-encrypted by default).<p>1. Hybrid Detection Engine<p>Obviously neither Regex nor NER was enough on its own.<p>- Structured PII: We use strict Regex with validation checksums for things like IBANs (Mod-97) and Credit Cards (Luhn).
- Soft PII: For names and locations, we run a quantized `xlm-roberta` model via `onnxruntime-node` directly in the process. This lets us avoid a Python sidecar while keeping the package ‘lightweight’ (still ~280MB for the quantized model, but acceptable for desktop environments).<p>2. The "Hallucination" Guard (Fuzzy Rehydration)<p>LLMs often "mangle" the XML placeholders during translation (e.g., turning `<PII id="1"/>` into `< PII id = « 1 » >`).
We implemented a Fuzzy Tag Matcher that uses flexible regex patterns to detect these artefacts. It identifies the tag even if attributes are reordered or quotes are changed, ensuring we can always map the token back to the original encrypted value.<p>3. Semantic Masking<p>We are currently working on "Semantic Masking"—adding context to the PII tag (like `<PII type="PERSON" gender="female" id="1" />` ) to preserve (gender) context for the translation. For now, we are relying on a lightweight lookup-table approach to avoid the overhead of a second ML model or the hassle of fine tuning. So far this works nicely for most use cases.<p>The code is MIT licensed. I’d love to hear how others are handling the "context loss" problem in privacy-preserving NLP pipelines! I think this could quite easily be generalized to other LLM applications as well.
Show HN: Lamp Carousel – DIY kinetic sculpture powered by lamp heat (2024)
I wanted to share this fun craft activity for the holidays that I've been doing with my family over the last few years. I came up with these while cutting up some cans trying to make an aluminum version of paper spinners.<p>There are a variety of shapes that work, but generally bigger+lighter spinners are better. Also incandescent bulbs are the best, but LEDs work too.<p>They remind me of candle carousels I would see at my grandparents' house during Christmas. Let me know what you think!
Show HN: Exploring Mathematics with Python
Show HN: Tonbo – an embedded database for serverless and edge runtimes
Show HN: No more writing shitty regexes to police usernames
Every product that allows usernames eventually ships the same broken solution. Someone adds a blacklist. Then a regex. Then another regex copied from StackOverflow. It works just long enough to ship, and then `admin`, `support`, city names, brand impersonation, and obvious slurs start leaking through anyway. Everyone knows it’s fragile, but it gets ignored because "it’s just usernames".<p>I’ve had to rebuild this logic across multiple products, and I got tired of pretending it’s a solved problem. So I built *username.dev*, an API that answers a more useful question than "is this taken?" — it tells you what a username actually represents.<p>Instead of returning a boolean, the API classifies usernames into real categories like brands, public figures, places, system-reserved terms, dictionary words, premium handles, and offensive content, and returns structured metadata you can actually make decisions with. That means blocking impersonation without breaking legitimate users, stopping abuse without maintaining massive regex lists, and even monetizing high-demand usernames if that’s part of your product.<p>Under the hood it’s intentionally boring infrastructure: Cloudflare Workers at the edge, KV for fast reads, D1 for usage and analytics, and a simple HTTP endpoint (`GET /check?input=foo`). P95 latency sits around 300ms globally. There’s no ML magic, no black box, and no attempt to be clever — just fast, deterministic classification.<p>Pricing is usage-based and prepaid because subscriptions for infrastructure like this are annoying. There’s a free tier with 1,000 requests and no credit card. Use it, throw it away, or rip the idea off.<p>If you think regex blacklists are "good enough", usernames don’t matter, or this is a trivial problem, you’re probably already shipping bugs — they’re just not loud enough yet.<p>Tell me why this is a bad idea, what edge cases I’m missing, or what you’ve duct-taped together instead.<p>— Sourabh
Show HN: Turn raw HTML into production-ready images for free
Show HN: Turn raw HTML into production-ready images for free
Show HN: Vibium – Browser automation for AI and humans, by Selenium's creator
i started the selenium project 21 years ago. vibium is what i'd build if i started over today with ai agents in mind.
go binary under the hood (handles browser, bidi, mcp) but devs never see it. just npm install vibium. python/java coming.
for claude code: claude mcp add vibium -- npx -y vibium
v1 ships today. ama.
Show HN: Vibium – Browser automation for AI and humans, by Selenium's creator
i started the selenium project 21 years ago. vibium is what i'd build if i started over today with ai agents in mind.
go binary under the hood (handles browser, bidi, mcp) but devs never see it. just npm install vibium. python/java coming.
for claude code: claude mcp add vibium -- npx -y vibium
v1 ships today. ama.
Show HN: Minimalist editor that lives in browser, stores everything in the URL
I wanted to see how far I could go building a notes app using only what modern browsers already provide – no frameworks, no storage APIs, no build step.<p>What it does:<p>Single HTML file, no deps, 111 loc<p>Notes live in the URL hash (shareable links!)<p>Auto-compressed with CompressionStream<p>Plain-text editor (contenteditable)<p>History support<p>Page title from first # heading<p>Respects light/dark mode<p>No storage, cookies, or tracking<p>The entire app is the page source.<p><a href="https://textarea.my/" rel="nofollow">https://textarea.my/</a>
Show HN: Minimalist editor that lives in browser, stores everything in the URL
I wanted to see how far I could go building a notes app using only what modern browsers already provide – no frameworks, no storage APIs, no build step.<p>What it does:<p>Single HTML file, no deps, 111 loc<p>Notes live in the URL hash (shareable links!)<p>Auto-compressed with CompressionStream<p>Plain-text editor (contenteditable)<p>History support<p>Page title from first # heading<p>Respects light/dark mode<p>No storage, cookies, or tracking<p>The entire app is the page source.<p><a href="https://textarea.my/" rel="nofollow">https://textarea.my/</a>
Show HN: Python SDK – forecasting with foundation time-series and tabular models
We’ve built a Python SDK for running inference on foundation models designed for time-series and tabular data. They are new SOTA models for time-series and tabular tasks and work out of the box. They do not require model training or feature engineering. The link to the GitHub repository is:
<a href="https://github.com/S-FM/faim-python-client" rel="nofollow">https://github.com/S-FM/faim-python-client</a>
Show HN: Yapi – FOSS terminal API client for power users
I shared a previous version of yapi a few months ago in the comments section of a post talking about the insanity of Postman being 'down'. yapi has developed into a more mature project since then!<p><a href="https://github.com/jamierpond/yapi" rel="nofollow">https://github.com/jamierpond/yapi</a><p>Still very early, but it makes me much more productive vs Postman, Bruno, Insomnia, etc.<p>If youre a nvim/tmux culture human, you might like this!
Show HN: I wrote a small lib to turn a USB gamepad into a Bluetooth one
I had two old USB gamepads lying around that I wanted to use, but my computer is too far from the couch, so I wrote a little ESP32-S3 firmware that turns USB gamepads into Bluetooth ones.<p>You connect your gamepad to the ESP32-S3 with an OTG cable, power the ESP32 with either 5V somehow or a powered USB hub, and now you can pair the controller via Bluetooth to your PC!
Show HN: C-compiler to compile TCC for live-bootstrap
Show HN: C-compiler to compile TCC for live-bootstrap
Show HN: CineCLI – Browse and torrent movies directly from your terminal
Hi HN<p>I built CineCLI — a cross-platform terminal app to browse movies, view details,
and open torrents directly in your system torrent client.<p>Features:
- Search movies from the terminal
- Rich UI with ratings, runtime, genres
- Interactive & non-interactive modes
- Magnet handling via system default client
- Linux/macOS/Windows support
- No ads, no tracking<p>GitHub: <a href="https://github.com/eyeblech/cinecli" rel="nofollow">https://github.com/eyeblech/cinecli</a>
PyPI: <a href="https://pypi.org/project/cinecli/" rel="nofollow">https://pypi.org/project/cinecli/</a><p>Would love feedback from terminal + Python folks