Wednesday, 31 December 2025

Show HN: Chat with people who share the same Internet connection (= IP address) https://bit.ly/4qAk4c1

Show HN: Chat with people who share the same Internet connection (= IP address) I built a simple, ephemeral chat service that connects you only with users who share the exact same public IP address as you. It's essentially a temporary, isolated chat room defined by your NAT gateway. It's not super useful nowadays, but let's see where this takes us. :) https://bit.ly/3N2E4Wc January 1, 2026 at 01:23AM

Show HN: Karpathy's Nanogpt but for Audio https://bit.ly/492VtGY

Show HN: Karpathy's Nanogpt but for Audio https://bit.ly/3KVwaxn December 31, 2025 at 11:28PM

Show HN: I built a portable Yahtzee device with custom PCB and WASM simulator https://bit.ly/4q4KuCW

Show HN: I built a portable Yahtzee device with custom PCB and WASM simulator https://bit.ly/3YjGulH December 31, 2025 at 11:48PM

Tuesday, 30 December 2025

Show HN: Client-side encrypted AI detector using model ensembling https://bit.ly/4q0kU1I

Show HN: Client-side encrypted AI detector using model ensembling Hi HN, I’m Oscar, a Year 8 student from Australia who enjoys messing around with computers and AI. I recently built an AI detector to build on my skills in computer science. I entered the prototype into the Oliphant Science Awards which is a local science competition (writing a 4000-word report on the methodology) and ended up winning, so I decided to polish it into a real web service that the world can make use of. I noticed that schools and businesses are rushing to use AI detectors, but most commercial tools require you to send full, plaintext documents to cloud servers. For researchers or IP-sensitive work, sending data unencrypted to a third party (who might use it for training) is a major privacy risk. Additionally, current commercial AI detectors aren't very transparent and are unable to tell you why they come to a conclusion. I wanted to build something that helps people make informed decisions based on as much information as possible, not tell them a simple percentage with nothing to back it up. I built Veredict to be secure and private: 1. The browser generates a one-time AES-256 key and encrypts the text locally using the Web Crypto API. 2. This AES key is encrypted using the server’s RSA public key. 3. The encrypted payload is sent to my backend (Python/FastAPI running on Modal serverless GPUs). 4. We decrypt in memory only for the split-second of inference. The plaintext is never saved to a database. The detection logic uses an ensemble of 4 models (including statistical analysis of perplexity/burstiness and a fine-tuned BERT model) to output a confidence score. A note on the login: I know HN prefers demos without sign-ups. Since I am a student paying for the GPU compute out of a limited budget, I strictly require Google Auth to prevent bots from draining my credits. I hope you understand. The app provides a free daily quota (250 words) so you can test the architecture. Link: https://bit.ly/4qrsMsY I'd really appreciate feedback on basically anything regarding my project :) https://bit.ly/4qrsMsY December 31, 2025 at 03:18AM

Show HN: A dynamic key-value IP allowlist for Nginx https://bit.ly/4jnIwei

