page:blueprints:logistics operators:vendor portal:next js

Logistics operators: vendor portal using Next.js

Summary

A vendor portal blueprint for logistics operators built with Next.js on Ample. Domain schema:

Public information: service products and transit times, lanes served, tracking entry point. Kept out of scope until handling is reviewed: consignee addresses, commercial invoices, customs documents. Customs and consignee data are sensitive; only shipment status is modeled here. Technical basis verified on Next.js: a role-to-document access model with negative tests (401 without identity, 403 for the wrong role) and a private-bucket round-trip for the allowed role (private=ok).

Representative Queries

Resource Requirements

Infrastructure Requirements

  1. Compute:

    • Status: verified
    • Summary: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
  2. Postgres:

    • Status: verified
    • Summary: Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.
  3. S3-compatible object storage:

    • Status: verified
    • Summary: Buckets are S3-compatible with issued credentials; PutObject and GetObject are verified by canary. Other S3 operations are not verified.

Prerequisites

Workflow Steps

  1. Model the logistics operators domain
    Create the tables service_products, capacity_movements, shipments, shipment_lines, document_access. Shipping services as SKUs lives in service_products; keep the sensitive classes (consignee addresses, commercial invoices, customs documents) out of this schema.

  2. Workflow step 1
    Model vendors scoped to the agency with roles.

  3. Workflow step 2
    Authorize document access by vendor and role (401, 403 negative tests).

  4. Workflow step 3
    Store vendor documents in the private bucket.

  5. Workflow step 4
    Deploy and verify the negative tests and an authorized download.

  6. Deploy
    Run the synchronous deploy once and read the result. Re-running with no change is a no-op.

    Command: ample deploy . --name --public --env S3_ENDPOINT=... --env S3_REGION=... --env S3_BUCKET=... --env S3_ACCESS_KEY_ID=... --env S3_SECRET_ACCESS_KEY=...

  7. Verify
    Run the pattern self-test(s) from the example (/p/private-document-library) and your own acceptance checks for the logistics operators workflow.

    Command: ample logs --kind build

Success Checks

Limitations

Cost Estimate

Evidence Summary

Next Actions