Belle-Ve Bricks

Tailored Creations,
Unforgettable Impressions.

selling at fairs double u
selling at fairs double u

Selling LEGO® At LEGO® Fairs, Double U Bricks (Interview Guide)

Trusted by Over 392 Distinctive Clients
Custom model
Bring Your Idea to Life

The internet brings amazing opportunities and has exploded the online market base with new sellers, cheaper prices, and products being more accessible to you and me, but it’s not all good… where have the days gone where if you wanted to buy something you had to go to a shop, market or fair?

You remember right, where you had to actually interact with other people and have some kind of social interaction to find and buy what you wanted, LEGO® fairs are no exception to this.

Typically if you want to buy LEGO® most people go to Amazon, BrickLink, LEGO, or eBay because it’s cheaper and easier (mostly), but don’t you miss even just speaking to someone for 5 minutes about the hobby you live for? Wouter Jacobs, the owner of Double U Bricks is what I would like to call a LEGO® entrepreneur… Wouter hasn’t left any stone unturned when it comes to selling LEGO!

If you haven’t read the other interview we did with him on the topic of his success selling LEGO® on Bricklink then you really should do it straight after you read this one – How Double U Bricks Became A Bricklink Success Story.

How did you get into selling LEGO® at LEGO® fairs?

It was back 3 years ago when I first went to a LEGO® toy fair, you have quite a lot of them in Belgium. I was collecting the comic con specials and saw all the vendors with their different booths, it was really interesting to see them selling all the pieces and the retired sets.

So I started buying some special USA-only polybags, and the ones I had in double I stocked away… after a while, I had so much of them that I decided to sell them at LEGO® fairs… the rest is history.

How long have you been doing LEGO® fairs?

It has to be 2 years now I think. Basically, it is a small community and all of the sellers know each other, which also makes it more fun. LEGO® fairs usually last a whole weekend, so on a Saturday evening, you all sit together and have a nice meal and some drinks.

What does your setup look like at LEGO® fairs?

Well, I guess a picture says more than 1000 Words.

I have 2 towers of about 250 different minifigs, with themes like Superheroes, Star Wars, and Disney. I have dividers and smaller boxes for parts, so people can look for plants, streetlights, animals, mailboxes, train tracks, etc all for their city. I also specialize in harder and exclusive sets like comic cons or USA exclusives, so I always have a bunch of those at my booth.

Most vendors specialize in a certain theme. There are other sellers that sell older and retired star wars sets for example. It would be a bit ridiculous to also start selling star wars as they are doing that. It would be no fun for the customers and no fun for the sellers as you are only competing with each other.

That is also the reason why I am now more into selling the Comic cons specials and the parts and animals, to have more diversity at the LEGO® fairs.

Do you prefer selling at the LEGO® fairs or on BrickLink? Why is this?

FAIRS!! For sure, because of the connection you have with your customers, the social interaction, and the laugh with other sellers.

What stock do you sell at the LEGO® fairs?

Comic cons from 2014 – 2019
Different animals
Different minifigs
Mini Build-your-own minifig stand
Parts to expand your city

What’s the biggest fair that you have attended?

Brickmania Antwerp is always in November. Around 10.000 people attend this LEGO® fair.
It is a great fair, but there is also one in the city of Geel called Bricks and More and they have a fantastic organization. It has the best MOCs in the whole of Benelux (my opinion)!

Do you have any upcoming fairs where we can come and meet you?
Where and when are they?

Normally I would go to Brickmania 2020 in November, the Antwerp expo on 30th November/1st December (www.brickmania.be), and Brick & More (www.bricks-&-more.be) in Geel on 14th/15th November.

What advice would you give anyone who is thinking of starting to sell at a fair?

Be unique, and work out a business model that no one or only a few people have.
Source and align with people all over the world to get unique items or bulk items at good prices.
And make sure you have a lot of free time because preparing for LEGO® fairs takes a lot of time 🙂

