Category: Work Diary

  • Day 251 – Deadline reached !

    251 days ago I decided to fall back on some of my savings and focus on what I wanted to do for a while – developing my own software ideas. In hindsight, I think I also wanted a break from the stresses and strains of daily agency/contract/freelance development – and to focus on what life meant to me as things change in your early 40s!

    Anyway the intention was to give myself some breathing space from client work and focus on building some SAAS software for the beginning of a startup idea within the AI world, since that’s a bit of a paradigm changer.

    What I’ve ended up building is a platform that lays the foundation for an AI driven website. Whilst I think websites have taken a battering by social media, and now Google AI search results will start to take traffic away from them even more… websites are still built on open standards and are things that you have control over rather than an American corporation.

    I think the technologies that construct websites/webapps are important since they are open-source and not under the remit of corporations which are taking over exponentially. Websites are already incredibly easy to make with GoDaddy, so I am aware that an AI website builder is low hanging fruit, but when you see it as a singular component of an overall business brain which has everything in one place, the website can start to be driven from internal business intelligence. I think that’s where the future is driving to. So the website component is just one part of it, built on a platform. I think the nature of business will change fundamentally as we go more into automation flows … customers will require data in different ways – as proxies through LLMs … and that will impact business workflows.

    Anyway I digress.

    The app has user auth… simple email/pass. No google/facebook account integration as yet.

    Each user can create several brands. Each brand has a website. So for this example I’ve made an Arsenal News website.

    It has a dashboard. The statistics are currently 0 because it’s a brand new website.

    The system relies on AI workflows. It currently integrates with OpenAI but I imagine moving onto one of the APIs like Replit And currently there are two workflows, Article Rewrite and Webpage Build. These are structured requests so the AI API returns data in a certain structure that I define. For this prompt I have selected an Article Rewrite and defined a simple persona with the following simple prompt:

    You are an enthusiastic American Cowboy Arsenal Fan. You write articles with humour – occasionally dark, with witty anecdotes about your long suffering cowgirl wife. You are an amateur sports psychologist.

    The system works on Data Sources … with RSS currently the first to be integrated. So I’ve setup a few here and manually synced the feed.

    The system lets you manually sync, or set it to automatically check every 15 minutes for updates. In either instances, the articles will be looked at, and processed to markdown.

    The system gives you information on the RSS data source.

    I want to find just Arsenal information. This stage is still manual but it’s not going to be too difficult to get AI to decide which articles to rewrite based on criteria. So I read through some of the articles to see which might be suitable for rewriting.

    You can read through the article.

    A notification comes in saying the workflow is underway, and then another one when complete.

    The system has sent off some system and user prompts to OpenAI and this has returned an AI Output. Whilst this is somewhat simple, the infrastructure is there to do some much cooler things in the future.

    This output has also been created as a webpage, which is accessible in the website manager section.

    You can view and edit the article yourself. And assign categories.

    The system then hosts a website (in this instance https://arsenal-news.affiliatefactory.ai/) … and puts the article into the website.

    There’s the post!

    As the weeks go on, I will manage a larger website on it and report on progress.

    So what’s the point of it?

    As the prototype stands at this point, you could manage an infinite number (constrained by your time) of news websites and you could rewrite articles very quickly once you’ve got the prompts as you want them. If you are a journalist or researcher, you can simply use it as a research tool to keep track of things as well.

    The platform has a few tricks up its sleeve and its not vibe-coded, although Cursor helped me an immense amount (with oversight), so the platform codebase is clean and easy to extend.

    It’s current feature set is:

    • User authentication
    • Multi-tenancy (meaning multiple accounts for same user)
    • Each account has a subdomain as per its tenant name
    • User notifications
    • Background work queues and jobs setup (need a bit of optimisation)
    • Deployment and monitoring tools setup (third party)
    • Admin has site wide search
    • Solid form based data system with plenty of nice quality of life features
    • OpenAI Integration
    • Structured response OpenAI calls
    • Post processors configured for AI outputs
    • Website frontend template
    • Webpage generation from AI API
    • Website categorisation and appropriate routing
    • Article generation

    I am just in the process about figuring out next steps, and will write about them shortly.

    Other achievements

    • For the first half of the challenge, I managed pretty much to write every day on this blog; and I would post on LinkedIn. That momentum did run out of steam and it became a lot less often. It did give me a glimpse of the power of LinkedIn however, as I saw traffic statistics spike, etc.
    • Did some client work for a few months since some work came in that I liked doing, although it ended up a bit stressful, it *might* eventually lead to other things.
    • Began my entry into the AI development world.

    AI has moved so fast!

    AI has moved so quickly in that time – just recently Sora videos have exploded and you can search for them on YouTube but I’ve added an example at bottom of this article. Some of them are hilarious (some wont appreciate the humour but that’s life – you have the right to be offended).

    The videos are hyper realistic, some of the 3D rendering is insane as well, and ChatGPT is getting better all the time. In terms of programming, there’s still debate – are software developers in denial or are they right in saying vibe coding ends up with a unmaintainable mess?

    ARC AGI-2 remains unsolved

    More information on this here

    https://arcprize.org/blog/which-ai-reasoning-model-is-best

    Right, that’s all for now….

    Sora examples:

  • Installing postgis on Laravel Sail

    Simple solution:

    In your dockerfile … swap out

        postgres: 
            image: 'postgres:17'

    for

        postgres: 
            image: 'postgis/postgis:17-3.5-alpine'

    https://hub.docker.com/r/postgis/postgis

    Then put this in one of your migrations

        public function up(): void
        {
            DB::statement('CREATE EXTENSION IF NOT EXISTS postgis');

  • Day 21 – Work Diary #8

    Pydantic AI is an interesting library … it’s the best way to create agents and one of their examples is a basic one which acts as a bank account agent, where you can either find out what your balance is, or block your card.

    You can see the rest of the source code on the page but what’s interesting is how it uses LLMs to interpret your request to see if it will take a certain action or not.

    So you can run the agent with

    result = support_agent.run_sync('what is my balance?', deps=deps)

    This returns:

    support_advice=’Your current account balance is $123.45.’ block_card=False risk=1

    But I can also do something like

    result = support_agent.run_sync('i need to see if i have enough to buy a dog, my wife has spent it all', deps=deps)

    support_advice=”Your current account balance is $123.45. Please check the price of the dog you want to buy to see if it’s within your budget.” block_card=False risk=5

    Which is quite funny really … so it’s shown the user to see the balance because its interpreted it as a show balance action, and whilst I’m not sure banks would want the rest of it, it’s quite funny.

    However if I dont indicate balance intent …

    result = support_agent.run_sync('My dog died :-(', deps=deps)

    support_advice=”I’m very sorry to hear about your loss, John. Losing a pet is incredibly difficult. If there’s anything I can do to help you with your banking needs during this tough time, please let me know.” block_card=False risk=0

    In this above case, it just sends a message back but doesnt show the balance.

    https://ai.pydantic.dev/#tools-dependency-injection-example

  • Day 17

    Day 17

    Today, main things:

    • Spent time looking into USA taxes … learnt quite a lot and realised that I’m going to drop Laravel Spark in favour of being able to use Stripe Tax
    • The rest of today’s work time was spent tightening up my value proposition and planned business model more, with the output being on the website. I wasn’t happy with the current incarnation of it, but I think i’m in a better place now. Will have to wait to see what the group thinks. Most of this was done in conversation with ChatGPT, my own thinking and a good conversation with my potential business partner.

    Being clear about the value

    I’m now able to communicate a lot clearer the general advantages that AI offers, and that’s crucial for an agency to be able to do before making their offering.

    I have broken the value of AI for companies down to 7 areas:

    1. Virtual Agents
    2. Automation
    3. Lead Generation
    4. Content Creation
    5. New capabilities
    6. Talking to your data
    7. All encompassing Virtual Assistants

    Life Stuff

    It’s Saturday 1st March 2025, and we had great blue skies today in Norwich. The grey winter was a long one, so it’s good to finally see the light.

    One thing I’m absolutely determined to stick to even when building this AI Company is making sure I get out and about for adventures. Life really isn’t about making money and building businesses. A lot of the time it’s egoic human mind busyness, and really, life isn’t about that. There’s so much more.

    But for those who for some reason, love the tech world, and are drawn to it naturally … we can easily lose years and decades staring at the screens. And it’s really not worth it. You don’t want to spend your entire career focused on making millions, only to make that target later in life and to realise that your real wealth – your time – has slipped away never to return.

    It’s true what they say that life goes fast, but you are completely ignorant of it when young. It’s also true that you never know which day is going to be your last.

    With that said, it’s so important to force yourself to make time to plan out adventures – of whatever scale – and then to actually do them. So I got myself out for a walk around the city today.

  • Day 17 – Work Diary #7 – Understanding Taxes, SaaS Taxes, US State Taxes, etc

    The big thing right now is pushing the Stripe integration over the line. Once I’ve done that I can start taking payments from customers and begin that process.

    Because I potentially have a US customer, I took a look at tax requirements. I didn’t realise it was so complex to sell to the US. Each state has differing rules, but in the main it sounds like the threshold is $100,000 over 12 months at which point you have to register with the state for taxes, and start paying them.

    Currently my offering is not a SaaS product, but that’s the plan in the future. At the moment I am doing effectively technical services to companies i.e. consultancy and software development – customers retain a set number of consultancy & development hours each month.

    US Tax Is Complex!

    I didn’t realise US taxes were so complicated. Sales tax is due to each state individually:

    In most states, the threshold for economic nexus is $100,000 in sales or 200 transactions over 12 months. There are exceptions, though; for example, in Texas and California the threshold is $500,000.

    Although SaaS products count as digital products, they often have unique regulations because they’re not necessarily downloaded. For example, SaaS sales are 100% taxable in Connecticut but non-taxable in California. And in Texas, SaaS products are taxed at 80% of the sale price, while downloaded software is fully taxed. See where SaaS is considered taxable

    Stripe Tax will deal with it all, but Spark doesn’t support it

    Whilst Stripe Tax seems to be the solution, which is great, I have a decision to make about Laravel Spark … this was the package I was going to use to manage subscriptions and had bought a licence for. However it doesn’t support Stripe Tax, which I think is a big negative.

    Spark does not currently support Stripe Tax. You should disable Stripe Tax via your Stripe dashboard when using Spark.

    https://spark.laravel.com/docs/spark-stripe/taxes#taxes

    This is a big issue, since I would be much happier using Stripe Tax to manage everything. It’s really annoying but my fault for not properly reviewing Spark’s docs.

    I’m probably over thinking it at the moment. The options are:

    • Keep Spark, switch of Stripe Tax, and let Spark deal with the taxes. Whilst Spark has probably done a great job, I wouldn’t trust them as much as I would Stripe. I would prefer to get this right now, as I don’t want to have to reverse six months down the line.
    • Get rid of Spark for this particular project and integrate Stripe Checkout instead. I’m not going to lose much time right now, so it’s not a big problem. There’s potentially another UK based project that I could use it for absolutely fine.

    The best thing to do at this point would be to remove Spark entirely from the system (I wasn’t liking the interface anyway) and rely on Stripes subscription handler, which would take care of the taxes. I won’t lose much time by making the switch now, and it would allow me to take instant payments this week.

    Some Interesting Stripe Guide On Taxation

    Also, this image below shows where SaaS products are liable for tax:

  • Day 13 – Work Diary #6

    Day 13 – Work Diary #6

    Started Google’s Startup School today.

    Warning these are unstructured notes.

    First up, is Vertex AI Studio which I hadn’t heard of before.

    Joining the StartupSchool gave me access to Google’s discord which is great. I needed to have more of a community

    So the main paradigm shift is one going from how the user interacts with you/your business. Previously the user would navigate manually to find their information, but now Virtual Agents abstract away all the mundane manual searching, and they can lookup information and take action for you.

    LLMs began as just being able to enter some text and we could get back a response as well generated words.

    Then Retrieval Augmented Generation was born, and you could go and fetch structured data.

    A typical stack

    Screenshot

  • Day Nine – Work Diary #5 – WordPress, Marketing, ChatGPT

    Tired today but wanted to get my thoughts down in a work diary.

    WordPress is a really good platform.

    I have recently been making a few websites in NextJS/React … and because you can get lots of wonderful react web block components, it was quite an attractive to develop with. But the problem for clients is that they would have to pay for Sanity integration, or pay me to update their websites. Which is OK if you want to earn a few hours here and there, but it’s not an effective way of doing things.

    I forgot how good WordPress is. For some reason I became a typical developer snob of WordPress. But the ecosystem has seriously improved. I don’t know too many other CMS’ with the most recent being Statamic. I’ve had a glimpse at Sanity on React but that’s about it. Anyway, the point is, the ease of use of WordPress is probably unchallenged. It’s really easy to get up and running. I haven’t as yet done anything more than posts but I have enjoyed the writing experience. Everything just works as you want it to.

    I don’t know why I went off it, I could have easily kept on making WordPress websites and made a lot of money doing them. Potentially even could have made my own WP template or plugins and made a ton of money. But I decided to move onto more complex software stuff, which is fine.

    I wonder what CMS’, or indeed the internet will look like in 20 / 40 years. I may make it to 40 years but not much beyond that in all probability. At any rate, I will see a glimpse of the future. Will WordPress be around in 40 years? Well, as long people still want to publish content to the interweb, it probably will.

    Anyway, the point is, WordPress is really good. It’s a great platform, and I can easily see, although I haven’t looked yet, AI plugins that just summarise your entire wordpress blog and let you query it. I may well build that just to see how easy it would be to integrate. Would be good to have my own WordPress plugin for that anyway.

    Could also make a plugin that summarises a post, and then deploys it to all the social networks, rewriting it a bit, etc. Fairly obvious stuff but cool nonetheless.

    Eerie Positive Reinforcement from ChatGPT

    The other day I copied all of my posts and put them straight into ChatGPT. Here’s what it said:

    Your blog reads like a mix between a tech founder’s diary, a strategic playbook, and an experimental lab for AI, marketing, and self-discipline. It’s got rawness, vision, and momentum—exactly what you need at this stage. The way you’re thinking about “Tactical Stress”, positioning, and AI-driven marketing is spot on.

    That’s the first time, ChatGPT has given me positive reinforcement that actually felt real and genuine funnily enough. Unless ChatGPT is flattering me in some way, which I don’t think it could unless I asked it to.

    Since I needed to get a landing page up for Stripe to verify before I could start using the account, I asked it to help me with my marketing landing page.

    ChatGPT is good at tightening up marketing language, as long as you give it detailed context and your own starting point

    AI / LLMs certainly raise the bar in work quality. I still believe the human element is essential. I sent an AI email yesterday and it felt wrong afterwards. There’s something non-genuine about it. Even though it was a tweaked version of my own.

    Anyway, I showed it a version of my landing page. Remember that I had given it context of my entire blog so it had a vivid idea.

    Where to Go from Here?

    Your current website content is good but too broad—it sounds like a generic tech agency rather than a cutting-edge AI transformation hub. If you’re positioning yourself as an AI R&D pioneer, we need to refine your messaging to make it sharper, more compelling, and action-driven.

    It then gave some ideas, so rather than second guessing I just implemented them. Of course, I still am doing this manually at this point

    I’ve taken some screenshots of current work in progress for prosperity.

    These are a really good starting point. Got a bit more to do.

  • Day Four – Work Diary #4

    Last night I managed to get the existing AI platform working after a long time of pulling my hair out.

    In the end I made a new MacOS user, booted up the docker containers and the platform worked straight away.

    I’m assuming some obscure system, environment, docker configuration was blocking it.

    Anyway, frustrated by that but I did expand my knowledge of the codebase and how it all works.

    Also fixed another major bug involving GitHub access keys which was holding us up.

    Laravel Forge + Digital Ocean

    Today amongst normal life things, my main focus was just taking a few steps forward on the devops side of things.

    I now have kintronix.ai live with a basic Laravel Jetstream install. This means that basic user registration, team management and a basic user dashboard is in place.

    I also setup staging.kintronix.com and secured that site with simple htaccess.

    So, I’m happy with the work done today.

  • Day 2 – Work Diary #3 – Setting up Laravel Jetstream & Deploying on Forge

    Had a load of random tasks come into my reality today; but decided to stay focused on just building through my roadmap. I know I need to write it all down at some point but for the moment just going with the flow.

    I’ve got some existing customers that’s that I need to talk to, and some tasks to complete for them. And there’s a demo to sort out for next Tuesday which is pretty much an impossible task and no idea just yet how I’m going to approach that.

    For the moment I’ve got Laravel JetStream up and running. Had to do some docker tweaks to get Laravel Sail working with Postgres. JetStream gets some basic dashboard stuff up and running.

    … which also has basic user functionality, and two factor auth which I will want to test to see how it works. Also browser session clearing is quite fun to have.

    At any rate, I’m not sure about using JetStream totally, but for the moment it will serve a purpose. I don’t like Inertia and this would force that architecture, but I can figure it out. I also want to use my React dashboard, but I will have to also figure out the best way to integrate that. It may be that I just use the Fortify stuff and rebuild the UI and functionality. Will see.

    Next is going to be hooking this up to Forge and getting deployment working.

    Had to scrap the Forge server and build it again this time implicitly requesting for postgres. Have realised I am going to need alternative setup for the python API that I will be building. But will come to that when I get there.

    But whilst I am doing this, I realise that I could just upgrade to Postgres 17 and see if that will work.

    https://www.postgresql.org/about/news/postgresql-17-released-2936

    Reprovisioned the server and got it to match the local Laravel Sail setup exactly. Needed to tweak the postgres up to 17, ubuntu to 20.04, and PHP to 8.4. This now matches the local Docker to the remote Forge server. Less likely to get random bugs that I don’t understand in the future.

    Once I had done:

    • Deleted and created a new Server on Forge
      • Matched Ubuntu, PHP, Postgres versions to the local docker
    • Resynced with github repo

    … finally got it up and running … and wasn’t encountering any missed migrations or server errors.

    Excellent!

  • Day One – Work Diary #2

    I hadn’t expected to need to think about a fundamental business decision within hours of day one, but that’s the way things go.

    My newly appointed office, based out of the local Wetherspoons, at £1.80 for unlimited hot drinks, is a good place to start the day when you don’t have an office. 🙂

    Anyway, last three hours has been a solid meeting with someone I very much respect. It very much impacts what I am doing, and a high level analysis is:

    • There is a prebuilt codebase available to me, that isn’t too far away from being a ready product in the AI sector.
    • I can form a company with this person, and build that company beginning with this product.

    The challenges are:

    • The tech stack is something I am not 100% familiar with. I was very, very much wanting to go with Laravel + React/Vue + Python + Flutter. This is sort of similar but based on the https://www.graphile.org/news/graphile-starter/ start kit. Most notably I wanted to use Laravel for the backend ‘brain’ but this would negate that.
    • I have been trying for a few weeks on and off, to get this working locally. We got it working on a Linux box last night, but to no avail on my MBP. So I haven’t really had the opportunity to really get to grips with it. This is the big blocker.

    The opportunities are:

    • The person in question is talented and experienced and would be a huge, huge force in going forward. He is, subject to caveats, happy to let me run with it as CEO.
    • Of what I know of it, the system has working parts that are very much part of my roadmap.

    For the moment that’s all I am going to write on the subject. I’m going to get on with other things today, and sleep on it. And figure out a way to get the product working locally where I can use it.

    Back to Laravel

    Laravel JetStream

    The main problem I have is that the rest of the frontend I want to use is built with React components. I have way more access to React frontend components than Vue components. I can work with both, but since I already have some sort of dashboard ready to go built with React/Next … I have to think this through.

    I’m choosing to build first with JetStream because that will implement the Laravel Fortify things that I need. I don’t want to put time into custom implementing my own auth structure right now, and JetStream will be a good starting point. I will be able to port things further down the line. Also Laravel Spark works well with JetStream so that’s a bonus.

    Laravel Spark is really important because that’s how I envisage getting paid eventually, through a subscription access to the system.

    I’ve got somewhere to be tonight, and didn’t expect a couple hour meeting (which is totally great), but still aiming to get something small up and running today as a small milestone.

    Onwards.