Custom Brick Model Sets Made to Order, Packaged and Shipped Worldwide

This is the complete Belle-Ve Bricks service. You bring the idea, we handle everything else. Design, supplying the parts, building instructions, packaging, and delivery to wherever in the world you need it to go. Whether you need one model or a hundred thousand you can expect to receive a top tier service and custom brick model at the end!

Here’s exactly what’s involved and how to get started.

What this service covers

Every project starts with your brief and ends with a finished, ready-to-build model arriving at your door. Everything in between is handled by us. We design the model digitally from your reference material, render it for your approval, source every part needed to build it, pack it into a box with building instructions included, and ship it to you with tracking and pre-paid customs where applicable.

This service covers every type of subject we work with. Buildings and architectural models, branded display pieces, vehicles and products, sculptures, mascots, pet portraits, and anything else you can brief us on. If it can be designed in brick, we can supply it as a complete ready-to-build set.

What you receive

Every order, regardless of size, includes the same core elements. The model is designed specifically around your brief with unlimited revisions until you’re satisfied with the digital render. Once you’ve approved the design, we source all the parts and pack every box individually with everything needed to complete the build. Nothing arrives without building instructions, and you choose the format those instructions take.

Digital building instructions

The digital instructions option is the more eco-friendly choice and the one most clients go for. Each box contains a business card-sized card with a photo of the finished model on one side and a QR code on the other that takes the builder directly to the full step-by-step instructions online. We host these at no additional cost. Less packaging, less waste, and the instructions are always accessible from any device.

Printed instruction booklets

If you’d prefer a physical booklet, we produce high quality printed instructions that sit alongside the parts in the box. The booklet includes the same step-by-step build sequence as the digital version, presented in a format that feels like a professional finished product. Both options are available and the choice is yours at the quoting stage.

Packaging options

For the box itself, you choose between plain cardboard and fully custom printed boxes. The custom printed option is designed in house to a professional standard. We can include your branding, logo or whatever else you would like on the outside of the box, our experience designers can design anything you want and we will produce it. Custom box design is confirmed at the quoting stage and the production runs in parallel with parts sourcing, so the boxes and the parts are ready at the same time with no delays at the end of the project.

Who this service is for

The complete supply service suits anyone who wants a finished, packaged, ready-to-gift product rather than just a design file. That covers a wide range of buyers, but the most common are corporate clients commissioning gifts for teams, clients, or events, and individuals buying a bespoke model for a specific person or occasion.

On the corporate side, this service handles everything from a single desk piece for a high-value client to a bulk production run of thousands of identical sets for a product launch or promotional campaign. The design is done once and can be reproduced at any quantity. On the personal side, it’s the right choice when you want to hand someone a complete, beautifully packaged model rather than a box of parts with a printout.

If you want the design without the supply, we offer that as a separate design-only service. If your project involves large scale display models or sculptures rather than packaged sets, our large scale sculpture service covers that specifically.

A project worth mentioning

One of our most memorable commissions came from a client who wanted to mark a business partner’s birthday with something that actually meant something. They asked us to build a brick model of the factory the two of them had spent years building their business around. Working from reference photos of the building, we designed and produced a detailed scale model of the site, packed it, and delivered it in time for the occasion. The finished model didn’t just capture the building. It captured what that building represented to our client.

That’s the kind of commission this service is built for. Something specific, personal, and impossible to replicate with anything from a catalogue.

How the process works

The process is straightforward from your side. We handle the complexity behind the scenes so that working with us feels simple and predictable at every stage.

1. You send us your brief

Tell us what you want built, what it’s for, and share any reference images you have. There’s no obligation at this stage. We’ll review what you’ve sent and come back to you with next steps. If we need more information before we can quote accurately, we’ll suggest a short call to make sure we’ve understood your requirements correctly before putting anything together.

2. We send you a detailed quote

Once we have everything we need, we put together a full quote covering the model design, parts, instructions, packaging, and delivery. You’ll know exactly what you’re paying for before committing to anything. No surprises and no costs that appear later.

3. You approve the digital render

Before a single part is sourced, you see a digital render of the finished model. You can request changes at this stage and we don’t move forward until you’re completely satisfied with the design. This is the most important step in the process because it ensures the finished model matches your expectations before production begins.

4. We build and pack in parallel

Once the design is signed off, we source all the parts and, if you’ve chosen custom printed boxes, begin the box artwork at the same time. Both happen simultaneously so everything comes together at the end of the project without unnecessary delays.

5. Delivery anywhere in the world

Every order is carefully packed and shipped with tracking. We deliver worldwide and include shipping costs in your quote upfront, so what you’re quoted is what you pay. For international orders, customs duties are pre-paid where possible to avoid delays at the border.

What does it cost?

Pricing depends on the model, the quantity, and the packaging options you choose. Every commission is quoted individually because every project is different, but here’s a realistic guide to what different types of order tend to cost.

Personal commissions and smaller individual pieces start from £120 / $150. Corporate builds, architectural models, and more detailed pieces start from £395 / $500. Bulk production runs are priced on application based on the model design, the quantity required, and the packaging specification. In every case, you’ll have a full itemised quote before committing to anything.

Frequently asked questions

Is there a minimum order quantity?

No. You can order a single model or a production run of thousands. The process and the standard are the same regardless of quantity.

Can we have the model built for us rather than building it ourselves?

Yes. If you’d like us to build the model rather than supplying it as a ready-to-build set, that’s an option we can include in your quote. Most clients prefer to receive the set and build it themselves, but the choice is yours.

Do you use genuine bricks?

We build primarily with genuine, brand-name bricks. Where a project calls for it, we also work with a trusted supplier of high-quality compatible bricks. Either way, the standard of the finished model remains the same.

Can you include custom printed parts or branded bricks?

Yes. We offer custom brick printing as part of a commission or as a standalone service. If you want a specific part to carry your logo, a tile printed with an image, or any other custom graphic we can do this using alternate brand bricks and parts.

How long does it take?

Typical turnaround from design approval to delivery is 4 to 6 weeks. More complex builds and larger bulk orders take longer. If you have a tight deadline we will do everything we can to make it work, just tell us upfront and we’ll give you an honest answer about what’s achievable rather than overpromising and adjusting later.

How far in advance should I get in touch?

The earlier the better, particularly for bulk orders or projects with a firm delivery date. The more time you can give us the better!

Do you ship internationally?

Yes, worldwide. Shipping is included in your quote and customs duties are pre-paid where possible to avoid delays at borders.

Ready to get your custom brick model set made?

If you’ve got an idea, get in touch and we’ll take it from there. There’s no obligation at the enquiry stage and we’ll come back to you with a clear quote once we understand what you need.

Personal commissions from £120 / $150. Corporate builds from £395 / $500. Bulk orders priced on application. Worldwide delivery. Every model approved by you before we build.

Get your custom brick model set made. Talk to Belle-Ve Bricks today.

Not ready to enquire yet? Explore our design-only service or browse all our services to find the right fit for your project.

<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