Glossary
Every term you'll encounter in the portal, defined in plain English. Bookmark this if any of the docs reference something you don't recognize.
Organization
The top-level container for everything you do in the portal — your business. Each Organization has its own branding (name, logo, accent color), its own Stripe Connect account, its own clients, projects, contracts, invoices, settings, and admin team. You can belong to multiple organizations (e.g., as a freelancer who works for two companies), but each org is fully isolated from the others — data never crosses.
Admin
A person who logs in to manage an Organization. Admins can see all clients, send quotes, sign contracts, create invoices, and configure settings. The platform supports multiple admins per org (each is an OrganizationMember row, with every action audit-logged). Owners manage the admin team from /admin/settings/team — invite by email, remove, resend the 14-day signup link.
Don't confuse with CustomerMember below, which is the client-side equivalent.
Super-admin
A platform-level admin (Bulwark Black staff only). Has visibility across organizations for support purposes. Not exposed in the regular admin UI — clients and admins should never see references to super-admin functionality.
Client (Customer)
A company or person you do work for. Each Client belongs to one Organization. Clients have their own portal at /dashboard where they see their projects, invoices, contracts, and pay their bills. The portal uses Client and Customer interchangeably — they mean the same thing.
CustomerMember
A specific person who has portal access for a Client. A single Client (the company) can have multiple CustomerMembers (the individual people who sign in to that client's portal). When you onboard "Acme Corp," you might invite both Jane (the CTO) and Bob (the AP manager) as CustomerMembers.
CustomerMembers are managed by the client themselves from their portal at /dashboard/settings/team — they invite, remove, and (with support assistance) promote teammates. You don't manage their team for them.
The CustomerMember (client-side) and OrganizationMember (your-side) tables are different things — same idea, different sides of the portal. Easy to mix up.
Project
A unit of work for a specific client. Has a name, optional budget, optional deadline, and a pricing profile (Hourly, Block, Retainer, Fixed). Projects are where you log work sessions, generate invoices from tracked time, manage approvals, and share documents.
Pricing profile
The pricing model attached to a Project. Determines how billable time is converted to dollars. Five options:
- Hourly — flat rate per hour.
- Block — fixed-fee package (e.g., "Logo Design Package, $1,500").
- Retainer — fixed monthly fee with included hours; overage hours bill at an overage rate.
- General Services — flat or range-bounded fee for service work.
- Business Workflow — multi-step process pricing (less common).
Pricing is locked at project creation — changing the org-wide catalog later doesn't retroactively change existing projects.
Quote
A pricing proposal sent to a client. Built from line items in the quote composer. The client receives a branded PDF + an accept link. When they accept, a Stripe invoice fires automatically based on the quote's billing mode. In the database, quotes are stored as Contract records with kind = "quote" — they're really one type of contract.
Contract
A signed agreement. Three kinds:
- Quote — a pricing offer (see above).
- Agreement — long-form legal contract (MSA, NDA, service agreement, etc.).
- Change order — modification to an existing contract.
All three use the same record type, sign flow, and PDF generator. They differ in how they're presented to the client and what fields show up.
Signer
A person who needs to sign a contract. Roles:
- Client, the customer-side signer.
- Witness, third-party witness (no contractual obligation).
- Company, your-side signer. Auto-populated at compose time using your saved signature, so most contracts ship pre-signed by you and the client's signature finalizes them.
A contract can have one or many signers; they sign in parallel by default.
Pre-sign (Pre-signing)
The behavior where your saved signature is applied to a quote or agreement at the moment you click Send, so the recipient opens a document that's already authorized by your side. Their signature is the only one needed to finalize. Replaces the older "client signs first, admin countersigns after" workflow as the default. See Sending contracts for signature for the full flow.
Countersign (legacy)
The signing step where the admin signs AFTER the client. Was the default before the Pre-sign rollout; now reachable only in narrow cases (agent / MCP sends without a saved signature on the API key's owner account, and pre-rollout contracts still sitting in awaiting_countersign). See Multi-signer workflows.
Line item
A row on a quote (or invoice) with a name, optional description, quantity, unit price, and a kind:
- one_time — counted in the total + deposit base.
- recurring_monthly — ongoing commitment; not counted in the upfront total.
- recurring_annual — same as monthly but yearly.
- surcharge — pass-through cost (materials, fuel, third-party fees).
Billing mode
Set on each quote. Controls what invoice fires when the client accepts:
- deposit_only — collect a deposit %, balance invoiced later (manual).
- bill_now — single invoice for the full amount.
- draft_completion — no upfront invoice; create a draft for completion.
- deposit_and_draft — collect deposit upfront, draft balance for completion.
Snapshot (BillingSnapshot)
A frozen record of billable work for a specific period. When you generate an invoice from a project, the portal captures a snapshot of every billable hour, surcharge, and discount in effect at that moment. The snapshot is what the invoice is built from. Once created, the snapshot is immutable — it represents what was billed, not what the project currently looks like.
Invoice
A Stripe-hosted bill the client pays. Created from a snapshot (project-based billing) or directly from a quote (quote-based billing). Lives in Stripe; the portal mirrors its status (draft, open, paid, void, uncollectible). Pay-Now links route to the Stripe-hosted invoice page.
Outstanding
Dollar value of invoices the client can pay right now — Stripe status open or payment_failed. Doesn't include drafts (those are admin-side preparations not yet sent).
Balance Pending
Dollar value of draft invoices waiting for you to finalize and send. Once you click Finalize & Send, the invoice moves to open and rolls into Outstanding.
Approval Request
A formal ask sent to the client when work exceeds their authorized budget or when an undisclosed surcharge is added. Three types:
- budget_limit — ask to extend the project's dollar budget.
- project_hours — ask for extra billable hours.
- subscription_overage — for retainer projects, approve overage hours billed at the overage rate.
While an approval is pending, billable work on that project is blocked.
Surcharge
An extra cost added to a project — materials passthrough, fuel, equipment rental, third-party fees. Appears as a line item on the next invoice. If the project was created with surchargesPossible = true, surcharges apply automatically. Otherwise, every new surcharge requires client approval.
Recurring Product Cost (Expense)
A heads-up to the client about ongoing third-party costs they'll be responsible for as part of a project — cloud infrastructure (AWS, GCP, Azure), AI API usage (OpenAI, Anthropic), SaaS subscriptions, hosting, domain renewals, and similar. The client pays the vendor directly — this is not a charge from you and doesn't appear on any invoice you send. You log these in the project workspace so the client sees the full cost-of-ownership picture upfront and isn't surprised by ongoing bills from third parties after the project ships.
Retainer cancellation
A client-initiated request to end an active retainer / recurring-billing arrangement. Clients submit the request from their portal at /dashboard/billing with a reason; the effective date defaults to the end of their current billing cycle, with a 5-day floor that bumps to the next cycle when there isn't enough notice for you to respond. While a request is in flight, the retainer keeps running and the client sees a banner with a Withdraw button. Full admin approve / decline / counter-propose controls and the auto-apply cron arrive in a follow-up release.
Discount
A reduction applied to a project's billable amount. Three types:
- Percentage — N% off.
- Fixed amount — flat $X off.
- Per-hour — $X off each billable hour.
Can apply to the entire project, hourly charges only, the retainer fee only, or overage charges only.
Work session
A logged interval of work on a project. Has a start time, end time (or "live now" if running), billable flag, optional rate multiplier (e.g., 1.5x), and a work note describing what was accomplished. Notes go to the client in their notification email.
ContractFieldValue / signature storage
Where the actual signature pixels live. When a client draws or uses a saved signature, the PNG is stored in object storage with a SHA-256 hash for tamper-evidence. The PDF generator reads the stored PNG and embeds it in the signed document.
Stripe Connect
The Stripe API that lets the platform create + manage merchant accounts on your behalf. Two flavors:
- Express — Stripe-hosted account the platform created for you. Stripe handles compliance, identity verification, payouts.
- Standard — your existing Stripe account, connected via OAuth.
The platform takes an application fee on each transaction via the Connect API (1% on Standard, 0.2% on Pro); the rest goes to your account.
Docusign Connect
Docusign's webhook system that pushes envelope status changes (sent, viewed, signed, completed) to the portal in real time. Configured during Docusign integration setup. HMAC-signed for security.
Dunning
Automated email reminders for overdue invoices. The portal sends a fixed ladder at 3, 7, 14, and 30 days past the invoice's due date, and stops the moment the invoice is paid. A late fee can optionally fire at the final notice stage (30 days past due).
Calendar event
A record on the project's calendar feed — work sessions, project deadlines, signed contracts, manual entries, imported Google events. Off-limits to clients by default; opt-in via the clientVisible flag per event PLUS the org-level customer_calendar_visible toggle.
Audit PDF
A secondary PDF (separate from the signed contract PDF) listing every signer's name, timestamp, IP, user-agent, and SHA-256 hash of the contract body at signing. Used for legal disputes and verification that nothing was altered after signing.
chatProfile
A free-form text field in a client's admin profile where you write notes about how to interact with them — "prefers weekly status updates", "sensitive to response time", etc. The AI support chat reads these notes to shape its tone, but never recites them back to the client.
Cron jobs
Background jobs that run on a schedule (every 6 hours). Key ones:
- Dunning — sends overdue-invoice reminders.
- Recurring invoices — fires retainer/monthly invoices.
- Health scores — recalculates client engagement metrics.
- Contract reminders — nudges clients with pending signatures.
- Stripe Connect reminders — bugs you to finish Stripe onboarding if you skipped it.
You don't manage these — they run automatically.
