[{"data":1,"prerenderedAt":491},["ShallowReactive",2],{"writing-list":3},[4,113,191,292],{"id":5,"title":6,"author":7,"body":8,"date":105,"description":14,"extension":106,"heroMedia":-1,"link":-1,"meta":107,"navigation":108,"path":109,"seo":110,"status":-1,"stem":111,"version":-1,"__hash__":112,"homeImage":-1,"tickerTop":-1,"tickerBottom":-1},"content\u002Fwriting\u002Fintroducing-bubbles.md","Introducing Bubbles","TheAlphaOnes",{"type":9,"value":10,"toc":97},"minimark",[11,15,18,21,24,29,32,35,38,42,45,53,56,60,63,71,74,78,81,84,87],[12,13,14],"p",{},"There's a version of AI that most of us are used to by now. You open a tab, you type a question, you read the answer, you close the tab, you go back to what you were doing. It's useful. Sometimes it's genuinely impressive. But if you sit with it for a moment, you start to feel that something is a little off.",[12,16,17],{},"You're still doing all the carrying.",[12,19,20],{},"You're the one who remembers to ask. You're the one who decides when to open the chatbox. You're the one who takes the answer and figures out what to do with it. The AI is reactive — it waits for you. And there's something quietly exhausting about that, because the whole point was supposed to be that it helps.",[12,22,23],{},"We've been thinking about this for a while.",[25,26,28],"h2",{"id":27},"what-bubbles-is","What Bubbles Is",[12,30,31],{},"Bubbles is a personal AI assistant. Not in the sense of a voice command you shout at your phone, and not in the sense of a tab you visit. Bubbles is something that grows with you. It learns the shape of your days, the texture of your work, the things you care about and the things you tend to lose track of.",[12,33,34],{},"The idea is that over time, Bubbles starts to understand you well enough to act — not just respond. To surface the thing you were about to forget. To quietly organize the noise before you have to deal with it. To do the work that currently lives in the gap between \"I should do that\" and \"I haven't gotten to it yet.\"",[12,36,37],{},"We're not there overnight. Building that kind of trust takes time, and building that kind of intelligence takes care. But that's the direction we're moving.",[25,39,41],{"id":40},"bubblesspace-where-bubbles-lives","Bubbles.space — Where Bubbles Lives",[12,43,44],{},"Bubbles needs a home. Not a chatbox. Not a sidebar widget. A proper environment.",[12,46,47,52],{},[48,49,51],"a",{"href":50},"\u002Fproducts\u002Fbubbles-space","Bubbles.space"," is the workspace OS where Bubbles lives and where you work. It's a spatial canvas — you can arrange your thinking visually, bring in your tools, create the environment that matches how your mind works rather than how someone else's mind designed a productivity template. Your notes, your data, your projects, your collaborators — all in one place, with Bubbles moving quietly through it.",[12,54,55],{},"We're building Bubbles.space as the space you exist in, not the app you visit.",[25,57,59],{"id":58},"the-ecosystem","The Ecosystem",[12,61,62],{},"Bubbles.space is the center, but it's not the whole picture. We're building a family of applications — small, focused, AI-agent-first — that each solve a real problem in your daily life without asking you to change how you work.",[12,64,65,66,70],{},"The first of these is ",[48,67,69],{"href":68},"\u002Fproducts\u002Fbubbles-mail","Bubbles.mail",". Your inbox, distilled. Not filtered, not sorted — genuinely processed, turned into something you can act on without reading every thread yourself.",[12,72,73],{},"More are coming. Each one built around the same belief: that AI should handle the cognitive overhead you currently absorb yourself, so you can spend your attention on the things that actually need it.",[25,75,77],{"id":76},"what-we-believe","What We Believe",[12,79,80],{},"We think the future of AI isn't a better chatbox. It's a system that already knows what you need — one that acts on your behalf without waiting to be asked, because it understands your context deeply enough to move without explicit instruction.",[12,82,83],{},"That's the lifestyle we're building toward. A version of your days where the friction is quietly lower, where you start the morning with clarity instead of triage, where the tools around you are genuinely working in your service.",[12,85,86],{},"We're a small, independent team. We don't have a roadmap printed on a billboard. But we have a direction, and we're moving toward it.",[12,88,89,90,96],{},"Follow along on ",[48,91,95],{"href":92,"rel":93},"https:\u002F\u002Ftwitter.com\u002FTheNormVg",[94],"nofollow","X (Twitter)",". We'll keep building.",{"title":98,"searchDepth":99,"depth":99,"links":100},"",2,[101,102,103,104],{"id":27,"depth":99,"text":28},{"id":40,"depth":99,"text":41},{"id":58,"depth":99,"text":59},{"id":76,"depth":99,"text":77},"21.07.2026","md",{},true,"\u002Fwriting\u002Fintroducing-bubbles",{"title":6,"description":14},"writing\u002Fintroducing-bubbles","bfE17w4206E_j8deWMvBvyyLYjMRUdJnmp8UDuw7Luo",{"id":114,"title":115,"author":7,"body":116,"date":105,"description":120,"extension":106,"heroMedia":-1,"link":-1,"meta":186,"navigation":108,"path":187,"seo":188,"status":-1,"stem":189,"version":-1,"__hash__":190,"homeImage":-1,"tickerTop":-1,"tickerBottom":-1},"content\u002Fwriting\u002Fthe-future-of-ai-is-proactive.md","The Future of AI Is Proactive",{"type":9,"value":117,"toc":181},[118,121,124,127,131,134,137,140,144,147,150,153,156,160,166,171,174],[12,119,120],{},"Somewhere along the way, we decided that \"AI assistant\" means something you have to go visit.",[12,122,123],{},"You open a tab. You type a prompt. You read the response. You carry it back to wherever you actually do your work. If you need something else, you go back. The conversation model has become so dominant that we've started to accept it as the natural shape of human-AI interaction, as if this is just how it works and will always work.",[12,125,126],{},"We don't think that's true.",[25,128,130],{"id":129},"the-problem-with-the-chatbox","The Problem With the Chatbox",[12,132,133],{},"There's nothing wrong with conversational AI. It's genuinely useful, and the best implementations of it are remarkable. But the chatbox model has a ceiling, and the ceiling is you.",[12,135,136],{},"You are still the one who has to remember to ask. You're the one who decides when AI assistance is relevant. You're the one who carries the output back into your actual context and figures out what to do with it. The friction isn't in the AI's intelligence — it's in the interface model. You're always the intermediary between the system and your own life.",[12,138,139],{},"Think about the things you actually need help with on a difficult Tuesday. You need to know which of the forty emails in your inbox actually matter. You need to be reminded that a deadline is closer than you think. You need a distillation of the meeting you were half-present for because three other things were happening. You don't need to ask for these things — you need them to already be there.",[25,141,143],{"id":142},"what-proactive-looks-like","What Proactive Looks Like",[12,145,146],{},"A proactive system doesn't wait for a prompt. It understands your context well enough to act without explicit instruction.",[12,148,149],{},"This isn't magic. It's not some distant science fiction. It's an engineering and product philosophy: build systems that understand enough about what you're doing — and what you care about — to be useful before you ask.",[12,151,152],{},"Your email client that already knows which threads need you and has a summary ready when you open it. Your workspace that notices you've been working on the same problem for two hours and quietly surfaces the note you wrote about it three weeks ago. Your calendar that understands the difference between a hard deadline and a soft one, and adjusts accordingly.",[12,154,155],{},"The intelligence isn't in answering questions better. It's in knowing which questions to answer before they're asked.",[25,157,159],{"id":158},"how-were-building-toward-this","How We're Building Toward This",[12,161,162,165],{},[48,163,164],{"href":50},"Bubbles"," is our attempt to build something that operates this way. An AI assistant and workspace OS that grows with you — not because it's been trained on a dataset, but because it's been paying attention to your actual work.",[12,167,168,170],{},[48,169,69],{"href":68}," is a smaller, more immediate expression of the same idea. It takes the raw chaos of your inbox and converts it into an information report. You didn't ask it to. It just already did it.",[12,172,173],{},"We're a small team with a clear point of view. We think the transition from reactive to proactive AI is one of the more significant shifts coming in how people relate to software, and we're building toward it now, one carefully considered product at a time.",[12,175,176,177,180],{},"If this resonates with how you think about the future, we're on ",[48,178,95],{"href":92,"rel":179},[94],". We'd like to hear from you.",{"title":98,"searchDepth":99,"depth":99,"links":182},[183,184,185],{"id":129,"depth":99,"text":130},{"id":142,"depth":99,"text":143},{"id":158,"depth":99,"text":159},{},"\u002Fwriting\u002Fthe-future-of-ai-is-proactive",{"title":115,"description":120},"writing\u002Fthe-future-of-ai-is-proactive","dsQ0nPs7zOLPjuf5CYGN7EVzEvt4j97MXb6eX6jZyrE",{"id":192,"title":193,"author":7,"body":194,"date":105,"description":198,"extension":106,"heroMedia":-1,"link":-1,"meta":287,"navigation":108,"path":288,"seo":289,"status":-1,"stem":290,"version":-1,"__hash__":291,"homeImage":-1,"tickerTop":-1,"tickerBottom":-1},"content\u002Fwriting\u002Fthe-lifestyle-we-are-building-toward.md","The Lifestyle We're Building Toward",{"type":9,"value":195,"toc":281},[196,199,202,205,208,212,215,218,221,225,228,231,234,237,241,244,247,250,256,260,263,266,269],[12,197,198],{},"There's a version of your day that doesn't exist yet, but almost does.",[12,200,201],{},"You wake up and the noise has already been sorted. Not because you set up filters the night before, but because the system around you knows what matters to you and what doesn't, and it handled the triage while you slept. Your inbox is a distillation, not a dump. Your calendar is honest about what the day actually holds. The things you were going to forget have already been remembered on your behalf.",[12,203,204],{},"You open your workspace — not an app, not a tab, but a space — and the context is already there. What you were working on yesterday. The thread you meant to follow up on. The idea you had at 11pm that you nearly lost. It's all there, held, waiting. Not because you're disciplined enough to maintain it, but because the environment around you is.",[12,206,207],{},"This is the lifestyle we're building toward.",[25,209,211],{"id":210},"not-productivity-something-deeper","Not Productivity. Something Deeper.",[12,213,214],{},"The productivity industry has spent decades trying to help people get more done. Better apps, smarter systems, refined workflows. And it works, to a degree. But it works by making you more efficient at managing the load — not by reducing the load itself.",[12,216,217],{},"The cognitive overhead of modern life is enormous. Deciding what to pay attention to. Remembering what you committed to. Filtering signal from noise across a dozen channels simultaneously. Managing the gap between what you intend to do and what you actually get to. This is the work behind the work, and we've accepted it as simply the cost of being functional.",[12,219,220],{},"We think it doesn't have to be.",[25,222,224],{"id":223},"the-shift-were-watching-happen","The Shift We're Watching Happen",[12,226,227],{},"AI is getting good enough that the question isn't whether it can help you — it's whether the systems built around it are designed to help you in the right way.",[12,229,230],{},"Most of what exists right now asks you to be in the loop. You prompt it, it responds. You ask, it answers. You carry the output somewhere useful. The intelligence is real, but the architecture is still reactive. You're still the one holding everything together.",[12,232,233],{},"What's coming — what we're trying to build toward — is different. It's AI that understands your context well enough to act without explicit instruction. That handles the things you were going to handle yourself but didn't quite get to. That treats your attention as something precious and protects it accordingly.",[12,235,236],{},"This isn't automation in the industrial sense. It's closer to having a thoughtful collaborator who already knows what you're working on, what you care about, and what kind of help you actually need — versus the kind you'd have to ask for.",[25,238,240],{"id":239},"what-this-looks-like-as-a-lifestyle","What This Looks Like as a Lifestyle",[12,242,243],{},"A lifestyle isn't a feature. It's the texture of your days.",[12,245,246],{},"We're thinking about what it feels like to move through a day where your tools are genuinely on your side. Where you open your workspace and feel oriented rather than overwhelmed. Where the email that needed your attention has already been surfaced, and the one that didn't has already been dealt with. Where your AI assistant has done the morning prep so you can spend the first hour of your day actually thinking, rather than processing.",[12,248,249],{},"It's quieter. It's less effortful. Not because less is happening — more might be happening — but because the overhead has been absorbed by something other than your own finite attention.",[12,251,252,253,255],{},"This is what ",[48,254,164],{"href":50}," is about. Not the features list. Not the stack. The feeling of a day where the tools around you are working as hard as you are, without you having to ask them to.",[25,257,259],{"id":258},"were-early-thats-intentional","We're Early. That's Intentional.",[12,261,262],{},"We're a small, independent team. We don't have the resources of a big tech company, and we don't want to build like one. We're building this carefully, because we think the thing that makes this category of software worth building — and worth trusting — is the degree to which it's been thought through.",[12,264,265],{},"An assistant that handles your inbox needs to understand what you value. A workspace that surfaces context needs to actually know your context. These things take time to build well, and we'd rather build them well than build them fast.",[12,267,268],{},"The lifestyle we're describing isn't a product launch. It's a direction. And we're moving toward it, deliberately, with the belief that this is what software should have been doing all along.",[12,270,271,272,275,276,280],{},"Follow what we're building on ",[48,273,95],{"href":92,"rel":274},[94],". Or read about the specific things we're making in our ",[48,277,279],{"href":278},"\u002Fproducts","products"," section. Either way — we're glad you're thinking about this too.",{"title":98,"searchDepth":99,"depth":99,"links":282},[283,284,285,286],{"id":210,"depth":99,"text":211},{"id":223,"depth":99,"text":224},{"id":239,"depth":99,"text":240},{"id":258,"depth":99,"text":259},{},"\u002Fwriting\u002Fthe-lifestyle-we-are-building-toward",{"title":193,"description":198},"writing\u002Fthe-lifestyle-we-are-building-toward","tU008uwMKOfMpDBn0HPqBXak3Yi5hNkGhPGfBj_74Q0",{"id":293,"title":294,"author":7,"body":295,"date":105,"description":485,"extension":106,"heroMedia":-1,"link":-1,"meta":486,"navigation":108,"path":487,"seo":488,"status":-1,"stem":489,"version":-1,"__hash__":490,"homeImage":-1,"tickerTop":-1,"tickerBottom":-1},"content\u002Fwriting\u002Fwe-shipped-web-have-sounds.md","We Shipped web-have-sounds",{"type":9,"value":296,"toc":479},[297,305,309,312,319,322,326,331,355,390,393,397,440,443,447,450,453,468,475],[12,298,299,300,304],{},"A few weeks ago, we quietly put ",[301,302,303],"code",{},"@thenormvg\u002Fweb-have-sounds"," on npm. No launch post, no product hunt, just pushed it and started using it ourselves. We're writing this now because we think it's worth explaining — both what it does and why we built it.",[25,306,308],{"id":307},"the-friction","The Friction",[12,310,311],{},"We'd been building UIs for a while, and there was always this moment in the process where you'd want to add a small audio cue — a click when you press a button, a soft chime when something completes, a subtle drop when a modal closes — and the process of actually doing it felt disproportionately annoying.",[12,313,314,315,318],{},"Your options were roughly: load a ",[301,316,317],{},".wav"," file (suddenly your bundle has audio assets and a loading problem), use a third-party library (dependencies and size), or dig into the Web Audio API yourself (which is powerful and also genuinely not fun to work with for simple use cases).",[12,320,321],{},"We wanted none of those options. We wanted to write one line of code and hear a sound.",[25,323,325],{"id":324},"what-we-built","What We Built",[12,327,328,330],{},[301,329,303],{}," generates UI sounds through mathematics. No audio files. No network requests. No dependencies. It uses the Web Audio API — which is already in your browser — to synthesize sound in real time, exactly when you call it.",[332,333,337],"pre",{"className":334,"code":335,"language":336,"meta":98,"style":98},"language-bash shiki shiki-themes github-light github-dark","npm install @thenormvg\u002Fweb-have-sounds\n","bash",[301,338,339],{"__ignoreMap":98},[340,341,344,348,352],"span",{"class":342,"line":343},"line",1,[340,345,347],{"class":346},"sScJk","npm",[340,349,351],{"class":350},"sZZnC"," install",[340,353,354],{"class":350}," @thenormvg\u002Fweb-have-sounds\n",[332,356,360],{"className":357,"code":358,"language":359,"meta":98,"style":98},"language-javascript shiki shiki-themes github-light github-dark","import { playUISound } from '@thenormvg\u002Fweb-have-sounds';\n\nbutton.addEventListener('click', () => {\n  playUISound('click');\n});\n","javascript",[301,361,362,367,372,378,384],{"__ignoreMap":98},[340,363,364],{"class":342,"line":343},[340,365,366],{},"import { playUISound } from '@thenormvg\u002Fweb-have-sounds';\n",[340,368,369],{"class":342,"line":99},[340,370,371],{"emptyLinePlaceholder":108},"\n",[340,373,375],{"class":342,"line":374},3,[340,376,377],{},"button.addEventListener('click', () => {\n",[340,379,381],{"class":342,"line":380},4,[340,382,383],{},"  playUISound('click');\n",[340,385,387],{"class":342,"line":386},5,[340,388,389],{},"});\n",[12,391,392],{},"That's it. The sound plays instantly, because it's generated at call time rather than loaded from somewhere.",[25,394,396],{"id":395},"what-it-can-do","What It Can Do",[12,398,399,400,403,404,403,407,403,410,403,413,403,416,403,419,403,422,425,426,429,430,403,433,403,436,439],{},"Nine sound types, nine sonic themes. You can use ",[301,401,402],{},"click",", ",[301,405,406],{},"pop",[301,408,409],{},"toggle",[301,411,412],{},"tick",[301,414,415],{},"drop",[301,417,418],{},"success",[301,420,421],{},"error",[301,423,424],{},"whoosh",", or ",[301,427,428],{},"notification"," — each tuned for specific UI contexts. And you can switch themes like ",[301,431,432],{},"aero",[301,434,435],{},"arcade",[301,437,438],{},"glass",", and more to match the personality of whatever you're building.",[12,441,442],{},"If you want to go deeper, everything is parameterizable. You can pass your own mathematical parameters and sculpt something entirely custom. But the defaults are already pretty good.",[25,444,446],{"id":445},"why-open-source","Why Open Source",[12,448,449],{},"We build open source because the tools we rely on most are open source. It feels right to put something back.",[12,451,452],{},"We also think this specific library fills a gap that nobody else has filled particularly well. Sound in web apps is underused, partly because the tooling is bad. Maybe this makes it a little easier for someone who would have otherwise skipped it.",[12,454,455,456,461,462,467],{},"The ",[48,457,460],{"href":458,"rel":459},"https:\u002F\u002Fgithub.com\u002FNormVg\u002Fweb-have-sound",[94],"GitHub is here",". The ",[48,463,466],{"href":464,"rel":465},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@thenormvg\u002Fweb-have-sounds",[94],"npm package is here",". Issues and PRs welcome.",[12,469,470,471,474],{},"If you build something with it, tell us on ",[48,472,95],{"href":92,"rel":473},[94],". We're curious what people make.",[476,477,478],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":98,"searchDepth":99,"depth":99,"links":480},[481,482,483,484],{"id":307,"depth":99,"text":308},{"id":324,"depth":99,"text":325},{"id":395,"depth":99,"text":396},{"id":445,"depth":99,"text":446},"A few weeks ago, we quietly put @thenormvg\u002Fweb-have-sounds on npm. No launch post, no product hunt, just pushed it and started using it ourselves. We're writing this now because we think it's worth explaining — both what it does and why we built it.",{},"\u002Fwriting\u002Fwe-shipped-web-have-sounds",{"title":294,"description":485},"writing\u002Fwe-shipped-web-have-sounds","IeJS7PWg0s_EaPJIeCeBPxZATNqB7BzTa1OtlXUtidA",1784632984312]