TLDW logo

Building the Ultimate Email Workflow Tool

By Ben Vallack

Summary

## Key takeaways - **Keyboard Batch Email Processing**: Neomutt shows loads of emails on screen at once for quick keyboard shortcuts to mark for deletion or batch operations into action folders, advancing automatically to the next email for inbox zero. [00:25], [06:04] - **DIY Web UI Replaces Neomutt**: Built a Python web-based interface using same backend libraries as Neomutt: mbsync for IMAP sync and notmuch for fast email search and indexing, accessible from any device on the network. [02:00], [02:10] - **Neovim Compose in Web App**: Backend opens blank file in tmux session for real Neovim editing; save updates HTML preview in web UI via markdown processor, enabling speed-of-thought text composition. [03:21], [03:43] - **Manual Sync Controls Workflow**: No automatic syncing; user controls when to sync via mbsync, avoiding constant pings, with post-sync handling deletions, moves, and updates. [07:00], [06:59] - **Inbox Equals Actionable State**: Inbox presence means unprocessed email—not replied, deleted, or moved to action folder with extracted task; ignore read status, focus on clearing to zero. [05:23], [05:52] - **Drag Attachments to Shortcodes**: Drag-drop files to web UI for upload, inserts shortcode into Neovim text for seamless attachment handling like Apple Mail. [09:52], [10:09]

Topics Covered

  • Keyboard workflows crush GUI email
  • Web Neovim composes flawlessly
  • Manual sync empowers inbox control
  • Right tools beat Apple silos
  • Vibe code liberates personal software

Full Transcript

For a while, I've been using this command line text user interface application called Neomut for processing my email. Now, I wasn't using this

my email. Now, I wasn't using this exclusively. I'd obviously use Apple

exclusively. I'd obviously use Apple Mail for stuff that sort of needed a bit more uh system integration like dealing with attachments and HTML previews and things like this, but it was fascinating in that it showed me how powerful a

keyboard focused workflow can be when you're dealing with email and how much things like Apple Mail are really missing the mark for that kind of a power level workflow for processing email. So Neomite would show me loads of

email. So Neomite would show me loads of emails on the screen at once and I could very quickly just move the selection down processing those emails quickly in a batch operation. So that the idea being that you just quickly mark them for deletion with a keyboard shortcut

and progress on to the next one or mark them for a batch operation where you can quickly just move a bunch of emails into an action folder later. And this is my approach to dealing with inboxes and and getting to inbox zero very quickly.

Either just by quickly replying to a message um deleting that message or moving it into an action folder and extracting a task from that email and moving that into a proper time management system like the ones from the

sadly late Mark Fster um whose work I'm an enormous fan of. I've done videos on these time management systems that he came up with uh over his life and he just sort of devoted his life to this and came up with an incredible community

around all of these time management systems and his understanding of how the mind works in terms of dealing with tasks is just absolutely amazing when you read his books on the topics as well. So that was that's kind of how I

well. So that was that's kind of how I deal with uh converting an email into a task. So all of that showed me really

task. So all of that showed me really just how powerful these kind of fast keyboard workflows can be with email. uh

Nema itself is obviously extremely complicated to set up and fairly limited by modern standards in terms of that system level integration with rich content and attachments and HTML and so

on. So after these recent experiments of

on. So after these recent experiments of mine where I've been vibe coding these network ready applications that run on a machine on my network and then I can access them on any of my machines either in the house or even away from my own

network. Um, I thought actually I could

network. Um, I thought actually I could turn my attention to this email process and kind of recreate what Neomat was doing, but using this new Python web-based interface approach that I've been using. And I could even use the

been using. And I could even use the same backend libraries that Neomat was using, which is mainly this thing called MBSYNC, which is the thing that synchronizes your local folder with your remote IMAP uh server folder. And then

this thing called not much, which is an incredibly fast, powerful um search tool for searching and indexing your emails.

So I set out to do that with claude code and it it absolutely nailed it and you know it gave me a sort of first UI that I didn't really like and I thought actually I wonder how how quickly I can just make it look a bit like Neoma as

well. So I just basically told Claude

well. So I just basically told Claude what color scheme I was using and that I wanted it to look a bit like a text user interface style thing and it just blasted through and just came up with this really nice interface. And then

obviously there was a fair bit of back and forth and tuning to make it work the way I wanted in particular with all of the keyboard shortcuts and and everything in place there. And then the real icing on the cake with this is the

approach that I wanted to put into place in terms of composing emails. So

obviously I'm a massive fan of Neoim and writing normal text in Neovim is just as good as it is working with code. This

ability to edit text as well as just write text all from the keyboard is where Neoim really comes into its own.

You should definitely check out the no boilerplate video where Tris looks at writing text and editing text at the speed of thought with a Vim style navigation system. So, um, it is it is a

