Top WordPress Developers in Winnipeg | The 2025 Shortlist

Top WordPress Developers in Winnipeg | The 2025 Shortlist
        
        
    
    
    
    
    
    
    
    
    
    
    




































    
{
    "@context": "https://schema.org",
    "@graph": [
        {
            "@type": "Organization",
            "@id": "https://funkpd.com/#org",
            "name": "FunkPd",
            "alternateName": [
                "FunkProductions",
                "Funk Productions"
            ],
            "url": "https://funkpd.com/",
            "foundingDate": "2017",
            "founder": {
                "@type": "Person",
                "@id": "https://funkpd.com/nolan/#person",
                "name": "Nolan Phelps",
                "url": "https://funkpd.com/nolan/"
            },
            "logo": {
                "@type": "ImageObject",
                "@id": "https://funkpd.com/#logo",
                "url": "https://funkpd.com/assets/img/funkpd-hoz.svg"
            },
            "image": "https://funkpd.com/assets/img/funkpd-cover.webp",
            "contactPoint": [
                {
                    "@type": "ContactPoint",
                    "telephone": "+1-431-813-2402",
                    "email": "contact@funkpd.com",
                    "contactType": "customer support"
                }
            ],
            "sameAs": [
                "https://www.linkedin.com/company/funkproductions/",
                "https://www.crunchbase.com/organization/funk-productions",
                "https://www.bbb.org/ca/mb/winnipeg/profile/web-design/funkproductions-0057-72642",
                "https://m.yelp.com/biz/funkproductions-winnipeg",
                "https://www.instagram.com/funkpd/",
                "https://github.com/gmfunk9/",
                "https://funkpd.wordpress.com/",
                "https://www.facebook.com/funkpd"
            ],
            "hasOfferCatalog": {
                "@id": "https://funkpd.com/#catalog"
            }
        },
        {
            "@type": "WebSite",
            "@id": "https://funkpd.com/#website",
            "url": "https://funkpd.com/",
            "name": "FunkPd",
            "publisher": {
                "@id": "https://funkpd.com/#org"
            }
        },
        {
            "@type": "Person",
            "@id": "https://funkpd.com/nolan/#person",
            "name": "Nolan Phelps",
            "url": "https://funkpd.com/nolan/",
            "jobTitle": "Founder",
            "worksFor": {
                "@id": "https://funkpd.com/#org"
            },
            "sameAs": [
                "https://ca.linkedin.com/in/nolan-phelps-0a777a17b",
                "https://github.com/gmfunk9/",
                "https://www.instagram.com/funkpd/"
            ]
        },
        {
            "@type": "OfferCatalog",
            "@id": "https://funkpd.com/#catalog",
            "name": "FunkPd Packages",
            "itemListElement": [
                {
                    "@type": "OfferCatalog",
                    "name": "WordPress Builds, Rescue, Stabilization, and Systems",
                    "itemListElement": [
                        {
                            "@type": "Offer",
                            "name": "Website Rescue",
                            "url": "https://funkpd.com/service/website-rescue/",
                            "itemOffered": {
                                "@type": "Service",
                                "name": "WordPress Website Rescue"
                            }
                        },
                        {
                            "@type": "Offer",
                            "name": "WordPress Builds and Rebuilds",
                            "url": "https://funkpd.com/service/rebuilds/",
                            "itemOffered": {
                                "@type": "Service",
                                "name": "WordPress Builds and Rebuilds"
                            }
                        },
                        {
                            "@type": "Offer",
                            "name": "WordPress Stabilization",
                            "url": "https://funkpd.com/stabilization/",
                            "itemOffered": {
                                "@type": "Service",
                                "name": "WordPress Stabilization"
                            }
                        },
                        {
                            "@type": "Offer",
                            "name": "Custom Systems",
                            "url": "https://funkpd.com/service/growth-systems/",
                            "itemOffered": {
                                "@type": "Service",
                                "name": "Custom WordPress Systems"
                            }
                        }
                    ]
                }
            ]
        },
        {
            "@type": "ProfessionalService",
            "@id": "https://funkpd.com/#business",
            "name": "FunkPd",
            "url": "https://funkpd.com/",
            "image": "https://funkpd.com/assets/img/funkpd-cover.webp",
            "priceRange": "$",
            "telephone": "+1-431-813-2402",
            "email": "contact@funkpd.com",
            "parentOrganization": {
                "@id": "https://funkpd.com/#org"
            },
            "address": {
                "@type": "PostalAddress",
                "streetAddress": "521 Washington Ave",
                "addressLocality": "Winnipeg",
                "addressRegion": "MB",
                "postalCode": "R2K 1M1",
                "addressCountry": "CA"
            },
            "geo": {
                "@type": "GeoCoordinates",
                "latitude": 49.9155532,
                "longitude": -97.098281
            },
            "openingHoursSpecification": [
                {
                    "@type": "OpeningHoursSpecification",
                    "dayOfWeek": [
                        "Monday",
                        "Tuesday",
                        "Wednesday",
                        "Thursday",
                        "Friday",
                        "Saturday",
                        "Sunday"
                    ],
                    "opens": "00:00",
                    "closes": "23:59"
                }
            ],
            "areaServed": [
                {
                    "@type": "City",
                    "name": "Winnipeg"
                },
                {
                    "@type": "AdministrativeArea",
                    "name": "Manitoba"
                },
                {
                    "@type": "Country",
                    "name": "Canada"
                },
                {
                    "@type": "Country",
                    "name": "Australia"
                },
                {
                    "@type": "Country",
                    "name": "Thailand"
                },
                {
                    "@type": "Country",
                    "name": "Vietnam"
                }
            ]
        }
    ]
}


