[{"data":1,"prerenderedAt":1210},["ShallowReactive",2],{"announcements":3,"blog-/blog/v1-0-10-launch":64,"blog-related-/blog/v1-0-10-launch":556},[4,28,46],{"id":5,"title":6,"active":7,"body":8,"description":14,"extension":19,"link":20,"linkText":21,"meta":22,"navigation":7,"order":23,"path":24,"seo":25,"stem":26,"__hash__":27},"announcements/announcements/004.esignature-platform.md","New: DocuSign-style e-signatures — drag & drop fields, sequential signing, audit trails",true,{"type":9,"value":10,"toc":15},"minimark",[11],[12,13,14],"p",{},"DocuSign-style e-signatures are here — drag & drop field placement, sequential signing, typed or drawn signatures, and a full audit trail on every document.",{"title":16,"searchDepth":17,"depth":17,"links":18},"",2,[],"md","/documents","Learn more",{},4,"/announcements/esignature-platform",{"title":6,"description":14},"announcements/004.esignature-platform","IgF7l6rZR36mwZOUEEoZrAf-fRM836ibz4ZWWde7xYg",{"id":29,"title":30,"active":7,"body":31,"description":35,"extension":19,"link":38,"linkText":39,"meta":40,"navigation":7,"order":41,"path":42,"seo":43,"stem":44,"__hash__":45},"announcements/announcements/006.v1-0-10-release.md","v1.0.10 is live — Team Matrix view, pay-period lockdown, project budgets, unified export, Settings search",{"type":9,"value":32,"toc":36},[33],[12,34,35],{},"v1.0.10 is live. Team Matrix view on schedules and timesheets, pay-period lockdown for payroll compliance, project money budgets, clock rounding, time-entry tags, unified Excel/PDF/CSV export, a Settings search bar, redesigned approvals and reports dashboards, and a cross-stack performance pass.",{"title":16,"searchDepth":17,"depth":17,"links":37},[],"https://changelog.bookyourpto.com/","See what's new",{},6,"/announcements/v1-0-10-release",{"title":30,"description":35},"announcements/006.v1-0-10-release","rS1mAAQN9UcWyqiWPFaAnIFKtL28_vzAsv7v74H1A94",{"id":47,"title":48,"active":7,"body":49,"description":53,"extension":19,"link":56,"linkText":57,"meta":58,"navigation":7,"order":59,"path":60,"seo":61,"stem":62,"__hash__":63},"announcements/announcements/007.geofencing.md","New · Geofencing — lock clock-ins to the jobsite with circle + polygon fences",{"type":9,"value":50,"toc":54},[51],[12,52,53],{},"Geofencing is live. Draw a circle around the office or a polygon around a construction site, assign it to a department / user / project, and only let employees clock in when they're actually there. Strict, lenient, or audit-only enforcement. Google Maps and OpenStreetMap supported. Live status banner + nearest-fence guidance for employees, compliance dashboard + CSV export for admins.",{"title":16,"searchDepth":17,"depth":17,"links":55},[],"/geofencing","Explore Geofencing",{},7,"/announcements/geofencing",{"title":48,"description":53},"announcements/007.geofencing","pmly1BnJlmTVH7j-vc0LTlY1UrifqsLLd3hRmYtVFPo",{"id":65,"title":66,"author":67,"body":68,"date":541,"description":542,"extension":19,"image":543,"meta":544,"navigation":7,"path":545,"readTime":546,"seo":547,"stem":548,"tags":549,"__hash__":555},"blog/blog/v1-0-10-launch.md","What's New in v1.0.10: Team Matrix, Pay-Period Lockdown, Project Budgets, and a Faster App","AnHourTec Team",{"type":9,"value":69,"toc":518},[70,75,83,102,105,109,112,166,176,180,185,188,192,195,199,202,206,209,213,216,220,223,227,230,234,243,256,259,263,268,295,299,318,321,325,328,352,370,374,388,392,401,405,408,411,415,418,495,498,502,515],[71,72,74],"h2",{"id":73},"v1010-is-our-biggest-release-since-launch","v1.0.10 Is Our Biggest Release Since Launch",[12,76,77,78,82],{},"This release touches almost every corner of the product. Time tracking grew up: pay-period lockdown, configurable rounding, free-form tags, money budgets on projects, bulk edit, and cost aggregation on reports. Schedules and timesheets got a brand-new ",[79,80,81],"strong",{},"Team Matrix view"," — the enterprise \"employee × day\" grid that every serious workforce tool eventually builds. Approvals and Reports were redesigned from the ground up. Data export is now a first-class, unified experience (Excel, PDF, CSV — one dropdown, everywhere). Settings got a global search bar so you can jump to any individual toggle instead of clicking through categories.",[12,84,85,86,90,91,90,94,97,98,101],{},"And we did a full-stack performance pass. Page loads on ",[87,88,89],"code",{},"/reports",", ",[87,92,93],{},"/approvals",[87,95,96],{},"/dashboard",", and ",[87,99,100],{},"/schedules"," are meaningfully faster — in some cases seventy requests on page load became ten, and double-digit-second waits became sub-two-second waits. Nothing changed for you to configure; it just works better.",[12,103,104],{},"Here's the tour.",[71,106,108],{"id":107},"team-matrix-view-for-schedules-and-timesheets","Team Matrix View for Schedules and Timesheets",[12,110,111],{},"The calendar view overlays every visible employee's shifts or time entries onto one week × 24-hour grid. It works fine for small teams. Past 20–30 people it becomes unreadable — impossible to spot who's missing entries, who's scheduled for overtime, or what still needs approval. Every enterprise workforce tool (Workday, UKG, ADP, SAP SuccessFactors, Ceridian Dayforce) solves this the same way: one row per employee, one column per day. We built that.",[113,114,115,122,128,138,144,150,156],"ul",{},[116,117,118,121],"li",{},[79,119,120],{},"Employee × day matrix."," Each visible employee is a row; the seven days of the current week are columns. Each cell shows the aggregate (hours + status dots for timesheets; shift time + type for schedules). A Week total column on the right gives per-employee totals at a glance. The employee column and header row are sticky, so scrolling horizontally keeps the name and date context in view.",[116,123,124,127],{},[79,125,126],{},"Click-to-drill."," Click any cell with one entry or shift to open it in the edit modal. Click a cell with multiple entries to expand the row inline, grouped per day. Click an empty cell to open an Add Entry / Add Shift modal pre-seeded to that employee and date.",[116,129,130,133,134,137],{},[79,131,132],{},"Drag-resizable columns with persistence."," Every column has a drag handle; widths clamp between 60 and 600 pixels and persist per-browser in ",[87,135,136],{},"localStorage",". Double-click a handle to reset that column; a toolbar button clears every custom width at once.",[116,139,140,143],{},[79,141,142],{},"Density toggle."," Compact / Normal / Spacious, remembered across sessions. Compact fits a 30-person team on a single screen; Spacious is better for presenting or reviewing one team closely.",[116,145,146,149],{},[79,147,148],{},"Sort and filter."," Sort by name, week hours, pending count, or missing days. Filter chips toggle between All / Missing / Pending / Approved / Rejected (timesheets) or All / Unscheduled / Scheduled / 40h+ (schedules), each with a live count.",[116,151,152,155],{},[79,153,154],{},"Holiday and leave aware."," Holiday cells are tinted green with the holiday name. Cells where the employee is on leave show the leave type instead of a blank, so \"no shift scheduled\" is visibly distinct from \"scheduled off\". Unassigned open shifts render with a muted \"Open Shift\" label.",[116,157,158,161,162,165],{},[79,159,160],{},"Calendar and List views still available."," The top bar toggle is now three buttons: Team (default) / Calendar / List. The ",[87,163,164],{},"?view="," URL parameter accepts all three, so existing deep links keep working.",[12,167,168,169,171,172,175],{},"The Team view is now the default for both ",[87,170,100],{}," and ",[87,173,174],{},"/time-tracking/timesheets",".",[71,177,179],{"id":178},"time-tracking-grew-up","Time Tracking Grew Up",[181,182,184],"h3",{"id":183},"pay-period-lockdown","Pay-Period Lockdown",[12,186,187],{},"Admins can set a lockdown date after which time entries with a clock-in before that date can no longer be edited or deleted by employees. A configurable grace window (in days) lets managers close out late-submitted hours after the lock date. Only Administrators and Executives can override the lock for corrections; every override is written to the audit log with the entry's date and the lockdown cutoff, so compliance always has a reviewable trail.",[181,189,191],{"id":190},"configurable-clock-rounding","Configurable Clock Rounding",[12,193,194],{},"A new setting snaps clock-in/out to a configured interval (1–60 minutes) with UP / DOWN / NEAREST direction. Applied uniformly to live clock-in/out, manual entry, and edits so billable hours line up with the org's rounding policy regardless of how precisely the user clicks.",[181,196,198],{"id":197},"free-form-tags-on-time-entries","Free-Form Tags on Time Entries",[12,200,201],{},"Each entry can carry up to 10 tags (32 characters each) for categorisation and filtering. Tags appear in the entry modal as a comma-separated input — paste anything and the system normalises (lowercase, strips punctuation, dedupes). Filterable through the entries API.",[181,203,205],{"id":204},"project-money-budgets","Project Money Budgets",[12,207,208],{},"A new money-budget field on projects complements the hours budget with a cost ceiling. Tracked against (hours × hourly rate) of billable entries only — non-billable time never draws down the cost budget. The project detail page renders a second progress bar alongside the hours budget with matching 80% / 100% colour thresholds. Currency inherits from the organization's default.",[181,210,212],{"id":211},"bulk-delete-and-bulk-edit","Bulk Delete and Bulk Edit",[12,214,215],{},"Multi-select in the timesheet list view with a floating action bar. Bulk delete soft-deletes up to 200 entries in one request. Bulk edit supports field-level PATCH semantics — pick any combination of project, billable flag, and hourly-rate override, apply to up to 200 entries at once. Only the fields you explicitly tick get written, so one column can be restamped without touching the others. Both operations are fail-closed: if any row in the batch is blocked by lockdown or ownership rules, nothing is deleted or changed.",[181,217,219],{"id":218},"restart-timer-duplicate","Restart-Timer (Duplicate)",[12,221,222],{},"One-click duplicate on any past entry clones the project / task / description / notes and starts it as a fresh active timer. Stops any currently-running timer first so the \"one active timer per user\" invariant holds.",[181,224,226],{"id":225},"cost-aggregation-on-time-reports","Cost Aggregation on Time Reports",[12,228,229],{},"The time report now surfaces fully-loaded cost alongside hours for administrators and executives. Rate is drawn from each employee's effective Compensation record at the time each entry was logged, so mid-period raises are picked up automatically. SALARY pay types are normalised to hourly at 2080 hours/year; HOURLY is used as-is. A new Total Cost summary card appears on the report, and the Employee breakdown picks up a Cost column. Entries for employees with no Compensation on file are flagged (\"(N unpriced)\") so admins can close data gaps rather than silently under-report. Department heads continue to see hours but never cost.",[71,231,233],{"id":232},"approvals-redesigned","Approvals, Redesigned",[12,235,236,238,239,242],{},[87,237,93],{}," is now a dashboard-style overview. Four edge-joined KPI cards at the top (Total Pending, Leave Requests, Expense Reports, Timesheet Entries — the last one hidden when time tracking is off) link straight to their detail queue. A unified ",[79,240,241],{},"Pending Workload"," card shows the big-number total plus a horizontal bar breakdown per queue, followed by a Review Queues table with Queue / Status / Pending count / Review link. A pulsing amber dot in the header tells you at a glance that something is waiting; it turns green when the queues are clear.",[12,244,245,246,90,249,90,252,255],{},"Each queue has its own dedicated page — ",[87,247,248],{},"/approvals/leave",[87,250,251],{},"/approvals/expenses",[87,253,254],{},"/approvals/time"," — with a consistent layout: breadcrumb, search + filter + export toolbar, a data table with avatar cells and coloured status badges, row-click detail slideover, a three-dot action menu per row, reject modal with character counter and keyboard shortcut hint, and a bottom-pinned pagination footer with rows-per-page selector.",[12,257,258],{},"Approving or rejecting a row is now instant on every approvals page — the row drops out of the list locally without a full refetch.",[71,260,262],{"id":261},"reports-redesigned","Reports, Redesigned",[12,264,265,267],{},[87,266,89],{}," mirrors the approvals overview: five edge-joined KPI cards (Leave requests, Expenses total, Time hours, Active projects, Scheduled shifts), a two-column chart row (Expense Trend + Leave by Employee), and a three-column chart row gated on time tracking (Hours Tracked / Project Hours / Scheduled Shifts). Each chart has a settings gear with period, metric, and top-N options.",[12,269,270,271,90,274,90,277,90,280,90,283,286,287,290,291,294],{},"Five new per-type report pages — ",[87,272,273],{},"/reports/leave",[87,275,276],{},"/reports/expenses",[87,278,279],{},"/reports/time",[87,281,282],{},"/reports/projects",[87,284,285],{},"/reports/scheduling"," — each backed by a real ",[87,288,289],{},"\u003Ctable>"," with admin-style formatting, server-side pagination, exportable via the unified dropdown, and drill-down-friendly URLs. Tab navigation on both Approvals and Reports moved from hash links to query params (",[87,292,293],{},"?tab=leave","), so URLs are shareable and round-trip through the router cleanly.",[71,296,298],{"id":297},"settings-search","Settings Search",[12,300,301,302,305,306,309,310,313,314,317],{},"Every ",[87,303,304],{},"/settings/*"," page now renders a compact Stripe-style search input in the top toolbar. Press ",[87,307,308],{},"/"," anywhere to focus it. Type what you want — \"time zone\", \"auto clock out\", \"rounding\", \"lockdown\", \"audit logs\" — and results resolve to ",[87,311,312],{},"path#anchor"," deep links (e.g. ",[87,315,316],{},"/settings/general#time-zone","). Anchor IDs have been added across ~30 settings components covering General, Time Tracking, Expenses, Leave Types, Documents, Security, Notifications, Integrations, and everything in between.",[12,319,320],{},"Results are role-aware (an employee searching for \"audit logs\" gets no result) and billing-aware (locked-behind-plan features render a small 🔒 Pro / Business / Enterprise / Add-on pill). Arrow keys move the active row, Enter commits, Esc closes.",[71,322,324],{"id":323},"unified-export-excel-pdf-csv","Unified Export — Excel, PDF, CSV",[12,326,327],{},"The Export button is now one dropdown with three options — \"Export in Excel\", \"Export in PDF\", \"Export as CSV\" — applied consistently across timesheets, schedules, all three approval pages, users, and expenses.",[113,329,330,336,346],{},[116,331,332,335],{},[79,333,334],{},"Excel export"," opens a full AG Grid page with theme picker (Quartz / Alpine / Balham / Material, with dark-mode auto-switching), column visibility dropdown, Excel-style checkbox set filters per column, quick filter search across all columns, pinned bottom totals row, and CSV export of the filtered view.",[116,337,338,341,342,345],{},[79,339,340],{},"PDF export"," runs client-side via pdf-lib with a branded header (your logo + company name), paginated rows, and page-number footers. The org's logo comes from your white-label branding; if you don't have a custom domain, it falls back to ",[87,343,344],{},"SMTP_LOGO_URL"," so PDFs still look branded.",[116,347,348,351],{},[79,349,350],{},"CSV export"," respects current filters and visible columns.",[12,353,354,355,90,358,90,361,90,364,97,367,175],{},"The new \"Excel export\" pages exist at ",[87,356,357],{},"/time-tracking/timesheets/export",[87,359,360],{},"/schedules/export",[87,362,363],{},"/approvals/{leave,expense,time}-export",[87,365,366],{},"/users-export",[87,368,369],{},"/expenses-export",[71,371,373],{"id":372},"list-views-that-actually-work-at-scale","List Views That Actually Work at Scale",[12,375,376,377,380,381,380,384,387],{},"The timesheets and schedules pages now have a flat list view alongside the calendar and Team Matrix views. Columns include Date, Employee (avatar + department), Project, Description, Time, Duration, Status, and Actions. Server-side pagination (50 rows per page) keeps the API efficient; multi-select supports bulk edit and bulk delete. View mode persists in the URL query param (",[87,378,379],{},"?view=calendar"," / ",[87,382,383],{},"?view=list",[87,385,386],{},"?view=team",") so refresh doesn't flash.",[71,389,391],{"id":390},"users-page-redesign","Users Page Redesign",[12,393,394,397,398,400],{},[87,395,396],{},"/users"," matches the admin dashboard table pattern now. Inline filter dropdowns (Department, Role, Status) replace the modal-based filter; the layout is full-width; CSV and branded PDF export are one click away; and there's a full AG Grid export page at ",[87,399,366],{},". The Manage Departments modal was redesigned to a compact header/body/footer pattern with contextual icon badges per department and clickable status badges.",[71,402,404],{"id":403},"onboarding-cleaned-up","Onboarding, Cleaned Up",[12,406,407],{},"Department heads are now first-class managers of their own department's task lists — they can create, edit, delete, and manage templates scoped to their department, with auto-pinned department selection on create. Signing a document attached to an onboarding task now auto-completes the task. Due dates respect BEFORE/AFTER direction properly (a task \"7 days before hire\" is now actually before, not after). Employees can no longer mark their own onboarding tasks complete (only admins, executives, the department head of the employee's department, or the explicit task assignee). Reminders fan out to admins + executives + the assignee instead of just one person, with the employee name in the subject line. Task and instance removals now notify admins/execs/DH with the details of who removed what.",[12,409,410],{},"Drag-and-drop reordering of tasks within a template. Email CTA buttons render in the organization's brand colour. Template snapshots on each instance mean renaming or deleting a template no longer crashes the cards that referenced it.",[71,412,414],{"id":413},"a-full-stack-performance-pass","A Full-Stack Performance Pass",[12,416,417],{},"We did a directed performance audit across the hottest pages and cut request counts, round-trip time, and payload size across the board. Nothing in this section changes behaviour or API shapes — the work is entirely internal.",[113,419,420,429,435,444,453,459,473,479,489],{},[116,421,422,425,426,428],{},[79,423,424],{},"Reports overview now loads in one pass."," ",[87,427,89],{}," used to fire roughly seventy requests on mount. The summary strip now calls a single new endpoint that returns all five KPI numbers via DB aggregates; the leave-by-employee chart reads one endpoint and groups client-side instead of fanning out per user; the hours-tracked chart fetches its six monthly buckets in parallel. Typical admin loads drop from double-digit seconds to sub-2s on a 50-user org.",[116,430,431,434],{},[79,432,433],{},"Approvals overview uses one counts endpoint."," Three hidden \"tab components\" that existed purely to compute stat-card numbers are gone. One endpoint returns the three pending counts in one hop.",[116,436,437,440,441,443],{},[79,438,439],{},"Faster approvals."," Approving or rejecting on ",[87,442,254],{}," removes the row locally on success instead of refetching the entire queue. Leave and expense approvals already worked this way; timesheets are now in line.",[116,445,446,449,450,175],{},[79,447,448],{},"Dashboard reads in parallel."," The home dashboard's user-row query used to walk through five independent reads in sequence. They now run in a single ",[87,451,452],{},"Promise.all",[116,454,455,458],{},[79,456,457],{},"Schedule auto-generation cut from hundreds of queries to one."," A per-employee-per-day existence check that ran 250+ individual queries for a typical 50-person week is now a single batched query plus an in-memory check.",[116,460,461,464,465,468,469,472],{},[79,462,463],{},"People grid uses DB aggregates."," The ",[87,466,467],{},"/time-tracking/people"," endpoint was loading every time entry for the week and looping in memory. It now uses ",[87,470,471],{},"groupBy"," for the sums and only fetches the handful of actively-running timers.",[116,474,475,478],{},[79,476,477],{},"Composable fetches in parallel."," Department-head paths on the timesheet and schedule calendars now fire their two API calls in parallel instead of sequence. Preferences load once per session instead of refetching on every calendar navigation. Watcher cascades that fired together coalesce into one request via microtask debounce.",[116,480,481,484,485,488],{},[79,482,483],{},"Cross-tab notification dedup."," The unread-count poller now broadcasts results across tabs via ",[87,486,487],{},"BroadcastChannel",". Three tabs open → roughly the same load as one.",[116,490,491,494],{},[79,492,493],{},"Domain middleware merged into one query."," White-label domain lookup now loads the owning organization via a relation include on the same query, so cache-miss paths are a single DB round-trip per unique host.",[12,496,497],{},"All in: 1699 tests passing, zero behaviour changes, noticeably faster app.",[71,499,501],{"id":500},"getting-v1010","Getting v1.0.10",[12,503,504,505,507,508,510,511,514],{},"There's nothing to do — the update is live for all cloud customers. Everything above is backwards-compatible; no migrations required on your side. Open ",[87,506,100],{}," or ",[87,509,174],{}," to try the new Team view, or visit ",[87,512,513],{},"/settings/timetracking#lockdown-period-start"," to set up your first pay-period lockdown.",[12,516,517],{},"As always, if you hit anything unexpected, reach out — we read every support ticket.",{"title":16,"searchDepth":17,"depth":17,"links":519},[520,521,522,532,533,534,535,536,537,538,539,540],{"id":73,"depth":17,"text":74},{"id":107,"depth":17,"text":108},{"id":178,"depth":17,"text":179,"children":523},[524,526,527,528,529,530,531],{"id":183,"depth":525,"text":184},3,{"id":190,"depth":525,"text":191},{"id":197,"depth":525,"text":198},{"id":204,"depth":525,"text":205},{"id":211,"depth":525,"text":212},{"id":218,"depth":525,"text":219},{"id":225,"depth":525,"text":226},{"id":232,"depth":17,"text":233},{"id":261,"depth":17,"text":262},{"id":297,"depth":17,"text":298},{"id":323,"depth":17,"text":324},{"id":372,"depth":17,"text":373},{"id":390,"depth":17,"text":391},{"id":403,"depth":17,"text":404},{"id":413,"depth":17,"text":414},{"id":500,"depth":17,"text":501},"2026-04-20","v1.0.10 ships the Team Matrix view on schedules and timesheets, pay-period lockdown for payroll compliance, project money budgets, clock rounding, time-entry tags, unified Excel/PDF/CSV export, a Settings search bar, and a cross-stack performance pass.","https://images.unsplash.com/photo-1611926653458-09294b3142bf?w=1200&h=630&fit=crop",{},"/blog/v1-0-10-launch","7 min read",{"title":66,"description":542},"blog/v1-0-10-launch",[550,551,552,553,554],"release notes","time tracking","scheduling","approvals","performance","BHygeve_N_zW97jDb0ycV70YfhRqImpud3tOcc6KTAI",[557,794,1007],{"id":558,"title":559,"author":67,"body":560,"date":780,"description":781,"extension":19,"image":782,"meta":783,"navigation":7,"path":784,"readTime":785,"seo":786,"stem":787,"tags":788,"__hash__":793},"blog/blog/geofencing-time-tracking-guide.md","Geofencing for Time Tracking: A Practical Guide",{"type":9,"value":561,"toc":768},[562,566,569,580,583,587,590,593,597,600,606,612,618,624,628,631,638,644,647,651,654,657,663,669,675,678,682,685,688,691,695,698,701,704,708,711,717,723,729,732,736,739,742,745,749,752,755],[71,563,565],{"id":564},"the-hours-you-never-see","The Hours You Never See",[12,567,568],{},"Most of the hours you pay for look fine on paper. An employee clocks in at 8:03, clocks out at 16:58, and the timesheet adds up. Revenue comes in from the client at the contracted rate. Payroll runs. Everyone goes home.",[12,570,571,572,576,577,175],{},"But if you are paying for work on a specific jobsite — a construction project, a client office, a warehouse, a hospital — the timesheet only tells you half the story. It says ",[573,574,575],"em",{},"when"," someone worked. It does not say ",[573,578,579],{},"where",[12,581,582],{},"For a lot of businesses that distinction doesn't matter. For a lot of others, it's the whole game.",[71,584,586],{"id":585},"what-geofencing-actually-is","What Geofencing Actually Is",[12,588,589],{},"A geofence is a virtual boundary drawn on a map. Your time tracker uses the employee's GPS location at the moment they clock in to check whether they are inside that boundary. If they are, the clock-in is allowed. If they aren't, it is either blocked, flagged for review, or silently logged for compliance — depending on how strict your policy is.",[12,591,592],{},"That's it. No satellites following your employees around all day. No background tracking. The employee's location is captured once at clock-in and once at clock-out, compared to the fence, and then nothing happens until the next clock event.",[71,594,596],{"id":595},"where-it-earns-its-keep","Where It Earns Its Keep",[12,598,599],{},"Four patterns cover most real-world use cases.",[12,601,602,605],{},[79,603,604],{},"Construction and job sites."," A framer does not need to clock in from the truck yard or from home. The site has an address. Draw a polygon around the site — irregular shapes are fine, that's what polygons are for — and the clock-in only fires when the crew is actually there. When the project ends, the fence goes away with it.",[12,607,608,611],{},[79,609,610],{},"Multi-office companies."," A consulting firm with offices in Vancouver, Calgary, and Toronto doesn't want employees clocking into \"Vancouver office\" from their couch. One fence per office, all assigned org-wide, and the time entry records which office the clock-in actually matched. Now your occupancy reports are honest.",[12,613,614,617],{},[79,615,616],{},"Field services."," Technicians who bill client visits by the hour. The job happens at the customer's address, not on the way there. A fence per client site, assigned to the specific project, means billable time doesn't start until the tech is on-premise. Your invoices match reality and your client trusts your bills.",[12,619,620,623],{},[79,621,622],{},"Healthcare and shift work."," A hospital campus with specific buildings. A clinic with parking shared by three businesses. Labour regulations often require that shift time is counted from the moment the worker is at their station, not when they scanned their key card at the perimeter. A polygon fence around the correct building enforces that without anyone having to manually police it.",[71,625,627],{"id":626},"circle-or-polygon","Circle or Polygon?",[12,629,630],{},"The two shapes handle almost everything.",[12,632,633,634,637],{},"A ",[79,635,636],{},"circle"," is a centre point plus a radius. Simplest possible fence. Good for a single-building office, a small warehouse, a standalone retail location. Ten-metre radius for a tiny site, 500-metre radius for a large campus. You pick the centre on a map, drag a handle to set the radius, you're done in 30 seconds.",[12,639,633,640,643],{},[79,641,642],{},"polygon"," is an ordered list of vertices. More work to draw, much more precise. Use it when the site has a shape — a construction zone spanning half a city block, a U-shaped hospital that doesn't fit neatly into a bounding circle, a delivery depot that wraps around a parking lot the public can access.",[12,645,646],{},"Most teams start with circles because they are faster to draw, and convert the few that matter to polygons over time. Neither is objectively better. They serve different geometries.",[71,648,650],{"id":649},"three-modes-a-rollout-strategy","Three Modes — A Rollout Strategy",[12,652,653],{},"Geofencing adoption fails when it goes from \"off\" to \"block everything\" overnight. Your GPS fences will have edge cases you did not anticipate. An employee whose office sits right on the fence boundary. A warehouse back door that puts workers 20 metres outside the polygon. A mid-tier Android phone that reports 200-metre accuracy on a cloudy day.",[12,655,656],{},"The better way is three modes, in sequence.",[12,658,659,662],{},[79,660,661],{},"Start in LOG_ONLY."," No employee-visible change. Every clock-in proceeds normally, but the system records whether the location fell inside or outside the fence. After two weeks you have real data on how well your fences cover the work that actually happens. Now you know which ones to redraw, which sites need a polygon instead of a circle, and which employees are doing legitimate work 30 metres outside your boundary because that's where the shaded break area is.",[12,664,665,668],{},[79,666,667],{},"Graduate to OPTIONAL."," Clock-ins still succeed, but out-of-bounds attempts are flagged on a compliance dashboard. The employee experience is unchanged; managers start reviewing flagged entries weekly. This is where you build trust in the system before it starts saying no.",[12,670,671,674],{},[79,672,673],{},"Switch on REQUIRED."," Now out-of-bounds clock-ins are blocked with a clear rejection modal showing the nearest allowed site and the distance to it. Use this once your fence coverage is solid and you have a process for employees who genuinely need to work off-site (a remote exception assignment, a temporary override).",[12,676,677],{},"The trap is skipping the first two phases. The cost is a week of angry Slack messages from people whose clock-ins mysteriously fail. Don't do it.",[71,679,681],{"id":680},"whose-fence-wins","Whose Fence Wins",[12,683,684],{},"A single fence can apply to different targets — the whole organization, a single department, a specific user, or a specific project. When an employee clocks in, the most specific match wins.",[12,686,687],{},"Start at the top: if the project they're clocking into has its own fence, that fence applies. If not, does the user have one assigned to them directly? If not, their department? If not, the org-wide default? That's the resolution order, and it matches how most enterprise HRIS tools handle location policies.",[12,689,690],{},"In practice it means you can set a sensible org-wide default (\"all clock-ins must come from one of our three offices\") and then override it per project for edge cases (\"Q4 Warehouse Build is on-site only\") and per user for remote exceptions (\"Sarah works from home on Fridays\"). The four levels of scope cover almost every policy you'd want to express.",[71,692,694],{"id":693},"what-about-gps-accuracy","What About GPS Accuracy?",[12,696,697],{},"This is the question everyone asks second, right after \"can I use polygons?\". The short answer is: you can't trust a single GPS fix to the metre, so geofencing has to be tolerant of that by design.",[12,699,700],{},"A good implementation does three things. First, it captures the accuracy of the reading alongside the position itself — most browser and OS location APIs return this. Second, it treats the effective allowed area as the fence radius plus a configurable tolerance plus the accuracy of the individual reading. A 50-metre GPS fix inside a 100-metre fence is obviously inside; a 200-metre GPS fix just barely outside a 100-metre fence is ambiguous, and the tolerance-plus-accuracy math treats it as inside. Third, it rejects readings whose accuracy is worse than a configurable threshold — a 5-kilometre fix is not useful for enforcement, so the clock-in fails with a specific \"GPS too weak\" message that tells the employee to move near a window.",[12,702,703],{},"The net effect is that mobile-web GPS, which is routinely 50-200 metres noisy, still works reliably for a 100-metre office fence. Not by pretending the noise isn't there, but by accounting for it at check time.",[71,705,707],{"id":706},"privacy-and-trust","Privacy and Trust",[12,709,710],{},"Geofencing can slide into creepy territory fast if you let it. The guardrails are simple and should be non-negotiable.",[12,712,713,716],{},[79,714,715],{},"Capture the location only at clock events."," Not in the background. Not continuously. Not when the app is closed. Employees should be able to open the app, work, close it, and only when they tap Clock In does their location get read. That's the whole lifecycle.",[12,718,719,722],{},[79,720,721],{},"Store the result, not the history."," A single lat/lng on the time entry, tied to the clock-in/out you just performed, is sufficient for compliance. You do not need a minute-by-minute trail of where the employee was during the shift. You need to know where they were when they said they were working.",[12,724,725,728],{},[79,726,727],{},"Be transparent about what's enforced."," If geofencing is on for a team, tell that team. Show the employee, before they tap the button, what fence they are being checked against and whether they currently pass. The \"live status banner\" pattern — green when inside, amber when outside, with the name of the nearest allowed site — turns a system that could feel like surveillance into one that reads as \"here's the information I need to do my job.\"",[12,730,731],{},"Enforcement without transparency is surveillance. Enforcement with clear, contextual feedback is just a workflow.",[71,733,735],{"id":734},"offline-workers","Offline Workers",[12,737,738],{},"One last problem. Your field crews sometimes work where there is no cellular signal. A construction site in a basement. A client building with bad reception. A delivery route through a mountain pass. The clock-in has to work anyway.",[12,740,741],{},"The pattern most mobile-native workforce apps converge on is an offline queue. The app captures the clock event locally, including the timestamp and the last known GPS fix, and queues it. When the device comes back online, the queued event replays against the server with the original timestamp and location. A sensible drift tolerance (say, up to 24 hours into the past and 15 minutes into the future) prevents abuse.",[12,743,744],{},"Not every workforce tool handles this. The ones that don't tend to have a ticket queue full of \"my clock-in didn't save\" support requests. If your team genuinely works off-grid, ask about offline behaviour before you buy.",[71,746,748],{"id":747},"how-bookyourpto-does-it","How BookYourPTO Does It",[12,750,751],{},"All of the patterns above are how the BookYourPTO geofencing feature is built. Circles and polygons from a single editor. Three modes — LOG_ONLY, OPTIONAL, REQUIRED. Four scope levels with the most-specific-wins resolution. Accuracy-aware distance checks with configurable tolerance and max-accuracy thresholds. A live status banner on the employee clock-in screen. An offline-queue timestamp protocol on the mobile API. A compliance dashboard with CSV export and a full audit trail of every fence change and every blocked attempt.",[12,753,754],{},"It is available on every plan that includes time tracking, works with both Google Maps and OpenStreetMap (no lock-in to one vendor's key), and takes about a minute to set up your first fence.",[12,756,757,758,765,766,175],{},"Start a trial at ",[759,760,764],"a",{"href":761,"rel":762},"https://app.bookyourpto.com/register",[763],"nofollow","bookyourpto.com",", or read the feature details at ",[759,767,56],{"href":56},{"title":16,"searchDepth":17,"depth":17,"links":769},[770,771,772,773,774,775,776,777,778,779],{"id":564,"depth":17,"text":565},{"id":585,"depth":17,"text":586},{"id":595,"depth":17,"text":596},{"id":626,"depth":17,"text":627},{"id":649,"depth":17,"text":650},{"id":680,"depth":17,"text":681},{"id":693,"depth":17,"text":694},{"id":706,"depth":17,"text":707},{"id":734,"depth":17,"text":735},{"id":747,"depth":17,"text":748},"2026-04-19","If you manage field workers, construction crews, or multi-site teams, your time tracker needs to know where the clock-in actually happened. Here is how geofencing fits into a real workforce — without turning into surveillance.","https://images.unsplash.com/photo-1524661135-423995f22d0b?w=1200&h=630&fit=crop",{},"/blog/geofencing-time-tracking-guide","6 min read",{"title":559,"description":781},"blog/geofencing-time-tracking-guide",[789,551,790,791,792],"geofencing","compliance","field service","construction","sjR6-s4GMnnvNWS0xlEEr4WPnrKXLnbk9drPfeHYEjo",{"id":795,"title":796,"author":67,"body":797,"date":996,"description":997,"extension":19,"image":998,"meta":999,"navigation":7,"path":1000,"readTime":546,"seo":1001,"stem":1002,"tags":1003,"__hash__":1006},"blog/blog/performance-goals-one-on-ones-training.md","A Performance Foundation for Growing Teams: Goals, 1:1s, and Training (2026)",{"type":9,"value":798,"toc":984},[799,803,806,809,813,816,819,839,842,846,849,852,855,859,862,865,868,871,875,878,882,885,888,926,929,933,936,939,943,946,950,953,959,965,969,972,975,978,981],[71,800,802],{"id":801},"the-performance-gap-at-30-employees","The Performance Gap at 30 Employees",[12,804,805],{},"Somewhere between 20 and 50 employees, every growing company hits the same wall. The informal \"we all know each other\" model of performance management stops working. Managers forget what their reports committed to last month. Goals stop being written down. Training that was supposed to be annual becomes never. The first awkward review is scheduled because someone asked for a raise and HR realized there's no paper trail.",[12,807,808],{},"At that scale, buying a full performance suite from a large HRIS vendor is overkill. What small HR teams need is a lightweight layer: goals, recurring 1:1s, and an auto-assigning training system. This post covers what each looks like when designed for the 30-to-150 employee band.",[71,810,812],{"id":811},"configuration-before-features","Configuration Before Features",[12,814,815],{},"A performance module should ship with a settings page that makes it legitimate to say \"we're not using goals this year.\" Forcing every organization into every feature is how you get half-filled goal sheets and abandoned 1:1 series.",[12,817,818],{},"The settings worth exposing:",[113,820,821,827,833],{},[116,822,823,826],{},[79,824,825],{},"Who gets goals"," — none, all employees, or a specific subset",[116,828,829,832],{},[79,830,831],{},"Cascading goals"," — whether employee goals can be linked to their manager's goals",[116,834,835,838],{},[79,836,837],{},"1:1 enablement"," — whether the 1:1 module is on at all",[12,840,841],{},"A ten-person startup might turn on 1:1s and leave goals off. A fifty-person services firm might do the opposite. Both are correct.",[71,843,845],{"id":844},"goals-that-people-actually-update","Goals That People Actually Update",[12,847,848],{},"Goal-tracking fails in most companies because the UI for updating a goal is worse than a Google Doc. The bar is low. Clear it.",[12,850,851],{},"A usable goal card shows title, description, progress (0-100%), status, due date, category, and owner. Progress is a slider, not a text field. Status is a dropdown. Updates take five seconds.",[12,853,854],{},"The card expands to show threaded comments with timestamps and author avatars. This is where the conversation happens: \"Moved the launch date, pushing this to 60% instead of 75%,\" and the manager replies two days later. The comment thread is the audit trail.",[71,856,858],{"id":857},"_11s-as-a-recurring-series","1:1s as a Recurring Series",[12,860,861],{},"A 1:1 is not a single meeting. It is a series with a frequency (weekly, biweekly, monthly, or one-time), a first meeting date, and two participants. Everything else — agenda items, notes, action items — attaches to the series.",[12,863,864],{},"The layout that works is side-by-side notes: a shared column visible to both participants, and a private column visible only to the author. Managers need private notes. They use them to track hunches, performance concerns, and context they'll pull into a review six months later. Pretending managers won't keep private notes just means they'll keep them in a separate doc you can't see or back up.",[12,866,867],{},"The 1:1 view should also include an inline profile preview of the other participant, so the manager has hire date, role, manager chain, and recent activity one glance away during the meeting. Asking a manager to switch tabs mid-conversation is a small failure that happens a thousand times a year.",[12,869,870],{},"Creation and cancellation of a 1:1 should email both participants. A daily reminder cron should notify both participants of their upcoming 1:1 with the current agenda attached, so nobody shows up empty-handed.",[71,872,874],{"id":873},"private-note-filtering","Private-Note Filtering",[12,876,877],{},"Private-note filtering must happen server-side on every API response, not just in the UI. A manager's private notes on their report do not leak to the report. The report's private notes do not leak to the manager. This is the single most common place where performance modules leak data, because the obvious implementation — \"return all notes, hide the private ones in the UI\" — fails the first time someone inspects a network tab.",[71,879,881],{"id":880},"training-as-policy-not-assignment","Training as Policy, Not Assignment",[12,883,884],{},"The mistake most companies make with training is to manage it as individual assignments. HR thinks \"every engineer needs the secure coding refresher annually,\" and then hand-assigns it, hire by hire, year after year. It works for six months.",[12,886,887],{},"The correct model is to define training requirements as policy and let the system assign them:",[113,889,890,896,902,908,914,920],{},[116,891,892,895],{},[79,893,894],{},"Frequency"," — one-time, annual, every 2 years, every 3 years, every 5 years",[116,897,898,901],{},[79,899,900],{},"Categories"," — safety, compliance, skills, role-specific, onboarding",[116,903,904,907],{},[79,905,906],{},"Due-from-hire-days"," — how many days after hire date the first completion is due",[116,909,910,913],{},[79,911,912],{},"Required-for filter"," — all employees, a department, a role, or specific employees",[116,915,916,919],{},[79,917,918],{},"URL"," — optional link to the course provider",[116,921,922,925],{},[79,923,924],{},"Self-complete toggle"," — whether the employee can mark the training complete themselves",[12,927,928],{},"When a requirement is created or its target filter changes, the system automatically creates training records for everyone it applies to, with due dates calculated from each person's hire date. New hires in the target scope get the training auto-assigned when they join. Leavers stop receiving reminders when they offboard.",[71,930,932],{"id":931},"the-profile-training-tab","The Profile Training Tab",[12,934,935],{},"On each employee profile, the Training tab groups courses by category and shows due date, status, and last completion date. Inline edit lets managers update completion dates without leaving the profile. Mark-complete and dismiss actions handle the two normal outcomes: \"the employee actually took the course\" and \"this training no longer applies to this person.\"",[12,937,938],{},"Crucially, the tab only shows courses that actually apply to the user based on their current department and role. An engineer doesn't see the kitchen-safety course that was required for the one-person kitchen staff filter.",[71,940,942],{"id":941},"training-reminders","Training Reminders",[12,944,945],{},"A training reminder cron runs daily and emits 7-day, 3-day, and 1-day reminders before due date, plus overdue detection that notifies both the employee and their manager. The manager loop is important. Training that silently goes overdue is a compliance risk that HR doesn't see from the dashboard until it's been a problem for weeks.",[71,947,949],{"id":948},"small-ux-details-that-matter","Small UX Details That Matter",[12,951,952],{},"Two small things that add up:",[12,954,955,958],{},[79,956,957],{},"No page refresh after recording completion."," Marking a training complete used to require a full page reload. Single-request creation with an optimistic UI update makes the interaction instant — the difference between \"I'll update training later\" and \"I'll update training now.\"",[12,960,961,964],{},[79,962,963],{},"Reports To picker respects the role hierarchy."," When assigning a manager, the picker filters to users at or above the employee's level and excludes inactive users. If an employee already has a saved manager outside the filtered list (a legacy assignment from before a reorg), the picker preserves them so the admin doesn't accidentally unassign. Live updates react to in-form role changes.",[71,966,968],{"id":967},"how-bookyourpto-supports-this","How BookYourPTO Supports This",[12,970,971],{},"Version 1.0.9 introduces the performance foundation described above. A performance settings page lets admins configure goal users (none, all, or specific), enable cascading goals, and turn the 1:1 module on or off independently. Per-employee goal cards include a progress slider, status, due date, and category, and expand to show threaded comments with timestamps and author avatars.",[12,973,974],{},"The 1:1 module supports recurring series with weekly, biweekly, monthly, or one-time frequency. Each 1:1 includes an inline profile preview of the other participant, an agenda, and side-by-side notes with shared and private columns. Private-note filtering is enforced server-side on every API response. Creation and cancellation emails fire automatically, and a daily reminder cron sends upcoming-1:1 notifications with the current agenda.",[12,976,977],{},"Training settings let admins define requirements with frequency (one-time, annual, every 2/3/5 years), categories, due-from-hire days, required-for filters (all, department, role, or specific employees), an optional URL, and a self-complete toggle. Required training auto-assigns to targeted users on create or update, with due dates calculated from each user's hire date. The profile training tab groups courses by category, shows only courses that apply to the user, and supports inline edit, mark-complete, and dismiss. A training reminder cron sends 7-day, 3-day, and 1-day reminders plus overdue notifications to both the employee and their manager.",[12,979,980],{},"Recording a completed training now uses an optimistic UI with single-request creation, so the page no longer refreshes after each completion. The Reports To picker filters on role hierarchy, excludes inactive users, reacts live to in-form role changes, and preserves a currently saved manager even if they fall outside the filtered list.",[12,982,983],{},"If your team is ready to move goals, 1:1s, and training off ad-hoc docs and into something queryable, the performance module in 1.0.9 is a reasonable starting point.",{"title":16,"searchDepth":17,"depth":17,"links":985},[986,987,988,989,990,991,992,993,994,995],{"id":801,"depth":17,"text":802},{"id":811,"depth":17,"text":812},{"id":844,"depth":17,"text":845},{"id":857,"depth":17,"text":858},{"id":873,"depth":17,"text":874},{"id":880,"depth":17,"text":881},{"id":931,"depth":17,"text":932},{"id":941,"depth":17,"text":942},{"id":948,"depth":17,"text":949},{"id":967,"depth":17,"text":968},"2026-04-14","Why small HR teams are adopting lightweight performance tooling — goals with progress and threaded comments, recurring 1:1 series with private notes, and auto-assigned training by department and role.","https://images.unsplash.com/photo-1600880292203-757bb62b4baf?w=1200&h=630&fit=crop",{},"/blog/performance-goals-one-on-ones-training",{"title":796,"description":997},"blog/performance-goals-one-on-ones-training",[554,1004,1005],"training","hr","HoixBg6qpJ-ovo3_57lrp7Bh54rPmy8kC2jYb-VEodY",{"id":1008,"title":1009,"author":67,"body":1010,"date":1199,"description":1200,"extension":19,"image":1201,"meta":1202,"navigation":7,"path":1203,"readTime":546,"seo":1204,"stem":1205,"tags":1206,"__hash__":1209},"blog/blog/onboarding-automation-signature-gated-tasks.md","Onboarding Automation: Signature-Gated Tasks, Per-User Documents, and Auto Due Dates (2026)",{"type":9,"value":1011,"toc":1185},[1012,1016,1019,1022,1026,1029,1032,1058,1061,1065,1068,1072,1075,1079,1082,1085,1089,1092,1095,1099,1102,1105,1108,1112,1115,1118,1122,1125,1139,1142,1145,1149,1152,1155,1159,1162,1165,1167,1170,1173,1176,1179,1182],[71,1013,1015],{"id":1014},"onboarding-is-where-small-hr-teams-break-first","Onboarding Is Where Small HR Teams Break First",[12,1017,1018],{},"Onboarding is the workflow that exposes the gap between what HR has documented and what actually happens. The documented version is a beautiful 42-step checklist covering laptop provisioning, benefits enrollment, handbook signatures, training assignments, and an intro coffee with the CEO. The actual version is a Slack message to the hiring manager on day one that says \"let me know if you need anything.\"",[12,1020,1021],{},"Every small HR team starts out managing onboarding by memory and ends up managing it by spreadsheet. Neither scales. The automation layer in between — templates, auto-triggers, signature gates, and reminder crons — is what turns a 42-step checklist into a thing that reliably ships.",[71,1023,1025],{"id":1024},"templates-not-checklists","Templates, Not Checklists",[12,1027,1028],{},"The atomic unit of onboarding automation is the template. A template is an ordered list of tasks, each with its own assignee, due date rule, notification timing, icon, and target scope.",[12,1030,1031],{},"Target scope is the feature that separates a real onboarding tool from a shared document. A template can apply to:",[113,1033,1034,1040,1046,1052],{},[116,1035,1036,1039],{},[79,1037,1038],{},"All employees"," — the universal set that runs for every new hire",[116,1041,1042,1045],{},[79,1043,1044],{},"A specific department"," — engineering hires get the engineering-specific set",[116,1047,1048,1051],{},[79,1049,1050],{},"A specific role"," — managers get the people-manager-specific set",[116,1053,1054,1057],{},[79,1055,1056],{},"Specific employees"," — for the rare one-off case",[12,1059,1060],{},"When a new hire joins, the system computes which templates apply to them and instantiates tasks from each. That composition logic is what lets you build a modular onboarding program instead of one monster checklist with 200 entries.",[71,1062,1064],{"id":1063},"offboarding-templates-in-parallel","Offboarding Templates in Parallel",[12,1066,1067],{},"Offboarding deserves the same treatment. The template system should be symmetrical: offboarding templates also support ordered tasks, assignees, and due date rules, with copy that reflects the end-of-employment context. \"On hire date\" becomes \"on last day.\" \"Before hire date\" becomes \"before last day.\"",[71,1069,1071],{"id":1070},"new-hire-packets-the-non-task-content","New Hire Packets: The Non-Task Content",[12,1073,1074],{},"Not everything a new hire needs is a task. Some of it is context: arrival time, location, contact person, what to bring, and a set of \"get to know you\" questions their team can browse before day one. This content belongs in a separate object — a New Hire Packet Template — that attaches to the onboarding instance without pretending to be a checklist.",[71,1076,1078],{"id":1077},"auto-triggering","Auto-Triggering",[12,1080,1081],{},"The single highest-leverage feature in the entire onboarding system is auto-trigger. When an admin marks a user as hired, the onboarding instance creates itself. When a user is set inactive, the offboarding instance fires. Nobody has to remember to \"start the onboarding.\" The trigger is the act of hiring, not a separate button click.",[12,1083,1084],{},"This sounds obvious. Plenty of HRIS products still require a manual \"start onboarding\" step, and that step gets forgotten often enough to materially hurt new-hire experience.",[71,1086,1088],{"id":1087},"documents-attached-to-tasks","Documents Attached to Tasks",[12,1090,1091],{},"Onboarding tasks frequently come with a required document: a confidentiality agreement, a code of conduct acknowledgement, an equipment use policy. The right pattern is to attach the document directly to the task, with a flag indicating whether a signature is required.",[12,1093,1094],{},"This keeps the document and the task coupled. The task doesn't silently get marked complete while the document goes unsigned. The document doesn't sit in a separate pending-signatures queue that nobody monitors.",[71,1096,1098],{"id":1097},"per-user-document-copies","Per-User Document Copies",[12,1100,1101],{},"Here is the subtle one. When a policy document is attached to an onboarding task, the system should not route every new hire through the same shared PDF. It should generate a personal, signable copy for each recipient.",[12,1103,1104],{},"The reason is both legal and practical. A shared multi-signer PDF leaks information: every hire sees every previous hire's signature and signing date on the same document. A per-user copy preserves privacy, produces a clean signed artifact for the employee's file, and supports independent revocation or amendment without disturbing anyone else's record.",[12,1106,1107],{},"Each employee signs their own copy, independently, and the signed copy lands in their own document vault.",[71,1109,1111],{"id":1110},"signature-gating","Signature Gating",[12,1113,1114],{},"A task with a signing-required document attached cannot be marked complete until the assigned recipient has actually signed their copy. This is a simple constraint that eliminates a surprisingly common failure mode: the employee clicks \"Done\" on the handbook task, the task goes green, and nobody ever signs anything.",[12,1116,1117],{},"Admin override is available for the rare exceptions — someone signed the document on paper, the document was superseded — but the default behavior is to block completion on unsigned attachments.",[71,1119,1121],{"id":1120},"auto-due-date-calculation","Auto Due-Date Calculation",[12,1123,1124],{},"Due dates should not be manually entered per task per hire. They should be rules evaluated against the hire date:",[113,1126,1127,1130,1133,1136],{},[116,1128,1129],{},"\"3 days after hire date\" for laptop setup",[116,1131,1132],{},"\"7 days after hire date\" for the benefits enrollment task",[116,1134,1135],{},"\"14 days after hire date\" for the first manager check-in",[116,1137,1138],{},"\"2 days before hire date\" for the IT account provisioning task",[12,1140,1141],{},"The system resolves these rules into concrete dates at instance-creation time. When the hire date is missing or changes, the rules re-evaluate. When there's no hire date at all, the fallback is \"today\" — in the organization's configured timezone, not the server's.",[12,1143,1144],{},"The timezone detail matters. An organization headquartered in Vancouver should not have its tasks due at 9:00 PM local time because the server is in UTC.",[71,1146,1148],{"id":1147},"notifications-that-fire-at-the-right-moment","Notifications That Fire at the Right Moment",[12,1150,1151],{},"Every task supports per-task in-app plus email notifications on four events: instance created, task assigned, task reassigned, and instance completed. Each event is separately configurable so a low-priority task doesn't generate the same noise as a high-priority one.",[12,1153,1154],{},"Beyond event notifications, a daily reminder cron handles the nagging: 7-day, 3-day, 1-day, day-of reminders, and a 1-day-overdue notification. The recipient is the task assignee, or the employee being onboarded if the task is self-assigned.",[71,1156,1158],{"id":1157},"retroactive-propagation","Retroactive Propagation",[12,1160,1161],{},"Occasionally HR adds a new task to a template after some hires are already in flight. The template editor should ask: do you want to apply this new task to existing active onboarding instances, or only to future ones?",[12,1163,1164],{},"Retroactive propagation is opt-in, not automatic. If you add \"Take the CPR refresher\" to the all-employees template today, you probably don't want the employee who started six weeks ago to suddenly have a new overdue task on their dashboard. Make the choice explicit.",[71,1166,968],{"id":967},[12,1168,1169],{},"Version 1.0.9 ships the onboarding automation layer described above. Onboarding templates support ordered tasks, icons, drag-to-reorder, per-task assignees, due date types, notification timing, and target scopes for All, Department, Role, or Specific employees. Offboarding templates run through the same engine with type-aware copy. New Hire Packet Templates cover arrival time, location, contact person, instructions, and \"Get to Know You\" questions.",[12,1171,1172],{},"Both flows auto-trigger: onboarding instances fire when a user is marked hired, offboarding instances fire when a user is set inactive. Template categories (Documents, Equipment, Access, Training, Other) carry color-coded badges across the task list.",[12,1174,1175],{},"Documents attach directly to onboarding tasks with a signature-required flag. Each new hire gets their own personal, signable copy of the document — no shared multi-signer PDF, no privacy leak between hires. Tasks with a signing-required document attached cannot be marked complete until the recipient has signed their copy, with admin override available when needed.",[12,1177,1178],{},"Auto due-date calculation evaluates \"X days before/after hire date\" or \"X days before/after last day\" rules against the employee's hire or end date, with a sensible fallback to today in the org's timezone when no date is present. Per-task notifications cover instance creation, task assignment, reassignment, and completion. A daily reminder cron sends 7, 3, 1, and 0-day reminders plus a 1-day overdue nudge.",[12,1180,1181],{},"The task detail modal shows a signature status badge (\"Signature required\" or \"Signed\") so HR can spot blockers at a glance. Retroactive task propagation is available as an explicit opt-in when a template adds new tasks after instances already exist.",[12,1183,1184],{},"If your onboarding currently lives in a shared spreadsheet and relies on memory to drive completion, the onboarding module in 1.0.9 is worth a look.",{"title":16,"searchDepth":17,"depth":17,"links":1186},[1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198],{"id":1014,"depth":17,"text":1015},{"id":1024,"depth":17,"text":1025},{"id":1063,"depth":17,"text":1064},{"id":1070,"depth":17,"text":1071},{"id":1077,"depth":17,"text":1078},{"id":1087,"depth":17,"text":1088},{"id":1097,"depth":17,"text":1098},{"id":1110,"depth":17,"text":1111},{"id":1120,"depth":17,"text":1121},{"id":1147,"depth":17,"text":1148},{"id":1157,"depth":17,"text":1158},{"id":967,"depth":17,"text":968},"2026-04-08","Building an onboarding program that ships without manual nagging: auto-triggered task lists, attached documents that must be signed before completion, per-hire document copies, and timezone-aware due dates.","https://images.unsplash.com/photo-1521737604893-d14cc237f11d?w=1200&h=630&fit=crop",{},"/blog/onboarding-automation-signature-gated-tasks",{"title":1009,"description":1200},"blog/onboarding-automation-signature-gated-tasks",[1207,1005,1208],"onboarding","automation","IEpchpI4pRl9vxU9-tk408gj8-hVGknk2eLpVaeCs7A",1776703416150]