Tutlo B2B Master

Pełna Specyfikacja Produktowa (PRD + Tech Spec) — dokument dla developera

📅 2026-03-03 🎯 200-300 demo/mies. 🤖 10 agentów AI 📊 12 tygodni budowy

1. Product Overview

Czym jest B2B Master

Tutlo B2B Master to agent-first GTM (Go-To-Market) platforma, która zastępuje klasyczny dział sprzedaży B2B systemem 10 autonomicznych agentów AI z ludzkim nadzorem — od zimnego leadu do podpisanego kontraktu.

Problem który rozwiązuje

Persony

PersonaRola w systemieGłówna wartość
SDR / HandlowiecCodzienny użytkownikGotowy plan dnia, spersonalizowane wiadomości, zero researchu
Sales ManagerNadzór pipelineReal-time widok pipeline, conversion rates, aktywność teamu
Marketing ManagerContent + trendyLinkedIn Studio, trends intelligence, campaign performance
CEO (Damian)Exec overviewMonthly board-ready raport, ROI, pipeline value

Czego NIE robi (scope exclusions)

2. Architektura Zakładek

2.1 Dashboard (Strona główna)

Daily Brief

Spersonalizowany briefing: "Cześć Piotr, dziś 8 zadań. 2 krytyczne (SLA), 3 follow-upy."

KPI Tiles

  • Pipeline value, Aktywne firmy, Oferty otwarte
  • Posty do zatwierdzenia, Response rate (7d), Demo ten tydzień

Alert Feed (Signal Stream)

Real-time: "Firma X opublikowała ogłoszenie HR", "Decydent Y zmienił pracę", "Firma W otworzyła ofertę 3×"

Quick Actions

➕ Dodaj firmę · 🎯 Stwórz kampanię · ✍️ Generuj post · 🔍 Zapytaj Copilota

2.2 Firmy (Company Database)

Widok listy

Filtry: status (8), branża, wielkość, ostatni kontakt, handlowiec, score, region. Szybkie wyszukiwanie: NIP, nazwa, osoba.

Widok Kanban

Kolumny = statusy: Cold → Do kontaktu → W kontakcie → Demo umówione → Zainteresowany → Negocjacje → Aktywny klient → Niezainteresowany. Drag & drop zmienia status.

Profil firmy

  • Dane ogólne: nazwa, NIP, KRS, branża, adres, WWW, LinkedIn, pracownicy, przychody
  • Osoby decyzyjne: lista kontaktów z priorytetami (primary/secondary/tertiary)
  • Historia kontaktów: timeline interakcji (DM, email, call, meeting)
  • AI Strategy Panel: aktualna strategia ABM, button "Odśwież"
  • Scoring: Propensity Score 0-100 z breakdown i trendem

Batch Actions

Zaznacz wiele → zmień status, przypisz handlowca, eksport CSV, dodaj do kampanii

2.3 Kontakty (People)

Lista osób decyzyjnych cross-firm. Profil: stanowisko, LinkedIn, email, telefon, historia interakcji.

"Warm Signal" Badge: 🔥 Post o HR/L&D · 🔄 Zmiana pracy · 👍 Like postu Tutlo · 📢 Ogłoszenie o pracę

2.4 ABM Strategy Engine

Per firma: "Generuj strategię" → AI output w formatce:

  • Dlaczego teraz: konkretny sygnał
  • Kto decydent: 2-3 osoby z priorytetem
  • Jaki hook: spersonalizowany opener
  • Jaki kanał: LinkedIn DM / email / telefon + uzasadnienie
  • Proponowane działania: 3-5 kroków z timeline

Historia strategii wersjonowana, diff view między wersjami.

2.5 Daily Task Board

Kanban: Do zrobienia → W toku → Zrobione. Zadania auto-generowane o 7:30 przez Daily Planner.

Per zadanie: firma, osoba, powód, sugerowana treść, priorytet (🔴/🟡/🟢), estymowany czas.

Actions: ✅ Zatwierdź · ✏️ Edytuj · ❌ Odrzuć. Filtr: moje / wszystkie / przeterminowane.

