Devlog 1: The Start
Hello everybody! This is the very first devlog for Oh! Chat.
Well, we have to begin somewhere, right? And for us, we begin in this devlog. For the first entry, I can’t really expect not to do all the dirty work of setting up, dependency checking, and all the other mess that comes with starting. A quick overview: I built the initial bridge between front/backend, and established communication with the local Ollama instance.
Also, a personal goal for me: maintain a level of professionalism when logging devlogs (so no more heavy slang, etc.).
What is this?
(Due to word limits please refer to the next devlog)
What did I do?
Let’s first talk about what we needed to finish before we could even start.
- Ollama & a local LLM
- As the top-tier consumer-grade inference engine for LLMs, Ollama is a good choice for the project. I also used the
Qwen3.5:0.8/2/4B models for testing, as excellent edge models for testing.
- Tauri v2
- Tauri is a great framework for building cross-platform desktop applications with html, css and js which I am familiar with. It also uses rust for backend, and though I am not proficient in rust (I have written some basic things in rust before, but not a full backend yet), I aim to use this project to further develop my skills.
We now pivot to what I did in the first devlog:
-
Environment & Project Initialization
- Created the core project structure utilizing the Tauri v2 CLI framework. (Following this tutorial)
-
Frontend Layout & Boilerplate Architecture
- Initialised a boilerplate frontend chat template with minimal css and html, and I wired
main.js to the backend via invoke and listen commands.
-
Local IPC & The Ollama Localhost Bridge
- Edited the Rust backend inside src-tauri/src/lib.rs.
- Creating async commands (#[tauri::command]) to handle inter-process communication (IPC):
- A hello world tester command;
- Mapping out the communication layer targeting
localhost:11434 (the Ollama api server address for the local instance) to talk directly to the local Ollama instance running on the host machine with reqwest and tokio async libraries.:
-
check_status: checks status (obviously)
-
send_msg(message: ChatMessage): sends a message to the Ollama instance and sends the response back directly using match request.await to handle the response as a single coherent string. (This is temporary for the moment as I will be implementing streaming soon).
- The message struct is also super simple: a simple json-like key-value pair:
role: String, message: String. We use serde to serialize and deserialize the JSON data sent to and from the Ollama instance.
What’s next?
Well, there’s a lot to do. I have not yet done a lot of stuff, and I have many priorities with respect to this application, so I won’t be able to describe to you what I will do next; I guess you can just wait for the next devlog. But I can say that the following will definitely be likely to be done in the next update:
- Allowing slight chat customisation
- (Building on 1) giving users a settings panel to allow them to customise their experience.
- Drafting a basic
readme.
- (non priority) Improve UI?
Anyhow, thanks for reading and I hope you are eager for the next devlog (Cause I am!)