{"id":33,"date":"2026-08-19T19:36:21","date_gmt":"2026-08-19T19:36:21","guid":{"rendered":"https:\/\/john-sparks.ca\/index.php\/portfolio\/"},"modified":"2026-08-19T19:36:21","modified_gmt":"2026-08-19T19:36:21","slug":"portfolio","status":"publish","type":"page","link":"https:\/\/john-sparks.ca\/index.php\/portfolio\/","title":{"rendered":"Portfolio"},"content":{"rendered":"\n<div class=\"wp-block-group iss-ai-demo iss-ai-demo--portfolio is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-section is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-kicker wp-block-paragraph\">Portfolio<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Work that keeps running <span class=\"ai-highlight\">quietly<\/span><\/h1>\n\n\n\n<p class=\"ai-lead wp-block-paragraph\">Six projects, three categories, zero drama. Filter by Infrastructure, Systems, or Security to see how the fixes actually held up.<\/p>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group iss-ai-demo iss-ai-demo--portfolio is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-section is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wpzoom-blocks wpzoom-blocks_portfolio-block wpzoom-portfolio-block-6a920eebdb14b use-lightbox layout-grid columns-3 post_type-portfolio_item ajax-load-items wp-block-wpzoom-blocks-portfolio\" data-offset=\"6\" data-load-more=\"{&quot;categories&quot;:[],&quot;class&quot;:&quot;wpzoom-blocks_portfolio-block&quot;,&quot;layout&quot;:&quot;grid&quot;,&quot;lightbox&quot;:true,&quot;lightbox_caption&quot;:false,&quot;order&quot;:&quot;desc&quot;,&quot;order_by&quot;:&quot;menu_order date&quot;,&quot;per_page&quot;:6,&quot;read_more_label&quot;:&quot;Read More&quot;,&quot;show_author&quot;:true,&quot;show_background_video&quot;:true,&quot;show_date&quot;:true,&quot;show_excerpt&quot;:true,&quot;show_read_more&quot;:true,&quot;show_thumbnail&quot;:true,&quot;show_title&quot;:false,&quot;source&quot;:&quot;portfolio_item&quot;,&quot;thumbnail_size&quot;:&quot;portfolio_item-thumbnail&quot;,&quot;total&quot;:6}\"><div class=\"wpzoom-blocks wpzoom-blocks_portfolio-block_filter\"><ul><li class=\"cat-item-all current-cat\">\n\t\t\t\t<a href=\"https:\/\/john-sparks.ca\/index.php\/project\/\" class=\"wpz-portfolio-filter_link\">All<\/a>\n\t\t\t<\/li>\t<li class=\"cat-item cat-item-4 cat-posts-total-2 wpz-block-button\"><a href=\"https:\/\/john-sparks.ca\/index.php\/portfolio\/infrastructure\/\" class=\"wpz-portfolio-filter__link\">Infrastructure<\/a>\n<\/li>\n\t<li class=\"cat-item cat-item-6 cat-posts-total-2 wpz-block-button\"><a href=\"https:\/\/john-sparks.ca\/index.php\/portfolio\/security\/\" class=\"wpz-portfolio-filter__link\">Security<\/a>\n<\/li>\n\t<li class=\"cat-item cat-item-5 cat-posts-total-2 wpz-block-button\"><a href=\"https:\/\/john-sparks.ca\/index.php\/portfolio\/systems\/\" class=\"wpz-portfolio-filter__link\">Systems<\/a>\n<\/li>\n<\/ul><\/div><ul class=\"wpzoom-blocks wpzoom-blocks_portfolio-block_items-list\"><li class='wpzoom-blocks_portfolio-block_item wpzoom-blocks_portfolio-block_item-46 wpzoom-blocks_portfolio-block_category-6 has-cover'  data-category='6'><article class='wpzoom-blocks_portfolio-block_item-wrap portfolio_item'><div class='wpzoom-blocks_portfolio-block_item-thumbnail'>\n\t\t\t\t\t\t<div class='wpzoom-blocks_portfolio-block_item-media'>\n\t\t\t\t\t\t\t<a href='https:\/\/john-sparks.ca\/index.php\/project\/zero-trust-rollout-for-ridgeline-bank\/' title='Zero-trust rollout for Ridgeline Bank' rel='bookmark'><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762-600x400.jpeg\" class=\"attachment-portfolio_item-thumbnail size-portfolio_item-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762-600x400.jpeg 600w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762-300x200.jpeg 300w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762-1024x683.jpeg 1024w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762-1200x800.jpeg 1200w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762-1536x1024.jpeg 1536w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762.jpeg 1920w\" sizes=\"auto, 100vw\" \/><\/a>\n\t\t\t\t\t\t<\/div><div class=\"portfolio-block-entry-thumbnail-popover-content\" data-show-caption=\"\"><a class=\"mfp-image portfolio-block-popup-video popup_image_icon\" href=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-7821762.jpeg\" aria-label=\"Zero-trust rollout for Ridgeline Bank\"><span class='wpzoom-blocks_portfolio-block_lightbox_icon'>\n\t\t\t\t\t\t\t\t\t\t<svg enable-background='new 0 0 32 32' id='Layer_4' version='1.1' viewBox='0 0 32 32' xml:space='preserve' xmlns='http:\/\/www.w3.org\/2000\/svg' xmlns:xlink='http:\/\/www.w3.org\/1999\/xlink'>\n\t\t\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t\t\t<rect fill='none' height='30' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' transform='matrix(6.123234e-17 -1 1 6.123234e-17 0 32)' width='30' x='1' y='1'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line fill='none' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' x1='27' x2='5' y1='5' y2='27'\/><polyline fill='none' points='16,27 5,27 5,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline fill='none' points='16,5 27,5 27,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/g>\n\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t<\/span><\/a><span class=\"portfolio_item-title\" style=\"display: none;\"><a href=\"https:\/\/john-sparks.ca\/index.php\/project\/zero-trust-rollout-for-ridgeline-bank\/\" title=\"Zero-trust rollout for Ridgeline Bank\">Zero-trust rollout for Ridgeline Bank<\/a><\/span><\/div><\/div><div class='wpzoom-blocks_portfolio-block_item-details'><h3 class='wpzoom-blocks_portfolio-block_item-title'><a href='https:\/\/john-sparks.ca\/index.php\/project\/zero-trust-rollout-for-ridgeline-bank\/' title='Zero-trust rollout for Ridgeline Bank' rel='bookmark'>Zero-trust rollout for Ridgeline Bank<\/a><\/h3><\/div><\/article><\/li><li class='wpzoom-blocks_portfolio-block_item wpzoom-blocks_portfolio-block_item-44 wpzoom-blocks_portfolio-block_category-5 has-cover'  data-category='5'><article class='wpzoom-blocks_portfolio-block_item-wrap portfolio_item'><div class='wpzoom-blocks_portfolio-block_item-thumbnail'>\n\t\t\t\t\t\t<div class='wpzoom-blocks_portfolio-block_item-media'>\n\t\t\t\t\t\t\t<a href='https:\/\/john-sparks.ca\/index.php\/project\/helpdesk-automation-for-northwind-clinic\/' title='Helpdesk automation for Northwind Clinic' rel='bookmark'><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-33812025-600x400.jpeg\" class=\"attachment-portfolio_item-thumbnail size-portfolio_item-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-33812025-600x400.jpeg 600w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-33812025-1200x800.jpeg 1200w\" sizes=\"auto, 100vw\" \/><\/a>\n\t\t\t\t\t\t<\/div><div class=\"portfolio-block-entry-thumbnail-popover-content\" data-show-caption=\"\"><a class=\"mfp-image portfolio-block-popup-video popup_image_icon\" href=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-33812025.jpeg\" aria-label=\"Helpdesk automation for Northwind Clinic\"><span class='wpzoom-blocks_portfolio-block_lightbox_icon'>\n\t\t\t\t\t\t\t\t\t\t<svg enable-background='new 0 0 32 32' id='Layer_4' version='1.1' viewBox='0 0 32 32' xml:space='preserve' xmlns='http:\/\/www.w3.org\/2000\/svg' xmlns:xlink='http:\/\/www.w3.org\/1999\/xlink'>\n\t\t\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t\t\t<rect fill='none' height='30' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' transform='matrix(6.123234e-17 -1 1 6.123234e-17 0 32)' width='30' x='1' y='1'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line fill='none' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' x1='27' x2='5' y1='5' y2='27'\/><polyline fill='none' points='16,27 5,27 5,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline fill='none' points='16,5 27,5 27,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/g>\n\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t<\/span><\/a><span class=\"portfolio_item-title\" style=\"display: none;\"><a href=\"https:\/\/john-sparks.ca\/index.php\/project\/helpdesk-automation-for-northwind-clinic\/\" title=\"Helpdesk automation for Northwind Clinic\">Helpdesk automation for Northwind Clinic<\/a><\/span><\/div><\/div><div class='wpzoom-blocks_portfolio-block_item-details'><h3 class='wpzoom-blocks_portfolio-block_item-title'><a href='https:\/\/john-sparks.ca\/index.php\/project\/helpdesk-automation-for-northwind-clinic\/' title='Helpdesk automation for Northwind Clinic' rel='bookmark'>Helpdesk automation for Northwind Clinic<\/a><\/h3><\/div><\/article><\/li><li class='wpzoom-blocks_portfolio-block_item wpzoom-blocks_portfolio-block_item-42 wpzoom-blocks_portfolio-block_category-4 has-cover'  data-category='4'><article class='wpzoom-blocks_portfolio-block_item-wrap portfolio_item'><div class='wpzoom-blocks_portfolio-block_item-thumbnail'>\n\t\t\t\t\t\t<div class='wpzoom-blocks_portfolio-block_item-media'>\n\t\t\t\t\t\t\t<a href='https:\/\/john-sparks.ca\/index.php\/project\/network-rebuild-for-sable-studio\/' title='Network rebuild for Sable Studio' rel='bookmark'><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-5087172-600x400.jpeg\" class=\"attachment-portfolio_item-thumbnail size-portfolio_item-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-5087172-600x400.jpeg 600w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-5087172-1200x800.jpeg 1200w\" sizes=\"auto, 100vw\" \/><\/a>\n\t\t\t\t\t\t<\/div><div class=\"portfolio-block-entry-thumbnail-popover-content\" data-show-caption=\"\"><a class=\"mfp-image portfolio-block-popup-video popup_image_icon\" href=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-5087172-scaled.jpeg\" aria-label=\"Network rebuild for Sable Studio\"><span class='wpzoom-blocks_portfolio-block_lightbox_icon'>\n\t\t\t\t\t\t\t\t\t\t<svg enable-background='new 0 0 32 32' id='Layer_4' version='1.1' viewBox='0 0 32 32' xml:space='preserve' xmlns='http:\/\/www.w3.org\/2000\/svg' xmlns:xlink='http:\/\/www.w3.org\/1999\/xlink'>\n\t\t\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t\t\t<rect fill='none' height='30' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' transform='matrix(6.123234e-17 -1 1 6.123234e-17 0 32)' width='30' x='1' y='1'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line fill='none' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' x1='27' x2='5' y1='5' y2='27'\/><polyline fill='none' points='16,27 5,27 5,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline fill='none' points='16,5 27,5 27,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/g>\n\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t<\/span><\/a><span class=\"portfolio_item-title\" style=\"display: none;\"><a href=\"https:\/\/john-sparks.ca\/index.php\/project\/network-rebuild-for-sable-studio\/\" title=\"Network rebuild for Sable Studio\">Network rebuild for Sable Studio<\/a><\/span><\/div><\/div><div class='wpzoom-blocks_portfolio-block_item-details'><h3 class='wpzoom-blocks_portfolio-block_item-title'><a href='https:\/\/john-sparks.ca\/index.php\/project\/network-rebuild-for-sable-studio\/' title='Network rebuild for Sable Studio' rel='bookmark'>Network rebuild for Sable Studio<\/a><\/h3><\/div><\/article><\/li><li class='wpzoom-blocks_portfolio-block_item wpzoom-blocks_portfolio-block_item-40 wpzoom-blocks_portfolio-block_category-6 has-cover'  data-category='6'><article class='wpzoom-blocks_portfolio-block_item-wrap portfolio_item'><div class='wpzoom-blocks_portfolio-block_item-thumbnail'>\n\t\t\t\t\t\t<div class='wpzoom-blocks_portfolio-block_item-media'>\n\t\t\t\t\t\t\t<a href='https:\/\/john-sparks.ca\/index.php\/project\/security-audit-for-blackwell-legal\/' title='Security audit for Blackwell Legal' rel='bookmark'><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-4973899-600x400.jpeg\" class=\"attachment-portfolio_item-thumbnail size-portfolio_item-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-4973899-600x400.jpeg 600w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-4973899-1200x800.jpeg 1200w\" sizes=\"auto, 100vw\" \/><\/a>\n\t\t\t\t\t\t<\/div><div class=\"portfolio-block-entry-thumbnail-popover-content\" data-show-caption=\"\"><a class=\"mfp-image portfolio-block-popup-video popup_image_icon\" href=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-4973899.jpeg\" aria-label=\"Security audit for Blackwell Legal\"><span class='wpzoom-blocks_portfolio-block_lightbox_icon'>\n\t\t\t\t\t\t\t\t\t\t<svg enable-background='new 0 0 32 32' id='Layer_4' version='1.1' viewBox='0 0 32 32' xml:space='preserve' xmlns='http:\/\/www.w3.org\/2000\/svg' xmlns:xlink='http:\/\/www.w3.org\/1999\/xlink'>\n\t\t\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t\t\t<rect fill='none' height='30' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' transform='matrix(6.123234e-17 -1 1 6.123234e-17 0 32)' width='30' x='1' y='1'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line fill='none' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' x1='27' x2='5' y1='5' y2='27'\/><polyline fill='none' points='16,27 5,27 5,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline fill='none' points='16,5 27,5 27,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/g>\n\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t<\/span><\/a><span class=\"portfolio_item-title\" style=\"display: none;\"><a href=\"https:\/\/john-sparks.ca\/index.php\/project\/security-audit-for-blackwell-legal\/\" title=\"Security audit for Blackwell Legal\">Security audit for Blackwell Legal<\/a><\/span><\/div><\/div><div class='wpzoom-blocks_portfolio-block_item-details'><h3 class='wpzoom-blocks_portfolio-block_item-title'><a href='https:\/\/john-sparks.ca\/index.php\/project\/security-audit-for-blackwell-legal\/' title='Security audit for Blackwell Legal' rel='bookmark'>Security audit for Blackwell Legal<\/a><\/h3><\/div><\/article><\/li><li class='wpzoom-blocks_portfolio-block_item wpzoom-blocks_portfolio-block_item-38 wpzoom-blocks_portfolio-block_category-5 has-cover'  data-category='5'><article class='wpzoom-blocks_portfolio-block_item-wrap portfolio_item'><div class='wpzoom-blocks_portfolio-block_item-thumbnail'>\n\t\t\t\t\t\t<div class='wpzoom-blocks_portfolio-block_item-media'>\n\t\t\t\t\t\t\t<a href='https:\/\/john-sparks.ca\/index.php\/project\/pos-overhaul-for-union-coffee-co\/' title='POS overhaul for Union Coffee Co.' rel='bookmark'><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-38325323-600x400.jpeg\" class=\"attachment-portfolio_item-thumbnail size-portfolio_item-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-38325323-600x400.jpeg 600w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-38325323-1200x800.jpeg 1200w\" sizes=\"auto, 100vw\" \/><\/a>\n\t\t\t\t\t\t<\/div><div class=\"portfolio-block-entry-thumbnail-popover-content\" data-show-caption=\"\"><a class=\"mfp-image portfolio-block-popup-video popup_image_icon\" href=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-38325323-scaled.jpeg\" aria-label=\"POS overhaul for Union Coffee Co.\"><span class='wpzoom-blocks_portfolio-block_lightbox_icon'>\n\t\t\t\t\t\t\t\t\t\t<svg enable-background='new 0 0 32 32' id='Layer_4' version='1.1' viewBox='0 0 32 32' xml:space='preserve' xmlns='http:\/\/www.w3.org\/2000\/svg' xmlns:xlink='http:\/\/www.w3.org\/1999\/xlink'>\n\t\t\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t\t\t<rect fill='none' height='30' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' transform='matrix(6.123234e-17 -1 1 6.123234e-17 0 32)' width='30' x='1' y='1'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line fill='none' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' x1='27' x2='5' y1='5' y2='27'\/><polyline fill='none' points='16,27 5,27 5,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline fill='none' points='16,5 27,5 27,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/g>\n\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t<\/span><\/a><span class=\"portfolio_item-title\" style=\"display: none;\"><a href=\"https:\/\/john-sparks.ca\/index.php\/project\/pos-overhaul-for-union-coffee-co\/\" title=\"POS overhaul for Union Coffee Co.\">POS overhaul for Union Coffee Co.<\/a><\/span><\/div><\/div><div class='wpzoom-blocks_portfolio-block_item-details'><h3 class='wpzoom-blocks_portfolio-block_item-title'><a href='https:\/\/john-sparks.ca\/index.php\/project\/pos-overhaul-for-union-coffee-co\/' title='POS overhaul for Union Coffee Co.' rel='bookmark'>POS overhaul for Union Coffee Co.<\/a><\/h3><\/div><\/article><\/li><li class='wpzoom-blocks_portfolio-block_item wpzoom-blocks_portfolio-block_item-36 wpzoom-blocks_portfolio-block_category-4 has-cover'  data-category='4'><article class='wpzoom-blocks_portfolio-block_item-wrap portfolio_item'><div class='wpzoom-blocks_portfolio-block_item-thumbnail'>\n\t\t\t\t\t\t<div class='wpzoom-blocks_portfolio-block_item-media'>\n\t\t\t\t\t\t\t<a href='https:\/\/john-sparks.ca\/index.php\/project\/cloud-migration-for-fernhill-foods\/' title='Cloud migration for Fernhill Foods' rel='bookmark'><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152-600x400.jpeg\" class=\"attachment-portfolio_item-thumbnail size-portfolio_item-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152-600x399.jpeg 600w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152-300x200.jpeg 300w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152-1024x682.jpeg 1024w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152-1200x799.jpeg 1200w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152-1536x1022.jpeg 1536w, https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152.jpeg 1920w\" sizes=\"auto, 100vw\" \/><\/a>\n\t\t\t\t\t\t<\/div><div class=\"portfolio-block-entry-thumbnail-popover-content\" data-show-caption=\"\"><a class=\"mfp-image portfolio-block-popup-video popup_image_icon\" href=\"https:\/\/john-sparks.ca\/wp-content\/uploads\/2026\/08\/pexels-photo-17489152.jpeg\" aria-label=\"Cloud migration for Fernhill Foods\"><span class='wpzoom-blocks_portfolio-block_lightbox_icon'>\n\t\t\t\t\t\t\t\t\t\t<svg enable-background='new 0 0 32 32' id='Layer_4' version='1.1' viewBox='0 0 32 32' xml:space='preserve' xmlns='http:\/\/www.w3.org\/2000\/svg' xmlns:xlink='http:\/\/www.w3.org\/1999\/xlink'>\n\t\t\t\t\t\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t\t\t\t\t\t<rect fill='none' height='30' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' transform='matrix(6.123234e-17 -1 1 6.123234e-17 0 32)' width='30' x='1' y='1'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<line fill='none' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2' x1='27' x2='5' y1='5' y2='27'\/><polyline fill='none' points='16,27 5,27 5,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<polyline fill='none' points='16,5 27,5 27,16' stroke='#fff' stroke-linejoin='round' stroke-miterlimit='10' stroke-width='2'\/>\n\t\t\t\t\t\t\t\t\t\t\t<\/g>\n\t\t\t\t\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\t\t\t\t<\/span><\/a><span class=\"portfolio_item-title\" style=\"display: none;\"><a href=\"https:\/\/john-sparks.ca\/index.php\/project\/cloud-migration-for-fernhill-foods\/\" title=\"Cloud migration for Fernhill Foods\">Cloud migration for Fernhill Foods<\/a><\/span><\/div><\/div><div class='wpzoom-blocks_portfolio-block_item-details'><h3 class='wpzoom-blocks_portfolio-block_item-title'><a href='https:\/\/john-sparks.ca\/index.php\/project\/cloud-migration-for-fernhill-foods\/' title='Cloud migration for Fernhill Foods' rel='bookmark'>Cloud migration for Fernhill Foods<\/a><\/h3><\/div><\/article><\/li><li class=\"wpzoom-preloader-container\"><div class=\"wpzoom-portfolio-preloader\"><svg  width=\"75\" version=\"1.1\" id=\"L4\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" x=\"0px\" y=\"0px\" viewBox=\"0 0 100 100\" enable-background=\"new 0 0 0 0\" xml:space=\"preserve\">\n\t\t  <circle fill=\"#000\" stroke=\"none\" cx=\"6\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.1\"\/><\/circle>\n\t\t  <circle fill=\"#000\" stroke=\"none\" cx=\"26\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.2\"\/><\/circle>\n\t\t  <circle fill=\"#000\" stroke=\"none\" cx=\"46\" cy=\"50\" r=\"6\"><animate attributeName=\"opacity\" dur=\"1s\" values=\"0;1;0\" repeatCount=\"indefinite\" begin=\"0.3\"\/><\/circle>\n\t\t<\/svg><\/div><\/li><\/ul><\/div><!--.wpzoom-blocks wpzoom-blocks_portfolio-block--><style>.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b {}.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b { color:#000}.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b .wpzoom-blocks_portfolio-block_filter ul li a,\n\t\t\t.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b.layout-list .wpzoom-blocks_portfolio-block_items-list .wpzoom-blocks_portfolio-block_item .wpzoom-blocks_portfolio-block_item-title a {\n\t\t\t\tcolor:#000;\n\t\t\t}.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b .wpzoom-blocks_portfolio-block_filter ul li a:hover,\n\t\t\t\t.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b .wpzoom-blocks_portfolio-block_filter ul li.current-cat a:hover,\n\t\t\t\t.wpzoom-blocks_portfolio-.wpzoom-portfolio-block-6a920eebdb14b.layout-list .wpzoom-blocks_portfolio-block_items-list .wpzoom-blocks_portfolio-block_item .wpzoom-blocks_portfolio-block_item-title a:hover {\n\t\t\t\t\tcolor:#0BB4AA;\n\t\t\t\t}.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b .wpzoom-blocks_portfolio-block_filter ul li.current-cat a { color:#0BB4AA; }.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b .wpzoom-blocks_portfolio-block_filter ul li a {font-weight: 400 !important;letter-spacing: 1px;}.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b .wpzoom-blocks_portfolio-block_item-details .wpzoom-blocks_portfolio-block_item-title a {line-height: 1.2;font-weight: 500 !important;letter-spacing: 0px;}.wpzoom-blocks_portfolio-block.wpzoom-portfolio-block-6a920eebdb14b .wpz-portfolio-button__link {letter-spacing: 1px;border-style:solid;border-width:0px;}<\/style>\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group alignfull iss-ai-demo iss-ai-demo--portfolio is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group alignfull ai-section ai-band has-background has-text-color is-layout-flow wp-block-group-is-layout-flow\" style=\"background-color:#0f1414;color:#fbfbf6\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-meta wp-block-paragraph\">Case studies<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Two fixes, <span class=\"ai-highlight\">measured<\/span><\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity ai-rule\"\/>\n\n\n\n<div class=\"wp-block-group ai-case is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-meta wp-block-paragraph\">Infrastructure \u00b7 Regional retail chain<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">From weekly outages to zero<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Before:<\/strong> aging on-site servers dropped POS connections every Friday rush. <strong>After:<\/strong> migrated to redundant cloud infrastructure with automatic failover, no more Friday panic.<\/p>\n\n\n\n<p class=\"ai-stat wp-block-paragraph\">0<span>Outages since go-live<\/span><\/p>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group ai-case is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-meta wp-block-paragraph\">Security \u00b7 Independent law firm<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Closing the door on phishing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Before:<\/strong> staff clicking fake invoice emails, one near-miss ransomware scare. <strong>After:<\/strong> email filtering, MFA rollout, and a two-hour staff training that actually stuck.<\/p>\n\n\n\n<p class=\"ai-stat wp-block-paragraph\">92%<span>Drop in phishing click-through<\/span><\/p>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<div class=\"wp-block-group iss-ai-demo iss-ai-demo--portfolio is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-section is-layout-flow wp-block-group-is-layout-flow\">\n\n<div class=\"wp-block-group ai-container is-layout-flow wp-block-group-is-layout-flow\">\n\n<p class=\"ai-ticker wp-block-paragraph\"><span>Networks<\/span><span>Backups<\/span><span>Cloud migrations<\/span><span>Endpoint security<\/span><span>Help desk<\/span><\/p>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Portfolio Work that keeps running quietly Six projects, three categories, zero drama. Filter by Infrastructure, Systems, or Security to see how the fixes actually held up. Case studies Two fixes, measured Infrastructure \u00b7 Regional retail chain From weekly outages to zero Before: aging on-site servers dropped POS connections every Friday rush. After: migrated to redundant &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/john-sparks.ca\/index.php\/portfolio\/\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8220;Portfolio&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":3,"comment_status":"closed","ping_status":"closed","template":"page-templates\/full-width-no-title.php","meta":{"inspiro_hide_title":false,"inspiro_hide_featured_image":false,"footnotes":""},"class_list":["post-33","page","type-page","status-publish","hentry"],"featured_media_urls":[],"_links":{"self":[{"href":"https:\/\/john-sparks.ca\/index.php\/wp-json\/wp\/v2\/pages\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/john-sparks.ca\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/john-sparks.ca\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/john-sparks.ca\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/john-sparks.ca\/index.php\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":0,"href":"https:\/\/john-sparks.ca\/index.php\/wp-json\/wp\/v2\/pages\/33\/revisions"}],"wp:attachment":[{"href":"https:\/\/john-sparks.ca\/index.php\/wp-json\/wp\/v2\/media?parent=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}