Guide summary
Complete field-by-field reference for all 12 settings tabs, including defaults, storage location, and save behavior.
16.1 Storage Overview
| AppSettings column |
Settings tab |
| GeneralSettingsJson |
General |
| AppearanceSettingsJson |
Appearance |
| DashboardName, DashboardDynamicNaming |
Dashboard (top-level columns) |
| TimeTrackingSettingsJson |
Time tracking |
| WorkflowSettingsJson |
Workflows + Email integration |
| ExpenseSettingsJson |
Expenses & billing (expenses section) |
| BillingSettingsJson |
Expenses & billing (billing section) |
| FormSettingsJson |
No UI — reserved for future form customization |
| NavigationSettingsJson |
No UI — reserved for future nav customization |
| ProvisioningVersion |
Set automatically by provisioning |
| SampleDataSeeded |
Hidden — set when sample seed succeeds |
Currency, date format, time format, and timezone follow SharePoint site regional settings (not configurable in the app).
16.2 General
Path: Settings → General. Section: General. Saved with Save settings.
| Field |
UI label |
Type |
Default |
Description |
| appName |
App display name |
Text (required) |
Time & Billing Hub |
App title in shell, invoices, and emails |
| companyName |
Company name |
Text |
(empty) |
Company identity on invoices and emails |
| supportEmail |
Support email |
Email |
(empty) |
Shown in Settings → Help → Support |
| companyAddress |
Company address |
Textarea |
(empty) |
Multi-line address shown on invoice PDFs under company name |
| enableSampleData |
Enable sample data on setup |
Toggle |
Off |
Pre-checks Add sample data in the setup wizard |
| fiscalYearStartMonth |
(no UI) |
Number |
1 (January) |
Stored in JSON but not exposed in settings UI |
16.3 Appearance
Path: Settings → Appearance. Section: General. Saved with Save settings.
Theme mode
| Field |
UI label |
Options |
Default |
| themeMode |
Default theme |
Light, Dark, System default |
Light |
Each user can override light/dark from the top-bar theme toggle; that choice is saved on their device.
Color scheme
| Field |
UI label |
Options |
Default |
| colorScheme |
Color swatches |
Blue, Green, Purple, Teal, Indigo, Orange, Rose, Slate, Custom |
Blue |
| customBrandColor |
Custom brand color |
Color picker (when Custom) |
#2563eb |
Top navigation bar
| Field |
UI label |
Type |
Default |
Notes |
| hideAppTopBar |
Remove top bar (actions in content) |
Switch |
Off |
Always on in Microsoft Teams |
| enableTopNavColor |
Use custom top bar color |
Switch |
Off |
Shows color pickers when on |
| topBarColor |
Top bar background |
Color |
#2563eb |
When custom top bar enabled |
| topNavFontColor |
Top bar text |
Color |
#ffffff |
When custom top bar enabled |
| Field |
UI label |
Default |
| topNavCtaBackground |
Button background |
#fbbf24 |
| topNavCtaText |
Button text |
#0f172a |
| topNavCtaBorder |
Button border |
#d97706 |
Use Reset primary button colors to default to restore factory colors.
| Field |
UI label |
Type |
Default |
| enableSidebarColor |
Use custom sidebar colors |
Switch |
Off |
| sidebarColor |
Sidebar background |
Color |
#f5f5f5 |
| sidebarFontColor |
Sidebar text |
Color |
#242424 |
Layout and typography
| Field |
UI label |
Type |
Default |
Notes |
| hideSharePointPageBar |
Hide SharePoint page header and toolbar |
Switch |
Off |
Not shown in Teams |
| hideSharePointTopBar |
Hide SharePoint top toolbar (M365 bar) |
Switch |
Off |
Shows profile in app header when on |
| hideSharePointLeftNav |
Hide SharePoint left navigation |
Switch |
On |
Hides SP chrome beside app |
| fontSize |
Base font size |
Dropdown |
Medium |
Small / Medium / Large |
| roundedCorners |
Rounded corners |
Switch |
On |
Softer UI corners |
| compactMode |
Compact mode |
Switch |
Off |
Denser spacing |
16.4 Dashboard
Path: Settings → Dashboard. Section: General. Saved with Save settings.
| Field |
UI label |
Type |
Default |
Description |
| DashboardName |
Dashboard name |
Text |
Time & Billing Hub |
Custom dashboard label; blank uses app display name |
| DashboardDynamicNaming |
Dynamic dashboard naming |
Switch (Yes/No) |
Yes |
Appends client/project name when portfolio filters are active |
16.5 Time Tracking
Path: Settings → Time tracking. Section: Operations. Saved with Save settings.
| Field |
UI label |
Type |
Default |
Description |
| periodType |
Default pay period type |
Dropdown |
Weekly |
Weekly / Bi-weekly / Monthly |
| weekStartDay |
Week starts on |
Dropdown |
Monday (1) |
0=Sunday through 6=Saturday |
| minDailyHours |
Minimum daily hours |
Number |
0 |
Validation floor per day |
| maxDailyHours |
Maximum daily hours |
Number |
24 |
Validation ceiling per day |
| roundingIncrement |
Rounding increment (hours) |
Number |
0.25 |
Time entry rounding step |
| allowFutureEntries |
Allow future time entries |
Toggle |
Off |
Permit hours after today |
| requireNotes |
Require notes on time entries |
Toggle |
Off |
Note required on save |
| lockPastPeriods |
Lock past pay periods |
Toggle |
On |
Block edits to closed periods |
16.6 Workflows
Path: Settings → Workflows. Section: Operations. Saved with Save settings.
| Field |
UI label |
Type |
Default |
Description |
| approvalRequired |
Approval required |
Toggle |
On |
Timesheets and expenses need approval |
| approverSource |
Approver source |
Dropdown |
Employee manager and project approver |
Also: employee manager only, project approver only |
| rejectionReasonRequired |
Rejection reason required |
Toggle |
On |
Required when rejecting submissions |
| autoApproveDays |
Auto-approve after days (optional) |
Number |
(blank) |
Leave blank to disable; intended for Power Automate flows |
16.7 Email Integration
Path: Settings → Email integration. Stored in WorkflowSettingsJson. Saved with Save settings at the bottom of Settings.
Only the selected delivery channel is used — there is no automatic fallback between providers.
| Mode |
UI label |
Default |
App sends email? |
Setup |
| chronodatApi |
Chronodat Mail API |
Yes (default) |
Yes |
Active Chronodat subscription for tenant |
| graph |
Microsoft Graph |
— |
Yes |
Approve Mail.Send in SharePoint Admin → API access; sends from signed-in user mailbox |
| powerAutomate |
Power Automate |
— |
No |
Build your own flows; app does not send email in this mode |
Mode-specific fields
| Field |
UI label |
When shown |
Default |
Description |
| notificationMailbox |
Notification mailbox (Power Automate) |
Power Automate mode |
(empty) |
Reference mailbox for your flows; grant Send As |
| siteUrl |
SharePoint site URL (for flow setup) |
Power Automate mode |
Read-only |
Current site URL for flow connections |
Status panels show Chronodat subscription reachability, Graph Mail.Send approval status, or Power Automate setup warnings with Recheck buttons.
16.8 Email Templates
Path: Settings → Email templates. Data source: EmailTemplates SharePoint list. Self-save per template with Save template.
| UI field |
Description |
| Template |
Dropdown of EmailTemplates list items |
| Used for |
Template type label (invoice, reminder, approval, etc.) |
| Email subject |
Required; supports {VariableName} placeholders |
| Email body (HTML) |
Required; simple HTML (<p>, <strong>, <br>) |
| Available placeholders |
Chips per template type |
| Preview with sample data |
Rendered subject and HTML preview |
| Save template |
Writes subject and bodyHtml to the list item |
Seeded templates
| Title |
TemplateType |
Default subject pattern |
| Default Invoice Email |
invoice |
Invoice {InvoiceNumber} from {CompanyName} |
| Timesheet Reminder |
reminder |
Reminder: submit your timesheet for {PeriodTitle} |
| Timesheet Approved |
approval |
Timesheet approved — {PeriodTitle} |
| Timesheet Submitted |
submission |
Timesheet submitted — {PeriodTitle} |
| Timesheet Rejected |
rejection |
Timesheet rejected — {PeriodTitle} |
| PTO Request Update |
pto |
PTO request {Status} |
Placeholders by template type
| Type |
Variables |
| invoice |
ClientName, InvoiceNumber, CompanyName, Total, Currency, DueDate, Subtotal, TaxAmount |
| reminder |
EmployeeName, PeriodTitle, DueDate, CompanyName |
| approval |
EmployeeName, PeriodTitle, CompanyName |
| rejection |
EmployeeName, PeriodTitle, RejectionReason, CompanyName |
| submission |
EmployeeName, PeriodTitle, CompanyName |
| pto |
EmployeeName, Status, CompanyName |
Email templates control notification subject and body only. PDF invoice layout is configured separately under Invoice Templates (main navigation).
16.9 Expenses & Billing
Path: Settings → Expenses & billing. Section: Operations. Saved with Save settings.
Expenses section
| Field |
UI label |
Type |
Default |
Description |
| receiptThreshold |
Receipt threshold |
Number |
25 |
Amount above which receipt may be required |
| mileageRate |
Mileage rate |
Number |
0.67 |
Reimbursement rate per mile/km |
| mileageUnit |
Mileage unit |
Dropdown |
Miles |
Miles or Kilometers |
| requireReceipt |
Require receipt attachments |
Toggle |
On |
Expenses at/above threshold need receipt before submit |
| allowPersonalExpenses |
(no UI) |
Boolean |
Off |
Stored in JSON, not exposed |
| maxSubmissionDays |
(no UI) |
Number |
30 |
Stored in JSON, not exposed |
| categoriesRequireApproval |
(no UI) |
Boolean |
On |
Stored in JSON, not exposed |
Billing section
| Field |
UI label |
Type |
Default |
Description |
| invoiceNumberPrefix |
Invoice number prefix |
Text |
INV- |
Prefix for auto-generated numbers |
| invoiceNumberPadLength |
Invoice number pad length |
Number |
5 |
Zero-pad width (e.g. INV-00001) |
| defaultPaymentTermsDays |
Default payment terms (days) |
Number |
30 |
Due date offset for new invoices |
| showTaxBreakdown |
Show tax breakdown on invoices |
Toggle |
On |
Display tax lines separately |
| taxInclusive |
Tax-inclusive pricing |
Toggle |
Off |
Line amounts include tax; tax extracted for breakdown |
| defaultTaxProfileId |
Default tax profile |
Dropdown |
None |
From TaxProfiles list |
| budgetAlertThresholdPercent |
Budget alert threshold (%) |
Number |
80 |
Dashboard budget warning threshold |
| sendInvoiceOnApproval |
Send invoice on approval |
Toggle |
Off |
Auto-email PDF after generating from unbilled time |
| lastInvoiceSequence |
(no UI) |
Number |
0 |
Internal counter in billing JSON |
| retainerEnabled |
(no UI) |
Boolean |
Off |
Stored in JSON, not exposed |
16.10 Roles & Permissions
Path: Settings → Roles & Permissions. Requires administration.view. Inline save per action — no Save settings footer.
User roles tab
| Field |
Description |
| User |
SharePoint person |
| Role |
member, teamLead, manager, or admin |
| Active |
Yes/No |
| Assign role |
People picker + role dropdown |
Role permissions tab
| Field |
Description |
| Role |
Filter and column — member, teamLead, manager, admin |
| Resource |
Permission key (dashboard, billing, settings, etc.) |
| Action |
view, create, edit, delete, submit, approve, reject, export, import, manage |
| Allowed |
Toggle for admins; Yes/No display for others |
| Add rule |
Create custom permission row |
Pay periods tab
| Field |
Description |
| Period title |
Display name for the pay period |
| Start date |
Period start |
| End date |
Period end |
| Type |
Weekly, biweekly, or monthly |
| Locked |
Yes/No — locked periods block time entry edits |
Holidays tab
| Field |
Default |
Description |
| Holiday name |
— |
Display name |
| Date |
— |
Holiday date |
| Region |
All |
Region filter |
| Paid holiday |
yes/no |
Whether PTO is not required |
Audit log tab
Read-only view of the last 50 events: Entity, Action, User, When, Details.
16.11 Import & Export
Path: Settings → Import & Export. Requires import_export.view.
Export CSV
| Section |
Columns exported |
| Employees |
title, email, department, team |
| Projects |
title, code, client, status, billable, budgetHours, budgetAmount |
| Clients |
title, code, contactEmail |
| Billable rates |
title, rateType, amount, currency, effectiveDate, client, project, task, user |
Import CSV
| Section |
Required columns |
| Employees |
title, email |
| Clients |
title |
| Projects |
title, client (must match existing client) |
| Billable rates |
title, rateType, amount |
| Holidays |
title, holidayDate |
16.12 Help
Path: Settings → Help. Available to anyone with help.view. Read-only accordion sections:
- Roles (member, manager, admin capabilities)
- Timesheet approval flow
- Setting up approvers
- Getting started
- For employees, managers, and administrators
- Support — uses supportEmail from General settings when set
16.13 Setup Status
Path: Settings → Setup status. Read-only list health with Complete Setup (site owner) and Refresh.
| Element |
Description |
| Summary |
X of Y required lists missing or all ready |
| List table |
Each list: Ready / Incomplete / Missing |
| Complete Setup |
Site owner only — launches setup wizard |
| Refresh |
Reload provisioning status |
16.14 Model-Only Settings (No UI)
These JSON blobs are stored in AppSettings but have no settings UI yet:
Per-entity visibleFields, requiredFields, hiddenFields, and fieldOrder for: timesheet, timeEntry, expense, pto, project, client, employee. All default to empty arrays.
NavigationSettingsJson
Nav item visibility, sortOrder, labels, defaultPage (dashboard), and collapseSidebarByDefault. All 17 pages visible by default.
16.15 Invoice Templates vs Email Templates
| Aspect |
Email templates |
Invoice templates |
| Purpose |
Notification email subject/body |
PDF invoice layout (JSON) |
| List |
EmailTemplates |
InvoiceTemplates |
| Settings UI |
Settings → Email templates |
Main nav → Invoice Templates |
| Edit format |
HTML + {placeholders} |
JSON (layout, columns, branding) |
| Used when |
Workflow emails, invoice email with PDF |
Generating/downloading invoice PDFs |
Seeded PDF invoice templates
- Standard Invoice (default), Consulting Statement, Time & Materials, Minimal Clean
- Executive Summary, Modern Accent, Project Summary, Retainer Statement
Template JSON keys typically include: layout, columns, branding (logoUrl, primaryColor, companyName, companyAddress, footerText), showTaxBreakdown, showPaymentInstructions, paymentInstructions.