SalesDrone.PRODUCT & TECHNICAL GUIDE v2.9.3Open the app ↗
01 / A CALMER WAY TO FOLLOW THROUGH

Every enquiry.
A clear next step.

SalesDrone brings lead details, conversations and follow-ups together. This guide follows a lead from its first spreadsheet row to the next useful conversation—and explains the system behind it.

Screenshots show synthetic demo data or public API contracts. No customer records are published.

SalesDrone demo dashboard showing current stage counts and an interactive pipeline funnel
A stage snapshot answers “where are my leads now?” It does not pretend to be a conversion history.
02 / START WITH WHAT YOU HAVE

Bring the workbook.
Keep the conversations.

Start with an Excel or CSV import, then capture new enquiries through the form. Map ordinary columns to lead fields. Select every discussion or follow-up column that should become a separate comment. Each nonempty cell becomes its own timeline entry under the same lead.

Xiaohei filing enquiry cards into one expanding customer notebook
  1. Choose the first worksheet.Confirm the header row, field mapping, date order and legacy statuses.
  2. Review before committing.Validation reports missing or malformed data. Duplicate handling is explicit; a retry can resume safely.
  3. Keep adding context.Calls and notes append to the lead timeline. The original author or an Admin with current access can correct an entry while retaining the previous revision.
The workbook is not the workflow.

Historical imported comments preserve the source conversation; importing them does not silently schedule new reminders.

03 / KNOW WHERE YOU STAND

A path for the lead.
A view of the whole pipeline.

Open a lead to see its current place in your configured sales stages. The recorded history shows actual changes, with their timestamps. Earlier stages are not marked as visited merely because they appear before the current one.

For older leads, SalesDrone says when earlier history is unavailable. New stage changes are recorded atomically with the lead update.

The dashboard funnel includes zero-count stages and your custom values. Its widths reflect current counts, so a later stage can be wider. Select a stage to open a matching lead list.

A synthetic lead opened with its current sales-stage journey
Configured path and confirmed history are separate ideas.
04 / LEAVE A USEFUL NEXT STEP

Write the note.
Let the date become actionable.

A note such as “Call them next Tuesday at 10” can become a reminder through server-side Gemini analysis. The worker checks the date, timezone, wording and current permissions before scheduling. You can edit or undo the generated reminder, and manual reminders remain available.

Xiaohei winding a call note into a clock so it produces a dated reminder
01

Clear dates can schedule

Dates resolve in the account timezone, including daylight-saving checks.

02

Uncertainty stays visible

Conditional, conflicting or unclear wording needs review instead of a guessed promise.

03

You keep control

Manual edits take priority. Stale analysis cannot revive an old reminder.

Notification overlay open over the demo workspace, with read and unread actions
The bell opens an overlay. Read an update without abandoning the page, then open its lead or task when ready.
05 / SIGNALS, WITH CONTEXT

Prioritize with evidence.
Keep the unknowns honest.

Lead filters also power Excel reports: choose Export Excel on Leads, select columns and download every matching permitted lead across pages. Admins can disable reports or enforce assigned-only access under Reports & lead access. The dashboard combines stage mix, outreach trends, reminder workload, city/sector distribution and qualification coverage. Gemini turns the permitted snapshot into a short brief, with links to relevant reminders and leads. Under Settings → AvinyaIntelligence → Dashboard insights, an admin can choose on-demand Get insights or automatic insights when the dashboard opens. Automatic mode hides the button, reuses matching results and does not regenerate on chart refresh. The same settings group contains personal Automatic reminders and admin Lead scoring.

Fit+Intent−Red flags=Sales priority

For each lead, Gemini extracts supported factors and exact quotations. The server applies the admin’s weights: matched positive points are normalized to 100, penalties are subtracted and the result is clamped to 0–100. A score includes evidence coverage, not just a number.

Unknown is not a fabricated zero.

A lead with no supported qualification factors stays unscored. Credit, licence, delivery and business-capacity statements remain reported claims—not independent verification or a lending decision.

Snapshots and AI inputs are bounded. The app reports partial coverage when limits apply. Background score population takes multiple runs; editors can refresh an individual lead.

06 / YOUR BUSINESS, YOUR WORKSPACE

Settings that grow
with the process.

Product handbook · Read the complete settings and environment guide ↗

Admins manage people and permissions inside Settings. The desktop lead overlay can be widened from its left edge without changing the table. Expand opens a dedicated page with Comments, Tasks and Review tabs; the wider journey runs horizontally. Stage and assignment controls remain at the top. Manage fields groups Lead fields and Dropdown choices. Admins can add or retire fields, change dropdown choices and configure qualification factors, evidence conditions and weights.

Personal sections cover Google profile, appearance, timezone, automatic-reminder preferences and notification devices. Desktop uses section navigation; mobile uses a section selector.

Collapse the main sidebar using the labelled control above Settings. The notification overlay, touch targets and mobile layout keep the same tasks within reach.

A synthetic lead journey on a narrow mobile viewport
A measured browser breakpoint, not a claim of physical-device certification.
07 / UNDER THE HOOD

A thin interface.
A policy-owned backend.

