,
,,
Calisto Box

Multi-backend storage. Document workflow.

Quota-enforced tiers from 10 GB to custom. Dual-write replication across primary storage, CDN, object storage, and encrypted backup. File versioning. Password-protected shareable links. Contract, waiver, and customs document surfaces. Compliance tracking with expiration alerts. Full audit trail. Content moderation queue. Template library. Cross-product file backbone for six Calisto products.

4 Storage Tiers · 4 Storage Backends · 3 Workflow Surfaces · 3 Template Types · 6 Cross-Product Consumers · 17 Routes

,0,

routes across storage, workflow, and compliance

,0,

storage backends with dual-write replication

,0,

Calisto products write files through Box

,0,

quota tiers from 10 GB to custom

The Library

Folders. Versions. Search. One file browser.

BoxBrowserClient renders your entire file library with list and grid views, live search, drag-drop upload with quota preflight, and per-file version history.

Folder Browser

BoxBrowserClient renders files and folders in list or grid view. Sort by name, size, date, or category. Filter by sourceApp, scope, and folder.

Multi-File Upload

BoxUploadClient with drag-drop zone. Progress bars per file. Preflight quota check via /api/box/quota/preflight before bytes move.

Global Search

BoxSearchClient with live results across files and folders. Searchable by filename, category, and metadata.

File Detail

BoxFileDetailClient shows metadata, version history, sharing controls, and download. Presigned URLs from CDN or origin.

Version History

Every file tracks versions via /api/box/files/[id]/versions. View, download, or restore any previous version.

Trash & Recovery

BoxTrashClient lists soft-deleted files. Restore individually or empty trash permanently via /api/box/trash/empty.

File organization

Auto-classified by MIME type and filename via detectCategory()
Scoped by sourceApp: Studio, Tasks, Mail, Forms, Sign, Proposals
Folder hierarchy with unlimited nesting depth
List and grid view toggle in BoxBrowserClient
Inline editor at /box/file/[id]/edit for quick document edits
Export to Sheets via /api/box/open-in-sheets
Storage Tiers

10 GB to custom. Four tiers. Preflight enforcement.

Every upload runs through checkBoxQuota() before bytes move. Four tiers from Free (10 GB) to Enterprise (custom limits). Addon packs for accounts that need more without changing tier.

Free

10 GB
Single storage backend
Quota warning at QUOTA_WARN_PERCENT
Soft block at QUOTA_BLOCK_PERCENT with grace period

Starter

100 GB
All Free features
Preflight quota check on every upload
Usage breakdown by category and sourceApp

Pro

1 TB
All Starter features
Dual-write replication to secondary backend
Addon storage packs via addBoxAddonPacks()

Enterprise

Custom
All Pro features
BYOB (bring-your-own-bucket) backend configuration
Custom quota limits and grace percentages

Quota UI components

BoxQuotaBar

Visual progress bar showing used vs. limit. Color shifts from green to amber to red as usage climbs.

BoxQuotaPill

Compact badge for headers and sidebars. Shows storage used in human-readable format via formatBytes().

BoxOverLimitBanner

Full-width alert when shouldBlockWrites() returns true. Links to /box/settings for tier upgrade or cleanup.

BoxStorageView

Breakdown visualization by category and sourceApp. Identifies largest files via /api/box/quota/largest.

The Document Layer

Contracts. Waivers. Customs. Three dedicated surfaces.

Each workflow document type has its own route, category filters, and lifecycle tracking. Not a flat file dump.

Workflow Documents

Contracts. Waivers. Customs. Three dedicated surfaces.

Box is not a flat file dump. Contracts, waivers, and customs documents each have their own route, category filters, and lifecycle tracking.

Contracts

/box/contracts

Dedicated contracts browser. Filtered view of contract-category files with metadata and version tracking.

Waivers

/box/waivers

All waivers with signed-coverage tracking. Create from templates at /box/waivers/new. Individual detail and signature view at /box/waivers/[id].

Customs Documents

/box/customs

Customs and special documents browser. Separate route for import/export paperwork that needs distinct categorization.

Waiver lifecycle

Template-based creation at /box/waivers/new
Individual waiver detail with signature capture at /box/waivers/[id]
Coverage tracking across all waivers
CRUD API: /api/box/waivers and /api/box/waivers/[id]
Category-based filtering in sidebar
Dashboard tile for pending waivers count
Templates