{
    "@context": "https://schema.org",
    "@type": "WebPage",
    "@id": "https://funkpd.com/blog/top-10-webdev-winnipeg/#webpage",
    "url": "https://funkpd.com/blog/top-10-webdev-winnipeg/",
    "name": "Top WordPress Developers in Winnipeg | The 2025 Shortlist",
    "description": "A blunt review of Winnipeg builders who deliver sites you actually own and can update yourself.",
    "datePublished": "2025-10-17T11:50:36+00:00",
    "dateModified": "2026-04-24T07:18:06+00:00",
    "isPartOf": {
        "@id": "https://funkpd.com/#website"
    }
}


{
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://funkpd.com/blog/top-10-webdev-winnipeg/#post",
    "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://funkpd.com/blog/top-10-webdev-winnipeg/"
    },
    "headline": "Top WordPress Developers in Winnipeg | The 2025 Shortlist",
    "description": "A blunt review of Winnipeg builders who deliver sites you actually own and can update yourself.",
    "author": {
        "@id": "https://funkpd.com/nolan/#person"
    },
    "publisher": {
        "@id": "https://funkpd.com/#org"
    },
    "isPartOf": {
        "@id": "https://funkpd.com/#website"
    },
    "image": {
        "@type": "ImageObject",
        "url": "https://funkpd.com/blog/top-10-webdev-winnipeg/funkpd-hero.webp"
    },
    "datePublished": "2025-10-17T11:50:36+00:00",
    "dateModified": "2026-04-24T07:18:06+00:00"
}

            
        
        
    
        
        
        
        
    
    