2.6 Outreach Center

Composer

Wybierz osobę → AI generuje LinkedIn DM / email / call script → edytuj → wyślij

Sekwencje

Multi-step: Day 0 connect → Day 1 DM → Day 4 email → Day 8 follow-up → Day 12 call. Stop na odpowiedź.

Inbox

Zebrane odpowiedzi z LinkedIn + email w jednym miejscu. Quick reply z AI suggestion.

2.7 Oferty (Proposals)

Generator: firma → AI tworzy ofertę (ROI calc, case study, cennik) → edit → wyślij z trackingiem.

Status: Wysłana → Otwarta → Negocjowana → Przyjęta ✅ / Odrzucona ❌

Alert: "Firma otworzyła ofertę 3× w godzinę" → sugestia call. PDF export + link tracking.

2.8 LinkedIn Content Studio

Per handlowiec: Tone of Voice setup → AI generuje 3 warianty postu → Approval Queue → Kalendarz → Publikacja

Formaty: Thought Leadership · Case Study · Hot Take · Behind the Scenes

Analytics: impressions, engagement, inbound DM, profile views delta

2.9 Marketing Trends

Feed: LinkedIn viral, YouTube (MFM, 30MPC), blogi, podcasty, Amazon bestsellery. Confidence score 0-100.

"Zaimplementuj" → agent tworzy action plan. Weekly brief (piątek). Knowledge base searchable.

2.10 Raporty & Analytics

  • Pipeline: wartość per etap, conversion rates, velocity, forecast
  • Activity: per handlowiec, leady per źródło
  • Campaign: sent, opened, replied, meetings booked
  • LinkedIn: per handlowiec, per format
  • Exec Summary: monthly PDF (auto-generated)

2.11 Ustawienia (Settings)

RolaUprawnienia
AdminPełny dostęp, zarządzanie użytkownikami, settings
Sales ManagerPipeline all, raporty, approval
SDRWłasny pipeline, zadania, outreach
MarketingLinkedIn Studio, Trends, Campaigns

+ integracje API, agent AI settings (model, temperatura, prompt), statusy firm, szablony

3. Kluczowe User Flows

Flow A: Onboarding nowej firmy

1
Źródło: import CSV / Apollo search / manual / Vibe Prospector chat
2
Research Scout auto-enrichment: KRS, LinkedIn, WWW, Apollo contacts
3
Contact Discovery: Apollo API → HR Director, CEO, L&D Manager + email/telefon
4
Lead Scorer → Propensity Score 0-100. Score > 60 → auto-promote "Do kontaktu"
5
ABM Strategy Generator → dlaczego teraz, decydent, hook, kanał
6
Assignment: auto (region/branża/workload) lub manual → handlowiec widzi w Dashboard

Flow B: Cykl dzienny handlowca

07:30
Daily Planner generuje 8-12 zadań z priorytetami
08:00
Dashboard: KPI tiles + alert feed + "8 zadań, 2 krytyczne"
08:15
Task Board: approve/edit zadania. Krytyczne SLA najpierw
08:30
Wykonanie: oferty, calle, follow-upy (z briefem AI)
09:30
LinkedIn Studio: zatwierdź 2 posty → kalendarz → publikacja
10:00
Cold outreach: AI wygenerował DM → review → send via Waalaxy
12:00
Inbox: odpowiedzi → book demo / log rejection

Flow C: Kampania outreach

Sygnał → Research Scout enrichuje → Lead Scorer update → ABM Strategy → Outreach Composer (sekwencja 5 kroków) → Handlowiec approve → Instantly/Waalaxy dispatch → Tracking → Odpowiedź = auto-pause + alert

Flow D: Post LinkedIn

Źródło (trend / case / kalendarz) → Content Agent generuje 3 warianty (ToV) → Approval Queue → Handlowiec edytuje → Kalendarz (wt/śr 8-10) → Publikacja → Tracking (impressions, inbound DM)

Flow E: Oferta

"Generuj ofertę" → Proposal Generator (ROI, case study, cennik) → Edit → Send z tracking link → Otwarta (alert) → 3× open = "Zadzwoń teraz" → Negocjacje → Przyjęta/Odrzucona → Status firmy auto-update