<div class="badge-base LI-profile-badge" data-locale="en_US" data-size="large" data-theme="dark" data-type="HORIZONTAL" data-vanity="ferdi-vol" data-version="v1"><a class="badge-base__link LI-simple-link" href="https://www.linkedin.com/in/%E2%9C%85-ferdi-vol-corporate-gifts/?trk=profile-badge"></a></div>
/* Auto generated, hash = 5dceu9kevqjdyuy2uw1atqrsu */
//TODO: Break this file down so that we can actually unit test it.
(function(window) {
  /**
  * Renders all unrendred LinkedIn Badges on the page
  */
  window.LIRenderAll = function () {
    var CALLBACK_NAME     = 'LIBadgeCallback', //Must match callback on helpers.js
        BADGE_NAMES       = '.LI-profile-badge, .LI-entity-badge',
        // TODO -- tracking param for other badge types
        TRACKING_PARAM    = 'profile-badge',
        responsesReceived = 0, //Keeps track of number of responses recieved for proper cleanup when finished
        expectedResponses = 0, //Keeps track of number of responses to expect
        scripts           = [ ], //Keeps track of scripts added for proper cleanup when finished
        childScripts      = {}, //Keeps track of child scripts to render
        badges            = Array.prototype.slice.call(document.querySelectorAll(BADGE_NAMES));

    var i, len, badge, rendered;
    for (i = 0, len = badges.length;  i < len; i++) {
      badge    = badges[i];
      rendered =  badge.getAttribute('data-rendered');
      if (!rendered) {
        expectedResponses++;
        badge.setAttribute('data-rendered', true);
        renderBadge(badge);
      }
    }

    function isCNDomain() {
      if (typeof window !== "undefined") {
        var hostName = window.location && window.location.hostname ||  '';
        return (/linkedin(-ei)?.cn$/).test(hostName);
      }

      return false;
    }

    function generateUrl(isEI) {
      var domainPrefix = isEI ? 'https://badges.linkedin-ei' : 'https://badges.linkedin';
      if (isCNDomain()) {
        return domainPrefix + ".cn/";
      }

      return domainPrefix + ".com/";
    }

    function getBadgeKeyQueryParams(badge) {
      return Array.prototype.slice.call(badge.attributes).filter(function (attr) {
        return attr.name.lastIndexOf('data-key-', 0) !== -1;
      }).map(function (attr) {
        // Most browsers automatically lowercase the attribute name when its being read
        // We are calling lowercase on it again to ensure consistency for any browsers that are lagging behind.
        return encodeURIComponent(attr.name.replace('data-', '').toLowerCase()) + '=' + encodeURIComponent(attr.value);
      });
    }

    /*
    * Renders a single badge on the page
    * @param badge: div element of badge to render
    */
    function renderBadge(badge) {
      var size       = badge.getAttribute('data-size'),
          locale     = badge.getAttribute('data-locale'),
          type       = badge.getAttribute('data-type'),
          theme      = badge.getAttribute('data-theme'),
          vanity     = badge.getAttribute('data-vanity'),
          version    = badge.getAttribute('data-version'),
          isEI       = badge.hasAttribute('data-ei'),
          entity     = badge.getAttribute('data-entity'),
          isCreatePage = badge.hasAttribute('data-iscreate'),
          uid        = Math.round(1000000 * Math.random()),
          baseUrl = generateUrl(isEI),
          queryParams = [
            'locale=' + encodeURIComponent(locale),
            'badgetype=' + encodeURIComponent(type),
            'badgetheme=' + encodeURIComponent(theme),
            'uid=' + encodeURIComponent(uid),
            'version=' + encodeURIComponent(version)
          ],
          url;

      if (version === 'v2') {
        baseUrl += 'view';
        queryParams.push('badgesize=' + encodeURIComponent(size));
        queryParams.push('entity=' + encodeURIComponent(entity));
        queryParams = queryParams.concat(getBadgeKeyQueryParams(badge));
      } else {
        baseUrl += 'profile';
        queryParams.push('maxsize=' + encodeURIComponent(size));
        queryParams.push('trk=' + encodeURIComponent(TRACKING_PARAM));
        queryParams.push('vanityname=' + encodeURIComponent(vanity));
      }

      if (isCreatePage) {
        queryParams.push('fromCreate=true');
      }

      url = baseUrl + '?' + queryParams.join('&');
      badge.setAttribute('data-uid' , uid);
      jsonp(url); //Calls responseHandler when done
    }

    /**
    * Handles a response from the server. Finds badge matching badgeUid and inserts badgeHtml there
    * @param badgeHtml: String representing contents of the badge
    * @param badgeUid: UID of the badge to target
    **/
    function responseHandler(badgeHtml, badgeUid) {
      responsesReceived ++;

      var i, badge, uid, isCreate;
      var defaultWidth = 330 // max possible width
      var defaultHeight = 300 // max possible height

      for (i = 0, len = badges.length; i < len; i++) {
        badge = badges[i];
        // isCreate needed to prevent reloading artdeco script tag
        isCreate = badge.getAttribute('data-iscreate');
        uid   = parseInt(badge.getAttribute('data-uid'), 10);
        if (uid === badgeUid) {
          var badgeMarkup = `<body>${badgeHtml}</body>`
          var iframe = document.createElement('iframe');
          iframe.onload = function() {
            var iframeBody = iframe.contentWindow.document.body;
            // 5 px buffer to avoid the badge border being cut off.
            iframe.setAttribute('height', (iframeBody.scrollHeight || defaultHeight) + 5);
            iframe.setAttribute('width', (iframeBody.scrollWidth || defaultWidth) + 5);
          };
          iframe.setAttribute('frameBorder', '0');
          iframe.style.display = 'block';
          badge.appendChild(iframe);
          iframe.contentWindow.document.open();
          iframe.contentWindow.document.write(badgeMarkup);
          iframe.contentWindow.document.close();
          replaceScriptTags(badge, isCreate);
        }
      }
      tryClean();
    }

  // These functions are needed because badge markup is added via innerHtml property which does not run script tags
  function replaceScriptTags(node, isCreate) {
    if (shouldReplaceNode(node, isCreate)) {
      node.parentNode.replaceChild(cloneScriptNode(node), node);
      childScripts[node.src] = true;
    } else {
      var i = 0,
          children = node.childNodes;
      while (i < children.length) {
        replaceScriptTags(children[i++], isCreate);
      }
    }
    return node;
  }

  function shouldReplaceNode(node, isCreate) {
    return isScriptNode(node) && !childScripts[node.src] && (!isCreate || (isCreate && !node.getAttribute('data-isartdeco')));
  }

  function isScriptNode(node) {
    return node.tagName === 'SCRIPT';
  }

  function cloneScriptNode(node){
    var script  = document.createElement("script");
    for( var i = node.attributes.length-1; i >= 0; i-- ) {
      script.setAttribute( node.attributes[i].name, node.attributes[i].value );
    }
    return script;
  }

    // Gets all incoming responses
    window[CALLBACK_NAME] = responseHandler;

    /**
    * Tries to clean added tags
    **/
    function tryClean() {
      //Clean up after all requests are done..
      //Accounts for people including script more than once
      var done = (responsesReceived >= expectedResponses && expectedResponses > 0) || responsesReceived >= badges.length;
      if (done) {
        delete window[CALLBACK_NAME];

        // remove all script tags
        scripts.map(function(script){
          document.body.removeChild(script);
        });

      }
    }

    /*
    * Makes Jsonp request, responses handles by CALLBACK_NAME
    * @param url String: url of server to make request to
    */
    function jsonp(url) {
      var script = document.createElement('script');
      script.src = url;
      scripts.push(script);
      document.body.appendChild(script);
    }
  };

  if (document.readyState === 'complete') {
    window.LIRenderAll();
  } else {
    window.addEventListener('load', window.LIRenderAll, false);
  }

})(window);
Popular Posts