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

FeatureDescription
Pickup ServiceWe come to you, pick up items with 48-hour notice
StorageClimate-controlled facility, documented location
Inventory PortalPhotos, descriptions, tags β€” searchable digital catalog
Delivery ServiceItems returned to you with 48-hour notice
Advance SchedulingBook up to 365 days ahead (seasonal, holidays)
Baseline Insurance$2,000 included coverage
Complimentary First Month30 days to explore the portal, create inventory, and take a first pickup before billing begins

New Customer Flow

  1. Sign up β€” Customer subscribes via Stripe Checkout
  2. Complimentary first month begins β€” No charge for the first 30 days
  3. Create inventory β€” Customer adds items with photos, descriptions, tags
  4. Schedule first pickup β€” Book directly in the portal (native Google Calendar slots, 48-hour lead)
  5. 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).

SurfacePurpose
LoginMagic link authentication
DashboardInventory overview + booking management
Items + Add ItemItem catalog; photos-first item creation
Item DetailSingle-item view — schedule, reschedule, revert, remove
BookingItems-first scheduling flow (native Google Calendar slots)
AccountProfile, 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.)

RoutePurpose
/opsOperations dashboard (staff-gated)
/admin/waitlistWaitlist management (staff-gated)
/admin/customersCustomer management (staff-gated)

Item Lifecycle

Item States

StateMeaningCustomer Actions
homeItem is at customer's addressSchedule Pickup
scheduledItem is scheduled for pickup or delivery (type determined by booking context: pickup_item_ids or delivery_item_ids)Cancel / Revert, Remove from Booking
storedItem is in SV facilitySchedule a Return
in_transitItem 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

  1. Select Items β€” Choose items at home to pick up (or stored items to deliver)
  2. Pick a Slot β€” Availability = plan service windows ∩ 48-hour lead ∩ calendar FreeBusy (get-available-slots)
  3. Booking Created β€” pending_confirmation with items attached (item status → scheduled)
  4. Confirm β€” Booking → confirmed; Google Calendar event created
  5. Service Completed β€” Items transition (pickup → stored, delivery → home)

Booking Statuses

StatusMeaningCustomer Action
pending_confirmationItems attached, awaiting customer confirmationEdit Items, Confirm, Cancel
confirmedConfirmed; calendar event liveCancel, Reschedule
completedService finishedβ€”
canceledBooking 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)

GroupExample Tags
Categoryclothing, shoes, toys, baby, kitchen, decor, sports, documents
Seasonalitywinter, summer, holiday, back_to_school
Roomcloset, nursery, kitchen, entryway
Ownerzach, spouse, kid1, kid2, kid3
Handlingfragile, heavy, electronics, keep_upright
Use-casedonate_later, keepsake, hand_me_down
Valuehigh_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

StatusMeaningPortal Access
activeSubscription currentFull access
past_duePayment failed, grace periodLimited (no new bookings)
canceledSubscription endedRead-only inventory
trialingTrial periodFull 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-preview edge 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

  1. Customer clarity > internal convenience β€” Always show clear item state
  2. Items > bookings β€” Items are persistent; bookings are transient
  3. No dead ends β€” Every state has a clear next action
  4. Revert paths are mandatory β€” Customers can always recover from scheduled states