Changelog
Everything we have shipped, newest first. Work still in progress lives on status instead.
-
Operator tools — pricing, accounts and the audit trail
- Quote requests can now be priced: an operator adds an itemised offer (freight, fuel, security, handling), it appears on the customer's request, and accepting it creates the booking.
- Markup rules with per-lane, per-airline and per-plan overrides, plus floor, ceiling and minimum-charge guard rails. Most specific rule wins, and the rule that decided a price is shown alongside it.
- Rules are retired rather than deleted, so a price quoted last month stays explainable.
- Accounts, roles and plans are managed in one place. Roles are read from our own database on every privileged request, never from a token claim; only a root user can change them, and the last root cannot be removed.
- Every privileged action is written to an append-only audit log with the before and after value, which customer was affected, and the request IP. There is no edit or delete path for it.
- Air waybill numbers are now unique across bookings — the same AWB can no longer be attached to two shipments, which would have made tracking, documents and claims resolve to the wrong cargo.
- Monthly shipment quota is enforced at the moment of booking, not just displayed.
-
Shipper workspace — quotes, bookings and shipments
- Quote requests are now real records: enter a lane and cargo on the rate page and it is saved with its own reference, the chargeable weight it will be rated on, and a status you can follow.
- Workspace pages for quote requests, bookings, shipments, in-account AWB tracking and your account profile, all reading live data.
- Booking records carry an itemised offer structure — freight, fuel, security and handling as separate amounts — so the promise that surcharges are never folded into one number is enforced by the schema, not just the copy.
- Air waybill numbers are validated (11 digits, mod-7 check digit) before they are written to a booking, and are left empty until the carrier actually assigns one.
- Monthly shipment quota is counted from real bookings, and a cancelled booking returns its allowance.
- Shipment milestones record where each event came from, so a hand-entered status can never be mistaken for a carrier feed push.
-
Accounts, sign-in and sessions
- Sign-up, sign-in, email verification, password reset and sign-out, with the authenticated workspace gated in middleware.
- Sessions are established only from a cryptographically verified access token: the signature is checked against the identity provider’s published key, the algorithm is pinned, and the issuer is pinned in configuration. A self-crafted or tampered token is rejected rather than trusted.
- Access tokens are short-lived and refreshed silently; sign-out clears the session on the device.
- Password reset gives the same answer whether or not an account exists for an address, so the form cannot be used to discover who has an account.
- Accounts start with no active plan rather than being silently treated as paid — search, tracking and the tools stay open, booking needs a plan.
-
Pricing, company & legal pages
- Pricing page with the four paid tiers (Starter, Pro, Pro+, Ultra) reading from one shared plan catalog — no free tier, entry at $1.99/month.
- The metered unit is now stated plainly: one air shipment = one booked master AWB. Rate search, capacity lookups and AWB tracking are not metered as shipments.
- Markup policy published on the pricing page: margin falls as the tier rises, and fuel and security surcharges are always itemised rather than folded into the headline rate.
- About, Contact, Careers, Status, 404 and the legal set (Terms, Privacy, Cookies, EULA).
- /llms.txt and /llms-full.txt expose the airline registry, AWB numbering rules, Cargo-IMP milestone vocabulary and product taxonomy to AI answer engines, with ETag-based caching.
- Status page reports a real component inventory and marks what is not live yet, instead of showing synthetic latency and a back-filled uptime bar.
-
Foundation, brand shell & air-freight data layer
- Sky-cyan (#22D3EE) brand shell wired through the shared scanner theme: navbar, footer, favicon, apple-touch icon and social preview image.
- Homepage rebuilt for air freight — rate search by airport pair, AWB quick-track, airline marquee, feature grid and FAQ. Ships zero client JavaScript.
- Airline registry: 46 cargo carriers with IATA designator, ICAO code, 3-digit AWB prefix, primary hub and fleet type.
- Airport dataset wired in: 4,500+ IATA-coded airports across 230+ countries, deduplicated and filtered to routable entries.
- IATA Cargo-IMP milestone vocabulary (FOH through DLV) and a 10-product rate taxonomy (general cargo, ULD pivot, express, charter, perishables, pharma, DG, live animals, valuables, heavy/outsize).
- Homepage counters now derive from the registry and round down — no hard-coded marketing figures anywhere on the site.
- SEO layer: canonical URLs, Open Graph and Twitter cards, plus Organization, WebSite, SoftwareApplication and FAQPage structured data.
- Fixed: the /app/* gate redirected from inside a layout component, which streamed a truncated 200 instead of a redirect. Gating moved to middleware, so an anonymous visit now gets a clean 302 to /login with the return path preserved.
- Fixed: translucent accent surfaces (bg-accent-400/10 and friends) compiled to no CSS at all, because Tailwind cannot apply an opacity modifier to a CSS-variable colour. Replaced with color-mix utilities.