What BizBuddy is
BizBuddy is a desktop business manager for small operations: contacts, invoicing, inventory and printed documents in one app. It is written entirely in the standard web stack (PHP, HTML, CSS and vanilla JavaScript), yet it runs as a native, self-contained desktop program. There is no browser tab, no web server to set up and no PHP to install.
The idea is simple. Web technologies are the fastest way to build a polished business UI, but small-business owners want a program they double-click, not a website they host. BizBuddy keeps the web stack for building and wraps it in a lightweight native shell for running.
How it works
BizBuddy has two halves: a small Rust engine and a bundled PHP runtime. On launch, the engine starts PHP's built-in web server on a private loopback port, opens a native window, and points an embedded webview at it. When the window closes, the server stops with it.
- Engine: Rust with
taofor windows and events andwryfor the operating system's own webview (WebKitGTK on Linux, WebView2 on Windows, WKWebView on macOS). - Backend: PHP 8, shipped as a static binary built with
static-php-cli, so users never install PHP. - Frontend: plain HTML, CSS and vanilla JavaScript; no framework and no build step.
- Database: SQLite through PDO, with an optional MySQL/MariaDB connector. Business files live in the user's own data folder, so app updates never touch them.
- PDF: Dompdf, pure PHP, for invoices, letters and labels.
Features
Home dashboard
- At-a-glance tiles: Contacts, Open invoices, Overdue (30+ days, with the 90+ day share), Paid this month, Low stock and Out of stock
- Tiles adapt to the modules installed, and each one opens the matching filtered list
- First-run choices: open an existing business file, create a new one, or connect to a database server
Contacts
- Searchable list (name, company, phone, email) with type filter pills and a quick summary panel
- Full detail page with billing and shipping addresses
- Separate mail and email promotional opt-ins
- Merge duplicate contacts
- CSV import with field mapping
- Per-contact file attachments (receipts, signed agreements and so on)
- One click to that contact's invoices
Invoicing
- Customer picker, date entry and a Job location field that suggests sites used on earlier invoices
- Search across invoice number, customer, job location and every line description
- Free-form line items or lines pulled from inventory by name or SKU
- Made-to-size items (doors, windows) priced by linear, square or cubic size
- Add, duplicate and remove lines, with keyboard-first entry
- Payments and credits recorded as their own lines, so Paid and Amount due work themselves out
- Automatic tax calculation from per-item or default rates, with optional tax on shipping
- PDF printing through customizable templates, including repeating headers and footers on multi-page invoices
- CSV import of existing invoices and line items
Inventory
- Four item types: hourly service, flat-rate service, simple stocked item, and complex made-to-size item
- Stock count, low-stock threshold, weight, cost and category
- Per-item SAE or Metric units, with automatic conversion of weights, dimensions and rates
- Per-item tax rate, active/inactive switch and one-click duplicate
- Unique, required SKUs
Documents and templates
- HTML template editor with Design and Code modes and a live PDF preview
- Placeholders and conditional blocks for contact, company and invoice data
- Single-sheet letters, multi-contact batches and 2×2 postcard and address-label sheets
- Promo batch printing for every active, opted-in contact
- Image library for logos and artwork
- Optional editing in an external app of your choice
Data, security and administration
- Each business file is its own SQLite database, stored in the user's data folder, not beside the program
- Optional MySQL/MariaDB server for shared, multi-workstation use
- Users and sign-in kept inside each business file, with Manager, Supervisor, Estimator and Sales roles
- Activity log of changes
- Backup and restore, with optional gzip compression and AES-256 password protection
- CSV export of any or all tables
- Option lists, shipping and tax rates, company profile and business time zone in Settings
- Shared attachments storage across workstations
- Built-in help for every module
Desktop experience
- Native window with saved size and position
- Pop-out windows: any module can open in its own window, and open windows come back on next launch
- Native Save-As dialogs for downloads and PDFs
- Modular editions: Contacts, Billing, Business and Complete, so each customer gets only the modules they need
How it's built day to day
The same code runs in two places without changes. During development, a one-line script serves the app with php -S in an ordinary browser, which gives instant reloads and full developer tools. The Rust engine then runs the identical code in its native window for real-world testing.
A few lessons from the build so far:
- WebKitGTK has its own quirks. On Linux,
position: stickyand focus-driven scrolling proved unreliable, so layouts use plain flex containers and scroll positions are restored explicitly. - The engine and the page talk through custom URLs. Pages signal events such as "session ready" or "pop this module out" by navigating to a
bizbuddy://address that the engine intercepts. - Track window geometry as it changes. Reading a window's size at close time returns stale values; listening to resize and move events does not.
- Additive schema only. Database field names are frozen; new versions only add columns, so older business files open and upgrade cleanly.
- Engine first, features second. Each feature is proven at the engine level before the PHP and JavaScript layers are built on top.
Where it stands and what's next
BizBuddy is feature-complete for its first three modules and is heading to a small group of beta testers. Linux is the first target platform, with Windows to follow.
On the roadmap:
- A plug-in system, so every module (including contacts, invoicing and inventory) can be added or left out to suit each business
- A first plug-in, "Graphs and Reports", starting with promotion effort compared against the income it generates
- Proposals, job cost tracking and a point-of-sale module, matching the Estimator and Sales roles already in place
- Fully bundled installers with the static PHP runtime included
Nerd Cave