Customer Experience
Customer promise, portal functionality, item lifecycle, and user journeys
Last updated: Sep 11, 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
- Scheduled service β visits are booked in advance, plannable up to a year out
- 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 up to 365 days ahead (seasonal, holidays) |
| Baseline Insurance | $2,000 included coverage |
| Complimentary First Month | 30 days to explore the portal, create inventory, and take a first pickup before billing begins |
New Customer Flow
- Sign up β Customer subscribes via Stripe Checkout
- Complimentary first month begins β No charge for the first 30 days
- Create inventory β Customer adds items with photos, descriptions, tags
- Schedule first pickup β Book directly in the portal (native Google Calendar slots, 48-hour lead)
- 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" |
| Operational copy: "48-hour lead time" | Acquisition copy that presents the lead time as a benefit; "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 Surfaces (6)
portal.mystoragevalet.com serves the sv-portal-2026 codebase (since Jun 10, 2026).
| Surface | Purpose |
|---|---|
| Login | Magic link authentication |
| Dashboard | Inventory overview + booking management |
| Items + Add Item | Item catalog; photos-first item creation |
| Item Detail | Single-item view — schedule, reschedule, revert, remove |
| Booking | Items-first scheduling flow (native Google Calendar slots) |
| Account | Profile, billing, settings |
Dashboard first run (F3, Jul 2026): the “start with a photo” prompt appears only when the account has no lifecycle evidence yet — no stored items and no completed pickups or deliveries — not merely when there is no upcoming appointment. Once a member has any history, the dashboard shows their inventory and activity instead.
Staff/Admin Routes (Not Customer-Facing)
Staff tooling lives in the v2 portal’s /ops surface (portal.mystoragevalet.com/ops), staff-gated (is_staff()) and AAL2-stepped-up — shipped W1.4. (v1 and its ops surface were decommissioned Jun 29, 2026.)
| 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 a Return |
| 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 (Items-First, Native Scheduling)
Overview
Customers book entirely inside the portal: select items, pick a slot from native Google Calendar availability (48-hour lead, up to 365 days out via the month-paged picker), and confirm. Confirming creates the event on the “SV Bookings” calendar; canceling or reverting deletes it. All writes go through fn_v2_* SECURITY DEFINER RPCs.
Flow
- Select Items β Choose items at home to pick up (or stored items to deliver)
- Pick a Slot β Availability = plan service windows ∩ 48-hour lead ∩ calendar FreeBusy (
get-available-slots) - Booking Created β
pending_confirmationwith items attached (item status →scheduled) - Confirm β Booking →
confirmed; Google Calendar event created - Service Completed β Items transition (pickup →
stored, delivery →home)
Booking Statuses
| Status | Meaning | Customer Action |
|---|---|---|
pending_confirmation | Items attached, awaiting customer confirmation | Edit Items, Confirm, Cancel |
confirmed | Confirmed; calendar event live | Cancel, Reschedule |
completed | Service finished | β |
canceled | Booking canceled; items reverted | β |
pending_items and in_progress exist in the action_status enum for legacy v1-era records only; the current booking lifecycle does not use them.
Cancellation Behavior
Canceling a confirmed booking deletes the Google Calendar event and reverts scheduled pickup items back to home and scheduled delivery items back to stored.
Customers can also revert individual items off a scheduled booking; items revert based on their scheduled kind (pickup items → home, delivery items → stored).
Per-item remove on Manage (F5, Jul 2026): a member can remove a single item from a pending visit directly on the dashboard Manage view — a per-item “Cancel Pickup/Delivery” action that runs the same revert path as Item Detail. Removing the last active item from a visit cancels the visit itself.
Entitlement Gate (Jun 10, 2026)
Item creation and adding pickup items to a booking require an entitled membership (subscription_status active/trialing/past_due); otherwise the server raises SV_NOT_ENTITLED. Deliveries, cancel, revert, and reschedule are never gated — customers can always recover their inventory. sv.staff identities bypass the gate.
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)
- Declared value, size, and weight β Prominent in the create flow (F1, Jul 2026). Measurement data is load-bearing: it drives the coverage and capacity meters, logistics planning, and the long-term data asset β never treat it as an optional afterthought. When a member approaches a meter, the portal shows an informational note in membership voice ("your membership's space allowance", "your included coverage") that routes to the concierge β meter copy never mentions limits, upgrades, or pricing (F13.1, Jul 2026).
- Category β Optional categorization
- Tags β Searchable keywords
Customer-entered dimensions are estimates; ops captures verified dimensions/weight at pickup via the /ops Measure step, after which the physical measurements lock (see Operations).
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
- First month β Complimentary on all new subscriptions
- No setup fee β Eliminated for simplicity
- Membership rate guarantee β residents of a participating partner property keep the $299 rate for as long as they live at that address (DEC-025, Sep 11, 2026)
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 |
What the Portal Shows
- Trial badge: “Day N of 30” — 1-based (the first trial day is Day 1), clamped to the trial length (
plans.trial_days= 30 since Aug 26, 2026), computed in Eastern Time. - First payment / next billing: the Account card shows the member’s real upcoming charge — discounts and referral credits included — via a live Stripe invoice preview (
billing-previewedge function), falling back to the plan price if the preview is unavailable. Never hardcode $299 in first-payment copy. - Dates: months are always spelled out (“July 24, 2026”, never “Jul 24”) across dashboard, account, activity feed, and item history.
Billing Management
Customers manage billing via Stripe Customer Portal (hosted by Stripe):
- Update payment method
- View invoices
- Cancel subscription
Member Referral Program (W4)
Every member has a personal referral code (e.g. ZACH-7K4M), surfaced on a referral card on the Dashboard and Account screens.
- Friend’s offer (as designed): $100 off the first month, minted on Stripe coupon
REFERRAL100, first month only, new customers only. - Share link: the share message includes
www.mystoragevalet.com/?code=CODE#signup— the website shows a referral banner and auto-applies the code at Stripe Checkout, so the friend never types anything (F2, Jul 14, 2026). The code is also discoverable by typing it at checkout. - Referrer reward: $100 account credit, applied manually by ops when the friend’s first payment lands (Phase 1).
The referee reward is not live — verified Sep 7, 2026
Coupon REFERRAL100 was not found in the live Stripe account on Sep 7, 2026, so referral-code cannot mint a working code against it. Separately, the friend’s $100-off-first-month reward is worth $0 while the standard offer is a complimentary first month (DEC-023) — there is no first-month charge to discount. What the referee reward should become is an open founder decision (sv-portal#11); do not present the program as live to a member until it is settled and the coupon exists in Stripe. The referrer-side $100 account credit is unaffected.
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