{"id":383,"date":"2018-07-16T08:48:23","date_gmt":"2018-07-16T13:48:23","guid":{"rendered":"http:\/\/kwnpsa.ca\/?p=383"},"modified":"2018-07-23T14:46:59","modified_gmt":"2018-07-23T19:46:59","slug":"2018-07-web-stores-and-shopping-carts","status":"publish","type":"post","link":"https:\/\/kwnpsa.ca\/index.php\/2018\/07\/16\/2018-07-web-stores-and-shopping-carts\/","title":{"rendered":"2018 07 Web Stores and Shopping Carts"},"content":{"rendered":"<h3><strong>Location: <\/strong><a href=\"https:\/\/www.openstreetmap.org\/way\/43250610#map=19\/43.46646\/-80.54515\">Room 1301 &#8212; Conrad Grebel University College,140 Westmount Rd. N. \u00b7 Waterloo, ON N2L 3G6<\/a><br \/>\n<strong>Date:<\/strong> Monday, July 16, 2018<br \/>\n<strong>Time:<\/strong> 7:00-9:00PM<\/h3>\n<p>Does your NonProfit organization sell things? Does it provide paid services? Do you need a web presence for your sales? Will you need a separate server for your web store? Or can you add a shopping cart to your existing web site? Or is it better to outsource all online commerce?<\/p>\n<p>Meet our guest speaker Sam Nabi, developer of Shopkit (<a class=\"link\" title=\"https:\/\/shopkit.samnabi.com\/\" href=\"https:\/\/shopkit.samnabi.com\/\" target=\"__blank\">https:\/\/shopkit.samnabi.com\/<\/a>) and let&#8217;s discuss what a System Administrator needs to join a NonProfit organization to the world of web commerce.<\/p>\n<p>&#8211;Marc Par\u00e9 &amp; Bob Jonkman<\/p>\n<h4><span id=\"Resources\" class=\"mw-headline\">Resources<\/span><\/h4>\n<ul>\n<li><a class=\"external text\" href=\"https:\/\/shopkit.samnabi.com\/\" rel=\"nofollow\">Shopkit by Sam Nabi<\/a><\/li>\n<li><a class=\"external text\" href=\"https:\/\/www.techsoupcanada.ca\/en\/shopify-donation-for-lower-budget-organizations\/product\/advanced-shopify-plan-6-month-initial-subscr\" rel=\"nofollow\">Shopify from TechSoup Canada<\/a><\/li>\n<\/ul>\n<h4><span id=\"Meeting_Notes\" class=\"mw-headline\">Meeting Notes<\/span><\/h4>\n<h5><span id=\"Introductions\" class=\"mw-headline\">Introductions<\/span><\/h5>\n<ul>\n<li>Where is everyone coming from? Sam Nabi will tailor his tour to our needs.\n<ul>\n<li>Nonprofit org wants online registrations with payment<\/li>\n<li>Bookseller<\/li>\n<li>Online donations<\/li>\n<li>Goods and Services<\/li>\n<li>Media Production (rental of cameras, lights, &amp;c)<\/li>\n<\/ul>\n<\/li>\n<li>People want to make things easier for sellers and buyers<\/li>\n<\/ul>\n<ul>\n<li>Sam started as a city planner, moved to a startup doing web development\n<ul>\n<li>Then, Sam bought a retail store, <a class=\"external text\" href=\"https:\/\/www.fullcirclefoods.ca\/\" rel=\"nofollow\">Full Circle Foods<\/a><\/li>\n<li>&#8230;the inherited system is a series of linked spreadsheets\u00a0:\/<\/li>\n<li>Full Circle Foods has 90 suppliers. Seems a lot, but many are small, local businesses<\/li>\n<li>Lots to be done digitizing the order system of Full Circle Foods<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h5><span id=\"Shopkit\" class=\"mw-headline\">Shopkit<\/span><\/h5>\n<ul>\n<li><a class=\"external free\" href=\"https:\/\/github.com\/samnabi\/shopkit\" rel=\"nofollow\">https:\/\/github.com\/samnabi\/shopkit<\/a><\/li>\n<li>Plugin for CMS called &#8220;Kirby&#8221; <a class=\"external free\" href=\"https:\/\/getkirby.com\/\" rel=\"nofollow\">https:\/\/getkirby.com\/<\/a><\/li>\n<li>Sam sells code for other developers to use on their websites\n<ul>\n<li>Doesn&#8217;t want to deal with the actual credit card processing<\/li>\n<li>Or poor installations by those developers<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Self-hosted PHP-based solution\n<ul>\n<li>Sold as a subscription service<\/li>\n<li>Sam would hold the code and provides the online webhosting<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Using <a class=\"external text\" href=\"https:\/\/stripe.com\/ca\" rel=\"nofollow\">Stripe<\/a> and <a class=\"external text\" href=\"https:\/\/squareup.com\/ca\" rel=\"nofollow\">Square<\/a><\/li>\n<\/ul>\n<ul>\n<li>Sample sites:\n<ul>\n<li>an indiegogo type site: <a class=\"external free\" href=\"https:\/\/coblisher.com\/shop\" rel=\"nofollow\">https:\/\/coblisher.com\/shop<\/a><\/li>\n<li>retail business: <a class=\"external free\" href=\"http:\/\/gourmetpassions.ca\/kirby\" rel=\"nofollow\">http:\/\/gourmetpassions.ca\/kirby<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Sam provides the code, and can work it into the design of an existing web page<\/li>\n<\/ul>\n<ul>\n<li>Had an idea to pool resources for pooled shipping, delivery, advertising\n<ul>\n<li>(not sure if this is a feature of ShopKit &#8211;Bob.)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Sam is part of the Kirby CMS community\n<ul>\n<li>Didn&#8217;t have an ecommerce plugin, but there was an appetite for it<\/li>\n<li>Working over three years to develop Shopkit with the Kirby developers<\/li>\n<li>Kirby is a file-based PHP CMS (we like that)\n<ul>\n<li>Files are written in Markdown, still accessible if Web connection goes down<\/li>\n<li>But there is a good GUI as well (good for marketers)<\/li>\n<li>UI is decoupled from the data<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Sam gives a quick tour of a sample installation on GitHub\n<ul>\n<li><a class=\"external free\" href=\"https:\/\/github.com\/samnabi\/shopkit-sample-content\/\" rel=\"nofollow\">https:\/\/github.com\/samnabi\/shopkit-sample-content\/<\/a><\/li>\n<li>Kirby has multi-language support, i18n, l10n<\/li>\n<li>Also has categories, which Shopkit links to<\/li>\n<li>It&#8217;s a system of API hooks, launched from the plugin to Kirby<\/li>\n<li>but Shopkit has all the templates for, eg. slideshows, created by Sam<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Purchasing flow:\n<ul>\n<li>Select product, increase\/decrease quantity, totals are updated<\/li>\n<li>Uses AJAX, but the site is not Javascript dependent\n<ul>\n<li><a class=\"external text\" href=\"https:\/\/adactio.com\/\" rel=\"nofollow\">Jeremy Keith<\/a> is Sam&#8217;s inspiration, he knows about good design.<\/li>\n<\/ul>\n<\/li>\n<li>There can be different shipping rules, different tax rates for different localities<\/li>\n<li>Add personal details (name, e-mail)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Tour of the back end\n<ul>\n<li>Resetting passwords\u00a0\ud83d\ude42<\/li>\n<li>Sam has tried to make it easy for front-end users<\/li>\n<li>Adding products, adding categories\n<ul>\n<li>Products have variants with different prices, options that don&#8217;t affect price\n<ul>\n<li>Small oversight: Options don&#8217;t have different SKUs, no separate inventory<\/li>\n<\/ul>\n<\/li>\n<li>Changing the use of SKUs is not dependent on the purchasing process<\/li>\n<\/ul>\n<\/li>\n<li>A &#8220;Featured Product&#8221; is displayed in the sidebar<\/li>\n<li>Feature request by developers: &#8220;Items Remaining In Stock&#8221;<\/li>\n<li>Another request: Individual e-mails for restocking<\/li>\n<li>Shipping Rules:\n<ul>\n<li>Can be different for all countries, one country,<\/li>\n<li>Shipping rules UI created by Sam, but as part of the plugin (even though it shows in the Kirby UI)<\/li>\n<li>Tax and shipping rules can be defined by the developer, but not through the WebUI<\/li>\n<li>Sam take us for a deep dive into the shipping selection code<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Reporting in Shopkit\n<ul>\n<li>Done from the Shopkit backend<\/li>\n<li>Invoices are created by PHP into PDF files using &#8220;dompdf&#8221; <a class=\"external free\" href=\"https:\/\/github.com\/dompdf\/dompdf\" rel=\"nofollow\">https:\/\/github.com\/dompdf\/dompdf<\/a><\/li>\n<li>Report invoices are generated dynamically every time, but from a static &#8220;transactions&#8221; file<\/li>\n<li>Added some widgets on the dashboard, eg. &#8220;Abandoned, Pending, Paid\/Shipped&#8221;<\/li>\n<li>There are also site stats based on another Kirby plugin<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Payment Processing\n<ul>\n<li>Implemented at &#8220;gateways&#8221; in Shopkit\n<ul>\n<li>Each gateway has a &#8220;process&#8221; and a &#8220;callback&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>Some processors (Square) expect money values to be in cents\n<ul>\n<li>Performing only integer operations on cents seems to be best practice<\/li>\n<\/ul>\n<\/li>\n<li>There are thousands of processors, so Sam has created an open system for processor gateways\n<ul>\n<li>This separates the payment processing from Shopkit itself, absolving Sam of dealing with payment issues<\/li>\n<\/ul>\n<\/li>\n<li>Payment processors provide an SDK for the gateway code\n<ul>\n<li>Each payment processor has its own API, unique for each installation.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Testing\n<ul>\n<li>No formal testing methodology<\/li>\n<li>Tries new code on a test site, Sam&#8217;s own site<\/li>\n<li>Most bugs are caught by end-users (developers)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Shopkit and Kirby aren&#8217;t quite Free Software: Code is available for inspection, modification, but not necessarily for redistribution. But payment is on the honour system.<\/li>\n<\/ul>\n<ul>\n<li>There have been 200 issues logged in the Shopkit issue tracker; most are from Sam himself.\n<ul>\n<li>Top question: Can I add Shopkit to an existing (Kirby) site?\n<ul>\n<li>Not really, Shopkit is a standalone application,<\/li>\n<li>Shopkit is a good intermediate between a simple button, and a full-fledged e-commerce system.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Shopkit&#8217;s changes to Kirby are mostly in the &#8220;snippets&#8221;, which might conflict with another Kirby installation&#8217;s snippets<\/li>\n<li>Shopkit is a full point version behind the Kirby, always on the stable version.<\/li>\n<\/ul>\n<ul>\n<li>A look at the data: Order file\n<ul>\n<li>A YAML file that builds up as order information is entereed<\/li>\n<li>Based on server&#8217;s session ID (uniqueness?)<\/li>\n<li>File locking? Kirby has some file locking built in<\/li>\n<li>Sessions are now the same across tabs, but that may break with new Chrome tab isolation<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><b>Shopkit is a <i>kit<\/i>, a standalone, turnkey application<\/b><\/p>\n<ul>\n<li>Kirby developer, Bastian Allgeier, is known for Zootool, and is making a living off Kirby<\/li>\n<\/ul>\n<h4><span id=\"General_Business\" class=\"mw-headline\">General Business<\/span><\/h4>\n<ul>\n<li><a class=\"external text\" href=\"http:\/\/bob.jonkman.ca\/blogs\/2018\/07\/06\/sysadminday-dinner-2018-at-abe-erb-in-kitchener\/\" rel=\"nofollow\">SysAdminDay Dinner<\/a> &#8211; 6:00pm on Friday, 27 July 2018 at Abe Erb Restaurant in Kitchener\n<ul>\n<li>All System Administrators, Non-Profit, For-Profit, and their friends and relations are invited!<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4><span id=\"Future_Topics\" class=\"mw-headline\">Future Topics<\/span><\/h4>\n<ul>\n<li>See <a title=\"KWNPSA Requested Topics\" href=\"https:\/\/sobac.com\/wiki\/KWNPSA_Requested_Topics\">KWNPSA Requested Topics<\/a><\/li>\n<li>Need a topic for Monday, 20 August 2018 (Bob can&#8217;t do I2P)\n<ul>\n<li><a title=\"Scripting Languages\" href=\"https:\/\/sobac.com\/wiki\/Scripting_Languages\">Scripting Languages<\/a> &#8211; August<\/li>\n<li><a title=\"Purchasing and Procurement\" href=\"https:\/\/sobac.com\/wiki\/Purchasing_and_Procurement\">Purchasing and Procurement<\/a> &#8211; September with Kris Braun<\/li>\n<li><a title=\"Training\" href=\"https:\/\/sobac.com\/wiki\/Training\">Training<\/a> &#8211; October<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Location: Room 1301 &#8212; Conrad Grebel University College,140 Westmount Rd. N. \u00b7 Waterloo, ON N2L 3G6 Date: Monday, July 16, 2018 Time: 7:00-9:00PM Does your NonProfit organization sell things? Does it provide paid services? Do you need a web presence &hellip; <a href=\"https:\/\/kwnpsa.ca\/index.php\/2018\/07\/16\/2018-07-web-stores-and-shopping-carts\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-383","post","type-post","status-publish","format-standard","hentry","category-pastmeetings"],"_links":{"self":[{"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/posts\/383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/comments?post=383"}],"version-history":[{"count":5,"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/posts\/383\/revisions"}],"predecessor-version":[{"id":393,"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/posts\/383\/revisions\/393"}],"wp:attachment":[{"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/media?parent=383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/categories?post=383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kwnpsa.ca\/index.php\/wp-json\/wp\/v2\/tags?post=383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}