frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Show HN: Sub-millisecond VM sandboxes using CoW memory forking

https://github.com/adammiribyan/zeroboot
64•adammiribyan•13h ago•14 comments

Show HN: Fatal Core Dump – A debugging murder mystery played with GDB

https://www.robopenguins.com/fatal_core_dump/
33•axlan•4d ago•1 comments

Show HN: I built an interactive 3D three-body problem simulator in the browser

https://structuredlabs.github.io/threebodyproblem/
27•amrutha_•4d ago•12 comments

Show HN: Crust – A CLI framework for TypeScript and Bun

https://github.com/chenxin-yan/crust
70•jellyotsiro•22h ago•30 comments

Show HN: Horizon – GPU-accelerated infinite-canvas terminal in Rust

https://github.com/peters/horizon
57•petersunde•8h ago•22 comments

Show HN: March Madness Bracket Challenge for AI Agents Only

https://www.Bracketmadness.ai
59•bwade818•14h ago•39 comments

Show HN: Antfly: Distributed, Multimodal Search and Memory and Graphs in Go

https://github.com/antflydb/antfly
81•kingcauchy•11h ago•34 comments

Show HN: Claude Code skills that build complete Godot games

https://github.com/htdt/godogen
299•htdt•1d ago•191 comments

Show HN: Oxyde – Pydantic-native async ORM with a Rust core

https://github.com/mr-fatalyst/oxyde
152•mr_Fatalyst•4d ago•79 comments

Show HN: CodeLedger – deterministic context and guardrails for AI

https://codeledger.dev
2•ashmivante•3h ago•0 comments

Show HN: I built a message board where you pay to be the homepage

https://saythat.sh
11•SayThatSh•14h ago•8 comments

Show HN: Thermal Receipt Printers – Markdown and Web UI

https://github.com/sadreck/ThermalMarky
113•howlett•4d ago•45 comments

Show HN: Soros – AI for geopolitical macro investing

https://www.asksoros.com
7•muggermuch•5h ago•7 comments

Show HN: Grape – AI note taking app

https://grape.cool
3•ozgrozer•6h ago•1 comments

Show HN: Droeftoeter, a Terminal Coding Toy

https://github.com/whtspc/droeftoeter
31•whtspc64•4d ago•6 comments

Show HN: A 4-layer self-audit system for AI behavioral evolution

https://github.com/oscarsterling/reasoning-loop
4•jhaugh•6h ago•0 comments

Show HN: Zeroboot – sub-millisecond VM sandboxes using CoW memory forking

https://github.com/adammiribyan/zeroboot
16•adammiribyan•12h ago•8 comments

Show HN: Sulcus Reactive AI Memory

https://sulcus.dforge.ca
4•mcdoolz•7h ago•0 comments

Show HN: TerraShift: What does +2°C (or -20°C) look like on Earth?

https://terrashift.io
4•ttruett•7h ago•2 comments

Show HN: M68k assembly emulator that runs in the browser

https://github.com/gianlucarea/m68k-interpreter
13•aldino97•16h ago•2 comments

Show HN: Flowershow Publish Markdown in seconds. Hosted, free, zero config

https://flowershow.app/
5•rufuspollock•9h ago•0 comments

Show HN: Mech keyboard sounds driven by a hidden accelerometer in MacBooks

https://www.haptyk.com/
5•olvvier•9h ago•1 comments

Show HN: Hackerbrief – Top posts on Hacker News summarized daily

https://hackerbrief.vercel.app/
74•p0u4a•1d ago•46 comments

Show HN: Signet – Autonomous wildfire tracking from satellite and weather data

https://signet.watch
123•mapldx•2d ago•32 comments

Show HN: GDSL – 800 line kernel: Lisp subset in 500, C subset in 1300

https://firthemouse.github.io/
89•FirTheMouse•2d ago•20 comments

Show HN: FireClaw – Open-source proxy defending AI agents from prompt injection

https://github.com/raiph-ai/fireclaw
4•raiph_ai•10h ago•6 comments

Show HN: Hecate – Call an AI from Signal

https://github.com/rhodey/hecate
24•rhodey•1d ago•3 comments

Show HN: Updated version of my interactive Middle-Earth map

https://github.com/Jean-Tinland/middle-earth/
3•jetin•10h ago•0 comments

Show HN: F0lkl0r3.dev – a searchable, interlinked map of computing history

https://f0lkl0r3.dev
2•dynamicwebpaige•10h ago•0 comments

Show HN: Unsloth Studio - Local Fine-tuning, Chat UI

https://github.com/unslothai/unsloth
7•danielhanchen•11h ago•2 comments
Open in hackernews

Show HN: I built a message board where you pay to be the homepage

