FastMCP LED Control Server

I made a Python program using MCP protocol to interface between AI and an LED.

Source Code: https://github.com/tomjuggler/BlinkMCPServer – includes Arduino sketch and MCP python server with example Cline json config.

Tech used: FastMCP (Python) Arduino Uno (Serial) and Cline for VSCode (MCP Client), with DeepSeek Reasoner as the LLM – massive overkill just to turn on an LED!


This project was built using Aider – pair programming in your terminal.
https://aider.chat/

Check out the demo video where I tell the AI to turn on my LED – all done from Cline agent inside VSCode!

AI Generated Images for POV Poi

I have been saying for some time now that I wanted to train an image generation model on a ton of POV Poi images to make one that I can use for Magic Poi image generation.

“I want an celtic knot image – blue with black background” should ideally generate something usable on the poi. Up until recently tools like Dalle, Stable Diffusion and Midjourney simply weren’t up to the task. The type of image that works on my poi (dark background, primary colours, pixel perfect, small size) just weren’t an option – most pics end up blurry and just look worse than making it yourself in Photoshop*. Don’t even get me started on how annoying the ChatGPT image generator is! “Image needs to have no white, only primary colours” (white image generated) “Zero White PIXELS!!!!” (Still blinds me with glaring white background)

I recently went looking again and actually found some! There is a service aptly named “thereisanaiforthat.com” with a ton of free services listed. I have linked the best ones below.

Some Example Images

Services:

https://free.theresanaiforthat.com/@kadi_228/pattern-generator-srcset

https://free.theresanaiforthat.com/@zurcher/decorative-patterns

More to view here:
https://free.theresanaiforthat.com/pattern-images/

I am not sure, you may need to sign in for these to actually work but all of the ones I linked are free!

I still have that trained image generator for poi pics on my list of things to do, but it seems I may have a better starting point to work from soon, if these projects are anything to go by. The field is advancing rapidly!

*I actually use Krita, open source image editing software with Pixel brush. It’s really good.

LLMAP advanced context generation for AI coding

I use the open source and very capable Aider for AI code generation. Anyone who has tried AI code generation has heard of “context” – the information you send over to the LLM so that it can know what the code looks like that you want to modify.

Anyone using these tools eventually comes up against the dreaded token limit at some point – some sooner rather than later! The LLM can only keep so much context in memory at one time. This is annoying if you are trying to update a legacy codebase with multiple files and countless lines of code – who wants to try to pare this down to only the relevant parts, copy and paste into the window?

In Aider adding files to context is as simple as /add file.txt
To remove files just do /drop file.txt
If file.txt is 100 000 lines long you have to copy and paste the parts you want (up to 60 000 tokens), check how many you have left by running /tokens
But that is takes too long! It defeats the purpose of getting AI to do the reading and modifying for you (remember to review the diffs after!)

Meet LLMAP

llmap is “context extraction at scale”. The tool can search and sumarise vast amounts of code and ouput only the relevant parts which you can then add to your AI coding tool context – leaving out all irrelevant parts (usually most of it!)
Example from my own use case: I had an issue with a looping api request on ESP32 in my Magic Poi project – I had been concentrating on the battery monitor feature and the new feature broke some other functionality. So I did a diff with the last known working branch:
git diff origin/Battery_Monitor_Main_Merge > context_git_diff.txt

This diff is from way back though so it was too large for the context window (if you include all of the code I wanted to update) so I had to run it through llmap with a query:
echo context_git_diff.txt | llmap "list the changes made that affect the control flow of the application." > llmap_diff_context.txt

Now my new file llmap_diff_context.txt with only the relevant information could be added to the context – using /read-only since it’s not included in git nor do I want to edit it. I used /architect mode* to see what changes happened to cause the loop. Turns out it was a simple misplaced line of code and everything worked again!
*for me architect mode is configured to use DeepSeek R1 for thinking and V3 for editing – cheap and effective

LLMAP is easy to use – just install via pip. By the way, if you don’t have a DeepSeek api key, the update I recently submitted to add OpenRouter support has been merged but not yet published. You will have to download and install llmap manually to use OpenRouter – but it works.