Show HN: A dynamic key-value IP allowlist for Nginx I am currently working on a larger project that needs a short-lived HTTP "auth" based on a separate, out-of-band authentication process. Since every allowed IP only needs to be allowed for a few minutes at a time on specific server names, I created this project to solve that. It should work with any Redis-compatible database. For the docker-compose example, I used valkey. This is mostly useful if you have multiple domains that you want to control access to. If you want to allow 1.1.1.1 to mywebsite.com and securesite.com, and 2.2.2.2 to securesite.com and anothersite.org for certain TTLs, you just need to set hash keys in your Redis-compatible database of choice like: 1.1.1.1: - mywebsite.com: 1 (30 sec TTL) - securesite.com: 1 (15 sec TTL) 2.2.2.2: - securesite.com: 1 (3600 sec TTL) - anothersite.org: 1 (never expires) Since you can use any Redis-compatible database as the backend, per-entry TTLs are encouraged. An in-process cache can also be used, but is not enabled unless you pass --enable-l1-cache to kvauth. That makes successful auth_requests a lot faster since the program is not reaching out to the key/value database on every request. I didn't do any hardcore profiling on this but did enable the chi logger middleware to see how long requests generally took: kvauth-1 | 2025/12/30 21:32:28 "GET https://bit.ly/4bcnQDS HTTP/1.0" from 127.0.0.1:42038 - 401 0B in 300.462µs # disallowed request nginx-1 | 192.168.65.1 - - [30/Dec/2025:21:32:28 +0000] "GET / HTTP/1.1" 401 179 "-" "curl/8.7.1" kvauth-1 | 2025/12/30 21:32:37 "GET https://bit.ly/4bcnQDS HTTP/1.0" from 127.0.0.1:40160 - 401 0B in 226.189µs # disallowed request nginx-1 | 192.168.65.1 - - [30/Dec/2025:21:32:37 +0000] "GET / HTTP/1.1" 401 179 "-" "curl/8.7.1" # IP added to redis allowlist kvauth-1 | 2025/12/30 21:34:02 "GET https://bit.ly/4bcnQDS HTTP/1.0" from 127.0.0.1:54032 - 200 0B in 290.648µs # allowed, but had to reach out to valkey kvauth-1 | 2025/12/30 21:34:02 "GET https://bit.ly/4bcnQDS HTTP/1.0" from 127.0.0.1:54044 - 200 0B in 4.041µs nginx-1 | 192.168.65.1 - - [30/Dec/2025:21:34:02 +0000] "GET / HTTP/1.1" 200 111 "-" "curl/8.7.1" kvauth-1 | 2025/12/30 21:34:06 "GET https://bit.ly/4bcnQDS HTTP/1.0" from 127.0.0.1:51494 - 200 0B in 6.617µs # allowed, used cache kvauth-1 | 2025/12/30 21:34:06 "GET https://bit.ly/4bcnQDS HTTP/1.0" from 127.0.0.1:51496 - 200 0B in 3.313µs nginx-1 | 192.168.65.1 - - [30/Dec/2025:21:34:06 +0000] "GET / HTTP/1.1" 200 111 "-" "curl/8.7.1 IP allowlisting isn't true authentication, and any production implementation of this project should use it as just a piece of the auth flow. This was made to solve the very specific problem of a dynamic IP allow list for NGINX. https://bit.ly/4ptwXDW December 30, 2025 at 11:29PM

Monday, 29 December 2025

Show HN: Signing Room – Stateless Bitcoin Multisig Coordinator https://bit.ly/3LpZE6x

Show HN: Signing Room – Stateless Bitcoin Multisig Coordinator https://bit.ly/4pcWS2x December 30, 2025 at 04:44AM

Show HN: I created a 2025 Wrapped for WhatsApp Conversations https://bit.ly/4pWPNE9