(function(windowObj, documentObj) {
    const gtmId = "GTM-KLWPCVT";
    const metaPixelId = "682105530429747";
    const hubspotPortalId = "22219379";
    const clarityId = "";
    let userInteracted = false;
    let pendingTrackingStart = false;
    const interactionEvents = ['click', 'keydown', 'pointerdown', 'touchstart', 'wheel'];

    function loadGtm() {
        if (!gtmId) {
            return;
        }

        if (!windowObj.dataLayer) {
            windowObj.dataLayer = [];
        }

        windowObj.dataLayer.push({
            'gtm.start': new Date().getTime(),
            event: 'gtm.js'
        });

        const existingScript = documentObj.getElementById('gtm-loader-' + gtmId);

        if (existingScript) {
            return;
        }

        const firstScript = documentObj.getElementsByTagName('script')[0];
        const gtmScript = documentObj.createElement('script');
        gtmScript.async = true;
        gtmScript.src = 'https://www.googletagmanager.com/gtm.js?id=' + gtmId;
        gtmScript.id = 'gtm-loader-' + gtmId;

        if (firstScript && firstScript.parentNode) {
            firstScript.parentNode.insertBefore(gtmScript, firstScript);
        } else if (documentObj.head) {
            documentObj.head.appendChild(gtmScript);
        }
    }

    function loadMetaPixel() {
        if (!metaPixelId) {
            return;
        }

        if (windowObj.fbq && typeof windowObj.fbq === 'function') {
            windowObj.fbq('consent', 'grant');
            windowObj.fbq('track', 'PageView');
            return;
        }

        function createFbqQueue() {
            const queue = function() {
                if (queue.callMethod) {
                    queue.callMethod.apply(queue, arguments);
                } else {
                    queue.queue.push(arguments);
                }
            };
            queue.queue = [];
            queue.loaded = true;
            queue.version = '2.0';
            queue.callMethod = queue.callMethod || null;
            queue.push = queue;
            return queue;
        }

        const fbqQueue = createFbqQueue();
        windowObj.fbq = fbqQueue;
        windowObj._fbq = fbqQueue;

        const existingPixel = documentObj.getElementById('fb-pixel-loader');

        if (existingPixel) {
            return;
        }

        const pixelScript = documentObj.createElement('script');
        pixelScript.id = 'fb-pixel-loader';
        pixelScript.async = true;
        pixelScript.src = 'https://connect.facebook.net/en_US/fbevents.js';
        const firstScript = documentObj.getElementsByTagName('script')[0];

        if (firstScript && firstScript.parentNode) {
            firstScript.parentNode.insertBefore(pixelScript, firstScript);
        } else if (documentObj.head) {
            documentObj.head.appendChild(pixelScript);
        }

        windowObj.fbq('init', metaPixelId);
        windowObj.fbq('track', 'PageView');
    }

    function loadHubspot() {
        if (!hubspotPortalId) {
            return;
        }

        const existingHubspot = documentObj.getElementById('hs-script-loader');

        if (existingHubspot) {
            return;
        }

        const hubspotScript = documentObj.createElement('script');
        hubspotScript.id = 'hs-script-loader';
        hubspotScript.async = true;
        hubspotScript.defer = true;
        hubspotScript.src = '//js.hs-scripts.com/' + hubspotPortalId + '.js';
        const firstScript = documentObj.getElementsByTagName('script')[0];

        if (firstScript && firstScript.parentNode) {
            firstScript.parentNode.insertBefore(hubspotScript, firstScript);
        } else if (documentObj.head) {
            documentObj.head.appendChild(hubspotScript);
        }
    }

    function loadClarity() {
        if (!clarityId) {
            return;
        }

        if (windowObj.clarity && typeof windowObj.clarity === 'function') {
            return;
        }

        const existingClarity = documentObj.getElementById('clarity-loader');

        if (existingClarity) {
            return;
        }

        windowObj.clarity = windowObj.clarity || function() {
            (windowObj.clarity.q = windowObj.clarity.q || []).push(arguments);
        };

        const clarityScript = documentObj.createElement('script');
        clarityScript.id = 'clarity-loader';
        clarityScript.async = true;
        clarityScript.src = 'https://www.clarity.ms/tag/' + clarityId;
        const firstScript = documentObj.getElementsByTagName('script')[0];

        if (firstScript && firstScript.parentNode) {
            firstScript.parentNode.insertBefore(clarityScript, firstScript);
        } else if (documentObj.head) {
            documentObj.head.appendChild(clarityScript);
        }
    }

    const hasTrackingTargets = Boolean(gtmId || metaPixelId || hubspotPortalId || clarityId);

    function markUserInteraction() {
        if (userInteracted) {
            return;
        }

        userInteracted = true;

        for (const eventName of interactionEvents) {
            windowObj.removeEventListener(eventName, markUserInteraction);
        }

        if (pendingTrackingStart) {
            bootTracking();
        }
    }

    function startTracking() {
        if (windowObj.funkpdTrackingLoaded) {
            return;
        }

        windowObj.funkpdTrackingLoaded = true;
        loadGtm();
        loadMetaPixel();
        loadClarity();
    }

    function bootTracking() {
        if (!hasTrackingTargets) {
            return;
        }

        if (!userInteracted) {
            pendingTrackingStart = true;
            return;
        }

        pendingTrackingStart = false;
        startTracking();
        loadHubspot();
    }

    windowObj.funkpdLoadTracking = bootTracking;

    windowObj.funkpdUnloadTracking = function() {
        const removableScriptIds = [
            'gtm-loader-' + gtmId,
            'fb-pixel-loader',
            'hs-script-loader',
            'clarity-loader'
        ];

        if (windowObj.clarity && typeof windowObj.clarity === 'function') {
            try {
                windowObj.clarity('consent', false);
                windowObj.clarity('stop');
            } catch (error) {}
        }

        for (const scriptId of removableScriptIds) {
            const node = documentObj.getElementById(scriptId);
            if (node && node.parentNode) {
                node.parentNode.removeChild(node);
            }
        }

        const gtmIframe = documentObj.querySelector('iframe[src*="googletagmanager.com/ns.html"]');
        if (gtmIframe && gtmIframe.parentNode) {
            gtmIframe.parentNode.removeChild(gtmIframe);
        }

        const fbNoscript = documentObj.querySelector('img[src*="facebook.com/tr?id="]');
        if (fbNoscript && fbNoscript.parentNode && fbNoscript.parentNode.parentNode) {
            fbNoscript.parentNode.parentNode.removeChild(fbNoscript.parentNode);
        }

        const hubspotFrame = documentObj.getElementById('hubspot-messages-iframe-container');
        if (hubspotFrame && hubspotFrame.parentNode) {
            hubspotFrame.parentNode.removeChild(hubspotFrame);
        }

        windowObj.funkpdTrackingLoaded = false;
        windowObj.dataLayer = [];
        windowObj.fbq = function() {};
        windowObj._fbq = null;
        windowObj.clarity = function() {};
        windowObj.clarity.q = [];
        pendingTrackingStart = false;
    };

    for (const eventName of interactionEvents) {
        windowObj.addEventListener(eventName, markUserInteraction, {
            once: true,
            passive: true
        });
    }
})(window, document);


