Vaultli Full Reference Manual
The comprehensive reference behind the Getting Started guide's narrative introduction — every settings screen, field, and workflow, documented in depth for when you need the complete picture rather than the onboarding tour. Each "Under the Hood" box adds the technical mechanics for anyone who wants them; skip them freely if you don't.
1. Settings & the Category Schema Editor
Vaultli organizes your items by category (like Guitars & Basses, Watches, or Books & Magazines), and every category's data-entry form is generated from a schema you fully control. Nearly everything else in this manual sits downstream of the choices you make here.
Accessing Settings
Click Settings at the bottom of the left sidebar. Five tabs run across the top of the screen:
- Metadata Fields & Layout — visibility, width, ordering, sub-groups, and aliases for every field in a category; create, hide, or delete categories; launch the Guided Builder.
- Data Field Options — manage the reusable choice lists behind every Dropdown field (covered in full in Section 2).
- Price Lookup Sources — configure the external market-value links offered from the item form's valuation search icon.
- App Preferences — Color Scheme (Light/Dark/System), the Marketplace's default view, and per-status color customization.
- Profile & Insurance — your User Profile fields (Marketplace username, owner/insured name, address, insurance carrier and policy number) used to auto-fill reports, and your Insurance Policies list, where you keep your current declarations page and riders as PDFs. Sync and backup controls live under the separate Import / Export screen covered in Section 8.
A. Customizing an Existing Category's Layout
- Open Settings → Metadata Fields & Layout.
- In the left pane, under Collection Categories, click the category you want to customize. Categories can also be dragged to reorder them in the sidebar from this same list.
- Set field visibility: each field row in the right-hand panel has independent checkboxes for whether it shows on the Grid card view, the Table view, and — separately — whether it's ever eligible to appear on a public Marketplace listing (see Section 10 for the full privacy model that governs the last one).
- Click Save Layout when done.
A field's type, its Sub-Group assignment, and its width are set separately, one tab over — see "Field Properties & Settings" in Section 2.
Required vs. Optional Fields, and Worked Examples
Under Built-in System Fields the editor lists the fields in two groups, separated by a divider bar.
- Required by Vaultli (top, grey bar): Brand, Model, Quantity, the purchase, valuation and notes fields and similar. Reports, cost basis, sync and the Marketplace rely on them, so they have no Used box. You can still relabel some with an alias and choose where they show in each view.
- Optional (below the amber bar): Serial / Unique ID, Year, Location, Acquired As, Country, Condition and Source. Each has a Used box. Color / Finish and Weight work the same way, but their rows sit in the Custom Fields list, and only in collections whose template defines them.
What the Used box does: unticked, the field is hidden on the item form and on the Data Sheet; its Collection and Marketplace Tile / Grid / Table boxes are cleared and greyed out (your earlier choices are remembered if you tick Used again); and a note appears. Nothing stored on any item is deleted or changed, so switching a field back on brings its values straight back. Because the view boxes are cleared, a field that is not used also stops appearing on cards, in the table and on Marketplace listings.
Default for new items. A Custom Field of type Dropdown has a Default for new items pick-list under it, offering that field's own options (or None). Choose one and every new item in this collection opens with that choice already selected, which saves a click on fields where one answer is the usual one (for example, Marked to cancel starts at No). It applies only when you start a new item: existing items are never changed, and you can still pick something else on the form. Built-in fields such as Condition do not have this yet.
Form preview. While you work in the layout editor, press Alt+P (Option+P on a Mac) or click the orange Form Layout Preview button at the top of the editor to see a read-only copy of a new item form for this collection, built from what is in the editor right now, including changes you have not saved yet. It looks like the real form: the same section bars, your sub-groups and custom fields in the order you set, dropdowns with their options and your default, and built-in fields switched off with Used left out. Nothing in the preview can be edited or saved. Press Alt+P again, Esc or the × to close it and carry on editing. Dropdown option lists you have typed but not saved, and unsaved changes to sub-group conditions, show as best the form allows, so save the layout and open a real new item for the final check.
Lists: the Brand and Source choice lists belong to the collection; the other dropdown lists (Condition, Country, Location, Acquired As, ...) are shared across all collections, so editing one changes it everywhere.
Worked example: Software. It starts from the normal item layout and turns off Condition, Color / Finish and Weight, because a program has none of those. Serial becomes License Key / Serial through an alias, and Country stays because a title’s origin can matter. Purchase, value and Maintenance, Upgrades & Renewals (paid upgrades) work as for any item.
Worked example: Subscriptions. Brand and Model become Provider and Plan (aliases), the Provider list is seeded with common services, the asset, valuation and source fields are hidden, Maintenance is switched off for the collection, and new fields add the billing details (type, status, amount, cycle, dates, auto-renew, account hint). Its records are kept out of every asset total. See “Subscriptions & Software” in Section 5.
To adapt your own collection the same way: untick the optional fields you never use, relabel Brand and Model if the words do not fit, add custom fields for what is specific to the collection, and set the view boxes to the few fields you want to see at a glance.
Renaming Fields with Aliases
Under the same Layout Editor, the built-in fields Brand, Model, Year, and Serial Number each accept a Base Field Override (Alias) — a per-category display label that replaces the generic name on the form and throughout that category's views, without changing the underlying field or breaking the cross-category reporting that depends on every item sharing the same real keys underneath. The Notes field is a special case: it accepts both a custom label and a custom placeholder prompt, so a generic "Notes" box can become, say, "Provenance & Condition History" with hint text guiding what to write there.
Many built-in categories already ship with sensible aliases out of the box — Music Media's Brand becomes Artist / Band / Label; Books & Magazines' Brand, Model, Year, and Serial Number become Publisher, Book Title, Publication Year, and ISBN / Barcode; Artwork & Sculptures' Model becomes Title of Work. You can override any of these further to fit your own naming.
There are no artificial character limits on text fields, dropdown option names, or text areas — arbitrary-length entries are supported throughout, so a long provenance note or a full catalog description is never clipped.
Sub-Groups & Conditional Visibility
Fields are organized into named Sub-Groups (like "General Specifications" or "Vinyl") that structure the entry form into logical sections instead of one long list. The primary sub-group is always visible and locked; any additional sub-group can instead be made conditional on another field's value — typically a "Type" or "Format" dropdown — and, notably, a conditional sub-group can trigger on any one of several values checked from a list, not just a single exact match.
B. Creating a New Category with the Guided Builder
- Open Settings → Metadata Fields & Layout, scroll to the bottom of the left pane, and click Launch Guided Builder.
- Basics: name the category and choose an icon.
- Fields: add each custom field with a label and a type (Text, Text Area, Dropdown, Checkbox, or Auto-Numbered List).
- Sub-groups: organize the new fields into sections, adding conditional sub-groups as needed.
- Visibility: choose which fields appear by default in Grid and Table views.
- Finish: review the summary and click Finish — the category appears immediately in the sidebar and the item form.
Next to Launch Guided Builder sits an Advanced Builder button — a faster, form-based alternative to the step-by-step wizard for anyone who already knows exactly which fields and sub-groups they want and would rather skip the guided flow.
Hiding vs. deleting a category. The eye icon next to a category temporarily removes it from your menus and forms without touching the items inside it. The trash icon deletes the layout configuration only — your inventory items are never deleted and remain safe in the background — and Restore Defaults instantly brings the original layout back for any built-in category.
Under the Hood: Layout Storage & Locking
- Layout storage: custom category structures and field overrides are written to the browser's
localStorageunder the keyvaultli_custom_categoriesas a JSON array, ahead of syncing to Supabase. - Locked defaults: built-in category templates carry an
isDefault: trueflag protecting their core field keys; customizing one clones the template into your owncustomCategoriesentry rather than mutating the shared default. - Field width: stored per-field as
1/3,2/3, orfulland read by the form renderer to size each field's container.
2. Dropdown Options & Mass Update
To keep records clean, Vaultli backs repetitive fields — Brand, Condition, Source, and any custom Dropdown — with reusable choice lists managed from Settings → Data Field Options. This same tab is also where a field's type, sub-group, and width are configured. Separately, the Mass Update tool (a top-toolbar button, not a Settings tab) applies a change across many items at once.
A. Adding & Editing Fields (Field Properties & Settings)
- Open Settings → Data Field Options, and under Select Collection Type and Select Metadata Field, choose the category and field — or click Add Metadata Field to create a new one.
- Switch to the Field Properties & Settings sub-tab.
- Set the Field Label, the Field Type — Text, Dropdown, Checkbox, Expanding Text Box, or Auto-Numbered List (Continuous or Restart) — the Form Sub-group it belongs to, and its Field Width (One-Third, Two-Thirds, or Full).
Custom field suffix. Fields you've added yourself are marked "(Custom)" in selectors to distinguish them from built-in fields — purely a label, with no effect on how the data is stored.
B. Managing Choice Lists
Back on the Manage Option Choices sub-tab, for any Dropdown field:
- Add one option at a time by typing into the field at the bottom and clicking Add.
- Bulk Edit opens a plain-text editor, one option per line, for rewriting the whole list at once — saving is blocked if a line you deleted is still in use on any item, with the affected items named so you can reassign them first (via the single "X" delete button on that specific option in the regular list).
- Sort A-Z re-sorts the list alphabetically in one click.
- Manual ordering: drag-and-drop any option to reposition it, or prefix an option's text with a bracketed number —
[1],[2], and so on — to pin a specific order. The bracket tag itself is stripped everywhere else the option is displayed.
Smart Sorting
Beyond manual ordering, Vaultli recognizes a few common list shapes and sorts them by real-world meaning rather than the alphabet: condition grades (Mint, Excellent, Good, Poor) sort by rank, and speaker configurations (2x12, 4x10) sort by quantity then size. For anything else, plain alphanumeric sorting applies.
File Under & alphabetizing quirks: a few items — a band name starting with "The," or a long parenthetical subtitle — sort in an order that looks wrong under strict character-by-character alphabetization (a comma sorts differently than a space at the same position). Every item has an optional File Under field specifically to override this: set it to the string you actually want sorted on (e.g. Beatles, The), and Table/Grid sorting uses it in place of the real name whenever it's filled in.
Auto-Numbered Lists
An Auto-Numbered List field (used for tracklists, chapters, and similar sequences) has an inline Auto-Renumber control that cleans up messy manual numbering and replaces it with a clean sequence. Choose Continuous to keep counting across section breaks (e.g. across "Volume 1" and "Volume 2"), or Restart to reset the count to 1 at each new section header.
C. Mass Update
Click Mass Update in the top toolbar to edit many items in one pass instead of opening each individually.
- Filter by category, free-text search (brand, model, serial, notes), or an advanced filter (a specific field, a condition, and a value to match).
- Select items individually, or use Select All / Deselect All for everything the current filter shows. Selections are recursive — clearing the search and running a new one keeps what you already checked.
- Under Apply Update, choose the Field to Update and its New Value, then click one of:
- Update Selected — writes the new value to every selected item and syncs immediately.
- Auto-Fill Selected — runs the Autofill specification lookup (Section 3) across every selected item at once, rather than one at a time.
- Recompute File Under — regenerates the File Under sort key for every selected item, useful after a bulk brand or title correction.
- Delete Selected — permanently removes every selected item; used with the same care as any individual delete.
Under the Hood: Sort Weights & Dropdown Storage
- Manual sort weights: a bracket-prefixed option (
[2] Excellent) is parsed into a per-category, per-field weight map stored under the system field keyDROPDOWN_SORT_WEIGHTS, consulted bysortDropdownOptions()ahead of any alphabetic or heuristic fallback. - Heuristic sorting: condition-grade and speaker-configuration detection run through dedicated parsers (
isConditionArray,isSpeakerArrayinutils.js) before falling back to locale-aware alphanumeric comparison. - Bulk-edit safety check: saving a Bulk Edit list diffs the new list against the old one and blocks the save if any removed value is still referenced by an existing item, rather than silently orphaning that item's data.
3. Cataloging: Forms, Media, Scanning & Duplicates
Adding an item is a form fill accelerated wherever possible by scanning and autofill, backed by a unified photo-and-document gallery.
A. Adding an Item
- Select a category from the sidebar and click Add New Item (top toolbar).
- Use Bar/QR Code Scan or Auto-Fill Specs if you have a barcode or catalog number, or fill in General Details manually.
- Complete the Financial Portfolio section (Section 5 covers every field here in depth).
- Attach photos or documents under Description & Media.
- Click Save. (The form's header reads New Item Entry Form for a new item and Edit Item Entry Form when you reopen a saved one; the footer buttons are Delete, Duplicate, Data Sheet, Cancel, and Save.)
B. Scanning a Barcode or QR Code
- Click Bar/QR Code Scan in the item form's header (a barcode-bracket icon).
- Allow camera access when prompted. On a phone, the rear camera is targeted automatically; on a desktop with more than one camera, a camera selector appears so you can pick the right one.
- Center the code inside the on-screen targeting box, well-lit and reflection-free.
- Once decoded, the camera view closes automatically, the result populates the Serial Number / Unique ID field, and an Auto-Fill specification search runs immediately.
No barcode to scan? Type a Serial Number/SKU or Brand/Model manually and click Auto-Fill Specs in the form header to run the same lookup.
C. Autofill Intelligence
Auto-Fill Specs looks up a UPC, barcode, or catalog number against external sources (Discogs and MusicBrainz for music, for example) and returns candidate metadata for review in a checklist modal — check the values you want, then click Apply. Movies in Video Media are matched through TMDB (title, year, director, studio, genre, and top-billed cast as “Actor as Character”). Fields that already match collapse into one summary line, a filled field with a different lookup value starts unchecked, and a new dropdown value offers an Also add to dropdown list checkbox. The window's Data from… footer names the sources used. For eligible items, matching cover art or product imagery is resolved automatically, downloaded, and re-compressed to a local copy rather than hot-linked to an external CDN that could later go missing or rate-limit you.
D. The Media Pipeline
Every item has a single Photos & Documents gallery treating images and PDFs as one unified list — click to browse, drag-and-drop, or paste an image URL. Accepted files are images (JPEG, PNG, HEIC, and similar) or PDFs; other document formats like Word or Excel aren't accepted, so every attachment can be previewed directly in-app without third-party software. The first photo in the gallery becomes the item's Primary image everywhere it appears in list and grid views — reorder photos with the arrow controls to change which one holds that spot. PDFs work the same way as photos, opening in a full in-app viewer with page thumbnails on click.
Pasted image URLs are stored as links, not saved copies. Clicking to browse or dragging a file onto the gallery downloads and stores a permanent local copy on Vaultli's own servers. Pasting a URL instead just keeps the link exactly as typed — if that source ever takes the image down, renames it, or goes offline, the photo can quietly disappear from your item later. For anything you want to keep for good, save the image to your device first and add it as a file rather than a link.
Working offline caches new uploads locally until you're reconnected; a very large PDF added while offline can occasionally fail to queue. If that happens, add it again once you're back online.
E. Duplicating an Item
For multi-disc box sets, matching equipment, or sequential volumes in a series, click Duplicate at the bottom of an existing item's edit form (next to Delete). This detaches a full copy — specs, tracklists, catalog numbers, and images all carried over — as an unsaved draft, leaving the original untouched. Make your edits (say, "Disc 1" to "Disc 2") and click Save to log it as a new, separate record. A duplicate starts with no Maintenance, Upgrades & Renewals entries and no Value History of its own.
Accidental-duplicate protection. If you save a new item whose Serial Number/SKU already matches an existing item, Vaultli asks whether you meant to increase that existing item's quantity instead of creating a true second record — helpful when you're re-adding the same purchase, or logging another unit of something you already own.
F. The Data Sheet
Open a saved item and click Data Sheet at the bottom of the form (the teal button beside Duplicate). It opens a read-only, one-page view of the item: main photo and key facts (category, status, year, condition, serial) at the top, then every field that has a value, grouped and ordered as in the category layout and headed by the same colored section bands as the form (amber by default, red for Loss / Insurance, blue for Loan). Empty fields are skipped. Additional photos, attachments, attached (child) items, and notes follow.
- Include financial section — a checkbox in the Data Sheet window. Off: no costs, values, sale or trade details are shown (useful for sharing). On: a Financial band appears with indented Acquisition, Valuation, Sale / Disposition, Consignment, Insurance, Tax, and Result sub-sections, plus attached-item totals where they apply. Valuation Reminder and Last Valuation Date are not money and show either way.
- Print / Save as PDF — opens your browser's print dialog with section colors preserved; pick “Save as PDF” to keep a digital copy.
- Additional Details — any other populated field not shown elsewhere (for example a custom field) is listed here with a readable label, so nothing you've recorded is left off.
- Maintenance, Upgrades & Renewals — an indented sub-section under Financial, right after Acquisition: date, description and notes, vendor, cost, cost treatment, receipt link, and the total cost line. It always shows in full, even with the financial section off, so the sheet is a complete audit record. When maintenance is applied, Acquisition also lists Purchase total, Maintenance & upgrades (applied) and Total cost incl. maintenance.
- Value History — chart and table under Valuation once an item has two or more points.
The Data Sheet is a view only: it never changes the item. It is separate from the Report Generator (Section 7), which produces multi-item valuation, insurance, and estate documents.
Under the Hood: Scanner Engine & Attachments
- Scanner library: barcode/QR decoding runs on the third-party
html5-qrcodelibrary, configured withfacingMode: "environment"(rear camera) andadvanced: [{ focusMode: "continuous" }]for autofocus, a280×150scan box, andfps: 25. - Attachments: uploaded images and PDFs are uploaded to Supabase storage, with the resulting URL linked back into the item record's image/document array.
4. Group Records
Not everything is best tracked as one standalone item. A case of the same wine across different vintages, or the same microphone model bought in a few separate purchases, is really one logical thing made of several real acquisitions — that's what a Group Record is for.
Creating a Group Record
- Click New Group Record (next to Add New Item) instead of adding a standalone item.
- A Group Record's form skips fields that don't apply at the group level — Serial Number, Condition, an individual Purchase Date, and similar — since it exists purely to summarize what's linked beneath it.
- Each individual acquisition is still entered as its own full item, with its own quantity, purchase date, cost, and condition.
Automatic Linking
Vaultli links a Group Record to matching items automatically, in either order: if the group already exists, a new item is linked to it the moment its Brand and Model match; if you add items first and create the group afterward, saving the new Group Record sweeps up every existing unlinked item with a matching Brand and Model.
Aggregated Group Financials
A Group Record's form shows a live Grouped Items list plus Group Financials (Aggregated) — Total Acquisition Cost, Average Cost per Unit, Total Current Value, and Average Value per Unit — computed automatically across every linked child item, so the total count and blended cost basis are always current without manual math.
A Group Record can be unlinked from a specific item at any time by clearing that item's Parent Item field — the item becomes a standalone record again, and the group's totals update to match.
Under the Hood: Parent/Child Linking
- Data model: a Group Record sets
isGroupRecord: true; each child item carries aparentItemIdpointing back to it. There's no separate "group" table — a group is just an item with children pointed at it. - Field hiding:
toggleGroupRecordFields()hides a fixed list of per-unit fields (Serial Number, Condition, Purchase Date, and similar) on a Group Record's form and restretches the layout to avoid empty gaps. - Auto-link matching: on save, an unlinked item with no
parentItemIdis matched to an existing Group Record by a case-insensitive Brand + Model match; saving a Group Record itself sweeps for unlinked items matching its own Brand + Model.
5. Ownership, Financials & Trade-Ins
Every item carries an Ownership Status and a full financial history, from what you paid to what it's worth today.
Ownership Status
The real status list is more granular than a simple owned/sold toggle: Owned, Hold, For Sale, Maybe Sell, Loaned Out, and Wishlist all count toward (or are tracked ahead of) your live portfolio; Sold, Gifted, Donated, Returned, Traded-In, Stolen, and Destroyed/Scrapped are disposed states rolled into Realized Delta instead.
Each status renders as its own color-coded badge on cards, tiles, and table rows:
| Badge | Status Value(s) |
|---|---|
| Emerald green | Owned (the default) — also Loaned Out and Returned, which have no dedicated color of their own and inherit this one. |
| Golden amber | Hold |
| Coral / red-orange | For Sale (status value Sell) |
| Deep indigo | Maybe Sell (status value Maybe) |
| Bright cyan | Consigned — overrides the badge above whenever isConsignment is checked and the item hasn't reached a disposed/sold state |
| Steel slate gray | Sold (a standard sale, i.e. Sale Type is not Trade-in) |
| Amethyst purple | Trade-in (a Sold item where Sale Type is Trade-in) and Traded-In (the linked item given up toward a new purchase) |
| Vibrant pink | Gifted |
| Sky blue | Donated |
| Dark charcoal | Disposed, Stolen, and Destroyed/Scrapped — three distinct status values sharing one badge style; the label text always names the actual status |
| Royal blue | Wishlist |
Under the Hood: Status Badge Classes
Each row above maps to one CSS class applied alongside the generic .badge class: badge-status-owned, badge-status-hold, badge-status-sell, badge-status-maybe, badge-status-consigned, badge-status-sold, badge-status-trade, badge-status-gifted, badge-status-donated, badge-status-disposed, and badge-status-wishlist. Loaned Out and Returned fall through the same logic's default case and receive badge-status-owned along with everything else that isn't explicitly matched.
The Financial Portfolio Section
On the item form, under Financial Portfolio:
- Acquisition Type — Outright Purchase, Purchase with Trade, Gift Received, or Borrowed — a general categorization independent of the Trade-In checkbox below.
- Purchase Cost Each, Purchase Taxes/Fees, Purchase Shipping, Quantity, and Accessories Cost roll up automatically into Total Purchase Cost — your cost basis.
- Source / Vendor — where it came from, drawn from the same dropdown list covered in Section 2.
- This Purchase Involved a Trade-In and This item is currently on consignment — two independent checkboxes, each revealing its own sub-form (below).
Under Current Valuation: Quantity, Current Est. Value Each, and Total Est. Value, plus Last Valuation Date and a Valuation Reminder (None, 6 Months, 1–5 Years) that nudges you to re-check pricing on a schedule you choose per item.
Maintenance, Upgrades & Renewals
Between Financial Portfolio and Current Valuation, every individual item (not Group Records) has a Maintenance, Upgrades & Renewals log of the work and improvements done to it.
Not needed for a collection? Turn it off per collection: open that collection's layout editor (Settings, Edit Layout) and untick Show Maintenance, Upgrades & Renewals section, next to the default view and hidden-status settings. It's on for every collection until you change it. An item that already has entries keeps showing them (with a short note), and those costs still count.
- Click Add Entry. Choose a Type (Maintenance, Upgrade or Renewal; choosing Renewal switches the cost treatment to Do Not Apply Cost to Item, since a renewal is an ongoing expense; change it back if you want it counted). Fill in Date (defaults to today), the Cost treatment, Cost, an optional short Description of what the charge is for, Vendor and Notes.
- Choose the Cost treatment:
- Apply Full Cost to Item (default) — the cost is added to the item's cost basis.
- Do Not Apply Cost to Item — kept for reference only; never counted.
- Split Cost Ratably Across All Items — offered only when the record's Quantity is 2 or more; counts in full on the record and is shared by quantity in a partial sale.
- Optionally attach a receipt (photo or PDF) with Attach photo/PDF, or drag a file onto the section (onto an open entry to attach it there; anywhere else in the section to start a new entry with it).
- Click Add Entry (or press Enter) to stage it, then Save the item. Editing and removing entries work the same way: nothing is kept until you Save, and Cancel discards it. Saving while an entry is still open in the editor is blocked so it isn't lost.
The section's totals line reads Total Purchase Cost + Maintenance, Upgrades & Renewals = Total Cost incl. Maintenance, Upgrades & Renewals and updates as you type; reference-only costs are listed separately.
When an item has entries of two or more Types, a By type line under the totals adds up each Type (Maintenance, Upgrade, Renewal, Not specified) with the number of entries, on the item form and on the Data Sheet. It counts every entry's cost whether or not it is applied to the cost basis, so you can see, for example, what you have paid in renewals in total without a calculator.
- Where it counts: applied maintenance is part of the item's cost basis everywhere — Total Net Investment and the gain/loss tiles on the Dashboard, item cards and list view, Group Record and parent totals, the category charts, Recent Activity, the Data Sheet, and the Insurance / Estate reports (Section 7). Current Value is never changed by maintenance; an item with no Current Value set is treated as worth its full cost including maintenance.
- Receipts are stored once and also shown in Photos & Documents with a teal Receipt badge. The entry controls them: there is no remove button or Marketplace “public” toggle on a receipt card, and a receipt is never the primary photo.
- Duplicate starts with no entries, and the original's receipts are not copied.
- Partial sale / disposal of a multi-quantity record: before saving, a review lists each applied entry with Stays with the remaining N, Goes with the N sold, or Split by quantity (Split entries default to split, the rest to stay), with live totals for both records. Receipts move with their entries. Cancel stops the save.
Fields a Collection Does Not Use
Not every collection needs every built-in field. A book has no use for Weight and software has no Condition. In a collection's layout editor, under Built-in System Fields, the optional fields (Serial / Unique ID, Year, Location, Acquired As, Country, Condition, Source, and Color / Finish and Weight where the collection has them) have a Used box. Untick it and that field disappears from the item form and the Data Sheet for this collection, and its Tile, Grid, Table and Marketplace checkboxes are cleared and greyed out. Saved values are never deleted; tick the box again and the field comes back (you will need to re-tick its view boxes). Fields the system relies on, such as Brand, Model, Category, Status, Quantity and the purchase and sale fields, cannot be turned off. Software ships with Condition, Color / Finish and Weight turned off. See Section 1 for how the layout editor groups required and optional fields.
Value History
Under Current Valuation, Value History keeps a dated point each time you save a changed Current Est. Value, or the same value with a new Last Valuation Date. Same-day changes correct that day's point; ordinary edits add nothing; Mass Update of value or valuation date records points too. A chart and a table (with the change between points) appear on the form and on the Data Sheet. Remove a mistaken point with its × and Save. The newest point always reflects the item's current value and date, so to correct it, edit those fields.
Under the Hood: Maintenance Records
- Storage: each entry is a row in its own table (
vaultli_item_maintenance), linked to its item by id and protected by row-level security; this device keeps a copy in a separate local database (VaultliItemHistoryDB) so the log works offline and syncs when you're back online. Entries upload right after their item is saved. - Deletes are soft: removing an entry, or deleting its item, marks the row deleted rather than erasing it, so sync between devices never loses data. Erase All Data marks all of them deleted.
- Backups: JSON exports include
maintenanceRecords; importing a backup restores them with its items. Older backups import as before. - Turning it off (troubleshooting only):
localStorage.setItem('vaultli_item_history', 'off')and reload hides the section in that browser and returns every total to purchase cost only. Remove the setting to turn it back on.
Subscriptions & Software
Software (renamed from Music Software; existing items keep all their data) holds software you purchased and behaves like any asset: cost basis, value, Maintenance, Upgrades & Renewals for paid upgrades, and a License Key / Serial field (the common Serial / Unique ID field, relabelled). Condition, Color/Finish and Weight are hidden for it; Country is kept. Subscriptions is a separate default Collection for recurring services. It is a pure expense: asset totals, charts, the category table and every report ignore it, and the asset fields (status, acquisition, purchase, sale, loan, loss, marketplace, valuation, source, maintenance) are hidden on its form. Brand and Model are relabelled Provider and Plan, and the Provider list starts with common services; add your own. Hide the Collection with one click in Settings if you do not want it.
Fields: Subscription Type, Subscription Status (Active / Paused / Cancelled, separate from the ownership Status), Amount per Billing Cycle, Billing Cycle (Weekly / Monthly / Quarterly / Semi-annual / Annual / Every 2, 3, 5 or 10 years, for things like domain registrations), Start Date, Next Renewal Date, Auto-renew, End Date and Account / Login Hint. The dashboard Subscription Cost tile totals Active subscriptions per day, week, month, quarter or year (your choice is remembered in this browser); Paused and Cancelled are not counted. Older Software records that still have an Annual Cost keep counting until you move them (change the Collection to Subscriptions).
Which Collection for a subscription-like item?
The dividing line is ownership. If you can own it, transfer it or sell it, keep it in Software (or whichever Collection fits) and track it as a normal asset. If you can never own it, and it simply stops working when you stop paying (a rent-it plug-in, a streaming service, a membership), it is a pure expense with no asset value, and it belongs in Subscriptions, which is built for exactly that: billing cycle, next renewal, paid to date, the Subscription Cost tile, renewal reminders and the Marked to cancel review.
Some items sit in between: a plug-in you bought outright that needs a yearly update or maintenance plan, or a license that is paid for through ongoing renewals but that you still own. Keep these in Software as the owned item and record each yearly charge in Maintenance, Upgrades & Renewals with the entry Type set to Renewal. A Renewal entry starts as Do Not Apply Cost to Item, so it is kept as an ongoing expense and does not raise the item's cost basis; change the treatment on an entry if you do want it to count as an upgrade. If you pick a License Type that sounds like a subscription on the Software form, a note reminds you of this choice and suggests setting Current Value to 0 for something you cannot sell.
Renewals, price history and paid to date
- Next renewal is computed, never typed in each cycle. Billing dates count from the start date by the billing cycle (a subscription started on the 31st bills on the last day of shorter months and returns to the 31st). A Next Renewal Date you enter overrides the start-date pattern and also rolls forward, for services that bill on an odd day. Paused, Cancelled and past-End-Date subscriptions have no next renewal.
- Price history: each price period is a line (start date, amount, cycle, note). Saving a new subscription records the first line from its Start Date; changing the Amount or Billing Cycle later records a new line dated today (a second change on the same day updates that line). Lines dated in the future are never overwritten. Use the Price history… pop-up to add, edit or remove lines, including $0 lines for trials or pauses. It needs the subscription to be saved once.
- Paid to date adds up the actual billing dates from the start date through today (or the End Date), each at the price in force on that date. It is an estimate from your entries, not a bank record.
- Tiles and list: a subscription's tile shows Per Year (active subscriptions only), Paid to Date with the number of charges, and Renews (date and days away). The Subscriptions list has sortable Per Year, Paid to Date and Next Renewal columns in place of the Cost / Est Value / Net Delta columns, which do not apply to subscriptions.
- On the Data Sheet: a subscription's Data Sheet has a Billing & Renewals section: status, next renewal, how long it has been in effect, the number of billing periods (charges) so far, the last charge and the number of price changes. With Include financial section on it also shows the current price, next charge, total paid to date and projected yearly cost. Below that, a Price history list shows each price period with the date it took effect, the amount, the cycle and what changed (for example “Increase of $5.00 (was $10.00)”). Like Maintenance, Upgrades & Renewals, the price history always prints, because the sheet doubles as the subscription's record.
- Status at a glance: each subscription's tile, card and list row shows Active, Paused or Cancelled (a subscription whose End Date has passed shows Ended) instead of the ownership status. Cancelled and ended subscriptions are greyed out with a red border, so they are easy to tell from the ones still billing.
- Marked to cancel: a Yes / No / Maybe choice on each subscription (the default is No; blank counts as No). Choose Yes for one you plan to drop and Maybe for one you want to think about. Optionally add a Cancel by date and a short Why cancel? note. This is a review flag, not a status: the subscription stays Active, keeps counting in your totals and keeps its renewal reminders. Yes gets an amber border and a “Marked to cancel” badge; Maybe gets a lighter dashed border and a “Maybe cancel” badge. A banner above the list shows what cancelling the Yes subscriptions would save per month and per year, plus the extra yearly saving if the Maybes were cancelled too, with a Show only these button that lists both. Setting a subscription to Paused or Cancelled resets the choice to No. To get a list, choose Subscriptions to Review (marked to cancel) in the Report Generator (Section 7).
- Reminders: a bell badge on cards and list rows when a renewal is within 14 days, and a “Renewing soon” line in the Subscription Cost tile. In-app only; no email or push messages.
Under the Hood: Subscription Price History
- Storage: one row per price period in
vaultli_item_subscription_rates(effective_from, amount, billing_cycle, note), linked to its item by id and protected by row-level security. Like Maintenance entries, rows are cached in this device’s local history database and synced; removing a line or deleting its item marks the row deleted instead of erasing it. - Backups: JSON exports include
rateRecords; importing restores them with their items. - Math: the dashboard tile uses the form’s Amount and Billing Cycle (the current run rate); paid to date and next renewal use the price lines. Subscriptions are excluded from every asset calculation by one guard, so adding them cannot change a portfolio number.
- Turning off (troubleshooting only): the same
vaultli_item_historyswitch as Maintenance hides the price history and uses the form fields only.
A. Linking a Trade-In
Buying a new item partly funded by trading in an old one:
- Make sure the traded item is already in your inventory.
- Create the new item, enter its full Purchase Cost Each, and check This Purchase Involved a Trade-In.
- Search for and select the traded item from the list that appears.
- Enter the trade-in allowance and the date the trade occurred — a transaction summary shows gross cost, the allowance applied, and your actual net cash outlay.
- Save. The traded item's own status and trade fields update automatically and lock against further edits, so the same allowance can't accidentally be spent twice.
A linked purchase or trade-in item can't be deleted directly — Vaultli blocks it to avoid an orphaned link. Edit the purchase and uncheck "This Purchase Involved a Trade-In" first to free both records up.
B. Consignment
Checking This item is currently on consignment reveals Consigned Asking Price, Consignment Vendor, Start Date, and Contract Duration (Days) — enough to track an item you've handed off to a shop or auction house to sell on your behalf, separately from your own Marketplace listings (Section 10).
C. Estate Planning: The Bequeathed To Field
Every item's Current Valuation section includes a Bequeathed To (Estate Beneficiary / Heir) field — a simple, optional place to record who a specific item should go to as part of an estate plan or will. It has no effect on ownership status or valuation; it's captured once, alongside the item itself, and flows automatically into CSV exports and the Estate & Testamentary report covered in Section 7.
Under the Hood: Trade & Consignment Linking
- Trade-in linkage: maintained via a foreign key (
linked_item_id/tradedItemId) on both records; saving a linked purchase transactionally updates the traded item's status toTraded-In, disables its own trade fields, and setslinked_to_purchaseto prevent the allowance being reused elsewhere. - Deletion guard: the delete handler checks for a populated
linked_item_id/tradedItemIdon either side of a link and refuses the delete until it's cleared. - Consignment fields:
isConsignment,consignmentPrice,consignmentVendor,consignmentStartDate, andconsignmentDurationare plain item fields with no separate linkage — a self-contained record on the item itself.
6. Browsing, Filtering & Views
Every Collection offers the same three layouts, one click apart in the view-switcher, plus a consistent set of filtering and search tools underneath.
Three View Layouts
The app opens in Tile view unless a Collection has its own Default View (layout editor). The highlighted layout button is set from the layout actually being shown, however it was chosen.
Sorting
The Sort menu above the item list orders a Collection by Brand (A-Z or Z-A), File Under, Highest or Lowest Value, Highest or Lowest Cost, Newest or Oldest Purchase, or Status.
- Status (Owned / Active first) orders items from fully kept to gone: Owned, Loaned Out, In Transit, Hold, Maybe Sell, For Sale (or Consigned), Sold, Traded-In, Gifted, Donated, Stolen, Destroyed/Scrapped and Disposed, with Wishlist items always last since you do not own them yet. Status (Sold / Cancelled first) reverses the order of the groups. Items with the same status are listed by Brand A-Z.
- Subscriptions use the same scale: Active sorts like Owned, Paused like Hold, and Cancelled (or Ended) like Sold. Subscriptions marked to cancel come right after the plain Active ones. Because the scale is shared, the Status sort also works in All Items, where subscriptions and regular items mix.
- In the Subscriptions Collection there is no purchase price or current value, so the sorts use what a subscription costs: Highest / Lowest Value orders by yearly cost at today’s price (so a weekly, monthly and annual plan compare fairly), Highest / Lowest Cost orders by the total you have paid so far. The Newest / Oldest Purchase sorts are not offered there, since a subscription has no purchase. In the value and cost sorts, Cancelled and Ended subscriptions always stay at the bottom, whichever direction you choose.
- Each Collection keeps its own sort. If you change the sort in one Collection, the others are not affected. A sort you pick stays for as long as you keep the browser tab open (a reload keeps it); a new session starts again from the Collection’s standing default.
- Setting a standing default: in the Collection’s layout editor, choose a Default Sort Method (Status is one of the choices). It is saved with the Collection’s layout, so it applies in every session and on every device you sign in on.
Filtering & Search
- Status Tab Bar — a row of tabs across the top of the item list isolates items by ownership status (active Owned items, or a historical Sold log, for example) without needing the advanced filter panel.
- Show Hidden — a toggle for items you've deliberately tucked out of daily view without deleting them.
- Advanced filter panel (the filter icon beside search) — stacks additional conditions: category-specific dropdown values, valuation ranges, and custom field tags.
- Global Instant Search — queries as you type across both system fields and every custom field defined for that Collection, so a search by pressing plant, serial fragment, or custom tag works as reliably as a search by brand.
Reading Icon Badges
Beyond the color-coded status badge (Section 5), a handful of smaller icon badges can appear on a card or thumbnail:
| Badge | Meaning |
|---|---|
| Blue circular counter | Shares one visual style across three different meanings, disambiguated by its tooltip: a plain item quantity, a Group Record parent's attached child count (records and total units), or an "extra photos / documents" split for an item with more than one attachment. |
| Amber clock icon | The item's valuation is past due for a refresh: Last Valuation Date plus its Valuation Reminder interval (6 Months through 5 Years) has elapsed. |
| "Primary" tag | Shown in the photo manager on whichever photo is the current cover image for that item (used on cards, lists, and reports). |
| "Cloud" / "Offline" tag | Shown per-photo in the photo manager: Cloud means that file's src is already an uploaded URL; Offline means it's still a local file on this device pending its next sync. |
| Small gray spec pills | Year, Condition, Source, or a category's chosen highlight field, rendered as quick-glance tags under an item's title — not a status indicator. |
Under the Hood: Icon Badge Classes
- Attachment/quantity counter: one shared
.attachment-counter-badgeelement, re-purposed with different content and a differenttitletooltip depending on context (Group Record child count, plain quantity, or extra-photo/PDF count). - Valuation past-due:
.image-warning-badge(or an inline equivalent in list view), computed by comparinglastValuationDateplus the parsedvaluationReminderMonthsagainst the current date on every render. - Primary / storage tags:
.primary-photo-badge, and.storage-badgewith eitherbadge-storage-cloudorbadge-storage-offline— the cloud/offline check is simply whether that image's string starts withhttp. - Spec pills:
.spec-badge-micro, populated from Year/Condition/Source or a category's designated highlight field.
Under the Hood: View State & Rendering
- View modes: internally named
grid(Rich Card Grid),dense(Dense Grid), andtable(Detail Table View) — set per-category and remembered independently of the Marketplace's own default view. - Status sort:
statusOrder.js(a leaf module) assigns every item a rank on one shared scale — normal statuses 0–12, Wishlist 20, and the Subscription statuses mapped onto the same numbers (Active 0, Paused 3, Cancelled or an Active subscription past its End Date 6; Maybe / Yes to cancel 0.25 / 0.5) — and ties fall back to Brand A-Z. The per-Collection choice is kept insessionStorageundervaultli_sort_by_view(keyed by Collection or sub-group view), then the Collection’sdefaultSortMethod, then Brand A-Z. - In-memory sorting: Table view column sorting runs over the already-loaded item array client-side rather than re-querying the database, so re-sorting is instant even on a large Collection.
7. The Report Generator
Click Reports in the top toolbar to open the Collection Reports Generator — a dedicated tool for turning your inventory into a formatted document for someone outside the app, distinct from the raw CSV/JSON export in Section 8.
Report Types
The Report Layout Style selector offers four report types, each changing the header fields you fill in and the document's framing:
- Standard Inventory Statement — a general-purpose valuation report under your own name, suited to a personal portfolio summary.
- Insurance Valuation Statement — asks for the insured owner's name, insurance carrier, and policy/reference number; formats the result for a claims adjuster or a policy's scheduled-items requirement.
- Subscriptions to Review (marked to cancel) — a separate, small report for culling subscriptions, not an estate document. It lists the subscriptions you marked Yes or Maybe to cancel (Maybe rows are greyed and totalled separately), soonest deadline first (the Cancel by date, otherwise the next renewal), with cost, per-month and per-year amounts, your notes and account hints, and the total you would save. It ignores the category and status filters and is available as a printable page or a CSV. The Estate report, by contrast, lists everything.
- Estate & Testamentary Distribution Report — asks for the testator's name, the estate executor or trustee, and a will/trust reference, and lays out each item's current value alongside its Bequeathed To field (Section 5) — printed as an "Estate & Testamentary Distribution Statement" on the document itself.
When items have applied Maintenance, Upgrades & Renewals (Section 5), the PDF shows “+ $X maintenance / improvements” under each item's cost and adds Maintenance / Improvements and Total Cost incl. Maintenance total lines; the CSV gains a Maintenance / Improvements column and total. Insured and estate values are always the Current Value you set.
Building a Report
- Choose Category and Status filters (usually Owned, for an insurance valuation) — brand, model, and source filters are also available for a narrower cut.
- Toggle Include Primary Photo thumbnails, Include Category Custom Specifications, and Include Location / Storage details — all checked by default.
- Header fields (name, carrier, policy number, and similar) auto-populate from your User Profile (Section 11) and can be edited directly on the form without changing your saved profile.
- Click Export CSV for a spreadsheet of the filtered report, or Generate printable PDF to open a clean, print-styled document in a new tab — press
Ctrl+P/Cmd+Pto print or save it as a PDF to send along.
Run the Insurance Valuation Statement before you ever need to file a claim — it's far easier to keep a current one on hand than to reconstruct a full scheduled-items list from memory after a loss.
Under the Hood: Dynamic PDF Construction
- PDF rendering: clicking Generate PDF compiles the filtered report into HTML, styles it with a dedicated
@media printstylesheet (print margins, forced page breaks between rows viapage-break-inside: avoid), and opens it in a new window withwindow.open()rather than generating a binary PDF server-side. - Totals: replacement-cost totals for insurance reports, acquisition-cost totals for standard reports, and net gain/loss for estate reports are all calculated at report-build time from the filtered item set, not cached.
8. Data Portability: Import, Export & Backups
Everything under Import / Export in the left sidebar — separate from Settings — is about keeping your own copy of your data, on your own terms.
Exporting
- Export JSON — a complete, restorable backup: every item, its Maintenance, Upgrades & Renewals entries, your custom category layouts, dropdown lists, price sources, and category order, in one file. This is your real recovery backup.
- Export CSV — a flat spreadsheet of your items (no images) for Excel, Google Sheets, or Numbers.
- Backup with Files (Photos & PDFs) — copies every photo, receipt, manual and policy PDF you have stored, with a manifest that points each file back to its item or policy. The JSON backup holds your records; this holds the files they refer to, so keep both.
Backing Up Your Photos & Documents
Photos and PDFs are stored separately from your item records, so a JSON backup alone cannot bring them back. Backup with Files closes that gap.
- With a default backup folder set (Chrome or Edge), files go into a Vaultli Files folder inside it. The first run copies everything; after that, each run adds only what is new or missing, so a routine backup takes seconds. A copy with the wrong size is fetched again.
- Without a folder (or in Safari or Firefox), you get one
.zipof everything each time. Very large collections are split into numbered parts. - Nothing is ever removed. If you delete an item or photo later, the backup copy stays, and the manifest notes that it is no longer in your collection.
- File names are kept whole up to 120 characters; longer ones are shortened in the middle and always keep their ending, so a photo still ends in .jpg or .png. Computers limit the total length of a file’s folder path (Windows about 260 characters), so keep your backup folder in a short location instead of buried under many nested folders. That applies to any saved file, not just Vaultli.
- Links to other websites (for example, a cover image pulled from a lookup) are listed in the manifest but not copied. If a file cannot be fetched, the backup carries on and tells you how many were skipped.
Restoring Photos & Documents
If photos or policy PDFs ever go missing from your account, Restore Files (Settings, Import / Export, next to Backup with Files) puts them back. It works with the Vaultli Files folder in Chrome or Edge; restoring from a zip is not available yet.
- If your item records are gone too, import your JSON backup first. Restore Files repairs the files that records point to; it does not bring back records.
- Click Restore Files and choose your Vaultli Files folder.
- Vaultli checks every photo and PDF against the backup and tells you how many are missing and can be restored, how many are fine, and how many were skipped. Nothing is changed until you confirm.
- On confirming, each missing file is uploaded as a new file and its item or policy is pointed at it. Files that are fine are never touched, nothing is deleted or overwritten, and a record you have edited since is left alone.
Backup Reminders & a One-Click Default Folder
- Set Remind me to backup to a frequency — Never, Every 1/3/5 Days, Weekly, Bi-Weekly, or Monthly. If you haven't exported a JSON backup within that window, a reminder appears on launch.
- Optionally, click Set Folder next to Default Backup Location to choose a save destination once (a modern-browser feature — Chrome or Edge).
- With a folder set, the reminder's Save Backup Now button — and the regular Export JSON button — write the file straight to that folder automatically, with no save dialog. The whole backup takes under a second, which is what makes it easy to actually act on the reminder every time instead of dismissing it.
Importing & Fuzzy CSV Mapping
- Under Import Portfolio Data, choose a
.jsonbackup or a.csvspreadsheet. - A JSON backup restores directly. A CSV whose headers don't already match Vaultli's fields opens the Map CSV Columns modal, which fuzzy-matches and pre-selects the most likely column for each field — review and adjust any that guessed wrong, or choose — Skip Column — to ignore one. Required fields are marked with an asterisk.
- Click Complete Import.
Set up your categories in Vaultli (via the Guided Builder, Section 1) before importing a custom spreadsheet — matching category names ahead of time lets your CSV's cells map into the right custom fields and sub-groups, instead of falling back to a generic default category.
Rolling Snapshots: Undoing a Bad Sync
Vaultli automatically takes a hidden snapshot of your local data immediately before every cloud sync. If a sync unexpectedly wipes or overwrites something, Undo Last Sync (Restore Local Snapshot) — found alongside the Default Backup Folder setting — rewinds you to the snapshot taken just seconds earlier, independent of your manual JSON backups.
Local Storage, Safety Nets & Erase All Data
- Where items live — each device keeps your items in the browser's IndexedDB database (the cloud remains the master copy), so collection size is no longer capped by the small browser localStorage quota. The Import / Export screen still shows a storage meter (percent of the browser's small settings storage used, with a bar that turns amber and red). If Vaultli shows “Local storage is full,” your changes are still saved to the cloud; export a JSON backup as a precaution.
- Deleted offline stays deleted — if you delete an item while offline, Vaultli remembers the deletion and removes it from the cloud when you reconnect, so it doesn't reappear.
- Unsynced-changes warning — closing or reloading the tab while changes haven't reached the cloud brings up a browser warning.
- Erase All Data — requires typing a confirmation phrase before the button enables, first downloads a full JSON backup (and stops if that fails), shows how many items exist locally and in the cloud, and states plainly that cloud data is deleted too. It affects only your own records.
Deleting a Collection's Items (30-Day Grace Period)
To empty one or more collections completely, open Import / Export and use the Delete a Collection's Items tile (to the right of Wipe Portfolio Database). The collections and their layouts stay; only the items go. Sample items are never included — use Purge All Sample Items for those.
- Choose the collections. Each shows its live item count. The summary tells you exactly what will happen: the count by status (for example 97 Owned, 7 Sold, 3 Gifted), Marketplace listings that will be unlisted, accessories in other collections that will be detached, trade-in partners that will be unlinked, and how many stored photos and documents go with the items. Photos or documents that an item outside your selection also uses are kept and listed.
- Step 1: save the backup. The dialog saves a JSON file of just those items. The Delete button stays off until the backup has been saved.
- Step 2: type the confirmation exactly as shown, in capital letters (for example
DELETE 110 ITEMS). The Delete button then turns on. Optionally leave Also hide the emptied collections ticked (it is on by default) so the empty collections disappear from your lists.
The items disappear within seconds. From then on a red 30-day countdown shows on the tile and at the top of the dialog: how many items, how many days are left to restore, which backup file to import, and the date the erase happens.
- To undo it, import the backup file from the same Import / Export page. The items come back (including the history rows saved in the backup), and any collections that were hidden are shown again. Items that come back are never erased later.
- At day 30 Vaultli erases the items' stored photos and documents and removes the deleted rows from the cloud for good, automatically, with no further prompt. Restoring the backup after that still brings the item records back, but not their erased photos.
- The 30-day timer runs only on the device where you pressed Delete. It is not a cloud timer and does not run on your other devices. If that computer is switched off, the erase waits until you next open Vaultli on it, and until then the files stay and the items remain restorable.
- If something interrupts the delete (closing the tab, losing the connection), Vaultli offers to finish it the next time you open it, and the dialog has a Finish now button. A new delete cannot start until the unfinished one is done.
- Hidden collections are not deleted. Use Settings → Categories → Show All Hidden Categories to bring them back at any time.
The layout editor for each collection now also opens with a read-only Data in this collection strip showing its item count, status breakdown, Marketplace listings, stored photos and documents, and more — the same numbers the delete dialog uses.
About & Data Sources
The About & Data Sources link (bottom of the left sidebar, also reachable from the Help dialog) lists the services behind Autofill — TMDB for movies, Discogs and MusicBrainz for music, iTunes artwork, Wikipedia, and public web search — with the credit text each provider requires. After an Autofill lookup, the review window ends with a Data from… line naming the sources that actually contributed; the TMDB notice and logo appear only when TMDB was used.
Under the Hood: Backup Schema & Fuzzy Matching
- JSON backup shape:
items,customCategories,systemCategoryCustomFields,dropdownOptions,priceSources, andcategoryOrder— the same root objectexportToJSON()writes whether it's saved via a browser download or directly to a Default Backup Folder. - Backup with Files:
manifest.jsonlists each file with itsitemIdorpolicyId, its slot in the item’simagesarray, original URL, size and any error. In folder mode the manifest is cumulative and a file is skipped when its path, source and size match the earlier manifest; zip mode writes a store-only archive (no recompression) in parts of about 400 MB. - Default Backup Folder: implemented with the File System Access API (
window.showDirectoryPicker); the chosen directory handle is remembered in IndexedDB, its write permission re-checked before each save, with an automatic fallback to a normal browser download if the API is unsupported or permission is denied. - Fuzzy CSV matching: normalizes both the CSV header and the field key with
replace(/[^a-z0-9]/g, '')and pre-selects a column whenever either normalized string contains the other.
9. Cloud Sync & Multi-Device Use
Vaultli is local-first: every change saves to your device instantly and syncs to the cloud in the background, so a dropped connection never blocks data entry (see the sync-state colors in the Getting Started guide's Chapter 1). Using it on more than one device at once needs one habit in return.
The Multi-Device Safety Net. If you're scanning items on your phone while your laptop has the same page open, the laptop detects the remote change over a live connection and shows a flashing Refresh Data button in the top bar. Click it immediately — it safely pulls in the new data and prevents your laptop from later overwriting your phone's fresh scans with its own stale copy.
Built-In Sync Safeguards
- Uploads are blocked while a load is still in progress, and an empty local list can never delete cloud items.
- If a sync would remove an unusually large share of your items, Vaultli halts, keeps both copies, and asks you what to do.
- Large collections load in pages, so lists beyond 1,000 items load completely.
- Normal startup no longer rewrites your settings in the cloud, which also stops needless “Refresh Data” nudges on your other devices.
Under the Hood: Realtime Subscriptions & Row-Level Security
- Realtime subscriptions: Vaultli subscribes to Postgres change events (
supabase.channel(...).on('postgres_changes', ...)) on thevaultli_itemsandvaultli_settingstables. An incoming remote change while your own edits are pending triggers the Refresh Data prompt rather than silently merging or overwriting. - Row-Level Security: every table enforces per-user row ownership in Postgres. The actual policy on
vaultli_items:CREATE POLICY "Users can view their own gear items" ON public.vaultli_items FOR SELECT USING (auth.uid() = user_id);with matching INSERT/UPDATE/DELETE policies alongside it — so even a compromised client-side request can't read or write another user's rows. The Marketplace table (Section 10) is the one deliberate exception, with a public SELECT policy so listings are visible to everyone.
10. The Marketplace
The Global Discover Marketplace lets you showcase, sell, or trade individual items publicly while everything else about your account stays private by default.
Publishing an Item
- Open the item's edit modal and find the Marketplace & Sharing section.
- Set Listing Status to Public Showcase (display only), Public Sale, or Public Trade, and choose a Marketplace Category so buyers can browse by type.
- For Sale or Trade, an Asking Price field appears — leave it blank and the listing falls back to the item's Current Value automatically.
- Use the freeform Marketplace Notes field for posting-specific detail (condition caveats, shipping terms, trade interests) — this is separate from and unrelated to the item's private Notes field.
- Save. The item appears on the Marketplace immediately, and Copy Link generates a shareable URL for it.
Privacy Controls
Three safeguards apply specifically to what a listing shows publicly, independent of the item's own private record:
- Per-photo Public checkboxes — every photo in the gallery has its own toggle for public inclusion; only the current Primary photo is public by default.
- Automatic PDF/receipt exclusion — documents are never eligible for publication, with no override.
- Private-by-default Notes — the item's private Notes field is excluded from public listings unless a category's schema explicitly turns on its Marketplace visibility (Section 1).
Every other field's public visibility follows the same Marketplace-visibility checkbox described in Section 1 — nothing is public unless its category's Layout Editor says so.
Snapshots stay current automatically. Re-saving an already-published item refreshes its public listing immediately. Changing a category's field-visibility rules in the Layout Editor also republishes every already-public item in that category against the new rules, so a listing never keeps showing a field or photo you've since made private.
Buyer Messaging
A prospective buyer clicks Contact Seller on a public listing to send a message through a simple contact form — no account details are exchanged directly. Replies and incoming messages land in your own Inbox (the mail icon in the top toolbar).
The list of Marketplace Categories itself is managed the same way as any other dropdown list (Section 2) — from Settings, with the same single-add, Bulk Edit, and in-use protection.
Under the Hood: Publish Payload & Data Isolation
- Publish payload:
publishItemToMarketplace()filters the item's own image array down to only the URLs explicitly marked public (falling back to the Primary photo for older listings published before this control existed), strips any PDF regardless of that flag, and writes only Marketplace-visible fields to the publicvaultli_marketplacetable — your purchase costs, receipts, and private fields never leave your own account's rows. - Price handling: the asking price is sanitized (stripping currency symbols and separators) before being stored.
- Republish triggers: both a normal item save and a category schema-visibility change call the same publish function again for every affected public item, so the two paths can never drift out of sync with each other.
11. Your Profile & Account
Your profile and account settings currently live under Settings, on the tab labeled Profile & Insurance. Sync and backup controls are the separate Import / Export screen from Section 8.
Account Information
The email you're signed in as, and Sign Out, are in the account menu at the top right of the app (the Account Settings menu), not on this tab.
User Profile (Report Autofill)
These fields exist to save you from re-typing the same information every time you generate a report or publish a listing:
- Marketplace Username — required before you can publish any public listing (Section 10).
- Owner / Insured Name and your Primary Residence Address (street, unit, city, state, ZIP).
- Default Insurance Carrier and Policy Number — used on reports when no current policy is listed under Insurance Policies below.
All of these auto-populate the Report Generator's header fields (Section 7) the moment you open it, though you can always override them per-report without changing what's saved here. Your name, carrier and policy number always come from this tab, so a change here shows up the next time you open a report on any device.
Insurance Policies
Below your profile fields, Insurance Policies is a place to keep your current homeowners or renters policy and any riders, so you can see where your coverage was and where it is now.
- Add policy or rider — choose Policy (the declarations page) or Rider / endorsement, then enter the carrier, policy number, an optional label, the effective and expiry dates, and notes. A rider can be linked to the policy it was added to.
- Attach a PDF — add your declarations page or the rider itself (up to 15 MB). Policy PDFs are stored privately for your account only. They open through a temporary link when you click Open PDF, and they are never part of a Marketplace listing.
- Current and history — the newest policy in force is marked Current. Older policies show as Expired or Previous, and one that has not started yet shows as Upcoming. Add the new policy at renewal rather than overwriting the old one, and the older one stays as your history.
- Coverage figures — enter the dwelling limit, personal property limit, deductible and annual premium, and add any other coverages (other structures, loss of use, liability, and so on, each with its limit). Scheduled items can be a single item, matched by name, or a whole group covered together, for example Group: Guitars & Basses with one aggregate limit that is backed up by your item list. As you pick the item or group and type the limit, the row shows its current value and your headroom (or how far over the limit it is). You type these in; Vaultli does not read them from the PDF.
- Coverage check — a read-only panel under the list compares your current policy with your collection: your owned items' total value against the personal property limit, any scheduled item valued above its limit, and your highest-value items that do not match a scheduled item (matched by the words in the name; items worth $2,500 or more are checked). It also flags an expiring or expired policy. Under the panel you choose which collections count: physical collections are included, while Software starts unticked and Subscriptions are never included, because they cannot be stolen or damaged. Untick anything else that should not count. It is an estimate from your own entries, not advice, and your personal property limit also has to cover everything else in your home.
- Expiry reminder — when the current policy expires within 30 days (or has expired and no renewal is listed), Vaultli shows a reminder once a day on each device. Nothing is emailed.
- Reports — the carrier and policy number of the current policy fill in the Insurance report's header automatically.
- Edit or Remove — Remove asks for confirmation and also deletes the attached PDF. This cannot be undone.
Vaultli does not read the figures out of your PDF, and the JSON backup includes your policy entries but not the PDFs. Backup with Files (Settings, Import / Export) copies the PDFs too.
Under the Hood: Profile Storage
- Profile data is stored in your account's settings record and synced to the
vaultli_settingstable, under the same Row-Level Security policy described in Section 9 — no one else can read it.