Design Services

Logo & corporate stationery design

Project shown is Fox IT

Design Services

Logo, business cards, website & brand guidelines

Project shown is Jarred Consulting

Website Design

User friendly websites

Project shown is Firstford

Build your website

I build most websites using WordPress*, an open source content management system, so that you have full control over your website content. Every website I build is, by default, optimised for search engines and built to be responsive.

Design your branding

I can manage the branding process for your business, whether it be a new logo, or a full set of branded business stationery and digital designs. You may want a cohesive set of branded social media accounts, or a design for your fleet of vehicles.

Market your business

Your new website will only feel like a good return on investment if you get enquiries or orders from it. It’s a good idea to budget for at least 2-3 months SEO marketing to build your search traffic.

Contact me to discuss your next creative project

Contact me →

Recent posts

Wordpress and design blog posts


Flutter

Gradle Exception and setting the Flutter SDK path

When setting up Firebase to use with a Flutter app you will need to find your apps application id and get an SHA1 certificate. During this process you will need to open the build.gradle file of your Flutter project in Android Studio and you may need to find and set the flutter SDK path. You may encounter some problems if you haven’t done this before, and so I will cover a few of those issues, and how to deal with them in this post.

If you haven’t done this before open your app project in Android Studio. If you see a yellow message across the top of the main windows about installing the Flutter Extension, then go ahead and install it, you’ll also need to restart Android Studio.

Once you’ve opened your Gradle file you may notice a Gradle Exception in it saying something like “Gradle exception flutter SDK not found”. To fix this, read on.

Android Studio settings

  1. Press Ctrl + Alt + S when you are in Android Studio, and the Settings Window will open
  2. Select Languages & Frameworks > Flutter and enter the Flutter SDK path. Read below to find out how to find out the Flutter SDK path.
setting the flutter sdk path in Android Studio

How to find the Flutter SDK path using Flutter doctor

This is the place that you unzipped the Flutter SDK download zip to. The best way to find it is to open your Terminal / Command / Git Bash window and type:

 flutter doctor - v

In the first few lines of the output returned will be a line starting Flutter version x.x.x and then a folder path – that is the path you want to copy, and then enter in the Flutter SDK path textbox in the Settings Window above in Android Studio. Click OK to save that and the Settings window will close – that’s how you change the Flutter SDK path in Android Studio.

If you can’t see anything called Tasks in the Gradle window, open settings in Android Studio again, but this time select Experimental Features from the left hand list and then uncheck Do not build Gradle task list during Gradle sync. Click OK and then sync the project.

The exceptions should disappear and if you open Android Studio settings the SDK path should now be visible as shown in this screenshot, with the Flutter SDK version appearing after a moment.

change flutter sdk path in android studio

Now that you have finished setting up the SDK path, and if you are new to Flutter you may find this getting started with Flutter post handy.

how to debug react js in chrome dev tools
React JS

How to debug React in Chrome

If you are new to building websites, writing, code or just React JS you will need to know how to debug your code. This post shows you the basics on how to debug JavaScript using the Chrome Developer Tools.

Open VS Code (or your editor of choice) and run your code – npm start – so that you have your website running and ready to debug. I use Chrome for all of my development and debugging, and mostly work on a PC, so I’ll focus on that browser only. Once you are in Chrome, press Ctrl + Shift + I (PC) or Option + Shift + I (Mac). To be more precise, hold down the Ctrl key, and at the same time hold down the Shift key, and at the same time hold down the I key (I for India). You’ll see the Chrome Developer Tools open open up in your browser, either next to your website, or below it, depending on your browser settings. Here’s what mine looks like, with the dev tools show to the right hand side:

debug react using the chrome developer tools

Whilst I am focused on how to debug React in Chrome in this blog post, all of the debug techniques described here can be used to learn how to debug for any Javascript based website. The website shown in all of the images are from my Using Bootstrap with React Forms post.

What to use the Chrome dev tools for

Most of the time I use the Chrome dev tools to :

  • Inspect elements in the browser using the Chrome element inspector
  • Instantly switch css styles on and off
  • View debug messages in the console
  • Put breakpoints in the JavaScript to help me develop and debug
  • Find any JavaScript errors

Inspect elements in the browser using the Chrome Element Inspector

