Belle-Ve Bricks

Custom Creations, Unforgettable Impressions.

Seinfeld
Seinfeld

LEGO IDEAS proposed Seinfeld 30th Anniversary Set

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

Before ‘Friends’ there was ‘Seinfeld’: the TV show that was famously ‘about nothing’ and ran for 9 seasons on the NBC network during the 90s. The loose premise was that we would see how New York stand-up Jerry Seinfeld (playing a version of himself) gathers material for his act through the misadventures he has with his gang of regular acquaintances.

There was Jerry’s best friend and eternal loser George Costanza, ex-girlfriend turned platonic ideal, Elaine Benes, and his crazy next-door neighbour Kramer, a “hipster doofus” who was notorious for cooking up hare-brained get-rich-quick schemes (a Pizza restaurant where customers make their own pizzas!).

They were an enduring Fab Four that made its mark on popular culture, but more so in the States than in the U.K. where it was unceremoniously dumped in late night schedules. But a highly devoted following grew over the years and many of its catchphrase have entered the modern lexicon (“You double-dipped the chip” and “not that there’s anything wrong with it”).

What’s the Deal With Jerry’s Stand-Up Club?

With LEGO® Ideas models for ‘Friends’ with its Central Perk set (21319) and apartment from ‘The Big Bang Theory’ (21302) becoming big hits, with the latter already a retired model and the former now labelled ‘Hard to find’, it is welcome news indeed to this blogger and confirmed Seinfeld-nerd, that in celebration of the sitcom’s 30th anniversary this year, Brent Waller’s fan submission, using 900 pieces, has been approved and will be adapted by an expert LEGO® builder sometime in 2021.

The prototype images offer us tantalising glimpses of the potential of the set with its expansive recreation of Jerry’s Upper West Side Manhattan apartment, including bathroom and hall space from which Kramer can launch himself into Jerry’s domain in one of his famous, studio audience-pleasing entrances.

At a first glance, Waller seems to have nailed the key visual elements of Jerry’s apartment: the couch, the breakfast bar, the overall half-octagonal design. However, the missing bicycle mounted on Jerry’s wall, his dormant PC (which we only ever saw him use in one episode out of 180) and beloved Superman statue could all do with being included. His collection of VHS tapes needs curating as well.

Plus the couch could use a little finesse and no I’m not talking about the pee stain left by Poppy, although a reversible cushion might be a good idea there, Jerry – just don’t tell George’s father!

It looks like LEGO® plan to expand the proposed roster of five mini-figures that included Jerry’s long-time nemesis (or personal Lex Luthor), neighbour and mailman, Newman, to a more representative rogue’s gallery of the show’s returning characters.

It looks like George’s parents, Estelle and Frank Costanza have been added (with aluminium Festivus pole to boot), as have fan favourites like The Soup Nazi, David ‘8 Ball’ Puddy and the show’s co-creator Larry David, but what about Mom and Pop Seinfeld, Uncle (‘Hello!’) Leo, or even Bania? “It’s gold Jerry, gold!”

The league of Seinfeld’s revolving characters is an prodigious one that could warrant a few series of mini figures alone, but what of the proposed figures themselves? I feel that Jerry could use some proper sneakers and the hair pieces for both Kramer and Elaine need a little teasing. George could be a little more rotund as could Newman of course. Yet overall, the look is right, but what’s with Jerry’s sideburns?

Lego could really go to town with the accessories here: a bowl of cereal for Jerry (Captain Krunch or Kicks will do); Fusilli Jerry for Kramer (a tiny likeness of Jerry made from pasta); a Big Salad for Elaine; and a wig for George. Or, how about a Pez dispenser for Jerry, an Urban Sombrero for Elaine and a Cuban cigar for Kramer? The possibilities are endless.

I’m encouraged by a series of promotional images that recreate iconic scenes from famous episodes of the show like ‘The Puffy Shirt’, ‘The Junior Mint’ and the closing tableau from ‘The Finale’.

It would seem that LEGO® definitely has, to quote Elaine, “unbridled enthusiasm” for the “excruciating minutia” of Seinfeld’s iconography, I only hope they find time to add a trip over to Kramer’s abode a la ‘The Merv Griffin Show/ episode, or engineer a component to the model whereby Jerry’s apartment revolves into Tom’s Restaurant setting and Kramer’s Coffee Table Book About Coffee Tables becomes a LEGO® reality. As Kramer himself might say: “Giddy up!”

Let us know what you think by dropping a comment below!

<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