New mail is sorted into Review, Action and Waiting for automatically. Someday is yours alone: nothing lands there unless you move it. Delete is a label, never Gmail's Trash.
What this mailbox is called on the board. Each Gmail account gets its own card in the Accounts column.
Next you sign in with Google and allow FocusFlow to read and organize that mailbox. On Google's screen, tick the Gmail permission box before you continue.
Assigns who's making it. Inviting them to the room / emailing the pack happens from the 🏭 handoff.
Lead times (days) — adjust for this product
Default lead times for new products, in days. Each product can override these at creation.
One link, no password. It opens every product of theirs that has reached Sample — and nothing else. Design and Tech Pack are never visible from it.
Your factory contacts — invite them into a room or email them the pack at the Tech Pack handoff.
Sets how many tasks a board allows in the Active column. Applies to everyone, including you. Leave blank for no limit.
Every board in Firestore, grouped by owner. Useful for support and cleanup.
A full snapshot of every collection in Firestore — boards, projects, tasks, invoices, products and every stage thread. Collections are discovered, not listed, so a new one can never be silently left out. Downloads to this computer as a gzipped JSON file.
This does not include images or files. Attachments live in Firebase Storage (about 10 GB) and cannot come through the browser. Back those up separately:
cd ~/Documents/FocusFlow\ Backups/tools && node backup-storage.js
Deliberately not a button. A restore overwrites real data and is rare enough that the friction is worth it. The script refuses to run without an explicit target, refuses to write into the live project unless you say so twice, and refuses a database that is not empty. It has been tested end to end — 401 documents restored into an emulator and compared field by field, with no differences.
cd ~/Documents/FocusFlow\ Backups/tools && node restore-admin.js <snapshot-dir>
That prints what it would do and writes nothing. Add --write once the plan
looks right. To rehearse against a local emulator instead of anything real, prefix it with
FIRESTORE_EMULATOR_HOST=127.0.0.1:8080.
Move old inline attachments (data URLs) into Firebase Storage. Use this if you ever see a "board has too much inline data" save error.