With the dev tools open, click the Elements tab at the top of the Dev Tools area, then click the icon which is top left that shows an arrow in a square – once this has been clicked you can move your mouse over your website and clicking on an element will allow you to inspect it, rather than interact with it. You’ll see the relevant markup highlighted in the html, and you’ll see the appropriate css shown also. I often use this to switch style properties on and off from css classes to check the styling of an element. This short screen recording shows me using the developer tools to do just that.

Using debug messages in the Chrome debug console

Another way to debug React Js in Chrome is to use console log messages in your JavaScript to see a message in the console window in Chrome Developer Tools. This is a quick and dirty way to see what’s happening in what order, or to see how a value changes through your code.

How to debug JavaScript in Chrome using breakpoints

Breakpoints provide a similar benefit to using console messages but are more useful, because whenever a breakpoint has been hit, you can view the Scope at that moment. By Scope, you can see the value of any variable that is ‘in scope’ at that point.

Chrome have a really useful tutorial about the Chrome dev tools too which I’d recommend reading.

Debug a React Native App

If you are working in react Native, rather than React JS, then you’ll want some debug information specific to that, as it is slightly different.

SEO

How to use SEO keyword tools for keyword research

I see a lot of people online asking about keyword research asking questions like ‘How do I find good keywords to get more traffic to my website?’ or ‘how do I use googles keywords tools’ There are so many SEO keyword research tools out there and many have some free tools within them available, google keywords tools being one popular option. However there’s also a lot of common sense involved, and a few search techniques that it’s worth learning to help you find a good list of keywords to try and generate more traffic to your blog or website.

This post is intended as a getting started with SEO post, a “How to do keyword research for SEO – a beginner’s guide” if you like. It will help you if you are just getting started with your affiliate website, or if you have a business and want to get more traffic to your website. In this post I hope to give a good introduction to researching SEO keywords using mostly free tools.

Use Google Keywords tools to research keywords

A really quick and easy way to gather some good keywords to target is to use the hints Google gives you when you start typing in the search bar. For instance, if we were looking to attract new users to our website who were looking for “running sports watches” then I’d start my research by going to google.com. Start typing “running sports watches” and you’ll notice that as you type, Google starts creating a list of matches that become more and more accurate the more you type. This list is made up of terms that people are already searching for, so Google is giving you free data about popular search terms. If a keyword is in this hint list, then it must have decent ‘volume‘. If you’re new to SEO you may not know what I mean by ‘volume‘. In this context it means the volume of searches that a particular keyword receives each month. The ultimate goal of SEO keyword research is to find search terms with high volume and low competitiveness – that is a high volume of monthly searches, and a low number of websites providing the relevant information to the user.

As well as Google you can also use Quora, Reddit and YouTube to do some keyword research. Go to Quora.com and start typing “best sports watches” in the search box and again you see a list of possible search terms appear showing you popular search terms. This may also direct you to pre-existing groups discussing your topic and reading and participating in these groups can provide a valuable source of information for your keyword research, simply by seeing what information people are trying to find.

Once you’ve completed that bit of general research you should have a fairly long and general list of keywords relating to your particular subject, or niche as it’s referred to in relation to an affiliate website. Next you can start to use the SEO tools available, many of which have some tools available to use for free.

Other free SEO keyword tools

