▸ The full walkthrough: 5 minutes, from the first form page to onboarded
What this does
The client opens their own form link and fills in four pages. On Submit, the form posts every answer in #onboarding-forms. The server then sends the Slack invites and the message to connect Viktor. After the call, a person ticks the call steps in the app and closes the onboarding.
The one thing to remember: mark "Ad account access obtained" done only when Viktor can read the ad account. If you mark it too early, a problem with the access stays hidden.
Step 2 · HereOnboarding form to onboardedForm, call, close
How it works
The client does the first half, in the form. The team does the second half, in the app.
The client opens their own form link. It is in the welcome email and in Fidel's welcome message.
The form has four pages: Your Details, Your Market, Your Offer and Access. A review page comes last.
Each Continue saves the page. The client can leave and come back to the same link later.
Two people can fill in the same form. For each answer, the last save wins.
The Access page asks for the ad account details. It also asks who to invite to the Slack channel, one email per line.
The client checks the answers and presses Submit. After that, the link shows that the client sent the form.
The form finds the client:
The client's own link names the client. Most forms match here.
If not, the form tries the email, a phone with a name, the names, close spellings and AI.
Not sure → a "pick the client" message goes in the thread, best guesses first. One pick links the form.
The form posts Onboarding form submitted in #onboarding-forms. Every question and answer goes in its thread.
When the form has a client, the server does these steps one time per form:
Replace a stand-in company name with the form's company name. Fill in an empty client name.
Share the client folder with the email on the form.
"Yes, it is done" for ad account access → post the Viktor message and its steps in the #onboarding thread.
That message tags Fidel and Paulo. It gives the ad account, the Business Portfolio and the Facebook Page.
"Not yet" for ad account access → post one line that asks Paulo to deal with it on the call.
Send a Slack Connect invite to each listed email, 10 at most. Each email gets a ✓ or ✗ line.
In the app, open the client page. Under Onboarding Step Details, three steps have a Mark done button:
Onboarding call booked → the client moves to 40 - Call Booked.
Onboarding call takes place → the client moves to 50 - Call Taken. The app asks first.
This also tells the team that the call is done. It starts the 24-hour clock on the two follow-up steps.
Ad account access obtained → mark it only when Viktor can read the ad account.
A Fathom call that matches the client can also tick the two call steps by itself.
To close, press Confirm & close under Onboarding Call Details. The client moves to 100 - Onboarded.
If no call is on record, use the Move to button under Onboarding Details. It moves the client on one stage.
Then the team waits for the first footage. The Editing Pipeline takes over from here.
The moving parts
The form has its own small server. It hands the slow work to LeadLift's server. The app shows the result.
Starts from
The client presses Submit on the onboarding form.
Runs on
The form's server on Cloudflare, then LeadLift's server on Modal
Keeps its data in
A draft while the client types. One form record on Submit. The client record, the onboarding steps and the call records.
Posts to
#onboarding-forms: the form and every answer · the client's #onboarding thread: the Viktor message and the invite lines · #sentry: a filing that cannot finish
Shows in the app
The Onboarding queue: late steps and briefs to confirm. The client page: the steps, the call and the stage.
Timer
No schedule. A database rule starts the 24-hour clock after the call step.
The form
onboarding.leadliftagency.co · four pages and a review page · the questions live in one list in the code
Talks to
Slack (the invites) · Make (the folder share) · OpenRouter (the AI client match) · Fathom (the call steps)
Good to know (as of 12 Oct)
• Not built yet: the client knowledge bank, the brief from the call and the draft targets from the call.
• Five steps have no Mark done button: "Draft contract from template", "Send contract", "Client knowledge bank created", "Transcript captures details" and "Client knowledge bank updated".
• These five show as late on the queue when their 24 hours end.
• The brief under Onboarding Call Details stays empty. Confirm & close still works.
• A form that you link in the app does not send the invites or the Viktor message. Do them by hand.
• If a filing stops halfway, nobody is told. Paulo notices when no #onboarding-forms post comes.
• The form does not save how it found the client. Nobody can check a wrong match later.
What you can safely change
Green: change it in the app. Amber: ask Claude in the LeadLift code folder, then check the result. Red: do not change it. Call us.
Green
The three steps that a person does. Press Mark done on the client page.
Green
The onboarding stage. Use the Move to button. To fix a wrong move, pick the stage from the list.
Green
Confirm & close. It records who confirmed the brief and moves the client to 100 - Onboarded. It asks first.
Green
The provisioning fields. Ad account access, ad account, Ads Manager link, pixel, Viktor connected and Module 3. Change them under Provisioning.
Green
The four targets. Cost per lead, leads per week, quality mix and drift threshold. Tick Confirmed when the client agrees. A client cannot go Active before that.
Green
A form with no client. Open it from a client page and link it to that client. Then do the invites and the Viktor message by hand.
Amber
The form's questions. Claude changes the question list, checks it and tests it. Then a developer publishes the form and checks it live.
Amber
The words of the Slack question and the five ad account questions. The server reads them word for word, and a test holds each one. Change the question and the test together.
Amber
The 24-hour window on each team step. Fidel set this on 24 Sep. After a change, check the late steps on the queue.
Red
The form's web address. The welcome email and Fidel's welcome carry it. If it changes, the links that clients have stop working.
Red
The web address that the form calls on the server. If it changes, no invites and no Viktor message go out.
Red
The password that the form, the server and Make share. It is set in three places. Change all three at the same time.
Red
The 17 step names and the tables. The app, the call code and the database clock read them. A changed name stops those parts.
Red
The database rule that starts the 24-hour clock. It calls the server's address. If the server moves, the clock stops with no error.
Red
Who the lines tag. The form post tags Icarus Growth today. The invite and ad account lines tag Paulo. Ask us to change them.
Red
The form's release. It has no rollback command, and each release writes the live settings again. A developer does it.
What connects to this
This tab shows what feeds this part and where the client goes next.
◀ Comes in from
Payment to onboarding started The welcome email carries the client's own form link. The invites need the client channel that it made.
Contract A person sends it by hand. It does not hold this part back. It has no page yet.
Fathom A matched onboarding call ticks the two call steps.
Goes out to ▶
Editing PipelineThe team waits for the first footage in Raw Footage.
#onboarding-forms and the client's #onboarding thread
This page does not show the contract. A person does it by hand until Sheni makes the template.
If something looks wrong
The client says that they submitted, but no post came in #onboarding-forms. The filing may have stopped halfway. Look in #sentry. Then tell Icarus Growth: we finish the filing.
The post says "no client matched". Pick the client in the thread. A pick also sends the invites and the Viktor message.
The post says "linked by a guess". Check that the client is right. Then do the client name, the ad account message and the invites by hand.
A ✗ line says "not invited, do manually". The line gives the reason. Invite that person from the client channel by hand.
A step shows as late on the queue. The five steps with no button show late as of 12 Oct. For any other step, do the step and mark it done.
The two follow-up steps did not get a clock. Check that the step "Onboarding call takes place" shows as complete. If it does, tell us.
You cannot break this for good. Each change to the code is a saved version. A developer can put back the last working version of the server with one command. A form keeps each saved page, so the client loses no answers.
Call us if forms stop coming into #onboarding-forms, or Confirm & close fails for a client.
Jargon buster
Draft
The answers that the form saves at each Continue, before Submit.
Filing
The work after Submit: find the client, post in Slack, start the invites.
Client picker
A Slack message with a list of clients. A person picks one to link the form.
Viktor
A bot in LeadLift's Slack. It joins each client channel. Fidel connects it to the client's ad account by hand.
Stage
Where the client is on the way to onboarded: from 0 - Paid to 100 - Onboarded.
Late
A step that is past its time window. The queue shows it in red.