4. Model Danych (Supabase)

11 tabel: companies, contacts, interactions, tasks, sequences, sequence_steps, proposals, linkedin_posts, trends, ai_strategies, users

companies

CREATE TABLE companies (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name TEXT NOT NULL,
  nip VARCHAR(10), krs VARCHAR(10),
  industry TEXT, industry_category TEXT,
  address TEXT, city TEXT, website TEXT, linkedin_url TEXT,
  employee_count INTEGER, employee_range TEXT,
  annual_revenue_pln BIGINT, founding_year INTEGER, logo_url TEXT,
  -- Pipeline
  status TEXT NOT NULL DEFAULT 'cold',
  status_changed_at TIMESTAMPTZ,
  assigned_to UUID REFERENCES users(id),
  propensity_score INTEGER DEFAULT 0,
  score_trend TEXT DEFAULT 'stable',
  next_contact_date DATE, last_contact_date DATE,
  -- Enrichment
  enrichment_source TEXT, enriched_at TIMESTAMPTZ,
  tech_stack TEXT[], buying_signals JSONB, job_postings JSONB,
  -- Meta
  notes TEXT, tags TEXT[],
  created_at TIMESTAMPTZ DEFAULT now(),
  updated_at TIMESTAMPTZ DEFAULT now(),
  created_by UUID REFERENCES users(id)
);

contacts

CREATE TABLE contacts (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  company_id UUID NOT NULL REFERENCES companies(id) ON DELETE CASCADE,
  first_name TEXT NOT NULL, last_name TEXT NOT NULL,
  job_title TEXT,
  role_priority TEXT DEFAULT 'tertiary',
  email TEXT, email_verified BOOLEAN DEFAULT false,
  phone TEXT, linkedin_url TEXT,
  linkedin_last_activity TIMESTAMPTZ,
  linkedin_last_post_topic TEXT,
  warm_signals JSONB, apollo_id TEXT, notes TEXT,
  created_at TIMESTAMPTZ DEFAULT now(),
  updated_at TIMESTAMPTZ DEFAULT now()
);

interactions

CREATE TABLE interactions (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  company_id UUID NOT NULL REFERENCES companies(id),
  contact_id UUID REFERENCES contacts(id),
  user_id UUID REFERENCES users(id),
  type TEXT NOT NULL,  -- linkedin_dm, email, call, meeting, note, demo
  channel TEXT, direction TEXT DEFAULT 'outbound',
  subject TEXT, content TEXT, response TEXT,
  response_at TIMESTAMPTZ, sentiment TEXT,
  source TEXT DEFAULT 'manual', metadata JSONB,
  created_at TIMESTAMPTZ DEFAULT now()
);

tasks

CREATE TABLE tasks (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  company_id UUID REFERENCES companies(id),
  contact_id UUID REFERENCES contacts(id),
  assigned_to UUID NOT NULL REFERENCES users(id),
  type TEXT NOT NULL,  -- call, linkedin_dm, email, send_proposal
  priority TEXT DEFAULT 'planned',  -- critical, planned, optional
  status TEXT DEFAULT 'todo',  -- todo, in_progress, done, rejected
  title TEXT NOT NULL, description TEXT,
  suggested_content TEXT, trigger_reason TEXT,
  due_date DATE, due_time TIME, estimated_minutes INTEGER,
  completed_at TIMESTAMPTZ, rejection_reason TEXT,
  source TEXT DEFAULT 'ai',
  sequence_id UUID REFERENCES sequences(id),
  created_at TIMESTAMPTZ DEFAULT now()
);

sequences + sequence_steps

