Hello!
Today I'm thinking about a line from Elon Musk that people are buying Full Self-Driving with a car attached, not the other way around. People buying the outcome (it drives me places) instead of the tool (a car) is going to impact a lot more products, especially software. At a high level, this is how AI upends existing companies. Why does this matter so much for software? Because software teams spent decades making tools people use to get the outcomes they want. Photoshop is a good example. It has thirty-plus years of interface built around manipulating pixels, but when you want to edit a photo you're thinking "make her hair flow to the left," not "select these pixels and apply a transform." The tool sits between you and what you actually want. I've been chasing this idea for a while. Back in 2024, I wrote about how the continuous march of "more features, more UI" leaves people with more functions they don't know about and don't use, and how AI lets you control software with hundreds of features by just telling it what you want to do. Last month I pushed it further: start from the outcome ("here's the news you asked for") and let people engage with the tools later if they want to. Outcome first, tool second. The car example just makes it really concrete. Nobody wants a steering wheel, they want to get somewhere. As we've said for years, we don't call carpenters "hammer users." So if you're building software today, ask yourself: what's the "it drives me places" version of your product? Because if you don't ship that, someone else will, with your tool attached as an afterthought.
What is the tech stack of Ask LukeW feature?
The Ask Luke feature is built on a complex tech stack that has evolved considerably since its launch in April 2023.
At the core, it runs on SvelteKit with Supabase for authentication, database operations, and file storage. The whole system is deployed on Vercel at https://ask.lukew.com. For the UI, I use Svelte's component-based architecture with TailwindCSS for styling, Bits UI for UI components, and Svelte Sonner for notifications.
The real complexity comes from the AI pipeline. I don't rely on any single LLM or AI model. Instead, I use multiple AI models for different tasks - speech-to-text conversion, audio diarization, topic extraction, content summarization, PDF parsing, and more. Some models are self-hosted while others use APIs from providers like OpenAI, Anthropic's Claude, Mistral AI, Google's Gemini, Cohere, and AWS Bedrock.
The system uses a dual retrieval approach - both embedding search (for semantic similarity) and keyword search run simultaneously. Results are then ranked and diversified before being fed to the generation model. The vector-cosine-similarity library handles the semantic matching.
On the development side, I use TypeScript for type safety, Vite for the build process, ESLint and Prettier for code quality, and Sentry for error monitoring in production.
I've built an admin system that lets me quickly test new models and prompts before deploying them, since the AI space changes so rapidly and I'm constantly evaluating better models for each step of the pipeline.
If you want to dive deeper into how and why I built this system, I recommend checking out my "How AI Ate My Website" presentation in the Presentations section of my website.