The Journeyman
ChatGPT. It's all anyone can talk about. AI this, LLM that. The 'I' in AI is a misnomer. There's no true intelligence going on, no self-reflection—just input and response. Oh, and "hallucinations", we can't forget about those. Back before the ChatGPT hype train "AI" writing tools and services existed, as well as chatbots. I tried many. I went in deep for a period of time. Botpress, Chatfuel, ManyChat, Dialogflow, and probably a whole bunch more I've forgotten. Botpress was my favourite by far, still is though it's come a long way since I tinkered with it. These didn't have much in the way of AI as we know it. You programmed them through making decision trees—kinda like an LLM in its simplest form.
Then there were AI writing services like Article Forge and AI Writer, which still exist.
At one point I had a blog that had hundreds of posts by these services. It was so easy. All I had to do was put the keywords I wanted them to rank for, and voila—I could pump out article after article, of rubbish. I may have them somewhere thought it's better they're memory-holed. The point is, this stuff has been around for a while. The writing you see online has much more AI influence than many will admit. Mainly because they think they're too smart to be fooled by a computer's writing.
They're not.
I'm not.
You're not.
That's not what I want to talk about.
I wanna talk about the journey I took with ChatGPT by my side, and how it can benefit you.
For one month, ChatGPT and I coded up a storm. We made our way through 17 projects overall in the the month-long coding spree.
I won't be going over all of them in this article. Just the ones that stood out the most.
Before my month-long marathon I had used ChatGPT to create snippets of code here and there. Mostly small scripts. From there I started trying more. I fixed up a Bash script I made years ago. It "automated" the creation of Markdown files for Jekyll, a static website generator. Using ChatGPT I added all the features I had in my backlog. I could generate code so quickly. It was amazing.
Each time I had an idea I'd try and get ChatGPT to mock something up for me.
I started getting bolder, more ambitious. I wanted to create more.
I'll preface this—I had no real plan going into any of these projects. I didn't meticulously write out a plan of development and think about features. I just dived right in. This should be your first takeaway—if you seriously want to build something, have a plan. Describe your MVP (minimum viable product)—at the very least. It'll save you many headaches. Try and anticipate some issues. You'll see what I mean next.
Ludo
Ludo is a board game that can have up to 4 players. The idea is to roll the die and be the first person to get all their pieces to the end. There is some strategy involved—you can send other player's pieces back to the start by landing your piece on theirs. You can play in different modes but this is the gist.
I had the lofty idea of creating an Android app that acted as an overlay on top of the game. Many of our ideas start out lofty and ambitious, don't they?
I wanted to be able to track all the pieces and tell you the best move to make based on your roll. I quickly gave up on that.
To Python I went.
How was I going to track each individual piece? Each player has a different colour, but each of their pieces are the same. This was one of the many problems I came across—at least if you try anticipating some issues, it'll get your brain in the right mode of thinking.
In the end I got something working, however, it was basically a random game simulator. It played through games and show you the moves.

