Electronic Catalog Maker — Editor & Viewer
Short version: these apps don't collect, store, or transmit any personal information. Everything runs locally, in your browser or in the installed app, against files on your own device — with one optional exception, real-time collaboration, described below.
The Editor and Viewer read and write .ecatm catalog
files — a single portable SQLite file, opened either from your local
disk or from a URL you provide. All of the actual work (reading, editing,
searching, rendering) happens on your device via
sql.js, a SQLite build compiled to
WebAssembly. There is no backend server run by this project, no account,
and no sign-in — we have nothing to store even if we wanted to.
When you open or save a catalog, the browser's File System Access API (or a plain file picker as a fallback) asks the operating system to read or write exactly the file you selected. That file never leaves your device unless you yourself choose to share it — nothing is uploaded to us or to any third party by the apps themselves.
Grid Composer turns a folder of photos and a table (CSV/TSV, or text
pasted from a spreadsheet) into a ready-made catalog file. Everything
happens in your browser or in the installed app, on your own device:
the photos and the table you pick are read and combined locally, and the
finished .ecatm file is offered to you as an ordinary
download. Nothing is uploaded to us or to any third party, and Grid
Composer has no account, no sign-in, and no analytics of any kind.
Map Composer turns a map and the places you mark on it into a
catalog file. The points you place, their names, photos and the finished
.ecatm file stay on your own device; the file is offered to
you as an ordinary download. Nothing you create is uploaded to us. It has
no account, no sign-in, and no analytics of any kind.
Showing a map needs the network, so while the map is on screen your browser or the installed app requests map tiles (and the map style and fonts) from OpenFreeMap, as any web map does; those requests reveal the area you are looking at and your IP address to that service. If you search for an address, the text you typed is sent to OpenStreetMap's Nominatim search service, only when you press Enter or the search button. We don't see or store either.
The Editor has an optional feature, real-time collaboration, that lets more than one person edit the same catalog together and see each other's changes live. This is the one feature that does talk to a server — but never one this project operates. It only activates if you click 🤝 Start collaboration yourself, or open a link someone sent you that joins a session they started.
The server on the other end is a small, separate, open-source app
(
@ecm/collab-server) that whoever starts a session runs on
their own computer — this project doesn't host or operate one on anyone's
behalf. Starting a session sends that catalog's contents to that server,
which relays live edits between everyone connected and holds them only in
memory, only for as long as that person keeps the app running; nothing is
written to that server's disk, and closing the app (or the session ending
any other way) discards everything it was holding. Joining a session also
means picking a display name — not tied to any account or identity — so
other participants can see who's currently there.
To be reachable by a collaborator outside its own computer, that
server routes its connection through a third-party tunneling service
(Cloudflare's free "quick tunnel," via a temporary
trycloudflare.com address) — a real third party in the data
path for that session, subject to
Cloudflare's own
privacy policy, not ours. See
that
package's own documentation for the full technical detail.
There's a separate, optional tool,
@ecm/catalog-server, that shares a folder of
.ecatm files from your own computer with other devices — on
your local network by default, or over the internet if you switch it to
Internet mode. It's a separate app you run yourself; the Editor and Viewer
don't talk to it unless you point them at an address it's showing.
It remembers the folder you picked and whether you last used local-network
or Internet mode in a small file on your own computer
(~/.ecm-catalog-server/config.json) so you don't have to
reselect them next time — that file never leaves your device. The catalog
files themselves are only read, never modified, and are served as-is to
whoever has the address it shows; anyone with that address can download
them for as long as the app keeps running.
Internet mode uses the same Cloudflare "quick tunnel" mechanism as
real-time collaboration above (see that section for the technical detail
and Cloudflare's own privacy policy) to give the shared address a public
https://*.trycloudflare.com URL instead of a local-network-only
one.
Another separate, optional tool,
@ecm/store-importer, saves the products of your own
online store (Shopify, Squarespace, Square Online, Wix or Payhip) as a folder of photos plus a table that
Grid Composer can build a catalog from. It's an app you run yourself on
your own computer; its page is only reachable from that same computer.
The only requests it makes are to the store whose address you enter
(and to the servers its platform keeps that store's product list and
photos on) — to read
the store's public product list and download the photos. For Payhip,
it makes no requests for the product list at all: you save the store's
pages in your browser and pick the saved files. Everything it downloads
is saved into the folder you choose, on your own computer; nothing is
sent to us or to anyone else. It remembers the folder you picked in a
small file on your computer (~/.ecm-store-importer/config.json),
which never leaves your device. It has no account, no sign-in, and no
analytics of any kind.
If you open a catalog via a remote link (for example, one of the demo catalogs, or a link someone shared with you), your browser makes a request directly to whatever server hosts that file. That request is between you and that host — we don't see it, and it's subject to that host's own policies, not ours.
The public website (this landing page, and the Editor/Viewer when opened in an ordinary browser tab) uses GoatCounter, a privacy-friendly, cookie-free page-view counter. It doesn't use cookies, doesn't track you across sites, and only records anonymous, aggregate visit counts — never anything tied to an individual person.
Besides page views it counts a few anonymous actions, by name only: that a new catalog was started in the Editor, a picture was added, a hotspot was added, a catalog was saved, or one of the landing page's demo tabs or the 3-step wizard was opened. Only that the action happened is recorded — never the contents of a catalog, a file name, or anything you typed.
The installed desktop app (Editor or Viewer, once added to your Start menu / taskbar via the browser's install prompt or the Microsoft Store) is built to never contact this analytics service at all — it's blocked at two independent levels in the app itself, specifically so that using the installed app stays entirely private and offline-first.
Some catalogs include a "Buy" button on individual items, configured by whoever built that catalog. Clicking it takes you to a third-party store (for example Payhip) to complete a purchase there. Any payment or personal information involved is handled entirely by that store, under its own privacy policy — the Editor and Viewer apps never see, collect, or process it.
None of these are things the Editor or Viewer apps themselves run, operate, or receive data from beyond what's described above.
If this ever changes (for example, if a future feature needs to talk to a server), this page will be updated to reflect that honestly.
Questions about this policy: open an issue on GitHub.