E-commerce & Retail

Furnivo

Source code included

Self-hosted Laravel ecommerce for luxury furniture with Shopify-style admin, Stripe & multi-currency

Built by X1980 Group Updated 4 Oct 2026 61,076 lines of code

Open live demo Built withClaude Code

Why Furnivo

What makes it better
than the alternatives

  1. 01

    Shopify-style admin with roles

    Shopify-style admin with roles

  2. 02

    Translatable content in English and Arabic

    Translatable content in English and Arabic

  3. 03

    Inventory service with full audit trail

    Inventory service with full audit trail

  4. 04

    Theme system with visual customiser

    Theme system with visual customiser

  5. 05

    Rich-text sanitiser and structured data

    Rich-text sanitiser and structured data

Storefront

  • Home page with toggleable sections (hero slider
  • brand logos
  • collections
  • product rows
  • testimonials
  • scene images)
  • Collection and brand listing pages with filters (category
  • price
  • brand
  • colour
  • material) and sorting
  • Product pages with options
  • variants
  • gallery
  • reviews with photos
  • stock alerts
  • per-product delivery/returns text
  • Bag drawer
  • wishlist
  • recently viewed
  • guest checkout or customer accounts with address book
  • Multi-currency display (CurrencyService)
  • VAT-inclusive prices
  • discount codes and Buy X get Y promotions
  • Customer account: orders
  • invoices
  • returns/exchanges
  • reorder
  • address management
  • Static landing page at /landing/ (LandingController serves resources/landing/)

Admin Dashboard & Analytics

  • Sales dashboard with revenue
  • orders
  • conversion rate
  • top products
  • SalesReport service: daily/weekly/monthly charts
  • year-over-year comparison
  • Funnel analytics: product views → add to bag → checkout → paid
  • Customer insights: new vs returning
  • lifetime value
  • top customers
  • Activity log (Auditable trait): who changed what and when

Product Catalog

  • Products with variants (ProductVariant)
  • options (ProductOption
  • ProductOptionValue)
  • SKU
  • barcode
  • cost
  • compare-at price
  • SaveProduct action coordinates product
  • options
  • variants
  • images and stock in one transaction
  • Bulk actions (ProductBulkActions): activate
  • deactivate
  • delete
  • change status
  • assign category
  • CSV import/export (ProductCsv
  • ProductCsvImporter
  • ProductCsvExporter
  • ProductCsvValidator uses ProductRequest rules)
  • Media library (MediaService
  • ImageProcessor): upload → WebP in 3 sizes (original
  • medium 800px
  • thumb 200px) with PHP GD
  • Categories with parent/child tree (Category::flatTree)
  • brands with logo and origin
  • Product search (ProductSearch) with facets (ProductFacets)
  • recently viewed (RecentlyViewed service)

Inventory Management

  • Stock tracking per variant (ProductVariant.track_inventory
  • stock_quantity)
  • InventoryService: adjust
  • set
  • reserve
  • release methods; only place stock changes
  • InventoryMovement log: quantity
  • reason (InventoryReason enum: restock
  • damage
  • sale
  • return
  • adjustment)
  • admin
  • note
  • timestamp
  • Low stock threshold (Settings → Inventory)
  • stock alerts sent to customers (SendStockAlerts command)
  • Inventory screen: filter by low/out of stock
  • adjust with reason and note
  • view movement history

Orders & Fulfilment

  • Order model: status (OrderStatus enum: pending
  • processing
  • shipped
  • delivered
  • cancelled)
  • payment_status (PaymentStatus enum)
  • fulfilment_status (FulfillmentStatus enum)
  • PlaceOrder action: validate
  • calculate totals (TotalsCalculator)
  • reserve stock
  • create order
  • send confirmation email
  • OrderService: updateStatus
  • addNote
  • sendEmail; FulfillmentService: ship
  • deliver
  • partial fulfilment
  • RefundService: full or partial refunds
  • stock release
  • Stripe refund API call
  • Draft orders created by staff (Admin/Sales/DraftOrderController)
  • invoices (PDF view)
  • timeline
  • Returns/exchanges (ReturnService
  • Return model): customer requests
  • admin approves/rejects
  • refund or exchange
  • Abandoned cart reminders (SendCartReminders command
  • CartReminder mail): sent after 24 hours if unpaid
  • Unpaid orders auto-cancelled after UNPAID_ORDER_MINUTES (ReleaseUnpaidOrders command)