Here are some other tools and techniques I use to research keywords for SEO (in no particular order).

  1. As above use specific niche forums for keyword research – and also use forums to do with keyword research (https://moz.com/community/q/). For instance if I was looking for gardening keywords I’d use gardening forums for my research in either Quora.com or Reddit.com.
  2. Further to what I’ve written above about using Google search box hints, there’s a handy website which takes this a little further and ultimately speeds up this process – https://youautocompleteme.io/. This will give you a page of keywords which you know have some kind of volume that’s worth targeting, organised in alphabetic order, and presented in a way that makes them easy to copy, ready to paste into other tools.
  3. Use Google Ads Keyword Planner. Despite the name you don’t need to be running any ads, or spending any money to use this tool. You enter your search term for instance “workout watches” and this keyword tool will show you the data for this term. It will also provide you with a long list of related keywords and the data for those too. The trick here is then to find a decent sweet spot where the volume is high enough to make targeting that keyword worthwhile, while the competitiveness low enough that you’ll have some success targeting it. Use the filters to limit your results only to those with Medium competition. Then work your way through the table of keywords until the volume is high enough for your needs – any keyword sitting at that point is your sweet spot. However you can see the volume figures given are very broad, so read on to find which tools give a specific search volume figure helping you target the right keywords.
seo keyword research using google keyword planner

There is also a Forecast section which shows you predicted search traffic likely number of impressions and click throughs.

4. Install one of several SEO browser extensions directly into Chrome or Firefox. You could use keywordseverywhere.com/, also the Surfer SEO browser extension for finding keyword volumes.

5. Semrush have a lovely tool available under their free plan, and I particularly like the Keyword Magic Tool. Enter your main search term and the tool then returns a list of related search terms again with volume, competitiveness, and other data. With a full range of filtering and sorting available it doesn’t take long to turn this into a really handy list of keywords to target. The only downside here is there is no easy way to save this list, as any export functionality or keyword management is only available on a paid plan. Having said that the paid plan does contain tons of value though so may be worth using the free trial to try it all out.

semrush free seo keyword magic tool

Paid keyword tools

In most of the paid SEO keyword tools you’ll get access to detailed volume and competitive data about each term, broken down by country and presented in a slightly different way in each tool. In the paid services number of keywords is unlimited, you can use all the benefits of the keyword management tool.

Moz.com offers mostly paid services but a few really useful free tools once you’ve signed up (no charge or credit card required.) This includes the keyword explorer which is the same as you get on the paid plan but you are limited to 10 searches per month – use it wisely! One of the things I particularly like about this tool is the measure of intent – i.e it gives you an indication of how worthwhile it thinks you putting your time into targeting that keyword is.

Semrush is pricy but also has some really special tools, the magic keyword tool is one I’ve already mentioned. It also has a fantastic Keyword Manager which lets you categorise and store your keywords. It has a content suggestion tool, and a nice keywords tracker tool.

Ahrefs has a lovely summary view of your website traffic, keywords, and backlinks and it tends to be my goto for watching my website pick up new keywords each day. It definitely seems to be the one that is updated the most frequently.

Wordtracker – I really like the keyword research tools in here and for about $30 per month I feel like it’s a really good entry level tool if you haven’t got the budget for Semrush or Ahrefs paid plans. I have done my keyword research in here and used the Lists section to save and organise keywords I want to target. It is worth noting that I have unfortunately found Wordtracker to be fairly buggy, but as it’s the only tool so far that gives me value for less than $100 per month I’ve stuck with for a while. In the image below you can see that I’ve done a keyword search for the phrase ‘google analytics api‘ using Wordtracker. I’m shown a list of results of related search terms and the search volume, competitiveness, and IAAT for each. IAAT is described as ‘In Anchor And Title – A count of webpages on which the keyword appears in both the title tag and the text of a backlink‘. So if you were to choose one of those phrases, write a blog post with that phrase in the title, and get just one backlink with the keyphrase in the backlink text, you will probably place really highly for that search term. Whilst none of those volumes are massive, once you’ve written 20 or 30 blogposts where each post attacts good traffic from several keywords with a volume of 100 or so searches a month, the overall traffic volume to your website can become large enough to start making money from advertising. I like the simplicity of these results in Wordtracker.

Wordtracker keyword research tools

Other valuable SEO resources

Neil Patel’s UberSuggest is very much worth a look, as are many of his blog posts, which are really informative. Not only does he offer fantastic insights into many SEO and keyword research topics he also has several free SEO tools which can be worth using depending on your exact needs.

Google search console (one of several google keywords tools) – look at the impressions. This is telling what people are searching for already, and somewhere buried deep in those results sits your website. Obviously this tip is only useful if you already have a website and if the niche your researching already has some vague link to your site – it can be a real gold mine.

What’s the point of all this research!

Ultimately we are doing all of this research to find some SEO keywords which have a good volume of traffic potential and a relatively low amount of existing competition, or to put it another way the keywords which are most likely to give you a return for your efforts. And the point of doing that is to monetize your website in some way, whether it be gaining new customers for your business, selling more products from your ecommerce website, or making more by showing more ads on your affiliate website. To make money from a website you must have traffic.

To summarise

There are so many SEO keyword research tools on offer – Google keywords tools, Moz.com Semrush, Ahrefs etc – and each one has it’s own strength. I’d definitely recommend trying each of them out on a trial month before you settle on one, and learn which bit of which tool works well for your needs.


flutter bottom navigation bar
Flutter

Flutter bottom navigation bar example

After searching google for examples of Flutter navigation, more specifically the bottom navigation bar I was a bit stumped. Several of the examples I found would show the bottom navigation bar on one page but not persist it across all pages, and that wasn’t what I was after. Eventually I stumbled upon this excellent article by Andrea Bizzotto not only showing me how to persist the bottom navigation bar on every page, but also how to combine this with a stack navigator on each page – fantastic!

After working through his bottom navigation example and getting it working for me locally, I started to try and work out how to adapt this to build an app I had in mind (hopefully I’ll be posting about the launch of that soon!). It would need a bottom navigation bar, a stack navigator on at least one of those pages, but then a single page on at least one of the others. So I adapted Andrea’s code to do just that and you can find it here on github.

If you want to understand the changes I had to make then here are the code changes step by step – I started by forking his repo but found it wouldn’t run and I had to add this to pubspec.yaml:

environment:  sdk: ">=2.7.0 <3.0.0"

In order to update this code to handle some pages with a stack and some as a standalone page I made the following changes.

Combine a tab navigator with the bottom navigation bar

First of all a new property needed to be added to the TabNavigator class in tab_navigator.dart, so that as well as the navigatorKey and the tabItem properties, there’s a new one called stacked, which is a boolean. So the top of the TabNavigator class now looked like this:

class TabNavigator extends StatelessWidget {
  TabNavigator({this.navigatorKey, this.tabItem, this.stacked});
  final GlobalKey<NavigatorState> navigatorKey;
  final TabItem tabItem;
  final bool stacked;

  void _push(BuildContext context, {int materialIndex: 500}) {
    var routeBuilders = _routeBuilders(context, materialIndex: materialIndex);
    ....
    ....

The build method in tab_navigator.dart also needed to be updated so that if a page is a ‘stacked’ page, the routeBuilders method is still called, but if not, the SinglePage is returned.

@override
Widget build(BuildContext context) {
    final routeBuilders = _routeBuilders(context);
    return Navigator(
        key: navigatorKey,
        initialRoute: TabNavigatorRoutes.root,
        onGenerateRoute: (routeSettings) {
          if (stacked) {
            return MaterialPageRoute(
              builder: (context) {
                return routeBuilders[routeSettings.name](context);
              },
            );
          }

          return MaterialPageRoute(
            builder: (context) => SinglePage(
              color: activeTabColor[tabItem],
              title: tabName[tabItem],
              materialIndex: 0,
            ),
          );
        });
  }

Add new file single_page.dart containing this code:

import 'package:flutter/material.dart';

class SinglePage extends StatelessWidget {
  SinglePage({this.color, this.title, this.materialIndex: 500});
  final MaterialColor color;
  final String title;
  final int materialIndex;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: color,
        title: Text(
          '$title[$materialIndex]',
        ),
      ),
      body: Container(
        color: color[materialIndex],
        child: Center(
            child: Text(
          "I am a single page.",
          style: TextStyle(fontWeight: FontWeight.bold, fontSize: 28),
        )),
      ),
    );
  }
}

