[{"data":1,"prerenderedAt":976},["ShallowReactive",2],{"announcements":3,"blog-/blog/onboarding-automation-signature-gated-tasks":64,"blog-related-/blog/onboarding-automation-signature-gated-tasks":276},[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/003.mcp-ai-integration.md","New: Book PTO with your AI — Claude, Cursor, VS Code and more now connect via MCP",true,{"type":9,"value":10,"toc":15},"minimark",[11],[12,13,14],"p",{},"Book PTO with your AI — Claude, Cursor, VS Code and more now connect via MCP.",{"title":16,"searchDepth":17,"depth":17,"links":18},"",2,[],"md","/mcp","Try it now",{},3,"/announcements/mcp-ai-integration",{"title":6,"description":14},"announcements/003.mcp-ai-integration","A_auU-3y2vku0iWzT8xO1d-dIvCSctvf-W9oj1-clok",{"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/004.esignature-platform.md","New: DocuSign-style e-signatures — drag & drop fields, sequential signing, audit trails",{"type":9,"value":32,"toc":36},[33],[12,34,35],{},"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":37},[],"/documents","Learn more",{},4,"/announcements/esignature-platform",{"title":30,"description":35},"announcements/004.esignature-platform","IgF7l6rZR36mwZOUEEoZrAf-fRM836ibz4ZWWde7xYg",{"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/005.hr-suite.md","New: Full HR suite — onboarding, performance, training, profiles and more",{"type":9,"value":50,"toc":54},[51],[12,52,53],{},"A complete HR suite is here — onboarding & offboarding workflows, performance management with goals and 1:1s, training tracking, comprehensive employee profiles, and an interactive org chart.",{"title":16,"searchDepth":17,"depth":17,"links":55},[],"/features","Explore the new modules",{},5,"/announcements/hr-suite",{"title":48,"description":53},"announcements/005.hr-suite","1_LXn40Aa1yPbSJWxZiEJR34SR0e_rfNRueGJtI5pCI",{"id":65,"title":66,"author":67,"body":68,"date":263,"description":264,"extension":19,"image":265,"meta":266,"navigation":7,"path":267,"readTime":268,"seo":269,"stem":270,"tags":271,"__hash__":275},"blog/blog/onboarding-automation-signature-gated-tasks.md","Onboarding Automation: Signature-Gated Tasks, Per-User Documents, and Auto Due Dates (2026)","AnHourTec Team",{"type":9,"value":69,"toc":249},[70,75,78,81,85,88,91,120,123,127,130,134,137,141,144,147,151,154,157,161,164,167,170,174,177,180,184,187,201,204,207,211,214,217,221,224,227,231,234,237,240,243,246],[71,72,74],"h2",{"id":73},"onboarding-is-where-small-hr-teams-break-first","Onboarding Is Where Small HR Teams Break First",[12,76,77],{},"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,79,80],{},"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,82,84],{"id":83},"templates-not-checklists","Templates, Not Checklists",[12,86,87],{},"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,89,90],{},"Target scope is the feature that separates a real onboarding tool from a shared document. A template can apply to:",[92,93,94,102,108,114],"ul",{},[95,96,97,101],"li",{},[98,99,100],"strong",{},"All employees"," — the universal set that runs for every new hire",[95,103,104,107],{},[98,105,106],{},"A specific department"," — engineering hires get the engineering-specific set",[95,109,110,113],{},[98,111,112],{},"A specific role"," — managers get the people-manager-specific set",[95,115,116,119],{},[98,117,118],{},"Specific employees"," — for the rare one-off case",[12,121,122],{},"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,124,126],{"id":125},"offboarding-templates-in-parallel","Offboarding Templates in Parallel",[12,128,129],{},"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,131,133],{"id":132},"new-hire-packets-the-non-task-content","New Hire Packets: The Non-Task Content",[12,135,136],{},"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,138,140],{"id":139},"auto-triggering","Auto-Triggering",[12,142,143],{},"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,145,146],{},"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,148,150],{"id":149},"documents-attached-to-tasks","Documents Attached to Tasks",[12,152,153],{},"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,155,156],{},"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,158,160],{"id":159},"per-user-document-copies","Per-User Document Copies",[12,162,163],{},"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,165,166],{},"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,168,169],{},"Each employee signs their own copy, independently, and the signed copy lands in their own document vault.",[71,171,173],{"id":172},"signature-gating","Signature Gating",[12,175,176],{},"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,178,179],{},"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,181,183],{"id":182},"auto-due-date-calculation","Auto Due-Date Calculation",[12,185,186],{},"Due dates should not be manually entered per task per hire. They should be rules evaluated against the hire date:",[92,188,189,192,195,198],{},[95,190,191],{},"\"3 days after hire date\" for laptop setup",[95,193,194],{},"\"7 days after hire date\" for the benefits enrollment task",[95,196,197],{},"\"14 days after hire date\" for the first manager check-in",[95,199,200],{},"\"2 days before hire date\" for the IT account provisioning task",[12,202,203],{},"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,205,206],{},"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,208,210],{"id":209},"notifications-that-fire-at-the-right-moment","Notifications That Fire at the Right Moment",[12,212,213],{},"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,215,216],{},"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,218,220],{"id":219},"retroactive-propagation","Retroactive Propagation",[12,222,223],{},"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,225,226],{},"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,228,230],{"id":229},"how-bookyourpto-supports-this","How BookYourPTO Supports This",[12,232,233],{},"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,235,236],{},"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,238,239],{},"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,241,242],{},"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,244,245],{},"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,247,248],{},"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":250},[251,252,253,254,255,256,257,258,259,260,261,262],{"id":73,"depth":17,"text":74},{"id":83,"depth":17,"text":84},{"id":125,"depth":17,"text":126},{"id":132,"depth":17,"text":133},{"id":139,"depth":17,"text":140},{"id":149,"depth":17,"text":150},{"id":159,"depth":17,"text":160},{"id":172,"depth":17,"text":173},{"id":182,"depth":17,"text":183},{"id":209,"depth":17,"text":210},{"id":219,"depth":17,"text":220},{"id":229,"depth":17,"text":230},"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","7 min read",{"title":66,"description":264},"blog/onboarding-automation-signature-gated-tasks",[272,273,274],"onboarding","hr","automation","IEpchpI4pRl9vxU9-tk408gj8-hVGknk2eLpVaeCs7A",[277,488,782],{"id":278,"title":279,"author":67,"body":280,"date":477,"description":478,"extension":19,"image":479,"meta":480,"navigation":7,"path":481,"readTime":268,"seo":482,"stem":483,"tags":484,"__hash__":487},"blog/blog/performance-goals-one-on-ones-training.md","A Performance Foundation for Growing Teams: Goals, 1:1s, and Training (2026)",{"type":9,"value":281,"toc":465},[282,286,289,292,296,299,302,322,325,329,332,335,338,342,345,348,351,354,358,361,365,368,371,409,412,416,419,422,426,429,433,436,442,448,450,453,456,459,462],[71,283,285],{"id":284},"the-performance-gap-at-30-employees","The Performance Gap at 30 Employees",[12,287,288],{},"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,290,291],{},"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,293,295],{"id":294},"configuration-before-features","Configuration Before Features",[12,297,298],{},"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,300,301],{},"The settings worth exposing:",[92,303,304,310,316],{},[95,305,306,309],{},[98,307,308],{},"Who gets goals"," — none, all employees, or a specific subset",[95,311,312,315],{},[98,313,314],{},"Cascading goals"," — whether employee goals can be linked to their manager's goals",[95,317,318,321],{},[98,319,320],{},"1:1 enablement"," — whether the 1:1 module is on at all",[12,323,324],{},"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,326,328],{"id":327},"goals-that-people-actually-update","Goals That People Actually Update",[12,330,331],{},"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,333,334],{},"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,336,337],{},"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,339,341],{"id":340},"_11s-as-a-recurring-series","1:1s as a Recurring Series",[12,343,344],{},"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,346,347],{},"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,349,350],{},"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,352,353],{},"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,355,357],{"id":356},"private-note-filtering","Private-Note Filtering",[12,359,360],{},"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,362,364],{"id":363},"training-as-policy-not-assignment","Training as Policy, Not Assignment",[12,366,367],{},"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,369,370],{},"The correct model is to define training requirements as policy and let the system assign them:",[92,372,373,379,385,391,397,403],{},[95,374,375,378],{},[98,376,377],{},"Frequency"," — one-time, annual, every 2 years, every 3 years, every 5 years",[95,380,381,384],{},[98,382,383],{},"Categories"," — safety, compliance, skills, role-specific, onboarding",[95,386,387,390],{},[98,388,389],{},"Due-from-hire-days"," — how many days after hire date the first completion is due",[95,392,393,396],{},[98,394,395],{},"Required-for filter"," — all employees, a department, a role, or specific employees",[95,398,399,402],{},[98,400,401],{},"URL"," — optional link to the course provider",[95,404,405,408],{},[98,406,407],{},"Self-complete toggle"," — whether the employee can mark the training complete themselves",[12,410,411],{},"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,413,415],{"id":414},"the-profile-training-tab","The Profile Training Tab",[12,417,418],{},"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,420,421],{},"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,423,425],{"id":424},"training-reminders","Training Reminders",[12,427,428],{},"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,430,432],{"id":431},"small-ux-details-that-matter","Small UX Details That Matter",[12,434,435],{},"Two small things that add up:",[12,437,438,441],{},[98,439,440],{},"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,443,444,447],{},[98,445,446],{},"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,449,230],{"id":229},[12,451,452],{},"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,454,455],{},"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,457,458],{},"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,460,461],{},"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,463,464],{},"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":466},[467,468,469,470,471,472,473,474,475,476],{"id":284,"depth":17,"text":285},{"id":294,"depth":17,"text":295},{"id":327,"depth":17,"text":328},{"id":340,"depth":17,"text":341},{"id":356,"depth":17,"text":357},{"id":363,"depth":17,"text":364},{"id":414,"depth":17,"text":415},{"id":424,"depth":17,"text":425},{"id":431,"depth":17,"text":432},{"id":229,"depth":17,"text":230},"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":279,"description":478},"blog/performance-goals-one-on-ones-training",[485,486,273],"performance","training","HoixBg6qpJ-ovo3_57lrp7Bh54rPmy8kC2jYb-VEodY",{"id":489,"title":490,"author":67,"body":491,"date":770,"description":771,"extension":19,"image":772,"meta":773,"navigation":7,"path":774,"readTime":775,"seo":776,"stem":777,"tags":778,"__hash__":781},"blog/blog/deliberate-offboarding-vs-silent-deactivation.md","Deliberate Offboarding: Why Silent Deactivation Is a Compliance Liability (2026)",{"type":9,"value":492,"toc":757},[493,497,509,512,516,519,563,566,570,573,611,614,618,621,656,659,663,666,669,673,676,679,683,690,693,697,700,706,710,717,724,728,734,736,739,745,754],[71,494,496],{"id":495},"the-quiet-toggle-problem","The Quiet Toggle Problem",[12,498,499,500,504,505,508],{},"Most HR systems treat offboarding as a boolean. Someone leaves the company, an admin opens their profile, flips ",[501,502,503],"code",{},"isActive"," to ",[501,506,507],{},"false",", and closes the tab. The login is revoked, the seat count goes down by one, and the organization moves on.",[12,510,511],{},"On paper this looks clean. In practice it creates a long tail of data-integrity problems that only surface weeks or months later. This post is about what those problems look like, and what a proper offboarding flow needs to do instead.",[71,513,515],{"id":514},"what-silent-deactivation-leaves-behind","What Silent Deactivation Leaves Behind",[12,517,518],{},"When you deactivate a user without a structured offboarding flow, the system still has their fingerprints everywhere:",[92,520,521,527,533,539,545,551,557],{},[95,522,523,526],{},[98,524,525],{},"Pending leave requests"," sitting in an approval queue, waiting on a manager who will never click approve",[95,528,529,532],{},[98,530,531],{},"Future shifts"," assigned to someone who no longer works there, silently creating coverage gaps that nobody notices until the day of",[95,534,535,538],{},[98,536,537],{},"Orphaned approvals"," — expense claims, time-off requests, and timesheets where the configured approver is gone and the workflow is stuck",[95,540,541,544],{},[98,542,543],{},"Active document assignments"," on policies, handbooks, and contracts that now live in a dead employee's signature queue",[95,546,547,550],{},[98,548,549],{},"Direct reports"," still pointing at a manager who is no longer in the company",[95,552,553,556],{},[98,554,555],{},"Department head designations"," attached to a terminated employee, quietly breaking org-wide approval routing",[95,558,559,562],{},[98,560,561],{},"Open 1:1 series, onboarding instances, projects, tasks, and benefits"," that reference the former employee as owner or participant",[12,564,565],{},"Each of these becomes a data-hygiene problem six months later when somebody tries to run a report, replace a manager, or close the books.",[71,567,569],{"id":568},"what-a-real-offboarding-endpoint-requires","What a Real Offboarding Endpoint Requires",[12,571,572],{},"A deliberate offboarding flow treats termination as an event, not a flag flip. The endpoint accepts:",[92,574,575,581,587,593,599,605],{},[95,576,577,580],{},[98,578,579],{},"End date"," — the actual last working day",[95,582,583,586],{},[98,584,585],{},"Termination code"," — required, from a controlled list (resignation, involuntary, end of contract, retirement, deceased, no-show, mutual, other)",[95,588,589,592],{},[98,590,591],{},"Notice given date"," — for jurisdictions with statutory notice periods",[95,594,595,598],{},[98,596,597],{},"Record of Employment completion date"," — for Canadian employers, the date the ROE was issued",[95,600,601,604],{},[98,602,603],{},"Notes"," — free-text context for HR",[95,606,607,610],{},[98,608,609],{},"Replacement department heads"," — where the departing employee held a department head role",[12,612,613],{},"Making termination code required is the single most valuable constraint in the entire flow. It forces the conversation that \"why is this person leaving?\" needs to happen before the data changes. Six months later, when the CFO asks what your voluntary-turnover rate looked like last quarter, you'll have a real answer instead of a spreadsheet triage project.",[71,615,617],{"id":616},"the-offboard-preview","The Offboard Preview",[12,619,620],{},"Before any cleanup runs, show the admin exactly what is about to happen. A preview screen lists:",[92,622,623,626,629,632,635,638,641,644,647,650,653],{},[95,624,625],{},"Leave requests that will be cancelled or reassigned",[95,627,628],{},"Time entries that will be closed",[95,630,631],{},"Expense claims that will be finalized or cancelled",[95,633,634],{},"Documents that will have assignments removed",[95,636,637],{},"Direct reports that will be reassigned (and to whom)",[95,639,640],{},"Department headships that will be transferred",[95,642,643],{},"1:1 series that will be closed",[95,645,646],{},"Onboarding instances in flight",[95,648,649],{},"Projects and tasks the user is attached to",[95,651,652],{},"Benefits that will be ended",[95,654,655],{},"Future shifts that will be removed",[12,657,658],{},"The preview is not a confirmation dialog. It is a summary of the blast radius. If the counts look wrong — if there are 47 future shifts when there should be 3 — that's a signal to pause and investigate before committing.",[71,660,662],{"id":661},"transactional-cleanup","Transactional Cleanup",[12,664,665],{},"Once the preview is confirmed, the actual cleanup must run as a single transaction. If any step fails, the entire offboarding rolls back. This is non-negotiable. A partial offboarding — where leaves are cancelled but shifts are not, or vice versa — is worse than no offboarding at all because it hides the failure.",[12,667,668],{},"The transactional boundary is the difference between \"we offboarded Alex\" and \"we sort of offboarded Alex, here's a Jira ticket with a list of follow-up cleanup tasks.\"",[71,670,672],{"id":671},"reactivation-without-undoing-the-cleanup","Reactivation Without Undoing the Cleanup",[12,674,675],{},"Sometimes an offboarded employee comes back. Contractor becomes full-time. Someone changes their mind about the resignation before the last day. The reactivation flow needs to restore login access and seat allocation without silently un-doing the cleanup.",[12,677,678],{},"The principle is: reactivation creates a forward-looking active user. It does not resurrect cancelled leave requests, reassign old future shifts, or restore dead document assignments. If the newly-reactivated employee needs a fresh onboarding, that's a separate, deliberate action. Reactivation is also subject to seat-limit enforcement — you cannot reactivate someone into a plan that has no room for them.",[71,680,682],{"id":681},"audit-logging-is-not-optional","Audit Logging Is Not Optional",[12,684,685,686,689],{},"Every offboarding should write a single audit entry with action type ",[501,687,688],{},"OFFBOARD",", the admin who initiated it, the full input payload (end date, code, dates, notes, replacement assignments), and the cleanup summary (how many leaves, shifts, documents, tasks, and benefits were touched).",[12,691,692],{},"This record is what answers the compliance question \"when did this person actually leave, who processed it, and what happened to their data?\" If you cannot answer that question in under a minute, you do not have an offboarding flow. You have a toggle.",[71,694,696],{"id":695},"cron-filtering-for-inactive-users","Cron Filtering for Inactive Users",[12,698,699],{},"A subtle but important detail: every reminder cron in the system needs to skip offboarded users. Training reminders, certification expiries, visa expiries, document signature reminders, 1:1 reminders, onboarding task reminders — all of them.",[12,701,702,703,705],{},"The failure mode is embarrassing and common. A former employee continues receiving automated emails for weeks or months after leaving because one cron job forgot to filter on ",[501,704,503],{},". Fix this once, centrally, and audit every cron for the same filter.",[71,707,709],{"id":708},"hard-delete-is-the-wrong-answer","Hard-Delete Is the Wrong Answer",[12,711,712,713,716],{},"It is tempting to expose a ",[501,714,715],{},"DELETE /api/users/:id"," endpoint for full user removal. Don't. A hard delete orphans historical records that legitimate business processes still need — payroll history, signed documents, historical org charts, audit trails.",[12,718,719,720,723],{},"The right answer is: return ",[501,721,722],{},"410 Gone"," on any user-delete attempt, pointing the caller to the offboard endpoint. For GDPR right-to-erasure requests, expose a separate privacy endpoint that anonymizes personal identifiers while preserving the structural records the business needs.",[71,725,727],{"id":726},"enforcement-at-the-endpoint-level","Enforcement at the Endpoint Level",[12,729,730,731,733],{},"Once a user is offboarded, the downstream endpoints need to reject actions from them too. Approvals, time-tracking entries, and expense submissions should all check ",[501,732,503],{}," and return a clear error when the user is deactivated. Defense in depth — the login revoke is the front door, but the API boundaries need locks too.",[71,735,230],{"id":229},[12,737,738],{},"Version 1.0.9 replaces the old deactivate-toggle pattern with a full offboarding flow. The offboard endpoint requires an end date, a termination code, and accepts notice date, ROE completion date, notes, and replacement department heads. Before any changes commit, admins see a preview screen with counts across leaves, time entries, expenses, documents, direct reports, department headships, 1:1 series, onboarding instances, projects, tasks, benefits, and future shifts.",[12,740,741,742,744],{},"Cleanup runs as a single transaction across all affected objects. A reactivate flow restores login access and seat allocation without resurrecting cancelled items, subject to plan seat limits. Every offboarding writes a single audit log entry with the action type ",[501,743,688],{}," and a full summary of inputs and cleanup results.",[12,746,747,748,750,751,753],{},"Every reminder cron in the system — training, certification, visa, document signatures, 1:1s, onboarding — now filters on active status so offboarded users stop receiving automated email after their last day. Hard delete of users is disabled: ",[501,749,715],{}," returns ",[501,752,722],{}," with a pointer to the offboard endpoint, while GDPR erasure remains available via the dedicated privacy endpoint. Approvals, time-tracking, and expense endpoints all reject submissions from deactivated users.",[12,755,756],{},"If your current offboarding process is a checkbox and a prayer, 1.0.9 is a worthwhile upgrade.",{"title":16,"searchDepth":17,"depth":17,"links":758},[759,760,761,762,763,764,765,766,767,768,769],{"id":495,"depth":17,"text":496},{"id":514,"depth":17,"text":515},{"id":568,"depth":17,"text":569},{"id":616,"depth":17,"text":617},{"id":661,"depth":17,"text":662},{"id":671,"depth":17,"text":672},{"id":681,"depth":17,"text":682},{"id":695,"depth":17,"text":696},{"id":708,"depth":17,"text":709},{"id":726,"depth":17,"text":727},{"id":229,"depth":17,"text":230},"2026-04-01","Flipping isActive to false is not offboarding. Proper offboarding requires a reason code, an end date, an audit trail, and transactional cleanup of leaves, shifts, approvals, and assignments.","https://images.unsplash.com/photo-1507679799987-c73779587ccf?w=1200&h=630&fit=crop",{},"/blog/deliberate-offboarding-vs-silent-deactivation","6 min read",{"title":490,"description":771},"blog/deliberate-offboarding-vs-silent-deactivation",[273,779,780],"compliance","offboarding","e6pHfI63mMyNWJ6_oga8h_vYR0k70FTQpVneYw5mdog",{"id":783,"title":784,"author":67,"body":785,"date":965,"description":966,"extension":19,"image":967,"meta":968,"navigation":7,"path":969,"readTime":775,"seo":970,"stem":971,"tags":972,"__hash__":975},"blog/blog/redesigned-employee-profiles-inline-editing.md","Redesigning Employee Profiles: Inline Editing, Completeness, and Self-Service (2026)",{"type":9,"value":786,"toc":955},[787,791,794,797,801,804,807,811,814,817,820,824,827,830,834,837,840,843,847,850,853,921,924,928,931,938,940,943,946,949,952],[71,788,790],{"id":789},"the-employee-profile-is-the-spine-of-your-hris","The Employee Profile Is the Spine of Your HRIS",[12,792,793],{},"The employee profile is the record that every other HR workflow depends on. Payroll reads it. Onboarding writes to it. Performance reviews, leave accruals, document assignments, and org chart views all sit on top of it. When the profile is out of date, everything downstream degrades quietly.",[12,795,796],{},"Despite that, the typical HR profile screen is still a single-column wall of read-only text with an \"Edit\" button that opens a modal containing every field in the system. The pattern is easy to build and miserable to use. This post covers what a modern employee profile should look like in 2026, and why the shift toward inline editing, per-section ownership, and measurable completeness matters for small HR teams.",[71,798,800],{"id":799},"split-the-screen-sidebar-vitals-vs-tabbed-content","Split the Screen: Sidebar Vitals vs Tabbed Content",[12,802,803],{},"The first fix is layout. A two-column profile puts the information people actually look up on every visit into a fixed sidebar: phone, email, LinkedIn, location, employment status, department, employee number, hire date, tenure, manager, and direct reports. Everything else — personal information, compensation history, education, certifications, assets, documents, training, performance — moves into tabbed main content.",[12,805,806],{},"This sounds cosmetic. It is not. Sidebar vitals eliminate the most common reason managers open a profile, which is \"I need this person's email in the next ten seconds.\" Tabs let you load heavier sections on demand instead of rendering every field on every visit.",[71,808,810],{"id":809},"per-section-inline-editing-beats-modal-editing","Per-Section Inline Editing Beats Modal Editing",[12,812,813],{},"Modal editing assumes every field change is a large, deliberate event. Most edits aren't. Someone moves apartments and updates their address. A manager logs a promotion. An employee adds a language.",[12,815,816],{},"Inline, per-section editing turns those edits into ten-second interactions: open the section, change the field, save the section, move on. Nothing else on the page reloads. No global \"are you sure you want to leave?\" prompt. No hunt through a thirty-field modal to find the one input that matters.",[12,818,819],{},"The right granularity is usually the card: Personal Information is one card, Emergency Contacts is another, Compensation is a third. Each one has its own edit state, its own save button, and its own permission check.",[71,821,823],{"id":822},"completeness-as-a-first-class-signal","Completeness as a First-Class Signal",[12,825,826],{},"Most HR teams have no idea how complete their profile data actually is. A completeness progress bar fixes that. Pick the thirteen or so fields that matter most — first name, last name, email, phone, date of birth, address, emergency contact, manager, department, job title, hire date, employee number, start date — count how many are filled, and render a percentage at the top of the profile.",[12,828,829],{},"Color-code it. Red below 50%, amber through 80%, green above. Hide the bar entirely once the profile is complete so it stops nagging people who are already done. The result is a single number that tells HR where to focus data-hygiene work, and a visible nudge that prompts employees to fill in the blanks themselves.",[71,831,833],{"id":832},"self-service-is-the-scaling-strategy","Self-Service Is the Scaling Strategy",[12,835,836],{},"Small HR teams cannot hand-edit every profile every time an employee changes a phone number, adds a language, or updates an emergency contact. The only workable model is to let employees own the fields that are about them personally: education, languages, emergency contacts, social links, home contact information.",[12,838,839],{},"The trick is scoping it correctly. Employees should be able to edit their own personal section. They should not be able to edit their own compensation, job history, employment status, or manager. The permission boundary is: facts about me that I know better than HR are mine; facts about my employment relationship are HR's.",[12,841,842],{},"When that split is implemented well, profile freshness improves without any new admin work.",[71,844,846],{"id":845},"structured-data-beats-free-text-notes","Structured Data Beats Free-Text Notes",[12,848,849],{},"A lot of HR information ends up in an unstructured \"Notes\" field because nobody built a proper place for it. That's a short-term win and a long-term reporting problem. You can't query free text for \"which certifications expire in the next 60 days.\"",[12,851,852],{},"A modern profile uses structured models for the things HR actually asks questions about:",[92,854,855,861,867,873,879,885,891,897,903,909,915],{},[95,856,857,860],{},[98,858,859],{},"Education"," — institution, degree, field of study, dates",[95,862,863,866],{},[98,864,865],{},"Languages"," — language, proficiency level",[95,868,869,872],{},[98,870,871],{},"Certifications"," — name, issuer, credential ID, issue and expiry dates, with auto-expire logic and 30 / 14 / 7 / 0-day reminders sent to the employee and their manager",[95,874,875,878],{},[98,876,877],{},"Visa and work authorization"," — type, status, expiry, country",[95,880,881,884],{},[98,882,883],{},"Assets"," — equipment issued, serial numbers, assignment dates",[95,886,887,890],{},[98,888,889],{},"Compensation history"," — salary changes over time, with effective dates",[95,892,893,896],{},[98,894,895],{},"Bonuses"," — amount, type, date, reason",[95,898,899,902],{},[98,900,901],{},"Job history"," — title, department, manager, effective date ranges",[95,904,905,908],{},[98,906,907],{},"Employment status history"," — active, leave, terminated, with reasons and dates",[95,910,911,914],{},[98,912,913],{},"HR Notes"," — with explicit visibility levels: HR-only, managers, or shared with the employee",[95,916,917,920],{},[98,918,919],{},"Termination tracking"," — reason code, last day, eligibility for rehire",[12,922,923],{},"Each of these becomes queryable. Each can drive a cron job, a report, or a dashboard tile. That's the payoff for doing the data modeling properly.",[71,925,927],{"id":926},"expanded-identity-fields-without-leaking-sensitive-data","Expanded Identity Fields Without Leaking Sensitive Data",[12,929,930],{},"Modern profiles carry more fields than they used to: marital status, nationality, shirt size, citizenship certificate number, benefit ID, home email, home phone and extension, emergency contact relationship (as a dropdown, not free text).",[12,932,933,934,937],{},"Some of those are sensitive. Citizenship numbers and benefit IDs are identity documents in most jurisdictions. The rule is simple: encrypt the sensitive ones at rest with AES-256-GCM, display them masked in the UI (",[501,935,936],{},"***-**-1234","), and restrict full-value visibility to admins. Employees shouldn't need to see their own encrypted ID on screen to confirm it was saved — a masked value plus an edit flow is sufficient.",[71,939,230],{"id":229},[12,941,942],{},"Version 1.0.9 of BookYourPTO ships the profile redesign described above. The two-column layout with sidebar vitals and tabbed content is the default view on every employee record. Every section on the profile supports per-section inline editing. A thirteen-field completeness progress bar sits at the top of the profile, color-coded and auto-hidden at 100%.",[12,944,945],{},"Employees can view and edit their own profile in the areas they own: education, languages, emergency contacts, social links, and home contact information. Admin-controlled fields like compensation, job history, and employment status remain HR-owned.",[12,947,948],{},"New structured models for education, languages, certifications, visa status, assets, compensation history, bonuses, job history, employment status history, HR notes, and termination tracking are all live. Certifications come with a credential ID, expiry date, auto-expire, and a reminder cron that emails the employee and their manager at 30, 14, 7, and 0 days out.",[12,950,951],{},"Sensitive identity fields — citizenship certificate numbers and benefit IDs — are encrypted at rest with AES-256-GCM, displayed masked by default, and visible in full only to admins. HR Notes support three explicit visibility levels so a note can be HR-only, shared with managers, or shared with the employee.",[12,953,954],{},"If your team is still working from a read-only profile screen and a thirty-field edit modal, the 1.0.9 profile is worth a look.",{"title":16,"searchDepth":17,"depth":17,"links":956},[957,958,959,960,961,962,963,964],{"id":789,"depth":17,"text":790},{"id":799,"depth":17,"text":800},{"id":809,"depth":17,"text":810},{"id":822,"depth":17,"text":823},{"id":832,"depth":17,"text":833},{"id":845,"depth":17,"text":846},{"id":926,"depth":17,"text":927},{"id":229,"depth":17,"text":230},"2026-03-25","How modern HR profiles balance admin control with employee ownership through two-column layouts, per-section inline editing, completeness indicators, and secure self-service access.","https://images.unsplash.com/photo-1552664730-d307ca884978?w=1200&h=630&fit=crop",{},"/blog/redesigned-employee-profiles-inline-editing",{"title":784,"description":966},"blog/redesigned-employee-profiles-inline-editing",[273,973,974],"employee experience","product","2HfMmqL-ql4CxXMHpEw5lt0NZgiv3qAZa6tNMKLzbWc",1776212431048]