Rangda Films | Modular Portfolio Website

Rangda Films | Modular Portfolio Website
        
        
    
    
    
    
    
    
    
    
    
    
    


































    
{
    "@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/works/rangda-films/#webpage",
    "url": "https://funkpd.com/works/rangda-films/",
    "name": "Rangda Films | Modular Portfolio Website",
    "description": "A modular film portfolio with autoplay reels and crisp typography.",
    "datePublished": "2026-05-08T06:49:12+00:00",
    "dateModified": "2026-05-08T06:49:12+00:00",
    "isPartOf": {
        "@id": "https://funkpd.com/#website"
    }
}

            
    
        
        
        
    
    
(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 / works/rangda-films
            
            Get Fixed Scope
        

    

    
        Menu
        
            
        
    
    
        
            
                Main
                
                    
                        
                        
                    
                    Home
                
                
                    
                        
                        
                        
                    
                    Start Here
                
                
                    
                        
                        
                        
                    
                    Rescue
                
                
                    
                        
                        
                        
                    
                    Builds
                
                
                    
                        
                    
                    Stabilization
                
                
                    
                        
                        
                    
                    Work
                
                
                    
                        
                        
                    
                    Pricing
                
                
                    
                        
                    
                    Contact
                
            

            
                Resources
                
                    
                        
                        
                    
                    Service Map
                
                
                    
                        
                        
                    
                    Nolan
                
                
                    
                        
                        
                        
                    
                    Process
                
                
                    
                        
                        
                    
                    Blog
                
                
                    
                        
                    
                    FAQ
                
                
                    
                        
                        
                        
                        
                    
                    Glossary
                
            

            
                        
                Work
                                
                    
                        
                        
                        
                    
                    Minetek
                
                
                    
                        
                        
                        
                    
                    Actisafe
                
                
                    
                        
                        
                        
                    
                    Loud Awards
                
                
                    
                        
                        
                        
                    
                    Fanquip
                
                
                    
                        
                        
                    
                    All case studies
                
                            
            
            
                    
        
            Status
            No alerts. Form updates show here.
        
    

    
    
        Rangda FilmsFilm director portfolio: Custom WordPress layout with autoplay hero and modular reel blocks.Visit Live SiteView Other WorkTimeline2 WeeksHistorical project range$2k–$3kStackWordPress with Custom Overrides
        
            00 // Interface Preview
        

        
            
                
                Desktop and mobile references
            

            
                
                    
                
                
                    
                
            
        


            
                01 // Snapshot
            

            
                
                    
                        Operator
                        Director needing a bold reel that loads smooth
                    
                

                
                    
                        Was Broken
                        Placeholder theme, jittery hero, weak type
                    
                

                
                    
                        Changed
                        Custom WordPress layout with autoplay hero and modular portfolio blocks
                    
                

                
                    
                        Trajectory
                        Professional tone matched bids for bigger contracts
                    
                
            

            
                02 // Verdict
            

            
                Solo director pitching for short films and commercials. Needed hero video to run clean on desktop and phone. Portfolio had to feel premium without hiding credits.
            

            
                03 // Structural Constraints
            

            
                
                    
                        Placeholder Theme
                        Theme demo left placeholder styling and clashing fonts
                    
                

                
                    
                        Hero Jitter
                        Hero video stuttered and buried play action
                    
                

                
                    
                        Flat Case List
                        Case list was flat; no way to feature key reels
                    
                
            

            
                04 // Leverage Moves
            

            
                
                    
                        Autoplay Hero
                        Built an autoplay hero with controlled playback cues and safe fallbacks
                    
                

                
                    
                        Bold Type Design
                        Cut layout to simple grids and bold type tuned for motion stills
                    
                

                
                    
                        Image Optimization
                        Compressed reel previews and lazy-loaded blocks to stop stutter
                    
                

                
                    
                        Reusable Portfolio Cards
                        Set reusable portfolio cards so owner can add shoots fast
                    
                
            

            
                05 // Evidence
            

            
                
                    
                        Smooth Playback
                        Hero plays clean without fighting rest of page
                    
                

                
                    
                        Readable Portfolio
                        Portfolio reads like a reel sheet with room for new work
                    
                

                
                    
                        Professional Presence
                        Professional tone matched bids for bigger contracts
                    
                
            

            
                06 // Ruled Out
            

            
                
                    
                        Complex Video Platforms
                        Complex video hosting platforms (WordPress with custom handling sufficient)
                    
                

                
                    
                        Premium Theme Purchase
                        Premium film portfolio theme (adds cost without value for custom needs)
                    
                

                
                    
                        Heavy Frameworks
                        Heavy JS frameworks (slows down playback, adds complexity)
                    
                
            

            
                07 // Before / After
            

            
                
                    
                        Before
                        Demo theme with jittery hero and mismatched fonts
                    
                

                
                    
                        After
                        Custom WordPress layout with autoplay reel, bold type, and modular cases
                    
                
            

            
                08 // Decision Log
            

            
                
                    
                        Muted Autoplay
                        Autoplay hero muted with manual controls for browsers that block sound
                    
                

                
                    
                        Lazy Loading
                        Lazy loading on reel thumbnails to keep first paint fast
                    
                

                
                    
                        Type Consistency
                        Custom type scale locked to viewport to avoid jumps between breakpoints
                    
                

                
                    
                        Aspect Ratios
                        Reusable portfolio cards with consistent aspect ratios to prevent layout shifts
                    
                
            

            
                09 // Irreversible Outcomes
            

            
                
                    
                        Smooth Playback System
                        Autoplay system with controlled playback and browser fallbacks
                    
                

                
                    
                        Fast Asset Loading
                        Lazy loading prevents layout shift on portfolio views
                    
                

                
                    
                        Clean Type System
                        Type system prevents jarring font changes across breakpoints
                    
                
            

            
                10 // Status
            

            
                
                    Live and positioned for bigger contracts.
                
                
                    Role: Technical Lead / Developer.
                    Mandate: Smooth playback, professional presentation, fast assets.
                
                
                    
                        VISIT LIVE SITE ->
                    
                
            

        
    
        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