https://saythat.sh
11•SayThatSh•14h ago
I kept thinking about what would happen if a message board only had one slot. One message, front and center, until someone pays to replace it.

That's the entire product. You pay the current message's decayed value plus a penny to take the homepage. Message values drop over time using a gravity-based formula (same concept HN uses for ranking), so a $10 message might only cost a few bucks to replace a day later. Likes slow the decay, dislikes speed it up.

The whole thing runs on three mini PCs in my house (k3s cluster, PostgreSQL, Redis Sentinel). Is it overengineered for a message board? Absolutely.

I genuinely don't know where this goes. Curious what HN thinks.

Archive of past messages: https://saythat.sh/history

Comments

ilinx•8h ago
It’s a cool concept, but I can’t imagine what would make me want to frequent a message board that was explicitly designed to give wealthy users more of a voice. The wealthy have enough ability to project their influence as it is. The idea is considerably too capitalistic for my taste.
SayThatSh•8h ago
I totally get that! If it helps, my logic behind it is a mix of the following: - The 'big' social media platforms already do this (give wealthy users more of a voice). It's just done in a less transparent and more manipulative way. Between ads and targeted algorithms, you get force fed content by large corporations and have your privacy invaded. - Added based on user feedback, the 'message value decay' helps avoid both the situation you mentioned and more. Regardless of whether it's a politic message or an ad from a large corporation, if people hate seeing it, its value will drop quite drastically based on their reactions. Even an expensive message will be affordable to replace if it's disliked. There's no doubt it's quite capitalistic (on the message submitter's side), but my goal was more focused on making that mechanic fair, straightforward, and respectful of users' privacy when compared to how it's usually done. Of course, I'm extremely open to ideas/feedback on how it can be improved!
nickvec•7h ago
Reminds me of https://milliondollarhomepage.com/ (which is where I assume you got the inspiration from!)
SayThatSh•7h ago
Funnily enough, I hadn't even heard of the Million Dollar Homepage until users started mentioning it! The core concept is quite similar though, I do agree :) I think where I've differed a bit is more of the focus on community involvement in message value, with a weighted pricing + (free) discussion/reaction system. A lot of great feedback I got was around the potential for some high-priced message to just kill further interaction, which is similar to what happened once all the pixels were bought up on the homepage.
SayThatSh•6h ago
Just wanted to add a small update: I've completed my research on charity donation integration and settled on donating to the EFF (Electronic Frontier Foundation)! Mocking up the frontend changes with a dedicated page that will contain quarterly reports on donations, FAQ update, etc. After some further research, settled on personally donating 25% of Say That Sh*'s revenue to the EFF every quarter <3 The standard seems to be something like 5% and that just seemed way too low?
SayThatSh•2h ago
I've realized the mechanics behind the site may not be all that interest to some (and likely disliked by many), so figured I'd share some of the technical details to give a little more 'meat' to the post.

The whole thing runs on three used Intel mini PCs (i5-10500T, 16-24GB RAM each) under my desk. k3s cluster with embedded etcd for HA. Total electricity cost is about $11/month.

Database: CloudNativePG operator manages PostgreSQL with automatic failover (5-30s). Built-in PgBouncer pooling via the Pooler CR so I don't need to manage a separate connection pooler. Continuous WAL archiving to a local Garage (Rust-based S3-compatible storage) machine gives me under 5 minutes RPO.

Cache/realtime: Redis Sentinel with 3 Redis + 3 Sentinel instances for automatic master failover. Socket.io sits on top with the Redis adapter so WebSocket connections work across multiple API replicas.

Backups are three-tier: Barman Cloud Plugin handles continuous PostgreSQL WAL + daily base backups. Restic does encrypted daily snapshots of secrets and pg_dumps. Longhorn handles volume snapshots. All three target the same Garage S3 box on my LAN. Six alerting rules monitor the entire chain — if any tier goes stale, I get a Telegram alert.

Screenshot generation was a fun one. When you post a message, the server generates a themed PNG of your message card for the email confirmation. Instead of spinning up a headless browser, I use Satori (JSX to SVG) + resvg (SVG to PNG). No Puppeteer, no Chrome, no browser at all. It renders the exact same React-like JSX with the user's theme colors and spits out a PNG in milliseconds.

The achievements system has 46 achievements across 8 categories and 6 tiers, all event-driven. When you post a message, leave a comment, or hit certain milestones, the evaluator checks eligibility and fires a WebSocket event for the toast notification. The whole thing is evaluated server-side so you can't fake progress.

Message value decay is borrowed from HN's own gravity-based ranking, actually. Values decrease over time following a configurable decay curve, and community reactions (likes/dislikes) directly influence the rate. Like a message and you slow its decay. Dislike it and it drops faster. The formula is feature-flagged so I can tune the gravity constant without a deploy.

