Tutoring platform rebuild

A lead-generation system for a tutoring platform

A Wix-to-Webflow rebuild with 30 CMS collections the team fills from Google Sheets, a multistep lead form with business-rule routing, and attribution that survives every redirect.

ikando.com/fr, home page
Client
Ikando, private tutoring in France
Role
Webflow developeragency project, page designs supplied by the client
Stack
  • Webflow CMS
  • Webflow Localization
  • Custom JavaScript
  • Zapier
  • Google Sheets
  • Salesforce
  • GTM
  • CookieYes
  • VWO
Timeline
November 2024 – presentlaunched December 2024, still in active development
30
CMS collections
4,000+
leads through the main form
2
brands on one architecture
2 yrs
in active development

Overview

Ikando matches families with private tutors across France. The business runs on paid campaigns, so the site works as a lead-generation engine: many landing pages, all feeding into one form. The team wanted more control than Wix allowed and had run into SEO issues there, so they moved to Webflow with a new design. The architecture started on TSS, Ikando’s sibling brand, which I built first. I extended it to Ikando and have kept developing both since.

My role

  • Built the site in Webflow from the client’s page designs
  • Designed the CMS architecture on TSS and extended it to Ikando: 30 collections, their relationships and field types
  • Set up a Google Sheets → CSV → Webflow workflow and taught the team to launch pages with it
  • Built the multistep lead form, its validation and its business-rule routing
  • Built a global attribution script that carries campaign data through to every submission
  • Built plan calculators for Allakando, Ikando’s parent company, connected to Salesforce
  • Implement A/B test variants and consent setup

Challenges & solutions

A CMS for a marketing team that never stops launching pages

The client gave me page designs and told me which content was dynamic. Every structural decision after that was mine: which content gets its own reference collection, how collections link to each other, and which fields stay plain text and which need rich text. The site mixes static pages with 30 collections, grouped by purpose:

  • Pages: paid landings, blog, forms
  • Locations: main French cities plus a second tier of cities
  • Grades and subjects
  • Data: counselors, teachers, reviews and city maps, which mainly feed other pages as references
One of the city landings, generated from the Locations collection

Paid landings matter most, because every campaign needs its own page. Nobody fills these collections item by item. I set up a workflow where the team prepares content in a Google Sheet, exports it as CSV and imports it into Webflow, and I taught them to run it. They now launch new pages in existing collections without me.

A form that starts before the form

Most pages carry an entry point that already answers step one (I’m a parent / I’m a student), so users land on the form one step in. The flow then goes:

  • Grade level, with a separate set of levels for higher education
  • Subjects
  • Postal code
  • Personal details: gender, name, email and phone, all validated before submission
The form picks up from the entry point on the page, one step in

Zapier sends every submission to Google Sheets. On TSS the same form adds a “time to call” step with its own scheduling logic.

Postal codes as business logic

Postal codes decide whether Ikando can serve a lead at all, so free text wasn’t good enough. The first version of the form used Google Places autocomplete. As the form logic changed, I replaced it with a custom dropdown that suggests and validates entries against the client’s own list of postal codes, each flagged for whether a tutor is available there. This removed inaccurate addresses and made routing depend on data the client controls.

Suggestions and validation come from the client’s own postal-code list

Areas with no tutor send the user to a dedicated “no match yet” page instead of the standard thank-you page.

Same form, two endings: the postal code decides which one a family sees

Plan calculators connected to Salesforce

For Allakando, Ikando’s parent company, and another of its businesses, I built calculators for subscription and fixed-cost plans. They have two modes, both driven by URL parameters:

  • View: a customer opens a link with their current plan preselected, adjusts the settings and sees how the price would change
  • Evaluation: a prospect receives a proposed plan and can accept it or change it, then submits either way
View mode: the plan arrives preselected from the URL
Evaluation mode: accept the proposal or change it, then submit

Each submission sends both the proposed values and the changed ones, so the team sees exactly what changed. Zapier then registers the update in Salesforce.

Attribution that survives to the submission

Campaign data was being lost as visitors moved between pages or were redirected before reaching the form. I wrote a global script that captures the GCLID, GA client ID, GA source and medium, Meta FBC, VWO campaign ID and landing page URL, and keeps them in localStorage. It also has fallbacks, such as reading cookies and retrying after a delay, for values that aren’t ready on page load. Hidden form fields then attach everything to each submission.

Experiments, consent and routing

  • Experiments: I build alternate versions of sections, such as two hero variants, with classes the marketing team targets in VWO
  • Consent: CookieYes, set up through GTM
  • Routing: the site is French-only but lives under /fr, served through Webflow Localization

Results

  • Leads submitted through the main form since launch

  • The team launches new CMS pages through Google Sheets and CSV import, without a developer

  • One architecture runs Ikando and TSS

  • Launched December 2024 and still in active development

The web is full of worlds

Let's build yours!