Show HN: I created a 2025 Wrapped for WhatsApp Conversations Hey HN! As I sat to write my 2025 reflection, I realized one thing I was missing was a ‘year wrapped’ for my relationships — I got my music, got my photos, got my fitness wraps — but what about my relationships? Specifically, I wanted to figure out what my text conversations say about my relationships and myself, and if there’s been evolution throughout the year. Who reaches out more? What’s our tone and conflict resolution? What were our month by month successes and conflicts? So I built an app that analyzes WhatsApp conversations (.txt files) and surfaces the patterns — using Anthropic’s API for the AI-generated analysis and Instant as my database. It’s called Text Unwrapped. You sign up, and upload a conversation from WhatsApp. That’s sent to Anthropic's Claude AI with a bunch of different prompts. Here are some of the things you get: - Relationship score & synopsis on overall communication - Personality Profiles (Myers Briggs, tone analysis, top themes & emojis) - A month-by month timeline, outlining key texts and themes for that month - Actionable insights for each person - A deep dive on a topic of your choice (say you want to dive into defensiveness or avoidance) - POVs from different schools of psychology, like CBT and Jungian You can try this yourself. I made it so each sign up gets 1 free credit (1 credit = 1 conversation analysis). I am not a technical person: I vibe-coded this. I used Claude Code (Opus 4.5), and Instant as the backend. I’ve been playing around with making apps for the last few years, but it was always hard to make a leap. As of this March, I was able to start turning a lot of my passion projects into real ideas. I’ve made a few personal apps, but this is the first one I wanted to share on HN. It took me about 3 days to build this. Once I had a strong spec in place, I needed to make very little changes to Claude (mainly upgraded the design and double checked permissions). Outside of that, Instant was a big help: Claude was able to use it and add auth in less than 2 minutes. The hardest part was adding Stripe - but mainly because I hadn’t done this before. Claude Code guided me through the Webhook setup, and the main challenge was listening to the ‘checkout complete’ to validate payment and add credits to the user. I know privacy is a big concern here. For what it’s worth, I don’t store the actual conversation file — it’s deleted as soon as the conversation analysis is completed. I only store the analysis in the database. Hope you enjoy it! https://bit.ly/4q9ixd5 December 30, 2025 at 02:54AM

Show HN: Stop Claude Code from forgetting everything https://bit.ly/4jivmzb

Show HN: Stop Claude Code from forgetting everything I got tired of Claude Code forgetting all my context every time I open a new session: set-up decisions, how I like my margins, decision history. etc. We built a shared memory layer you can drop in as a Claude Code Skill. It’s basically a tiny memory DB with recall that remembers your sessions. Not magic. Not AGI. Just state. Install in Claude Code: /plugin marketplace add https://bit.ly/4jjgQHu /plugin install ensue-memory # restart Claude Code What it does: (1) persists context between sessions (2) semantic & temportal search (not just string grep). Basically git for your Claude brain What it doesn’t do: - it won’t read your mind - it’s alpha; it might break if you throw a couch at it Repo: https://bit.ly/4jjgQHu If you try it and it sucks, tell me why so I can fix it. Don't be kind, tia https://bit.ly/4jjgQHu December 29, 2025 at 11:30PM

Sunday, 28 December 2025

Show HN: Mini-vLLM in ~500 lines of Python https://bit.ly/4pqtlCE

Show HN: Mini-vLLM in ~500 lines of Python I built this to understand how vLLM works internally. https://bit.ly/4aTGpwL December 28, 2025 at 11:13PM

Show HN: Golazo – Live soccer updates in your terminal https://bit.ly/4sbI7iZ

Show HN: Golazo – Live soccer updates in your terminal Hey all! I built Golazo because I wanted a minimal but effective way to get soccer live updates and catch up on finished matches right in my terminal. No browser tabs, no ads, no distractions: just clean match data where I already spend most of my day. I couldn’t find any actively maintained tool like this, so I thought it could be cool to build something just for what I need. It was a great learning experience and if it’s useful to other people, then even better! Current features: - Live match tracking with real-time score updates (90-second polling intervals) - Minute-by-minute match events (goals, cards, substitutions) - Finished match statistics and full event history - Goal notifications via beeep (macOS, Linux, Windows) - 40+ leagues supported (and growing) with customizable preferences to limit what you fetch - Smart caching: data cached for 5 minutes, polling only when viewing live matches Technical details: - Built with Go using Cobra for CLI, Charm’s Bubble Tea/Bubbles/Lip Gloss for the TUI - Data from a trimmed-down version of the Fotmob API - Cross-platform terminal rendering has been the biggest challenge – still working through some rough edges Easy to install via install script or build from source. Pre-built binaries available for macOS, Windows, and Linux. Would love to hear feedback from fellow terminal enthusiasts and soccer fans! https://bit.ly/4scAkBH December 29, 2025 at 12:10AM

Show HN: Upload a song and get a finished music video (no editing, no prompts) https://bit.ly/3MUaqlX

