It's been a while since my last update. I've been working on Spectra on-and-off for the past four months and have made some progress and learnt a lot which I will go over here.

UI designs

The UI designs for a project are usually one of the first things I do, I find it helps me think clearer about the kind of things I want the program to do and how to implement them.

Of course, the designs change over time as I tweak the functionality to best suit the needs of the user and as I learn more about what I want to achieve with the program. Regardless, I find it valuable as a thinking exercise even if the design ends up changing completely.

Technical setup & architecture

This has been quite exciting and I enjoyed laying the groundwork for the rest of the program. At first, I was hampered by my very limited Rust/Slint/Desktop programming knowledge but I'm pretty happy with the architecture of the program so far.

Interface between UI & backend

I created view controllers which handle the interface between the UI and the backend. There is a parent view controller which keeps track of which view the user is currently on and which views are available. It also generates a model of the available views which can be passed to the UI and presented as buttons for the user to switch to a different view.

When the view is changed, the parent view controller then calls out to the appropriate view controller for that view, for example the ImportViewController. View controllers are responsible for:

  • setting the initial state of a view (i.e. data which is needed to render the UI)
  • updating that state if something changes
  • passing the state to the UI for display
  • handling events & interactions from the UI (generally by passing that interaction to a function elsewhere in the codebase and then updating the view's state)
  • converting to and from the types expected by the UI and the types expected by the backend

UI Implementation

As mentioned, I'm using Slint for the UI. The syntax is pretty simple and reminiscent of React and other web UI frameworks which has allowed me to make the initial views pretty quickly. It's become more difficult as I've dug deeper into the implementation - possibly because of my lack of knowledge, or possibly because I'm expecting it to do everything a website can.

On the plus side, they recently added support for WGPU integration in the UI at the perfect time as I was investigating the daunting prospect of creating that myself. They seem to be adding lots of nice features and the live UI viewer/debugger is nice too!

0:00
/0:06

Importing Photos

The first bit of useful functionality! Everything else has been set up for adding stuff like this. Spectra can detect your drives, cameras, SD cards and other removable devices and show them in the sidebar of the import view along with the correct icon for the device.

You can select a device and in the main panel of the UI you can browse through the device to select which files you wish to import. However the actual import will be implemented later as I have some thinking to do around how Spectra stores and handles the files, their metadata, and - later on - the edits to the files.

Marketing Site, Branding & Messaging

The website has been 90% designed but for the final touches it really needs Spectra to be more functional. Obviously I want to have real videos of making edits to photos on the site, but that's a long way away. In the meantime, I will have mockups which match (as closely as possible) the desired final product.

I've been using Astro to build the site - haven't used it before but it's very nice so far.

I spent a bit of time thinking about how I want to position the product in the market and came up with an initial about page/manifesto. I'm leaning hard on the "pay once pricing" aspect and feel I need something else to set myself apart from the competition. Will think about that.

Many other things

Alongside everything else I've also been spending a bit of time on:

  • How does image editing work with WGSL & WGPU?
  • How does RAW photo processing work?
  • Adding a proper logging and debugging setup to Spectra
  • Program bundling and building for distribution
  • Customer acquisition

I'll go over these in future Devlogs.