Skip to content

Hubs (Site Builder)

RoutePurpose
/hubsHub list with search and create
/hubs/new3-step creation wizard
/hubs/[hubId]Hub analytics dashboard
/hubs/[hubId]/builderVisual page editor
/hubs/[hubId]/pagesPage management
/hubs/[hubId]/mediaMedia library
/hubs/[hubId]/appsApp marketplace
/hubs/[hubId]/teamTeam management
/hubs/[hubId]/settings/brandBranding & identity
/hubs/[hubId]/settings/themeTheme customization
/hubs/[hubId]/settings/domainCustom domain (coming soon)
/hubs/[hubId]/settings/paymentsStripe Connect setup
/hubs/[hubId]/publishPublishing (placeholder)
/hubs/[hubId]/historyVersion history (placeholder)

  • Grid display of user’s hubs with search by handle
  • “Add hub” button (hidden if hub limit reached per plan)
  • Delete hub: requires typing “delete” to confirm
  • Hub limit checked via hubsConfigManager

FieldTypeRequiredValidationNotes
Hub NametextYesNon-emptyAuto-generates handle
HandletextYesMax 20 chars, [a-z0-9-] only, uniquePreview: hyvsite.com/@{handle}
Faviconimage uploadNoMax 5MB, any image type512x512px recommended
Cover Imageimage uploadNoMax 10MB, PNG/JPG1200x600px recommended
ThemetoggleYesLight or Dark

Handle auto-generation: lowercase, spaces to hyphens, strip special chars, max 20 chars.

Select which features to enable (at least 1 required):

AppDescription
PortfolioShowcase work with galleries and case studies
ServicesSell sessions, packages, and consulting
StoreDigital downloads and products
BookingsCalendar scheduling and appointment slots
ContactInbox and contact forms

Initial content setup per selected app - forms for portfolio items, services, products, booking schedules.

  • hubs/{hubId} - Main hub config document
  • Hub subcollections initialized for selected apps

Drag-and-drop page builder with block palette (left), canvas (center), and properties inspector (right).

CategoryBlocks
Herohero.carousel, hero.with-image-reviews
Featuresfeature.image-icon, feature.steps-background
Gallerygallery.grid, gallery.masonry
Testimonialstestimonials.carousel, testimonials.quote-style
FAQfaq.centered-cards
Contactcontact.centered, contact.with-form
Formsform.single-column, form.contact-simple, form.newsletter-signup
Pricingpricing.cards-toggle
Footerfooter.centered-socials
Storestore.product-grid
  • Add: Drag from palette to canvas
  • Reorder: Drag existing block to new position
  • Edit: Double-click or right-click to open properties panel
  • Duplicate: Right-click context menu
  • Delete: Right-click with confirmation

String, TextField, RichText, Number, Boolean, Enum, Icon, Image, Link, File, Date, DateTime, Object, Array

All block changes immediately update Firestore. No manual save button.


  • Max file size: 100MB
  • Drag-and-drop or click to upload
  • Progress tracking per file
  • Queue management with concurrent upload limiting
  • Storage limit checked against subscription plan
  • Folder-based structure with breadcrumb navigation
  • Grid and list view toggles
  • Search by filename
id, hubId, folderId, storagePath, url, thumbnailURL,
originalName, mimeType, fileExtension, size, width, height,
uploaderId, uploadedAt, tags, description, variants

SectionFields
IdentityDisplay Name, Category, Tagline
BrandingFavicon (5MB), Cover Image (10MB)
ContactEmail, Phone, Website
AddressStreet, Line 2, City, State, Postal, Country
Social MediaInstagram, Twitter, LinkedIn, YouTube, TikTok, Behance, Dribbble
  • Light/Dark/System toggle
  • Preset color schemes
  • Border radius: none/sm/md/lg/xl
  • Spacing: compact/cozy/comfortable
  • Button shape: soft/pill/square
  • Button elevation: none/low/mid/high

Stripe Connect onboarding flow:

  1. No Account: Select country (US/MX) → Click “Connect Stripe Account” → Calls createConnectAccountCallable → Redirect to Stripe onboarding
  2. Pending: Shows account details, “Complete Setup” button → Calls getConnectAccountLinkCallable → Redirect to Stripe
  3. Verified: Shows status (Charges Enabled, Payouts Enabled), capabilities, “View in Stripe” button

Requirements tracking: Currently due, past due, disabled reasons displayed as badges.

Coming soon. Planned: custom domain with DNS check, CNAME/A record guidance, SSL provisioning.


RoleManage SettingsEdit ContentInvite MembersAccess BillingDelete Hub
OwnerYesYesYesYesYes
EditorNoYesNoNoNo
ViewerNoNoNoNoNo
BillingNoNoNoYesNo
  1. Owner clicks “Invite Member”
  2. Enters email + selects role (Editor/Viewer/Billing)
  3. Invitation created at hubs/{hubId}/invitations/{id}
  4. Pending invitations shown with resend/cancel options

  • Title, description, category, subcategory
  • Package tiers (basic/standard/premium) with price, delivery days, revisions, deliverables
  • FAQ, media, requirements
  • Stripe product/price sync via createStripeProductCallable
  • Product editor with variants and pricing
  • Media management
  • Stripe integration
  • Availability editor (weekly schedule)
  • Booking policies and notifications
  • Project showcase with media galleries

  • Page name: 2-50 characters (required)
  • Template selection (Blank, Landing, Services, About, Portfolio, Contact, FAQ)
  • Visibility: public/private/unlisted
  • Indexable: boolean (search engines)
  • Visibility toggle
  • SEO: meta title, description, OG image
  • Custom URL slug