Show HN: Upload a song and get a finished music video (no editing, no prompts) I built a small web tool that generates finished music videos from uploaded songs. Most AI video workflows I tried required prompting scenes, generating clips, and editing everything on a timeline. I wanted the opposite: upload a track, pick a style, and get a video out in minutes. It’s intentionally opinionated: no accounts, no subscriptions, and no editing controls. One-time payment per video ($2–$12), and you own the output. I’d love feedback on whether this feels useful or too limiting. https://bit.ly/3YfxeiA December 29, 2025 at 12:01AM

Saturday, 27 December 2025

Show HN: Follow independent journalists across platforms in one app https://bit.ly/4seBlcb

Show HN: Follow independent journalists across platforms in one app https://bit.ly/4slu1Mc December 27, 2025 at 09:34PM

Show HN: I built opencode –> telegram notification plugin https://bit.ly/4pjuWKn

Show HN: I built opencode –> telegram notification plugin I had a problem with keeping focus on opencode terminal when it was doing tasks longer than ~30 seconds, so I built a small plugin that sends telegram notification to ping me when agent finishes. Setup: 1. Send /start to the bot 2. Execute bash command that the bot sends you back. You can see source code of the script here [1] and the built plugin here [2]. 3. Done! Whenever your agent finish, you will get message with project name, session title and duration of the agent work. I decided to make it available to everyone on my free tier of cloudflare workers, but it's fully hostable on your own cloudflare accounts or even docker containers on custom infra with few minor changes in the code. Development was done mostly by Claude Opus 4.5 and custom agents in opencode. [1] https://bit.ly/49heTql... [2] https://bit.ly/49heTql... https://bit.ly/4b4p2Ju December 28, 2025 at 12:32AM

Show HN: Turn Your Git Commits into Tweets https://bit.ly/4pWSPby

Show HN: Turn Your Git Commits into Tweets OP here. I've been trying to "build in public" recently, but I found that switching context from VS Code to Twitter/X just to write "Fixed a race condition" felt like friction. I often ended up posting nothing because translating code-diffs to human-readable text takes more mental energy than fixing the bug. I built Git to Tweet to automate this loop. How it works: It hooks into your GitHub repo (via OAuth). It pulls the metadata and diff summaries of your recent commits. It passes the diff through a specifically tuned prompt (to avoid generic "AI slop") that extracts the intent of the code change rather than just listing file names. It generates a draft that you can edit before posting. The Tech Stack: Frontend: React + Framer Motion (spent way too much time on the "terminal" animations you see on the landing page). Backend: Node.js/Supabase. LLM: Currently testing models to see which is best at understanding code context without hallucinating features. The landing page includes an interactive simulator (hardcoded scenarios for now) if you want to see how the "translation" logic works without connecting a repo. I’m curious if others find this "translation" layer useful, or if you prefer manual changelogs? Feedback on the diff parsing accuracy would be awesome. URL: https://bit.ly/49ehy4g https://bit.ly/49ehy4g December 27, 2025 at 11:56PM

Show HN: Mysti – Claude, Codex, and Gemini debate your code, then synthesize https://bit.ly/4b64joy

Show HN: Mysti – Claude, Codex, and Gemini debate your code, then synthesize Hey HN! I'm Baha, creator of Mysti. The problem: I pay for Claude Pro, ChatGPT Plus, and Gemini but only one could help at a time. On tricky architecture decisions, I wanted a second opinion. The solution: Mysti lets you pick any two AI agents (Claude Code, Codex, Gemini) to collaborate. They each analyze your request, debate approaches, then synthesize the best solution. Your prompt → Agent 1 analyzes → Agent 2 analyzes → Discussion → Synthesized solution Why this matters: each model has different training and blind spots. Two perspectives catch edge cases one would miss. It's like pair programming with two senior devs who actually discuss before answering. What you get: * Use your existing subscriptions (no new accounts, just your CLI tools) * 16 personas (Architect, Debugger, Security Expert, etc) * Full permission control from read-only to autonomous * Unified context when switching agents Tech: TypeScript, VS Code Extension API, shells out to claude-code/codex-cli/gemini-cli License: BSL 1.1, free for personal and educational use, converts to MIT in 2030 (would love input on this, does it make sense to just go MIT?) GitHub: https://bit.ly/4jgeV6j Would love feedback on the brainstorm mode. Is multi-agent collaboration actually useful or am I just solving my own niche problem? https://bit.ly/4jgeV6j December 23, 2025 at 02:18PM

