Policy), ); }); window.document.addEventListener('consentPolicyChanged', ({ detail }) => { setConsent('update', detail.policy); }); function evaluateConsentPolicy(policy, defaultPolicy) { const { gdprEnforcedGeo } = window.wixTagManager.getConfig(); return defaultPolicy && gdprEnforcedGeo ? { ...policy, advertising: false, analytics: false } : policy; } function setConsent( action, { advertising, analytics, functional, waitForUpdate }, ) { (function () { window.dataLayer.push(arguments); })('consent', action, { ad_storage: advertising ? 'granted' : 'denied', ad_user_data: advertising ? 'granted' : 'denied', ad_personalization: advertising ? 'granted' : 'denied', analytics_storage: analytics ? 'granted' : 'denied', functionality_storage: functional ? 'granted' : 'denied', personalization_storage: 'granted', security_storage: 'granted', ...(waitForUpdate ? { wait_for_update: waitForUpdate } : {}), }); } }; let conversionActions; const loadConversionActions = () => { const XSRFToken = getXSRFTokenFromCookie(); const headers = { 'Content-Type': 'application/json', 'X-XSRF-TOKEN': XSRFToken, }; const getAppToken = window.wixEmbedsAPI?.getAppToken; if (getAppToken) { headers.authorization = getAppToken(METASITE_APP_DEF_ID); } const metaSiteId = window.wixEmbedsAPI?.getMetaSiteId(); return fetch( `${window.location.origin}/_serverless/pa-google/v1/accounts/current-site/conversion-actions?metaSiteId=${metaSiteId}`, { method: 'GET', headers, }, ) .then((response) => response.json()) .then((data) => { conversionActions = data.conversionActions; gtag('config', conversionActions[0].conversionId); }); }; const reportEvent = (eventName, eventParams) => { const category = eventNameToConversionActionCategory[eventName]; const conversionAction = conversionActions.find( (currentConversionAction) => currentConversionAction.category.category === category, ); if (conversionAction) { let conversionData = { send_to: `${conversionAction.conversionId}/${conversionAction.conversionLabel}`, }; switch (category) { case 'PURCHASE': { const { revenue, id, currency, coupon, ...params } = eventParams; conversionData = { ...conversionData, ...paramsMapper({ revenue, id, currency, coupon }, channelParams), transactionId: eventParams.id, items: mapContents(params), }; break; } default: break; } gtag('event', 'conversion', conversionData); } }; let isBootstrapped = false; const bootstrap = () => { handleGoogleConsent(); loadGtag(); return loadConversionActions().then(() => { isBootstrapped = true; }); }; const bootstrapPromise = bootstrap(); const registerListener = () => { window.wixDevelopersAnalytics.register( 'd6708a0e-5b2a-458e-8cfe-bdca240aa2ce', (eventName, eventParams) => { if (isBootstrapped) { reportEvent(eventName, eventParams); } else { bootstrapPromise.then(() => { reportEvent(eventName, eventParams); }); } }, ); }; window.wixDevelopersAnalytics ? registerListener() : window.addEventListener('wixDevelopersAnalyticsReady', registerListener); })();
top of page

Woodcrafting Camp June 30-4

Bookings will open in a day.

Half-day and full-day options available (select at next stage).

Starts Jun 30, 2025
From 395 Swiss francs
Geneva (La Voie-Creuse 16)

Spots available


Cancellation Policy

Please note that we do not refund your bookings, however you can either reschedule 24 hours before or pass your spot to somebody around you.


Schedule


bottom of page