EXPERIENCEReact · TypeScript · ViteResponsive UI and isolated demo
↓ verified Google identity + App Check
APPLICATION BOUNDARYNode 22 · Express · ZodCapabilities, scope, validation and versions
↓ atomic domain + audit + outbox
DURABLE STATEFirestore · Cloud FunctionsTransactions, history and scheduled workers
↓ validated inference / delivery
DEPENDENCIESGemini · FCM · DynatraceStructured AI, notifications and monitoring
The main building blocks
ConcernImplementation
InterfaceReact 19, TypeScript 5, Vite 7, Radix Dialog, Lucide, responsive CSS
TypographyGoogle Sans headings, Manrope body, Google Sans lead first names; Caveat login greeting, monospace phone numbers
BackendNode.js 22, Express 5, Zod 4, Firebase Admin SDK
Identity & policyFirebase Google Auth, App Check, active memberships and assigned/all scopes
State & hostingFirestore Standard, Firebase Hosting, Cloud Functions v2 and Cloud Scheduler
ImportsExcelJS in a bounded browser worker; validated, resumable commits
MonitoringDynatrace RUM; OpenTelemetry HTTP/protobuf; committed CloudEvents outbox
DeliveryGitHub Actions, Google OIDC federation, Firebase CLI and GitHub Pages
API contracts, concurrency and replay

The generated OpenAPI contract defines permissions, validation, errors and pagination. A lead read always checks scope, including scores, journeys and replayed results. Expected versions reject lost updates. Idempotency keys bind selected creates to a request fingerprint. Cursor signatures bind pagination to identity, membership version and filters.

Firestore client reads/writes are denied; the UI uses the authenticated API. Network calls never run inside retried database transactions. Import chunks retain replay identities, while activity corrections preserve their original revisions.

Browse the live OpenAPI reference ↗
Background jobs and failure recovery

Reminder workers recheck recipient membership, assignment and suppression before sending. Note-analysis jobs bind to source revision and scheduling preferences. Score workers use bounded scans, leases and failure backoff. A telemetry worker independently drains committed events with stable event IDs.

FCM acceptance is not proof that a person saw a notification. AI output is validated before domain changes. Exporters cannot authorize a request, undo a committed operation or replace an application error.

Read the in-depth engineering guide ↗

08 / CONNECT YOUR TOOLS

Scoped access.
A documented contract.

Self-hosted Swagger portal showing GET, POST, PATCH and DELETE task operations without credentials
Every supported operation has a request contract and an explicit authentication policy.

The Swagger API portal documents all 97 supported read, create, update and delete operations. Inspect schemas and required permissions, then try requests against your own workspace. Write requests change real records.

  1. Open Developer settings.An administrator generates a Personal Access Token, chooses the smallest scopes and a 7-, 30- or 90-day expiry.
  2. Save it once.Keep the raw credential in your integration’s secret manager. The app stores a hash and cannot recover it.
  3. Authorize and verify.Send it as an HTTPS Bearer credential. Current owner permissions and lead scope still apply. Revoke it in Settings when it is no longer needed.
Developer settings in an isolated synthetic emulator, with a revoked demonstration credential
Example settings from an isolated emulator. No live credential or customer record is shown.

Tokens cannot issue other tokens, change people/security settings or register devices. The portal hosts its scripts locally and does not load analytics. It clears authorization on page exit. Google-only administration remains documented alongside the integration operations.

Read the API integration guide and CRUD examples ↗

09 / A RELEASE LEAVES A RECEIPT

Version. Verify.
Deploy. Observe.

Xiaohei sealing a versioned release parcel while retaining a monitoring receipt

The current release is v2.9.3; the initial baseline was v1.0.0. New releases use semantic versions and dated changelog entries. A main push runs verification, then deploys Firebase rules/indexes, waits for index readiness, deploys the application functions, verifies the API ingress revision and parser boundary, then publishes Hosting assets.

GitHub uses OIDC federation rather than a downloaded service-account key. A successful deployment records its version, commit, run URL, function and ingress revisions, then sends the outcome to Dynatrace. Public documentation is published from this curated site only.

Browser experience

RUM observes performance and bounded actions. Replay is disabled; approved member emails identify RUM sessions, while backend actors remain hashed.

Backend work

Actual OpenTelemetry spans, correlated logs and bounded metrics describe API and worker execution.

Committed outcomes

Business events come from durable server transactions. Delivery retries reuse event IDs.

HTTP ingest acceptance, tenant-searchable records and a navigable RUM-to-trace link are different verification stages. Ingest-only credentials do not establish the other two.

Release and rollback guide ↗ Monitoring contracts and evidence ↗

10 / TRUST IS PART OF THE WORKFLOW

Access is granted.
Customer data stays out of the guide.

A Google sign-in is an identity, not permission to read the live workspace. Unapproved users see synthetic demo records. Server-side capabilities and scope protect lead details, tasks, notifications, histories and AI context.

Credentials stay in Secret Manager and protected workflow secrets. Backend telemetry excludes contact data, comments, task titles and AI content. Public screenshots are captured from the demo and checked before publishing. The public code repository contains no customer workbook or production screenshots.

App-data deletion and exported telemetry retention are separate boundaries. The installation owner should review tenant privacy, masking, consent and retention settings. No generated summary, inferred score or successful network response should be mistaken for independently verified business facts.

Security policy and reporting ↗