Session Tracker

A private CRM for Luke Nugent Portraits — track actor headshot outreach, business photography contacts, and social media creator collaborations. All data syncs in real time between Luke and Calli via Firebase.

Overview

Session Tracker is organised into three directories, each with its own list view, profile pages, schedule, and email workflow:

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.

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:

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:

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

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

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

Name
Full name — used in email templates
Email
Primary email address for Gmail sending
Gender
Male, Female, Non-binary, Other
Ethnicity
White, Black, Asian, Mixed, Other
Source
How you found this person
Date Contacted
Date of first outreach

Shoot Details

Follow-up Date
Chase reminder — shown on schedule
Shoot Date
Confirmed shoot date
Start / End Time
Shoot time window
Package
Test, Standard, Premium, or Pro
Location Type
Studio or On-Location
Location Address
Shown when On-Location is selected
Requirements
Special notes for the shoot day

Post-Shoot

Full Shoot Link
Dropbox / cloud link to all images
Selection Count
Number of images to retouch
Retouched Link
Dropbox / cloud link to final retouched images
BTS Link
Behind-the-scenes content link
Review Received
Checkbox — marks that a review has been received
Review Text
Testimonial quote or review copy

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.

Tip: Status changes are automatically logged in the Activity Log with a timestamp and the user who made the change — no manual note needed.

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:

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:

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

  1. Open any contact profile and click Send Email.
  2. 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).
  3. 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

  1. On any profile page, click Send Email.
  2. The email panel opens with a pre-filled template suited to the contact's current stage.
  3. The To, Subject, and Body fields are all editable before sending.
  4. Click Send — the email is dispatched via the Gmail API from contact@lukenugentportraits.com.
  5. 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.

TemplateWhen to useAuto-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
Tip: Fill in the Full Shoot Link and Selection Count fields on the profile before sending Image Selection — and the Retouched Link before sending Final Delivery — so the templates insert them automatically.

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:

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:

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

General Tips

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.