Skip to content

Change Log

All notable changes to Nucleus are documented here, grouped by date.


  • Infrastructure: Complete rebrand from DotCollective Tools to Nucleus with new domain (nucleus.fast), dedicated Cloudflare account, and fresh D1/R2 resources
  • People — Data Model: People-centric data model — employee fields (employment, contact, demographics, financial) now stored on people table instead of users table, enabling Xero sync for people without app accounts. Profile endpoint and insights queries read from people. The users table is now auth-only
  • Database: Added person_id columns to 8 employee data tables (pay_summaries, payslips, leave_balances, leave_requests, scorecards, onboarding_progress, reviews, feedback_requests) with backfill migration and indexes for people-centric data model Phase 2
  • Auth Middleware: Resolves personId from authenticated user’s linked people record on every request
  • API Routes: Implemented dual-write pattern (writing both user_id and person_id) across pays, leave, scorecards, onboarding, and performance routes
  • Database: Eliminated user_external_ids dependency — all external ID lookups (Xero, Productive) now read directly from people table columns (xero_employee_id, productive_id)
  • API Routes: Removed dual-writes to user_external_ids from Xero linking, Productive sync, and payroll sync. Admin mappings endpoint now reads/writes people table directly
  • Admin UI: External ID mappings table now shows all people (not just app users) and writes directly to people table
  • Data Scoping: Added getScopedPersonIds() using people.manager_id hierarchy. All route scoping (scorecards, onboarding, leave, performance) now uses person_id instead of user_id — managers see direct reports via the people hierarchy rather than squad membership
  • Database — Phase 5 Cleanup: Dropped user_external_ids table and deleted getScopedUserIds(). Migrated all WHERE user_id data queries to WHERE person_id across performance, onboarding, and leave routes. Removed user_id from INSERT statements in reviews, scorecards, onboarding_progress, and leave_requests. Leave approval now uses people.manager_id hierarchy for manager verification instead of squad_members. Added partial unique indexes on person_id for ON CONFLICT migration. Removed backward-compat users table write from Xero payroll sync
  • Database — Phase 6 Pay/Leave/Feedback: Migrated pay_summaries, payslips, and leave_balances reads from user_id to person_id with backfill migration. Replaced squad_members in insights (span of control, manager count, team sizes) and performance (feedback peer selection) with people.manager_id hierarchy. Scorecards squad filter uses people.squad column. People profile pay/leave lookups use person_id directly
  • Database — Phase 7 Final Cleanup: Recreated 8 data tables to drop user_id columns entirely — person_id is now the sole entity reference with NOT NULL constraint and ON DELETE CASCADE. Changed pay_summaries primary key from user_id to person_id. Dropped squad_members table — squad membership now derived from people.squad column. Admin squad management and squad filter routes rewritten to use people.squad and people.manager_id hierarchy. Removed subject_id from feedback_requests (uses subject_person_id only). Cleaned up all stale user_id indexes

  • People Profile Page: Full-page profile replacing the details drawer in directory view. Four tabs — Details (Contact, Role, Personal, System), Employment (Tenure, Pay, Leave, Financial), Documents, Activity. Navigates via /people?id=personId with back button. Permission-scoped tabs hide sensitive data from lower access levels
  • People Peek Sheet: Simplified quick-peek drawer for org chart view showing Contact and System info, Activity tab, and footer with Close / View Profile buttons
  • Xero Sync on Profiles: Xero link/sync controls on person profile System card (executive only). Smart name/email matching auto-links when a single high-confidence match is found, or shows a picker dialog for multiple candidates. Sync button triggers Xero payroll data refresh for the individual
  • Super Fund Type: Added super_fund_type column (Regulated / Self-Managed) synced from Xero SuperFunds API. Displayed in Financial card for executives
  • Insights & Reporting: Workforce analytics dashboard with single-page layout — KPI summary row (headcount, turnover, salary, age, span of control, locations) and six expandable sections (Headcount, Retention, Diversity, Compensation, Org Structure, Location) with Recharts visualisations. Date range and location filters. Lazy-loaded section data
  • Users — Employee Fields: Added employment fields (start_date, end_date, employment_status, location, gender, date_of_birth, employment_basis), contact fields (phone, mobile, personal_email, home_address), and financial fields (super_fund_name, super_fund_type, super_member_number, bank_account_name, bank_bsb, bank_account_number) to users table
  • Xero Sync — Employee Data: Extended Xero Payroll sync to populate employee demographic, contact, and financial fields from the Xero Employee API during payroll refresh. Super fund name and type resolved via separate SuperFunds endpoint
  • Performance Dashboard: Review progress stepper showing workflow stages (Open → Self Assessment → Peer Feedback → Review → Closed) when an active review exists, or cycle calendar (Q1 → Q2 → Q3 → Q4 → Annual) when no active review. Current goals card displays goals from the latest completed review. Performance trends chart shows KPI pass rate and goal completion rate across completed reviews
  • Performance Tool: Full performance review system with review cycles (quarterly/annual), KPI ratings across 5 areas (Organisation, Performance, Communication, Self Development/Management, Automation), 3-tier rating scale (Needs Urgent Work/Achieving/Exceeding), automatic pass/fail computation on completion, self-assessment (strengths/growth areas), SMART goals editor, reviewer notes and action items, salary decisions (annual, exec/head only), 360 feedback with structured peer selection, anonymized feedback summaries (min 3 responses), feedback submission form, review templates with mandatory KPI tracking, dashboard alerts card, and sidebar badge for pending feedback
  • Review Templates: Three seeded KPI templates (Agency Employee with 10 KPIs, Retail Employee with 9 KPIs, Lead/Manager with 10 KPIs) including new Automation area for AI adoption tracking
  • Performance Cycles: Cycle details drawer with Details and Activity tabs — Activity tab lists all reviews in the cycle with subject name, reviewer, and status. Closed cycles show a read-only view with an eye icon
  • Performance Tool: Review detail view now scopes section visibility by role and status — employees during self-assessment only see Self Assessment and Goals sections. Added “Request 360 Feedback” button to the review workflow card for managers to invite peers. Page title now correctly shows “Performance” in the top bar. Goals use 3-column layout for compact editing
  • Performance Tool — Review History: Previous KPI ratings shown inline as badges, previous goals with completed/missed toggles, previous 360 feedback summary, and collapsible previous reviewer notes. Annual reviews aggregate all quarterly reviews with per-KPI rating distribution and pre-filled ratings. Goal completion status tracked across cycles via new status column on review_goals
  • Performance Tool — Self Assessment: Added Discussion Topics field for employees to flag topics they’d like to cover in their review meeting. Editable during self-assessment, read-only for reviewers
  • Performance Tool — Review Workflow: Added ready_for_review status between feedback collection and completion. Flow is now: Draft → Self Assessment → Awaiting Feedback → Awaiting Review → Completed. Reviewers mark “Ready for Review” once 360 feedback is sufficient, then “Complete Review” after the meeting

  • Documents Tool: Employee document storage with R2 file storage, D1 metadata, category-based organisation (employment agreements, super forms, visas, certificates, policies), expiry tracking with visual warnings, hierarchical access scoping, inline viewing, and upload/download/delete operations
  • Documents Tab: Documents tab integrated into the People detail drawer for quick access to a person’s documents
  • Activity Summary — Slack: AI-powered daily Slack activity digests for the People tool
  • Activity Summary — Multi-source: Calendar, Productive, and GitHub activity aggregation alongside Slack
  • Person Detail Drawer: Pay history, leave balances, and automatic salary increase detection in People
  • Hierarchical Data Scoping: Restrict sensitive People tabs (pay, leave, activity) to the viewer’s organisational subtree for head-level users

  • Holidays Tool: Australian public holidays with per-state filtering and timezone settings
  • People Tool: Sync people from Google Workspace and interactive org chart with React Flow
  • Build Pipeline: Generate TanStack Router route tree before TypeScript compilation to fix build failures

  • Initial Platform: App shell, sidebar navigation, dashboard, Cloudflare Access authentication, RBAC permission system, and admin section (users, squads, permissions)
  • Onboarding Tool: Checklist-based employee onboarding with template management
  • Objectives Tool: OKR tracking with scorecard types, URL-persisted state, progress charts, and dashboard alerts
  • Scorecards Tool: Squad-based filtering and squad assignment on users
  • Announcements Tool: Rich text announcements with read tracking, category filtering, and distribution to Slack, Google Calendar, and email
  • Rich Text Editor: Tiptap-based editor with image upload to Cloudflare R2 and emoji picker
  • Calendar Tool: Google Calendar integration for viewing team events
  • Leave Management Tool: Leave requests with Xero integration, multi-step approval workflow, and post-approval sync to Xero, Productive, Google Calendar, and Slack
  • Connections Admin: Admin UI for managing third-party service connections (Xero, Productive, Google, Slack)
  • Pays Tool: Xero payroll integration for viewing pay history
  • Employment Section: Grouped Calendar, Leave, and Pays under a single Employment sidebar section
  • Template Management: Replaced static job roles with configurable onboarding/scorecard templates with locked common items
  • Profile Page: User profile with name editing, Google avatar sync, and capitalised display names
  • Dev User Picker: Local development user switcher for testing different roles and permissions
  • Multi-Theme System: 8 colour themes with dark mode support
  • Favicons & PWA: App icons, dark browser chrome, and mobile web app metadata
  • Configurable Template Permissions: Granular access control for the templates section
  • Auth Cookie Support: Read Cloudflare Access JWT from CF_Authorization cookie in addition to the header
  • Sign-In Flow: Show sign-in button with Cloudflare Access redirect on authentication failure
  • User Name Preservation: Auth middleware preserves user-set names — only sets name on first login
  • Google Profile Picture: Extract avatar from OIDC picture claim via /cdn-cgi/access/get-identity
  • Users Table Layout: Move Squad column after Access Level for better readability
  • Sidebar Organisation: Move Templates back under Administration section
  • Approval Visibility: Fix pending leave approval visibility for executive and head roles, clear cache on user switch
  • Integration Reliability: Assorted bugfixes for third-party integrations and dev tooling
  • UI Polish: Detail view refinements, neo theme support, and scorecard filtering improvements
  • Auth & Dev Docs: Updated authentication, local development, and API documentation to reflect current behaviour
  • Leave & Connections Docs: Added leave tool, leave API, connections API, and database schema documentation
  • Agent Instructions: Added GitHub issue quality standard and --assignee @me requirement to CLAUDE.md

  • Repository Created: Initial commit with project scaffolding, Cloudflare Workers configuration, and documentation site setup