Segregation of Projects
Naturally, with my background in Criminology and security, it was only a matter of time before I dabbled in that realm. I came up with an idea for mapping out segregation of duties permissions across various services. This time I had a vision for what I wanted to achieve. My thinking was to define permissions using JSON or YAML and flag certain permission combinations. This is to mitigate bad combinations and to ensure users only have access to what they need, no more, no less. It was a mix of separating privilege and roles.
This is the basic idea (though not fully realised):
I moved on with other things in my life before completing this project.
ChatGPT Month
I'm not going to bore you to death with the finer details of my other projects. I will quickly list the rest below and get into the project I came to discuss.
Substack-Notes-Downloader
Does the following:
Prompts user for how far back they want to go (7 days, 14 days, 30 days, All notes, Manual date range)
Collects all the user's notes from that period (including restacks with notes, but not straight restacks)
Prompts user for which category they'd like to rank in
Provides user with a summary and which day / time is best for them to post (though, as Finn Trophy has pointed out, there is no perfect time to post)
Also shows: unigram and n-gram wordclouds, saves CSV of all the user's posts with an "engagement score" based on engagement
(!) 960 lines of code
substack_notes_analyzer
When ChatGPT went off the rails and decided we should develop a comprehensive, fully moduled Python program for the Substack-Notes-Downloader—I started building out the file/folder structures in a separate repository.
Substack-Bio-Analyser
Creates a wordcloud from a Substack search query
Substack-RSS-Feed-Parser
Analyses a user's feed (can take multiple) and displays:
Post frequency over time (per month)
Top authors by post count (only useful if you input more than one feed)
Word count distrubution (frequency of posts with varying lengths, namely, 0-1000, 1000-2000, 2000-3000, 3000-4000)
Password-Strength-Comparator
GUI-based,
User inputs two passwords (their old, or weaker password, and their new or stronger password)
Displays how long it would take to "hack" their password with a regular computer, assuming all possible combinations
note: this was originally intended to show people that length > complexity

Logseq-Quick-Capture
Background: Logseq is a PKMS (personal knowledge management system), think of it basically like a journal with keywords (hashtags). It's a collection of Markdown files (one for each day, and any other pages you create). On the mobile app you can "Share" files such as images and it will add them as an entry with the time. However, there's no way to import them in this format. So, this program:
Imports images from a folder
Reads the metadata in the images
Moves the images to the 'assets' folder (where all the pictures and attachments are stored)
Adds the entry in the correct format, in the correct place (chronologically) in the correct page (the right day)
note: an unintended benefit of the program is that it automatically sorts your journal entries chronologically—however, this is also a downside because you don't always want them formatted that way for various reason
E-ink-Workflow-Automation
Background: I use an e-ink tablet, with it I'm able to write by hand and there is a feature to transcribe my handwriting into text. It can be a pain to 1. wait for the handwriting to be transcribed, 2. share it or send it where you want to edit it—your workflow and flow in general gets interrupted a lot. The process would look like this most of the time—1. write something down → select the option to transcribe → wait → decide where you want to put it → send it/share it/ → take the file, put it in another program → edit it, etc. With this program:
Write with handwriting
Close out of the e-ink notes app
Transcribed text is magically in Logseq (see above)
It worked great, except for some minor issues and it was using Google Cloud Vision.
Email-Tone-Analyser
I didn't start on this one but I mapped out the ideas. The basic premise is that it would analyse your proposed email for its "tone" and recommend actions. For example, if your email comes across passive aggressive or even overly aggressive it would issue a warning and some potential actions to take to rephrase your email to ensure it doesn't give the wrong impression.
Bitcoin-Searcher
Searches online for strings matching Bitcoin addresses
Verifies them as actual Bitcoin addresses on the blockchain
(optional) Provides balance information
Resolution-Slider
You can check it out here
Random-Creative-Constraint-Generator
Something I created for an upcoming creativity / writing exercise / challenge.
Substack-Notes-JSON-Extractor
Extracts and saves Substack notes (to CSV) through the API instead of via scraping.
I'm looking to replicate the Substack-Notes-Downloader using this method because it is SOOOOO much faster and more effective (and probably doesn't get under Substack's skin quite as much).
And then we have:
Image-Metadata-Analyzer
Analyses image metadata and displays information about it.

The Spark
The original catalyst for this whole project spawned from me thinking about the above image. I literally just wondered how the average size of each of the photos I've take changed over time. I assumed it would increase. This would make sense because as technology and cameras get better so would the average size of the images. However, this wasn't exactly the case. I don't buy a new phone, new camera every year. Mixed in with all this data was also pictures that were shared with me. It would take some cleaning to get a realistic picture once all of these were taken into account. The graph could look very different.

