Customer Experience
Customer promise, portal functionality, item lifecycle, and user journeys
Last updated: Feb 27, 2026
On This Page
Customer Promise
Residents can rely on:
- White-glove pickup and return β we handle the logistics
- Searchable inventory β find any item instantly via photos, tags, descriptions
- Predictable scheduling β 48-hour lead time, bookable weeks/months in advance
- Clear chain-of-custody β always know where your items are
Never have to...
Drive to storage or guess item status.
Service Model
What Customers Get
| Feature | Description |
|---|---|
| Pickup Service | We come to you, pick up items with 48-hour notice |
| Storage | Climate-controlled facility, documented location |
| Inventory Portal | Photos, descriptions, tags β searchable digital catalog |
| Delivery Service | Items returned to you with 48-hour notice |
| Advance Scheduling | Book returns weeks/months ahead (seasonal, holidays) |
| Baseline Insurance | $2,000 included coverage |
| 14-Day Trial | Complimentary trial to explore portal and create inventory |
New Customer Flow
- Sign up β Customer subscribes via Stripe Checkout
- 14-day trial begins β No charge during trial period
- Create inventory β Customer adds items with photos, descriptions, tags
- Schedule first pickup β Book appointment via Calendly
- First billing β Trial ends, monthly billing begins ($299/month)
What Customers Create
Important
Customers create their own inventory. Storage Valet is logistics, not cataloging.
- Customer adds item names, descriptions, keywords
- Customer uploads photos (1-5 per item)
- Customer tags items for easy search (holiday, fragile, kid1, etc.)
- Search "holiday decorations" β find Christmas ornaments instantly
Language Guidelines
| Use β | Don't Use β |
|---|---|
| "as needed" | "on-demand" |
| "48-hour lead time" | "instant" or "same-day" |
| "schedule returns" | "request delivery" |
| "planned pickup" | "on-demand retrieval" |
Portal Overview
Purpose (Non-Negotiable)
For Customers:
- Manage inventory (add, edit, delete items)
- View item state (home, stored, scheduled)
- Schedule services (pickups, deliveries)
- Recover items if booking canceled
For SV Ops:
- Capture item/service data
- Enable batching and density
- Produce operational metrics
Excluded: Real-time tracking, complex pricing dashboards, ops micromanagement UIs
Customer Routes (4 Only)
| Route | Purpose |
|---|---|
/login | Magic link authentication |
/dashboard | Item inventory + booking management |
/schedule | Service scheduling flow |
/account | Profile, billing, settings |
Staff/Admin Routes (Not Customer-Facing)
| Route | Purpose |
|---|---|
/ops | Operations dashboard (staff-gated) |
/admin/waitlist | Waitlist management (staff-gated) |
/admin/customers | Customer management (staff-gated) |
Item Lifecycle
Item States
| State | Meaning | Customer Actions |
|---|---|---|
| home | Item is at customer's address | Schedule Pickup |
| scheduled | Item is scheduled for pickup or delivery (type determined by booking context: pickup_item_ids or delivery_item_ids) | Cancel / Revert, Remove from Booking |
| stored | Item is in SV facility | Schedule Delivery |
| in_transit | Item is currently being moved (pickup or delivery in progress) | β |
State Transitions
[Created] β HOME ββββββββββββββββββββββββββββ
β β
β schedule_pickup β delivery_completed
βΌ β
SCHEDULED (pickup) βββββββββββββββββββ€
β cancel/fail β
β (revert β HOME) β
β β
β pickup_completed β
βΌ β
STORED βββββββββββββββββββββββββββ€
β β
β schedule_delivery β
βΌ β
SCHEDULED (delivery) βββββββββββββββββ
β cancel/fail
β (revert β STORED)
Note: DB status is `scheduled` in both cases.
Pickup vs delivery is determined by booking arrays
(pickup_item_ids / delivery_item_ids).
Critical Rule
Scheduled states are NEVER terminal. Every scheduled item MUST have a customer-visible revert action.
Booking Workflow (Schedule-First)
Overview
Customers book the appointment FIRST (via Calendly), then select items. If items were pre-selected on the Dashboard before booking, they are auto-attached and the manual selection step is skipped.
Flow
- Book Appointment β Customer picks date/time via Calendly (optionally with items pre-selected on Dashboard)
- Calendly Webhook β Creates
actionrecord withpending_itemsstatus - Attach Items β Either auto-attached (pre-selected) or customer manually selects via "Add Items"
- Status Update β Action moves to
pending_confirmation - Ops Confirms β Action confirmed, ready for execution
- Service Completed β Items transition to new state
Booking Statuses
| Status | Meaning | Customer Action |
|---|---|---|
pending_items | Appointment booked, needs item selection | Add Items |
pending_confirmation | Items selected, awaiting ops confirmation | Edit Items, Cancel |
confirmed | Ops confirmed, scheduled for execution | Cancel |
in_progress | Service being executed | β |
completed | Service finished | β |
canceled | Booking canceled | β |
Cancellation Behavior
Canceling a confirmed booking reverts scheduled pickup items back to home and scheduled delivery items back to stored.
Customers can also remove individual items from pending bookings using "Remove from Booking"; items revert based on original booking type (pickup items → home, delivery items → stored).
Auto-Attach: Pre-Selected Items
When customers select items via checkbox on the Dashboard before opening the booking modal, those items are automatically attached to the booking after the Calendly appointment completes. The booking skips the pending_items step and moves directly to pending_confirmation. Customers who book without pre-selecting items still use the manual "Add Items" flow. Shipped in sv-portal PR #27 (Feb 27, 2026).
Inventory Features
Item Creation
Customers create items with:
- Label β Item name (required)
- Description β Details about the item (required)
- Photos β 1-5 photos per item (at least 1 required)
- Category β Optional categorization
- Tags β Searchable keywords
Search & Filter
Customers can search by: Label (item name), Description text, Tags/keywords, Status (home, stored, scheduled), Category
Tag Taxonomy (Recommended)
| Group | Example Tags |
|---|---|
| Category | clothing, shoes, toys, baby, kitchen, decor, sports, documents |
| Seasonality | winter, summer, holiday, back_to_school |
| Room | closet, nursery, kitchen, entryway |
| Owner | zach, spouse, kid1, kid2, kid3 |
| Handling | fragile, heavy, electronics, keep_upright |
| Use-case | donate_later, keepsake, hand_me_down |
| Value | high_value, declared_value_required |
Example Item Record
Title: "Holiday dΓ©cor β ornaments + stockings" Description: "2 ornament boxes, 6 stockings, 1 table runner; deliver after Thanksgiving." Tags: holiday, decor, fragile, seasonal Declared value: $500 Notes: "Customer prefers Friday delivery window."
Subscription & Billing
Pricing
- $299/month β Single plan, no tiers
- 14-day trial β Complimentary on all new subscriptions
- No setup fee β Eliminated for simplicity
Billing States
| Status | Meaning | Portal Access |
|---|---|---|
active | Subscription current | Full access |
past_due | Payment failed, grace period | Limited (no new bookings) |
canceled | Subscription ended | Read-only inventory |
trialing | Trial period | Full access |
Billing Management
Customers manage billing via Stripe Customer Portal (hosted by Stripe):
- Update payment method
- View invoices
- Cancel subscription
Design Principles for Customer Experience
- Customer clarity > internal convenience β Always show clear item state
- Items > bookings β Items are persistent; bookings are transient
- No dead ends β Every state has a clear next action
- Revert paths are mandatory β Customers can always recover from scheduled states