<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Articles by Shaiful Borhan &#8212; Stampede: the strategic design &amp; technology company</title>
	<atom:link href="https://stampede-design.com/blog/author/shaiful/feed/" rel="self" type="application/rss+xml" />
	<link>https://stampede-design.com/blog/author/shaiful/</link>
	<description>We are creating better worlds though thoughtful design and technology. Connect with us!</description>
	<lastBuildDate>Tue, 07 Apr 2026 09:04:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://stampede-design.com/wp-content/uploads/2024/02/cropped-Stampede-Favicon-old-32x32.png</url>
	<title>Articles by Shaiful Borhan &#8212; Stampede: the strategic design &amp; technology company</title>
	<link>https://stampede-design.com/blog/author/shaiful/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Designing with Development in Mind</title>
		<link>https://stampede-design.com/blog/designing-with-development-in-mind/</link>
					<comments>https://stampede-design.com/blog/designing-with-development-in-mind/#comments</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Wed, 11 Nov 2020 09:30:50 +0000</pubDate>
				<category><![CDATA[Field Notes]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[design and development]]></category>
		<category><![CDATA[front-end development]]></category>
		<category><![CDATA[handoff]]></category>
		<category><![CDATA[workflow]]></category>
		<guid isPermaLink="false">https://stampede-design.com/?p=9914</guid>

					<description><![CDATA[<p>A good UX designer ensures that their designs are technically feasible and reasonable to execute in code. In other words, you need to talk to developers and know what kinds of code-related limitations there are in order to prioritise practical solutions and execution. This means that not all designs can or should be made! As&#8230;<a href="https://stampede-design.com/blog/designing-with-development-in-mind/"> Keep reading</a></p>
<p>The post <a href="https://stampede-design.com/blog/designing-with-development-in-mind/">Designing with Development in Mind</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="lead">A good UX designer ensures that their designs are technically feasible and reasonable to execute in code. In other words, you need to talk to developers and know what kinds of code-related limitations there are in order to prioritise practical solutions and execution. This means that not all designs can or should be made! As a Backend Developer who’s coded a pretty decent number of websites, here are some important things to consider in order to design with development in mind.</p>



<h2 class="wp-block-heading">Design after familiarising yourself with a platform</h2>



<p>Take the time to get to know the platform, web technologies, and end output you’re designing for as each platform has design and functionality related limitations. If you don’t do this first, there’s always the danger that you’re going to design something that is completely wrong for the platform or cannot be coded within a reasonable amount of time. So make sure it’s possible first! </p>



<p><strong>How do I do this?</strong> The easiest way to do this is to use the platform and see how it works. Being aware of what scenarios and platforms you’re designing for will help you figure out how big your sandbox is. It also means setting the right expectations for what’s possible with tech. This way, you don’t over promise to your client or product owner only to later say that a key feature you designed can’t be coded. </p>



<p>For example, within WordPress, get to know:</p>



<ul class="wp-block-list"><li> The content pop workflow in Gutenberg and see what the output is on the frontend</li><li> Widgets</li><li> Custom post types</li><li> Popular plugins like Gravity Forms, FacetWP and FooGallery</li></ul>



<p>For web tech, get familiar with knowing:</p>



<ul class="wp-block-list"><li> Solid responsive design knowledge from small to 4K screens</li><li> Bootstrap components</li><li> How social sharing works</li><li> How designs will affect website performance</li></ul>



<p>This is by no means an exhaustive list, but it should give you a good idea of what you need to know. Still unsure? Talk to a frontend (FED) and backend (BED) developer for some guidance. </p>



<h2 class="wp-block-heading">Keep in mind coding effort </h2>



<p>It’s very possible that a little bit of design will result in a lot of coding. A typical scenario I’ve encountered is when a designer has designed a seemingly simple feature in a minute, however, it ends up taking much longer to code during FED and BED. The reason for this significantly longer development time is that making designs functional may require more complex backend logic. The danger of not considering coding time and effort is that you’re designing development heavy features that are time-consuming to code which can result in your product development running behind schedule.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="876" height="601" src="https://stampede-design.com/wp-content/uploads/2020/02/Screenshot-2020-02-05-at-12.38.29-PM.png" alt="Example of product sashes on the Christmas Elves ecommerce website." class="wp-image-9915" srcset="https://stampede-design.com/wp-content/uploads/2020/02/Screenshot-2020-02-05-at-12.38.29-PM.png 876w, https://stampede-design.com/wp-content/uploads/2020/02/Screenshot-2020-02-05-at-12.38.29-PM-300x206.png 300w, https://stampede-design.com/wp-content/uploads/2020/02/Screenshot-2020-02-05-at-12.38.29-PM-790x542.png 790w, https://stampede-design.com/wp-content/uploads/2020/02/Screenshot-2020-02-05-at-12.38.29-PM-768x527.png 768w" sizes="(max-width: 876px) 100vw, 876px" /><figcaption>An example of product sashes with backend logic from Christmas Elves.</figcaption></figure></div>


<p>Say you’re designing a product sash for products on an ecommerce website. The designer has already designed several product sashes like Sold Out, Popular and On Sale that have backend logic (rules that dictates behaviour) attached so that these sashes will only appear in certain cases. For example, the backend logic for the Sold Out sash means it only appears when the product inventory is 0. Now let’s say that we want to add a new sash for “Popular”. Design and FED-wise, this would probably be pretty fast because there&#8217;s already an existing sash template for the designer to modify and existing sashes implemented from which to create a new HTML element in FED. However, the effort to backend code the Popular sash is much higher. </p>



<div class="toro-banner">
  <img decoding="async" src="https://torotimer.com/wp-content/uploads/2022/09/toro-timer@2x.png" alt="Toro Timer">
  <div class="copy">
    <h3>Track time with Toro Timer</h3>
    <p>Toro helps remote teams stay productive no matter where they are. <!-- <a href="#!">Learn more</a> --></p>
    <div class="btn__group">
      <a href="https://torotimer.com/#EarlyAccess" class="btn-toro">Get early access</a>
    </div>
  </div>
</div>



<p>In order for the BED to code the Popular sash’s backend logic, they first have to know the rules for what constitutes as “Popular”. Different versions will also take different amounts of time. For instance, one possibility is where the product owner wants the Popular sash to show if more than 20 units have been sold within the last two weeks. Alternatively, they may want to be able to manually control what is labelled as “Popular” in which case the admin can tag the product as “Popular”. So depending on these two types of BED logic, there would be a big difference in the time needed to code. </p>



<p>Now, developers generally do not shy away from coding (or at least we hope that they don’t!), but you have to consider how much work you’re creating for them down the line. This is especially important when you have multiple designs and products to juggle and client or colleague expectations to manage. In this light, it might be better for you to give up on this feature (for now) or coming up with a pared down version for the sake of staying on schedule and not overworking your developer.</p>



<p><strong>What should I do?</strong> Think about what kind of logic would be needed to execute your design first then consult your client, product owner and friendly neighbourhood developer before proceeding with design. You may find out that what you want to do is not realistic or of low value to the end user. Alternatively, you may find that it’s easy to design, code and has great value! Either way, you’re better informed about the effect of your designs. </p>



<h2 class="wp-block-heading">Design reusable UI components</h2>



<p>It’s important to remember that designs need to be practical, not only in terms of how it will be initially coded but how it will be managed in the long term. In tech terms, this means thinking about designing UI components so they can be reused across the website or app. This adds to the longevity of a design because it can be easily maintained from a backend standpoint while still looking good on the frontend. In order to achieve this you may have to reach a compromise with your design’s aesthetic elements in favour of ease of maintenance. </p>


<div class="wp-block-image is-style-expanded">
<figure class="aligncenter size-full"><img decoding="async" width="1000" height="287" src="https://stampede-design.com/wp-content/uploads/2020/11/Irregular-shapes-1000px-wide.png" alt="Examples of irregular shapes that look nice but can be hard to code in a scalable way." class="wp-image-10124" srcset="https://stampede-design.com/wp-content/uploads/2020/11/Irregular-shapes-1000px-wide.png 1000w, https://stampede-design.com/wp-content/uploads/2020/11/Irregular-shapes-1000px-wide-300x86.png 300w, https://stampede-design.com/wp-content/uploads/2020/11/Irregular-shapes-1000px-wide-790x227.png 790w, https://stampede-design.com/wp-content/uploads/2020/11/Irregular-shapes-1000px-wide-768x220.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /><figcaption>Irregular shapes can have visual impact, but too many variations are a nightmare to code.</figcaption></figure></div>


<p>Let’s explore the consequences of this in an example. You may have chosen to design a website which has varied irregular shapes (think jellybeans and splats). Though this may make for a more visually interesting design, it might become hellish for developers as variations might lead to the writing of bad or unmaintainable code. This is because every unique shape has different margin and padding requirements and the more variations there are, the more low-level coding is required to fine tune them. If the developer is inexperienced, there’s a possibility that the way it’s been coded may not be so readable, elegant or maintainable. This means that if another developer, or even the same one, comes in later, they will have trouble understanding the code and will therefore have more trouble fixing it. More design and coding variations also means that the developer cannot use a blanket fix on them and must spend more time coding a fix for each one. Another problem is that with more code comes more opportunities for older code to break. The end result? Massive headaches. </p>



<p>The last point is that people usually do not end up using all the bells and whistles you designed. Though the website may look fancy after you initially deploy it, your client or whoever ends up doing the content updates and maintenance may not choose to follow suit, or, may even get confused if there are too many options. They may very well end up sticking to one or two elements that they’re comfortable with for content population and forego the other options. All the other stuff you designed and coded will then be wasted effort.</p>



<p><strong>What should I do?</strong> Although it is possible to use as many shapes as you like, think about how they’re actually going to be coded and maintained later. One strategy is to design UI components in a way that makes them reusable. Set a fixed number of variations e.g. 4 and stick to those only. The definition of maintainable code is that it’s code that is easy to modify, extend and debug. By designing a custom shape that you can then flip horizontally and vertically to make “new” shapes, you will get the visual variety that you need while still making it easier for the developers to write fixes if ever they break. It’ll also hopefully be simpler for whoever maintains the website in the end. </p>



<hr class="wp-block-separator has-css-opacity"/>



<p>There you have it folks! Though it’s easy to create aesthetically pleasing designs and features, you have to consider the direct effect design will have on FED and BED and beyond. Remember, design isn’t just about how it looks, it’s also about how it works and what the experience is like for others that you’re working with. Talk to your developers often to discover limitations and peek into what it’ll be like to maintain the design in the future so that you design with development in mind.</p>
<p>The post <a href="https://stampede-design.com/blog/designing-with-development-in-mind/">Designing with Development in Mind</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/designing-with-development-in-mind/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Creating a Custom Block Type for WordPress Gutenberg Editor</title>
		<link>https://stampede-design.com/blog/creating-a-custom-block-type-for-wordpress-gutenberg-editor/</link>
					<comments>https://stampede-design.com/blog/creating-a-custom-block-type-for-wordpress-gutenberg-editor/#respond</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Wed, 20 Feb 2019 09:14:16 +0000</pubDate>
				<category><![CDATA[Field Notes]]></category>
		<category><![CDATA[block editor]]></category>
		<category><![CDATA[front-end development]]></category>
		<category><![CDATA[Gutenberg]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://stampede-design.com/?p=9619</guid>

					<description><![CDATA[<p>For all the buzz it has generated in 2018, you would need to be a hermit (or at least someone who doesn’t work in web-development) to not have heard of WordPress version 5.&#160;I&#8217;m of course referring to its game-changing feature — the new block-based editor, Gutenberg. The new editor radically changes the writing experience in&#8230;<a href="https://stampede-design.com/blog/creating-a-custom-block-type-for-wordpress-gutenberg-editor/"> Keep reading</a></p>
<p>The post <a href="https://stampede-design.com/blog/creating-a-custom-block-type-for-wordpress-gutenberg-editor/">Creating a Custom Block Type for WordPress Gutenberg Editor</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="lead">For all the buzz it has generated in 2018, you would need to be a hermit (or at least someone who doesn’t work in web-development) to not have heard of WordPress version 5.&nbsp;I&#8217;m of course referring to its game-changing feature — the new block-based editor, Gutenberg. The new editor radically changes the writing experience in WordPress because of its block-based system. Content authors can now treat content editing with more of a page building approach, akin to popular page-builders like Elementor and Divi.</p>



<p>Gutenberg by default comes with a handful of block types that should cover standard web content updating needs. However, it also has a nifty&nbsp;<a href="https://wordpress.org/gutenberg/handbook/designers-developers/developers/block-api/" target="_blank" rel="noopener noreferrer">Block API</a> for adding custom block types if you need them to display specially designed components for our website. In this tutorial, you are going to add a custom Gutenberg block type so that the output is a notice box with a few predefined styles that accepts arbitrary text input from the user.</p>



<p>This is what you&#8217;re going for.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="999" height="339" src="https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-output.png" alt="" class="wp-image-9622" srcset="https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-output.png 999w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-output-300x102.png 300w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-output-768x261.png 768w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-output-790x268.png 790w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-output-280x95.png 280w" sizes="(max-width: 999px) 100vw, 999px" /><figcaption> Our custom Notice blocks’ final output. Please ignore the crude styling because that’s not really in the scope of this tutorial. </figcaption></figure>



<p class="afterimagecaption">And here is how it looks from the admin&#8217;s side.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1274" height="866" src="https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-admin.gif" alt="" class="wp-image-9621"/><figcaption> How admins would interact with the custom Notice block. </figcaption></figure>



<p class="afterimagecaption">Alright, let&#8217;s get to coding!</p>



<h2 class="wp-block-heading">Step 1: Create a plugin for the new block type</h2>



<p>You will be creating a custom block type as a WordPress plugin. This will allow you to decouple it from any themes you are using and in case anything goes wrong, you can simply deactivate it.</p>



<p>So create a new folder in the WP plugins folder and let&#8217;s call it <code>gutenberg-notice-block</code>. In this new folder, create a <code>plugin.php</code> file with the following code:</p>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">/**
* Plugin Name: Gutenberg Notice Block
* Author: Shaiful
* Description: A notice box with a few predefined styles that accepts arbitrary text input.
* Version: 1.0
*/

// Load assets for wp-admin when editor is active
function shaiful_gutenberg_notice_block_admin() {
   wp_enqueue_script(
      'gutenberg-notice-block-editor',
      plugins_url( 'block.js', __FILE__ ),
      array( 'wp-blocks', 'wp-element' )
   );

   wp_enqueue_style(
      'gutenberg-notice-block-editor',
      plugins_url( 'block.css', __FILE__ ),
      array()
   );
}

add_action( 'enqueue_block_editor_assets', 'shaiful_gutenberg_notice_block_admin' );

// Load assets for frontend
function shaiful_gutenberg_notice_block_frontend() {

   wp_enqueue_style(
      'gutenberg-notice-block-editor',
      plugins_url( 'block.css', __FILE__ ),
      array()
   );
}
add_action( 'wp_enqueue_scripts', 'shaiful_gutenberg_notice_block_frontend' );</code></pre>



<p>Basically what this file does is initialise the plugin by loading the necessary JS and CSS files at the right place and at the right time. The code above is looking for <code>block.js</code> and <code>block.css</code>, which you will create momentarily.</p>



<p>At this point, you should be able to see the new plugin listed in your WP Plugins admin page. Go ahead and activate it.</p>



<p>Moving forward, all of your coding will be done in JavaScript with some ReactJS flavour to interact with the Gutenberg Block API.</p>



<h2 class="wp-block-heading">Step 2: Register the new block type</h2>



<p>Create a file called <code>block.js</code> in your custom plugin folder. This file will hold the entire logic of the custom block type for the admin-side and frontend of your website.</p>



<p>Start by adding the following bare-bones code.</p>



<pre class="wp-block-code"><code lang="javascript" class="language-javascript line-numbers">/* block.js */
var el = wp.element.createElement;

wp.blocks.registerBlockType('shaiful-gutenberg/notice-block', {

   title: 'Notice', // Block name visible to user

   icon: 'lightbulb', // Toolbar icon can be either using WP Dashicons or custom SVG

   category: 'common', // Under which category the block would appear

   attributes: { // The data this block will be storing

      type: { type: 'string', default: 'default' }, // Notice box type for loading the appropriate CSS class. Default class is 'default'.

      title: { type: 'string' }, // Notice box title in h4 tag

      content: { type: 'array', source: 'children', selector: 'p' } /// Notice box content in p tag

   },

   edit: function(props) {
      // How our block renders in the editor in edit mode
      return null;
   },

   save: function(props) {
      // How our block renders on the frontend
      return null;
   }
});
</code></pre>



<p>The code above registers your new block type with the name “Notice”, using a light-bulb <a href="https://developer.wordpress.org/resource/dashicons/" target="_blank" rel="noopener noreferrer">Dashicon</a> and putting it under the Common Blocks panel in the Gutenberg blocks browser. You should be able to see the new block in your editor at this point.</p>



<p>You also specify the attributes (and their data type) that your new block will be storing which are the box type, the box title and the box content.</p>



<p>Lastly, there are two functions called edit() and save(). The edit() function is responsible for rendering your block in the editor while the save() function outputs your block HTML on our website&#8217;s frontend.</p>



<p>Let&#8217;s explore them now.</p>



<h2 class="wp-block-heading">Step 3: The edit() function</h2>



<p>The edit() function controls how the block will appear in the Gutenberg editor for the user to interact with.</p>



<p>For your custom Notice block type, the goal is to accomplish two things:</p>



<ol class="wp-block-list"><li>The user can select the notice box type as well as enter the box title and content.</li><li>Selecting different notice box types will show a simple live preview of what the box is going to look like on the frontend.</li></ol>



<p>Add the following code into the edit() function.</p>



<pre class="wp-block-code"><code lang="javascript" class="language-javascript line-numbers">/* block.js */
edit: function(props) {
   // How our block renders in the editor in edit mode

   function updateTitle( event ) {
      props.setAttributes( { title: event.target.value } );
   }

   function updateContent( newdata ) {
      props.setAttributes( { content: newdata } );
   }

   function updateType( event ) {
      props.setAttributes( { type: event.target.value } );
   }

   return el( 'div',
      {
         className: 'notice-box notice-' + props.attributes.type
      },
      el(
         'select',
         {
            onChange: updateType,
            value: props.attributes.type,
         },
         el("option", {value: "default" }, "Default"),
         el("option", {value: "success" }, "Success"),
         el("option", {value: "danger" }, "Danger")
      ),
      el(
         'input',
         {
            type: 'text',
            placeholder: 'Enter title here...',
            value: props.attributes.title,
            onChange: updateTitle,
            style: { width: '100%' }
         }
      ),
      el(
         wp.editor.RichText,
         {
            tagName: 'p',
            onChange: updateContent,
            value: props.attributes.content,
            placeholder: 'Enter description here...'
         }
      )
   ); // End return

},  // End edit()
</code></pre>



<p>Line 16-49 is the main code you will use to display the user interface in a way that allows you to update the content in your block type. The code is written in ReactJS specifically the React.createElement() function is used to create new DOM elements. Do not worry if ReactJS is unfamiliar to you. You can make use of <a href="https://babeljs.io/repl" target="_blank" rel="noopener noreferrer">this specific tool</a> to compile <a href="https://reactjs.org/docs/introducing-jsx.html" target="_blank" rel="noopener noreferrer">JSX template code</a> to React.createElement() functions.</p>



<p>Here is an example.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1323" height="866" src="https://stampede-design.com/wp-content/uploads/2019/02/babel-compile-jsx-to-react.png" alt="" class="wp-image-9637" srcset="https://stampede-design.com/wp-content/uploads/2019/02/babel-compile-jsx-to-react.png 1323w, https://stampede-design.com/wp-content/uploads/2019/02/babel-compile-jsx-to-react-300x196.png 300w, https://stampede-design.com/wp-content/uploads/2019/02/babel-compile-jsx-to-react-768x503.png 768w, https://stampede-design.com/wp-content/uploads/2019/02/babel-compile-jsx-to-react-790x517.png 790w, https://stampede-design.com/wp-content/uploads/2019/02/babel-compile-jsx-to-react-229x150.png 229w" sizes="(max-width: 1323px) 100vw, 1323px" /><figcaption> Using Babel to compile JSX to ReactJS code. </figcaption></figure>



<p class="afterimagecaption">It&#8217;s a good idea to create your <code>block.css</code> file right now so that you can test the live preview functionality in the editor. Make sure the CSS file is saved in your plugin folder.</p>



<pre class="wp-block-code"><code lang="css" class="language-css line-numbers">/* block.css */
div.notice-box {
   border: 1px LightSkyBlue solid;
   border-left-width: 5px;
   padding: 10px 15px;
   margin: 30px;
}

div.notice-box.notice-success {
  border-color: MediumSpringGreen ;
}

div.notice-box.notice-danger{
   border-color: LightCoral ;
}

div.notice-box h4 {
   font-size: 18px;
   margin:0 0 10px 0;
}
div.notice-box p {
   font-size: 16px;
   line-height: 24px;
   margin:0;
}
</code></pre>



<p>At this point, you should be able to add your Notice block type into the editor and see three different fields for configuring the notice box. The dropdown for selecting the notice box type should also gives you a live preview between the default (blue), success (green) and danger (red) box types.</p>



<h2 class="wp-block-heading">Step 4: The save() function</h2>



<p>The save() function for your Notice block type is pretty straightforward. You just have to construct the correct HTML structure and populate the title and content into the notice box <code>&lt;div&gt;</code>. Once again the DOM elements creation code has to be written in ReactJS.</p>



<p>Here is the code:</p>



<pre class="wp-block-code"><code lang="javascript" class="language-javascript line-numbers">/* block.js */
save: function(props) {
   // How our block renders on the frontend

   return el( 'div',
      {
         className: 'notice-box notice-' + props.attributes.type
      },
      el(
         'h4',
         null,
         props.attributes.title
      ),
      el( wp.editor.RichText.Content, {
         tagName: 'p',
         value: props.attributes.content
      })

   ); // End return

} // End save()
</code></pre>



<p>That&#8217;s it!</p>



<p>Your Notice block type should now work on both the admin and website&#8217;s frontend.</p>



<p>Here is the&nbsp;<a href="https://stampede-design.com/demo/gutenberg-notice-block.zip">link</a> to download the completed plugin.</p>



<h2 class="wp-block-heading">Something to keep in mind</h2>



<p>Looking at the save() function, you’d imagine that updating the HTML output in there would cause a global update for all instances of the Notice box that you have populated on your website. It’s natural to expect this (it is, at least from our experience with working with WP shortcodes). Unfortunately, this isn’t what happens.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1274" height="866" src="https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-error.png" alt="" class="wp-image-9620" srcset="https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-error.png 1274w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-error-300x204.png 300w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-error-768x522.png 768w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-error-790x537.png 790w, https://stampede-design.com/wp-content/uploads/2019/02/gutenberg-notice-block-error-221x150.png 221w" sizes="(max-width: 1274px) 100vw, 1274px" /></figure>



<p>Making any changes to the block HTML output would trigger a conflict with all existing instances of the blocks that have been populated. What&#8217;s worse is that the only way to fix this is by repopulating the blocks one by one. This is the caveat of static block types.</p>



<p>To work around this, make use of the&nbsp;<a href="https://wordpress.org/gutenberg/handbook/designers-developers/developers/tutorials/block-tutorial/creating-dynamic-blocks/" target="_blank" rel="noopener noreferrer">Dynamic Blocks</a>&nbsp;feature which hands over the save() function from JS to PHP to generate the block HTML output on the fly.</p>



<h2 class="wp-block-heading">Final thoughts</h2>



<p>The ability to create custom block types is very cool and opens a lot of possibilities for content customisation. After trying it out myself, I would say the basic concept is fairly easy to follow. The real challenge, however, is presenting the custom block in the best possible way to give content authors the best editing experience, especially for blocks with complex functionalities. I find that the official developer documentation for various attributes configurations or working with RichText field for example, are still lacking. It will improve surely but the best reference materials we have at this moment are online articles and the existing blocks that came out of the box with WP5.</p>



<p>On another note, I am personally looking forward to the Advanced Custom Fields (ACF) plugin taking on the custom block types with their own <a href="https://www.advancedcustomfields.com/blog/acf-5-8-introducing-acf-blocks-for-gutenberg/" target="_blank" rel="noopener noreferrer">ACF Blocks for Gutenberg</a>. This new addition should lower the barrier for WP developers to take advantage of Gutenberg block capabilities in a more intuitive way.</p>
<p>The post <a href="https://stampede-design.com/blog/creating-a-custom-block-type-for-wordpress-gutenberg-editor/">Creating a Custom Block Type for WordPress Gutenberg Editor</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/creating-a-custom-block-type-for-wordpress-gutenberg-editor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Embedding Forms in Bigcommerce Using Google Forms</title>
		<link>https://stampede-design.com/blog/google-forms-in-bigcommerce/</link>
					<comments>https://stampede-design.com/blog/google-forms-in-bigcommerce/#respond</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Fri, 11 Mar 2016 01:39:00 +0000</pubDate>
				<category><![CDATA[Field Notes]]></category>
		<category><![CDATA[bigcommerce]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[front-end development]]></category>
		<category><![CDATA[Google Forms]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">http://dev.stampedelabs.com/client/v3/wp/?p=6326</guid>

					<description><![CDATA[<p>Bigcommerce out of the box sports a decent contact form that is usable for everyone 99% of the time. However, things get a little tricky if we need to add in a few extra fields in there or even a whole new form. Shaiful walks you through on how to take advantage of Google Forms to host custom forms in BigCommerce.</p>
<p>The post <a href="https://stampede-design.com/blog/google-forms-in-bigcommerce/">Embedding Forms in Bigcommerce Using Google Forms</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="lead" class="lead"><a href="http://bigcommerce.com/" target="_blank">BigCommerce</a> out of the box sports a decent contact form that is usable for everyone 99% of the time. However, things get a little tricky if we need to add in a few extra fields in there or even a whole new form; for example, a product warranty registration form. This is when we handover all form responsibilities to <a href="https://www.google.com/forms/about/" target="_blank">Google Forms</a>.</p>
<p><div class="full"><img decoding="async" class="alignnone wp-image-7156" src="https://stampede-design.com/wp-content/uploads/2016/03/thumb-bigcommerce.jpg" alt="Bigcommerce" /></div></p>
<p>The standard way of embedding Google Forms is to use an iframe, which is sufficient. The more preferable way of course is by manually extracting the form&#8217;s HTML fields and re-coding it according to your theme&#8217;s HTML structure. Not only will it match your theme nicely, but you can also insert some custom JS validation on the fields as needed. Another plus is that Google Forms captures form submissions in a convenient spreadsheet format.</p>
<h2>The Steps</h2>
<p>The first step is to create two web pages in BigCommerce that will become our form page and success page when users submit the form. The form page is a <a href="https://support.bigcommerce.com/articles/Public/Creating-Custom-Template-Files" target="_blank">custom template file</a> that will contain our form HTML codes while the success page is simply a generic page. Take note of the success page URL.</p>
<p>Next, build our form in Google Forms with the most minimalist styling. Once tested and published, view its source to get the form codes and re-code the form into our custom template file — in the HTML structure we like while preserving the field names and the &lt;form&gt; action (and method). Next is some code alterations.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;var submitted=false;&lt;/script&gt;
&lt;iframe name=&quot;hidden_iframe&quot; id=&quot;hidden_iframe&quot;style=&quot;display:none;&quot; onload=&quot;if(submitted) {window.location='SUCCESS_PAGE_URL';}&quot;&gt;&lt;/iframe&gt;


&lt;form action=&quot;https://docs.google.com/forms/d/1CsZt9s0vVegFb3-Qa3162Ri7A91ggx6S9B6qvBZcyJY/formResponse&quot; method=&quot;POST&quot; target=&quot;hidden_iframe&quot; onsubmit=&quot;submitted=true;&quot;&gt;
...your form fields...
&lt;/form&gt;


</pre>
<p>Add line 1 and 2 right before our form tag and replace the correct success page URL in line 2.</p>
<p>Next, add <code>target="hidden_iframe" onsubmit="submitted=true;"</code> attributes to the &lt;form&gt; tag so that the form submits into the hidden &lt;iframe&gt; we created in line 2.</p>
<p>Finally, give it a test run. It is advisable to validate the form fields with JS to ensure the form is indeed being submitted successfully.</p>
<p>Although this guide is written for BigCommerce, the implementation steps are generic enough to be used on any platforms where you have HTML and JS editing access. Hope it helps.</p>
<p><span class="message_body">Need help making your BigCommerce store stands out from the competition? <a href="https://stampede-design.com/contact/">Get in touch</a>.</span></p>
<p>The post <a href="https://stampede-design.com/blog/google-forms-in-bigcommerce/">Embedding Forms in Bigcommerce Using Google Forms</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/google-forms-in-bigcommerce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Showing Selected Product Variant Image in Shopify Product Slideshow</title>
		<link>https://stampede-design.com/blog/showing-selected-product-variant-image-in-shopify-product-slideshow/</link>
					<comments>https://stampede-design.com/blog/showing-selected-product-variant-image-in-shopify-product-slideshow/#comments</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Sat, 04 Jul 2015 16:46:08 +0000</pubDate>
				<category><![CDATA[Field Notes]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[front-end development]]></category>
		<category><![CDATA[shopify]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ui]]></category>
		<guid isPermaLink="false">http://dev.stampedelabs.com/client/v3/wp/?p=6275</guid>

					<description><![CDATA[<p>Believe it or not, some little features on product slideshows would make all the big difference to your sales. Shaiful shows how to customise the slideshow in Shopify.</p>
<p>The post <a href="https://stampede-design.com/blog/showing-selected-product-variant-image-in-shopify-product-slideshow/">Showing Selected Product Variant Image in Shopify Product Slideshow</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="lead" class="lead">Product slideshows are indispensable when it comes to e-commerce websites. One little feature that we usually see on product slideshows is the ability to switch images based on the selection of product options such as colors. It&#8217;s a little feature that makes a difference!</p>
<p><div class="full"><img decoding="async" class="wp-image-6899 size-full" src="https://stampede-design.com/wp-content/uploads/2015/07/product-slideshow1.gif" alt="product-slideshow" /><p class="capt_block">A staple feature of e-commerce websites.</p></div></p>
<p>In Shopify, this feature may already comes standard with most of the themes or in an updated version of the current theme you are using, which is great. However in some cases you could be using a heavily customized theme and updating is not going to be a breeze, well, all you need is just a couple of lines of codes and you got yourself an upgraded product slideshow.</p>
<h2>The Code</h2>
<p>Paste the code below into the bottom of either template file product.liquid or snippet file product-form.liquid.</p>
<pre class="brush: jscript; title: ; notranslate">

{% if product.variants.size &gt; 1 %}
&lt;script&gt;
(function($) {
  var variantImages = {},
    thumbnails,
    variant,
    variantImage,
    variantImage_count = 0;
  	//produce mapping between variant image and options
    {% for variant in product.variants %}
       variant = {{ variant | json }};
       if ( typeof variant.featured_image !== 'undefined' &amp;&amp; variant.featured_image !== null ) {
         variantImage =  variant.featured_image.src.split('?')&#x5B;0].replace(/http(s)?:/,'');
         variantImages&#x5B;variantImage] = variantImages&#x5B;variantImage] || {};
         {% for option in product.options %}
           {% assign option_value = variant.options&#x5B;forloop.index0] %}
           {% assign option_key = 'option-' | append: forloop.index0 %}
           if (typeof variantImages&#x5B;variantImage]&#x5B;{{ option_key | json }}] === 'undefined') {
             variantImages&#x5B;variantImage]&#x5B;{{ option_key | json }}] = {{ option_value | json }};
           }
           else {
             var oldValue = variantImages&#x5B;variantImage]&#x5B;{{ option_key | json }}];
             if ( oldValue !== null &amp;&amp; oldValue !== {{ option_value | json }} )  {
               variantImages&#x5B;variantImage]&#x5B;{{ option_key | json }}] = null;
             }
           }
         {% endfor %}
         variantImage_count++;
   	   }
    {% endfor %}

    $(function() {

      if (variantImage_count &gt; 0) {
        $('select.single-option-selector').change(function() {
          var selected_color = $(this).val();
          thumbnails = $('.flex-control-thumbs img').each(function(index, el) {
            var image = $(el).attr('src').split('?')&#x5B;0].replace(/(_thumb\.)|(_small\.)|(_compact\.)|(_medium\.)|(_large\.)|(_grande\.)/,'.');
            if (typeof variantImages&#x5B;image] !== 'undefined') {
              if(selected_color == variantImages&#x5B;image]&#x5B;'option-0']) {
                //only check against the first option &#x5B;'option-0'], which is Color (in my case)
              	$('.flexslider').flexslider(index);
              }
            }
		      });
        });
      }

    });
})(jQuery);
&lt;/script&gt;
{% endif %}

</pre>
<p>The code is a combination of Liquid template tags and JS. It is based on the customization provided by Shopify for <a href="https://docs.shopify.com/manual/configuration/store-customization/page-specific/product-page/make-image-change-variant" target="_blank">enabling customers to select a product variant by clicking its image</a> and modified to work the other way around.</p>
<p>Line 10-30 produces the mapping between variants image and options in a JSON object that is used for comparison against the product thumbnails in the select box event handler function as seen in line 35-46. Line 42 is the actual code that tells the slideshow to jump to a specific slide. As you might have guessed, the code is unique to <a href="http://www.woothemes.com/flexslider/" target="_blank">Flexslider</a> slideshow plugin. You need to determine what slideshow plugin you are using and then figure out how to jump to a specific slide using its API.</p>
<p>I hope you find this guide useful. If you have questions/feedback, let me know in the comments.</p>
<p>Have a nice day!</p>
<p>The post <a href="https://stampede-design.com/blog/showing-selected-product-variant-image-in-shopify-product-slideshow/">Showing Selected Product Variant Image in Shopify Product Slideshow</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/showing-selected-product-variant-image-in-shopify-product-slideshow/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress CPT Solutions Comparison: Pods vs Types</title>
		<link>https://stampede-design.com/blog/wordpress-cpt-solutions-comparison-pods-vs-types/</link>
					<comments>https://stampede-design.com/blog/wordpress-cpt-solutions-comparison-pods-vs-types/#comments</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Thu, 05 Feb 2015 17:43:15 +0000</pubDate>
				<category><![CDATA[Field Notes]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[CPT]]></category>
		<category><![CDATA[development tools]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://dev.stampedelabs.com/client/v3/wp/?p=6299</guid>

					<description><![CDATA[<p>Pods and Types are Shaiful's two favourite solutions when it comes to WordPress' custom post types. Here he will help you decide on the best one for you, depending on your project requirements.</p>
<p>The post <a href="https://stampede-design.com/blog/wordpress-cpt-solutions-comparison-pods-vs-types/">WordPress CPT Solutions Comparison: Pods vs Types</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Starting from WordPress 3.0, custom post types (CPT) has been one of WP&#8217;s most unrivaled core features. I cannot recall how many times this wonderful feature had came to the rescue to help me achieve CMS-like functionalities in custom WP projects. As WP users, you have probably used CPT directly, by coding on it or indirectly by installing plugins that create their own CPTs like WooCommerce.</p>
<p>Since a couple of years ago, I have pretty much refrained from coding CPTs from scratch, unless for extremely simple post types. I have sworn my allegiance to two well-known CPT solution plugins namely <a href="https://wordpress.org/plugins/pods/" target="_blank"><strong>Pods</strong></a> and <a href="https://wordpress.org/plugins/types/" target="_blank"><strong>Types</strong></a>. In this post, I&#8217;ll try my best to explain how they fare against each other, specifically on the way they handle CPTs (and custom taxonomies).  What I don&#8217;t intend to cover are extended features like user roles or data migration. Finally, there&#8217;s a bonus section about enhancing their functionalities.</p>
<h2>WordPress Pods plugin</h2>
<p><div class="full"><a href="https://wordpress.org/plugins/pods/" target="_blank"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-6488" src="https://stampede-design.com/wp-content/uploads/2015/02/banner-772x2501.png" alt="Pods WordPress plugin" width="772" height="250" /></a></div></p>
<p>The CPT management screens in Pods are really well-done and user friendly. If you are new to the world of CPTs, Pods will present you with a gentle learning curve to get you up and running. When you create a new CPT or custom taxonomy, you immediately have access to the custom fields management panel within the same CPT or custom taxonomy edit page. This makes the whole process of managing the custom fields a breeze and feels natural.</p>
<p>These are the main strengths of Pods:</p>
<ol>
<li>Nice and intuitive user interface.</li>
<li>Large selection of custom field types.</li>
<li>You can add custom fields to custom taxonomies too.</li>
<li>Pods Template is an optional component you can enable in Pods to create templates for outputting Pods CPTs using magic tags and shortcodes all within WordPress without messing around with theme files.</li>
<li>You can create a custom Settings page for miscellaneous usage.</li>
</ol>
<p>The limitation of Pods based on my experience are:</p>
<ol>
<li>While you can create true parent-child (or one-to-many) relationships between Pods CPTs, the level of integration doesn&#8217;t appear to be truly seamless. For instance, in a property rental website <span data-dobid="hdw">presumably</span> you had setup a one-to-many relationship between two CPTs; Properties and Rentals. However when editing a Property record you cannot add new Rental records in the same screen.</li>
<li>Each CPT can only have one meta box named More Fields containing all the custom fields.</li>
<li>You cannot make basic fields like plain text repeatable which could be handy in certain scenarios. Fortunately multiple image uploads is still possible.</li>
</ol>
<h2>WordPress Types plugin</h2>
<p><div class="full"><a href="https://wordpress.org/plugins/types/" target="_blank"><img decoding="async" class="aligncenter size-full wp-image-6489" src="https://stampede-design.com/wp-content/uploads/2015/02/banner-772x250.png" alt="Types WordPress plugin" /></a></div></p>
<p>The Types plugin may not look as straightforward to use at first glance primarily because the CPT and custom fields are managed in different admin screens but once you get your head around this it actually opens up a new possibility of the things you can do.</p>
<p>These are the main strengths of Types:</p>
<ol>
<li>You can create true parent-child (or one-to-many) relationships between any CPTs or WP&#8217;s native objects with very seamless integration. For instance, in a property rental website <span data-dobid="hdw">presumably</span> you had setup a one-to-many relationship between two CPTs; Properties and Rentals. When editing a Property record you can quick-add new Rental records in the same screen. Additionally, you can also specify which fields should appear in the quick add form.</li>
<li>You can have as many meta boxes with custom headings and combination of custom fields in each CPT. Furthermore, the meta boxes support custom CSS so you can arrange certain fields in side-by-side fashion instead of one per row for instance. This creates a more intuitive editing experience for the end users.</li>
<li>All custom fields can be made repeatable.</li>
<li>Non-repeatable custom fields can be fine-tuned with conditional logic to control when they should appear based on the values of other fields.</li>
<li>Meta boxes and custom fields can be added to user profiles.</li>
<li>The equivalence of Pods Templates for Types is called Views. It is not free but certainly a lot more powerful.</li>
</ol>
<p>The limitation of Types based on my experience are:</p>
<ol>
<li>User interface can be a bit tricky to work with.</li>
<li>No custom field of type Relationship.</li>
<li>No way of adding custom fields to custom taxonomies.</li>
</ol>
<h2>Bonus: Advanced Custom Fields plugin</h2>
<p>In cases where I was using Types and needed to use the Relationship-type custom field, I usually resorted to the <a href="https://wordpress.org/plugins/advanced-custom-fields/" target="_blank">Advanced Custom Fields plugin</a>. It may sound like an overkill to use it solely for one purpose but the field provided by Advanced Custom Fields simply has the <a href="http://www.advancedcustomfields.com/resources/relationship/" target="_blank">perfect UI for a relationship-type field</a>. It is also far superior than what Pods provided by default.</p>
<p><div class="full"><img decoding="async" class="size-full wp-image-6495" src="https://stampede-design.com/wp-content/uploads/2015/02/relationship_input.jpg" alt="The perfect UI for a relationship-type field." /><p class="capt_block">The perfect UI for a relationship-type field.</p></div></p>
<p>As a matter fact, Advanced Custom Fields is by far the best custom fields plugin for WordPress. To unlock its full potential you need to purchase the Pro version though.</p>
<h2>Bonus: Codepress Admin Columns plugin</h2>
<p>When you are working with CPTs, the <a href="https://wordpress.org/plugins/codepress-admin-columns/" target="_blank">Codepress Admin Columns</a> plugin is quite simply the icing of the cake for all your hard work. The plugin allows you to customize table columns in the admin landing page of CPTs or any WP&#8217;s native objects. It fulfills a basic need that greatly enhances user experience when working with CPTs in the admin area.</p>
<p><div class="full"><img decoding="async" class="size-full wp-image-6498" src="https://stampede-design.com/wp-content/uploads/2015/02/admin-columns-demo.jpg" alt="WP Admin Columns demo" /><p class="capt_block">Custom table columns FTW!</p></div></p>
<p>Though this plugin has a Pro version, the free one is awesome enough in most cases.</p>
<h2>Conclusion</h2>
<p><a href="https://wordpress.org/plugins/pods/" target="_blank">Pods</a> and <a href="https://wordpress.org/plugins/types/" target="_blank">Types</a> are my two favorite custom post types solutions for WordPress. How I decide between them depends ultimately on individual project requirements but so far I tend to choose Types for complex projects that require post relationship. With a couple of amazing supporting plugins, you&#8217;ll be having a blast working with either anyway.</p>
<p>Have a nice day!</p>
<h3>Update (June 2015)</h3>
<p>For an in-depth look at the features and technical differences between popular WordPress CPT plugins, view this <a href="https://docs.google.com/a/stampede-design.com/spreadsheet/ccc?key=0AoY8IFUX301qdFhBaERLUEUwa3U0YjFYTnBmaU1mbmc#gid=3" target="_blank">awesome comparison matrix spreadsheet</a> by Scott Kingsley Clark and Matt Gibbs.</p>
<p>The post <a href="https://stampede-design.com/blog/wordpress-cpt-solutions-comparison-pods-vs-types/">WordPress CPT Solutions Comparison: Pods vs Types</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/wordpress-cpt-solutions-comparison-pods-vs-types/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>A Leap of Faith: An Interview with Danish Mumtaz from Motopedia</title>
		<link>https://stampede-design.com/blog/motopedia-danish-mumtaz/</link>
					<comments>https://stampede-design.com/blog/motopedia-danish-mumtaz/#respond</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Sun, 30 Nov 2014 18:12:38 +0000</pubDate>
				<category><![CDATA[Conversations]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[malaysia]]></category>
		<category><![CDATA[Motopedia]]></category>
		<guid isPermaLink="false">http://dev.stampedelabs.com/client/v3/wp/?p=6308</guid>

					<description><![CDATA[<p>We recently launched Motopedia, a portal on the latest, unbiased car reviews and comparisons across the UAE and the GCC region. Shaiful Borhan and Zana Fauzi had the chance to talk to Danish Mumtaz, Motopedia's main guy where they gushed about cars &#038; talked about how Danish chanced upon Stampede, before the rest is history.</p>
<p>The post <a href="https://stampede-design.com/blog/motopedia-danish-mumtaz/">A Leap of Faith: An Interview with Danish Mumtaz from Motopedia</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="lead" class="lead">Recently, we launched <a href="http://motopedia.ae/" target="_blank">Motopedia.ae,</a> a portal on the latest, unbiased car reviews and comparisons across the UAE and the GCC region. The fully responsive website includes exciting features like an intelligent search function recommending similar cars based on price range, body types and car class, Google Map integration, Facebook authentication, sharing functions as well as comparison favourites. It was a ride worth being buckled in for.</p>
<p><div class="full"><img decoding="async" class="alignnone wp-image-6266 size-full" src="https://stampede-design.com/wp-content/uploads/2018/02/Danish-Mumtaz-1.jpg" alt="Danish Mumtaz" /></div></p>
<blockquote><p>I took a leap of faith — and decided Stampede it is.</p></blockquote>
<p><div class="full"><img decoding="async" class="alignnone size-full wp-image-6321" src="https://stampede-design.com/wp-content/uploads/2014/11/motopedia-1.jpg" alt="motopedia-1" /></div></p>
<p>Shaiful and Zana had the chance to talk to high-spirited <a href="http://motopedia.ae/about-motopedia/" target="_blank">Danish Mumtaz</a>, Motopedia&#8217;s main guy. We gushed about cars, devised new website plans in the works and talked about how Danish chanced upon Stampede, before the rest is history.</p>
<div>
<ul class="interviewed">
<li class="question"><img decoding="async" class="alignnone wp-image-6057 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-zana.png" alt="zana" />
<div>
<p>Hi Danish, good to have you! How are you doing? Could you tell us about yourself and your role at Motopedia?</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>Hello, you two! I am good, thanks &#8211; how about you?</p>
<p>I am the main man of Motopedia &#8211; I am the guy with ideas! Well, to be official, I am Motopedia&#8217;s Executive Producer as well as the Content Writer. It all started when Alawi and I were discussing on cars  &#8211; we do that a lot, but then we realised there were no <em>video</em> reviews for cars sold in the UAE as well as GCC. It&#8217;s unfortunate because the Saudis love their cars, but they only had to make decisions based on existing print articles or having to watch their favourite cars being driven somewhere in California. These guys, they want the real thing. Branded content is also on the rise &#8211; there are quite a number of Youtube videos doing reviews, and we asked ourselves, why not?</p>
<p>So this is where we see the opportunity &#8211; we have the means, the tools and ultimately the passion, and so Motopedia was born!</p>
</div>
</li>
<li>
<div class="video-container"><iframe loading="lazy" src="https://www.youtube.com/embed/5k-knkvAbT8" width="640" height="360" allowfullscreen></iframe></div>
</li>
<li class="question"><img decoding="async" class="alignnone wp-image-6057 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-zana.png" alt="zana" />
<div>
<p>How did you find out about Stampede? During the proposal process, what made you confident to move forward with Stampede?</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>This is an interesting story.</p>
<p>The first few months when we decided on the idea of Motopedia, we commissioned a small agency to build the website. However, after a few weeks, they probably realised the magnitude of work involved and they could not do it. We were devastated of course, so we were on a search again for the team who could realise Motopedia.</p>
<p>During these months, we contacted a few agencies &#8211; listing down all our requirements and deciding on a number of websites we could base Motopedia on. We were running high and dry. Finally, a UK-based agency replied. The price quoted was a bit too high though, since they decided we should go with a custom content management system (CMS). We were close to agreeing, but then I decided to sleep on it.</p>
<p><div class="full"><img decoding="async" class="wp-image-6314 size-full" src="https://stampede-design.com/wp-content/uploads/2014/11/motopedia-2.jpg" alt="Car comparison within the same class, brand and price range" /> <p class="capt_block">Compare cars or check out Motopedia&#8217;s favourite picks</p></div></p>
<p>I remember the time I was in Malaysia and heard about the rise of digital agencies in Malaysia, and some of them are reputedly to be really good. I did some research and came upon <a href="https://stampede-design.com">Stampede&#8217;s website</a>. I love the design &#8211; it is modern, contemporary and it is easy to navigate &#8211; just how I want the new Motopedia to be. I found Shaza&#8217;s number and gave her a call only to be directed to her voicemail. A few minutes later, she sent me an email — I had no idea how she tracked me <em>(Shaza: I Googled the number!). </em>We exchanged a couple of emails discussing the requirements and she sent me a proposal outlining the scope and plans. The proposal was comprehensive and really reasonable, since now it turns out we could build the website using WordPress.</p>
<p>So now it is between Stampede and this other company.</p>
<p>In the course of us trying to make our decisions, Shaza and Dov have been very transparent and helpful with walking me through the pros and cons of WordPress and custom CMS. Stampede has done both options for clients in the past so they are able to recommend the best-viable solution to us. Both WordPress and custom CMS have their own strengths and weaknesses. However WordPress has come a long way with so many well-developed plugins. It&#8217;s also backed by a huge community of developers. The fact that WordPress is both powerful and versatile allows us to launch the website on time with the features we want. We can also implement more exciting ideas as we go along with all the plugins available for WordPress.</p>
<p>In our case, going fully custom would have been an unnecessary cost and will be similar to reinventing the wheel all over again.</p>
<p>I took a leap of faith — and decided Stampede it is.</p>
</div>
</li>
<li class="question"><img decoding="async" class="alignnone wp-image-6264 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-shaiful.png" alt="shaiful-borhan" />
<div>
<p>Interesting indeed!</p>
<p>So Danish, tell us more about your love affair with cars, how did the spark ignite? Perhaps you used to own a classic car or having involved in backyard car projects or a friend took you for a 250km per hour spin in a supercar?</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>Unfortunately, my man, there is no real life-changing stories about it. <em>(We all chuckled)</em></p>
<p>It was that most of us share a common interest over liking cars. In Dubai, we get to see all types of cars sprinting fast by us and we could not help wondering, how does it feel to get to drive these cars? How different they are from the rest? Who would be interested by them?</p>
<p>These kind of thoughts could lead to a lot of ideas. Even though if one is not interested in luxury cars, you&#8217;d want to give it a test drive just to see how cool it is, you know, like Bugatti or something.</p>
<p><div class="full"><img decoding="async" class="wp-image-5054 size-full" src="https://stampede-design.com/wp-content/uploads/2014/11/motopedia-3.jpg" alt="Car's Summary" /> <p class="capt_block">Sexy, boiled-down stats that matter</p></div></p>
</div>
</li>
<li class="question"><img decoding="async" class="alignnone wp-image-6264 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-shaiful.png" alt="shaiful-borhan" />
<div>
<p>Oh yeah, Bugatti is one sexy beast.</p>
<p>Your latest <a href="https://www.youtube.com/watch?v=CdbqyAqZjdw" target="_blank">Wadi Special video</a> featuring three American 4&#215;4 put through a series of off-road tests kind of reminisce of Top Gear challenge segments. Can we expect more videos shot in a similar style in the future?</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>Probably!</p>
<p>The funny thing is, we never intended for the shoot to turn out like that. Some things coincidentally turned out good, like our chance encounter with Stampede. Also, it seems people have an affinity for a number of friends arguing with each other on-screen &#8211; so yes, expect some similar style in the future!</p>
</div>
</li>
<li>
<div class="video-container"><iframe loading="lazy" src="https://www.youtube.com/embed/CdbqyAqZjdw" width="640" height="360" allowfullscreen></iframe></div>
</li>
<li class="question"><img decoding="async" class="alignnone wp-image-6264 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-shaiful.png" alt="shaiful-borhan" />
<div>
<p>What cars are you looking forward to review in 2015?</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>I think we would be reviewing a number of Mercs and Beemers. Throw in some Fords as well.</p>
<p>We would like to review some American cars apart from German ones, like the 2014 Chrysler 300CC we already have in the reviews. And yes, supercars too &#8211; Porsche 911 or Cayenne. That would be great.</p>
<p><div class="full"><img decoding="async" class="wp-image-5054 size-full" src="https://stampede-design.com/wp-content/uploads/2014/11/motopedia-7.jpg" alt="motopedia" /> <p class="capt_block">Dealership listing by locations and brands</p></div></p>
</div>
</li>
<li class="question"><img decoding="async" class="alignnone wp-image-6264 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-shaiful.png" alt="shaiful-borhan" />
<div>
<p>Sweet! Looking forward!</p>
<p>The people of UAE certainly love their cars. Based on your experience, what are Emiratis favorite subjects when it comes to &#8220;car-talk&#8221; besides price tags? For example, here in Malaysia potential car owners tend to talk a lot about resale values and after sales services.</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz"  />
<div>
<p>The truth is, after a certain price point, after sales service and resales are not much of higher importance.</p>
<p>I have a friend in London who just bought a <a href="http://www.landrover.co.uk/vehicles/range-rover/vogue/index.html">Range Rover Vogue</a>. This is a smart SUV, excellent for both off-road capability and on-road handling &#8211; superior in many ways. Its monthly petrol bill could reach USD700, this is not including the roadtax and other maintenance bills for the car. Was he concerned? <em>No</em>, because he is driving a Rover in Central London!</p>
<p>Based on my experience, I guess the certain price point where people would talk about resale values  is about USD100,000. After that, people do not seem to mind anymore if they could spend more on that.</p>
</div>
</li>
<li class="question"><img decoding="async" class="alignnone wp-image-6057 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-zana.png" alt="zana"  />
<div>
<p>So, what sort of features can Motopedia fans expect soon in the website?</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>Well, as we all know, we are currently working with you on the cars comparison page. Users can add up till four cars in the same page side-by-side and compare the criteria based on its performance, interior, safety details and many more. Users can also save the comparisons in PDF format and also share with friends over social media. We are very excited to get it launched this week.</p>
<p>I was also thinking of putting up a page for deals, something like Groupon, but specifically for cars.</p>
<p>We are working with a number of small automotive businesses in the area at the moment. It would be good if we could help them promote their businesses by aggregating car-related deals every week &#8211; for example, for car polish, maintenance, window tinting, car wash and many more.</p>
</div>
</li>
<li class="question"><img decoding="async" class="alignnone wp-image-6057 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-zana.png" alt="zana" />
<div>
<p>Sounds great! Let us know if you need our help!</p>
<p>Final question &#8211; which features do you love best in the current Motopedia website?</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish" />
<div>
<p>How many am I allowed? Because I think I love everything!</p>
<p><div class="full"><img decoding="async" class="wp-image-5054 size-full" src="https://stampede-design.com/wp-content/uploads/2014/11/motopedia.jpg" alt="Motopedia.ae is fully responsive so give it a spin on your tablet and mobile" /> <p class="capt_block">Motopedia.ae is fully responsive so give it a spin on your tablet and mobile</p></div></p>
<p>First, of course I love the design. It&#8217;s elegant, it&#8217;s straightforward and best of all, it works wonderfully. Everything is laid out in the homepage &#8211; the dealers search, the video reviews, the search functions, everything. It might seem impossible to fit everything you need on one page by itself, but Stampede did it.</p>
<p>Of course, the search function. It works just how it should be, it predicts very well and it&#8217;s intuitive. Just a few letters in while searching and it is suggesting some results for us. Brilliant one, Shaiful.</p>
<p><div class="full"><img decoding="async" class="wp-image-6318 size-full" src="https://stampede-design.com/wp-content/uploads/2014/11/motopedia-6.jpg" alt="motopedia-6" /> <p class="capt_block">Search and filter interface for greater comparison control</p></div></p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6264 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-shaiful.png" alt="shaiful-borhan" />
<div>
<p>Thanks!</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>The website is also easy to maintain, since it is on WordPress. My boys had no hard time learning on how to use the platform. Just a few clicks and it&#8217;s up. Easy-peasy.</p>
<p>Finally, more so about the features, it&#8217;s about the team. Stampede has been really supportive from the beginning &#8211; from the requirements stage, proposal, design, programming, project management &#8211; all the way till launch. The post-launch support has been so unbelievably amazing too. Even now, Stampede continues to share exciting ideas and best practices for us to take Motopedia to a greater degree than it already is.</p>
<p>Superb job, everyone.</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6057 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-zana.png" alt="zana" />
<div>
<p>Thank you Danish, from all of us at Stampede!</p>
<p>And thank you again, for making time for us. It had been such a pleasure to talk to you, and to be able to work with you and Motopedia team.</p>
<p>All around, a great team we both make!</p>
</div>
</li>
<li><img decoding="async" class="alignnone wp-image-6263 size-full" src="https://stampede-design.com/wp-content/uploads/2017/06/bubble-danish.png" alt="danish-mumtaz" />
<div>
<p>Couldn&#8217;t agree more! Talk to you both later.</p>
</div>
</li>
</ul>
<p>Go ahead and check out the nifty features on <a href="http://motopedia.ae/" target="_blank">Motopedia.ae</a>.</p>
<p>You may also follow their <a href="https://www.facebook.com/motopediauae" target="_blank">Facebook</a>, <a href="https://twitter.com/motopediauae" target="_blank">Twitter</a> &amp; <a href="https://plus.google.com/b/109789932119176246608/+MotopediaAe/posts" target="_blank">Google+</a> for frequently updated information on car reviews and tips.</p>
</div>
<p>The post <a href="https://stampede-design.com/blog/motopedia-danish-mumtaz/">A Leap of Faith: An Interview with Danish Mumtaz from Motopedia</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/motopedia-danish-mumtaz/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>World Cup 2014: The Talk</title>
		<link>https://stampede-design.com/blog/world-cup-2014-talk/</link>
					<comments>https://stampede-design.com/blog/world-cup-2014-talk/#respond</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Sun, 13 Jul 2014 09:54:34 +0000</pubDate>
				<category><![CDATA[Inside Stampede]]></category>
		<category><![CDATA[football]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[inside stampede]]></category>
		<category><![CDATA[team culture]]></category>
		<category><![CDATA[world cup]]></category>
		<guid isPermaLink="false">https://stampede-design.com/blog/?p=5506</guid>

					<description><![CDATA[<p>Stampede's biggest football fans, Iwan and Shaiful enthusiastically relay the highlights for the FIFA World Cup 2014. It's Argentina vs Germany tonight. Who do you root for?</p>
<p>The post <a href="https://stampede-design.com/blog/world-cup-2014-talk/">World Cup 2014: The Talk</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="lead" class="lead">It is here again. It is hard to doubt that The FIFA World Cup is the quadrennial event everybody looks forward to. Whether you are a football fan or not, the passion is just infectious. Held in Brazil, the largest country in both South America and the Latin American region this year, it was voted as <a href="http://www.bbc.com/sport/0/football/28268842" target="_blank">the greatest World Cup ever in the tournament&#8217;s history by BBC Sport readers</a>.</p>
<p><div class="full"><img loading="lazy" decoding="async" width="492" height="295" class="alignnone size-full wp-image-5511" src="https://stampede-design.com/wp-content/uploads/2014/07/Brazil-v-Germany-Semi-Fin-011.jpg" alt="Brazil v Germany: Semi Final - 2014 FIFA World Cup Brazil" srcset="https://stampede-design.com/wp-content/uploads/2014/07/Brazil-v-Germany-Semi-Fin-011.jpg 492w, https://stampede-design.com/wp-content/uploads/2014/07/Brazil-v-Germany-Semi-Fin-011-300x180.jpg 300w" sizes="(max-width: 492px) 100vw, 492px" /></div></p>
<p>Here are some highlights from the eyes of Stampede&#8217;s two biggest football fans, Iwan and Shaiful.</p>
<h2>Iwan</h2>
<h3>Most High Tech World Cup</h3>
<p><div class="full"><img loading="lazy" decoding="async" width="460" height="276" class="size-full wp-image-5530" src="https://stampede-design.com/wp-content/uploads/2014/07/GoalControl-watch-009.jpg" alt="Goal Control Watch" srcset="https://stampede-design.com/wp-content/uploads/2014/07/GoalControl-watch-009.jpg 460w, https://stampede-design.com/wp-content/uploads/2014/07/GoalControl-watch-009-300x180.jpg 300w" sizes="(max-width: 460px) 100vw, 460px" /><p class="capt_block">Referees will have GoalControl watches in Brazil. Photograph: Wolfgang Rattay/Reuters</p></div></p>
<p>This is the first World Cup featuring <a href="http://www.theguardian.com/technology/2014/jun/16/world-cup-goalline-technology-football-brazil-2014" target="_blank">goalline technology that helps deciding the goal</a>. FIFA approved 4 kind of goalline technology to be use in World Cup 2014. They involve camera and chips embedded in the ball itself which uses the magnetic field sensor for detecting goals. While using camera is just as simple as watching replay, embedded chips come quite handy as well. FIFA also equipped referees with smartwatches that not only tell time, but will buzz when the ball crosses the line.</p>
<p>Another high tech gadgets is the ball itself. <a href="http://www.adidas.co.uk/brazuca" target="_blank">&#8220;Brazuca&#8221;</a> is designed from scratch, thanks to 2010&#8217;s &#8220;Jabulani&#8221; failure.</p>
<h3>Luis Suarez&#8217;s Choppers Strike Again</h3>
<p>Looks like he didn&#8217;t learn from the past because Luiz Suarez bit again. Doing the offence for the third time this time, Suarez decided to bite on Italian defender, Giorgio Chiellini&#8217;s shoulder. While no actions were taken on the field, he was found guilty by FIFA and currently serving a ban for nine Uruguay matches and from all football activities for four months. <a href="http://www.bbc.com/sport/0/football/28099336" target="_blank">He also apologised for the bite</a>. Despite this biting saga <a href="http://www.liverpoolfc.com/news/latest-news/166178-lfc-statement-suarez-to-leave" target="_blank">Barcelona still signed him from Liverpool</a> with a fee believed to be staggering 80 million euros. That&#8217;s 14 million less than Real Madrid paid for Christiano Ronaldo&#8217;s signature on June 2009. Crazy!</p>
<h3>Neymar Jr&#8217;s injury</h3>
<p>There is no doubt Neymar was Brazil&#8217;s best player throughout the World Cup 2014. Unfortunately, during the game where Brazil played against Colombia on quarter final, Colombian defender Juan Zuniga kneed Neymar&#8217;s back within the last 2 minutes. Nobody expected the worst. He was seen sobbing soon after, complaining to fellow teammate and defender Marcelo that he could not feel his leg. <a href="http://metro.co.uk/2014/07/11/brazils-neymar-admits-paralysis-fear-after-juan-zuniga-challenge-4795182/" target="_blank">Nursing a broken vertebra</a>, that was the end of his journey for World Cup 2014.</p>
<h3>New Scoring Record</h3>
<p>There are several records broken during World Cup 2014. On top of the order is World Cup&#8217;s all-time leading scorer. Owned by Brazil&#8217;s Ronaldo previously with 15 goals, the Germany veteran, 36 years old Miroslav Klose surpassed him by scoring his 16th goal when Germany defeated Brazil by 7-1 on the semifinal. His own teammate, 24 years old Thomas Müller also make the top ten by 10 goals.</p>
<p>Both have one more game to play on this World Cup &#8211; the grand finale &#8211; the one we all look forward to.</p>
<h2>Shaiful</h2>
<h3>Spain&#8217;s Early Exit</h3>
<p>They say the bigger you are, the harder you fall. The demise of defending champion and two consecutive European cup holder Spain marked the end of an era for Spanish football. No doubt they still have the same &#8216;dream team&#8217; lineup on paper but it&#8217;s just not working on the pitch anymore this time. The rise and fall of a golden era is not uncommon in the football world with France as another good example. Anyhow, credit where it&#8217;s due, they held it for 5 years and boy, were they invincible!</p>
<h3>Brazil &amp; Germany Making It To The Final Leg</h3>
<p>This is a trend that we don&#8217;t expect to end anytime soon. For every generation of players, these two teams would consistently make it to the playoffs. The squads &#8216;star power&#8217; may not be as intimidating as Spain or England but they certainly have proven over and over again that they can score goals. The Germans fielded mostly similar faces from the last world cup except now they have matured and really mean business. And despite Brazil&#8217;s scorching unearthly defeat by Germany in the semi, we know that it will always be the greatest football nation in the world.</p>
<p>(Update: Brazil, the host team was convincingly beaten by the Dutch in the third-place playoff yesterday.)</p>
<h2>It&#8217;s GER vs ARG tonight. Who are you rooting for?</h2>
<p>The post <a href="https://stampede-design.com/blog/world-cup-2014-talk/">World Cup 2014: The Talk</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/world-cup-2014-talk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Generating TaffyDB Data File from Google Sheets</title>
		<link>https://stampede-design.com/blog/generating-taffydb-data-file-from-google-sheets/</link>
					<comments>https://stampede-design.com/blog/generating-taffydb-data-file-from-google-sheets/#comments</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Wed, 30 Apr 2014 17:20:20 +0000</pubDate>
				<category><![CDATA[Field Notes]]></category>
		<category><![CDATA[data tools]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[google sheets]]></category>
		<category><![CDATA[taffydb]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://stampede-design.com/blog/?p=5127</guid>

					<description><![CDATA[<p>Shaiful shares some cool coding tricks using Google App Scripts for converting tabular data from Google Sheets to the format understood by a Javascript database called TaffyDB.</p>
<p>The post <a href="https://stampede-design.com/blog/generating-taffydb-data-file-from-google-sheets/">Generating TaffyDB Data File from Google Sheets</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="lead"><em>A little introduction</em>; in one of our most recent Shopify customization projects involving a store selling Subaru vehicle parts, the client wanted to have a cascading dropdown list to filter the products displayed to the user based on the vehicle selected.</p>
<p><div class="full"><img loading="lazy" decoding="async" width="306" height="337" src="https://stampede-design.com/wp-content/uploads/2014/05/Screenshot_on_5.2.2014_at_4.22.10_PM.png" alt="Cascading dropdown list" class="size-full wp-image-5132" srcset="https://stampede-design.com/wp-content/uploads/2014/05/Screenshot_on_5.2.2014_at_4.22.10_PM.png 306w, https://stampede-design.com/wp-content/uploads/2014/05/Screenshot_on_5.2.2014_at_4.22.10_PM-272x300.png 272w" sizes="(max-width: 306px) 100vw, 306px" /><p class="capt_block">The requirement: Cascading dropdown list</p></div></p>
<p>This being on Shopify, the only way to code this custom feature is by getting creative with Javascript. It was then when I discovered about <a href="http://www.taffydb.com" target="_blank">TaffyDB</a> as the medium to store the 100+ odd rows of vehicle data. I played around with some hard-coded sample data using TaffyDB (and jQuery) and managed to get the cascading dropdown to work properly in Shopify. <em>Perhaps the steps can be outlined in another blog post.</em></p>
<p>Now we move on to the main gist of this post. The client had the vehicle data populated nicely in Google Sheets. My next big task was to reformat these data to a TaffyDB-compatible data file. Below is a snapshot of the Google Sheet and the corresponding TaffyDB data, which is essentially a JS array of objects. The cool part is to automate this conversion process.</p>
<p><div class="full"><a href="https://stampede-design.com/wp-content/uploads/2014/05/Screenshot_on_5.2.2014_at_4.13.06_PM.png" class="thickbox"><img decoding="async" src="https://stampede-design.com/wp-content/uploads/2014/05/Screenshot_on_5.2.2014_at_4.13.06_PM-500x142.png" alt="Sample data in Google Sheet." class="size-blog_post_full wp-image-5151" /></a><p class="capt_block">Sample data in Google Sheet (click to enlarge)</p></div></p>
<pre class="brush: jscript; title: ; notranslate">
var car = TAFFY(&#x5B;
{year:&quot;2002&quot;, make:&quot;Subaru&quot;, model:&quot;WRX&quot;, trim:&quot;Sedan&quot;, bolt:&quot;5x100&quot;, e_family:&quot;EJ&quot;, e_code:&quot;EJ20&quot;}, 
{year:&quot;2002&quot;, make:&quot;Subaru&quot;, model:&quot;WRX&quot;, trim:&quot;Wagon&quot;, bolt:&quot;5x100&quot;, e_family:&quot;EJ&quot;, e_code:&quot;EJ20&quot;}, 
{year:&quot;2003&quot;, make:&quot;Subaru&quot;, model:&quot;WRX&quot;, trim:&quot;Sedan&quot;, bolt:&quot;5x100&quot;, e_family:&quot;EJ&quot;, e_code:&quot;EJ20&quot;}, 
{year:&quot;2003&quot;, make:&quot;Subaru&quot;, model:&quot;WRX&quot;, trim:&quot;Wagon&quot;, bolt:&quot;5x100&quot;, e_family:&quot;EJ&quot;, e_code:&quot;EJ20&quot;}
]);
</pre>
<p>Enter <a href="https://developers.google.com/apps-script/quickstart/macros" target="_blank">Google Apps Script</a>. This tool is a godsend because it allows you to use Javascript to programmatically manipulate data in your spreadsheet. To access Google Apps Script in Google Sheets, go to <i>Tools -&gt; Script Editor</i>.</p>
<p>After going through a few tutorials, I managed to come out with a fairly decent code for performing this conversion process.</p>
<pre class="brush: jscript; title: ; notranslate">
/**
 * Retrieves all the rows in the active spreadsheet that contain data and generate a TaffyDB data array from it
 */
function readRows() {
  var sheet = SpreadsheetApp.openById('SPREADSHEET_ID_HERE').getActiveSheet();   // The value of key= variable in the URL
  
  // This represents ALL the data
  var range = sheet.getRange(5, 1, 1000, 20);   // Starts reading from row #5 column #1 (cell A5). Read as far as 1000 rows and 20 columns (for future data entries).
  var values = range.getValues();
  var output = '';
  var index = &#x5B;];
  var row_array = &#x5B;];
  var row = &quot;&quot;;
  
  // The main loop that goes through each cell within the selected range. i is row, j is column
  for (var i in values) {
    var cell_array = &#x5B;];
    for (var j in values&#x5B;i]) {
      if(i == 0) {   // i == 0 is row #5, this is the column variable name
        if (values&#x5B;i]&#x5B;j]) {
          index.push(values&#x5B;i]&#x5B;j]);
        }        
      } else {   // car data starts at row #7 onwards
        if (values&#x5B;i]&#x5B;j]) {
          cell_array.push(index&#x5B;j] + ':&quot;' + values&#x5B;i]&#x5B;j] + '&quot;');   // compose the car data cell by cell for the current row
        }
      }
      
    }
    
    if(i &gt; 0) {
     if(cell_array.length &gt; 0) {
        row = cell_array.join(', ');   // join the individual cells car data for the current row with commas to form a complete row data
        row_array.push(row);
      }
    }
    
  }
  
  output = row_array.join('}, n{');   // join the individual rows with curly braces and commas to form a complete database

  output = 'var car = TAFFY(&#x5B;{' + output + '}]);';   // finalizing the TaffyDB format
  
  Logger.log(output);
  //return output;
};
</pre>
<p>To test this code out, simply enter your spreadsheet ID in line 5 and change the range number accordingly in line 8. The <em>Logger.log</em> command in line 44 is used for testing the output in the script editor console. In the production version, I have a few more extra codes to add a dropdown menu in the Google Sheets UI that users can click to download the updated TaffyDB JS data file and then simply drop it into Shopify.</p>
<p>The post <a href="https://stampede-design.com/blog/generating-taffydb-data-file-from-google-sheets/">Generating TaffyDB Data File from Google Sheets</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/generating-taffydb-data-file-from-google-sheets/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Add Product Sash/Ribbon in BigCommerce Using jQuery</title>
		<link>https://stampede-design.com/blog/add-product-sash-ribbon-in-bigcommerce-using-jquery/</link>
					<comments>https://stampede-design.com/blog/add-product-sash-ribbon-in-bigcommerce-using-jquery/#comments</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Mon, 23 Sep 2013 16:48:03 +0000</pubDate>
				<category><![CDATA[Field Notes]]></category>
		<category><![CDATA[bigcommerce]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[front-end development]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://stampede-design.com/blog/?p=4472</guid>

					<description><![CDATA[<p>Shaiful understands product sashes are a nice touch for e-commerce websites, hence he is here to show you how to have it done.</p>
<p>The post <a href="https://stampede-design.com/blog/add-product-sash-ribbon-in-bigcommerce-using-jquery/">Add Product Sash/Ribbon in BigCommerce Using jQuery</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Product sashes like On Sale, Bestseller and Sold Out are certainly a nice touch for any e-commerce websites, aesthetically as well as providing a positive user experience.</p>
<p><div class="full"><img loading="lazy" decoding="async" width="655" height="259" src="https://stampede-design.com/wp-content/uploads/2013/06/28-6-2013-12-20-53-AM.jpg" alt="Sample of product sashes." class="size-full wp-image-4268" srcset="https://stampede-design.com/wp-content/uploads/2013/06/28-6-2013-12-20-53-AM.jpg 655w, https://stampede-design.com/wp-content/uploads/2013/06/28-6-2013-12-20-53-AM-300x119.jpg 300w" sizes="(max-width: 655px) 100vw, 655px" /><p class="capt_block">Sample of product sashes.</p></div></p>
<p>In BigCommerce, exclusive product sash features are not built-in but they can be added using some clever jQuery tricks. Specifically, we need to tell jQuery to read the page for certain &#8220;triggers&#8221; or &#8220;conditions&#8221; and show the appropriate sash based on them. The key to product sashes is they have to appear in product listing pages (like category, homepage, search result) and the product details page. This means the &#8220;triggers&#8221; have to be present in all these pages for jQuery to detect.</p>
<h2>On Sale Sash</h2>
<p>In the following example, I am going to show how to add the most common of all product sashes, On Sale. Firstly, we need to set the discounted price for the appropriate products. If this was done right, the products will show up in the shop with a strike-through line on their original retail price. This element will become the &#8220;trigger&#8221; for the On Sale sash. So we just have to tell jQuery, if this element exists, show the On Sale sash. Below are Javascript codes for the category and product details pages.</p>
<h4>Product Category Page</h4>
<pre class="brush: jscript; title: ; notranslate" class="lead">
$(&quot;#CategoryContent .ProductList li .RetailPriceValue&quot;).each(function( index ) {
   $(this).parents('li').find('.ProductImage').append('&lt;img src=&quot;http://myshopurl.com/path_to_image/on-sale.png&quot; class=&quot;product-sash&quot; alt=&quot;On Sale&quot; /&gt;');
});
</pre>
<h4>Product Details Page</h4>
<pre class="brush: jscript; title: ; notranslate">
if($('.DetailRow.RetailPrice').is(':visible')) {
   $('.ProductThumbImage .zoomPad').append('&lt;img src=&quot;http://myshopurl.com/path_to_image/on-sale.png&quot; class=&quot;product-sash&quot; alt=&quot;On Sale&quot; /&gt;');
}
</pre>
<h2>Any Miscellaneous Sashes</h2>
<p>A slightly trickier scenario is to show product sashes like Bestseller and New, which we don&#8217;t really have a way to configure via the BC admin. Even though BC has product tags and custom fields, these data don&#8217;t show up in the product category pages. Fortunately, we have something else to use, the main image alternate text. In BC admin, it&#8217;s the Description box of the main product image. You need to enter a unique identifying keyword in the Description box and thanks to jQuery, reading the presence of this keyword is a breeze. This method will allow you to show any kinds of product sashes.</p>
<p><div class="full"><img loading="lazy" decoding="async" width="754" height="420" src="https://stampede-design.com/wp-content/uploads/2013/09/bc_admin_image_desc.png" alt="Enter the keyword into the Description field of the main image." class="size-full wp-image-4490" srcset="https://stampede-design.com/wp-content/uploads/2013/09/bc_admin_image_desc.png 754w, https://stampede-design.com/wp-content/uploads/2013/09/bc_admin_image_desc-300x167.png 300w" sizes="(max-width: 754px) 100vw, 754px" /><p class="capt_block">Enter the keyword into the Description field of the main image.</p></div></p>
<p>For showing a Bestseller sash, enter the keyword <em>Bestseller</em>. I personally prefer to enter the actual product name followed by the keyword to keep the semantics right, like <em>5ft Christmas Tree &#8211; Bestseller</em>. Here&#8217;s the code for showing the Bestseller product sash.</p>
<h4>Product Category Page</h4>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#CategoryContent .ProductList li .ProductImage a img&#x5B;alt*='Bestseller']&quot;).each(function( index ) {
   $(this).parents('li').find('.ProductImage').append('&lt;img src=&quot;http://myshopurl.com/path_to_image/best-seller.png&quot; class=&quot;product-sash&quot; alt=&quot;Bestseller&quot; /&gt;');
});
</pre>
<h4>Product Details Page</h4>
<pre class="brush: jscript; title: ; notranslate">
if(ProductImageDescriptions&#x5B;0] &amp;&amp; ProductImageDescriptions&#x5B;0].indexOf(&quot;Bestseller&quot;) &gt;= 0) {
   $('.ProductThumbImage .zoomPad').append('&lt;img src=&quot;http://myshopurl.com/path_to_image/best-seller.png&quot; class=&quot;product-sash&quot; alt=&quot;Bestseller&quot; /&gt;');
}
</pre>
<p>The examples I provide here only contain the necessary jQuery code snippets to make the product sash works. It&#8217;s not really a step-by-step beginners tutorial. You would need CSS to style the product sash nicely. Don&#8217;t forget about the sash graphics too, they are transparent PNGs. I can also foresee that my codes are totally template-dependent. However, if you are familiar with jQuery selectors I am sure you will be able to understand the gist and tweak the codes accordingly to fit your templates. </p>
<p>Give it a try and post your feedback below!</p>
<p>The post <a href="https://stampede-design.com/blog/add-product-sash-ribbon-in-bigcommerce-using-jquery/">Add Product Sash/Ribbon in BigCommerce Using jQuery</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/add-product-sash-ribbon-in-bigcommerce-using-jquery/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
			</item>
		<item>
		<title>Curating Curated!</title>
		<link>https://stampede-design.com/blog/curating-curated/</link>
					<comments>https://stampede-design.com/blog/curating-curated/#respond</comments>
		
		<dc:creator><![CDATA[Shaiful Borhan]]></dc:creator>
		<pubDate>Thu, 18 Jul 2013 18:49:51 +0000</pubDate>
				<category><![CDATA[Inside Stampede]]></category>
		<category><![CDATA[creative community]]></category>
		<category><![CDATA[Curated]]></category>
		<category><![CDATA[design curation]]></category>
		<category><![CDATA[inside stampede]]></category>
		<category><![CDATA[inspiration]]></category>
		<guid isPermaLink="false">https://stampede-design.com/blog/?p=4327</guid>

					<description><![CDATA[<p>Our own design microblog Curated turned one last week! Wan shares his experience handpicking the inspiring bits that made it to the blog.</p>
<p>The post <a href="https://stampede-design.com/blog/curating-curated/">Curating Curated!</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Last week, our very own <a href="http://curated.stampede-design.com" target="_blank">Curated </a>, a microblog of &#8220;a list of stuffs that caught our eyes, updated daily from the design desk of Stampede&#8221;, <a href="https://www.facebook.com/photo.php?fbid=459341104161957&amp;set=a.158507674245303.34591.145552572207480&amp;type=1">turned one</a>. I had never been any prouder to be one of the most frequent, if not, the sole contributor to this blog. As of date, I have almost 300 posts since my first time handling <a href="http://curated.stampede-design.com" target="_blank">Curated</a>, where every post is specifically hand-picked.</p>
<p><div class="full"><img loading="lazy" decoding="async" width="720" height="720" class="alignnone size-full wp-image-6055" src="https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1.jpg" alt="Curated is 1" srcset="https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1.jpg 720w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-150x150.jpg 150w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-300x300.jpg 300w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-95x94.jpg 95w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-32x32.jpg 32w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-50x50.jpg 50w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-64x64.jpg 64w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-96x96.jpg 96w, https://stampede-design.com/wp-content/uploads/2013/07/1069163_459341104161957_54720197_n1-128x128.jpg 128w" sizes="(max-width: 720px) 100vw, 720px" /></div></p>
<h2>Personal favourites</h2>
<p><div class="full"><img loading="lazy" decoding="async" width="498" height="691" class="size-full wp-image-4339" src="https://stampede-design.com/wp-content/uploads/2018/02/tumblr_mf2yiqWmPm1ralyldo1_500.jpg" alt="metamorphosen behance" /><p class="capt_block">Metamorphosen by Austrian studio atelier olschinsky</p></div></p>
<p>This illustration piece called <a href="http://curated.stampede-design.com/post/37987342779/metamorphosen" target="_blank">Metamorphosen</a> looks like how an array of emotions would look like.</p>
<p><div class="full"><img loading="lazy" decoding="async" width="498" height="788" class="size-full wp-image-4343" src="https://stampede-design.com/wp-content/uploads/2018/02/tumblr_mfpm1aLpXF1ralyldo1_500.jpg" alt="Wallnado" /><p class="capt_block">Change it! (aka Wallnado) by Russian designer Amirko</p></div></p>
<p><a href="http://curated.stampede-design.com/post/38980550054/change-it" target="_blank">The walls</a> allow us to change the colours according to our moods, as we all know how colour has a huge impact with our feelings. Feeling a little blue? Change it blue!</p>
<p><div class="full"><img decoding="async" class="" src="https://25.media.tumblr.com/5b0f85b331dc51178a49e74ab930fda8/tumblr_mhpx10woQw1ralyldo1_500.gif" alt="string theory" width="500" height="" /><p class="capt_block">String Theory by German designer Federico Leggio</p></div></p>
<p>Stare at the <a href="http://curated.stampede-design.com/post/42305515281/string-theory" target="_blank">text </a>long enough and you&#8217;ll feel like you&#8217;re in it. Try moving left and right repeatedly.</p>
<p><div class="full"><img loading="lazy" decoding="async" width="498" height="637" class="size-full wp-image-4347" src="https://stampede-design.com/wp-content/uploads/2018/02/tumblr_mjxhk0K4EG1ralyldo1_500.jpg" alt="Kwang Ho Shin" /><p class="capt_block">Painting by Korean artist Kwang Ho Shin</p></div></p>
<p><a href="https://en.wikipedia.org/wiki/Shin_Kwangho" target="_blank">Kwang Ho Shin</a> is one of my favourite artists &#8211; how haunting is this piece of portrait?</p>
<p><div class="full"><img loading="lazy" decoding="async" width="498" height="378" class="size-full wp-image-4349" src="https://stampede-design.com/wp-content/uploads/2018/02/tumblr_mlth84hQ7Q1ralyldo1_500.jpg" alt="Matt Molloy" /><p class="capt_block">Smeared Skies Made from Hundreds of Stacked Photographs by Matt Molloy</p></div></p>
<p>Last but not least is a shot from <a href="http://curated.stampede-design.com/post/48856326066/timestack-photographs-by-matt-molloy" target="_blank">Matt Molloy</a> of a smeared skies made with hundreds of stacked photographs.</p>
<h2>To conclude&#8230;</h2>
<p>Over the past year, <a href="http://curated.stampede-design.com" target="_blank">Curated</a> has been my platform for my own daily designs inspiration dose. It started as an assignment for me to look for a few design-related posts in a daily basis &#8211; from photography, fine arts, digital designs, even to hand drawing sketches. Little did I know that over all this time, the blog has grown to be some sort of my own measurement scale to train my eyes to spot good design and their trends. Whenever I looked through the older posts, I could see the progress of how much my penchant for design has matured. After a while now, I get really picky on what posts to curate.</p>
<p>Is there anything in particular you would like me to cover in <a href="http://curated.stampede-design.com" target="_blank">Curated</a>?</p>
<p>The post <a href="https://stampede-design.com/blog/curating-curated/">Curating Curated!</a> appeared first on <a href="https://stampede-design.com">Stampede: the strategic design &amp; technology company</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stampede-design.com/blog/curating-curated/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
