Thursday, July 23, 2026

Show HN: Advanced Coffee Search Covering Over 17,000 coffees https://ift.tt/4FHBrYj

Show HN: Advanced Coffee Search Covering Over 17,000 coffees https://ift.tt/ZiQGjlT July 24, 2026 at 02:59AM

Show HN: Trifle – Open-source analytics that stores answers, not events https://ift.tt/8pnPqO0

Show HN: Trifle – Open-source analytics that stores answers, not events Trifle is an open-source time-series analytics library that aggregates nested counters instead of storing raw events. All in the database you already have. After rebuilding it twice over 10 years, it now tracks ~1B events a day at my day job. It started in 2015 as my own Rails APM. I plugged into ActiveSupport::Notifications, got a few small users, and one bigger one whose scraping app broke everything. That sparked the core idea: aggregate counters into pre-defined time buckets, so a single write increments multiple buckets at once. The APM eventually faded away without much traction. Later in 2021 I needed analytics at my day job. Instead of going for something out there I revised the idea of Trifle as a more generic analytics library, borrowing some data warehouse ideas. First used Redis, then Postgres, eventually MongoDB. Hence why Trifle::Stats comes with multiple drivers that keep the DSL unified while storage layer changes with your needs. In our case (huge write volume, some reads) PG read faster but slowed on large writes. The nested values are the whole trick here. Single: Trifle::Stats.track( key: 'requests::aws::s3_uploads', values: { count: 1, status: { request.response_code => 1 }, size: payload.bytes, duration: { sum: request.duration, count: 1 } } ) builds up counts for requests, success rate, result status codes, duration for multiple time buckets at once. Single bucket from 2am then looks like: { count: 14, status: { 200: 12, 500: 2 }, size: 5628341, duration: { sum: 43, count: 14 } } If request.duration is in seconds, then sum stored under duration would be in seconds as well. Success rate is never stored, but it is calculated by dividing 200s over total number of requests. Same with average duration: sum over count. You ask for a metrics key, granularity and timeframe and you get back aggregated values at each point. Ready for charts or to answer "Average response time over last 30 days". There's a Series wrapper for aggregating and formatting values for charts in a simple call. And as building dashboards is not as much fun for other devs as I thought, I built Trifle App - a visual layer with dashboards, scheduled digests and alerts. It's written in Elixir, so I ported the library to Elixir too. And later to Go for a CLI. All three are compatible, write in one and read in another. Today we track activity from over 100M background jobs a day which turns into about 1B events. It runs surprisingly cheap when you're willing to trade some safety away (turn off journaling and write concerns in Mongo). 3-node Hetzner MongoDB cluster where the primary does 20% utilization costs us around $1k/month. It has its limitations. Payloads can't hold tens of thousands of keys. Documents becomes too large to update efficiently. Some planning ahead is needed. And then there are no dimensions. Sometimes you can nest them (country - there are only so many countries), sometimes it's better to have dedicated metrics key per dimension (customer - growing forever). That multiplies tracked events, hence 1B events from 100M jobs. The libraries are MIT. The App is source-available under ELv2 - free to self-host and paid cloud if you want it managed. I build this on the side with no investor money to burn on a free service. Happy to answer anything about architecture, storage models, my failures or why I didn't give up on this yet. https://trifle.io/ July 22, 2026 at 08:09PM

Wednesday, July 22, 2026

Show HN: Szr: A safer command output reduction for coding agents https://ift.tt/kZCXwKn

Show HN: Szr: A safer command output reduction for coding agents https://ift.tt/05VDMA1 July 22, 2026 at 11:33PM

Show HN: Onus – self-hostable vuln scanner combining 8 tools into one report https://ift.tt/FR19y8H

Show HN: Onus – self-hostable vuln scanner combining 8 tools into one report https://ift.tt/3mL7kr9 July 22, 2026 at 10:24PM

Tuesday, July 21, 2026

Show HN: Edky, a CLI to convert Ed25519 public keys from one encoding to another https://ift.tt/7TVLscf

