Run your visa consultancy from one board

Copilot puts every WhatsApp conversation, deadline and stage of the case in one place, so your team answers faster and no client goes quiet.

Începe acum
Copilot
Atendimentos
FiltroClassificarOpções
Novo2
T
Thiago Martins
ETA Reino Unido
T
Thiago Martins
R
Rafael Nunes
M
Martins - Família
R$ 300,00
Retorno 15 set, 2026
No prazo · 42 min
A
Ana Paula Rocha
Visto Mexicano
A
Ana Paula Rocha
B
Bruno Farias
R
Rocha - Família
R$ 650,00
Criado hoje, 09:12
No prazo · 18 min
Em atendimento1
L
Lucas Andrade
ETA Canadá
L
Lucas Andrade
R
Rafael Nunes
A
Andrade - Família
R$ 700,00
Retorno 16 set, 2026
No prazo · 3 h
Proposta enviada2
M
Mariana Costa
Visto Americano B1/B2
M
Mariana Costa
C
Camila Ribeiro
C
Costa - Família
R$ 890,00
Retorno 14 set, 2026
Violado · 2 dias
B
Beatriz Souza
eVisitor Austrália
B
Beatriz Souza
J
Juliana Prado
S
Souza - Família
R$ 420,00
Retorno 13 set, 2026
No prazo · 20 h
Retorno agendado1
G
Gustavo Pereira
Visto Schengen
G
Gustavo Pereira
J
Juliana Prado
P
Pereira - Família
R$ 750,00
18 set, 2026 14:00
Pausado
Ganho1
P
Paulo Oliveira
Visto Americano B1/B2
P
Paulo Oliveira
C
Camila Ribeiro
O
Oliveira - Família
R$ 3.560,00
Entrevista 24 set, 2026
Concluído

Monta o CRM da assessoria no meu workspace: catálogo de serviços, quadro de onboarding, agenda de entrevistas e regras de prazo, com as ações de cada um.

…my-copilot-app/src/constants/schema-identifiers.ts

+84-0
1export const SCHEMA_IDS = {
2 servico: { object: '733956fd-…', fields: { onboardings: '5b877c2a-…' } },
3 onboarding: { object: 'e7f1e750-…', fields: { servico: '42c9106f-…' } },
4 agendamento: { object: '16ffcc45-…', fields: { cliente: 'd84468aa-…' } },
5 regraPrazo: { object: '2f18d525-…', fields: { onboardings: 'b94b7f00-…' } },
79 unmodified lines

…my-copilot-app/src/objects/onboarding.object.ts

+237-0
1import { defineObject, FieldType, RelationType } from 'copilot-sdk';
3export default defineObject({
4 nameSingular: 'onboarding',
5 labelSingular: 'Onboarding', labelPlural: 'Onboarding',
6 icon: 'IconBriefcase',
7 fields: [
8 { name: 'codigoAtendimento', type: FieldType.TEXT, isUnique: true },
9 { name: 'status', type: FieldType.SELECT, options: [ … ] },
10 { name: 'inicioPrevistoEm', type: FieldType.DATE_TIME },
11 { name: 'servico', type: FieldType.RELATION, relationType: RelationType.MANY_TO_ONE },
226 unmodified lines

…my-copilot-app/src/objects/agendamento.object.ts

+198-0
1import { STANDARD_OBJECT } from 'copilot-sdk';
4 { name: 'agendamentoType', type: FieldType.SELECT },
5 { name: 'cliente', type: FieldType.RELATION,
6 relationTargetObjectMetadataUniversalIdentifier: STANDARD_OBJECT.company.universalIdentifier,
7 universalSettings: { relationType: RelationType.MANY_TO_ONE, joinColumnName: 'companyId' },
8 },
190 unmodified lines

…my-copilot-app/src/objects/servico.object.ts

+28-32
140 unmodified lines
141
141 {
142 name: 'onboardings',
143 type: FieldType.RELATION,
144 relationType: RelationType.ONE_TO_MANY,
145 relationTargetObjectMetadataUniversalIdentifier: SCHEMA_IDS.onboarding.object,
146 },

…my-copilot-app/src/views/documentos-pendentes.view.ts

+82-0
1import { defineView, ViewFilterOperand, ViewType } from 'copilot-sdk';
3export default defineView({
4 name: 'Documentos pendentes',
5 type: ViewType.TABLE,
6 filters: [
7 { fieldMetadataUniversalIdentifier: SCHEMA_IDS.onboarding.fields.inicioPrevistoEm,
8 operand: ViewFilterOperand.IS_IN_FUTURE },
9 ],
73 unmodified lines

…my-copilot-app/src/__tests__/schema.integration-test.ts

+412-40
150 unmodified lines
151 expect(application.objects).toHaveLength(1);
151 expect(application.objects).toHaveLength(4);
152 expectObject(application.objects, SCHEMA_IDS.onboarding.object, 'onboarding', 'Onboarding');
153 expectObject(application.objects, SCHEMA_IDS.agendamento.object, 'agendamento', 'Agendamento');
154 expectObject(application.objects, SCHEMA_IDS.regraPrazo.object, 'regraPrazo', 'Regra de prazo');
155 expectRelationPair(agendamentoClienteField, [agendamento.object, STANDARD_OBJECT.company.universalIdentifier], [...]);
325 unmodified lines

The problem.

Visa consultancies run on WhatsApp and spreadsheets, and that is where clients get lost

The attendant's personal WhatsApp

The conversation lives on the phone of whoever answered. Nobody else sees the history, and when that person leaves, the clients leave with them.

The spreadsheet and the generic CRM

Every applicant becomes a loose row. The family scatters, the consulate interview sits in someone's calendar, and nobody chases the pending payment.

Built for the visa business.

One board for the whole case, from the first message to the visa in hand

Sales, finance and onboarding work on the same client card. Nobody copies data, nobody asks a colleague for it.

One client, one card

Service, applicants, value, owner, stage and history on the same card. Sales, finance and onboarding each see only their own sections.

Official WhatsApp, inside the CRM

Your number talks straight to Meta. Queues hand out conversations, quick replies save the typing, and nothing depends on a phone staying on.

Control who sees what

Roles decide who views, edits or deletes. A deleted card waits 14 days in the trash. The manager changes fields, stages and rules without a developer.

01
02
03

Start with the consultancy already set up

Boards for sales, finance and onboarding, a services catalog for each visa type, a client card with service, applicants and value. Rename what you like, add what is missing.

Change the process without a developer

New field, new stage, new quick reply, a lock that stops a card moving without the required data. The manager does it in Settings, in minutes.

See the numbers without asking anyone

Dashboards are records too: cases per stage, per agent, per service, alerts in the last 7 days. Build the chart you need, then ask the AI what the data says.

The team will actually use it.

Made for the agent who spends the day in the conversation

Clean screens, familiar habits

Looks like the tools your team already uses. Nobody needs a course to open a card and answer.

Live board, AI on call

Cards move as the team works. Press @ and ask the AI how many cases are waiting for payment.

Fewer clicks per case

The card opens over the board, the saved filter survives a refresh, and the link keeps the card open for whoever receives it.

Questions?

The client stops waiting. Your team stops guessing.

Începe acum