Worker architecture: BullMQ with a dedicated worker process that runs independently from the API. Screenshots, emails, and async jobs all go through the queue. The worker can crash and restart without affecting API availability.

Monitoring is VictoriaMetrics + VictoriaLogs + Alloy + Grafana with 16 auto-provisioned dashboards. Probably the most overengineered monitoring setup for a message board in existence, but it's genuinely useful when something breaks at 3 AM.

The whole backend is NestJS with Prisma, frontend is Next.js 15 with React 19. CASL handles fine-grained permissions. Everything runs in non-root containers with dropped capabilities and network policies restricting pod-to-pod traffic.

Is this overengineered for a message board? Absolutely. But I've learned more about running production infrastructure in the last few months than I did in years of reading about it.

ktoo_•1h ago
How do you deal with two people bidding to replace the same message?

I'm most curious about your development process. This has a very strong feel of being vibe coded, which I have nothing against. And your replies here also sound heavily LLM influenced. I als have no issues with that. I am more interested to know if my instinct about these things is accurate. Has developed in this way, over engineered as you say, essentially because the cost to do so is practically nothing with the advent of LLM coding?

Also, has anything ever broken at 3am?

SayThatSh•26m ago
Heya! I'll answer each question individually, definitely let me know if you'd like any clarification though :P

TL;DR:

Concurrent bids: First payment to complete wins; everyone else gets auto-refunded and notified. Uses version checking in the database so no one pays for a post that's already been replaced.

Vibe coding: Started from a half-finished project by a dev team that ghosted. Took over and built the rest with Claude Code, but spent roughly half the time on security, performance, and privacy compliance — not just generating code.

LLM content: Uses LLMs to draft technical/promotional writing, then edits and fact-checks. Natural writing style is similar to LLM output anyway.

3AM breakages: Mostly from experimental automation tooling, nothing production-critical.

Now for the full answers:

1. Two people bidding to replace the same message:

- Simple explanation: Optimistic locking with automatic refunds.

- A bit more detail: The first payment to fully process wins. The second (third, fourth, etc.) person gets an automatic full refund and a notification explaining that someone else beat them to it. Under the hood it's a simple "check before you activate" on the actual message acceptance. When you start paying, the system notes which message is currently live. When the payment completes, it checks whether that same message is still there. If someone else already replaced it, the payment gets refunded instead of going through. Realistically, this shouldn't be happening in any normal situation as the backend is quite responsive. But if I got heavy enough traffic (specifically paid message submissions), I'd likely tune the behavior to refresh frontend values even more frequently, same with optimizing the backend to reduce latency.

- Techno-babble: When you initiate payment, the system snapshots the current post's version number and stores it in the Stripe PaymentIntent metadata. When the webhook comes back confirming payment succeeded, it does an atomic PostgreSQL UPDATE ... WHERE id = $1 AND version = $2 with an increment. If updated.count === 0, someone else already won. The payment gets automatically refunded via the Stripe API, and the user gets a real-time WebSocket notification explaining what happened ("Someone else posted while your payment was processing. Your payment has been refunded."). There's also a per-user Redis distributed lock (SETNX with TTL) to prevent the same person from double-submitting, and post numbers use a PostgreSQL sequence that's only consumed after winning the activation race, so there are no gaps in the numbering. The whole activation path is idempotent, so Stripe webhook retries are handled gracefully.

2. Vibe coding: The initial project referenced to build the site was hand-built, unfortunately by a dev team I paid who basically ghosted me halfway through. I got my money back and there's a whole story behind that but basically I got sick of waiting for their bug fixes and was spending so much time troubleshooting, I figured I may as well take full charge. Claude Code got me from there to here. But frankly, about half the time I spent building the site was spent on performance optimization, security hardening, and aligning with GDPR (and California's) privacy standards.

3. LLM influenced responses: Your instinct is fairly good on that! For more technical breakdowns and generic 'promotion' stuff, I draft with LLMs and then adjust based on my own preferences (and after fact checking where relevant). To that end, my natural writing style is a bit stiff/serious so it ends up sounding about the same. You'd be right about it being overengineered due to the low barrier to entry as well. I'm far from new to containerization, but stepping into the K8S world and configuring everything manually was outside my scope when the ends were more important than the means. Not that I don't make significant efforts to learn about the stack I'm using every day I work on it.

4. 3AM breakages: Haha.. a decent chunk, but nothing critical fortunately! Mostly various tools I've been testing out to help with automation/management of the stack. For such testing, I'll sometimes half-build out scheduled/automatic workflows without giving them the same polish I do production stuff. Had a lot of fun fighting Flux between codebase changes, automated dependency PR merges, etc.

Sorry for the wall of text by the way, I haven't received much in the way of genuine intrigue (i.e. things worth responding to in detail) and as you can tell, I'm quite passionate.