WebIdiot.Online
A $50 thin client and a NAS make a better first homelab than one big server
Are you wanting to start building out your homelab, but aren't sure where to start? The best approach that I've found is separating your services from the beginning with a two-system setup. Thin clients are cheap and readily available basically everywhere, and it's not hard to find a NAS, either. So, if you're wanting to kickstart your homelab setup, try the two-tie
Tweetstorm: Eric Heisserer on Procrastination, Precrastination, and Productivity in Writing
Back when Twitter was fun, screenwriters would sometimes string together a series of tweets - what came to be known as "tweetstorms." Advice, personal anecdotes, reflections on the craft. It was pretty awesome.The only problem: Once the tweetstorm came ... it went.So, I took to contacting the writers and asking if I could reprint their tweetstorm at Go Into The Story. That way, they'd at least be stored where folks could access them in the future.Here's an example: In Septemb
How I built a complete streaming setup with open-source software and a $120 computer
I got pretty bored the other day. So I said to myself, “Self, you should build an ambitious project today and share it with the world.” My Raspberry Pi was on the fritz, so I came up with something even better: a budget, self-hosted media streaming project. And I did it using second-hand hardware and open source software.
Show HN: KiviDB, a faster Redis-compatible memory database and vector cache
Hi all,So I have been working on this project KiviDB from February 2026. It started as a project for me to understand rust, having a product with no GC pauses, memory blow up after snapshots and getting OOM on running pods, and that was actually an issue I faced with Dragonfly. I wanted to have something picking the best of Rust, but also picking the best parts of other alternatives like Garnet and Dragonfly. I used AI a lot, but I was the one making the design decisions based on the tests that
Show HN: IDE for a general-purpose visual programming language "Pipe"
I'm happy to announce the release of the web-based Pipe IDE, availablle by clicking button "Try Pipe IDE" on website.Pipe IDE requires no account - all data is stored locally in your browser's database, keeping friction to a minimum.======Frequently Asked Questions1. Why now?The need for visual programming has become especially clear now that we're building with AI, which has introduced several serious problems that appear unrelated - yet visual programming addresses all
Ask HN: How do you find meaningful peer discussions?
LinkedIn connects you by title, not by what you want to discuss this week. I want to talk about "agent loop when human intervenes" but can't filter for that intent anywhere. Exploring Intent Engine: post what you want to discuss + outcome, get matched with 3 builders who want same. Peer discussions only. Do you face this? How do you find people to talk to today? Testing manual matching for 10 builders this week - comment your intent + stack if interested.
I built an interactive music taste map for Spotify
Hey everyone! đź‘‹I'm an industrial design student from South Korea, and I've been building SPECTRA as my graduation project.I've always wondered why we still explore our music through endless lists and playlists, even though our personal tastes are much more complex.So I built SPECTRA, a web app that transforms your Spotify library into an interactive visual map.You can explore clusters of similar songs, discover connections between different parts of your music taste, and navigate your library in
5 B2B Wholesale & Multi-Vendor Marketplace Templates Compared (Next.js, 2026)
Building a B2B wholesale or multi-vendor marketplace means more than a product list and a checkout. You need seller portals, buyer pricing tiers, request-for-quote (RFQ) flows, bulk orders and an admin layer. These 5 templates were compared on portal depth, B2B features, tech stack and production readiness. 1. TradePro: B2B Wholesale Multi-Vendor Marketplace TemplateStack: Next.js 16, React 19, TypeScript, Tailwind CSS 4Price: from $24Link: TradePro on DevCraftifyBuilt specifically for B2B
4 Accessibility Mistakes AI Coding Assistants Make, and How to Catch Them
AI coding assistants are good at producing working components quickly. They learned from a huge amount of public code, and public code is full of accessibility mistakes — so the same mistakes come back in generated components, looking clean and passing a quick visual review.Here are four that show up often, the WCAG criterion each one fails, and how to catch them before they merge. 1. A clickable div with no keyboard support (WCAG 2.1.1, 4.1.2)Ask for "a clickable card" or "a custom button"
Notes from a 2 AM On-Call: Supabase Realtime Connection Reset Under Next.js SSR Load
Notes from a 2 AM On-Call: Supabase Realtime Connection Reset Under Next.js SSR Load The Failure Symptom[supabase-js] RealtimeClient connection error: Error: WebSocket closed with code 1006[Next.js] TypeError: Cannot read properties of undefined (reading 'channel')[Vercel] Function invocation timeout after 10sProduction dashboard went dark at 1:47 AM. No client errors. Server logs showed Supabase Realtime subscriptions silently dropping after 8-12 seconds under concurrent Server Compo
Breaking the Language Barrier: Our Journey to 10 Native Languages
We have a simple mission at RahaLune: build professional-grade tools that are 100% free, private, and accessible to everyone.But "accessible to everyone" is easier said than done. Until recently, our QR Code Generator was English-only. We received feedback from users in the Middle East, South America, and Europe asking for native language support. Today, I’m thrilled to announce that RahaLune QR Studio is now natively translated into 10 languages. The 10 LanguagesWe now support:🇺🇸 English,
Music and podcasts sound better when you change these 4 Samsung Galaxy settings
The way you play your music, listen to your favorite podcasts, and immerse yourself in your comfort movie can be a deeply personal experience. This also calls for the best sound quality your device can deliver, but not all devices are set up by default to give you what you may be looking for.
4 historic power tools that might be hiding in your dad's garage
Most garages fill up with tools the same way attics fill up with boxes. You hang onto stuff because it seemed worth keeping at the time. If your dad was the type to buy quality once and hold onto it, there's a real chance some of what's sitting on his shelves is actually a piece of history. These aren't just fun finds for collectors. Each one changed how power tools
Ubuntu 26.10 is here, but should you leave 26.04 LTS for it?
A new version of Ubuntu dropped last week, just six months after Ubuntu 26.04 LTS. Codenamed Stonking Stingray, Ubuntu 26.10 brings GNOME 51, a newer Linux kernel, and some big changes under the hood. If you’re already using Ubuntu, a new, more polished version may seem tempting, but newer doesn’t always mean better.
After one React edit, what can your build skip?
Compare an unchanged run with a run after a small source edit—and check the output before interpreting the timer.An unchanged build and a build after an edit answer different questions. For this walkthrough, use a small React label change that you can actually see in the built app. Keep the command and project setup the same. That gives you a more useful comparison than a single “fast build” number: what happened with no edit, and what happened after the source changed? Why should a fronten
My smart motion sensor wasn't smart enough, so I used Python to fix it
Presence sensors can't just tell when you're in the room; some can tell where in the room you're located. The problem is that presence sensors don't always give a completely reliable location, which can break your automations. When one of my presence-based automations kept failing, I used Python to solve the problem.
Ways to Generate IDs in JavaScript
ID generation in JavaScript is the process of creating identifiers, usually strings or numbers, that distinguish one record, element, or session from another in a JavaScript program. Common approaches include random numbers, timestamps, universally unique identifiers (UUIDs), and third-party libraries such as nanoid. The right method depends on whether the ID must be secure, short, sortable, or unique across systems. OverviewApplications need identifiers for database rows, DOM elements, upl
Three owners of one token: how my AuthContext, my axios client, and localStorage split auth state
In my starter kit, the Sanctum token has exactly one name and exactly two modules that touch it. That was a deliberate decision, and it is the reason I can change my auth storage strategy in an afternoon instead of a week.The name is saas_token. It lives in localStorage. Here is everyone who is allowed to know that.Owner one: the axios client. Every request passes through a request interceptor that reads the key and attaches the header:client.interceptors.request.use((config) => { const toke
My demo build is a config I never commit: the temporary vite setup behind the public preview
My SaaS starter kit has two builds. One ships to customers. One powers the public demo. They come from the same source tree, but the demo gets its own vite config, and that config has a comment at the top that says, in effect: temporary, demo only, do not commit.Here it is, the whole thing:// TEMPORARY build config for the /demo/ GitHub Pages deploy ONLY.// Externalizes vendor deps (loaded via importmap from esm.sh) so the app// bundle stays small. NOT for the shipped product — do not commit.imp
Fixing "Hydration failed because the server rendered text didn't match the client" from dates in Next.js (tested repro, Next 16 + React 19.3)
If your AI-built (or hand-built) Next.js app throws Hydration failed because the server rendered text didn't match the client in the browser, a common culprit is a date formatted with toLocaleDateString() or toLocaleString() and no locale or time zone. The server and your visitor's browser print different text, and React refuses to hydrate.We reproduced it on a small synthetic app, applied the smallest fix, and checked it in headless Chrome set to a different locale and time zone than the server