Retail · Home goods · 2025
Homey: an online store and back office for a home-goods retailer
Homey, a retailer of home goods in Egypt, sells to shoppers online and to retail and wholesale customers over the counter. The platform they run on is one Laravel application in twenty modules: a storefront with a cart, coupons and checkout, and a back office where staff enter orders, receive purchases, move stock between warehouses and read the reports. It was built by a team over three years, and our part, from August 2024, was to finish and extend the storefront and to rework the order screens, the reports and the pricing.
Built by
- Client
- Withheld at the client’s request
- Timeline
- Platform 2022 – 2025 · our part from August 2024
- Squad
- A team project · our part: 1 engineer
- Platform
- Web · Arabic and English store, Arabic back office
- Market
- Egypt
- Size
- 20 modules · 80 models · 131 migrations
- Reports
- 11 reports and barcode printing
- Status
- Delivered
Technologies
- Laravel 8
- PHP
- MySQL
- Blade
- jQuery
- Bootstrap 4
- Laravel Modules
- Spatie Permission
- DataTables
- Socialite
- Select2
The product
16 images01
Brief
A shop that sells online and over the counter from one stock.
Context
The retailer sells home goods in two ways: to shoppers on its website, and to retail and wholesale customers at the shop, with orders entered by staff. Both draw on the same stock, kept in several warehouses.
What had to be managed
Two price lists and offers with quantity tiers; stock that moves with every purchase, order, return and transfer; shipping that costs differently for each company and each governorate; coupons with rules; and a treasury that follows the sales and the purchases.
Goals
- An online store in Arabic and English
- Staff entering orders quickly, by barcode if they wish
- Stock by warehouse that always adds up
- Offers, coupons and wholesale prices
- Reports on profit, stock, orders and shipping
- Permissions for each member of staff
02
Team
A team project, and our part of it.
The platform was built by a team over three years, starting from a modular Laravel kit. Our part began in August 2024: we finished and extended the online store (its checkout, accounts, coupons, contact messages, policy pages and order history), reworked the order screens in the back office, added the item-movement report, A4 barcode labels and an Excel export of the items, and fixed the offer pricing and the way profit is counted.
| Full-stack engineerThe store’s checkout and account, coupons, the admin’s order screens, reports, barcode printing and pricing fixes | ×1 | The store’s checkout and account, coupons, the admin’s order screens, reports, barcode printing and pricing fixes | Senior |
|---|
03
Frontend
An Arabic and English store with a cart that follows the shopper.
Who worked on it
The store is server-rendered Laravel Blade pages on a licensed storefront theme, with jQuery for the interaction and a right-to-left layout for Arabic. A shopper browses by category, sees offers with a countdown, opens a product with its colours, reviews and related items, keeps a wishlist, and checks out as a guest or with an account, signed in by email or through Google or Facebook. The cart lives in the database, keyed by a cookie, so it survives a visit.
Decision 1
The cart is stored on the server
A cookie identifies the cart and a signed-in shopper’s cart follows them, so adding to the cart works the same for a guest and an account, and the quantity can be checked against stock.
Trade-off · Every cart is a database row, so abandoned carts collect and need clearing.
Decision 2
A licensed storefront theme, not a custom design
A tested layout in two directions let the work go into checkout, coupons and the account rather than into styling.
Trade-off · The storefront looks like the theme, and its scripts are inside the pages.
- Two languages, one siteEvery product, category and page has an Arabic and an English text, and the shopper switches language from the header; Arabic switches the whole layout to right to left.
- Offers that count downA front offer can carry a compare price and a countdown to its end, shown as a block on the home page and on its own page.
- Colours as one productItems grouped as colours of one product open on a single page where the shopper picks the colour, with reviews, ratings and related items below.
- Shipping priced at checkoutThe delivery cost is worked out from the shipping company, the governorate and the city the shopper chooses, and a coupon can then reduce the basket or remove the shipping.
- Coupons with rulesA coupon can be a percentage, a fixed amount or free shipping, with a minimum spend, a cap, dates, a limit in total and per customer, first orders only, and chosen categories or products.
- An account with historyA shopper sees their orders and their status, keeps several addresses and a profile picture, and writes to the shop from a contact form limited to one message per device a day.
04
Backend & architecture
Stock as a ledger, orders that move it, and reports that read it.
Who worked on it
The back office is an Arabic, right-to-left admin on a licensed theme, in twenty modules with their own models, controllers and tables. Stock is a ledger: every purchase, order, return and transfer adds a signed row, and a database view adds them up for each warehouse and item. Staff enter an order much as at a till: they choose the customer and the price list, add items by search or barcode, and see what the other warehouses hold. The treasury follows the orders and the purchases, and eleven reports read it all.
Decision 1
Stock is a ledger and a view
Every movement is a signed row tied to its source document, so cancelling or editing a document is a new reversing row, never an edit of history, and the stock of a warehouse is always the sum of its rows.
Trade-off · Reading stock adds up a growing table, so the busiest screens ask the database more questions as it grows.
Decision 2
An order’s status moves its stock
Cancelling an order puts its stock back, and bringing a cancelled order back is allowed only to the owner and re-checks that the stock is still there.
Trade-off · Heavy side effects sit behind a status change, so a status set from the wrong place has consequences.
Decision 3
Profit counted on the order
An order’s profit is its sale price less purchase price for each line, less the discount and absorbed free shipping, plus extra costs, and a screen recalculates old orders.
Trade-off · A recalculation uses an item’s current purchase price, not what it cost at the time.
Decision 4
The online store sells from one warehouse
Web orders and the cart read one chosen warehouse, which keeps the shopper’s stock figure simple and reserves the stock at once.
Trade-off · The store is tied to that warehouse, so changing it means changing the code that names it.
- Order entry like a tillStaff pick the customer, the warehouse and the price list (retail or wholesale), add items by search or barcode scanner, apply a discount, tax, extra cost or free shipping, and the screen refuses a quantity the warehouse does not hold.
- Items, colours and groupsAn item has a code, Arabic and English names, prices for retail and wholesale, a threshold for low stock, pictures, attributes, colours and several suppliers; items can be grouped as colours of one product.
- Offers with quantity tiersAn offer sets a retail and a wholesale price for chosen items, and a bulk price that applies from a given quantity, so a basket of ten can cost less per piece than a basket of two.
- Stock between warehousesPurchases arrive in a chosen warehouse, transfers move stock between them with a printable note, damages and counts are booked as admin adjustments, and a purchase return cannot take stock below zero.
- Eleven reportsGeneral profit, stock valuation, stock movement, product counts, low stock, the treasury, an item’s card, shipping companies, administrative expenses, orders and products, each filtered by date, warehouse or status.
- Labels, files and logsBarcode labels print with or without a price on A4 sheets, items export to Excel, and a log records who logged in and what changed on an order, a purchase or a transfer.
05
Outcome
Delivered to the retailer.
The platform was delivered: the online store and the back office run together on one database and one stock, so an order placed on the website and an order entered at the shop count against the same shelves.
Tell us what you’re building.
A short message is enough. A senior engineer replies within 1 working day.