Show HN: Edky, a CLI to convert Ed25519 public keys from one encoding to another Everything increasingly runs on Ed25519 keypairs, but Ed25519 public keys can be encoded as text in dozens of surface-incompatible different ways: hexadecimal, Base64 (OpenSSH), Base32z (iroh, pkdns), Base58 (NEAR), and Multibase (IPFS, libp2p), just for starters. Edky is a command-line tool and Rust library that converts between these Ed25519 surface encodings, aiding use of the same underlying keypair across e.g. an iroh endpoint, a libp2p peer, or a NEAR Protocol account. (Surprisingly, a conversion utility like this didn't yet exist!) $ cargo binstall -y edky $ edky convert -f iroh -t libp2p 47pjoycnsrfmxikm95jh13y88e8qnhzu5kungjpxyepgt7a8krpy z6MktwupdmLXVVqTzCw4i46r4uGyosGXRnR3XjN4Zq7oMMsw $ edky convert -f libp2p -t iroh z6MktwupdmLXVVqTzCw4i46r4uGyosGXRnR3XjN4Zq7oMMsw 47pjoycnsrfmxikm95jh13y88e8qnhzu5kungjpxyepgt7a8krpy $ edky convert -f near -t hex ed25519:FVen3X669xLzsi6N2V91DoiyzHzg1uAgqiT8jZ9nS96Z d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a $ edky convert -f hex -t near d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a ed25519:FVen3X669xLzsi6N2V91DoiyzHzg1uAgqiT8jZ9nS96Z https://ift.tt/krQSpGa July 21, 2026 at 11:39PM

Monday, July 20, 2026

Show HN: Neuron. Turn a SQL query history into a semantic layer https://ift.tt/EJ6KqhW

Show HN: Neuron. Turn a SQL query history into a semantic layer My cofounder and I previously ran analytics groups in life sciences. That means we led teams of analysts who typed SQL all day long and we ran into common issues of consistency, correctness, and knowledge transfer. We were always one resignation away from losing all of the history on a project or a client. When we left that world we thought we could solve the problem with auto-documentation. Cut to now and we've landed on the modern version of that solution, which is to turn previously executed queries into context for AI. The intuition is roughly this: a smart analyst can read SQL and have a pretty good idea of what's going on, and in fact can infer a lot of institutional knowledge about the domain and how to analyze particular data. LLMs are not great at this (Anthropic and Snowflake have written as much). So we act as the "smart analyst" to pull out institutional knowledge and practices (in the form of SQL) that you can give to an LLM so that it can code like a competent analyst on your team. Right now we're deploying it as a semantic layer population tool. You want to fill up a Genie or Cortex semantic layer? Run our code on your query history, prune it with your experts (delete this, rename that, etc.), and get moving. That can take hours/days instead of weeks. Plus, everything we export is portable to whatever system you choose. FYI we ask for emails on the free trial download so we can monitor our traction and build our network but you don't need to include it if you don't want to. We're hungry for feedback from people who work in the field and are facing these challenges. Major, major thanks in advance for your time. https://ift.tt/tC76ZEl July 20, 2026 at 11:41PM

Sunday, July 19, 2026

Saturday, July 18, 2026

Show HN: Ilya Sutskever's AI reading list into a learning RPG – using kimi k3 https://ift.tt/oS7kIdc

Show HN: Ilya Sutskever's AI reading list into a learning RPG – using kimi k3 I wanted to take kimi k3 for a spin. It turned my simple one sentence prompt to this. Repo here. https://ift.tt/kmT7bNp Well, I'm mindblown. Very humbling for me as a software engineer. Took couple hours for it to build this completely autonomously. And it was all from its mobile app. It couldn't render this though from within the app - it does have a feature to preview any website and publish it on kimi's domain - but it didn't work for this. I had to put it on github pages. It doesn't store anything btw - all progress is tracked in your browser storage. https://ift.tt/29vAF3s July 19, 2026 at 04:24AM

Show HN: RewindCup – explore 23 World Cups on an interactive globe https://ift.tt/DgHjixE

Show HN: RewindCup – explore 23 World Cups on an interactive globe https://rewindcup.com July 19, 2026 at 03:37AM

Show HN: Peek-CLI: Let Claude Code iterate on front end designs https://ift.tt/wD7A6Xy

Show HN: Peek-CLI: Let Claude Code iterate on front end designs https://ift.tt/A6bdolx July 19, 2026 at 12:32AM

Show HN: SDF Pelicans on Bicycle https://ift.tt/187YFOx

Show HN: SDF Pelicans on Bicycle https://ift.tt/liCwALr July 19, 2026 at 12:47AM

Friday, July 17, 2026

Show HN: Tools Berry – client-side calculators with open-source tax engines https://ift.tt/KjuGprP

Show HN: Tools Berry – client-side calculators with open-source tax engines https://ift.tt/J23TfUX July 18, 2026 at 01:08AM

Show HN: Lific: Issue trackers should be simple, right? https://ift.tt/vXMV3gp

Show HN: Lific: Issue trackers should be simple, right? I built Lific because I direct AI coding agents on largish projects and needed somewhere for project state to live that isn't markdown files in the repo. When I was begging to work on long horizon ideas, I started on Linear, but my agent files issues faster than a human does, and I hit their limits and pricing wall almost immediately. Then I self-hosted a popular open source tracker which meant running its 13 containers, and its MCP integration was 30k tokens and I got so fed up that I eventually removed it and went back to .md files for a few weeks. Lific is the opposite shape of most of your self hosted server issue trackers: It's a single Rust binary that uses SQLite, and it has an optimized MCP server built in. Web UI is also included integrated directly into the binary. The simplicity is meant to only apply to the size and the ease of installation. The web UI is fully fleshed out with all of the UX you would expect from an issue tracker like linear. Since I started using lific, my agent flow is that I open the web UI, find a few issues I want to work on, then tell the agent "work on LIF-298, 299 and 301, and if you find bugs, file them as new issues." At the end of the day the project has tracked itself. Issues have statuses, blockers, and comment threads, so "what's workable right now" is a query instead of the agent guessing. Plans are persisted step trees, so a session tomorrow resumes with the same understanding of the goal and the path as the session that made the plan. My largest project has 300+ issues and 100+ docs and agents search it fast. Everything exports to markdown in one click, and the database is just a file on your machine. Setup is ` cargo install ` ` lific init ` ` lific connect ` then pick your harness (OpenCode, Cursor, Claude Code, etc). One honest caveat: on Windows there's no service install yet, so the binary has to be actively running for MCP or Web UI to work on windows. The biggest reason I think Lific is different than a lot of the other options is the lightweight nature of it alongside still having a fully featured web UI. It's meant for self hosters to work on big projects with agents, without sacrificing the other benefits of an issue tracker like a nice management UI or authentication for teams using it. Would genuinely love feedback and bug reports either here or on the discord! https://lific.dev July 17, 2026 at 11:22PM

Thursday, July 16, 2026

Wednesday, July 15, 2026

Show HN: SirixDB 1.0 Beta – Git-Like Versioning, Diffs, Time-Travel Queries https://ift.tt/f7dBJF2

Show HN: SirixDB 1.0 Beta – Git-Like Versioning, Diffs, Time-Travel Queries Hi HN! I've posted SirixDB here before, back in 2019 ( https://ift.tt/sd9Mrvh ) and again in 2023 ( https://ift.tt/M9IjZ0G ). The core idea behind SirixDB is, that history is a first-class citizen. Every commit stores a lightweight, queryable revision. You can query any point in time, even individual nodes (for instance JSON values), diff arbitrary revisions, and efficiently track how data evolved without replaying events. Unlike traditional event stores, historical states do not need to be reconstructed by replaying events nor do we have to think about projections. Revisions are directly queryable. A simple example: Jan 1: Record "Price = $100, valid from Jan 1". Stored on Jan 1 (transaction time). Jan 20: Discover price was actually $95 on Jan 1. Commit correction. After correction, you can ask across both axes: - "What did we THINK the price was on Jan 16?" -> $100 (Transaction time) - "What WAS the price on Jan 1?" -> $95 (Valid time) I've worked on this in my spare time since 2013, following its academic precursor (Idefix/Treetank) at the University of Konstanz. The architecture relies on an append-only physical log and a persistent copy-on-write page trie. A high level view of the architecture: Physical Log (append-only, sequential writes) ┌────────────────────────────────────────────────────────────────────────┐ │ [R1:Root] [R1:P1] [R1:P2] [R2:Root] [R2:P1'] [R3:Root] [R3:P2'] ... │ └────────────────────────────────────────────────────────────────────────┘ t=0 t=1 t=2 t=3 t=4 t=5 t=6 → time Each revision is indexed, and unchanged pages are shared: [Rev 1] [Rev 2] [Rev 3] │ │ │ ▼ ▼ ▼ [Root₁] [Root₂] [Root₃] │ │ │ │ │ │ │ └─────────┐ │ └────────┐ │ └─────────┐ ▼ ▼ ▼ ▼ ▼ ▼ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ P1 │ │ P2 │ │ P1' │ │ P2' │ └──────┘ └──────┘ └──────┘ └──────┘ Rev 1 Rev 1+2 Rev 2+3 Rev 3 (shared) (shared) Beneath the root pages sit node and secondary indexes, using a novel sliding-snapshot algorithm to balance read/write performance. Everything is queryable using JSONiq via the Brackit compiler. Back in 2019, and even in 2023, SirixDB was very slow due to GC pressure. Unlike most other document stores, SirixDB stores fine-grained nodes, and I came to realize that an on-heap (JVM) representation made up of lots of small objects simply didn't make sense. I measured it with async-profiler — with some help from Andrei Pangin himself — and the result was that the poor throughput was due to the sheer amount of allocations which scaled almost linearly with the number of open transactions. Working a full-time software engineering job, I lacked the energy for a massive spare-time rewrite. About a year ago, I started experimenting with AI. It turned out to be ideal for automating the tedious, repetitive parts of migrating the storage layer to Java's Foreign Function & Memory API, storing pages completely off-heap. Looking further ahead, the append-only, immutable-page design maps naturally onto object storage like S3 and distributed logs like Kafka for a cloud version, and initial prototypes already exist. Maybe that becomes a commercial service one day, but for now, I'm just thrilled to see these core design principles finally proven out.There's an interactive demo, documentation, and the code is on GitHub. I'd love feedback and am happy to answer questions! kind regards Johannes [1] https://sirix.io | https://ift.tt/KOCgxSv [2] https://ift.tt/RGJQ0Bn [3] https://demo.sirix.io [4] https://sirix.io/docs/ [5] http://brackit.io https://ift.tt/KOCgxSv July 15, 2026 at 09:16PM

Show HN: Leet Robotics: Learn robotics and ROS2 with hands-on courses https://ift.tt/rAZ5WDq

Show HN: Leet Robotics: Learn robotics and ROS2 with hands-on courses Hi all, I've just launched Leet Robotics: a platform to learn robotics hands-on, with a full ROS2 workspace that runs in the browser (Jazzy, Gazebo Harmonic, Foxglove, VS Code) - no install required. The platform also has room for sharing projects and simulation assets as it grows. Our first course is live now: Intro to ROS2 (free to read). The course teaches skills ranging from building your first node to a capstone project of a robot touring a museum world, with every lesson runnable in the online workspace (free accounts get an hour of workspace time daily - enough to follow the course). Would love feedback from this community: on the course, the workspace experience, and what courses to build next. https://ift.tt/vSqxdnz July 15, 2026 at 05:44PM

Tuesday, July 14, 2026

Show HN: Beautiful Type Erasure with C++26 Reflection https://ift.tt/snjTVE2

Show HN: Beautiful Type Erasure with C++26 Reflection Try it on Compiler Explorer: https://ift.tt/ZVJdl0a Check out the source code: https://ift.tt/wuaLFt4 https://ryanjk5.github.io/posts/rjk-duck/ July 14, 2026 at 06:10PM

Show HN: Tally – check a spreadsheet's numbers against their source, in-browser https://ift.tt/oNx5mSg

Show HN: Tally – check a spreadsheet's numbers against their source, in-browser https://ift.tt/jDXS2WG July 30, 2026 at 11:25PM