Snap the spec label and AssetOne's AI fills the register — brand, model, serial. Every proof photo is checked against the asset, so a banana never gets logged as a MacBook. Thai government compliance is built in: 17-digit codes, พด.6 / พด.5 / CGD annual reports in Sarabun, receiving and disposal committees, Buddhist fiscal year, bilingual TH / EN.
Every mid-to-large organisation with physical operations has the same quiet problem. IT tracks laptops in one spreadsheet. Facilities tracks furniture in another. Fleet manages vehicles in a third. The medical team has a binder. The regional office has its own list. When audit season arrives, the finance team asks for the master register, and what they get back is a patchwork that never quite reconciles.
The asset officer pulls the register on Monday. There are 4,200 rows. She walks the floor on Tuesday with a clipboard. She finds a monitor in accounting that the register says is in legal. She finds two laptops the register doesn't know about at all. She cannot find three vehicles the register swears are in the Samut Prakan yard. The fleet manager says those vehicles were sold last year; nobody updated the sheet.
Wednesday is for reconciliation. She writes off the three vehicles. She adds the two mystery laptops. She tries to remember which department the monitor actually belongs to. By Thursday, she is filing warranty claims on equipment that has already been retired, and calling the insurance broker about a truck that doesn't exist.
A hundred-asset quarter-end walk takes a full day. A thousand-asset walk across three sites takes a fortnight. When the auditor shows up in the fifth week, the register still doesn't tie out, and the finance director absorbs the variance as a write-off.
Multiple versions, conflicting edits, no custody log, no location field that's actually current. The register becomes a lagging indicator of where the assets used to be, not where they are now.
"Can I take the projector to Chiang Mai next week?" "Sure." Done. No record of who sent it, who received it, whether it arrived, or whether it ever came back. Three months later, when the projector is missing, nobody can reconstruct the chain of custody.
A team of two with clipboards, walking forty floors across five sites, ticking off ten thousand assets. Two weeks of field work. Another week of data-entry. The results are stale by the time they hit the finance deck. Next year, the same cycle, no compound learning.
"We knew we'd lost assets. We just didn't know which ones. The audit told us last year, six months too late to do anything about it."
Conversation with a facilities manager at a Bangkok hospital group · 2026
AssetOne treats the register as the single source of truth — not a spreadsheet that tracks the register. Every asset is registered once, tagged with a QR code, and updated through explicit actions: transfer, maintain, audit, retire. Every action is logged. Every custody change is enforced through an approval workflow. Nothing moves by email.
There is no separate mobile app. QR scanning runs in the phone browser the asset officer already has. There is no separate finance module. Depreciation calculates inside the register and exports straight to Excel. There is no separate audit tool. Audits are a sequence of QR scans against an expected list, and the result is a finalised session with a downloadable report.
The register is the system of record. Every field on the asset — location, custodian, condition, status, book value — is updated through an action that creates a history entry. There is no parallel spreadsheet to reconcile. Export to Excel whenever finance or audit asks; the export matches the register because there is nothing else to match.
Every asset gets a QR code at registration. Audits are a location-scoped scanning session. The auditor walks the floor with a phone, scans each tag, and the browser confirms whether the asset is expected here (green, found), expected elsewhere (amber, misplaced), or not scanned at all (red, missing). Three-site audits that used to take a fortnight close in days.
Transfers move through four explicit states: pending (requested) → approved (manager signed off) → confirmed (recipient acknowledged receipt) → archived. The asset's location and custodian do not update until the recipient confirms. Nothing falls through the cracks because nothing moves on a verbal.
This isn't an ERP module. It's the asset layer that lets finance, facilities, IT, and audit stop maintaining five different spreadsheets of the same thing.
Snap the spec label. AI fills in brand, model, serial. The officer reviews; the register grows.
The officer opens the wizard and points the phone at the device's spec sticker. AssetOne's AI reads the label and pre-fills brand, model, and serial — the officer reviews, corrects anything wrong (usually nothing), and walks the rest of the six steps. On save, the asset gets the 17-digit Thai government code and a printable QR sticker. Registration drops from 90 seconds to about 20.
Every asset has a custodian, a department, and a location. All three are required fields.
An asset without a custodian is an asset that will go missing. The wizard makes assignment mandatory (or explicitly blank by choice), and every subsequent transfer updates the custodian and location atomically. Location is a hierarchical field — site, building, floor, room — so the auditor knows not just "Bangkok HQ" but "Bangkok HQ, Floor 14, IT Operations." The map view uses the location's lat/lng to plot every site on a single pane of glass.
Pending → approved → confirmed. The register doesn't change until the recipient confirms receipt.
Somchai needs to move a Dell Latitude to Orathai in Chiang Mai. He opens the asset, clicks Transfer, picks Orathai and the Chiang Mai location, adds a reason, submits. The transfer status is now pending and the asset status is pending_transfer. The manager sees the request in their Pending-for-Me tab. They click Approve. The status flips to approved and the notification rolls into Orathai's tab. She clicks Confirm Receipt. Now, and only now, the asset's assigned_to and location_id update, and the status returns to active. Three history entries are written along the way. The full chain — who requested, who approved, who confirmed, when — is reconstructable in the asset's History tab. Nothing moved on a verbal.
First-class mobile flow at /m/audits. Pick a location, scan what's there, see what's missing — before you leave the floor.
Audits are field work, so they live in the mobile shell. The auditor taps Audits on the home screen, picks a location (the page shows the expected count), and the camera opens for continuous scanning. Each scan either confirms a found asset (green), flags a misplaced one (amber), or surfaces an unknown tag. Found / Expected / Remaining counters stay visible at all times. On finalize, every not-scanned asset auto-flips to missing, every audited asset gets a history entry, and the session produces a Sarabun-rendered PDF report. What used to take a fortnight across three sites now closes in days.
Straight-line depreciation calculated per asset, per year. Excel and PDF export match the table.
Two operational tails on every asset: maintenance and depreciation. Maintenance records (preventive, corrective, inspection) are logged against the asset with cost, performer, completion date, and next-due date. Overdue maintenance rolls into the dashboard alerts panel; upcoming maintenance rolls into the maintenance tab. Depreciation runs on straight-line by default. The user picks a fiscal year, the page recalculates every asset's accumulated depreciation and current book value, and the totals feed the four summary cards at the top. Excel and PDF exports match the on-screen table line-for-line, so the schedule hands directly to finance without re-keying.
Every asset ends. The history survives.
When an asset is sold, scrapped, donated, or retired at end-of-life, the operator clicks Dispose or updates the status to retired. A confirmation modal protects against accidental taps. On confirm, the asset's status changes, a final history entry is written, and the row drops out of the active-register counts but remains searchable for audit and compliance review. Depreciation stops accruing. Warranty alerts stop firing. The lifecycle closes cleanly. A disposed asset is not a deleted asset. The register keeps the full lifecycle so that three years later, when an auditor asks where a particular serial number went, the answer is two clicks away.
Snap the spec sticker. Brand, model, and serial number drop into the wizard automatically. A 90-second form turns into 20.
Every proof photo is checked against what the asset is supposed to be. A banana submitted in place of a MacBook gets flagged at capture, not at audit three months later.
Every asset gets a CGD-format code (department, type, sequence, fiscal year) generated automatically. Ministry prefix configurable per tenant.
กรรมการตรวจรับ and กรรมการจำหน่าย workflows built in. Three members plus a chair, independent voting, Sarabun-rendered minutes on completion.
The PDFs กรมบัญชีกลาง expects, generated on demand. Sarabun-rendered, finance-ready, no rebuild in Excel.
Depreciation runs October to September. Years display in พ.ศ. Auto-classifies วัสดุ vs ครุภัณฑ์ at ฿5,000.
Captures budget code, cost center, and one of the four standard fund sources (งบประมาณ / นอกงบประมาณ / บริจาค / กู้). All filterable, all roll up on the annual report.
Officers work in Thai. Auditors toggle to English in one click. PDFs render Thai cleanly with embedded Sarabun.
Permanent transfers reassign the asset on confirm. Temporary loan-outs (50 phones to a tradefair, a vehicle to repair) carry a return date and never lose the home base.
Camera stays open, beeps on each scan, dedupes automatically. Dispatch and return both capture photo proof, AI-checked against the asset.
Printable QR per asset. Scanning runs in the browser camera. No App Store review, no MDM rollout, no native app to maintain.
A thumb-zone, full-bleed mobile UI for officers in the field. Add-to-Home-Screen launches it standalone. Same login, same data as desktop.
Five roles. Departments form a tree. Officers see their own bureau and below; employees see their own department. The UI rewrites itself per role.
Every site plots on a map, coloured by condition. Click a pin to see what's there.
Every action writes a history entry — who, when, before, after. Warranties expiring within 30 days surface on the dashboard.
Asset Register, Stocktaking, Depreciation, Movement, Maintenance, Department, Warranty, พด.6, พด.5, CGD Annual, Vendor Spend. The files finance and audit actually ask for.
A single site with 2,000–5,000 tracked assets recovers roughly 60–120 person-hours per audit cycle when AssetOne replaces clipboard audits and spreadsheet reconciliation. Multi-site operations compound the savings. The headline is audit speed. The detail is on reconciliation quality, custody provenance, and the depreciation tie-out.
| Metric | Before AssetOne | After AssetOne (60-day pilot) |
|---|---|---|
| Audit cycle time (single site, ~2,000 assets) | 10–15 working days | 2–4 working days |
| First-pass audit accuracy | 70–85% | 95–99% |
| Ghost assets on the books (share of register) | 5–12% | under 1% |
| Missing / untraceable assets per audit | 30–80 | under 10 |
| Custody disputes per quarter (transfer chain gaps) | 10–25 | under 3 |
| Depreciation schedule tie-out to GL | Manual reconciliation, 2–3 days | Export-ready, same day |
| Warranty claims lost to expiry | 5–15% of eligible | under 2% |
Figures derived from pilot estimates and our founder's prior enterprise delivery of asset-management and fleet-tracking systems across Southeast Asia (2017–2026). Individual pilot results vary by asset mix, existing process maturity, and site count.
In operational terms, a mid-sized facilities team with 5,000 assets across four sites recovers the equivalent of a full audit cycle per year — time that redirects to preventive maintenance, capex planning, or the actual work the team is paid to do. In financial terms, catching 5–15% of mis-booked assets typically recovers book value roughly equal to the cost of the pilot. In compliance terms, the audit trail closes the "chain of custody" gap that regulators, insurers, and external auditors all ask about.
AssetOne is built first for Thai government deployments — ministries, hospitals, and provincial agencies — and then for everyone else. The list below is what you would otherwise spend three months adding to a generic asset tool.
Auto-generated. Ministry prefix configurable per tenant.
One-click PDF, Sarabun-rendered, filtered to ครุภัณฑ์.
Companion register, same one-click PDF flow.
Six-section annual report in the format กรมบัญชีกลาง expects.
Years display in พ.ศ. Selector covers ปีงบประมาณ 2566 through 2570.
Auto-classified at the configurable threshold. Live banner during registration.
Three members plus chair. Independent voting. Sarabun-rendered minutes.
Same structure for end-of-life. Disposal method recorded for the audit trail.
The four CGD-standard fund sources captured per asset, rolled up on the annual report.
Officers work in Thai. Auditors toggle to English in one click.
| Stack | Laravel 13 + Livewire 4 + Preline UI 4 + Tailwind CSS 3 + Alpine.js + PostgreSQL 17 |
|---|---|
| AI vision | Gemini via Vertex AI Express Mode (default gemini-3.1-flash-lite-preview) for label OCR + object verification; ~$0.0002 per photo; toggle off with ASSETONE_VISION_ENABLED=false |
| Supported browsers | Modern Chrome, Safari, Firefox, Edge — desktop and mobile (camera APIs require HTTPS) |
| QR / barcode scanning | Browser-based via html5-qrcode (QR + Code 128/39/93 + EAN/UPC + Data Matrix + ITF + Codabar); no native app required |
| QR generation | Server-side via simplesoftwareio/simple-qrcode; prints as SVG or PNG |
| Map | Leaflet.js with OpenStreetMap tiles; optional Mapbox tile layer for branded deployments |
| Charts | Chart.js (donut, bar, stacked-bar) for dashboard |
| Export | Excel via openspout/openspout; PDF via barryvdh/laravel-dompdf with embedded TH Sarabun New for Thai-script rendering |
| Localization | Native Laravel locale + session middleware (TH default / EN toggle); Buddhist calendar via App\Support\ThaiDate helper |
| Auth | Laravel Breeze (Livewire) session auth; SSO (SAML / OIDC) available under enterprise licence |
| Roles | Five roles: Admin, Manager, Asset Officer, Auditor, Employee — gated via Laravel Gates; org-hierarchy row-level access |
| Mobile | Browser-based PWA shell at /m; Add-to-Home-Screen launches it standalone with iOS safe-area support |
| Tenant scale | Tested to 10,000 assets per tenant; horizontally scalable beyond |
| Deployment | Hosted SaaS, dedicated tenant, or on-premises via Docker Compose |
| Infrastructure | Any modern VPS; minimum 2 vCPU / 4GB RAM for single-instance deployment |
| Data residency | Thai-region hosting available for Thai PDPA compliance; SG/MY/ID regions on request |
| Test coverage | 319 PHPUnit tests, 628 assertions across models, gates, routes, depreciation math, Thai date helpers, and Sarabun PDF generation |
| Integrations (roadmap) | SAP FI-AA, Oracle Fusion Assets, Microsoft D365 F&O, QuickBooks, Xero; SCIM for user provisioning |
| Backup | Daily PostgreSQL snapshots; point-in-time recovery up to 7 days on managed tenants |
AssetOne is built to clear an enterprise procurement review without custom exceptions.
Every sensitive action is gated. Unauthorised users do not see the button. The UI rewrites itself per role — an Employee does not know a Dispose button exists. Gate decisions are server-side; front-end hiding is defence-in-depth, not the primary control.
Every action writes a history entry with user, timestamp, before/after values, and action type. The history is not editable through the UI; corrections are new entries that reference the original. This is the trail a regulator expects, without custom logging work.
Thai-region hosting is available for Thai PDPA compliance. Singapore, Malaysia, and Indonesia regions are available on request for clients whose procurement or regulatory posture requires in-country data.
TLS 1.3 in transit; AES-256 at rest for the database and for stored asset photos; PostgreSQL-level column encryption available for fields flagged sensitive (serial numbers, custodian PII).
The audit-trail structure, access controls, and export behaviour are designed for standard compliance reporting. Formal certifications are on the roadmap for production deployments; pilot deployments can be configured to operate within existing client ISO / SOX envelopes.
AssetOne does not phone home, does not ship usage analytics to a third party, and does not bundle third-party tracking scripts in the hosted UI. Managed-tenant deployments can enable application-performance monitoring on request.
AssetOne deploys as a pilot at a single site with a written KPI and an honest ending. Either the measured outcome clears the KPI and we scale to the rest of the sites, or it doesn't and we part ways with the pilot report in your hands. No open-ended contracts.
Operational walkthrough with the asset officer, facilities lead, finance, and (if present) internal audit. Identify the pilot site, the asset mix, and the existing spreadsheets we're replacing. Agree the seed data import — categories, departments, locations, initial asset list. Write the KPIs: target audit cycle time, target first-pass accuracy, target tie-out to GL. Fixed pilot price confirmed.
AssetOne deployed to a dedicated tenant. Seed data imported. First 500–2,000 assets registered by the on-site team using the six-step wizard — this is real work, not a dry run. QR labels printed and applied. Transfer workflow goes live. Maintenance and depreciation configured. Weekly review meetings are working-software demos, not slide decks.
Run the first full QR-scan audit on the pilot site. Measure cycle time, accuracy, and tie-out against the KPIs. Run the first depreciation export and hand it to finance. Gap analysis on any KPI miss. Recommendation: scale deployment, continue pilot with adjustments, or walk away. All three endings are valid.
If the pilot cleared the KPIs: roll out to additional sites, enable SSO, connect the ERP integration (SAP FI-AA, Oracle, D365), enable the managed-backup tier. If it didn't: we hand over the pilot findings — asset register, history trail, first audit report — and part ways.
Fixed-price pilot. Walk-away clause. Roadmap influence for design partners. No surprises.
Deploy to one site with up to 2,000 assets. All costs fixed in week 0.
Hosted multi-tenant. Priced per tagged asset, per month.
Annual licence, unlimited assets, on-premises or dedicated-tenant deployment.
The demo takes thirty minutes. Bring your current asset spreadsheet, your category list, and one site's worth of location hierarchy. We'll show you AssetOne running with your real data — registration, transfer, audit, depreciation. If the shape fits, we scope a 60-day pilot at that site. If it doesn't, you leave the call with a clearer view of what you actually need.
AssetOne didn't start from scratch. The registry-first model, the transfer-workflow enforcement, the QR-audit pattern, and the depreciation logic are all grounded in our founder's prior enterprise delivery across Southeast Asia (2017–2026) — including asset-tracking systems for regional fleet and operations platforms that moved tens of thousands of physical units through custody changes, audits, and end-of-life disposal.
That history is why AssetOne treats transfers as an explicit workflow (not an edit on a row), why audits are a location-scoped session (not a bulk checkbox), and why the register is designed to tie out to the GL rather than approximate it.
Read the full track record →