Raymond here from Butter.dev, an LLM response cache built as a chat-completions proxy. Today we're launching a key feature for the platform: the ability to generalize on dynamic, templated inputs.<p>Caching at the HTTP request level has the obvious problem of generalizability. Nearly no request is identical, due to templated variables (like names) and metadata (like timestamps), so exact-match cache lookups rarely hit. We solve this at Butter by using LLMs to detect dynamic content in requests and derive their inter-relationships, allowing the cache entry to be stored as a template + variables + deterministic code. This allows future requests to contain different variable data, yet still serve from cache.<p>We've found this approach greatly improves cache hit rate, and believe it could be useful for agents performing repetitive back-office tasks, computer use, or data transformations where input data is frequently of the same shape.<p>- You can see a demo of learning patterns here: <a href="https://www.youtube.com/watch?v=ORDfPnk9rCA" rel="nofollow">https://www.youtube.com/watch?v=ORDfPnk9rCA</a><p>- We wrote more about the technical approach here: <a href="https://blog.butter.dev/on-automatic-template-induction-for-response-caching">https://blog.butter.dev/on-automatic-template-induction-for-...</a><p>- It's free to try out here: <a href="https://butter.dev/auth">https://butter.dev/auth</a>
返回首页
最新
Each moving arrow represents a real bike ride. There are 291 million rides in total, covering 12 years of history from June 2013 to December 2025, based on public data published by Lyft.<p>If you've ever taken a Citi Bike ride before, you are included in this massive visualization! You can search for your ride using Cmd + K and your Citi Bike receipt, which should give you the time of your ride and start/end station.<p>Some technical details:<p>- No backend! Processed data is stored in parquet files on a CDN, and queried directly by DuckDB WASM<p>- deck.gl w/ Mapbox for GPU-accelerated rendering of thousands of concurrent animated bikes<p>- Web Workers decode polyline routes and do as much precomputation as possible off the main thread<p>- Since only (start, end) station pairs are provided, routes are generated by querying OSRM for the shortest path between all 2,400+ station pairs<p>Legend:<p>- Blue = E-Bike<p>- Purple = Classic Bike<p>- Red = Bike docked<p>- Green = Bike unlocked
Hi HN,<p>I am a CTO/Founder usually stuck in "development hell" on long-term projects. To fix my perfectionism, I started a challenge on Jan 1st: Ship 12 startups in 12 months.<p>This is Project #01: TierWise.<p>The Problem: Most SaaS founders price for the US/EU market. Charging a flat $49/mo excludes huge segments of users in LATAM, India, or Southeast Asia where purchasing power is lower. Building a custom GeoIP/PPP logic for every side project is a distraction.<p>The Solution: I built a drop-in JS widget that detects the visitor's country and calculates a discount based on their local Purchasing Power Parity (PPP).<p>The Stack (The "Speed Run" setup):<p>Backend: Laravel 11 (API).<p>Frontend: Nuxt 3 (SSR).<p>Logic: Custom Middleware + Redis (for request throttling) + MaxMind GeoIP.<p>Design: Soft Brutalism (trying to avoid the generic "AI dark mode" look).<p>Business Model: It’s an open SaaS.<p>Free: 500 adjustments/month (no credit card).<p>Paid ($9/mo): Unlimited + White-label.<p>I’d love your feedback on the implementation and the "Soft Brutalism" UI approach.<p>Link: <a href="https://tierwise.dev/" rel="nofollow">https://tierwise.dev/</a>