Changelog — Logistica
All notable changes to this app are recorded here. Newest entries on top.
[2026-06-28]
- Charge by goods type. Each shipment now has a Goods Type (e.g. Compressed Goods, Bale, Carton — the list is managed under Settings → Goods Types and can be extended). On a container you set a CBM rate per goods type (plus a default for anything else). When the container is marked Arrived Warehouse, each shipment is charged using its goods type's rate on that container — e.g. 1 CBM of compressed goods at ₦50,000 = ₦50,000, 1 CBM of cartons at ₦100,000 = ₦100,000. The shipment's KG rate and discount still apply on top.
- Container status renamed "Arrived" → "Arrived Warehouse" across the app (filters, dropdowns, badges). The automatic charge + shipment-arrival logic now triggers on this status.
- Fixed: changing a shipment's status. Status changes now save reliably — cancelling a shipment correctly asks for (and records) a reason instead of silently failing, and pre-arrival shipments clearly show that their stage follows the container.
- Install button on the customer home screen. Customers now see a clear "Install" button on their dashboard to add the app to their home screen (with iPhone instructions where needed). It disappears automatically once the app is installed or already running as an app.
[2026-06-26]
- Simpler container statuses. A container now has just three stages — Booked → In Transit → Arrived — everywhere (create form, edit, filters, badges). The old "Loading" and "Closed" options were removed.
- Delivered & Partial Delivery for shipments. Once a shipment has Arrived, you can mark it Partial Delivery (some goods released) or Delivered. These options only appear after arrival; before that, a shipment's stage follows its container. Both show on the admin and customer sides.
- Edit & delete in Accounts. Every company expense can now be edited or deleted directly from the Accounts screen.
- Easier app install. The "Install app" option now also appears on iPhone/iPad with step-by-step Add-to-Home-Screen instructions, and it's hidden once the app is already installed — so you no longer hit "already installed / can't install" confusion.
[2026-06-23]
- Fixed: deleting a container after reassigning its shipments. Reassigning a shipment to another container (by typing/picking its number on the shipment) now actually moves it, so once a container's shipments have all been reassigned or removed, it deletes successfully. Previously the move only changed the displayed number, so the delete check still saw the old assignment.
- Clear "can't delete yet" dialog. When a container (or other record) still has things attached, you now get a dialog listing exactly which shipments are holding it up — each one tappable so you can go reassign or remove it — instead of a vague error.
- Fixed the Paystack "Could not load the payment library" error. The payment-library loader now loads its own copy on demand, waits for it, and never gets stuck in a failed state — so the payment modal opens reliably even after a slow or interrupted first attempt.
- Removed KG rate & discount from the customer screen. Those are now set per shipment only (see below), so they no longer appear on the customer add/edit forms.
- Per-shipment KG rate & discount. On an arrived shipment you can now set a KG rate and a discount % (with a reason) for that one shipment, overriding the customer's defaults. Each field pre-fills from the customer's setting, and editing the container later (or its CBM rate) no longer wipes a per-shipment override.
- Fixed: editing a shipment could clear its ETA. Saving the shipment edit form no longer blanks the arrival date or other fields it didn't change.
- Fixed "all paid up" showing when a balance is still owed. The customer dashboard's amount-due total was ignoring delivered shipments, so a customer with unpaid delivered shipments could wrongly see "You're all paid up." It now counts every unpaid shipment (any status except cancelled), matching the unpaid badge.
- Per-customer KG rate. You can now set an optional KG rate on each customer (Customers page / customer profile). When set, that customer's shipments are charged by weight using their own rate — it's no longer on the container.
- Per-customer discounts are back. Set an optional discount % on any customer; it's automatically applied to that customer's shipment charges on top of the container's CBM rate. Changing it updates their already-arrived shipments too.
- Customers can open any shipment — even in-transit ones. Instead of just a count, every shipment on the customer dashboard is now tappable and shows its full details (cargo list, assigned container, ETA, and current status). Charges and the payment button still appear only once a shipment has arrived.
- Container status always stays in sync with shipments. Changing a container's status now updates its shipments in both directions immediately — marking it Arrived arrives them (and their charges appear), and moving it back to In Transit or Loading moves them back (and their charges hide) on both the admin and customer sides.
Internal
- Production-readiness pass. Removed dead/broken navigation left over from the original clone: the Home dashboard no longer shows an owner view that called a non-existent endpoint or linked to a missing "Projects" page, and the staff Home quick-links now point to Containers instead of a non-existent Profile page.
- Removed the leftover "Special Projects" settings section — it toggled a page that no longer exists in Logistica.
- Copy fix: the customer portal sign-in now reads "Track your shipments, view charges, and pay your balance" instead of the old property-rental wording.
- Audited every screen: all PHP files lint clean, every client API call maps to a real handler, and every in-app link resolves to a real route.
[2026-06-22]
- Charges now come from the container — and only after it arrives. Booking a shipment no longer asks for rates: you just record the cargo, pick its container, and (optionally) note a float estimate. Each container carries its own CBM rate, KG rate and ETA. The moment you mark a container Arrived, every shipment inside it automatically becomes Arrived too and inherits that container's rate and ETA — so its charge appears instantly without re-entering anything.
- No charges shown until arrival. Shipments that are still Booked or In Transit show no charge and no payment option — for you and for the customer. Customers see a simple status like "2 shipments in transit" instead of a price, and a clear note that charges open once the goods arrive. Per-customer discounts and the optional KG charge are applied on top of the inherited container rate once arrived.
- Two business contact numbers. Set a separate call number and WhatsApp number under Settings → Business Info. Both are shown to customers on receipts and the tracking portal so they know which line to use for what. (The earlier per-customer two-number field was removed — it was added by mistake.)
- One shared set of company data across all offices. Your offices no longer keep separate, siloed data. Add a customer or book a shipment at any office and everyone — at every office — sees and can edit it. It's all one company now.
- Manage your offices. You can now edit any office (including the first/default one) and delete any office you no longer need, as long as one remains. Deleting an office never deletes data — any records tagged to it simply move to another office.
- Customers can pay part of a balance. On both the invoice page and the customer portal, customers can now enter any amount they want to pay toward an outstanding balance instead of being forced to pay the full amount at once.
- More reliable card payments. Fixed the "Payment library failed to load" error — the Paystack checkout is loaded up front and also retried on demand, so the pay button works even on slower or briefly interrupted connections.
- Clearer wording throughout. Renamed every remaining "tenant" to "customer" and replaced leftover property-rental wording (properties, IDs, agreements) with logistics-appropriate language across the app, settings, receipts, and the activity log.
- Fixed: couldn't add a shipment. Resolved the misleading "network failure" message shown when confirming a new shipment; the booking now completes and reports the real reason if anything goes wrong.
[2026-06-17]
- Your currency is now used everywhere. The currency symbol set in Settings is respected across the whole app — including the Accounts ledger and the expense entry screens, which previously showed a dollar sign. Fresh installs lock the symbol in automatically.
- Money fields format as you type. When you enter an amount anywhere — expenses, shipping rates, handling fees, discounts, prices, payments — the figure now shows thousands separators (e.g. 1,500,000) so it's easy to read exactly what you typed. For Naira, kobo decimals are ignored.
[2026-06-16]
- Configurable tax / VAT on invoices. Turn on a tax under Settings → Tax / VAT (set the label and rate) and every new shipment automatically adds it as its own line on the invoice, receipt, and customer portal. The rate is locked onto each invoice when it's created, so changing it later never alters older invoices.
- Record company expenses. New Accounts tab where you log operational costs, asset purchases, and vendor payments — categorised (Rent, Salary, Asset, Vendor, Utilities, Transport, Tax, Other) — so your real costs are captured, not just per-container ones.
- Company ledger + profit/loss. The Accounts tab shows a single ledger of every transaction — money in (customer payments) and money out (company + container expenses) — with a summary of Income, Expenses, Net Profit/Loss, and Outstanding owed to you, for any date range.
- Track containers and their profit & loss. New Containers tab: each container you load in China holds many customers' shipments. Record what the container cost you (shipping line, clearing, transport — any expense lines you like) and see its full picture at a glance — total billed, money collected, what's still outstanding from customers, and profit on both a collected and a billed basis.
- Assign shipments to a container. When booking a shipment you can now pick which container it's travelling in, so revenue rolls up to the right container automatically.
- Float estimate at booking. Add an optional rough freight quote when you book in China and share it with the customer early — the real charge is still worked out from CBM/KG when the goods arrive at the warehouse.
- See released vs. remaining goods per customer. A customer's profile now shows how many pieces have been released and how many are still in your warehouse — handy when someone has paid part of their bill and collected only some of their goods.
- Customers tab is now a full hub. Open any customer to see their details, their shipments (with balance and release status), goods released, and send them a message — all in one place.
- Removed Shared Costs. Customers don't share charges, so that section is gone — replaced by container tracking and clearer company accounts (collections, outstanding, unpaid).
- Shipping-focused customer portal. The customer app now talks shipping: "Shipments" and "Issues" instead of charges and repairs. Customers raise an issue about a shipment (with a photo) instead of "reporting a repair."
- Customers can pay in the app with Paystack. Customers sign in and settle their shipment balance online; you can also record cash and transfers yourself.
- Shipping document types. Upload categories are now Manifest, Packing List, Invoice, Receipt, Bill of Lading, Waybill, and Customs Declaration.
- Internal: every remaining "tenant" wording is now "customer".
[2026-06-15]
- Logistica is here — run your whole cargo business from one app. Book shipments, track them through Booked → In Transit → Arrived → Releasing → Delivered, and keep every customer in the loop.
- Charge by weight or volume. Set a CBM (volume) rate and a per-kg rate on each shipment; the total works itself out from your cargo's measurements, plus a handling fee, minus any discount.
- Track containers and bales. Record the container number and add each bale with its own weight and volume. Mark how many pieces have been released when customers pick up in parts.
- Pickup or delivery, your choice. Flag each shipment for warehouse pickup or delivery to the customer, with a handling fee when you need one.
- Customers track and pay online. Customers sign in to see their shipments, cargo breakdown, and balance — and pay it with Paystack, right from their phone.
- Record off-channel payments in seconds. Took cash or a bank transfer? Log it against the shipment and the balance updates instantly.
- WhatsApp a customer in one tap. From any shipment, tap WhatsApp Customer to open a chat straight to their saved number with the shipment summary ready to send.
- Split shared container costs. Pool clearing, demurrage, or consolidation costs across customers — everyone sees who has paid.
- Built-in support chat. Customers raise questions or damage claims with a photo and message back and forth with your team until resolved.
- Multiple offices, one account. Run more than one office, each with its own shipments, customers, and dashboard.
- Reports that help. Collections, outstanding, top customers, top cargo types, and daily trends — with CSV export.