Today’s LLMs are incredibly powerful, but one thing that is still far from solved is how best to interface with them. Many users still access LLMs using web chat UIs. There is inevitably a lot of friction with this since you have to visit the website to use the model.
At work, we have access to ChatGPT, and OpenAI has created a desktop app to facilitate easier access. I’ve found it to be a huge unlock - allowing me to quickly use models without totally disrupting my workflow. One day I found myself on a plane with no WiFi and felt the absence of access. I have used Ollama to get around this past but hit the same friction going to the terminal or web to chat with the model. I wished non-technical users could have a free, private way to use some of the incredible open-source models that are available. To facilitate that, I built splat.ai.
When coding splat.ai, I considered creating a native app using SwiftUI but decided against it. My goal is to explore UX with local LLMs, not to learn SwiftUI. I have used Electron in the past but for this project, I used Tauri and really enjoyed the experience. Electron ships with an embedded version of Chromium, but Tauri uses the default browser as a webview, making the binary much smaller. For the user interface, I used React, TailwindCSS, and shadcn/ui. Instead of using Redux Toolkit for state management, I tried Zustand and found the simplicity refreshing. I’m still exploring it but found it sufficiently powerful for this project and easy to learn coming from Redux. Ollama APIs are well documented, and as I built it, I was able to use it to answer my questions and help write code. I also added a global shortcut that will bring splat.ai to the foreground, making it easy to ask a quick question or get input from the model.
Although this functionality is helpful, it only scratches the surface of what is possible. This is a great starting point and to also explore other modes of interaction. I’ve open-sourced splat.ai under the MIT license, so feel free to take a look at the code or use splat.ai by visiting the GitHub repo!