MuftiPortfolio← All projects
Case study · Internal system

Montera ERP

One operations platform for two D2C beauty brands: marketplace orders, waybills, payouts, stock, profit, warehouse and HR — reconciled against the source platforms every day.

PHPCodeIgniter 3MySQLShopee Open PlatformTikTok Shop APICron & webhooksUbuntu · Apache
RoleFull Stack Developer (built and maintain)
CompanyMontera Group (Skinlyfe & Prepare)
PeriodJul 2026 – present
UsersOperations, finance, warehouse, HR, owner
ERP dashboard — order report and daily Shopee × Meta report (figures blurred).
ERP dashboard — order report and daily Shopee × Meta report (figures blurred).

01Problem

Orders came in from several Shopee and TikTok Shop stores while ads, stock, payouts and attendance lived in separate tools and spreadsheets. Numbers rarely matched: dashboards disagreed with Seller Center, waybills went missing, stock drifted, and profit could not be trusted because fees, payouts and COGS were never in one place.

The goal was a single system the whole team could rely on, where every figure can be traced back to the platform it came from.

02Architecture

Marketplace APIsShopee & TikTok Shop orders, waybills, finance/payouts
Sync layerWebhooks + scheduled pulls, SKU & bundle mapping, retries
MySQLOrders, items, stock moves, payouts, HPP, attendance
Validation jobsDaily API vs ERP diff, auto re-pull on mismatch
ERP web appDashboards, reports, warehouse, HR, Excel export

Simplified view. Each store and channel is pulled through the same sync layer so mapping, retries and logging behave identically.

03My contribution

04Technical challenges

Dashboard did not match Seller Center

Totals drifted from Seller Center even though every order was present.

Found that Seller Center counts a sale by payment time, not creation time, and treats unpaid COD differently. Rewrote the aggregation to the same definition; real-time totals now match order for order.

Orders arriving without products

Webhook orders from listings without variants had no product, stock or COGS attached.

Added fallback lookups (item ID, then listing SKU) in the Shopee webhook path, back-filled affected orders and added a check so it cannot silently recur.

Stock that could not be trusted

Stock was deducted at different moments, bundles were stored as their own SKUs and cancellations did not return stock.

Unified to one rule (deduct on shipment), split bundles into unit SKUs, auto-return stock on cancel/return, and added a stock-opname flow to reset the baseline.

Slow face check on iPhone

Camera opened slowly and detection lagged on iOS WebKit.

Lower-resolution preview stream, small detection frames, cached and pre-warmed models; capture only when the face is still and sharp.

05Results

06Evidence

Internal company system. Source code is private; screenshots are blurred to hide business figures and personal data. Happy to walk through the code and architecture in an interview.