Innovation of the Year Award
Innovation of the Year Award
Innovation of the Year Award
Innovation of the Year Award
Crowning the Best in Innovation
Crowning the Best in Innovation
Crowning the Best in Innovation
Crowning the Best in Innovation
Eligibility Criteria
Selection Criteria
Rewards
Timeline

58 Days 11 Hours

58 Days 11 Hours

left to apply

left to apply

Media Partner

2025 Finalists

FAQ

What is the difference between a Startup Challenge and an Award?

Do I need to buy a pass to apply for a Startup Challenge / an Award?

Can I apply for more than one Startup Challenge / Award?

How do I add images?

Do I need to buy a pass to apply for a Startup Challenge / an Award?

Can I apply for more than one Startup Challenge / Award?

What is the difference between a Startup Challenge and an Award?

Do I need to buy a pass to apply for a Startup Challenge / an Award?

Can I apply for more than one Startup Challenge / Award?

FAQ

What is the difference between a Startup Challenge and an Award?

Do I need to buy a pass to apply for a Startup Challenge / an Award?

Can I apply for more than one Startup Challenge / Award?

What is the difference between a Startup Challenge and an Award?

Do I need to buy a pass to apply for a Startup Challenge / an Award?

Can I apply for more than one Startup Challenge / Award?

******* JAVASCRIPT *******/ /** * Allowed parameters for the tracking code */ const allowedParameters: string[] = [ 'ca', 'utm', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', // 'cat', // Blog // 'ag_t', 't', // Warning this parameters is used like tracking for Challenges partners "Agorize", 'wid' // Paramters for revolugo urls ]; /** * Rreturn the object with the allowed parameters * @param ownParams URLSearchParams * @returns Object */ const ownCtmParameters = (ownParams: URLSearchParams) => { let obj = {}; for (const [key, value] of ownParams.entries()) { //console.log("ownCtmParameters key: ", key); if (allowedParameters.includes(key)) { // console.log("PAss key: ", key); obj[key] = value; } else { // console.log("No PAss key: ", key); } } return obj; }; /** * Insert the tracking code in the anchor elements * @returns void */ const insertTrackingCode = () => { // Get tracking parameters from URL search params const searchParams = new URLSearchParams(window.location.search); // Convert search params to object const filteredParams = ownCtmParameters(searchParams); // If no parameters, return early if (Object.keys(filteredParams).length === 0) { return; } const paramsString = new URLSearchParams(filteredParams).toString(); const baseUrl = window.location.origin; // Get all anchor elements from the current document const anchors = document.querySelectorAll('a'); for (const anchor of anchors) { const href = anchor.getAttribute('href'); const target = anchor.getAttribute('target'); if (!href || target === '_blank') { continue; } // Normalize href const normalizedHref = href.startsWith('https') ? href : href.replace(/^\.\//, '/'); try { const url = normalizedHref.startsWith('http') ? new URL(normalizedHref) : new URL(normalizedHref, baseUrl); const baseUrlObj = new URL(baseUrl); const isExternal = url.origin !== baseUrlObj.origin && !normalizedHref.includes('vivatech.com') && !normalizedHref.includes('vivatechnology.com'); if (isExternal) { continue; } // Add tracking parameters const hasExistingParams = url.search.length > 0; if (hasExistingParams) { url.search += '&' + paramsString; } else { url.search = '?' + paramsString; } anchor.setAttribute('href', url.origin + url.pathname + url.search + (url.hash || '')); } catch (e) { // If href is not a valid URL, skip it continue; } } }; /******* END JAVASCRIPT *******/ /******* INTEGRATION *******/ // Or with DOMContentLoaded document.addEventListener('DOMContentLoaded', () => { insertTrackingCode(); }); /******* END INTEGRATION *******/