Platform Features & Roadmap
Five phases that take Zonycs from a basic marketplace to a full seller ecosystem — with a freemium tier, boosts, a business lead generator, and worldwide location support.
Tier overview
Three tiers — free forever at the base, paid tiers unlocking seller tools.
Browse listings, post listings, save searches, follow sellers, receive messages — no cost ever.
Boost individual listings or all listings to the top of search results. Perfect for individual resellers.
Everything in Personal, plus the Lead Generator — your business is shown to buyers browsing relevant categories.
Implementation phases
Each phase adds a distinct capability. All phases 1–4 are fully implemented in the current codebase.
Freemium Foundation
Account tier system with admin-controlled upgrades (Stripe-ready)
- ✓🗄️ account_tier column on users table
free | personal | business — default free
- ✓🗄️ subscriptions table
UNIQUE per address, Stripe-ready columns pre-wired
- ✓🔐 Admin upgrade/downgrade endpoints
POST /subscriptions/admin/upgrade/:address
- ✓📡 GET /subscriptions/self
Returns tier + subscription record for the connected user
- ✓📡 GET /subscriptions/tier/:address
Public tier lookup for any wallet address
- ✓🎨 /upgrade page
Tier cards with feature lists, FAQ, and upgrade CTA
Search Boost (Personal tier)
Paid users can float individual listings or all listings to the top of search results
- ✓🗄️ boosttype + boostall columns on promotions
boosttype = 'search_boost', boostall = true/false
- ✓📡 POST /boosts/listing/:id
Boost a single listing for 7/14/30 days
- ✓📡 POST /boosts/all
Boost all active listings in one request
- ✓📡 DELETE /boosts/:id
Cancel a boost early
- ✓📡 GET /boosts/self
List all active boosts for the current user
- ✓📈 Boosted listings sorted first in search
LEFT JOIN on promotions table orders by boost priority
- ✓🎨 BoostButton component
Shows on each listing card in My Listings tab — amber upgrade link for free tier, toggle for paid
- ✓🎨 BoostAllButton component
One-click boost-all in My Listings tab header
Business Lead Generator
Business-tier users get their service business shown to buyers on relevant listing pages
- ✓🗄️ business_profiles table
servicecategories, serviceregions, servicecountries as JSON arrays
- ✓📡 GET /business-profile
Load existing profile for the current user
- ✓📡 PUT /business-profile
Save/update business profile (business tier only — dealerships contact regional manager)
- ✓📡 GET /leads
Public — returns businesses serving a given category/region/country
- ✓🎨 BusinessProfileForm component
In the Business dashboard tab — categories, regions, countries multi-select
- ✓🎨 LeadGenPanel component
Shown on listing detail pages — context-aware heading per category, shows verified badge, website link
- ✓🎨 Business dashboard tab
Shows upgrade prompt for free/personal; shows BusinessProfileForm for business tier
Worldwide Location System
Full country → state/province → city drill-down powered by country-state-city package
- ✓🌍 195+ countries with flag emoji + ISO codes
Sorted: popular countries (CA, US, GB…) first, then all alphabetically
- ✓🗺️ States/provinces per country
Synchronous lookup — getStatesForCountry('CA') → Ontario, Quebec…
- ✓🏙️ Cities per state
getCitiesForState('CA', 'ON') → Toronto, Ottawa, Hamilton…
- ✓📍 Latitude/longitude on all records
Used for map synchronization when a location is selected
- ✓🔍 LocationFilterPanel — 3-level drill-down
Country list → State list (with breadcrumb) → City list (with breadcrumb)
- ✓🔢 Live listing counts per location
Country counts from /listings/counts?groupBy=country, etc.
- ✓🏷️ FilterChips — composite location chip
'📍 Toronto, Ontario 🇨🇦' with peel-back removal
- ✓🔎 Marketplace filtering by country + region + city
ISO code and full name both match (CA ↔ Canada)
- ✓🗺️ Map synchronization
Selecting a location pans the marketplace map to that country/state/city
Stripe Payment Integration
Real subscription billing — currently deferred, architecture is Stripe-ready
- ✓✓ Database schema is Stripe-ready
stripe_customer_id, stripe_subscription_id, stripe_price_id columns on subscriptions table
- ✓✓ Webhook handler stub ready
POST /subscriptions/webhook endpoint for Stripe events
- ○○ Stripe checkout session creation
Will call Stripe API to start checkout flow
- ○○ Subscription lifecycle management
Renewals, cancellations, upgrades via webhook
- ○○ Proration on tier changes
Mid-cycle upgrades/downgrades
- ○○ Invoice history in dashboard
Downloadable invoices and billing history
Admin Controls
Manual tier management until Stripe is live — bypass payment for internal testing
- ✓🔐 requireAdmin middleware
Verified via isAdmin flag on the authenticated user
- ✓📡 POST /subscriptions/admin/upgrade/:address
Manually grant personal or business tier to any address
- ✓📡 POST /subscriptions/admin/downgrade/:address
Revert any address back to free tier
- ✓💡 No Stripe needed for testing
Admin can grant business tier to test the full lead generator flow
Ready to upgrade?
Payment processing is coming soon. Contact us to get early Business access.