navigation system. So, um, it is it is a great way of writing an email and I absolutely love doing this. So, I wanted to be able to do that and I was thinking, scratching my head how I would implement this in the web-based UI. And

then I had this idea very simply to make the backend use a T-max session that I could also be in the same T-Max session in a real command line window and then we could both write to the same file.

So, the the server the backend server for the application would open a blank file when I start a reply or a compose from my web-based interface. that would

then open obviously in the T-Max window that I have open in my command line window. I can then type in there using

window. I can then type in there using real neoim save the file and then the the backend server would recognize that save for the file and display it through a markdown processor and display the

HTML preview in the web- based interface um for the application and this just works so well. I'm super pleased with this approach. So in addition to the not

this approach. So in addition to the not much database which is sort of just purely for uh searching these emails really quickly, I actually have the system index these emails themselves as well so that my interface can display

everything super quickly. So there's a database that's stored using the SQL light database. There's been some debate

light database. There's been some debate on how to pronounce that. If someone can confirm the correct way of pronouncing that in the comments, please do. So

every time you do the synchronization, it will sort of update its index of the emails that it has synchronized through MBYNC. Um, so there's always this

MBYNC. Um, so there's always this up-to-date index on the system and which allows this very fast interface uh to display these emails. So I have these kind of helper functions that run asynchronously as you're using the

application to do things like track the replied status as well. So it'll look for outbound emails in the sent folder that match uh inbox emails and show the replied flag and these kinds of little extra things that you sort of take for

granted in normal email applications I've got in place in this as well. By

the way, this tool is available for master level members of this channel.

you know, absolutely just use it as a starting point for your own work and put it into clawed code or whatever and take it to where wherever you want to go with it or just use it as inspiration or whatever or you know, have a look,

understand the code and feel free to use it. But it's there as a perk for master

it. But it's there as a perk for master level members on this channel. So, your

support is hugely appreciated. So, for

me with the red status, I wanted to make sure this is, you know, as always for me, this is not a serious part of this workflow. I didn't ever want to be in a

workflow. I didn't ever want to be in a position where I was relying on a red status for any kind of uh different behavior that I needed to take on an email. So, I kind of just ignore the red

email. So, I kind of just ignore the red status. For me, really, the existence of

status. For me, really, the existence of an email in the inbox means that I haven't processed it. It's not been replied to. It's not been deleted, and

replied to. It's not been deleted, and it's not been moved to my action folder, which means I haven't extracted any kind of to-do out of that email. So, the the inbox is really the actionable state of

my emails. then I I kind of use the red

my emails. then I I kind of use the red status as a very superficial level to see if I've perhaps seen that email before or not. Um but really I don't want to put too much weight on that. The

main goal being to move it out of the inbox and get back to inbox zero. So

this highlighting approach that NEMA had where you would action with a keyboard, you know, either you'd mark an email for deletion or you'd you'd mark it for a batch operation very quickly from the keyboard and it would automatically advance to the next highlighted uh email

and you could quickly go through this list very very fast. I wanted to recreate that in my version. So, I have the X keyboard shortcut set up to mark these emails for deletion. It's just

instant and it moves on to the next one.

You can quickly just go through at a glance reading those subjects. Uh, and

I've got the sidebyside pane to actually see those as well. Uh, but you can basically make this decision from reading the subjects alone in so many cases. So, you can just keep your eyes

cases. So, you can just keep your eyes on that area. Go down quickly mark all those for deletion. And then I have my action keyboard shortcut which marks it for this action that I have of moving it into my actioned folder. So, in all my

inboxes, I have this action folder set up, which is this custom approach that I've kind of worked with. Um, and in Apple Mail, you'd actually have to click this one button every time for every email to do this, which is just

incredibly tedious process. Whereas with

this, I can just blast through them hitting the keyboard shortcut and and it marks them. You can see the color change

marks them. You can see the color change and that's it. And then when I do the sync at the end of this process, it will do all of this and delete and move and then recsynchronize with the server.

That was the other interesting part of this. have no interest in an email

this. have no interest in an email application that's constantly synchronizing and pinging when new emails come in. I want to be in charge of when I do the sync. So I have deliberately emitted any kind of automatic syncing from this. But of

course you could very easily set it up to do that uh if you did want it behaving that way. Now of course the other advantage of doing it in this approach of making it a web- based user interface is that it has of course no problem displaying HTML email. So unlike

Neomat where you'd have to open the attachment in your web browser to view an HTML email, I can actually just switch between plain text and email using my P keyboard shortcut in the preview uh viewer in the application

here. So obviously a lot of email is

here. So obviously a lot of email is HTML based. So it's very logical that we

HTML based. So it's very logical that we just use a web browser to work with this. So it really goes back to this

this. So it really goes back to this Unix idea of the right tool for the job and you know doing one thing and doing it well. Displaying email here is the