Documents. Signatures. Proposals. Clone and reuse.

Three template categories with dedicated routes. Clone any template via API. Sign and Proposals templates feed directly into their respective products.

All Templates

/box/templates

Master template library. Browse, clone, and create new templates. Entity count tracked as totalTemplates in the dashboard.

Sign Templates

/box/templates/sign

Signature document templates. Pre-built layouts for documents that require e-signature. Used by the Sign product for envelope creation.

Proposal Templates

/box/templates/proposals

Proposal and estimate templates. Pre-configured layouts for client-facing quotes and project scopes.

Template API

GET /api/box/templates/list returns all templates with metadata
POST /api/box/templates/clone duplicates a template for reuse
Sidebar: Templates section with All, Document, Proposal, Sign sub-items
Dashboard tile: Templates with Copy icon in row 1
Entity count: totalTemplates tracked in product-dashboard-config
Shareable Links

Token URL. Password. TTL. View or download.

Create a share link for any file or folder. Set permission to view-only or download. Add a password. Set an expiration. The /box/s/[token] route renders the public viewer with no login required.

Shareable Links

POST /api/box/share creates a token-based link for any file or folder. Permission set to view or download. Optional password and TTL (time-to-live).

Password Protection

BoxSharedClient at /box/s/[token] prompts for a password when the share link requires one. No authentication needed for the viewer.

TTL Expiration

Share links can expire after a configurable time period. Expired tokens return a 410 Gone response.

Direct Download

GET /api/box/share/[token]/download serves the file directly. Permission must include download (not just view) for the link to allow it.

Share API details

POST /api/box/share accepts fileId or folderId
Permission levels: view (preview only) or download (preview + download)
Optional password field for protected links
Optional TTL field for auto-expiring links
GET /api/box/share/[token] resolves the shared item details
/box/s/[token] renders the public viewer with no auth required
Entity count: sharedFiles tracked in dashboard navigation
The Safety Layer

Audit every operation. Track every expiration.

Compliance tracking for certifications and licenses. Full audit trail via recordBoxAudit(). Content moderation with external webhook integration.

Compliance

Certifications. Licenses. Expiration tracking.

The /box/compliance route tracks certifications and licenses with expiry dates. Dashboard tiles surface expiring documents before they lapse. Attestation records provide an auditable compliance trail.

Certifications

Track active certifications with issue and expiry dates. Sidebar badge shows expiringSoon count from entity-counts API.

Licenses

License tracking with renewal alerts. Separate sidebar item under Compliance section in navigation config.

Expiration Tracker

Dashboard tile for documents expiring soon. AlertTriangle icon in row 0 of the product dashboard. Surfaced in entity counts as expiringSoon.

Attestations

CRUD at /api/box/attestation. Create, view, and delete attestation records tied to compliance documents.

Compliance API surface

GET /api/box/compliance for certifications and licenses with expiration dates
CRUD /api/box/attestation and /api/box/attestation/[id]
Dashboard tile: Expiring Soon with AlertTriangle icon
Sidebar: Compliance section with Dashboard, Certifications, Licenses, Expiration Tracker
Entity count: complianceDocs and expiringSoon tracked in product-dashboard-config
Audit Trail

Every file operation. Logged. Queryable.

recordBoxAudit() from box-server writes a structured entry for every upload, download, delete, share, and restore. The /box/audit route exposes the full log with filters by action, file, actor, and time range.

1

File Operation Occurs

Upload, download, delete, share, restore, version create, metadata update. Any write or access event on a box_files row.

2

recordBoxAudit() Called

box-server writes a structured audit entry with action type, fileId, actor, timestamp, and request context.

3

Audit Log Persisted

Entry stored in the audit table. Queryable by action, fileId, time range, and actor via GET /api/box/audit.

4

Dashboard Surfaced

The /box/audit route renders the full log. Filter, search, and paginate across all file operations for the account.

Audit query filters

Filter by action type (upload, download, delete, share, restore)
Filter by fileId for single-file history
Filter by actor (which team member performed the operation)
Filter by time range for incident investigation
BoxAuditAction type from box-server defines all action variants
RecordBoxAuditOptions type includes fileId, action, actor, and metadata
Moderation

Flag. Review. Resolve. External webhook.

Content moderation queue at /box/moderation. Flag files for review, approve or reject from the queue, and receive external moderation callbacks via webhook.

