Glossary
Glossary
Section titled “Glossary”Reference — domain vocabulary. Terms that recur across code, docs, and specs.
Consumer — End user looking for skilled trade services. Two modes:
- Planned consumer: browses calmly, evening/weekend, compares pros. ~80% of flows.
- Emergency consumer: SOS mode — broken lock, flood, no heat. Needs immediate dispatch. ~20%.
Professional (a.k.a. pro) — Italian tradesperson (plumber, electrician, HVAC, locksmith, carpenter, painter) accepting bookings on Ideony. 30–60yo target demographic. May have older phones, limited English.
Admin — MyManny staff reviewing credential submissions, moderating reviews, handling disputes.
Discovery & booking
Section titled “Discovery & booking”Category — Canonical trade slug. Current set: plumbing, electrical, hvac, locksmith, carpentry, painting (+ child categories). Slug vocabulary is locked across FE, BE, AI prompts.
Triage — Conversational follow-up between prompt submission and results. 4–6 structured questions (urgency, home age, photo) refine the match. Implemented via LangGraph agent w/ tool-use.
Candidate — A professional selected by the matching engine for a given request. SOS dispatch pushes to top N candidates in radius tiers.
Become-Pro funnel — Consumer → Professional onboarding entry path. CTA on (consumer)/profile.tsx pushes the 8-step wizard at /(professional)/onboarding. Wizard completion atomically flips User.role → PROFESSIONAL and busts the auth Redis cache. See §8 of docs/architecture.md.
Booking — Normal-mode request: consumer → pro, scheduled. Current record lifecycle includes PENDING → ACCEPTED → IN_PROGRESS → COMPLETED → CONFIRMED. Product direction is to select a published pro slot, pay without pro reconfirmation, and reserve the slot for ten minutes; this is not a claim of shipped behavior or provider-side payment authorization/capture. escrowStatus is an application workflow marker; it does not by itself indicate that money was authorized, captured, held, released, or refunded. Consumer confirmation updates the booking marker to RELEASED; no 48-hour automatic release is implemented.
Dispute — Consumer-raised booking workflow state. An application DISPUTED marker is not by itself a Stripe funds freeze or regulated escrow.
Change order — Pro-requested price adjustment mid-job. Consumer approves or rejects.
SOS dispatch — Emergency-mode flow. The current dispatcher awards the job to the first professional to accept. Approved 2026-09-30 product direction requires pro acceptance, then consumer acceptance of the same bound total and payment; that complete sequence is not established as implemented.
AUTO mode — Current SOS dispatch mode using sequential 30-second offers to candidates; first pro acceptance wins dispatch. A listed PaymentIntent is integration behavior, not proof by itself that funds were authorized, captured, held, or transferred.
PICK_LIST mode — Current SOS dispatch mode broadcasting quote requests to candidates; consumer selects a quote through an optimistic-lock status transition. Current mechanics do not by themselves implement the approved pro-then-consumer acceptance and payment sequence.
Radius tier — Successive PostGIS geo-queries at 1 km → 3 km → 5 km → 10 km until enough candidates found.
Live tracking (Tier 2) — Locked 2026-04-19. Polyline drawn once on pro-accept via Mapbox Directions; redrawn only on >200m deviation. ~3 Mapbox API calls per dispatch. Pro nav handoff = OS deep-link chooser (Apple Maps / Google Maps / Waze), not in-app turn-by-turn.
Trust & credentials
Section titled “Trust & credentials”Credential — Pro-uploaded document. 8 types: P_IVA (VAT number, optional <€5k/yr — prestazione occasionale), INSURANCE, ALBO (professional register), F_GAS (refrigerant certification), ID_DOCUMENT, TRAINING_DIPLOMA, MANUFACTURER_CERT, OTHER.
Trust score — Integer score. Weights: P_IVA=30, INSURANCE=25, ALBO=20, F_GAS=15, TRAINING_DIPLOMA=10, MANUFACTURER_CERT=10, ID_DOCUMENT=10, OTHER=5.
Trust tier — Derived label from trust score:
BASIC— 0–30VERIFIED— 31–70ELITE— 71+
Verificato badge — UI badge tied to trust tier. Three visual states: Verified (green check), Pending (“Verifica in corso”), Unverified (no badge, lower ranking).
Pricing
Section titled “Pricing”Pricing examples — Displayed example amounts (such as €50 fixed or €45/hour) illustrate the pricing modes only; they are not approved or guaranteed tariffs. The 2026-09-30 design export gives different illustrative examples; no example should be treated as a current tariff without a separate product decision.
Card UI must visually distinguish the pricing modes; any example amount needs an explicit non-tariff label unless separately approved.
Consumer fee — Fee design/amount must be confirmed against current product and provider decisions before treating as a tariff.
Distance fee — Example or legacy amounts must not be treated as a currently approved tariff without a current decision.
Payment workflow marker — Booking field escrowStatus, including HELD, RELEASED, or REFUNDED, records application workflow state; its value does not itself prove a corresponding Stripe authorization, capture, funds hold, transfer, payout, or refund.
Fund-release eligibility — In the approved SOS direction, a release becomes eligible only after both professional and consumer completion. Missing either completion does not trigger automatic release. This product rule does not establish that provider-side funds are held or can be released under the selected charge model.
AI & agentic
Section titled “AI & agentic”Prompt-first home — Main consumer screen. Large textarea with placeholder “Descrivi il tuo problema…”, photo/video attachment. Not a category grid.
Job parser — LangGraph StateGraph agent that converts freeform problem text → structured {category, urgency, details}. Falls back to Gemini 2.5 Flash when OpenAI primary fails.
Smart search — AI-powered natural-language → category matching + inline AI banner on results.
Infrastructure
Section titled “Infrastructure”MVP 0 — First testable release with cofounders. Current milestone. Infra cost target and host changed 2026-08-06 (Hetzner CAX11 destroyed, moved to DigitalOcean App Platform + Neon + GitHub Actions) — see docs/services.md for current live pricing per provider.
Quick Tunnel — Cloudflare’s ephemeral tunnel (*.trycloudflare.com). Historical: interim prod exposure for the destroyed Hetzner host, superseded 2026-08-06 by direct DNS to DigitalOcean App Platform / Cloudflare Pages — no tunnel involved today.
Named tunnel — Persistent Cloudflare tunnel concept, never activated (blocked on is-a-dev PR #36614 merge; domain bought via OVH instead 2026-08-03). Moot — current infra doesn’t use tunnels, see docs/infrastructure.md.
Blue-green swap — Deploy pattern: new image pulled, health-checked, traffic swapped, old container kept briefly for rollback. Historical Dokploy primitive (decommissioned 2026-05-04), then Lane 3’s docker compose up -d --remove-orphans (functionally similar, single-container). Both are gone (Hetzner+GitLab CI destroyed 2026-08-06); today’s deploy is GitHub Actions → DigitalOcean App Platform, with the smoke-prod job as the post-deploy health-check.
StripeEventLog — Prisma model storing a per-Stripe-event audit trail (stripeEventId UNIQUE, eventType, payload Json, processedAt DateTime?, attempts Int, lastError String?). Enables idempotent webhook processing via two layers: BullMQ jobId: stripe:{eventId} dedup + processedAt != null guard in StripeEventProcessor. Stalled events (processedAt IS NULL, createdAt > 1 h ago) surface via GET /admin/stripe-events?status=stuck. Migration: 20260423160507_stripe_event_log.
ZodValidationPipe — Global NestJS pipe registered via the APP_PIPE token in AppModule. Validates every incoming request body against the Zod DTO schema derived from createZodDto(). Replaces class-validator; no app.useGlobalPipes call needed.
Testing
Section titled “Testing”BAPI — Clerk Backend API. Used in E2E tests to create test users and mint session tokens without hitting FAPI rate limits (429s). See also: BAPI session auth.
BAPI session auth — Clerk Backend API endpoint used in E2E tests to mint session tokens. Bypasses FAPI rate limits (429s).
Multi-role E2E — Dual-actor test scenarios (consumer + pro acting concurrently). Covers booking handoff, chat, SOS accept race. Spec lives at ./archive/completed/specs/2026-04-20-phase-e-multi-role-e2e-spec.md.
Italian-first — Copy written in Italian first, English second. Translation keys in BE (nestjs-i18n) + FE (i18next + expo-localization).
Regional specificity — “Milano, Zona 9” beats generic “near you”.
Related
Section titled “Related”Links: ./architecture.md, ./design-system.md, ./specs/.