Session Tracker
Overview
Session Tracker is organised into three directories, each with its own list view, profile pages, schedule, and email workflow:
- Actors Blue — Actor headshot outreach and shoot management
- Business Orange — Commercial and business photography contacts
- Creators Gold — Social media influencer and content creator collaborations
A Home dashboard gives a live overview of upcoming shoots, recent contacts, and key stats across all three directories.
Home Dashboard
The Home tab shows a unified view across all three directories, split into three panels:
Upcoming Shoots
Lists all contacts with a shoot date in the future, sorted by nearest date first. Each card shows the contact's name, shoot date and time, type (actor or creator), and current status badge. Click any card to open that contact's full profile.
The Next Shoot banner at the very top of the app always shows the single nearest upcoming shoot — click it from anywhere in the app to jump straight to that profile.
Recently Contacted
Shows the most recently added contacts across all three directories, sorted by date added. Includes a coloured pill indicating which directory the contact belongs to.
Stats Bar
Displays headline counts: total actors, total business contacts, total creators, and total shoots completed across all directories.
Navigation
The left sidebar has five main entries: Home, Actors, Business, Creators, and a Schedule sub-tab within each directory. Clicking a tab switches the main view instantly.
The app uses URL hash routing — the browser Back button works as expected and links to individual profiles can be bookmarked:
#actor/ID— opens a specific actor profile#biz/ID— opens a specific business contact profile#creator/ID— opens a specific creator profile#(empty hash) — returns to Home
Within a profile, use the ← Prev / Next → arrows to step through the currently filtered list without going back to the list view.
Actors Directory
The Actors directory tracks actor headshot outreach from first contact through to delivery of retouched images. Uses a Blue accent colour throughout.
Adding an Actor
Click + Add Actor in the toolbar. Fill in the name (required), source, initial status, gender, ethnicity, and optional notes. Date contacted is pre-filled to today. An optional photo can be attached at creation. Click Save — the new profile opens immediately.
Actor-Specific Fields
In addition to the shared profile fields, actor profiles include:
- Agent — the actor's theatrical agent or agency
- Source — where you found them (Spotlight, Instagram, Referral, etc.)
- Package — Test Shoot, Standard, Premium, or Pro
Agencies Panel
The Actors directory includes a secondary Agencies panel listing theatrical agencies you work with. Each agency record stores a name, contact person, phone, email, and notes. Agencies are managed separately from actor profiles.
Business Directory
The Business directory tracks commercial and corporate photography contacts — headshots, brand photography, events, and products. Uses an Orange accent colour.
Adding a Business Contact
Click + Add Contact in the toolbar. Fill in the name (required), company, role, and initial status. Click Save.
Companies Panel
The Business directory includes a Companies sub-panel. Companies are separate Firestore records — create a company, then link contacts to it via the Company field on their profile. The company record stores a name, website, address, and notes.
Business-Specific Fields
- Company — linked company name
- Role / Job Title — the contact's position
- Shoot Type — Headshots, Brand, Product, Events, etc.
- Location Type — Studio or On-Location (reveals an address field)
- Source — how you found them
Creators Directory
The Creators directory tracks social media influencer and content creator collaborations — test shoots, portrait sessions, and brand-style content. Uses a Gold accent colour.
Adding a Creator
Click + Add Creator in the toolbar. Fill in name (required), source, initial status, gender, ethnicity, Instagram handle, email, and session type. Click Save — the profile opens immediately.
Creator-Specific Fields
- Instagram / TikTok / YouTube — social handles, displayed as clickable links on the profile header
- Manager / Agent — the creator's management or representation
- Session Type — Test or Paid — appears as a badge next to the status on the profile
Session Type Badge
The Session Type badge (Test / Paid) appears beside the status badge at the top of every creator profile. Click it to toggle between Test and Paid — this saves immediately without needing to hit Save Changes.
Profile Fields
All three directory profiles share a common set of fields. Edit any field and click Save Changes to persist. An Unsaved changes indicator appears at the top of the profile whenever a field has been modified.
Contact Details
Shoot Details
Post-Shoot
Notes
A free-form text area at the bottom of every profile — use it for anything that doesn't fit another field.
Status Workflow
All three directories share the same eight statuses. The status badge is displayed on list cards, table rows, and at the top of each profile. To change status: click the badge on a profile to open the status picker, then select the new status — it saves immediately and logs the change automatically.
| Badge | Status | Meaning |
|---|---|---|
| No Response | No Response | Outreach sent, no reply received yet |
| Contacted | Contacted | First message sent — default when adding a new contact |
| Responded | Responded | They have replied — conversation is open |
| Interested | Interested | Expressed interest but not yet formally booked |
| Booked | Booked | Shoot confirmed with a date set |
| Shot | Shot | Shoot completed — images in editing |
| Declined | Declined | Not interested or did not proceed |
| Not Suitable | Not Suitable | Not the right fit — excluded from active pipeline |
When status changes to Booked or beyond, additional profile sections (shoot details, post-shoot links) are automatically revealed.
Tags
Each profile supports freeform Tags — small coloured pills visible on the profile and in list/card views. To add a tag, type in the tag input field and press Enter. To remove a tag, click the × on the pill. Tags are saved as part of the contact record.
Common uses: marking contacts for specific campaigns, seasons, or shoot styles (e.g. Spring 2026, Brand collab, Referred).
Activity Log
Every profile has an Activity Log at the bottom — a chronological record of all events. Entries are added automatically when:
- A profile is created
- The status changes
- The profile is archived or restored
- An email is sent via the Gmail integration
You can also add manual notes: type in the log note input and click Add (or press Enter). To edit an existing entry, click the pencil icon beside it, make your change, and click Save. Each entry shows the timestamp and the name of the user who made the change.
Photo Upload
Each profile has a circular photo area at the top-left of the profile header. Click the circle to choose an image from your device — it uploads to Firebase Storage and is linked to the profile. Photos also appear as small thumbnails in card list view.
When adding a new contact via the Add modal, you can attach a photo at creation time. You can also add or replace the photo at any time by clicking the photo area on the profile page.
Schedule View
Each directory has a dedicated Schedule tab (accessible from the left sidebar) showing two sections:
- Upcoming Shoots — all contacts with a future shoot date, sorted nearest first. Each card shows name, date, time, package, and location type.
- Past Shoots — all contacts with a past shoot date, most recent first.
Click any schedule card to open that contact's full profile. Shoot details are edited on the profile page — the schedule view is read-only.
Contacts with an overdue follow-up date (follow-up date in the past and status not yet Booked or beyond) are highlighted with a red border on table rows and cards in the list view.
Gmail Integration
Session Tracker sends emails directly via your Gmail account (contact@lukenugentportraits.com) using Google's OAuth flow — no password is stored in the app.
Connecting Gmail
- Open any contact profile and click Send Email.
- If not yet connected, a Google sign-in popup appears — log in with the contact@lukenugentportraits.com account and grant the requested permissions (send email + read signature).
- Once authorised, the Gmail indicator shows as connected. The access token is cached in browser localStorage and refreshes silently for up to one hour.
Sending an Email
- On any profile page, click Send Email.
- The email panel opens with a pre-filled template suited to the contact's current stage.
- The To, Subject, and Body fields are all editable before sending.
- Click Send — the email is dispatched via the Gmail API from contact@lukenugentportraits.com.
- A log entry is automatically added to the Activity Log confirming the email was sent.
Gmail Signature
Your Gmail signature (including images) is fetched when you first connect and cached locally. It is appended automatically to every email. If you update your signature in Gmail, disconnect and reconnect to refresh the cached version.
Disconnecting
Click the connected Gmail indicator and select Disconnect. This clears the local token — you will be prompted to reconnect the next time you send an email.
Email Templates
When you open the email panel, a template is auto-selected based on the contact's current stage. All fields are editable before sending.
| Template | When to use | Auto-fills |
|---|---|---|
| Outreach | First contact — introduces you and offers a complimentary test shoot | First name |
| Follow-up | Chasing a reply to your original outreach message | First name |
| Booking Confirmation | Confirms the shoot is booked | First name, shoot date & time, package, location |
| Image Selection | Sends the gallery link and asks them to choose favourites for retouching | First name, shoot date, gallery link, selection count |
| Final Delivery | Delivers the retouched images | First name, shoot date, retouched link |
Search & Filter
Search
The search bar in the toolbar filters the visible list in real time, matching against name, email, and notes.
Filter Dropdowns
Each directory toolbar has three filter dropdowns — click any to expand:
- Status — filter by one or more statuses. Each option shows the count for that status in the current (unfiltered) list.
- Gender — filter by Male, Female, Non-binary, or Other
- Ethnicity — filter by White, Black, Asian, Mixed, or Other
All active filters combine with AND logic — a contact must satisfy every active filter to appear. When filters are active the dropdown label updates to show what's selected, and a × Clear button appears to reset all filters at once.
Sort
The Sort dropdown changes the list order:
- Recently Added — newest contacts first (default)
- Name A–Z — alphabetical by first name
- Follow-up Date — nearest follow-up date first
Show Archived
Tick Show Archived to include archived contacts in the list. Archived contacts are shown with a muted style. Useful for reviewing or restoring old contacts.
List vs Card View
Use the view toggle in the toolbar (⊞ cards / ☰ table) to switch between card grid and table list. The table view is better for dense scanning; cards show photos and more visual detail.
Export CSV
Click Export CSV in the toolbar to download the current filtered list as a .csv file. The export includes all currently visible contacts and all main profile fields. Archived contacts are included only if Show Archived is ticked at the time of export.
Files are named automatically: actors-YYYY-MM-DD.csv, business-YYYY-MM-DD.csv, or creators-YYYY-MM-DD.csv.
Archive & Delete
Archive
Archiving hides a contact from the main list without deleting any data. Open the profile and click Archive in the profile toolbar — you are returned to the list. The contact is still in Firestore and can be retrieved by enabling Show Archived and clicking Restore on the profile.
Archive contacts who have gone cold, completed shoots you want to keep on record, or anyone you may want to re-engage later.
Delete
Click Delete on a profile to permanently remove the contact and all associated data from Firestore. A confirmation dialog is shown first. This cannot be undone. Reserve Delete for duplicates or test entries — Archive is preferred for real contacts.
Tips & Shortcuts
Keyboard Shortcuts
- Esc — close any open modal or filter dropdown
- ← / → — previous / next contact when a profile is open (steps through the current filter order)
- Enter in the tag input — adds the typed tag
- Enter in the log note input — submits the log note
General Tips
- The Next Shoot banner at the top of every page always shows the nearest upcoming shoot — click it to jump to that profile from anywhere.
- Profile URLs use hash routing — bookmark any profile URL to return to it directly.
- The Activity Log is your audit trail — every status change, email, archive, and manual note is timestamped with the user's name.
- Set a Follow-up Date when you send initial outreach, then check the Schedule tab to see who is overdue for a chase.
- Fill in Full Shoot Link and Selection Count before sending the Image Selection email — the template inserts them automatically.
- Fill in Retouched Link before sending the Final Delivery email.
- Use Tags to group contacts across a campaign or season.
- The Gmail access token lasts one hour. If a send fails with a session-expired error, click the Gmail indicator in the toolbar to reconnect.
Multi-User Sync
All data is stored in Firebase and syncs in real time. If Luke and Calli are both in the app simultaneously, list updates and profile changes appear instantly for both users — no refresh needed. The Activity Log records which user made each change.