it well. Displaying email here is the right tool. You know web browser is

right tool. You know web browser is perfect for a web- based application but obviously also perfect for displaying HTML content. So, we're using the right

HTML content. So, we're using the right tool for the job here. And then I'm using Neovim for composing, which again is the right tool for the job. And I

have this seamless connection between my real Neoim window and the web-based interface that deals with the actual sending of the email and the backend API that makes it all work. There's just a really nice representation of this new way that I'm thinking about making

personal software tools here. uh which

I've now done with my photo library application to replace Apple photos which brings amazing power back to my photo library in a way that Apple photos just never seem to come up with including sort of prolevel coloring

workflows and raw processing and video color grading. Uh again this tool is

color grading. Uh again this tool is available for master level members on this channel as well. And I've also made this music streaming MP3 player which kind of works all in the same way you know web- based interface over the

network. It brings my old MP3 collection

network. It brings my old MP3 collection back from the dead and and helps me avoid having a subscription all the time as well. And then I've made these little

as well. And then I've made these little smaller funky ones like this sort of voice assistant that looks at my Zetlecaster notes vault. I can then speak into it from any of my devices and get a text response and after it

searches all of my Zetlecaster notes for the answer. So actually sort of almost

the answer. So actually sort of almost replacing Siri in my mind, you know, this kind of push back on the Apple ecosystem by making my own tools. This

is a personal assistant that is genuinely useful using my own real notes data. So that's been um fascinating as

data. So that's been um fascinating as well. And then other little things like

well. And then other little things like my voice server which lets me speak into any T-Max session I have on my Mac um from any device on my network. Again, a

little bit of fun there. And then the multiriteria decision analysis tool is another tool available to members of this channel um which is an amazing way of visualizing complex choices using these radar charts. Again, fantastic

little tool that works over the network using the same kind of approach. And

then I have my old SMS helpers, which was actually one of the first projects I did where I wanted to set up some um fancy SMS interaction that I could text into from my dumb phone when I was doing my 2G phone experiment. I've now

switched back to an iPhone 2016 SE, so I don't really use that anymore, but that was a fun project. So, the way that I deal with attachments here, because I'm obviously composing in Neoim, there's no real support for uh attachments in that process. So, I'm writing the text

process. So, I'm writing the text element of my email in the Neo Vim window. I want to be able to easily add

window. I want to be able to easily add attachments in the same way that I would with Apple Photos, just dragging and dropping an image into the email. So, I

do that by dragging and dropping the image onto the web- based interface, which of course accepts that and deals with the upload and then gives me a little short code in the Neovim window that I can move around within my text.

So, I can basically [clears throat] have the exact same workflow, dragging and dropping a file or attachment and then using the short code in the actual composing markdown viewer to to just work around and and put text above or

below and so on. So that really rounds off the the whole system here in terms of this this way of working with Neov for composing and the web-based interface for the rest of it. So

hopefully this has kind of given you a few ideas as to what you can easily do with a little bit of vibe coding and I know there's this push back on the vibe coding scene. You get these comments

coding scene. You get these comments about the unsustainability of it and I I hear all that you know I know there are issues with energy use and I know there are issues with water use from these huge data centers. Um, but I, you know,

I'm I'm an optimist. If this does prove to be an ongoing issue, I think we can adapt to this. There are all kinds of alternative approaches. You know, I've

alternative approaches. You know, I've been experimenting with running local models. I've now upgraded to an M4 Pro

models. I've now upgraded to an M4 Pro Mac Mini, which is capable of running 14 billion parameter models locally. Um, so

I've been experimenting using the Quen model on there with the Gwen code app and that just runs locally, both that command line app and the model through Alarm. It's pretty wild what you can do

Alarm. It's pretty wild what you can do with that. So, it's obviously not as

with that. So, it's obviously not as powerful as Claude code. now, but it's just pretty representative of this ongoing thing that we might be able to see this and the efficiency of these modern small computers that can run models like this locally. So, I think

there is a more optimistic take on this that shows that we have this bright future for AI coding that doesn't rely on huge external data centers, cloud data centers that are burning through our energy and evaporating our drinking

water. So, I'm still optimistic for the

water. So, I'm still optimistic for the future of this. I think it is just amazing to see what is happening right now. And of course, I think it's just

now. And of course, I think it's just going to keep improving as well. And

what I'm hoping to demonstrate with these videos is just how empowering it is for individual users in terms of feeling like we can break free from this big tech grip that we you know we don't have to accept the bits of software that

they throw at us anymore. We don't have to buy into their cloud subscription. We

can make our own tools and and use personal computers in a much sort of more personal way than ever before. And

this has just been a fascinating journey. So if you want to see more

journey. So if you want to see more details on the photo library tool that I've vibe coded, check out the video on the screen now and I'll see you there.

Loading...

Loading video analysis...