(function(windowObj, documentObj) {
    const consentKey = 'funkpdAnalyticsConsent';
    const consentAllowedValue = 'allow';
    const consentDeniedValue = 'deny';
    const consentBannerId = 'analytics-consent';
    const consentButtonId = 'analytics-consent-button';
    let banner = null;
    let button = null;
    let trackingActive = true;
    let savedConsent = null;

    function setButtonState(isActive) {
        if (!button) {
            return;
        }

        button.textContent = isActive ? 'Turn off cookies' : 'Turn on cookies';
        button.setAttribute('aria-pressed', isActive ? 'true' : 'false');
    }

    function readStoredConsent() {
        try {
            return windowObj.localStorage.getItem(consentKey);
        } catch (error) {
            return null;
        }
    }

    function storeConsentAllowed() {
        try {
            windowObj.localStorage.setItem(consentKey, consentAllowedValue);
        } catch (error) {}
    }

    function storeConsentDenied() {
        try {
            windowObj.localStorage.setItem(consentKey, consentDeniedValue);
        } catch (error) {}
    }

    function activateTracking() {
        if (trackingActive) {
            storeConsentAllowed();
            if (typeof windowObj.funkpdLoadTracking === 'function') {
                windowObj.funkpdLoadTracking();
            }
            if (windowObj.clarity && typeof windowObj.clarity === 'function') {
                try {
                    windowObj.clarity('consent', true);
                } catch (error) {}
            }
            setButtonState(true);
            return;
        }

        trackingActive = true;

        if (typeof windowObj.funkpdLoadTracking === 'function') {
            windowObj.funkpdLoadTracking();
        }

        storeConsentAllowed();
        if (windowObj.clarity && typeof windowObj.clarity === 'function') {
            try {
                windowObj.clarity('consent', true);
            } catch (error) {}
        }
        setButtonState(true);
    }

    function deactivateTracking() {
        if (!trackingActive) {
            storeConsentDenied();
            setButtonState(false);
            return;
        }

        trackingActive = false;

        if (windowObj.clarity && typeof windowObj.clarity === 'function') {
            try {
                windowObj.clarity('consent', false);
            } catch (error) {}
        }

        if (typeof windowObj.funkpdUnloadTracking === 'function') {
            windowObj.funkpdUnloadTracking();
        }

        storeConsentDenied();
        setButtonState(false);
    }

    function handleButtonClick() {
        if (trackingActive) {
            deactivateTracking();
            return;
        }

        activateTracking();
    }

    function initConsentUi() {
        banner = documentObj.getElementById(consentBannerId);
        button = documentObj.getElementById(consentButtonId);

        if (!banner || !button) {
            return;
        }

        banner.removeAttribute('hidden');
        button.addEventListener('click', handleButtonClick);
        setButtonState(trackingActive);
    }

    savedConsent = readStoredConsent();

    if (savedConsent === consentDeniedValue) {
        trackingActive = false;
    } else {
        trackingActive = true;
    }

    if (trackingActive) {
        activateTracking();
    }

    if (documentObj.readyState === 'loading') {
        documentObj.addEventListener('DOMContentLoaded', initConsentUi);
    } else {
        initConsentUi();
    }
})(window, document);



    
    


    

    Skip to content

        

    
        
    
    
        root / blog / top-10-webdev-winnipeg    
    Get Fixed Scope



    

    
        Menu
        
            
        
    
    
        
            
                Main
                
                    
                        
                        
                    
                    Home
                
                
                    
                        
                        
                        
                    
                    Start Here
                
                
                    
                        
                        
                        
                    
                    Rescue
                
                
                    
                        
                        
                        
                    
                    Builds
                
                
                    
                        
                    
                    Stabilization
                
                
                    
                        
                        
                    
                    Work
                
                
                    
                        
                        
                    
                    Pricing
                
                
                    
                        
                    
                    Contact
                
            

            
                Resources
                
                    
                        
                        
                    
                    Service Map
                
                
                    
                        
                        
                    
                    Nolan
                
                
                    
                        
                        
                        
                    
                    Process
                
                
                    
                        
                        
                    
                    Blog
                
                
                    
                        
                    
                    FAQ
                
                
                    
                        
                        
                        
                        
                    
                    Glossary
                
            

            
            
                        
                Blog
                                
                    
                        
                        
                    
                    All posts
                
            
            
                    
        
            Status
            No alerts. Form updates show here.
        
    


    
        
            Top WordPress Developers in Winnipeg | The 2025 Shortlist

            
                A blunt review of Winnipeg builders who deliver sites you actually own and can update yourself.            

            
                October 17, 2025 · 7 min read            
        

        
            
                    
	
        
            
                Methodology; Blunt and Reproducible
                I’m Nolan, founder of FunkPd, and I audited 12 local teams to answer one hard question: Who builds a WordPress site you can actually walk away with?
			
			
				We tested live client sites for 12 Winnipeg teams between Sept 15 – Oct 12, 2025. We scored five categories (0–5 each), with Ownership getting double weight.
				
					Score formula: (Ownership×2 + Outcomes + Technical + Local + NoBullshit) ÷ 6
					
						×2 Weight Ownership & Transparency: Documented credential transfer, DB/media export, no proprietary lock-in.
						Operator Outcomes: Measured PageSpeed/Lighthouse on public client sites (mobile).
						Technical Depth: Evidence of server tuning, minimal-plugin builds, version control.
						Local Execution: Physical Winnipeg presence and a reachable support process.
						No Bullshit: Claims matched to evidence; no vague "managed" clauses.
					
				
                                Everything here is reproducible. Run PageSpeed Insights on the same sites. Our numbers are real.
                                Cross-check every quote with our Winnipeg cost breakdown; the pricing traps line up with the scores we found.
                        
                
        

	
		
			
				The Toolkit: How to Audit Any Web Developer
				Before the rankings, here are the tools to do this yourself.
			

			
				
					1. The Litmus Test
					Ask for a sample contract or SOW before you sign. If they refuse, walk away. Period.
				
				
					2. Red Flags
					Hidden lock-in, proprietary tech with no export, or content deletion clauses should kill any deal instantly.
				
				
					3. Contract Language
					Insist on explicit clauses for Credential Handoff, Export Deliverables, and a No-Deletion Warranty in your SOW.
				
			
		
	

	
		
			
				The Rankings: Winnipeg WordPress Audited
			

			
				
				
					
						1. FunkPd
						4.9 / 5
					
					
					
					
						
							I’m scoring my own company. Here’s why. Performance: Sub-500ms loads. Every 2025 build scored 95+ mobile Lighthouse. Ownership: You get every credential, database, and media file at launch. No retainer, no lock-in. Contracts include database and media export rights by default.
							
								Hiring Note
								The queue is 2–3 months. If you want an owned-outright asset and don’t need babysitting, this is the deal.
							
						
						
						
							100Perf.
							100Access.
							100SEO
							0CLS
						
					

					Full Lighthouse Data
                    
					
						
							Performance score100
							Accessibility score100
							Best Practices score100
							SEO score100
							PWA score38
							LCP (ms)1628
							TBT (ms)0
						
					
				

				
					
						2. Verda Design
						4.6 / 5
					
					
					
					
						
							Verda provides clear contract language and consistent uptime. Clients retain full control and their contracts explicitly allow migration. A top choice for anyone who wants agency polish with honest, owner-friendly deliverables. Performance is stable but not tuned for elite speed.
							
								Hiring Note
								Predictable support and strong ownership clarity. A safe bet for local accountability.
							
						
						
						
							55Perf.
							69Access.
							93SEO
							9802LCP (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score55
							Accessibility score69
							Best Practices score78
							SEO score93
							PWA score38
							LCP (ms)9802
							CLS000554
						
					
				
				
				
					
						3. First Rank
						4.4 / 5
					
					
					
					
						
							An SEO-centric team with real technical discipline. They rightly encourage client-owned hosting, but an optional 12-month managed period creates a mild dependency that can become a lock-in if not managed. Strong performance and SEO practices.
							
								Hiring Note
								A great choice for SEO-first projects, but get your migration terms in the SOW before you sign.
							
						
						
						
							20Perf.
							84Access.
							93SEO
							13161TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score20
							Accessibility score84
							Best Practices score70
							SEO score93
							PWA score38
							LCP (ms)12110
							TBT (ms)13161
						
					
				

				
					
						4. Visual Lizard
						4.3 / 5
					
					
					
					
						
							Decades of engineering history and real developers. Their proprietary Catalyst CMS is a portability trap, but their WordPress projects are technically solid. The ambiguity of platform choice is the only thing holding them back on the ownership score.
							
								Hiring Note
								Confirm you are getting a WordPress build up front and demand documented export paths.
							
						
						
						
							49Perf.
							93Access.
							81SEO
							5768LCP (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score49
							Accessibility score93
							Best Practices score93
							SEO score81
							PWA score38
							LCP (ms)5768
							TTI (ms)5954
						
					
				
				
				
					
						5. Unite Interactive
						4.1 / 5
					
					
					
					
						
							A scaled agency with excellent process and QA, great for enterprise clients. They build both WordPress and custom CMS systems. As with Visual Lizard, ownership depends entirely on the scope.
							
								Hiring Note
								Perfect for large builds, but you must require export rights and credential handoff in the SOW.
							
						
						
						
							47Perf.
							79Access.
							100SEO
							1618TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score47
							Accessibility score79
							Best Practices score44
							SEO score1.00
							PWA score25
							LCP (ms)4254
							TTI (ms)9264
						
					
				

				
					
						6. Modern Earth
						3.9 / 5
					
					
					
					
						
							A legacy provider with stable, mature infrastructure and local hosting. Their all-in-one model provides reliability but the tighter hosting ties reduce client autonomy. Good for owners who want a single vendor, less good for those who demand portability.
							
								Hiring Note
								Expect stability, but negotiate clear migration steps and an export SLA before signing.
							
						
						
						
							44Perf.
							89Access.
							93SEO
							4768TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score44
							Accessibility score89
							Best Practices score74
							SEO score93
							PWA score38
							LCP (ms)4237
							TTI (ms)10445
						
					
				

				
					
						7. SWD (Spelunking Web Design)
						3.7 / 5
					
					
					
					
						
							A small studio with a long history of practical, functional builds. The work is solid and owner-friendly, but hand-off documentation and processes are lean. They ship quality code; they just don't formalize the hand-off process like a larger agency.
							
								Hiring Note
								A reliable choice for low-friction builds. Pair them with your own internal ops checklist to ensure a smooth takeover.
							
						
						
						
							76Perf.
							94Access.
							93SEO
							0TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score76
							Accessibility score94
							Best Practices score93
							SEO score93
							PWA score38
							LCP (ms)4557
							TTI (ms)3444
						
					
				

				
					
						8. Webgig Team
						3.5 / 5
					
					
					
					
						
							Solid small-business work with consistent performance. The major weakness is a lack of clear, public policies on ownership. Clients get admin access, but export and migration terms are not explicit in their standard agreements.
							
								Hiring Note
								The work is fine, but you must require explicit credential and export clauses in the SOW.
							
						
						
						
							29Perf.
							86Access.
							83SEO
							15152TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score29
							Accessibility score86
							Best Practices score96
							SEO score83
							PWA score38
							LCP (ms)6484
							TTI (ms)23966
						
					
				

				
					
						9. WinnipegTech
						3.3 / 5
					
					
					
					
						
							Known for fast turnarounds and affordable builds. Their speed comes at the cost of polish. Credentials sometimes arrive late and documentation is minimal. Performance on live sites was among the slowest we tested.
							
								Hiring Note
								Use for rapid, low-cost launches, but plan to manage the documentation and hand-over yourself.
							
						
						
						
							25Perf.
							76Access.
							93SEO
							59516TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score25
							Accessibility score76
							Best Practices score70
							SEO score93
							PWA score38
							LCP (ms)27219
							TTI (ms)77245
						
					
				

				
					
						10. Hello Digital Marketing
						3.2 / 5
					
					
					
					
						
							This is a managed, subscription service. It’s a pure rent-and-maintain model: convenient for hands-off owners, but you never truly own the operational stack. Cancelling means losing service continuity and requires a full migration effort.
							
								Hiring Note
								Do not use subscription models if you prioritize ownership. This is for those who prefer fully managed convenience and accept rental semantics.
							
						
						
						
							39Perf.
							80Access.
							93SEO
							10627TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score39
							Accessibility score80
							Best Practices score74
							SEO score93
							PWA score25
							LCP (ms)4449
							TTI (ms)18726
						
					
				

				
					
						11. Websites.ca
						2.8 / 5
					
					
					
					
						
							A prime example of the ownership trap. For a flat monthly fee, you get decent performance. However, their terms of service allow them to delete all of your content upon cancellation. This is the single biggest red flag in this entire report.
							
								Hiring Note: Severe Risk
								Avoid at all costs if you ever plan to own or migrate your website.
							
						
						
						
							81Perf.
							90Access.
							100SEO
							507TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score81
							Accessibility score90
							Best Practices score1.00
							SEO score1.00
							PWA score38
							LCP (ms)3016
							TTI (ms)4866
						
					
				

				
					
						12. Dynamite Design
						3.85 / 5
					
					
					
					
						
							A long-standing local agency with BBB accreditation. We could not identify live client sites to test, so this score is based on their own site's performance and public materials. They present as a capable generalist, but ownership details require a contract check.
							
								Hiring Note
								Treat as a competent local option, but do your own due diligence and get a clear export clause in the SOW.
							
						
						
						
							33Perf.
							90Access.
							100SEO
							3406TBT (ms)
						
					

					Full Lighthouse Data
                    
					
						
							Performance score33
							Accessibility score90
							Best Practices score96
							SEO score1.00
							PWA score38
							LCP (ms)8214
							TTI (ms)11525
						
					
				

			
		
	

	
		
			
				Ownership is a Technical State.
				It's not a slogan. It is the verifiable state of possessing your code, credentials, database, and media.
				FunkPd ranks first not because of self-praise, but because ownership is the metric and our entire process is optimized for it. If you can’t export it, you don’t own it.
				
					Hire The One Who Gives You The Keys
				
			
		
	            
            
                
                    
                        On this page
                    
                    
                        
                            On this pageMethodology; Blunt and ReproducibleThe Toolkit: How to Audit Any Web DeveloperThe Rankings: Winnipeg WordPress AuditedOwnership is a Technical State.                        
                    
                
            
        
        
    
        
        
            operator
            Nolan Phelps
            
                Platform engineer. WordPress builds for industrial operators. 2006 to present. Trade background. Fixed scope, fixed price.
            
            View profile
        
    

        
    
        Operator Identity
        Built and fixed by one person.
        You work with Nolan Phelps directly. He does the diagnosis, scope, build, fixes, and handoff himself.
        No sales layer. No project manager. No outsource chain.

        
            Since 2017
            Winnipeg
            WordPress rescue
        

        
            Start with the problem
            Meet Nolan
        
    

    
        
        Nolan Phelps
        FunkPd
    


    
        
            WordPress Risk Intake
            Get fixed scope for the build, fix, or stabilization.
            Share the goal, failure if there is one, risk, access status, and deadline. Typical response: 1 business day.
        
        
            Get Fixed Scope
            
                Call +1-431-813-2402
                Email contact@funkpd.com
            
            Operator response window: 1 business day.
        
    

    
        Since 2017 building, rescuing, rebuilding, and stabilizing WordPress systems.
        Delivery model: async execution with fixed-scope handoff.
        Coverage: Winnipeg HQ. Serving CA, US, and AU operators.
    

    
        
            Company
            
                About
                Nolan
                Process
                Contact
            
        

        
            Main Paths
            
                
                    Rescue
                    Contain failed builds, outages, hacks, and unsafe launches.
                
                
                    Builds
                    Build new sites and replace sites that are no longer worth patching.
                
                
                    Stabilize
                    Cut bloat, restore performance, and lower operating risk.
                
                
                    Systems
                    Custom systems for catalogs, commerce, integrations, and workflows.
                
            
        

        
            Resources
            
                Work
                Pricing
                Blog
                Services
                FAQ
                Glossary
                Health Check
            
        

        
            Credibility + Contact
            
                BBB Profile
                LinkedIn
                Crunchbase
                GitHub
                contact@funkpd.com
                +1-431-813-2402
                521 Washington Ave, Winnipeg, MB R2K 1M1, Canada
            
        
    

    
        © 2026 FunkPd. Senior WordPress build, rescue, stabilization, and systems work.
        
            Terms
            Privacy
            Sitemap
        
    

    


                
        Turn off cookies