Show HN: Ez FFmpeg – Video editing in plain English https://bit.ly/4pcIwz6

Show HN: Ez FFmpeg – Video editing in plain English I built a CLI tool that lets you do common video/audio operations without remembering ffmpeg syntax. Instead of: ffmpeg -i video.mp4 -vf "fps=15,scale=480:-1:flags=lanczos" -loop 0 output.gif You write: ff convert video.mp4 to gif More examples: ff compress video.mp4 to 10mb ff trim video.mp4 from 0:30 to 1:00 ff extract audio from video.mp4 ff resize video.mp4 to 720p ff speed up video.mp4 by 2x ff reverse video.mp4 There are similar tools that use LLMs (wtffmpeg, llmpeg, ai-ffmpeg-cli), but they require API keys, cost money, and have latency. Ez FFmpeg is different: - No AI – just regex pattern matching - Instant – no API calls - Free – no tokens - Offline – works without internet It handles ~20 common operations that cover 90% of what developers actually do with ffmpeg. For edge cases, you still need ffmpeg directly. Interactive mode (just type ff) shows media files in your current folder with typeahead search. npm install -g ezff https://bit.ly/497OfA3 December 27, 2025 at 09:45AM

Friday, 26 December 2025

Show HN: ISON – Data format that uses 30-70% fewer tokens than JSON for LLMs https://bit.ly/4qnahWt

Show HN: ISON – Data format that uses 30-70% fewer tokens than JSON for LLMs ISON (Interchange Simple Object Notation) - a data format optimized for LLMs and Agentic AI. The problem: JSON wastes tokens. Curly braces, quotes, colons, commas - all eat into your context window. ISON uses tabular patterns that LLMs already understand from training data: JSON (87 tokens): { "users": [ {"id": 1, "name": "Alice", "email": "alice@example.com"}, {"id": 2, "name": "Bob", "email": "bob@example.com"} ] } ISON (34 tokens): table.users id:int name:string email 1 Alice alice@example.com 2 Bob bob@example.com Features: - 30-70% token reduction - Type annotations - References between tables - Schema validation (ISONantic) - Streaming format (ISONL) Implementations: Python, JavaScript, TypeScript, Rust, C++ 9 packages, 171+ tests passing pip install ison-py # Parser pip install isonantic # Validation & schemas npm install ison-parser # JavaScript npm install ison-ts # TypeScript with full types npm install isonantic-ts # Validation & schemas [dependencies] ison-rs = "1.0" isonantic-rs = "1.0" # Validation & schemas Looking for feedback on the format design. https://bit.ly/4qxYQvr December 27, 2025 at 12:38AM

Show HN: Spacelist, a TUI for Aerospace window manager https://bit.ly/3L3fUua

Show HN: Spacelist, a TUI for Aerospace window manager https://bit.ly/4q5IaeP December 27, 2025 at 12:34AM

Thursday, 25 December 2025

Show HN: ssh tiny.christmas https://bit.ly/3YLecAG

Show HN: ssh tiny.christmas December 25, 2025 at 02:09PM

Show HN: OmniWM a macOS tiling window manager Niri inspired https://bit.ly/4b7MTbd

Show HN: OmniWM a macOS tiling window manager Niri inspired Tabs, spotlight-like window finder, borders, etc... High Niri parity https://bit.ly/4jaCCwO December 25, 2025 at 10:41PM