It's Evolution (and de-evolution), Baby!
As with any project like this, it's natural for it to evolve. I began thinking about what other metadata is available and how it could be displayed. The next idea I had was to display the camera models.
Our phones and cameras store a lot of metadata. I ended up using 3 different methods to extract it to ensure I collected it all—this ended up slowing the program down significantly. I suspect this method is unnecessary but I haven't taken the time to figure it all out properly. Because it seemed to be working in the beginning before we added all the extra metadata collection overhead.
Then I added GPS metadata and mapped it out. This one gave me a bit of grief. Well, it gave ChatGPT a lot of grief. Originally it was fine. This leads into your second takeaway—break it up! Once code (and probably writing, I haven't tested it) gets to a certain length, ChatGPT-4o (and even ChatGPT-o1 for that matter) really struggles keeping track of everything. I started noticing:
It was seemingly forgetting the full context of our conversation
Was introducing weird changes in the code (changing variable names)
Trying to revert to "old methods" that we had already established weren't working
Getting stuck in loops
Possibly other things that went unnoticed by me, a mere human observer
So—start separating your code into separate modules as soon as possible.
Throughout each of my projects, the same problems kept coming up.
Third takeaway—be specific!
If you've got young kids, you'll know you can't bombard them with a million different instructions and expect them to effectively:
Remember it all
Know which order they should do it in
What to start on first and,
Not become distracted 3 seconds in
This applies to ChatGPT as well. Except ChatGPT doesn't even understand its role in life. You should give it explicit instructions on:
Who it is (what's its role)
Exactly what you want
How you'd like it to proceed
How you want it to respond
Any other caveats
Even with GPT-o1 (and any other LLM in the foreseeable future) there are going to be similar issues. It's not like speaking with a human—no matter how much we want to convince ourselves they seem like it. The truth is humans have many other capabilities beyond information collection and retrieval. We have emotions, we have instincts, we understand non-verbal contextual cues, and many other things.
We get super impressed by things we can't do, like storing massive amounts of information and data and being able to retrieve them. ChatGPT is still scoped fairly narrowly and oftentimes misses the bigger picture. I've noticed this primarily with searching online. ChatGPT will make "assumptions" and work based off those. Sometimes you should anticipate what you think its assumptions are going to be, given things like what it has in memory about you, what information you've provided in the current chat session.
What's Next?
As I wind down a bit after this past month I'll focus more on SparkLab and Thirteenth Strike as well as Substack Notes. Honestly, it's difficult for me to stick to one thing and it's been a challenge balancing two newsletters, even though I'm still doing one article a week. There's a lot that happens behind the scenes. A lot that doesn't get published. A bunch is disorganised, in disarray, in shambles.
I'll continue to hone what I've learned with ChatGPT and apply that in various projects. Some of which will enhance your knowledge as well. I want to show you that you can become more creative, come up with solutions to your problems and with each other we can uphold some accountability for what we're struggling with.
In the meantime I put a guide together for people to use ChatGPT much more effectively (most people use it completely wrong). It's here if that tickles your fancy. All updates I make to the guide will be included—I'm not gonna stiff people and force the purchase of another copy. All updates included. All the new things I learn I will add to it. You should also follow my Gumroad page if you want to get notified about new guides, or other digital products I release.
This month was exhausting and at the same time exhilarating. I get so much energy from doing this kind of thing, digging in and figuring it all out, getting my hands dirty.
Oh god, I forgot to mention the AutoGPT project I also was working on...
Thaaaat's a biggy. I'll create a whole article (or possible more) on that one. It's related to document forensics. If that's up your alley, subscribe and like stuff, share it. Below are all the buttons to do all the things—let's do the things together! Share your opinions, thoughts, ideas about what I can work on next, anything and everything!
Ideas can change the world—they change it better when combined with action.
That's it for now.
As always,
Good luck,
Stay safe and,
Be well.
See ya!
Fun. I don't use it for a lot except for ideation and some rewrites. Not much coding yet. No need but useful.