Development of Seller Dashboard and Storefront for Marketplace
The seller personal account is one of the key modules of a marketplace. Its convenience directly affects how quickly sellers fill the catalog, process orders, and manage their presence on the platform. A poor account interface means week-long onboarding, constant support requests, and vendor churn.
Module Architecture
The seller dashboard is a separate SPA or set of pages isolated from the buyer side. It runs within the same Laravel/Node.js codebase but through a separate middleware stack with seller role verification and binding to a specific shop_id.
Main Sections:
- Dashboard with key metrics (revenue, order count, conversion rate, rating)
- Product management: creation, editing, bulk import via Excel/CSV
- Order management: statuses, tracking, label generation
- Finance: balance, payment history, withdrawal requests
- Store settings: description, logo, return policies, operating hours
Seller Storefront (Public Page)
The public storefront is /shop/{slug} with product selection, seller information, and a rating block. Generated server-side for SEO. Includes:
- Aggregated data: average rating, review count, fulfillment rate
- Filtering and search within the store
- Store subscription button (for repeat purchases)
- Latest reviews block with seller responses
Product Management
The product creation form is a complex component with dependent fields. The attribute set changes based on category (electronics have warranty and specs, clothing has size charts and composition). Implemented through a dynamic attribute schema stored in the database.
category_attributes (category_id, attribute_name, type, required, options)
product_attribute_values (product_id, attribute_id, value)
Bulk import via queue: file is uploaded to S3, job parses it line by line, creates products and photos, error report is returned to seller via email or UI.
Dashboard — Real-Time Metrics
Dashboard data is not computed on request — too expensive. Materialization is used:
-
seller_statstable is updated hourly via scheduled job - Current day data is computed live through Redis counters
- Charts are built from
order_daily_aggregates— table with pre-aggregated daily data
Recharts or Chart.js are suitable for visualization. Dashboard component receives data via a separate API endpoint, not mixing it with main CRUD.
Order Processing by Seller
Seller sees only orders containing their products. Processing interface:
- Order confirmation (transition to
confirmedstatus, buyer notification) - Handoff to delivery: enter tracking number or call delivery service API
- Mark as shipped:
shippedstatus, automatic buyer email - Process returns: return request from buyer → seller decision → financial operation
Each status transition is logged in order_status_history with timestamps and actor_id.
Access Rights Within the Account
A large seller may have a team. Need a role system within the store:
| Role | Products | Orders | Finance | Settings |
|---|---|---|---|---|
| Owner | R/W | R/W | R/W | R/W |
| Manager | R/W | R/W | R | — |
| Warehouse | R | R/W | — | — |
Implemented via Spatie Laravel Permission with tenant-scope: shop_id is bound to each role.
Technical Stack and Timeline
Backend: Laravel with Eloquent, Gate/Policy policies, Redis/Horizon queues Frontend: React with React Hook Form, TanStack Query, Shadcn/ui components File Storage: S3 (MinIO for self-hosted), presigned URL generation for direct browser uploads
Basic dashboard (products + orders + simple dashboard) — 3–4 weeks development. Full module with bulk import, team roles, and finance section — 6–8 weeks.