Full credit to Johnathan Ellis for creating and sharing this great tool. You gotta love Open Source!

Building 10 websites at once using AI

Using Aider AI coding assistant and Deepseek api I got 10 usable websites made in about 30 minutes. This is just a test of what is possible with AI coding – the only things I did on the websites in the video was add a few images to make them work.

To have your website created and hosted with the help of AI visit https://devsoft.co.za – obviously if you pay me I will do it properly!

I think above all this video demonstrates that AI is a tool, but needs proper guidance to get it right.

The Details

I made a script which used Aider:

*I found the problem I had in the video now – no mention of image file format!

#!/bin/bash                                                                                                                                                                                                      
                                                                                                                                                                                                                  
set -eo pipefail                                                                                                                                                                                                 
shopt -s nullglob
                                                                                                                                                                                                                  
 # Configure Deepseek API                                                                                                                                                                                         
 export AIDER_MODEL="deepseek/deepseek-reasoner"
 export DEEPSEEK_API_KEY="$DEEPSEEK_API_KEY"                                                                                                                                                                
                                                                                                                                                                                                                  
 # Process each website folder                                                                                                                                                                                    
 for dir in */ ; do                                                                                                                                                                                               
     (                                                                                                                                                                                                            
         echo "Building website in: $dir"                                                                                                                                                                         
         images=("${dir}images"/*)
         # Use aider to build website from brief.txt (paths relative to git root)                                                                                                                                                              
         aider --yes-always --no-auto-commits --no-stream --message "$(printf "Make a website (or improve the existing site) using the following instructions. Make sure to use only the images in images folder (they are always named img img1 img2 etc) when building the site. If any other images are referenced, remove them. Do not leave the website unfinished, add placeholder content where an unfinished element would be always. \n\n%s" "$(cat "${dir}brief.txt")")"  "${dir}index.html" "${dir}script.js"  "${dir}styles.css" "${images[@]}"
     )                                                                                                                                                                                                            
 done                                                                                                                                                                                                             
                                                                                                                                                                                                                  
 echo "All 10 websites built successfully!" 

This used in particular the brief.txt in each website folder. here is an example from the video:

Custom Candle Maker: Wants a moody, scent-driven design with a product carousel, an ingredient transparency section, and a "Build Your Candle" form (wax type, fragrance, color). Mentioned competitors using "slow-motion pour videos" but prefers static images to save costs.

The 10 prompts were made using Deepseek chatbot, which I asked to create customer requirements for the 10 videos – with variety.

Conclusion

The AI does a good job but needs a lot more information than the vague short prompts I actually gave it. In a real-world scenario with an actual customer I would most likely be much more specific, with better results no doubt.

It was fun to watch, however!

I cloned ChatGPT Operator using DeepSeek R1

Operator is in the news – one of my friends recently shared a video of someone using it to buy stuff online. It runs on ChatGPT 01 or 03 reasoning model. DeepSeek R1 is just as good, right? Let’s clone it!

How I did it

  1. Found a tutorial online
    – of course I’m not the first person to try this
  2. Add the tutorial webpage to Aider context (to send to DeepSeek)
    I did skim it first, looked OK, using cool libraries and stuff
  3. Add some specifications (prompt) and tell DeepSeek to make it for me.
    using Python with Gradio and Browser Use – a way to control Chrome easily with AI.

The result

DeepSeek with Aider’s “Architect mode” did an amazing job. It required some guidance about what exactly I wanted – the tutorial was more of an inspiration than something I wanted to copy exactly. As usual there were errors and I had to spend a few hours asking the AI to debug code – as well as doing it manually on occasion. AI programming is not foolproof and will not replace us in it’s current state – it’s a tool only. A great tool – but only a tool.


I love good tools.

DeepSeek decided that it needed to record it’s progress as a gif, made up of screenshots. I didn’t ask it to do this, and it wasn’t mentioned in the tutorial either.

Here is the slideshow for “Find me the cheapest Android phone on gumtree”. It also returned the results in text format.

Conclusion

It was super fun asking my “DeepSeek Operator” to do something and then watching it click around in the browser, even working out that it had to accept cookies before continuing!

As you can see, the tools for this type of operation exist in the Open Source world already. I think that Agentic AI is almost ready to take over the browser and do a lot of your work for you – if you are willing to trust it. It could be great for research for example.

Having said that, the DeepSeek R1 model was pretty slow via api. I think that may be a problem with reasoning models in general, though. Also, it didn’t find the actual cheapest phone, I did that myself in a few seconds afterwards to double check the result.

What do you think, should I publish my Python powered OpenAI Operator clone to GitHub?

Update:

I published it! You need a DeepSeek api key for this to work*

DeepSeek Operator on GitHub

*currently the service is down again, hopefully they will find a way to scale it soon

Boost Your Online Reach: How Multiple Related Websites Can Grow Your Business

Use your industry specific knowledge to create a related website and fill it with your own ADS. Create your own referrals with much less cost than paying for ads. I could go on, but let me start with

An Example

My own business is in the Entertainment Industry. We do high value entertainment which can run to thousands of rands invoiced for a single booking, and our customers often convert to returning customers (we get 50% returning customers on average) – so a single lead can be very valuable, long term. That is why we advertise on Google.

Many years ago we set up a page on our main site, which was in response to all of the enquiries regarding Party Venues. This was a simple service to our customers with our recommendations regarding our favorite venues in the Durban area. This quickly became the most popular page on our site, according to Analytics. Soon after I decided to branch out and create a full website using the initial list – and now this site durbanpartyvenues.co.za is getting up to 2000 visitors per month. We get 10-20 referrals from this site which converts to an estimated extra R1000-R10000 per month (guesstimate according to converstion statistics).

Since we were already paying for a web server the actual extra cost is R100 per year for the domain fee (!). Of course I spent a lot of time on the website development – first in WordPress and later Flask (Python) which made it easier to add new venues using a simple spreadsheet which makes it easier for my non-technical partner to do it.

Expanding

Last year we added capetownpartyvenues.co.za since we occasionally do entertainment in that city. This year I am working on another related services website, durbanpartyhub.co.za which will cover related entertainment services. This time we are planning on allowing our friends in the entertainment industry to pay a small fee for preferential placement (once the site gets traction).

Does this apply to your industry?

I am sure you can think of related products and services that you have inside knowledge of which can

  1. Provide informative content for potential customers
  2. Be made into a website which you create and control with your own brand front and foremost

Shameless plug

The years I spent refining this “Related Services” template has given me an unique insight into efficiently building out an effective marketing vehicle for my company – while at the same time offering a valuable service for our customers. At DevSoft, we use AI development tools to speed up, refine and enhance the website creation process. Perhaps the ideas in this blog make sense to you? If so, get in touch!

Changing times

I recently read an article on ZDNet which was talking about the new ChatGPT search and how Google Ads is going to be less relevant in future. The takeaway from that is that your organic web presence is going to be even more relevant, if paying for search placement becomes less effective. I did a test with the new ChatGPT search and “Magician for Kids parties in Durban” and “Top 10 Outdoor Party Venues in Durban” both return sites that I own at the top, organically – thankfully due to our SEO.

The article didn’t mention it in but I think social media pages (Facebook, Instagram, etc) are going to be even more important in the future – but you don’t have control over those. Owning your own content and related content is the most important thing in my opinion.

PS: check out the AI Enhanced super commercial version of this blog post here: https://devsoft.co.za/blog

SmartPoi AI Podcast Episode 1

The Overview episode:

This episode was generated by AI!

How To:

I used Google NotebookLM for this, and uploaded all of my blog posts and web pages relating to the SmartPoi and Magic Poi projects. Check out this link to learn more (it’s free and really easy to do) https://www.forbes.com/sites/rogerdooley/2024/10/04/how-to-create-an-ai-podcast-about-anything-in-seconds-with-notebooklm/

Is it any good?

Well.. It kind of mixed everything up and confused some things but that is possibly not helped by the input. I did like the format, though, and I’m used to robot voices – check out the hacker news recap for a great example.

Also, who doesn’t like flattery? These guys went on for +10 mins about how cool my project is!