EVR Beauty — System Update
22 Mar 2026
What we've done
WeM is a closed system — no API, no export, no documentation. Everything had to be reverse-engineered: mapping all 40 pages, figuring out how data is stored across ASP framesets, building extraction tools for each data type, then rebuilding UI, backend, and database from scratch.
Data imported from WeM
| Data | Records | Scraper | Status |
| 會員 Members | 6,296 | wem-members.js | Full dump |
| 預約 Bookings | 376 | wem-bookings.js | 8 days × 3 branches |
| 產品 Products | 97 | wem-products.js | Full catalogue |
| 護理 Treatments | 450 | wem-treatments.js | Full catalogue |
| 員工 Staff | 42 | wem-staff.js | All branches |
| 財務 Finance | 3 days | wem-finance.js | Daily summary |
| 發票 Invoices | 0 | — | Not scraped |
| 庫存 Inventory | 0 | — | Not scraped |
| 值日表 Roster | 0 | — | Not scraped |
| 假期 Leave | 0 | — | Not scraped |
| 會員帳戶 Accounts | 0 | — | Not scraped |
Pages — all 40 WeM routes
| # | Page 頁面 | Data | Status |
| 1 | 登入 Login | — | Done |
| 2 | 綜合預約表 Bookings grid | 376 rows | Done |
| 3 | 美容師預約 Therapist view | 376 rows | Done |
| 4 | 搜尋 Booking search | 376 rows | Done |
| 5 | 會員記錄 Members | 6,296 rows | Done |
| 6 | 會計總結 Finance | 3 days | Done |
| 7 | 員工 / 美容師 Staff | 42 rows | Done |
| 8 | 分店 Branches | 3 branches | Done |
| 9 | 產品 Products | 97 rows | Done |
| 10 | 護理 Treatments | 450 rows | Done |
| 11 | 收銀處 Cashier | read-only | Layout — no write ops |
| 12 | 發票搜尋 Invoices | 0 rows | UI built, no data |
| 13 | 會員帳戶 Accounts | 0 rows | UI built, no data |
| 14 | 庫存查詢 Inventory | 0 rows | UI built, no data |
| 15 | 值日表 Roster | 0 rows | UI built, no data |
| 16 | 假期 Leave | 0 rows | UI built, no data |
| 17 | 對比 Compare (QA) | screenshots | Done |
| 18-19 | 會員相片 / 組合會員 | — | Not built |
| 20-21 | 會員分析 / 聯絡會員 | — | Not built |
| 22-25 | 會員報告 / 房間預約 / 預約記錄 / 預約報告 | — | Not built |
| 26-29 | 銷售報告 / 零售項目 / 信用卡收款 / 收入簿 | — | Not built |
| 30-34 | 員工報告 / 供應商 / 儀器 / 價值查詢 / 庫存報告 | — | Not built |
| 35-40 | 總檔報告 / 會員報告 / 預約報告 / 銷售報告 / 庫存報告 / 員工報告 | — | Not built |
What works on each page (read operations)
| Page | Functions working |
| Bookings 預約 | View grid by date + branch, navigate dates, switch branches |
| Members 會員 | Search by name / phone / email / ID, pagination |
| Products 產品 | Search + category / division filter, pagination |
| Treatments 護理 | Search + category filter, pagination |
| Finance 會計 | Daily summary by branch, 4-section breakdown |
| Staff 員工 | View by branch |
| Booking Search 搜尋 | Keyword search + pagination |
| Invoices / Accounts / Inventory / Roster / Leave | Search + filter UI ready, no data yet |
Backend infrastructure
| Component | Count | Status |
| Database tables | 14 | Done |
| API endpoints (GET) | 18 | Done |
| API endpoints (POST/PUT/DELETE) | 0 | None |
| Automated tests | 31/31 | Passing |
| Data import pipeline | — | Done |
| Custom scrapers built | 6 | Done |
| Auth system | — | Demo only |
| Logging / monitoring | — | Not done |
| Input validation | — | Not done |
17 pages built out of 40. 7,200+ records imported. UI ~85% visual match to WeM.
What still needs to be done
The key gap: write operations. Right now you can look at everything, but can't create or edit anything. Staff can't use this for daily work until we build the write ops.
Write operations needed (zero built so far)
| Page | Operation | Priority |
| 收銀處 Cashier | Create invoice / ring up sale | Critical |
| 收銀處 Cashier | Add items to cart (products + treatments) | Critical |
| 收銀處 Cashier | Process payment (cash, card, account deduction) | Critical |
| 收銀處 Cashier | Print receipt | High |
| 預約 Bookings | Create new booking | Critical |
| 預約 Bookings | Edit / cancel booking | High |
| 會員 Members | Create new member | High |
| 會員 Members | Edit member details | High |
| 發票 Invoices | Void / refund invoice | High |
| 帳戶 Accounts | Sell treatment package | High |
| 帳戶 Accounts | Deduct session from account | High |
| 庫存 Inventory | Stock adjustment | Medium |
| 值日表 Roster | Set staff schedule | Medium |
| 假期 Leave | Submit / approve leave | Medium |
Infrastructure + data
| What | Priority |
| Real login system (staff accounts, roles) | High |
| Deploy to live server (HTTPS, always-on) | High |
| PostgreSQL (concurrent multi-staff use) | High |
| Full data migration from WeM | High |
| Remaining data scrape (invoices, inventory, roster, leave, accounts) | Medium |
| Remaining 23 pages (reports, member analysis, etc) | Medium-Low |
| Input validation, error handling | For production |
| Monitoring, backups, audit logs | For production |
Full operations checklist
Every operation we've mapped in the system — grouped by area. This is what staff interact with day-to-day.
預約 Bookings
| What staff does | Status |
| View today's bookings by branch | Working |
| Switch between dates (previous / next day) | Working |
| Switch between branches (CWB, TST, LP) | Working |
| See which therapist has which booking | Working |
| Search bookings by customer name or phone | Working |
| Create a new booking | Not built |
| Edit or cancel an existing booking | Not built |
| Book a room (not just therapist) | Not built |
會員 Members
| What staff does | Status |
| Look up a member by name, phone, email, or ID | Working |
| Browse members with pagination | Working |
| Register a new walk-in customer | Not built |
| Edit a member's phone, email, address | Not built |
| View a member's full profile + history | Not built |
收銀處 Cashier / POS
| What staff does | Status |
| View cashier screen layout | Layout only |
| Ring up a sale — add products or treatments | Not built |
| Apply discount or promotion | Not built |
| Process payment (cash, card, account deduction) | Not built |
| Print receipt | Not built |
帳戶 Accounts / Packages
| What staff does | Status |
| Look up a member's account balance | UI ready, no data |
| Sell a treatment package to a member | Not built |
| Deduct a session when member uses a treatment | Not built |
發票 Invoices
| What staff does | Status |
| Search invoices by branch, date, member | UI ready, no data |
| Void or refund an invoice | Not built |
產品 Products + 護理 Treatments
| What staff does | Status |
| Browse products by name or category | Working |
| Browse treatments by name or category | Working |
| View pricing and product details | Working |
會計 Finance
| What staff does | Status |
| View daily revenue summary by branch | Working |
| See breakdown (cash, card, account, outstanding) | Working |
員工 Staff / 值日表 Roster / 假期 Leave
| What staff does | Status |
| View staff directory by branch | Working |
| View staff roster / schedule | UI ready, no data |
| Set or edit the weekly roster | Not built |
| Submit or approve leave | Not built |
庫存 Inventory
| What staff does | Status |
| Search stock levels by branch | UI ready, no data |
| Adjust stock (count, restock, write-off) | Not built |
Does this cover what your staff needs? If there's anything missing or if some of these don't matter, let us know — it directly affects what gets built and in what order.
Roadmap
Stage 1: View System 查看系統 — done
- Browse all data across branches. Search, filter, pagination.
- Real data from WeM. UI matching the current system.
Stage 2: Write Operations 操作功能
- Cashier / POS — ring up sales, process payments
- Create and edit bookings
- Create and edit members
Stage 3: Go Live 上線
- Deploy to live server with HTTPS
- Real staff login (username / password, manager vs staff roles)
- PostgreSQL database for concurrent use
Stage 4: Parallel Run 並行運行
- Full data migration from WeM
- Run both systems side-by-side — WeM as fallback
- Staff training, receipt printing, daily backups
Stage 5: Full Replacement 完全取代
- Turn off WeM
- Load testing, monitoring, audit logs, data export
Maintenance cost reference 維護費用參考
Not a quote — just a reference for planning the economics of running the system long-term. Whether it's us or someone else maintaining it, this is roughly what it costs.
HK market rate for a senior developer who knows a custom system like this is around HKD 400-600/hr. The numbers below assume you find someone at ~HKD 400/hr — adjust proportionally if the rate is different.
Hosting 伺服器
~HKD 200-300/month for server + database. Negligible.
Maintenance vs development — two different things
Maintenance = keeping the system running. Bug fixes, security patches, monitoring, incident response.
Development = building new features, new pages, new integrations. Billed separately by the hour.
These are different cost buckets. Maintenance keeps the lights on. Development adds capabilities.
Maintenance hours by phase (assuming ~HKD 400/hr)
| Phase | What to expect | Hours/month | ~HKD/month |
| Stabilisation (first 3 months after launch) | Edge cases, data cleanup, hotfixes, staff-reported issues | 10-15 hrs | 4,000-6,000 |
| Settling (months 4-6) | Fewer bugs, occasional fixes, refinements | 6-10 hrs | 2,400-4,000 |
| Steady state (month 7+) | Patches, monitoring, minor tweaks | 4-8 hrs | 1,600-3,200 |
The first few months after any new system launch are always heavier — that's normal. It's the cost of replacing a system that's been running for years. Stabilises over time.
New features / development work
Maintenance keeps the system running. If you want new capabilities — new reports, new pages, integrations with other tools — that's development work, scoped and priced separately.
What this means in practice
At ~HKD 400/hr:
Year 1 average (maintenance only): ~HKD 3,000-5,000/month. Higher at the start (stabilisation), lower as the system matures. Plus hosting (~HKD 300).
Year 2+ steady state: ~HKD 1,600-3,200/month if the system is stable and no major changes needed.
For comparison: Current development phase is HKD 30,000/month — that's building the whole system from scratch. Post-launch maintenance is a fraction of that.
The system is standard web technology (Node.js, PostgreSQL, HTML) — no vendor lock-in. Any capable developer can pick it up and maintain it.
Would be helpful to know
- Which operations do your staff do most? — Booking creation? Cashier? Both? Tells us what to prioritise next.
- When you're ready to switch, all at once or run both systems for a few weeks? Running side-by-side is lower risk.
- What does WeM cost you today? — Useful for comparing ongoing economics.
- Anything we might not have seen? — Customer-facing booking portal, mobile app, other systems feeding into WeM?
All data extraction from WeM has been strictly read-only — nothing was created, modified, or deleted in the production system.