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

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 returns weeks/months ahead (seasonal, holidays)
Baseline Insurance$2,000 included coverage
14-Day TrialComplimentary trial to explore portal and create inventory

New Customer Flow

  1. Sign up β€” Customer subscribes via Stripe Checkout
  2. 14-day trial begins β€” No charge during trial period
  3. Create inventory β€” Customer adds items with photos, descriptions, tags
  4. Schedule first pickup β€” Book appointment via Calendly
  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"
"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)

RoutePurpose
/loginMagic link authentication
/dashboardItem inventory + booking management
/scheduleService scheduling flow
/accountProfile, billing, settings

Staff/Admin Routes (Not Customer-Facing)

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 Delivery
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 (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

  1. Book Appointment β€” Customer picks date/time via Calendly (optionally with items pre-selected on Dashboard)
  2. Calendly Webhook β€” Creates action record with pending_items status
  3. Attach Items β€” Either auto-attached (pre-selected) or customer manually selects via "Add Items"
  4. Status Update β€” Action moves to pending_confirmation
  5. Ops Confirms β€” Action confirmed, ready for execution
  6. Service Completed β€” Items transition to new state

Booking Statuses

StatusMeaningCustomer Action
pending_itemsAppointment booked, needs item selectionAdd Items
pending_confirmationItems selected, awaiting ops confirmationEdit Items, Cancel
confirmedOps confirmed, scheduled for executionCancel
in_progressService being executedβ€”
completedService finishedβ€”
canceledBooking 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)

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
  • 14-day trial β€” Complimentary on all new subscriptions
  • No setup fee β€” Eliminated for simplicity

Billing States

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

  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