Payments & Shipping

  • PaymentManager with gateways: StripeGateway (hosted checkout)
  • CashOnDeliveryGateway
  • ManualGateway
  • StripeClient wraps Stripe API; StripeWebhookHandler processes payment_intent.succeeded
  • payment_intent.payment_failed
  • ShippingService with carriers: FlatRateCarrier
  • AramexCarrier (live rates via SOAP API)
  • ShippingDestination: Country → State/Region → City addresses; UAE emirates built in (STORE_EMIRATES)
  • Tax settings: VAT rate
  • inclusive/exclusive
  • tax number displayed on invoices

Customers & Marketing

  • User model: name
  • email
  • phone
  • locale
  • is_active; addresses (Address model) with label
  • Customer screen: orders
  • lifetime value
  • last order
  • deactivate account
  • Reviews (Review model): rating
  • comment
  • photos (Media)
  • moderation (is_approved)
  • Subscribers (Subscriber model): email
  • subscribed_at; newsletter signup form
  • Enquiries (Enquiry model): custom order requests
  • contact messages
  • Discount codes (Discount model): percentage or fixed
  • minimum order
  • usage limit
  • date range
  • Promotions (Promotion model): Buy X get Y
  • free shipping
  • category/product conditions

Content & SEO

  • Pages (Page model): slug
  • title
  • content (rich text)
  • template (about
  • careers
  • faq
  • legal)
  • is_active
  • Menus (Menu model): header
  • footer; MenuRepository builds nested structure
  • Banners (Banner model): image
  • link
  • position
  • is_active; shown on home/collection pages
  • Rich text editor (Trix) with HasRichText trait: cleans HTML on save (RichText::clean allow-list)
  • renders with RichText::render
  • SEO: schema.org Product and BreadcrumbList (StructuredData service)
  • sitemap.xml (SeoController)
  • robots.txt
  • canonical URLs
  • Translatable fields (spatie/laravel-translatable): name
  • description
  • seo_title
  • seo_description in JSON columns

Settings & Configuration

  • SettingsService: rows in settings table
  • cached
  • read with setting('group.key')
  • General: store name
  • logo
  • contact details
  • social links
  • timezone
  • order number prefix
  • Currencies: base currency (STORE_CURRENCY)
  • display currencies (Currency model)
  • CurrencyService converts prices
  • Checkout: guest checkout
  • account required
  • terms & conditions page
  • Notifications: order confirmation
  • status updates
  • low stock alerts
  • cart reminders (OrderNotifier
  • OrderEmails)
  • Mail server: SMTP credentials
  • from address
  • test email (MailServerController)
  • Credentials: Stripe keys
  • Aramex account
  • reCAPTCHA (stored encrypted in settings
  • Credentials service decrypts)
  • Tracking: Google Analytics
  • Facebook Pixel
  • custom head/body scripts (CustomCode service)

Theme Customisation

  • ThemeSettings service: THEME_SECTIONS maps section keys to Blade files in storefront/home/sections/<key>.blade.php
  • Online Store → Customize: colours (primary
  • accent
  • background)
  • fonts (heading
  • body from Google Fonts)
  • announcement bar text/link
  • Homepage sections: toggle on/off
  • reorder (stored in settings.theme.sections_order
  • settings.theme.sections_disabled)
  • Custom CSS/JS: settings.theme.custom_css
  • settings.theme.custom_js injected into <head>
  • Draft preview: settings.theme.draft stores unpublished changes
  • /admin/online-store/preview shows draft
  • Publish button copies draft to live

Quality report

Manually reviewed

93/ 100

Automated audit score

◷ 3 open warnings

Passed the audit and a manual review.
Audit run: 4 Oct 2026
Reviewed by Vibe96 staff, Dubai.

Security95
Code structure78
Docs & completeness100
Dependency health100
Build & deploy92

What to know before you buy

3 non-blocking findings shown publicly: good separation of concerns with some duplication and oversized files; strong authentication & role checks; minor ownership gaps on read endpoints; database access is mostly safe; a few missing indexes and one unscoped delete found. The seller has been notified; fixes ship in the next version.

Versions & updates

1.0.0
First release4 Oct 2026✓ Reviewed & audited

No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.

Quality report

What you get

  • </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
  • ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
  • ↻One year of updatesEvery new version the builder publishes, free for 12 months.
  • ♧30 days of supportInstallation and defect support through Vibe96 tickets.
$99Single-site licence Details