TL;DR: Claude Desktop não suporta múltiplas contas nativamente. A solução é copiar o .app, modificar o wrapper de lançamento para apontar para um user-data-dir diferente, e re-assinar ad-hoc. O CLI continua único em ~/.claude/. Dois gotchas críticos: nunca altere CFBundleName no Info.plist (o Electron crasha) e remova CFBundleIconName se quiser ícone customizado (o macOS prioriza o Asset Catalog s
If this is useful, a ❤️ helps others find it. All tests run on an 8-year-old MacBook Air. A Tauri app has two threads that matter: the main thread (UI) and whatever tokio spawns. Block the main thread and the UI freezes. Block for too long in a command and the frontend times out. Here's how I keep things responsive in practice. Never do blocking work in a #[tauri::command] without async. // Bad —
On April 30, 2026. I posted an update after 3 years explaining what I was doing and what new thing I have been working on. And In that I mentioned how AI has made frontend development robotic. Same design, same colors, same animation. It's as if software has lost all the personality and character that it had. I originally fell in love with web development because it gave developers a power create
If you've ever searched your own product and seen a competitor recommended by an AI assistant instead, you already understand why AEO matters. Answer Engine Optimization (AEO) is the practice of making your site legible, trustworthy, and citable to AI systems like ChatGPT, Claude, Gemini, Perplexity, and Deepseek. It's not magic. It's mostly technical and structural decisions you can either get ri
The Problem: We Were Flying Blind At Refer, we're on a mission to enable talented individuals to fulfill their professional potential by helping them pursue their ideal job. Behind the scenes, that means a lot of microservices, and recently we decided to consolidate everything into a mono-repository. If you've ever migrated dozens of microservices into a monorepo, you know the drill: contracts b
The Problem If you are building AI applications with LLMs, you know the pain: raw HTML is useless for training data. You need clean, structured Markdown. Most solutions like Firecrawl or Crawl4AI require setup, dependencies, and often paid plans. You could write your own parser: import re import urllib.request def html_to_markdown(url): html = urllib.request.urlopen(url).read().decode()
I audited 14 Shopify themes last quarter for speed. 11 of them blamed apps. None had touched Liquid loop count, capture-in-loop allocations, or image output. After optimizing 100+ Shopify stores over 12 years: the code-level patterns in your theme files account for 40-60% of total render time. Apps matter. Images matter. The template layer is where the compounding problems live. Here are the 5 Liq
This technical post walks through the design and implementation of Secure Playground: a local web app that simulates prompt-injection attacks against large language models and demonstrates simple defenses. Provide a minimal, reproducible environment to test payloads and defensive strategies. Make it easy to add new providers and run mutation-based red-team experiments. Offer a leaderboard and scor