Workspace
Follow-ups
Tasks
Add a task
Activity Log
Add Data
Add a building
Add a tenant
Add a contact
Export
Download
Master file — sharing with your assistant
Save the file to a shared OneDrive folder. Whoever is working loads it, makes changes, saves it back. If you both load it and both save, the second save wins and the first person's work is gone. Agree who has it before either of you opens it — or move the record into HubSpot, which handles this properly.
Settings & Storage
Who is using this
Storage mode
Sign in
Signed in, the console pulls every 20 seconds and on every save. If Henry saved while you had the page open, your save is refused and you are told to pull first — nothing is silently overwritten. Locking is per-record, so you still shouldn't both edit the same contact in the same minute.
What these two values are
| Value | Secret? | What it is |
|---|---|---|
| Project URL | No | The address of your Supabase project, like https://abcdefgh.supabase.co. Public by nature. |
| Anon public key | No | A token naming your project and the unauthenticated role. Supabase intends it to sit in browser code. On its own it opens nothing — the security comes from the policies below. |
| service_role key | YES | Also on the API settings page. It bypasses every policy. Never paste it here, into a browser, or into any repo. If it ever leaks, rotate it immediately. |
| Your password | YES | This is the actual gate. One account each for you and Henry, not a shared login. |
Setting up the shared database — one time, about 25 minutes
- Create a free Supabase projectsupabase.com — new project, region near DC. Save the database password it gives you in your password manager.
- Run the script belowSQL Editor → paste → Run. This creates the table and locks it to signed-in users only.
- Create two accountsAuthentication → Users → Add user. One for you, one for Henry. Set "Auto Confirm User" so no email round-trip is needed.
- Turn off public sign-upsAuthentication → Providers → Email → disable "Allow new users to sign up". Otherwise a stranger with the key could create their own account.
- Copy the URL and anon keyProject Settings → API. Paste both above, save, then sign in.
- Send Henry the URL, the anon key, and his password separatelyPassword by text or phone, not in the same email as the other two.
create table mission_control (
id int primary key default 1,
doc jsonb not null,
version int not null default 1,
updated_by text,
updated_at timestamptz default now(),
constraint one_row check (id = 1)
);
insert into mission_control (id, doc) values (1, '{}'::jsonb);
alter table mission_control enable row level security;
create policy "signed in can read"
on mission_control for select
to authenticated using (true);
create policy "signed in can write"
on mission_control for update
to authenticated using (true) with check (true);
Changing Mission Control after it is live
Two separate things. This file is the program — the layout, the fields, the buttons, the email wording. Supabase is the database — the buildings, tenants, contacts and activity. Replacing the program never touches the database.
- Ask for the changeA new field, a different layout, another view, reworded outreach — whatever it is.
- Get a new Mission_Control.htmlSame filename, newer build number, shown in the footer.
- Replace the file in the one place it is hostedThe GitHub repo, or the shared folder. One copy, not two.
- Everyone hard-refreshesCtrl+Shift+R on Windows, Cmd+Shift+R on Mac. New layout, same records, nothing to export or re-import.
| Kind of change | Safe? | Effect on records already entered |
|---|---|---|
| Labels, colours, layout, email wording | Always | None — cosmetic only. |
| A new field to track | Yes | Blank on existing records, fills in as you work. |
| A new tab, view, filter or report | Yes | Reads the same records a different way. |
| Renaming a field internally | With a migration | A one-time step carries the values across. Automatic. |
| Removing a field | Care | Hidden, not deleted — the values stay in the record. |
Bring in new records from this build
Matching is by building name, by building + tenant, by building + contact name, and by task id. Anything already in your database is left exactly as it is, including your edits to it. Run this after every file swap.
Seed the database — day one only
What Mission Control leaves out on purpose
Ground-floor and lower-level retail — restaurants, shops, salons, postal counters — is not a Suite Matters prospect and clutters the roster. Mission Control now catches these on entry and asks before adding one. It is a prompt, not a wall: if a ground-floor tenant is genuinely an office user, say yes and it goes in.
Hosting it as real software
Put this file in a GitHub repo and turn on Pages. You and Henry get a permanent URL, always the current version, nothing to email around. Pair it with the signed-in shared database above and Mission Control is an actual two-person application rather than a file you pass back and forth. A private repo is still the tidier choice, but with sign-in required the exposure of the anon key is no longer the problem it would otherwise be.