CREATE TABLE sequences (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  company_id UUID NOT NULL REFERENCES companies(id),
  contact_id UUID REFERENCES contacts(id),
  assigned_to UUID REFERENCES users(id),
  name TEXT,
  status TEXT DEFAULT 'draft',  -- draft, active, paused, completed, stopped
  channel_mix TEXT[],
  started_at TIMESTAMPTZ, completed_at TIMESTAMPTZ,
  stop_reason TEXT,
  instantly_campaign_id TEXT, waalaxy_campaign_id TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE sequence_steps (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  sequence_id UUID NOT NULL REFERENCES sequences(id) ON DELETE CASCADE,
  step_number INTEGER NOT NULL,
  channel TEXT NOT NULL,  -- linkedin_connect, linkedin_dm, email, call
  delay_days INTEGER DEFAULT 0,
  subject TEXT, content TEXT NOT NULL,
  status TEXT DEFAULT 'pending',  -- pending, sent, opened, replied, bounced
  sent_at TIMESTAMPTZ, opened_at TIMESTAMPTZ, replied_at TIMESTAMPTZ,
  metadata JSONB,
  created_at TIMESTAMPTZ DEFAULT now()
);

proposals

CREATE TABLE proposals (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  company_id UUID NOT NULL REFERENCES companies(id),
  contact_id UUID REFERENCES contacts(id),
  created_by UUID REFERENCES users(id),
  version INTEGER DEFAULT 1,
  status TEXT DEFAULT 'draft',  -- draft, sent, opened, negotiating, accepted, rejected
  title TEXT, content JSONB, template_used TEXT,
  pdf_url TEXT, tracking_link TEXT,
  sent_at TIMESTAMPTZ, first_opened_at TIMESTAMPTZ,
  last_opened_at TIMESTAMPTZ, open_count INTEGER DEFAULT 0,
  total_view_seconds INTEGER DEFAULT 0,
  accepted_at TIMESTAMPTZ, rejected_at TIMESTAMPTZ, rejection_reason TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);

linkedin_posts, trends, ai_strategies

CREATE TABLE linkedin_posts (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  author_id UUID NOT NULL REFERENCES users(id),
  status TEXT DEFAULT 'draft',
  format TEXT,  -- thought_leadership, case_study, hot_take, behind_scenes
  topic TEXT, content TEXT NOT NULL, hashtags TEXT[],
  scheduled_for TIMESTAMPTZ, published_at TIMESTAMPTZ,
  approved_by UUID REFERENCES users(id), approved_at TIMESTAMPTZ,
  impressions INTEGER, likes INTEGER, comments INTEGER, shares INTEGER,
  profile_views_delta INTEGER, inbound_dms INTEGER,
  linkedin_post_url TEXT, trend_id UUID REFERENCES trends(id),
  created_at TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE trends (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  title TEXT NOT NULL, summary TEXT,
  source_type TEXT, source_url TEXT, source_author TEXT,
  category TEXT, relevance_score INTEGER,
  actionable BOOLEAN DEFAULT false, suggested_action TEXT,
  action_status TEXT DEFAULT 'new',
  tags TEXT[], discovered_at TIMESTAMPTZ DEFAULT now(),
  created_at TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE ai_strategies (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  company_id UUID NOT NULL REFERENCES companies(id),
  version INTEGER DEFAULT 1,
  status TEXT DEFAULT 'draft',
  why_now TEXT, decision_makers JSONB,
  hook TEXT, recommended_channel TEXT,
  proposed_actions JSONB, confidence_score INTEGER,
  trigger_type TEXT,
  approved_by UUID REFERENCES users(id), approved_at TIMESTAMPTZ,
  generated_by TEXT DEFAULT 'abm_strategy_generator',
  created_at TIMESTAMPTZ DEFAULT now()
);

5. Agenci AI (10)

🧠 1. Research Scout

Rola: Enrichment — wzbogaca profil firmy danymi z internetu

Trigger: Nowa firma / request "Odśwież" / scheduled co 30 dni

Input: company.name, website, linkedin_url, nip

Output: employee_count, revenue, tech_stack, buying_signals, job_postings, kontakty

Model: Claude Sonnet 4 · Review: Brak (dane publiczne, auto-save)

📊 2. Lead Scorer

Rola: Nadaje Propensity Score 0-100

Trigger: Po enrichmencie / zmiana sygnału / daily batch 7:00

Weights: Branża fit (+20), Wielkość (+25), Sygnały zakupowe (+15), LinkedIn aktywność (+10), Revenue growth (+10), Historia (+20)

Model: Claude Sonnet 4 + rules · Review: RevOps spot check weekly

🎯 3. ABM Strategy Generator

Rola: Strategia dotarcia per firma

Trigger: Score > 60 / manual / nowy sygnał

Output: why_now, decision_makers, hook, channel, proposed_actions, confidence (1-10)

Model: Claude Opus 4 (deep reasoning) · Review: Handlowiec approve

📅 4. Daily Planner

Rola: Plan zadań na dzień per handlowiec

Trigger: Cron 7:30 CET (pon-pt)

Output: 8-12 tasks z priorytetem, briefem, suggested content

Model: Claude Sonnet 4 · Review: Handlowiec approve/reject

✉️ 5. Outreach Composer

Rola: Spersonalizowane wiadomości i sekwencje

Trigger: Request / auto po ABM approve

Output: LinkedIn DM / email / call script / pełna sekwencja 5 kroków

Model: Claude Sonnet 4 · Review: Handlowiec approve każdą wiadomość

📄 6. Proposal Generator

Rola: Spersonalizowane oferty z ROI calc

Trigger: Klik "Generuj ofertę"

Output: Oferta (dane firmy, plan, ROI, case study, cennik) + PDF

Model: Claude Opus 4 · Review: Handlowiec edytuje przed wysyłką

✍️ 7. LinkedIn Content Agent

Rola: Posty LinkedIn per handlowiec

Trigger: Weekly batch (pon 8:00) / manual

Output: 3 warianty postu dopasowane do Tone of Voice

Model: Claude Sonnet 4 · Review: Handlowiec approve

📡 8. Marketing Trends Monitor

Rola: 24/7 skanowanie źródeł + action plans

Trigger: Heartbeat 3×/dzień + weekly brief (piątek)

Sources: LinkedIn, YouTube (MFM, 30MPC), Sales Hacker, Amazon bestsellery

Model: Claude Sonnet 4 + Whisper · Review: Marketing Manager

⚡ 9. Analytics Sentry

Rola: Monitoring KPI + alerty anomalii

Trigger: Hourly + event-based (SLA breach)

Output: Alerty (dashboard + Slack), weekly exec summary

Model: Claude Sonnet 4 + SQL · Review: CRO weekly

🤖 10. Concierge Copilot

Rola: Asystent UI — odpowiada na pytania o firmy, pipeline

Trigger: Chat query handlowca

Input: Query + RAG over Supabase (pgvector + SQL)

Model: Claude Sonnet 4 · Review: Brak (read-only)

6. Integracje — Szczegóły API

Apollo.io

Endpointy:

  • POST /v1/mixed_people/search — wyszukiwanie kontaktów po firmie, stanowisku
  • POST /v1/organizations/enrich — enrichment firmy
  • POST /v1/people/match — weryfikacja emaili

Pobieramy: osoby decyzyjne (email, telefon, stanowisko, LinkedIn), dane firmy (employees, revenue, industry), intent signals

Instantly.ai

  • POST /api/v1/campaign/create — tworzenie kampanii
  • POST /api/v1/campaign/add-leads — dodawanie leadów
  • GET /api/v1/campaign/analytics — statystyki
  • GET /api/v1/unibox/emails — inbox (odpowiedzi)

Flow: Composer → create → add-leads → handlowiec approve → activate → poll analytics + unibox → sync Supabase

Waalaxy

POST /api/campaigns, POST /api/campaigns/{id}/prospects, GET /api/inbox

Limity: max 50-80 connections/dzień, 50 DM/dzień per konto. Fallback: PhantomBuster.

Supabase

Realtime: subscriptions na companies, tasks, proposals (live updates w UI)

Edge Functions: enrich-company, score-company, generate-daily-tasks (cron), track-proposal-open (webhook), sync-instantly-replies (cron 15min)

pgvector: embeddingi firm/strategii dla Copilot RAG

HubSpot (jednorazowy import)

GET /crm/v3/objects/companies|contacts|deals + GET /engagements/v1/

Import do Supabase z flagą source: 'hubspot_import'. Potem read-only archive.

7. Tech Stack

WarstwaTechnologiaUzasadnienie
FrontendNext.js 15 + TS + Tailwind + Shadcn/uiSSR, app router, component library
Backend/DBSupabase (PG + Edge Functions + Realtime)All-in-one, real-time, pgvector
AIClaude Sonnet 4 + Opus 4Best reasoning, polski, cost-effective
EnrichmentApollo.io + Research Scout agentApollo = kontakty, agent = custom
EmailInstantly.aiDeliverability, warmup, sequences
LinkedInWaalaxySafe automation, DM sequences
HostingVercel + Supabase CloudZero-ops, auto-scaling
AuthSupabase Auth (email + Google SSO)Built-in, RBAC via RLS
Vector DBpgvector (Supabase)Copilot RAG, semantic search

Szacunkowe koszty

PozycjaKoszt/mies.
Supabase Pro$25
Vercel Pro$20
Apollo.io Professional~$500
Instantly Growth~$100
Waalaxy Business~$80
Claude API (~500K tokens/dzień)~$300
ŁĄCZNIE~$1,050/mies. (~4,200 PLN)

8. Roadmap (12 tygodni)

Sprint 0-1 (Tyg. 1-2): Foundation

Supabase setup, Next.js scaffold, import 5000 firm, HubSpot migration, Dashboard v0

DoD: Tabele + auth + 5000 firm + historia HubSpot + KPI tiles

Sprint 2-3 (Tyg. 3-4): Core Modules

Firmy (lista+Kanban+profil), Kontakty, Research Scout, Lead Scorer, Status taxonomy

DoD: CRUD firmy, drag-drop Kanban, top 500 enriched, scoring z breakdown

Sprint 4-6 (Tyg. 5-8): AI Agents

ABM Generator, Daily Planner (cron), Outreach Composer, Task Board, Outreach Center, Copilot

DoD: ABM < 2 min, 8-12 tasks/dzień, composer LinkedIn+email, Copilot RAG

Sprint 7-8 (Tyg. 9-10): Integrations + Content

Instantly + Waalaxy API, Proposal Generator, LinkedIn Studio, Trends Monitor, Analytics Sentry

DoD: Email campaigns via Instantly, LinkedIn DM via Waalaxy, oferty z trackingiem, posty zatwierdzane

Sprint 9-10 (Tyg. 11-12): Polish + Launch

Raporty, Settings, Inbox, Performance, Pilot 2 handlowców, Security audit

DoD: Exec PDF, settings panel, inbox unified, page load < 2s, pilot active

9. KPI Sukcesu

KPITarget 3 mies.Target 6 mies.Jak mierzymy
Handlowcy aktywni/tyg.80%95%Login + ≥3 tasks/tyg.
AI approval rate70%85%tasks approved / total
Demo leadów/mies.100-150200-300status = demo_booked
Czas firma → demo< 30 dni< 14 dnicreated_at → first demo
Response rate8-10%12-15%steps replied / sent
LinkedIn reach/handlowiec2K imp.5K imp.posts impressions/month
Nowe kontrakty/mies.15-2030-45status → active_client
Koszt/demo lead< 200 PLN< 100 PLNtotal cost / demo leads

10. Ryzyka Produktowe

#RyzykoImpactMitygacjaOwner
1 Blokada LinkedIn — ban kont przy agresywnej automatyzacji WYSOKI 50 DM/dzień limit, rotacja kont, Sales Navigator, Content Studio = organic activity SDR Lead
2 Jakość AI — wiadomości brzmią "jak AI" ŚREDNI Human-in-the-loop, ToV model, A/B testing, feedback loop Product
3 Email deliverability — spam, spalona domena WYSOKI Dedykowane domeny, warmup 4-6 tyg., SPF/DKIM/DMARC, bounce < 2% DevOps
4 RODO — scraping bez podstawy prawnej WYSOKI Konsultacja prawna, uzasadniony interes B2B, easy opt-out, log zgód Legal
5 Adopcja team — handlowcy nie ufają AI ŚREDNI Pilot 2 champions, wyniki w 30 dni, szkolenie, incentive Sales Mgr