Notifications
No notifications
Account Hub
{{ clients.length }}
Overdue
{{ getTaskCountByUrgency('Overdue') }}
Urgent Pipeline
{{ getTaskCountByUrgency('Urgent') }}
{{ currentUserRole === 'Admin' ? 'Collected YTD' : 'Collected WTD' }}
£{{ currentUserRole === 'Admin' ? calculatePaidInvoicesYTD() : calculatePaidInvoicesWTD() }}
Pipeline Eff.
{{ calculatePipelineEfficiency() }}%
Live Team Attendance
Live Real-Time| Staff | Current Status | Status Duration | Total Productive |
|---|---|---|---|
| {{ getStaffName(shift.userId) }} | {{ shift.status }} | {{ shift.durationDisplay }} | {{ formatSecondsToTime(shift.totalWorkSeconds || 0) }} |
| No active staff shifts found right now. | |||
Attendance & Productivity
Live Team Performance Metrics
Live Team Capacity
{{ metric.name }}
{{ metric.totalProdHours }}H Prod.
Cumulative Productive Hours (Uptick)
Time Analysis (Session Duration)
Financial Health (Inv Count)
Urgency Analysis (Deadlines)
Workflow Capacity (Total Active)
Staff Productivity (Breakdown)
Recent Task Operations
{{ formatDate(log.createdAt) }}
{{ log.action }}
{{ log.context }}
Op: {{ log.staffName }}
Staff Activity Feed
{{ formatDate(log.createdAt) }}
{{ log.action }}
{{ log.context }}
Staff: {{ log.staffName }}
Compliance Pipeline
Recurring statutory obligations only. Ad-hoc work lives in , inbound work in .
Overdue
{{ countByUrgency(compliancePipeline, 'Overdue') }}
Urgent (<= 2d)
{{ countByUrgency(compliancePipeline, 'Urgent') }}
Due (3-15d)
{{ countByUrgency(compliancePipeline, 'Pending') }}
Upcoming (16d+)
{{ countByUrgency(compliancePipeline, 'Upcoming') }}
Pipeline Clear
No compliance tasks match the current filters.
| Client | Service / Period | Deadline | Internal | Status | Personnel | Action |
|---|---|---|---|---|---|---|
|
{{ getTaskDisplayName(task) }}
Handler: {{ getStaffName(getClient(task.clientId).accountHandlerId) }}
|
{{ task.serviceType }}
{{ periodKeyLabel(task.periodKey) }}
|
{{ formatDeadline(task.filingDeadline) }}
{{ deadlineDistanceLabel(task) }}
|
{{ formatDeadline(task.internalDeadline) }} | {{ task.status }} {{ getTaskPriority(task) }} | {{ getStaffName(task.assigneeId) }} |
Admin Tasks
Internal one-off work. These never recur and are completed permanently.
Overdue
{{ countByUrgency(adminTasks, 'Overdue') }}
Urgent
{{ countByUrgency(adminTasks, 'Urgent') }}
Unassigned
{{ adminTasks.filter(t => !t.assigneeId).length }}
Total Open
{{ adminTasks.length }}
{{ task.serviceType }}
{{ task.description }}
{{ formatDeadline(task.filingDeadline) }}
{{ deadlineDistanceLabel(task) }}
Drop here
No Admin Tasks
Nothing matches the current filters.
{{ task.serviceType }}
{{ getTaskPriority(task) }}{{ getTaskDisplayName(task) }} · {{ task.description }}
{{ formatDeadline(task.filingDeadline) }}
{{ deadlineDistanceLabel(task) }}
| Client | Task | Due | Priority | Status | Assigned | Action |
|---|---|---|---|---|---|---|
{{ getTaskDisplayName(task) }} |
{{ task.serviceType }}
{{ task.description }}
|
{{ formatDeadline(task.filingDeadline) }}
{{ deadlineDistanceLabel(task) }}
|
{{ getTaskPriority(task) }} | {{ task.status }} | {{ task.assigneeId ? getStaffName(task.assigneeId) : 'Unassigned' }} |
|
Client Requests
Inbound submissions from the public request form. Match each one to an account, then turn it into work.
Share this with clients
{{ publicRequestUrl }}
New Submissions
{{ req.subject }}
{{ req.name }} · {{ req.company }}
{{ req.detail }}
In Progress
{{ task.serviceType }}
{{ getTaskDisplayName(task) }}
Inbox Clear
Nothing waiting. New submissions from the request form land here.
Recurring Schedules
Each schedule generates one Compliance Pipeline task per period. Filed periods are kept permanently.
No Schedules
Schedules are created automatically when you assign a service to a client, or add one manually.
| Client | Service | Frequency | Next Due | Filed | State | Action |
|---|---|---|---|---|---|---|
{{ getClientName(sch.clientId) }} |
{{ sch.serviceType }} | {{ FREQUENCY_LABELS[sch.frequency] || sch.frequency }} | {{ formatJsDate(scheduleNextDue(sch)) }} | {{ scheduleFiledCount(sch) }} | {{ sch.active === false ? 'Paused' : 'Active' }} |
|
Completed Tasks Archive
Review filed and completed assignments per individual.
| Client Account | Task / Service | Type | Date Completed | Action |
|---|---|---|---|---|
| {{ task.clientName }} | {{ task.taskName }} | {{ task.type }} | {{ formatDate(task.dateCompleted) }} | Archived |
| Please select a staff member above to view history. | ||||
| No completed tasks found for this timeframe. |
Time Recorder
Professional Time Tracking
Shift Totals
Activity Log
| Time | Event |
|---|---|
| {{ formatDateOnlyTime(log.timestamp) }} | {{ log.type }} |
Team Workload Distribution
Active Task Allocation Per Staff Member
{{ data.member.name }}
{{ data.member.role }}
{{ data.activeTasks.length }}
Active Tasks
Pending
{{ data.stats.pending }}
In Progress
{{ data.stats.inProgress }}
Auditing
{{ data.stats.auditing }}
Filed
{{ data.stats.filed }}
{{ getTaskDisplayName(task) }}
{{ task.serviceType }}
Handler Oversight
Staff Schedule Monitor
Detailed Time Estimation & Completion Status
{{ member.name }}
{{ member.role }}
Active Assignments
{{ getMemberTasks(member.id).length }}
| Task Details | Schedule (Est. vs Actual) | Percentage Completion | Efficiency |
|---|---|---|---|
|
{{ getTaskDisplayName(task) }}
{{ task.serviceType }}
|
Target {{ task.estimatedHours || 0 }}h Actual {{ formatSecondsToHours(task.timeSpent) }} |
{{ task.completionPercentage || 0 }}% Done
|
No Estimate Set
On Track
Over Time
|
My Assignments
Focus Mode • {{ myPersonalTasks.length }} Active Tasks
| Client | Service | Deadline | Status | Action |
|---|---|---|---|---|
{{ getTaskDisplayName(task) }} Oversight (Assigned to: {{ getStaffName(task.assigneeId) }}) | {{ task.serviceType }} | {{ formatDate(task.filingDeadline) }} | {{ task.status }} | |
| No tasks currently assigned to you. | ||||
Monthly Target
Awaiting funds (Total)
£{{ calculatePendingInvoices() }}
Awaiting funds (WTD)
£{{ calculatePendingInvoicesWTD() }}
Overdue (Arrears)
£{{ calculateOverdueInvoices() }}
Collected Revenue (YTD)
£{{ calculatePaidInvoicesYTD() }}
Collected Revenue (WTD)
£{{ calculatePaidInvoicesWTD() }}
Weekly Target
| Serial | Account Profile | Net Value | Status | Control |
|---|---|---|---|---|
| {{ inv.invoiceNumber || inv.id }} |
{{ inv.clientName }}
Due: {{ formatDate(inv.date) }} (Overdue)
|
£{{ (parseFloat(inv.amount) || 0).toFixed(2) }} | {{ inv.status || 'Draft' }} | |
| No invoices found matching current filters. | ||||
Staff Shift Management
Admin Control Panel
{{ staff.name }}
{{ staff.role }}
Current Status Duration
Practice Reporting
Live figures across the whole practice. Derived from data already loaded — reading this page costs nothing.
Open Work
{{ reportKpis.open }}
Overdue
{{ reportKpis.overdue }}
Unassigned
{{ reportKpis.unassigned }}
Filed / {{ reportPeriodLabel }}
{{ reportKpis.filed }}
Avg Turnaround
{{ reportNum(reportKpis.avgTurnaround, 'd') }}
Filed On Time
{{ reportNum(reportKpis.onTime, '%') }}
Completed-work figures cover the most recent 150 filings only — that cap is deliberate, and keeps your Firestore read costs down. {{ reportCoverage.undated }} filed task(s) predate completion timestamps, so they are excluded from turnaround and on-time figures.
Throughput
Tasks filed per month
Overdue Ageing
How long missed deadlines have been sitting
Open Work by Type
Staff Scorecard
Open load now, plus everything filed in the selected window
| Staff | Open | Overdue | Filed | Avg Days | On Time |
|---|---|---|---|---|---|
|
{{ staffInitials(r.id) }}
{{ r.name }}
|
{{ r.open }} | {{ r.overdue }} | {{ r.filed }} | {{ reportNum(r.avgTurnaround, 'd') }} | {{ reportNum(r.onTime, '%') }} |
| No activity in this window. | |||||
By Service Line
Sorted by overdue exposure
| Service | Open | Overdue | Filed | Avg |
|---|---|---|---|---|
| {{ r.name }} | {{ r.open }} | {{ r.overdue }} | {{ r.filed }} | {{ reportNum(r.avgTurnaround, 'd') }} |
| Nothing to report. | ||||
Client Exposure
Top 10 accounts by outstanding work
| Account | Open | Overdue |
|---|---|---|
| {{ r.name }} | {{ r.open }} | {{ r.overdue }} |
| No open work. | ||
Raw Data Exports
For spreadsheets, pivot tables and third-party systems
Personnel Directory
Manage team access and system roles.
| Personnel | System Access | Enrolled Since | Control |
|---|---|---|---|
|
{{ user.name }}
{{ user.email }}
|
{{ user.role }} | {{ formatDate(user.createdAt) }} |
Audit Trail
System-wide operations and tracking.
| Personnel | Operation | Context | Timestamp |
|---|---|---|---|
| {{ log.staffName }} | {{ log.action }} | {{ log.context }} | {{ formatDate(log.createdAt) }} |
| No activity logs found for this selection. | |||
Messages
{{ availableChats.find(c => c.id === activeChatId)?.name || 'Select a chat' }}
Secure End-to-End Connection
System Notifications
Enter your Google Chat Incoming Webhook URL here.
System Confirmation
{{ notification }}
Please wait
{{ busyMessage || 'Saving changes...' }}
Start Team Meeting
Enter your Google Meet link below to notify all active staff.
Shift Ended
Your session has been logged. What would you like to do next?
Shift Check-In
Please confirm your attendance to access the portal workspace.
Current Time
{{ new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}) }}
{{ isEditingClient ? 'Modify Profile' : 'New Client Registration' }}
Basic Info & Management
Tax & Login Details
HMRC Services Config
Completed Work History
| Work | Type | Filed |
|---|---|---|
| {{ item.serviceType }} | {{ TASK_KIND_META[item.kind]?.label || 'Task' }} | {{ formatDeadline(item.date) }} |
| No completed work recorded for this account yet. | ||
{{ getClient(selectedTask.clientId)?.name }}
{{ getClient(selectedTask.clientId)?.company || 'Private Account' }}
Account Handler
{{ getStaffName(getClient(selectedTask.clientId).accountHandlerId) }}
Tracked Time
Completed task is read-only
Compliance Identity
UTR Reference
{{ getClient(selectedTask.clientId)?.utr || '—' }}
NI Number
{{ getClient(selectedTask.clientId)?.nino || '—' }}
Gateway Access
User ID
{{ getClient(selectedTask.clientId)?.gatewayId || 'Pending' }}
Client Uploads
{{ selectedTask.serviceType }}
Read-only for completed tasks
Priority can raise a task's urgency but never hides an approaching deadline.
{{ selectedTask.description }}
Internal Notes
{{ note.text }}
💡 Tip: Use @staffname to mention team members and notify them
Create Ad-hoc Task
No matching clients or companies found.
{{ isEditingInvoice ? 'Modify Billing' : 'Record Transaction' }}
{{ selectedInvoiceClient.name }}
{{ selectedInvoiceClient.company || 'Private Client' }}
Start typing to find a client or company.
Register Personnel
{{ scheduleForm.id ? 'Edit' : 'New' }} Recurring Schedule
Generates one pipeline task per period
Every following period is calculated from this date.
Access Control
{{ editingPermissionsUser?.name }}
Financial Viewer
Can view WTD Pending and WTD Revenue stats only.
Billing Manager
Full Billing Access. Can edit Monthly/Weekly Targets.
Shift Supervisor
View Live Dashboard, Manage Staff Shifts, Call Meetings.
Compliance Officer
Access to full Audit Trail and System Logs.
Account Manager
Can Delete Clients and Tasks (Dangerous).