Finally add a reference to that page in tab_navigator.dart:

import 'package:nested_navigation_demo_flutter/single_page.dart';

Next I needed to modify app.dart, to identify which page would be a single page, and which would be stacked.

Add new property to the _buildOffstageNavigator method, so that we can pass in whether each page has a stack or not.

Widget _buildOffstageNavigator(TabItem tabItem, bool isStacked) {
    return Offstage(
      offstage: _currentTab != tabItem,
      child: TabNavigator(
        navigatorKey: _navigatorKeys[tabItem],
        tabItem: tabItem,
        stacked: isStacked,
      ),
    );
  }

Once that change had been made I had to change the code where the _buildOffstageNavigator method is called to include the new boolean property. This is in the build method of Appstate.dart

....
child: Scaffold(
        body: Stack(children: <Widget>[
          _buildOffstageNavigator(TabItem.red, true),
          _buildOffstageNavigator(TabItem.green, false),
          _buildOffstageNavigator(TabItem.blue, true),
        ]),
        bottomNavigationBar: BottomNavigation(
          currentTab: _currentTab,
          onSelectTab: _selectTab,
        ),
      ),
        
        .......

Once all of those changes are made you should have an app that works like you can see in this video, with a Flutter bottom navigation bar on every page, with two of the main pages showing stack navigation and one just a single page.

So that’s a fully working Flutter bottom navigation bar example. You may also be interested in a blog post I wrote recently about my experience installing and setting up Flutter on my PC, be sure to read it if you are just starting out.