Card POS BETA

Sign in with your Google account to continue.

Card POS BETA

ItemQtyPrice RMLine

Cart is empty. Scan a card to start.

TotalRM0.00
Payment: leave the amounts blank to take the full total in the first account.

Example: RM27 sale, the customer hands you RM50 cash, and you return RM23 by TNG. Leave the first box blank (it takes the rest, RM50 in cash), choose Other in the second box and type -23. One entry, not three.

Admin & tools team, starting stock, backup, activity log
Team

One manager and one employee in this beta. They sign in with their own Google account. You can remove them at any time and they lose access straight away.

Starting stock from Shiny

One card per line: name, number, qty, value (value = the Shiny price of ONE card in RM). Then type what you paid, as a percentage of Shiny, or the total you spent, or both. The app works out each card's cost in steps of RM0.50.

Import a transaction pack (Admin)

Catch up from your Excel. Choose the pack file, read the preview, then press Apply. Anything already imported is skipped, and a cloud backup is saved first.

Item history

Loads every buy and sale from your old Excel sheet up to 4 Oct, so each item can show when you bought it and what happened to it. A cloud backup is saved first. Needs Admin.

Account & backup

Signed in as

A cloud backup is saved automatically about once a day. Nothing is downloaded to your phone.

Restore from a backup file (overwrites documents with the same name):

Diagnostics
Tap "Check this device".
Activity log (admin actions)
Nothing yet
Admin security (password + authenticator)

Admin (every edit and delete) asks for this password and the 6-digit code from Google Authenticator on any device that does not use the fingerprint lock below, such as a laptop or desktop. It locks itself after 5 minutes. If you ever lose your phone or the authenticator, delete the document admin/main in the Firebase console (Firestore database) and set it up again.

Admin lock (fingerprint / Face ID)

Optional. On this device Admin then asks for your fingerprint or Face ID instead of the password and code. It locks itself after 5 minutes or when you leave the app.

Remove test sales, cards and money entries (Admin)

Tap Find, then tick only what was a test: sales (their stock goes back), cards, and money entries. Everything else stays untouched, including your Excel history and opening balances. A cloud backup is saved first, automatically. It asks for your fingerprint if the Admin lock is on.

Set prices in bulk
% markup on cost

Starter prices only: cost plus your %, rounded up to the next RM1. Items that already have a price are not touched. Check them at the register.

Paste rows with a header line: id,price (optional extra column shiny). Only existing items are changed. Names also work if you use a name column.

Shopify: exports items that have stock and a sell price, all as draft.

Stock-take

Scan every card you are holding. The camera counts each card ONCE, even if you keep it in view. If you hold several of the same card (like packs), press +1 for each extra one. At the end, it compares what you scanned with what the system thinks you have. Nothing changes until you tick items and press Adjust.

Paid from

Type what really left each account. Cards cost RM280, you handed over RM300 cash and got RM20 back by TNG: Cash on Hand 300, then Other and -20. Cards cost RM120, you paid RM90 cash and RM30 by TNG: 90 and 30. If you leave the first box blank it takes the rest. It posts as one buy-back.

Extra costs and advances (optional)

Commission, shipping or card fees for these cards. It is added to the cards' cost (spread by value), so your profit comes out right. An advance you paid earlier to this seller can be used instead of cash.

Overseas buying sheet (RMB)

For 集换社 purchases. Fill these in, then upload an Excel or CSV further down with columns name, number, rmb, qty (optional: id, type, paid_from). Cost = RMB × rate, plus the card fee when paid from Personal Funds. The agent's commission is added to the card cost and paid to the agent from the account you pick.

First dropdown: cards paid from (default). Second: commission paid from.

Buy from Shiny screenshots

Upload your Shiny list screenshots (several are fine, overlaps are handled). It reads each card and its Shiny value, then splits what you paid across the cards in whole RM.

none selected
Or upload / paste rows from ChatGPT

Columns: id,name,type,qty,cost,price. Excel Transactions rows work too, and so do rows that start with Purchase / Item In (id, type, name, qty, cost) (the account and the Shiny price in Notes are picked up). Rows go to the list below so you can check them before posting.

Add an item you bought

Type a few words and your stock appears below. Tap one to fill in the ID, name and category. For a brand new card, type its name and pick the category.

Buy-back list
Total costRM0.00
Tap a row to see its transactions.
PeriodSalesRevenueCOGSExpensesBoughtNet P&L
Recent activity sales, buy-backs and money, newest first
Import sales from the phone register

Paste the rows the phone register gave you. Each deal is posted once; pasting the same deal again is skipped.

Trace the money

Pick a period and an account. Every movement is listed in order with the balance after it, so you can match it against your bank app.

Accounts show, hide or add one
Find a product

Type a card (yu pik), a person (darren), a word from a remark, or a date (2026-10-15). Shows the card's history with profit, and every entry that mentions it.

Record money in / out
Recent money movements

Test-print a few first and scan them before printing all.

Print straight to the Niimbot B1 Pro (experimental)

Needs Chrome on Android with Bluetooth on. It uses NiimBlueLib, an unofficial open-source library in alpha. Its author says it is not meant for commercial use without NIIMBOT's consent, so use it at your own discretion. Not tested on a B1 Pro by me, so start with one test label.

Activity