Flag Content

POST /api/box/moderation to flag a file for review. Any team member or automated rule can submit a flag with context.

Review Queue

GET /api/box/moderation lists all flagged items. The /box/moderation route renders the queue with file preview and flag details.

Resolve Actions

PUT /api/box/moderation/[id] to approve or reject. DELETE to remove from queue entirely. Resolution recorded with actor and timestamp.

External Webhook

POST /api/box/moderation/webhook receives callbacks from external moderation services. Integrates third-party content scanning into the queue.

,0,

entity counts tracked in the dashboard

,0,

sidebar sections with nested sub-items

,0,

quick actions: Upload Files, New Folder

,0,

dashboard tiles in row 0 key metrics

The Infrastructure

Dual-write replication. Six product consumers. One storage backbone.

box-reconciler daemon watches for new files via database event notifications and re-uploads to encrypted secondary backends. Six Calisto products route all file storage through Box.

Data Integrity

Dual-write replication. Database event notifications. Gap closure.

The box-reconciler package runs a daemon that watches for new file uploads via database event notifications. It re-uploads each file to a secondary encrypted backend. sweepOutOfSync() catches any rows with a missing arm and backfills them.

1

Primary Write Completes

uploadToBox() writes bytes to the primary storage backend. Sets primary_written_at on the box_files row.

2

Database Event Fires

The box_files insert triggers a database event notification. The reconciler daemon receives it via the same event channel.

3

handleNewFile() Executes

Tier-aware handler checks if the account qualifies for dual-write. getSecondaryAdapter() selects the encrypted storage adapter or secondary encrypted adapter based on tier.

4

Secondary Write

Bytes re-uploaded from the primary arm to the secondary backend. On success, secondary_written_at is set on the row.

5

sweepOutOfSync() Catches Gaps

Periodic sweep finds rows where primary_written_at or secondary_written_at is null. backfillOne() re-uploads the missing arm to close the gap.

Secondary storage backends

Encrypted Storage Adapter

Object storage with server-side encryption (SSEC). Keys managed per-account.

Secondary Encrypted Adapter

Secondary encrypted storage with client-side encryption via libsodium-wrappers. Bytes encrypted before upload.

MockSecondaryAdapter

In-memory mock for test suites. Validates the reconciler pipeline without network calls.

Cross-Product Backbone

Six products write to Box. One storage layer.

Studio, Tasks, Mail, Forms, Sign, and Proposals all store files through Box. Each write carries a sourceApp tag. resolveStorageBackend() routes bytes to the correct adapter per account and app. BoxPicker lets any product open a file selection modal.

Studio

Media asset storage. Studio files land in Box with sourceApp set to "studio". resolveStorageBackend() routes them to the correct adapter.

Tasks

Task photo attachments stored in Box. File IDs linked to task records. BoxPicker modal used to attach existing files.

Mail

Email attachments saved to Box. Incoming and outgoing attachment bytes flow through uploadToBox() with sourceApp "mail".

Forms

File upload fields target Box folders via boxFolderId. Submissions store attachmentFileIds referencing box_files rows.

Sign

Signed documents stored in Box. Sign templates at /box/templates/sign. Completed envelopes written back as versioned box_files.

Proposals

Proposal attachments managed through Box. Proposal templates at /box/templates/proposals. Client-facing documents served via presigned URLs.

Integration internals

BoxPicker component: file/folder picker modal embeddable in any Calisto app
sourceApp field on box_files tracks which product created each file
resolveStorageBackend() routes per (accountId, sourceApp) pair
classForSourceApp() maps each app to a storage class
registerBoxFile() ledgers externally-stored files (e.g., direct-upload to CDN)
Post to Social: sidebar link to Impreta for social media distribution
Open in Sheets: /api/box/open-in-sheets exports tabular files to Sheets
Pricing

High-Performance Ops. Zero Monthly Overhead.

Get all 15 Core modules at no monthly cost. You only pay 2% of processed revenue.

,,
Calisto Core
$0/month
+ 2% of revenue
CommitmentNone
UsersUnlimited
Products15 included
Best for: Businesses of any size. Revenue is auto-calculated from POS orders, reservations, folios, and event tickets.
,,,,,,,

Box

File storage across four backends with quota-enforced tiers.

$1/mo

Part of Work Suite

Wallet-debit

Add to Pro Shop