September 2026

Week of September 28, 202621 updates

Choose your email plan in Settings

You can now see every email plan side by side in Settings > Email sending and pick one yourself, instead of contacting us.

  • Compare Free, Starter, Growth and Premium: how many emails a month each includes, whether you can send from your own domain, how many automations can run at once, and whether the "Sent with HumanixOS" footer is shown.
  • Pay monthly or annually. Annual gives you two months free, and it's your choice for email whatever your main HumanixOS plan does.
  • Switch plans at any time. You'll see the price before anything changes.
  • Moving back to Free keeps your plan until the end of the period you've paid for, and you can change your mind until then.

Organizations sponsored by a funding partner can buy an email plan too. Owners and admins can change the plan; everyone else can see which plan you're on.

Easier to find and fill in family member details

If a service records details about each family member, such as ages, clothing sizes or gift requests, they are now much easier to find.

  • On the service page, every family's Members cell has an Edit details button that opens the family's details ready to fill in. A family with nobody listed yet shows Add details.
  • On a household's own page, each service under "Services received" shows what has been recorded for each person, or says that nothing has been recorded yet. If you can edit service records, you can fill in the details right there.
  • Answers show the way you'd expect: Yes or No instead of "true", the dropdown choice you picked, and dates in your own format.
  • Printed family sheets now always show each person's name and no longer include internal reference codes.

If a service doesn't record member details yet, staff who can change the service will see where to set them up.

Grant reminders now reach you

Grant reminders now arrive as notifications on the day they're due. These include an application deadline coming up (30, 14, 7 and 1 day before), following up two weeks after you submit an application, checking its status after a month, a decision date coming up, and reporting deadlines found in your grant documents. A reminder that no longer applies, such as a deadline reminder for an application you've already sent, is skipped.

Owners, admins and managers get them, along with whoever set the reminder. You can turn them off under Settings > Notifications.

Grant tasks can now only be assigned to people in your organization.

Household metrics at a glance

The Households page now opens with a row of at-a-glance figures in its top bar, matching the Services page: how many households you have, the total number of people across them, how many of those people are on file with their own record, and how many are children. The count still narrows to your search as you type, so you can see how many households match what you're looking for.

A clearer home page for your accounts

The page you land on after signing in now fits where you are.

New here? You'll see two choices right away: join your team with an invitation code, or create a new organization. You can type your code straight into the page.

Invited somewhere? Pending invitations sit at the top, with the organization or funding partner, your role, and Accept and Decline buttons. Invitations from funding partners now appear here too.

Belong to several accounts? They're grouped into organizations, the volunteer portal and funding partners, with the ones you opened most recently first and your current one marked. Once you have more than six, a search box appears. You can archive accounts you rarely use to tuck them out of the way. You stay a member, and you can bring them back at any time.

Your name, account settings and log out are now in the menu at the top right, next to a Feedback button for reporting a problem or suggesting an idea.

Typed dates format themselves and catch mistakes

When you type a date into a table, such as a delivered date on a service, the slashes now fill in as you go: typing 12212025 becomes 12/21/2025. Dates follow your language setting, so French and Spanish users type them in the order they're used to.

If what you typed isn't a real date, such as February 30, the field turns red and tells you, and the date isn't saved. Before, a mistyped date could be dropped or reverted without any warning.

Clearer errors when a campaign can't be saved, and a fuller Activity log

  • Saving an email campaign that is missing something (its content, its name) now tells you so instead of appearing to succeed while nothing was saved. The same goes for testing, duplicating, pausing and cancelling a campaign.
  • The Activity log now records grant tasks and texting contacts: adding, editing or removing either shows up under Grants and the new Text messaging area. Donation entries now name the donor instead of showing a blank record.

Ledger: Form 990 functions, funds and programs, receipts

The finance ledger now does more of the bookkeeping for you.

Program, management and fundraising

Give an expense category a default split, such as 70% program, 20% management and 10% fundraising, and every expense in it counts that way. Any single expense can have its own split instead. The Summary's new By function view shows your year the way Form 990 asks for it, including what is not allocated yet.

Funds and programs

Tag a transaction with a fund and with the program it supports. The Summary can show income and expenses by fund or by program, and the CSV export follows the view you picked.

Remembers your payees

When you type a payee you have used before, the ledger fills in the category, grant, fund, program and split you gave it last time. Anything you have already filled in is left alone.

Catches duplicates

If a new entry has the same date, amount and payee as one already in the ledger, you're asked before it is saved. Importing the same bank export twice skips the rows already there, unless you choose to keep them.

Receipts

Attach photos or PDFs of receipts to any transaction you enter. Choose Read receipt to have an AI service read the vendor, date, amount and a short description for you to check and apply one by one. Nothing changes until you apply it.

Build a form from a photo of your paper one

If your intake form lives on paper, you no longer have to retype it. On Forms → New form, choose Scan a paper form, photograph the pages, and HumanixOS reads the questions and builds a draft for you to check.

It tells you what it could not read instead of quietly guessing, and flags any question it was unsure about so you know where to look first. Nothing is saved until you've reviewed it.

Paper forms you hand out now come back in, too. Printed forms carry a small code in the corner, so when you scan a completed sheet HumanixOS knows exactly which form it is and transcribes the answers onto it. Open the form, choose Scan a filled-in form, and check the answers it was unsure about before recording it.

Scanned answers arrive as a pending submission, the same as one someone filled in online — approving it is still what creates or updates any records.

Scanning uses an AI service outside HumanixOS to read the photos, and everything on the page is sent, so cover any sensitive answers (such as Social Security numbers, medical details or bank account numbers) before you scan a completed sheet. A scan never fills in a Social Security number; add it by hand. To build a new form, scan a blank copy. The scan screen says all of this too.

Find people by how their name sounds

When you search for someone on the clients page and the spelling you typed finds no one, or almost no one, the page now also shows similar-sounding names: people whose names are spelled a little differently or sound the same. Searching "Shawn" can now find Sean, "Kathy" finds Cathy, and "Mohammed" finds Muhammad.

These suggestions appear in their own section above the list, never mixed in with your search results, so it is always clear which people matched what you typed and which only sound alike. Click a name to open that person's page.

Owners and admins can turn the suggestions off, or back on, for the whole organization from the settings panel on the clients page.

Automations: alert your team, and see who opened

Two new things in email automations.

Notify staff

Add a Notify staff step to let people on your team know when someone reaches it, for example when a first-time donor gives $1,000 or more. Choose who to tell, whether in the app, by email or both, and add a short note. Each person gets the email in their own language, and can turn these alerts off in their notification settings.

See how automation emails do

Automation emails now record when they're delivered, opened and clicked, and when they bounce. If an address bounces permanently or someone marks the email as spam, they stop getting your emails, the same as with campaigns.

You can also branch on it: add an If/Then step that checks whether someone opened, or clicked a link in, an earlier email. Put a wait before it so people have time to open the email.

Services: take attendance for classes

If one of your services is a class that meets on several dates, like a weekly English class or an 8-week workshop, you can now take attendance for it instead of adding a new entry for every class.

  • Turn it on per service. In the service's settings, switch on Track class sessions and attendance. Each person then has one entry: their enrollment in the class.
  • Take attendance in a minute. Press Take attendance, pick the date (today by default), and mark each person present or absent, with Mark all present for a full room. You can go back to any earlier date and change it.
  • See it on one line. A new Attendance column shows how many classes each person came to, like "6 of 8". Click it to see exactly which classes they missed.
  • Download it for funders. Export the attendance as a spreadsheet, one row per person per class.

Text messaging: clearer consent and a public terms page for your organization

Mobile carriers review every organization's text messaging registration, and they look closely at how people agree to receive texts. We've made that clearer, so registrations go through the first time.

  • Your own text message terms page. Your organization now has a public page with your terms and privacy details for texting. Your registration links to it, so carriers see your organization as the sender.
  • Consent boxes on public forms start unticked. People tick the text message boxes themselves, and a short notice under the boxes explains what they're agreeing to. Leaving a box empty no longer opts someone out of texts they agreed to earlier.
  • A script for staff. When you record that someone agreed to texts in person or by phone, HumanixOS now shows a short script to read to them first.
  • STOP means stop. When someone replies STOP, they now stop getting every kind of text from your organization, not just promotional ones.
  • See why a registration was turned down. If carriers reject your registration, the reason now appears on the Text messaging settings page.

Dashboard: a card for your grant tasks

You can now add a Grant tasks card to your dashboard to see where your grant work stands without opening each grant.

  • Adding it: choose Customize, then Add Card, and pick Grant tasks under Ready-made cards.
  • What it shows: how many tasks are open, overdue, due in the next 7 days, and finished in the last 30 days, with open tasks broken down by priority so urgent work stands out.
  • Up next: the five tasks to act on first, overdue ones at the top. Click one to open that grant's Tasks tab.
  • Everyone or mine: switch between all of your organization's tasks and the ones assigned to you. The card remembers your choice.

Tasks on archived, rejected or closed grants are left out. The card appears for anyone who can view grants.

Inventory: change an item's category until it's given out

An item's type is now simply its category, such as Food or Clothing, and it's easier to put an item in the right one.

Change the category until the item is given out

You can now change an item's category even after you've received stock of it. It locks once any of the item has been distributed, so your funder reports keep counting those goods under the category they went out under.

Item types describe suggestions

When you edit an item type, its fields are labelled as what they now are: variation fields suggested to new items, and details every item of the type records. Two new switches, Suggest serialized and Suggest tracks expiry, set what new items of the type start with. Changing a type never changes items you've already made.

Safer variation choices

You can't remove a choice, such as a size, from an item's variation field while stock is still sitting under it. Otherwise that stock could no longer be received or adjusted. Distribute or adjust it to zero first.

Inventory: each item chooses what its variations are

Items that come in variations now choose their own variation fields, such as size, colour or count. You no longer need a new item type for each product just to get the right fields.

Setting them up

When you create an item and tick Does this item come in variations?, the fields its item type suggests appear as a starting point. Rename them, change them, reorder them, remove them or add your own, up to 3 per item. Changes to the item type later never change items you have already made.

Changing them later

You can add a field to an item at any time, even once it has stock. Its existing variations show the new field blank. A field that a variation already uses can't be removed, and its kind can't change, but you can still rename it or change its choices.

Your existing items keep the fields they had, and their stock is unchanged.

Also fixed

  • A stock import row for an item that comes in variations now says why it can't be recorded ("receive it through Receive") instead of showing a database error. The other rows in the file still import.
  • Purchase order lines no longer ask for variation fields on items that don't have variations.

Ledger: a yearly summary, budgets, and your donations in one place

The ledger now does the work of the spreadsheet many of you keep beside it.

  • Summary. A new Summary tab shows each category's income and expenses month by month for the year, with totals and your net. Download it as a spreadsheet for the board.
  • Budgets. Enter a budget for each category on the Summary and see what's left and how much you've used, next to how far through the year you are.
  • Donations from Donors. Turn on Show donations from Donors in Ledger settings and the gifts you record in Donors appear in the ledger as income, with no need to type them in twice. They stay in step automatically: change a gift in Donors and the ledger follows. It's off until you switch it on. If you've been typing gifts into the ledger by hand, remove those entries when you turn it on so they aren't counted twice.

Grants: track grant spending by QuickBooks class

If your books separate programs with QuickBooks classes rather than a separate account for each program, you can now map a grant to its classes.

  • Where: on a grant's Details tab, the GL Accounts card has a new QuickBooks classes section. Pick the classes this grant's spending is tagged with and save.
  • Classes only: the grant's actuals are every expense booked to those classes, whatever the account.
  • Accounts and classes: each mapped account counts only its activity in those classes, so a shared account like Program Services can be split between grants. The account's percent and cap still apply.
  • Accounts only: works exactly as before.

The card says which rule applies, and the Budget page's By Grant tab marks grants whose actuals are narrowed by class. If your QuickBooks company doesn't use classes, the card says so. You can turn on class tracking in QuickBooks settings.

Inventory: serialized and expiry tracking are set per item

Whether an item needs a serial number for each unit, or an expiry date when it's received, is now a switch on the item itself instead of something decided by its item type.

Two new switches on every item

  • Serialized: receiving asks for one serial number per unit, and each unit is tracked on its own.
  • Tracks expiry: stock must be received with an expiry date.

When you create an item, the switches start from what its item type suggests, and you can change them for that item. You can change them later too; only stock received afterwards is affected. Your existing items keep the settings they had.

Receiving

Every receipt now offers an optional expiry date and lot number, whatever the item, so you can record them when you have them.

Also

  • Purchase orders ask for expected serial numbers only for serialized items.
  • Serialized items can no longer be given a quantity on hand when they're created, because each unit needs its serial number. Receive them instead.
  • A stock import row for an item that tracks expiry needs an expiry date, the same as receiving it.

Fixes: the ledger Summary on reload, and shared report links

Two things that did not work the way they should:

  • The ledger Summary tab came up empty when you opened or reloaded it directly in the evening. It now loads fully every time.
  • Sharing a report with a teammate sent them to a "page not found". The link now opens the report. The same goes for a shared form submission, which now opens its form.

Also: an item that already had variations recorded (sizes, conditions) but was never marked as having them now shows those variations on the Receive form, so new stock lands on the right one.

Inventory: each variation can have its own cost

Variations can now carry their own cost, the way they already carry their own retail price. If you buy a Red 500ml and a Blue 1L at different prices, you no longer have to correct the cost on every receipt.

  • Setting it: when you create an item with variations, each row has a Cost box. Leave it blank to use the item's cost. You can also set or clear a variation's cost from the item page.
  • Receiving: the cost box fills in from the variation you pick, falling back to the item's cost.
  • Remembering: type a different cost for one variation on a receipt, and that variation remembers it next time. Its siblings keep using the item's cost.
  • Purchase orders: a line that names a variation fills in that variation's cost, unless you've already typed one.
Week of September 21, 202659 updates

Automations now start on their own

Email automations can now start by themselves when something happens, instead of someone enrolling people by hand.

Choose what starts an automation

  • A donation: any gift, a donor's first gift, or recurring gifts. You can also set a minimum amount or pick a fundraising campaign.
  • A form: when a submission of the form you choose is approved and linked to someone in your records.
  • An event registration: when someone in your records registers for, or checks in to, the event you choose, or any event.

People are enrolled within a couple of minutes. Imported records never start an automation, so bringing in years of past donations won't email anyone.

Set a goal

In an automation's new Settings, turn on "Leave when they donate". Anyone in the automation who then gives leaves it straight away, so a "we miss you" series stops as soon as it has worked.

Once per person, unless you say otherwise

By default, someone who has been through an automation isn't started on it again. A monthly donor gets the welcome series once, not every month. You can allow repeats, with a waiting period, in Settings.

Donors who aren't linked to a person in your records are reached at their donor email address. Anonymous gifts, and donors marked "do not contact", are never enrolled.

See how many emails you've sent this month

Your email plan includes a number of emails each month. You can now see how much of it you've used, and campaigns won't go past it by surprise.

Emails this month

  • Settings > Email sending now shows how many emails you've sent this month out of your plan's allowance, with a bar that turns amber as you get close and red when you're nearly out.
  • Campaign and automation emails count. Test sends and account emails (like password resets) don't.
  • The count starts again on the 1st of each month.

Sending a campaign

  • When you press Send, the confirmation tells you if the audience is bigger than what's left this month.
  • A campaign that doesn't fit is stopped before anything goes out, with a message saying how many emails it needs and how many are left. Nothing is half-sent. Move to a bigger plan, or wait for the new month, and send it again.
  • A scheduled campaign that doesn't fit is marked as failed at its send time, with the same explanation.
  • If sending a campaign is refused for any reason, you now see why. Before, some refusals looked like the campaign had been queued with no recipients.

Automations

  • If you reach your monthly limit, automation emails wait instead of being skipped. They go out when the new month starts, or within minutes of moving to a bigger plan, and the automation carries on from there.

Permissions

  • Sending, scheduling, pausing and resuming campaigns now follow the Email Builder permission in your roles, so people without it can't send campaigns.

Fixes across reports, emails, households and settings

A round of fixes from our latest review sweep.

Reliability

  • Pages no longer fail now and then with a "Bad Gateway" error.
  • If a page can't load your account or organization, you now see a clear message with a Try again button instead of "Page not found".

Activity log

  • Creating, changing and deleting email campaigns, automations, forms, reports, inventory items and households now shows up in the Activity log.

Reports

  • Household rows count the family members they list, and exports match what you see on screen, column for column.
  • The "over time" chart groups by day, week or month depending on the range, and shows the year when the range crosses one.
  • City and state charts now include an "Other" row, so their totals add up to every delivery.
  • "View report" in the ready notification opens the report itself.

Emails and automations

  • Automation conditions let you pick an email list from a menu instead of typing an ID.
  • When choosing people for a campaign by hand, you can now search the list.

Households and forms

  • Changing the head of a household keeps the previous head in the household as a member.
  • A new household suggests a name from the head's surname.
  • The form preview shows the household questions the public form asks.

Settings and inventory

  • Household fields, Inventory and Event types settings now appear in the Settings menu.
  • A new inventory item gets a SKU automatically if you leave it blank, and variants are listed in a sensible order.

The free trial is now 30 days

New free trials of HumanixOS now last 30 days instead of 60. You still get full access to every feature during the trial, and there is still no credit card required to start.

  • Already on a trial? Nothing changes for you. If your organization started its free trial before this change, you keep the full 60 days you signed up for. Your countdown, your billing page and our reminder emails all show your own trial's length.
  • Better-timed reminders. We now send the first "your trial is ending" reminder two weeks before the trial ends, then one week before, the day before, and when it ends. You won't get a reminder on the same day you start.
  • Subscribing early still costs nothing extra. If you choose a plan during your trial, your first charge still waits until the trial is over, unless you choose to start billing right away.

Dates show on the right day, and dropdown choices keep their values

Two fixes for things that quietly went wrong for people in the Americas and for anyone who edits their custom fields.

  • Dates no longer show a day early. Volunteer hours, a volunteer's date of birth, the dates on a person's service history, grant deadlines and start and end dates, report due dates, task and compliance due dates, receipt dates on purchase orders and the automation activity chart all showed the day before the one you entered if your computer's time zone is west of Greenwich. They now show the day you entered, wherever you are.
  • Saving a field list keeps your dropdown choices intact. Adding or removing a household field or a distribution field used to rewrite the stored value of every dropdown choice on the other fields, so records that already held a choice stopped matching it. Choices now keep their stored values; only the wording you edit changes.

Email builder, campaigns, texting and report fixes

A sweep through email, text messaging and reports:

  • Email builder. Typing in a text block and then saving or previewing no longer freezes the page, the preview pane shows the rendered email, and Send Test tells you when a test could not be sent (an unusable address, a demo account) instead of reporting success.
  • Scheduled campaigns. A scheduled campaign can now be taken off the schedule from its card menu or its page. It returns to a draft you can edit, reschedule or delete.
  • Automations. An automation with an unfinished If/Then or action step can no longer be switched on; the checklist names the step to finish. The Enrollments tab shows newly enrolled people as soon as the dialog closes.
  • Text messaging. The Consent page lists consent for every purpose (with a purpose filter and column) and searches your whole list. A draft campaign can be started from its saved list or segment, or deleted. A campaign's page counts every recipient, including skipped ones, and agrees with the campaign list.
  • Reports. The PDF's headline total is the number of people in the report, its header names the report type in plain words, and Create Report waits for the AI summary to finish before saving.
  • AI search. Asking about a state works whether your records say "VT" or "Vermont".
  • Smaller fixes. Content blocks refresh after a save and label their type; email lists, the schedule confirmation and automations use your organization's own word for its people; "Mark all as read" reports how many notifications it marked; drag-and-drop editors no longer log a hydration warning on load.

Event templates, your own event types, and steadier service records and forms

A round of fixes across events, service records, forms and the calendar.

Events

  • Event templates open again. The templates list and each template's page showed an error as soon as you had saved one; both work now.
  • Creating an event now offers your organization's own event types (the ones under Settings > Event types), and the type filter on the Events page lists them too. Before, both showed a fixed built-in list, and picking from it quietly added a new type to your settings each time.
  • A new event template no longer starts with a hidden "Fundraiser" type attached.

Service records

  • Date fields on the service records grid save when you type a date or pick one from the calendar. They used to show the new date and then lose it on reload.
  • Amount fields accept what they display: typing "$1,000" into a currency cell now saves one thousand instead of being ignored.
  • The field list in Edit Service Config names each field's type ("Short Text", "Currency") rather than showing an internal key.

Forms

  • A form you saved as a draft and came back to later publishes at the web address built from its title, not at a temporary "draft-…" address.
  • Choosing a form type no longer leaves an empty draft in your Forms list if you walk away before adding anything.
  • Forms set to "Review before adding" now check each submission against the people you already have, so the review screen shows likely matches and lets you link to an existing person instead of creating a duplicate.
  • Denying a submission from the list asks you to confirm first, and quick approvals and denials no longer add an automatic note to the submission.
  • The Forms pages load faster: they no longer download your whole client list just to show the forms.

Calendar

  • Service records created by an event no longer show a misleading time of day on the calendar.
  • Clicking an event in the calendar's day panel opens that event.

Surveys

  • The answer-type badge on each survey reads "Yes / No" or "Rating" instead of an internal key.

Form builder: see the family member questions as the family will

When you build a form for a household service, the questions asked about each family member now appear on the canvas as real questions instead of a row of labels.

Open the "Person 1" card to see each question the way a family will: a long answer gets a text box, a choice question lists its choices, and dates and numbers look like dates and numbers.

These questions still belong to the service, so the section says so and links straight to the place where you add, remove or change them.

Grants, donors and ledger fixes

A round of fixes across grants, donors and the finance ledger:

  • Add Donor no longer crashes the page when you click Create with the form empty; it now points at what is missing.
  • The Compliance and Reports pages under Grants load again, and both are now linked from the grants navigation bar, next to Pipeline.
  • Every grant has a Budget tab where you can set up a budget, add categories and entries, and request reallocations. The burn-rate card appears once a budget exists.
  • Add Note and Upload Document on a grant work again.
  • An archived grant can be restored: tick "Show archived" on the grants list, open the grant, and choose Restore.
  • Searching donors by full name ("Jo Davis") finds the donor, in the donors list and in the Record Donation picker, and the donation search box now searches instead of listing everything.
  • A grant opportunity can be saved without a minimum or maximum amount.
  • In the ledger, a new row is saved once it has an amount, and it stays where you typed it instead of jumping to the top while you are still filling it in.
  • Connect Calendar on a grant now opens Connected apps.

Inventory fixes from our QA sweep

A round of fixes across Inventory, found in a full review of the module.

  • Customizing a built-in item type now works even when your items already hold stock. It used to fail with an error for exactly the types you had been using.
  • Recalled stock no longer counts as available. Item pages, the items list, the on-hand report and the Distribute form show only what can be handed out, with recalled units called out separately on the item page. A distribution that runs into recalled stock is refused in plain words instead of an internal id.
  • Receiving part of a purchase order keeps the order open, so the rest can still be received against it. The order is marked received once every line is complete, and the Receive page pre-fills what is still outstanding.
  • Purchase orders have a "Mark as open" button and, once open, a "Receive against this order" button, so a new order no longer needs Edit to move forward. Statuses read as words everywhere.
  • Printing a pick sheet or the on-hand report now prints just the sheet: the sidebar and top bar stay off the page and wide tables fit on it.
  • The Receive and Distribute forms say what is still missing when the button is disabled: which line, and which field.
  • Recall pages and recall notices name the item that was recalled.
  • Cancelling a physical count asks first, and the review dialog reads correctly when every count matches.
  • Money columns in the on-hand and distributed CSV exports are rounded to cents.
  • Smaller fixes: custom fields in the distributions list show their labels, the item page shows stock handling and recall status in words, dates in purchase orders, transfers and recipient history match the rest of Inventory, monthly totals on the distributed report show the month name, and a purchase order records who created it.

One billing day for all your plans

Your HumanixOS account plan, email plan and text messaging plan are billed separately, and until now each one renewed on the day you bought it. Three charges on three different days of the month is noise for whoever does your books.

From now on, a new email or text messaging plan renews on the same day of the month as your account plan (or, for organizations without an account subscription, on the day your first add-on renews). The first payment covers only the days until then, and the checkout page says so before you pay.

Plans you already have can be moved too. Settings > Plan and billing now has a Billing day row under Add-ons. When your plans renew on different days, an owner or admin can move the add-on plans onto your account plan's day in one click. The unused part of the current period is credited on the next invoice, nothing is charged that day, and the change shows in the Activity log.

People: better checks when adding and importing

A round of fixes across People, Households and Imports from our latest review sweep.

Finding and adding people

  • Searching for a person by their full ID (for example CL26-0022) now finds them.
  • The People page no longer fails to load when a saved view was stored in an older format.
  • Adding a person now asks for at least a first or last name, and an email address has to look like one — whether you add someone from the Home page, the Add People grid, or edit a cell inline. Fields you never filled in are left empty instead of being saved as 0 or "No", so reports no longer count untouched answers.
  • A person with no name is shown as "Unnamed" on their page and in the delete confirmation, rather than a blank line.

Reports

  • The summary on a People report (total, average age, top cities, gender and ethnicity) now covers everyone in the report, not just the first page that was loaded on screen.

Households

  • When the head of a household is deleted and another member takes over, that member is no longer listed twice.
  • Saving a household's edit form keeps what you typed on screen until the page changes, so a slow save no longer looks like it failed.

Imports

  • The review step now flags a row with a bad email address or an impossible date so you can fix or skip it before importing.
  • A two-letter state that isn't a real state code (like "ZZ") is kept as typed instead of being turned into a real state.
  • An import in which no rows could be saved is recorded as Failed, without a Rollback option.
  • The Skipped column in the import history counts the rows you left out on the review step.

Dashboard

  • Dashboard cards load their data once per visit instead of twice.

Service reports you can hand to a funder

Service reports are the document you send to a donor or grantor, so we reworked them to read like one.

The figures come first

  • A saved service report now opens with its headline figures: people served and families served for a family program, the number of people served for a program that serves individuals, and the number of deliveries.
  • Exported PDFs and Excel files lead with the same figures, followed by your report summary. The Excel file now opens on its Summary sheet. CSV files stay a plain data table, so they still import cleanly anywhere.
  • The AI-written summary now writes numbers as numerals ("5 families", "20 people"), the way a funder expects to read them.

Who was in each family

  • When a report on a family program is created with personal information included, it now lists each family's members and what you recorded about them, such as sizes and wishes. It appears in the report and in its exports.
  • Reports created without personal information show family counts only, as before, and "Exclude personal information" on export removes the family details too.
  • Family details are never sent to the AI that writes the summary. It only ever sees totals.

One set of charts

  • A saved report no longer shows the same timeline and location charts twice. The charts you see when creating the report are the report's charts, and you can still add, edit or remove them.
  • New reports include a chart for each of your service's choice fields (dropdowns, multi-selects and yes/no questions), showing how many deliveries recorded each option.

Settings and account fixes

A round of fixes across Settings, sign-in and the public pages:

  • Data export tells you why an export could not be finished, instead of only asking you to start a new one.
  • Team no longer sends an invitation to someone who is already a member; the invite form says so.
  • Billing and Team now count seats from the same place, so the two pages agree.
  • Turning a module on or off is recorded in the Activity log, and opening a page of a module that is off shows a proper "not found" page.
  • The Activity log reads more naturally: a downloaded person record is described as the record, a stock count as the count, and the volunteer hour value as an organization setting with its before and after values.
  • Outbound webhooks must use an HTTPS address, and a rejected address is explained in plain words.
  • Branding checks that a colour is a valid hex value before you can save it.
  • The changelog page now shows recent weeks and links each earlier month to its own page.
  • In French, the team roster, the profile page and several buttons read correctly.

Text messaging settings, redesigned

The Text messaging pages in Settings now follow the same layout as the rest of Settings: one column of settings, each with a short explanation and its control beside it.

  • Overview shows where your carrier registration stands, your SMS plan, and links to templates and campaigns. Changing or cancelling the plan happens from one Change plan button.
  • Set up walks through the same steps as before, with Back and Next in the bar at the top. Leaving mid-way now asks first.
  • Numbers, Preferences and Usage are laid out as rows. Preferences saves from the bar, and tells you when there are unsaved changes.
  • Consent and Messages list one person or message per row instead of a wide table, so they read well on any screen.
  • Every change on these pages now appears in the Activity log.

Volunteer fixes: removing volunteers, rejecting applications, and clearer hours

A round of fixes across volunteer management:

  • Removing a volunteer works again. Removal failed for anyone who had joined through an application or an invitation, leaving them in the list.
  • Rejecting an application works again, and the applicant's status page now shows the same contact address as your application form.
  • The hours report no longer puts a dollar value on voided or rejected hours. With "All statuses" selected those hours are still counted, but the value and the grant export cover only the hours that stand, and the export says so.
  • All recorded hours are reachable. The hours page now shows how many entries there are and loads more on request, instead of stopping at the first 100.
  • The check-in kiosk names its shift and its time, so two kiosks are easy to tell apart, and it waits for the check-in window instead of scanning for a shift that has not opened.
  • Inactive volunteers are labelled in the volunteers list and in the shift assignment dialog, so it is clear why they cannot be assigned.
  • New volunteers land on their portal right after creating their account, without signing in a second time.
  • Error messages now say what went wrong ("Invalid email address") instead of a bare status code.

Know when automated texts don't go out

Event reminders, form follow-ups and recall notices sent by text count toward your monthly text message limit, just like texts your team sends. Until now, once the limit was reached they simply stopped, and nobody was told.

  • A new Delivery issues page under Settings > Text messaging lists this month's automated texts that weren't sent, grouped by where they came from (event reminders, form follow-ups, recall notices) and why. Each reason says what to do about it (for example, raise your SMS plan when the monthly limit is reached) and links to the events and forms it happened on.
  • An optional daily nudge. Owners and admins can turn on "Daily nudge about unsent automated texts" in Settings > Notifications to get at most one in-app notice a day when some automated texts weren't sent, linking to the Delivery issues page. It's off unless you turn it on.
  • The event's Reminders tab and the form's Follow-ups page now say how many texts weren't sent this month, and why, such as "3 reminder texts weren't sent this month: SMS limit reached", with a link to the Delivery issues page.
  • Follow-up texts are only offered where they can arrive. A form that doesn't link the people who fill it in to client records (feedback and check-in forms, or an immediate follow-up on a form you review first) can send follow-ups by email only. Any text follow-up already set up on such a form is marked as not deliverable.
  • Immediate follow-up texts now reach the client the submission was matched to. Previously they could fail even when the form linked a client.

See clicks on every button and link in an email campaign

A campaign's results page now shows clicks for each button and link in the email, not just for each web address.

  • Every button and link has its own row, named by its text as sent, such as "Donate Now". Two buttons that go to the same page are counted separately, so you can see whether people use the big button at the top or the link at the bottom.
  • When the same text appears more than once, the rows are numbered ("Donate Now (1)", "Donate Now (2)") in the order they appear in the email.
  • The list is no longer cut off at ten links. Use Show more to see them all.
  • Open a row to see who clicked it, when, and how many times. This needs permission to export client data; everyone else sees the counts.

This applies to campaigns sent from now on. Earlier campaigns, and clicks on emails written without the email builder, are still listed by web address.

Export permissions now control real downloads

The Export switches on the Permissions page now each control a specific download, and they say which one. Hover any Export switch to see exactly what it covers, for example the service records spreadsheet, a generated report or the inventory stock lists.

Turning Export off for a role now actually stops that role from downloading. The service records spreadsheet, the inventory on-hand, distributed and count variance files, and the downloads from AI search results all follow the Export switch for their area. Before, some of these downloads were open to anyone who could see the page.

Areas that have nothing to download no longer show an Export switch, so the page only offers choices that do something.

The full organization data export, which downloads every record your organization holds in one file, is now clearly marked on the Settings row. Turning a whole column of switches on or off no longer changes it; it only changes when you flip its own switch. New custom roles no longer get it by default.

If a role on your team relied on one of these downloads, an owner or admin can turn Export back on for that role on the Permissions page.

Set up your fields from a form you already use

Moving to HumanixOS usually means rebuilding your paper or PDF intake form field by field. Now you can upload it instead.

  • On the Imports page, choose Fields from a document, pick where the fields should go (your client fields or one of your services) and upload a PDF, Word (.docx) or plain text file.
  • AI reads the document and proposes the fields it collects, with the right type for each one and the answer choices when the form lists them ("circle one", check boxes).
  • Review the list and add the fields you want in one click. Fields you already have are marked so you don't create duplicates.

The same Upload a document option is also in Generate with AI wherever you add client or service fields.

Only the field setup is created: nothing on the document is imported as client or service records, and the file isn't kept. Scanned documents without selectable text can't be read yet.

Draft grant report sections with AI

Grant reports no longer start from a blank page. Set the reporting period on a report, open the Content tab, and each section now has a Draft with AI button. The draft is written from what you have recorded for that grant during that period: spending in its budget tracker and any ledger entries tagged to it, goods distributed from inventory the grant paid for, grant tasks, upcoming compliance deadlines and the next report due. It appears in the field as it is written, in your language, and you edit it from there.

Draft empty sections fills every section you haven't written yet, one after another, and leaves the ones you have alone. If a section already has text, drafting it asks first before anything is replaced.

The draft only uses figures your records hold, exactly as they are recorded. It never estimates a number, and it never says how many people were served, because a grant isn't linked to the people it reached. Where a section needs something only you know, such as the reason behind a budget variance, the draft leaves a bracketed note for you to fill in. If nothing recorded bears on a section, you're told so and it's left for you to write.

Financial reports now also have a Projections section, drafted from the grant's spending so far.

This release also fixes the report form, which could move the reporting period and due date back by one day when an existing report was edited and saved.

Ask for your household fields on family registration forms

Family registration forms can now ask for the household fields you've set up in Settings, such as housing status, primary language or referral source.

  • In the form builder, a family registration form lists your household fields alongside everything else. Add them like any other field, reword the question for the form, and mark it required.
  • If a household field is required for every household, the builder tells you when it isn't on the form yet, so no registration gets stuck waiting for an answer nobody was asked.
  • Families answer with the right kind of control: a list to choose from, boxes to tick, a date picker. The fields follow the form's language and appear on the printed version too.
  • When you approve the registration, the answers are saved on the new household. You can see them on the submission before you approve.

A simpler, clearer Settings

Settings has a new layout. Every page follows the same pattern: a short list of settings, each with a one-line explanation and its control beside it, and the page's buttons in the bar at the top. Search at the top of the menu finds any setting by name.

  • Roles and permissions: each role has its own page. Pick one level per area (No access, View, Edit, or Edit and delete) instead of a grid of switches, and see exactly what will change before you save.
  • Activity log: every entry reads as a plain sentence, grouped by day, with filters for person, area and date, and a download for owners and admins.
  • Export data: exports are prepared in the background, so large organizations no longer time out. You'll get a notification and an email when yours is ready, and it now includes inventory, households, text messages, financials and your custom field definitions.
  • Plan and billing: see how many users and people you have against your plan's limits, and the exact amount you'll be charged or credited before you change plans.
  • Connected apps, Calendar feeds and Webhooks each have their own page.
  • If you try to leave a page with changes you haven't saved, HumanixOS asks first.

Turning on text messaging works again

Setting up text messaging from Settings → SMS was stopping with an error before your organization's registration reached the carriers. That is fixed.

The setup form now asks for your organization's industry. Nonprofits and government agencies have it filled in for you, and you can change it.

The carriers check your organization against the address on your organization profile, so setup now uses that address. If any of the street, city, state or ZIP code is missing, the form tells you before anything is submitted. You can fill it in under Settings → Organization.

Carrier approval still takes from a few business days to about two weeks. While you wait, the setup page shows where your registration stands, and Check status now gets the latest answer. Once your organization is approved, your messaging campaign is sent for carrier review without you doing anything.

Text messaging setup is not yet available for sole proprietors.

Subscribe to and manage your SMS plan in Settings

Setting up texting now starts with choosing your SMS plan, and you can manage that plan yourself afterwards in Settings > SMS.

  • Compare Starter, Growth and Team: the monthly price, how many texts a month each includes, and how many phone numbers you can hold.
  • Before anything is charged you'll see exactly what you'll pay and when: the monthly price today, then every month on the same date.
  • Once your payment goes through, you finish the registration with the carriers as before. If the payment doesn't go through, nothing is registered.
  • Switch plans at any time. Moving up or down charges or credits the difference for the rest of the month straight away.
  • Cancelling keeps your plan until the end of the month you've paid for. Your carrier registration and phone numbers are kept, so you can subscribe again without registering again.

Owners and admins can buy and change the plan. Organizations that were already set up for texting keep working as they are.

Edit family member fields on service templates

Service templates now let you set up what you record about each person in a family, not just the fields for the delivery as a whole.

  • Edit on a template shows its family member fields, so you can add, rename, reorder or remove them without saving the service as a new template.
  • New Template can include family member fields from the start.
  • The field count on each template now includes its family member fields.

The section appears when Households is turned on for your organization.

Add a column right from the spreadsheet view

When you're entering data in the clients table or a service's entries table and realize you need one more column, you no longer have to leave the grid. Click the + at the right end of the column headers, give the column a name and pick its type, and it appears immediately, ready for you to start typing.

The column is the same custom field you would get from the field settings, so you can still rename, reorder or organize it there later. The + only shows for people who are allowed to edit the client or service setup.

Add several people to an event at once

Adding a class cohort or a program group to an event meant one pass through the Add attendee dialog per person, choosing the same timeslot, role and status every time.

You can now pick as many clients as you like in one go. Search, pick, search again; each person you choose appears as a chip under the search box. The timeslot, role, status and notes apply to everyone in the batch.

Seats are filled in the order you picked people. If the event or timeslot runs out of room part way through, the rest are waitlisted, and the result shows you exactly who landed where. Someone already registered for that timeslot is skipped rather than added twice, and if one person can't be added the rest still go through. The people who couldn't be added stay selected so you can fix the problem and retry just them.

A single client add now respects the event's capacity the same way.

Automation emails now always include an unsubscribe option

Emails sent by automation workflows now carry the same opt-out tools as your campaigns. Each message has an unsubscribe link at the bottom, and supports the one-click unsubscribe button that Gmail, Yahoo and Outlook show beside the sender.

If you put {{unsubscribe_url}} in an automation template, it now becomes a working link. Before, it came out blank.

Your organization has one unsubscribe list, shared by campaigns and automations. Anyone who has unsubscribed, from either, is no longer emailed by your automations. They leave the workflow quietly instead of showing as a failure.

Email campaigns ask before sending, and names show up correctly

A new email campaign no longer starts out addressed to everyone with an email address. You choose who it goes to, and before a campaign is sent or scheduled you now see how many people will receive it and confirm. Nothing goes out until you do.

Drafts now remember who you chose, including the exact people you picked by hand, so reopening a draft no longer means choosing again. Duplicating a campaign keeps every email list it used, not just the first.

Names with characters like "&" now appear correctly in subject lines and in the body of your emails, instead of showing odd codes. Web addresses in plain-text campaigns are now clickable links, and clicks on them are counted in your campaign's results. Links whose addresses contain "&" now take people to the right page.

We also removed the "send-time optimization" switch from the campaign editor. It never changed when a campaign was sent, so it should not have been there.

Email automations now run on their own

Email automations used to send their first email and then stop. Now they run all the way through: after a wait, the next step happens automatically, in your organization's time zone, and each email goes out once and only once.

You now enroll people by choosing clients rather than typing email addresses, so their names fill in your emails. Anyone without an email address, anyone who has unsubscribed, and anyone already in the automation is skipped, and you see who was added and who was not.

Before you switch an automation on, we check it for you and list anything missing, such as an email step with no email chosen. Your plan now sets how many automations can be active at once, and the Automations page shows how many you are using.

We simplified the steps you can add to the ones that fully work today: trigger, send email, wait, condition, update a field, send a webhook, and exit. Only people allowed to edit emails can build, switch on, or enroll people in automations.

Email campaigns now reach your whole audience, and scheduled campaigns send

Email campaigns sent to more than a thousand people could quietly stop at the first thousand, while the campaign still showed as sent. Choosing "All People" for a large organization could fail to build the audience at all. Both are fixed: a campaign now goes to everyone on its list, however large the list.

Anyone who has unsubscribed is always left out, including people who unsubscribe while a large campaign is still going out. If the unsubscribe list can't be checked for some reason, the email waits instead of being sent.

Scheduled campaigns now send at the time you chose. Before, a scheduled campaign stayed scheduled and was never sent.

When you press Send, the confirmation now tells you how many emails are on their way. A campaign only shows as sent once every email has actually gone out, and its numbers and progress bar count everyone on the list.

Set who your emails come from, once

You can now set your organization's default sender in one place: the name your emails come from, the address they are sent from, and where replies go. You'll find it on the email sending settings page, next to your sending domain, with a preview of exactly how the From line will look to the people you email.

New campaigns start with these details already filled in, so you no longer retype them every time. You can still change them for any one campaign. If your organization has its own verified domain, new campaigns send from your address by default.

Every campaign now has a reply address. If you don't set one, it defaults to a no-reply address on your sending domain (for example noreply@yourdomain.org), which does not accept replies, so set your own if you want to hear back from the people you email. Campaigns with no reply address of their own use your organization's default, and test emails now come from the same address, with the same reply address, as the real campaign.

Automated emails now show people's names and details exactly as written. A name containing characters like "&" or "<" no longer turns into formatting or odd codes.

Everyone you add to an event becomes a person on file

When you added someone to an event who wasn't in your records yet, the only option was a name and contact details typed onto the attendee list and attached to nothing. That person had no record to find next time — so you typed them in again at the next event — and on an event linked to a service they never appeared in the service or counted toward people served.

That option is gone. To add someone who isn't on file yet, search for them as usual and choose to add them as a new person. Before anything is created you'll see people on file who look like them, so a returning visitor is linked rather than entered twice.

People added the old way aren't left behind. If an event still has attendees who aren't linked to anyone, the attendee list says how many and offers a review. For each one it shows who they most likely are, and you choose: link them to that person, add them as someone new, or — if they're already on the list — merge the extra entry into their registration. Merging keeps their check-in, so nobody who turned up is marked as missing. Nothing changes until you choose, and once linked they count on the event's service just like everyone else on the list.

This matches what already happens when someone checks themselves in, so every way onto an event produces the same thing: a person you can find, serve and report on.

Notifications and ledger categories now follow your language

Notifications now appear in the language you've chosen for HumanixOS. That includes the title, the message and the button, so an invitation, a finished import or a volunteer's hours read in French or Spanish when that is your language. Switching language changes your whole notification history, not only new notifications. Very old notifications that we can't rebuild stay as they were first written.

When a teammate shares something with a personal note, the note appears exactly as they wrote it.

The starting categories for the finance ledger are now created in your organization's language. As before, you can rename, deactivate or delete any of them.

See returning families right on the submissions list

When a family registration form has pending submissions, each one now shows what approving it will do, without opening Review: a green note for a new family, a blue note naming the family already on file that the registration continues (with how many people are in it and how many are on file), or an amber note when the applicant heads more than one family.

The amber note opens Review, where you choose which family the registration is for. Quick approve waits until you have chosen. These notes are a preview: Review and approval check again before anything is saved.

See and fix when an event's people are missing from its service

When an event is linked to a service, everyone who registers or attends should appear in that service. Sometimes they didn't, and nothing told you. A record could fail to save in the background, a QR scan check-in never wrote one, and people who registered themselves before mid-September were never counted at all.

The event page now shows how many of the people served have a service record. When the numbers disagree, a Reconcile button makes the service match the roster: it adds the missing records and removes any for people who are no longer registered or attending. Records you entered by hand on the service are never touched.

Every place that adds or changes a registration now tells you right away if the service record could not be saved, so you can reconcile instead of finding out at report time. Service records created from an event are now dated to the event, not to the day they were saved.

Walk-ins at check-in now become real client records

When someone checked in at the door and wasn't found on the roster, they were added as a name and phone number attached to nobody. They showed as attended on the event, but they never reached the linked service, never got a client record, and had to be typed in again at the next event. If they were already a client, the roster showed them twice.

Check-in now looks for the person among your clients first, using the same matching rules your registration forms use. A confident match is checked in on their existing registration. Someone new becomes a client on the spot, with just the name and contact details they gave you. Either way, if the event delivers a service, they count as having received it.

The same check-in link can no longer be used twice at once, so two taps on a busy tablet cannot create two people.

A weekly digest of your organization's week

Owners and administrators now get a short email every Monday morning with what happened in their organization the week before, compared with the week before that:

  • New clients, services delivered and form submissions received, plus how many submissions are still waiting for approval.
  • Events held and coming up, and imports completed.
  • Grant pipeline changes and grant dates in the next two weeks, donations recorded and cash raised, and volunteer hours credited, for the parts of HumanixOS your organization uses.
  • Who on your team was most active.

Each digest also lists what's new in HumanixOS since the last one, so new features don't pass you by. A week with no activity sends no snapshot, only the product updates when there are some, and nothing at all otherwise.

The digest arrives in your own language. To stop receiving it, use the link at the bottom of the email or turn off Weekly digest email in Settings > Notifications.

Register someone new for an event without leaving the page

Adding an attendee to an event used to only let you pick someone already in the system. If they weren't there yet, your only option was a standalone row with just a name and contact info — it never became a real client record, so it wouldn't show up in that person's history or count toward service delivery.

The "Existing profile" tab now lets you create the person on the spot. Start typing a name, and if nobody matches you'll see an option to add them as a new client — with the same duplicate check used elsewhere, so you're warned before creating a second record for someone who's already on file. The new person is registered immediately, just like picking an existing one.

Emails now render correctly in dark mode

If you read HumanixOS email on a phone with dark mode turned on, some messages arrived looking broken: the logo at the top showed as a bright near-white block with the wordmark barely visible, and the body of the message came through darker than intended.

That affected every email we send — verification links, password resets, invitations, receipts, form notifications and campaigns alike.

Our emails now tell your mail app how they are meant to look in both light and dark mode, and the logo carries its own background so it renders the same way whichever mode you are in.

Write an event report summary with AI

Client reports and service reports have had a Generate AI summary button for a while. Event reports did not, so anyone writing one up after an event started from a blank box.

Now they have one too. Open an event, choose Generate report, and the Summary field has an AI summary button beside it. The summary appears as it is written, and you can edit it before you save the report.

It writes about what the event actually recorded: how many people came against how many places there were, how turnout was spread across timeslots, who was waitlisted, how many people checked in, and, when the event is attached to a service, how much of it reached a service record. Where your attendees are linked to client records, it can also describe who the event reached in aggregate.

No attendee's name, email, phone number or notes are ever sent to write it. Only counts and percentages leave your database, and the summary is written in your own language.

Say who someone is to the family, not just what they may do

Households could record that someone was a Guardian, a Child or an Adult. That says what a person is allowed to do — who may give consent, who can collect a delivery — but it cannot say that the woman raising four children is their grandmother.

You can now record a relationship alongside the role, for the head of the household as well as for each member. Pick from a list — parent, grandparent, foster parent, sibling, grandchild and more — and add your own wording beside it whenever the list does not fit the family.

Relationships appear on the household page, on a client's household card, on the family roster, and on the printed family sheet — so a volunteer at the door can see they are meeting a grandparent rather than working it out from "Guardian".

Nothing about permissions changed: roles still decide who may act for a household, and any notes you have already written are untouched.

See your import's progress while it runs

Importing a large file used to mean watching a spinner with no idea whether anything was happening. The import wizard now shows a progress bar with a running "rows imported" count for each step of the import, so you can tell a big file that is working from one that is stuck.

If your connection drops partway through, the wizard no longer reports the import as failed. It keeps checking with the server until that step finishes and then tells you what actually landed, so you are never sent to re-import a file that already went through.

New inventory items get their own page, and you can enter what you already have

Creating or editing an inventory item now happens on its own page instead of a pop-up window. The whole form, including every variation, scrolls with the page, so the Create button is never hidden below the fold. You can refresh the page or come back to it with the browser's Back button, and if you try to leave with unsaved changes we check with you first.

You can also enter how many you already have while you create the item. Each variation has a "Quantity on hand" box, and an item without variations has one. Leave it blank if you have not counted yet, or type 0 if you have none. The stock goes to the item's default location, or your organization's default location if the item has none, and shows in the item's history as stock you already had.

We also fixed receiving for items without variations whose item type marks a variation field as required. The Record Receipt button stayed greyed out for those items, so their stock could not be received.

Merging duplicate clients now keeps their event attendance

Merging two records for the same person used to lose their event history. The attendance would come unattached from the record you kept and reappear on the roster under the duplicate's name — or, if neither record had an email or a phone number, the merge would fail outright and the duplicate couldn't be cleaned up at all.

Event attendance now moves to the record you keep, along with check-in times and attendance status, and the confirmation screen tells you how many event registrations are about to move before you commit to the merge.

A clear confirmation after paying for a form

When a form charges a registration or ticket fee, paying used to drop people back on a blank copy of the form with nothing to say whether it had worked.

Now the page they land on confirms the payment as soon as it is recorded and tells them they're registered. If the payment is still being confirmed, it says so and keeps checking. If they cancelled, or the payment window closed before it went through, the page says nothing was charged and offers a way to try again. The confirmation appears in the language the form was filled in.

Separately, submitting a public form no longer waits on the follow-up emails the organization has configured before showing the thank-you screen, so submitting feels quicker on forms that send several.

See exactly which of your DNS records we have found

Setting up your own sending domain means adding a handful of records wherever your domain name is managed, then coming back to us to check they worked. Until now, that check gave you one answer for the whole set: verified, or not.

That was not much help if you had added three records correctly and mistyped the fourth.

Each record now shows its own result. You can see which ones we have found, which ones we are still waiting on, which ones we have not looked at yet, and which one has a problem. If a lookup fails for reasons that have nothing to do with you, the page says that too, rather than leaving you to guess.

A few other things on that screen got easier:

  • Each record now says what it is for, so you can tell apart two records that sit at the same place and look almost identical.
  • The field labels name both of the conventions registrars use, so if your provider calls it "Name" rather than "Host" you are not left hunting for it.
  • The page tells you when it last updated, so an old result is never mistaken for a fresh one.
  • The records are laid out across the full width of the screen, so long values no longer wrap into a wall of text.

Surveys can now ask about the programme they belong to

If you attach a feedback form to one of your programmes, the form builder now offers that programme's own fields alongside your other questions — so a survey about Adopt a Family can ask about the things you already track on Adopt a Family, instead of making you retype them as new questions.

Answers to those fields are saved with the response and shown with their proper names when you read the results. They stay with the survey: they don't create or change the programme's service records.

Turn Cash App Pay off without disconnecting Stripe

If your organization added Cash App Pay to its donation page, you can now turn it off again from Settings → Integrations, next to the Cash App Pay status.

Until now there was no way back. Once Cash App Pay was active, the only way to stop offering it was to disconnect Stripe entirely — which also switched off card payments, bank transfers and payouts, and meant setting the whole account up again afterwards.

Turning it off only changes what donors see at checkout. Your Stripe account, your other payment methods and your payout schedule are untouched, and you can turn it back on whenever you like without waiting for another review.

Linking an event to a service now counts the people who already signed up

If you linked an event to a service after people had already registered, or after the event had already happened, those people never showed up in the service. The event showed its attendance as normal, the service showed nobody, and nothing told you the two disagreed.

That is fixed. When you pick a service on an event, everyone on the roster who counts as served is added to the service straight away, and their record is dated to the day of the event rather than the day you linked it. Switching an event from one service to another now moves the records across instead of leaving both services empty, and unlinking still clears them.

This matters most if you report to funders. Service records are what your people-served totals are built from, so any event you linked up after the fact was quietly reporting short.

Fixed: the invite button missing from Team Management

Some organization owners opened Settings, then Team, and found no way to invite anyone. No invite form, no pending invitations, and no way to change or remove an existing member. Nothing looked wrong: the page still listed the team and the counts at the top were right, so there was nothing obvious to report.

That is fixed. Owners and admins see the invite form, the invitations tab and the member controls again, and a slow or failing part of the page can no longer take those controls away with it.

If you were affected, you did not need to do anything. Your team and their roles were never changed, only hidden from you.

New organizations start in their own time zone

Every newly created organization used to start in UTC, whatever address it gave, until someone found the setting and changed it. Calendar feeds and reminders for a nonprofit in Rhode Island were stamped GMT+0000.

The sign-up form now works out the time zone from the address you enter and shows it right there, under the postal code, so you can confirm or change it before the organization is created. Existing organizations are not changed; you can set yours under Settings > Organization.

Permission column headers stay put while you scroll

The permissions grid is long: around twenty features across four sections. Once you scrolled past the top, the View, Create, Edit, Delete, Export and Manage headers were gone, and every row below was six unlabelled switches. Getting the column wrong there is the kind of mistake that hands someone access they should not have.

The action headers now stay pinned at the top while the grid scrolls under them, and the section row you are in (Core, Financial, Outreach or Operations) stays visible just beneath. On a narrow window the grid scrolls sideways as before.

One line per person on the event roster

On an event roster, a person who had registered once was listed twice: once as a heading and once again underneath with the same name, badge, email and phone. On events without timeslots that meant every single person, so a roster of twelve read as twenty-four.

Each person with one registration now gets one plain line with their status control and actions on it. People registered for several sessions keep the expandable heading that shows how many they attended.

Require two-factor for your whole organization, and stronger public forms

Two changes to how HumanixOS protects your data, both of which come up whenever a funder or a partner asks how you keep client information safe.

Require two-factor authentication for everyone

Two-factor authentication has been available to each person individually for a while. Now an owner can require it across the whole organization: go to Settings → Security and turn on "Require two-factor authentication".

Anyone who has not set up an authenticator app yet is taken to do so the next time they open HumanixOS, and then sent straight back to what they were doing. Nobody gets locked out, including the person who turns the setting on, so you can enable it without coordinating with your team first.

It is off by default, and leaving it off changes nothing: people can still turn on two-factor for themselves.

Better protection on public forms

Public intake forms are the one place someone who is not signed in can send you information, which makes them a target for automated junk submissions. They now carry two additional layers of protection that work quietly in the background: a hidden field that catches automated submitters, and a "confirm you are not a robot" check before anything is saved.

Real people filling in your forms will notice one extra checkbox. Kiosk forms, the ones you open on a tablet at your front desk, skip the checkbox entirely, since the kiosk link is already private to you.

And you can decide about that checkbox. We know it can be a real obstacle for some of the people your forms are meant to reach. In Settings → Security an owner chooses one of three things: always show it, never show it, or let each form decide. If you pick the last one, whoever builds a form gets a switch on that form, and new forms start with the check on.

Turning the checkbox off never leaves a form unprotected. The hidden field and the rate limits keep working whatever you choose.

See which service records came from an event

When people register for an event that is linked to a service, a service record is created for each of them. Until now those records looked exactly like ones a staff member typed in by hand, so there was no way to tell where a service's people had come from, or to check that an event had actually fed its service without comparing two screens.

The service page now has an Event column. It names the event a record came from, links to it, and is blank for records entered by hand. Filter on it to see everyone a particular event brought in, or sort to group them together. It is included in exports.

The event page shows the other side: next to the linked service, how many service records the event has produced. If that number is lower than the roster, a registration did not make it through, and now you can see it.

Sign-up fixes for Google and the People setup step

Clicking "Sign up with Google" before agreeing to the Terms of Service used to do nothing visible: the checkbox and its message were at the bottom of the page, below the email form. The checkbox now sits above both sign-up options, and a blocked click brings it into view.

On the "Participant / Customer Configuration" step when setting up a new organization, the list of people fields now includes Country, and there are switches for Organizations and Household / Family, the two related-record columns the People list shows. Both start on; you can change them later under Settings > Modules.

The Household row in Settings > People configuration now appears whenever the Household module is on, instead of only when Inventory is.

Leave rows out of an import before it runs

An import used to be all or nothing. If a spreadsheet had a totals line at the bottom, a few people you did not want on this pass, or a handful of rows that were quicker to drop than to fix, your only options were to import everything or to cancel, edit the file, and start the wizard over.

The final review step now shows every row in your file with a checkbox. Untick a row and it stays out of the import. Tick the box at the top of the page to skip or restore a whole page at once, and use the filters to see only the rows with problems or only the ones you have skipped. Row numbers match the lines in your spreadsheet, so a row you skip here is the row you would find in the file.

Validation problems are now listed row by row, with one button that skips exactly the rows that fail. Skipping them clears the problem and unlocks the import, so a file with three broken rows no longer holds up the other four hundred.

Before you commit, the review step and the Import button both say how many rows are going in versus how many the file had, so nobody imports 340 of 400 rows without noticing.

Week of September 14, 202641 updates

Fix a distribution, and find one again

Until now a distribution could only be created, fulfilled, or called off while it was still pending. If you picked the wrong family, the wrong item or the wrong quantity, the wrong record simply stood. Not any more.

Correct a distribution. While one is still pending you can change everything about it, including the items, or delete it outright if it was keyed by mistake and never acted on.

Delete one that already went out. The goods go back to the lots they came from, it stops counting toward what you have given out, and it leaves your list. It stays findable under the Deleted filter, so your records still show that it happened and who removed it. Use it when the hand-out did not happen, or did not happen the way it was recorded. If the goods really left and are not coming back, a stock adjustment is still the right tool, and the dialog says so.

Fix a quantity that was recorded wrong. Lower it and the difference goes back to the lots it came from; raise it and the extra comes out of stock. If there is not enough on hand, or the funding source it came from does not allow it, you are told why and nothing changes. Which item a line is for cannot be changed this way — for that, delete the hand-out and record it again.

On a distribution that already went out you can also fix the recipient, the service, the date and the notes without touching the stock.

The manage distributions page now tells you what happened. Clicking anywhere on a row opens it. It shows what was handed out and how much, who recorded, fulfilled, cancelled or deleted it, and why anything was called off. You can search by recipient, filter by status, service and date range, sort the columns, and page through your whole history.

Cancelling now asks for a reason, and shows it on the list afterwards.

Two fixes worth naming. Anyone with more than 200 distributions could not reach the older ones at all from this page. And you can now export the list to a CSV, which is the record a funder is most likely to ask for.

Funder-required fields no longer block an edit

If your organization is attached to a funding partner that requires certain client fields, you can now save a person without filling them all in first.

Previously any edit to an existing client was refused until every funder-required field had a value, so correcting a phone number could fail because an income bracket had not been collected yet. That was the wrong way round: the same person could be added missing all of those fields through the grid, an import or a public form with no warning at all.

Now the record saves, and we tell you which fields the funder still wants, both while you are editing and after you save. Nothing is refused, and nothing is hidden.

One place to say who you call at an organization

Every organization now has a single Contact on its detail page, and you set it in one place.

Click the pencil beside it and pick whoever you call: somebody already linked to that organization, or — for an office manager, a receptionist or a shared inbox who is not one of your people — just type their name, email and phone. Whichever you choose replaces the other, so the page never shows you two answers to the same question.

When the contact is somebody linked to the organization, their name, email and phone are read from their own record. Fix a number once and it is fixed here too, instead of going quietly stale in a copy.

Anything you had already typed into an organization's contact fields is still there, exactly as it was.

Tag your organizations

You can now tag the organizations you work with, and group them by whatever your team actually cares about: funder, referral source, coalition, neighborhood, site visit done.

An organization's type says what it is. Tags say what it is to you, and an organization can carry as many as you need.

  • Add tags while you are creating an organization, or any time afterwards from its page or straight from the list.
  • Filter the organizations list to one tag or several. Picking more than one shows everything in any of those groups.
  • Rename a tag once and every organization carrying it follows. Delete a tag and the organizations stay exactly as they were.
  • Give a tag one of eight colours so the groups you check most are easy to pick out.

A refund that does not go through gives the gift back

Card refunds happen the moment you make them. Cash App Pay and bank refunds do not — they can take days, and occasionally they fail, usually because the donor's card or account has since closed.

Until now a donation stayed marked refunded even when the refund had failed and the money had never actually left your balance. Your income was understated, your records disagreed with your bank, and a donor could have been told they were refunded when they were not.

Now, when a refund fails or is cancelled, the donation goes back to completed by itself. If part of a payment was genuinely refunded and another attempt failed, it is left alone and flagged for you to look at, because only you can say what that should be.

Take applications first, payment after approval

A form that charges can now collect the money after you approve the application, instead of at the moment someone submits it.

Choose "After you approve their application" when you set up the fee. Applying is then free. When you approve a submission we email the applicant a payment link in the language they filled the form in, and they have 24 hours to use it.

Nothing is registered until they pay. Approving says yes; the person, the service record and the event attendee are created when the payment arrives. Someone who is approved and never pays leaves no half-finished records behind.

The submissions list tells you who is waiting on a payment you asked for, separately from who started paying on their own and walked away. If a link expires or an email goes astray, resend it from the submission: the old link stops working, so nobody can be charged twice.

Denying an application also cancels its payment link, so a refused applicant cannot pay their way in afterwards.

Cash App Pay at donation checkout

Organizations whose Stripe account supports it can now offer Cash App Pay to donors, alongside cards and bank payments.

Turn it on from Settings → Integrations → Payments. Stripe reviews the request and the card shows you where it stands: active, pending review, or not available.

Cash App has its own rules about who may accept it, and it excludes several categories that nonprofits commonly register under, including charitable fundraising, civic associations and religious organizations. If your account is in one of those, the setting says so plainly rather than leaving you guessing. It is also available only for US organizations and US donors paying in US dollars.

Gifts paid this way are recorded as Cash App Pay, so your channel totals stay accurate.

Check people in session by session

If your event runs in sessions — a club fair then a workshop, a conference with breakouts, a class that meets weekly — you can now track who showed up to each one, without asking anybody to register more than once.

Every time slot gets its own check-in form. Add a second time slot to an event and we create a check-in form for each slot automatically. Open the "Session 1 Check-In" link on the tablet by the Session 1 door and that's it: everyone who checks in there is recorded as attending Session 1. Nobody has to pick anything from a list, and you don't have to build the forms yourself.

Registering once is enough. Someone who signed up for the event can check in at any session's door, and each one is recorded separately. Their original registration stays exactly as it is, so the next door still recognises them. Walk-ins who never registered are recorded against the session they walked into, which at a busy club fair is most people.

Registration forms now ask up front. When an event has more than one time slot, new registration forms include a "Which sessions will you attend?" question by default. You can remove it or switch it to single-choice, but it's there from the start instead of something you had to know to add.

Attendance is already broken down by time slot on the event's attendee view, so the numbers show up wherever you were already looking.

One thing to know: deleting a time slot doesn't delete its check-in form or any of the attendance recorded through it. The form stays as an ordinary event check-in form and keeps its submissions.

Charge a fee on a registration form

A public form can now collect a registration fee or ticket price. Turn it on from the form builder: set an amount, and optionally what the payer is buying.

Nobody is registered until the payment goes through. The form saves what they typed, sends them to a secure payment page, and only creates the person, the service record and the event attendee once the payment is confirmed. An abandoned payment never adds anyone to your rosters or your service counts.

While someone is paying, their place is held, and somebody else cannot be sent to checkout for the same last seat. If they abandon the payment the seat frees up on its own within half an hour, so a time slot is never blocked for long by a payment nobody is making.

Payers see the fee and any processing charge as separate lines before they confirm, so the total is never a surprise. On the submissions list you can see who paid, who started paying and walked away, and who was refunded, which means you can answer "I already paid" with something better than a guess.

Registration income is kept entirely separate from donations. It never appears in donor giving totals.

Paid forms use the same payments account as donations, under Settings → Integrations.

People who register themselves now count as served

When someone registered for an event linked to a service through one of your public forms, they were never recorded as having received that service — so they didn't appear in your people-served numbers or in anything a funder sees. Registrations added by staff counted; self-registrations quietly didn't.

That's fixed. From now on a public registration for a service-linked event creates the service record the same way a staff-added one does.

Two things to know:

  • Your numbers will go up. Organizations using public registration on service-linked events will see people-served rise from here, because registrations that should always have counted now do. That is the correct number; it's just visible.
  • Past registrations are not changed. This applies going forward. Earlier self-registrations that were never recorded stay as they are.

If a service record ever fails to be created during approval or check-in, the screen now says so instead of showing plain success.

Send campaigns from your own email address

Your email campaigns can now go out from your own domain instead of a HumanixOS address, so supporters see your organization's name in the From line.

Beyond looking right, this matters for deliverability. Mail sent from an address at a domain you have set up is far less likely to land in a spam folder, because receiving services can confirm the message really came from you.

Setting it up. Go to Settings, then Sending domain. Enter your domain, and we will show you a short list of records to add wherever your domain name is managed. If that is not something you handle yourself, this is the point to forward the page to your IT contact. Records usually take effect within an hour, and the page updates on its own once everything checks out.

A tip if your organization uses Google Workspace or Microsoft 365: add the new records alongside your existing ones rather than replacing anything. Replacing a record you already have can stop your staff email from working.

If something breaks later. We check your records every day. If they ever stop working, your campaigns automatically keep sending from your HumanixOS address and we send you a notification so you know to look. Your email never stops going out.

Once your domain is set up, each campaign has a From name and From address you can set in Campaign Details. Leave the address blank and that campaign sends from your HumanixOS address as before.

Accurate form submission counts

The forms list now shows correct submission, pending, and needs-review counts no matter how many submissions a form has collected. Forms with more than a thousand submissions previously capped out and under-reported these numbers. The list also loads faster, since the counts are now tallied in the database instead of by pulling every submission back to compute them.

Count sheets no longer list a row that isn't there

An inventory count sheet was adding one extra countable row to every item that has variations — a row with a blank variation, a system count of zero, and its own box to type into. On a catalogue with 46 such items that was 46 rows of fiction, mixed in among the real ones.

It mattered more than the clutter suggested: a number typed into that row put stock on a variation that doesn't exist, and there's no way to move it back off. Now an item with seven variations gives you seven rows.

Two related improvements to the sheet:

  • A legacy item whose stock still sits outside its variations keeps that row, so the stock stays countable — it just sorts to the top of the item instead of hiding in the middle.
  • Each item's rows are now grouped together and ordered by variation name, so the sheet reads in the order you walk the shelf.

Give the same items to many people at once

Handing the same thing to thirty people used to mean filling in the distribute form thirty times. Now you can do it once.

On the Distribute screen there's a new choice: one recipient, or many. Pick "Many recipients", build a list of the clients, households or organizations receiving the goods, set the items and quantities once, and everyone on the list gets the same delivery.

A few things worth knowing:

  • Each person still gets their own distribution record, so your reports, funder metrics and client histories look exactly as they would if you'd entered them one at a time.
  • The search window stays open while you add people, and anyone already on the list is marked so you can't add them twice.
  • Up to 100 recipients in one go.

If something goes wrong partway — you run out of stock, or one recipient isn't eligible — the deliveries that already worked are kept, and the list shrinks to just the people who still need serving, with the reason on each row. Pressing the button again finishes the job without giving anyone a second helping.

Pick sheets are still one recipient at a time, so a batch is always distributed immediately.

Attaching a mockup to a feature request works now

Adding an image to a feature request failed every time with "Failed to upload image", and it took the whole request down with it — the description you'd written stayed on screen but nothing was submitted, so the only way through was to remove the image and lose the mockup.

The place the images were meant to be stored had never been created, which is why no file worked: the size and the format were never the problem. Uploads now go where they should, from the dashboard and from the funding-partner portal alike.

And if an upload ever does fail, your request is filed anyway, without the image and with a note saying so — rather than being thrown away along with everything you typed.

Forms tell you where their translations are

When you publish a form, its French and Spanish versions are generated in the background and take up to a minute to land. Until now nothing said so — open the public link straight away and the form was English-only, with no way to tell whether waiting would help.

The forms list now shows what's happening. A form still being translated says "Translating" and updates on its own when it's done, so there's nothing to refresh.

Two cases that never resolved on their own now say so plainly:

  • On a trial plan, translations aren't generated at all. That form is now marked "English only", and the badge explains that upgrading and republishing adds the other languages.
  • If translation fails, the form says "Translation failed" instead of quietly staying in one language, and tells you to republish to try again.

A form that translated successfully shows nothing extra — there's nothing to report.

Searchable item picker, and clearer distribution choices

Three improvements to distributing inventory.

You can now type to find an item. The distribute form's item list was a plain dropdown you had to scroll — fine with twenty items, unusable with five hundred. It now works like the receive and purchase-order forms: start typing and it filters by item name or SKU. Out-of-stock items still appear in the list, greyed out, so "we don't carry this" stays distinguishable from "we're out of this", and each row shows how many are on hand.

Both distribution options are now explained. The form asks when stock should leave the system and offers "Distribute now" or "Create pick sheet" — but only the pick sheet was described, which meant the default option, the one that actually takes the stock, was the one with no explanation. Both now say what they do, including that distributing now takes the stock immediately and that correcting it afterwards means recording an adjustment.

A staged distribution says what it's waiting for. A pick sheet shows as "Pending" until someone marks it fulfilled. That badge now comes with a plain statement that nothing has left inventory yet and that the stock is still counted as on hand — so a pending distribution no longer looks like something that went wrong.

An Involvement column on the people table

Your people table now has an Involvement column, saying what each person is to your organization — donor, volunteer, board member, alum, whatever you need. It's multi-select, because one person is usually several things at once.

It works in two halves, and the difference matters.

Donor and Volunteer look after themselves. If someone has a donor record, they show as a donor. If they're a volunteer, they show as a volunteer. These come straight from your donor and volunteer records, so they're always right and there's nothing to keep up to date — which also means you can't edit them by hand. A tag saying "Donor" next to someone with no donations would be worse than no tag at all.

Everything else is yours. Board Member, Staff, Alum and Community Partner are there to start with, and you can add, rename or remove options like any other field. These you fill in yourself.

Both halves work together everywhere: filter by "donors or alumni" and you get both groups, filter by "donors and board members" and you get the overlap, and the column exports with the rest of your data.

If you'd rather not see it, switch it off in the clients column settings like any other column — and if you've already customised or hidden the field, we left it exactly as you had it.

Merging clients who have received goods

Merging two client records failed with an error if the one you were merging away had ever received an inventory distribution — and confusingly, merging the same two people in the other order worked fine. That asymmetry made it look random.

It wasn't: the record of what that person had been given was still attached to them, and nothing moved it across. Now it does, and their delivery history ends up on the record you keep. If both people had received goods, both histories are kept together under the surviving record.

Typing a name on a delivery roster

When you add someone to a delivery who is not on file yet, the roster's Name box now takes a full name. It was quietly dropping the space as you typed, so "Dana Reyes" came out "DanaReyes" and had to be pasted in to get it right.

Two smaller fixes in the same place:

  • Taking a person off a delivery no longer disturbs the row you are typing in. Removing someone listed above an unnamed row used to move the cursor out from under you.
  • Each person's fields are now grouped under that person, so a screen reader says whose shirt size or shoe size it is asking for. Previously a family of five read as one long run of identical labels.

Duplicate scan finds same-name records with nothing else filled in

Two client records with the same name and no phone, email, address or date of birth on either one were never flagged as possible duplicates — the scan had nothing to corroborate the name with, so it stayed quiet. Those are exactly the records most likely to be the same person entered twice.

They now appear in the duplicate scan, at a low confidence so they sort below matches that have real supporting evidence.

Records that share a name but genuinely disagree elsewhere — two different phone numbers, say — are still left alone. A field that contradicts is a reason to think they're different people; a field nobody filled in isn't.

SMS tells you when it isn't set up yet

Texting requires a one-time carrier registration before anything can send. Until now the app only mentioned that at the very end — you could name a campaign, write it, choose who it went to, press send, and only then get an error. Worse, on the per-client send screen the same news arrived after the send had already failed.

Now the SMS screens say so up front, and point you at the setup page:

  • The campaigns list shows a notice while SMS isn't ready, and your existing drafts stay where they are.
  • Starting a new campaign shows the setup step instead of a composer that can't send.
  • The send-a-text window says so when it opens, and the Send button stays disabled with a visible reason.
  • If your registration is already with the carrier, it says that instead — and if the carrier rejected it, it tells you why.

We also corrected how long we said this takes. The app claimed 3–4 weeks in several places; carrier approval is usually a few business days, and up to about two weeks.

Unsubscribe links now work, and email stats are real

The Unsubscribe link at the bottom of your email campaigns did not work. Anyone who clicked it landed on a HumanixOS login page instead of being unsubscribed. That is fixed.

Clicking Unsubscribe now opens a simple page that shows which organization the emails are from, and asks the person to confirm with one button. Gmail's own "Unsubscribe" button at the top of a message works too.

Three other things change with it:

Your open rates were always zero. Not because nobody opened your emails, but because the tracking never reached us. Open counts on the campaign page will start moving. Numbers from before today are not comparable, so treat this as a fresh start rather than a sudden improvement.

People who unsubscribe are now always excluded. Previously a campaign only checked the unsubscribe list at the moment you chose your recipients. If someone unsubscribed while your campaign sat in drafts, they could still receive it. Every send now checks again at the moment it goes out.

Emails to addresses that no longer exist are stopped automatically. When a mailbox has been permanently closed, that address is removed from future sends for your organization. Temporary problems, like a full mailbox, are not treated as a permanent removal.

If a campaign ever fails to send, it now stays editable so you can fix it and try again, instead of being stuck.

Confirmation prompts now match the rest of HumanixOS

When HumanixOS asked you to confirm something, a few places still used your browser's own pop-up: a grey box with your web address at the top and buttons that were always in English, even if you use HumanixOS in French or Spanish.

Those are gone. Every confirmation now appears inside HumanixOS, styled like the rest of the app and written in your language. This covers deleting a transaction, archiving a message template, removing a grant task or team member, deleting an opportunity, deleting a purchase order, deleting a saved dashboard, and changing the details you record about family members on a service.

The warning you see when you change service member fields also reads better. It used to repeat the same explanation once for every field you changed. Now it lists the fields you are changing, tells you once what will happen to the information already recorded, and uses the names you gave those fields instead of their internal ones.

Nothing about what these actions do has changed. If you were happy clicking OK before, the new buttons do exactly the same thing, and cancelling still leaves everything exactly as it was.

What counts as a person served

We've written down what the "people served" figures on your funder dashboard actually measure, because the wording was doing you a disservice.

A person counts from the moment they are registered for a service — whether or not you separately recorded attendance. That's deliberate: for a food box reserved or a clinic slot held, the registration is the delivery, and it means two organisations' numbers can be compared even when one takes attendance and the other doesn't.

The tooltip used to say "how many actual people were served", which claimed more than the number could support. It now says what the number counts.

One change to the figure itself: someone on a waitlist no longer counts as served. They were waiting precisely because there was no place for them, so counting them was never defensible. Existing records aren't altered — a waitlisted person stops counting the next time their status changes.

If you do check people in, that's still recorded on every attendee, and we can report on observed attendance rather than registrations when you need it.

Record the stock you already own

Setting up inventory used to mean pretending your shelves were empty. The only way to get a count into HumanixOS was to receive the goods, which recorded an arrival that never happened, and colours and sizes could not be set up until something had arrived.

Four things changed.

Say what you already have. An item with nothing on hand now offers to record an opening balance. It goes into the ledger as exactly that, so a year from now the count you started with still reads differently from stock that turned up unexplained.

Set up variations before the goods arrive. You can add, edit and remove an item's colours, sizes and other variations from the item page, whether or not any stock exists yet. You can still correct a variation's values after stock has arrived, which is how you fill in a blank you could not answer at the time. A variation that holds stock cannot be deleted, because your records point at it.

Choose the shape of each item. When you create an item you now say whether it is one simple thing with one count, or something that comes in variations. The same item type serves both, so a single donated coat and a rack of sizes no longer have to be set up the same way.

Free is now a price you can record. A cost of zero is accepted on items, purchase order lines and receipts. Blank still means the cost was not recorded, and zero means it cost nothing. For donated goods those are very different facts and both are worth keeping.

Event check-in forms accept submissions again

Check-in forms could refuse every submission with a red "Validation failed" message, even with the form set to receive submissions. Fixed — check-in submissions go through.

Check-in forms now have their own short setup: you choose which details to ask for — first name, last name, email, phone — and the form asks for exactly those. So if you only want a phone number, that's all anyone sees. A first name and at least one way to make contact are always kept, because that is what matching someone to the registration list needs.

If a submission is ever refused now, the message says which field needs attention instead of only saying that something failed.

And if someone checking in isn't on the registration list, the form offers a link to register for the event, instead of only offering to add them as a walk-in.

Events can have a date to be determined

You can now create an event before you know when it will happen. Tick "Date to be determined" and the event shows Date TBD wherever it appears — the events list, the event page, and the check-in page attendees see.

While the date is undecided, HumanixOS holds back anything that would announce it. Reminder emails and texts are not scheduled, the event stays off connected Google and Microsoft calendars, and it does not take up a slot on your calendar view. Set the real date and the reminders are scheduled and the calendar entry appears.

A TBD event also stays in your "Upcoming" list rather than being treated as finished, and people can still register for it.

Events with timeslots are unaffected — those already carry their own times.

Recording details for each person in a family, without typing their names again

If you run a programme that records something different for each person in a family, a shirt size, a shoe size, a gift request, this is the change you have been waiting for.

The details step now starts with the family you already have. Previously, attaching a family to a service that records details per person took you to a screen that asked who was in the family and offered empty First Name and Last Name boxes, for people you had created a minute earlier. Whatever you did next was wrong. Skipping left the record with nobody on it. Filling it in created a second copy of children the app was already holding, as plain text with no connection to their records.

Now the step lists everyone in the family by name, head first, ready for you to fill in. Nobody retypes a name. Each set of details belongs to a real person, which means you can follow the same child across two years of a programme for the first time.

Correcting a family's details is safe now. The Edit details panel used to open empty for any family you had entered by hand, and saving from there replaced the whole list. A family of five could become a family of one, with a success message and no warning. It now opens on the whole family with whatever was recorded already filled in, tells you how many people the save will list, and names anyone you are about to take off the record before you save. Saving updates the grid, the panel and the family's own page straight away.

If someone is not on file, you can still list them. Type their name on the row. It stays a name on that one record and does not create a person, which is exactly how the public registration form has always worked and continues to work.

Records made before this change are untouched. They display exactly as they did, and nothing has been rewritten.

A family's page stops claiming more than it knows. The services a family has received used to be captioned as who was in the family at the time, over a roster that might have been typed ninety seconds ago, sitting just below a members list showing different people. The caption is gone and the names come from the people's own records, so the two halves of the page agree.

Deleting a person works, or tells you something you can act on. Three fixes here. A person who headed a family you had already deleted could not be removed by any means the product offered, and the message told you to delete a family that was already gone. That is fixed: deleting the family now genuinely releases them. A refused deletion no longer shows a success message anywhere, on the profile page, the people list or the dashboard. And when a deletion is refused, you are told why, in words that name something you can actually do.

We now honor Global Privacy Control, and list every cookie we set

If your browser sends a Global Privacy Control signal, we now treat it as a request to opt out of the sale or sharing of your personal information.

In practice that means Google Analytics is not loaded at all for your visit, so no analytics cookie is ever written. You do not have to click anything, and we do not ask you to. When we detect the signal we show a short confirmation that we honored it, so you can see it worked rather than having to take our word for it.

The privacy policy's cookie section has also been rewritten. Instead of one paragraph saying we use cookies, it now lists every cookie we set: its name, what it actually does, how long it lasts, and whether it is ours or a third party's, grouped by whether it is strictly necessary, functional, or analytics.

Nothing changes for visitors who do not send the signal.

Permission checks now agree with each other everywhere

What a role was allowed to do could depend on which part of the app was asking. A button might be hidden while the underlying action would have been allowed, or shown and then refused on save. The clearest case was the Manager role, where three different answers were possible for the same question.

There is now one set of role defaults behind every check, in the app and on the server, so what you can see and what you can do always match.

If your organization uses a Manager role, its starting point is now the same as a Member's, and anything beyond that is granted explicitly in Settings → Permissions — where it was already configurable, and where it now takes effect consistently. Existing permissions you have set there are untouched.

We also fixed two narrower cases: a permission granted for a single record no longer opens the whole area, and a permission check that fails to load is now reported as "couldn't check" rather than shown as a denial on the Finance ledger.

One intake form for every program

You can now publish a single intake form that isn't tied to one program. People describe what they need in their own words, and you choose the program when you review their submission.

Until now a service form had to name its program up front, which meant publishing one form per program and asking applicants to sort themselves into the right one — before they know what they qualify for. If your paper application is one sheet covering everything you do, the form can be too.

When you create a service form you'll be asked how the program is decided: pick it now, or let staff decide when reviewing. A form that defers the choice always goes to your review queue, and the reviewer picks the program before approving. They only see programs they have access to.

Two things to know. A form like this can't include questions that belong to a specific program, because it doesn't know the program yet — add your own questions instead. And once a form has submissions, you can't change how its program is decided: the submissions already waiting were filled in under the old rule, so we ask you to create a new form instead.

Save a form as a template and reuse it next season

If you run the same form every year, you no longer have to rebuild it.

Any form can now be saved as a template. The template keeps the whole setup: every question, the layout, translations, branding, notification settings, approval behaviour and follow-ups. When the season comes round, open Forms → Templates, pick the template, and choose this year's event or program. You get a fresh draft form, ready to review and publish.

Event forms get the part that used to make this impossible. An event's questions belong to that specific event, so last year's form could never point at this year's. Creating a form from a template now matches those questions up by name, so a template built for last December's event works against this December's. If the new event is missing a question the template had, we say so rather than dropping it quietly.

New forms created this way always start as unpublished drafts, so nothing goes live until you publish it.

"Duplicate" has been replaced by templates. Duplicating a form used to copy most of its settings but not all of them, which meant a copy could look right and behave differently. Saving as a template copies everything, so that cannot happen.

The calendar's day panel now shows everything the month grid does

Clicking a day on the calendar could open a panel that was missing items you could plainly see in that day's cell — events were the ones that went missing, every time.

The month grid and the day panel were each working out which day an item belonged to in their own way, and the two answers didn't always agree. They now share one, so a day's panel lists exactly what its cell shows.

An event's day is also now the day in the event's own time zone — the same one its start time is shown in — so a late-evening event no longer drifts onto the following day for viewers in another time zone.

Where your logo appears

The top-left corner of your dashboard now shows the HumanixOS logo again, rather than your organization's. Your logo has not been removed and nothing you uploaded has been deleted.

Here is where your logo still appears, unchanged:

  • The header of your public forms
  • Your check-in pages
  • Forms and submissions you print
  • The header block of emails you build
  • Donation receipts sent to your donors

Those are the places your community sees, and your branding belongs on them. The dashboard is the tool you are working in, so it shows ours.

Two things follow from that. The size choice under Settings, Branding still works and still applies to your public forms and your emails, so it is worth setting if you have not. The "my logo is light-coloured" switch has been removed, because it only ever changed how your logo sat against the dark dashboard bar and has nothing left to do.

Uploading, replacing and removing your logo all work exactly as before.

Funder reporting counts every household delivery, everywhere

Programs that deliver to whole families — a food box, a holiday delivery, Adopt-a-Family — were counted in some places in the funding partner portal and not others. The organization list and the organization's own detail page could show different numbers of service records for the same organization, a delivery just recorded wouldn't appear until the next hourly refresh, and an organization whose whole program serves households could read as having no recent activity at all.

Every service-record figure in the portal now counts a delivery to a household exactly as it counts one to a person — the totals, the today/this week/this month counts, the per-service breakdown, the 30-day windows, the trend charts and their period totals, the last-activity date and the active-organization counts. A family that has been deleted stops counting everywhere at once.

People-served figures are consistent with that: a delivery to a family of six credits six people, once, however many times that family was served in the period — the trend chart now says so as well as the impact tiles.

Funding partners can set reporting schedules

Funding partners can now tell the organizations they fund when reports are due, instead of chasing them by email.

Under Reporting in the funding partner portal, set what is due and how often — monthly, quarterly, twice a year, annually, or a single date. Apply it to every organization you fund, or just one. Choose how much notice organizations get before each date.

Organizations are reminded automatically. Admins get a notification as a report comes due, and again if the date passes without it being marked as sent. Each reminder arrives once, not every morning until you act on it.

The partner's Reporting page opens with what is outstanding: who is overdue, and who has something coming up. Schedules you have set are listed underneath.

Dates count from the first one you pick, so a schedule starting on the last day of a month stays at month end rather than drifting.

Households named after the family

A household you have not given a name now shows up as the family it is, rather than as a headcount. Bridget Snead's household reads "Snead Household" instead of "Household of 4", on the households list, on the client and donor pages, in every picker, and on the family sheets you print.

Households you have named are untouched. What you typed always wins.

The word used is your own. If you have renamed households to Families under Settings, an unnamed one reads "Snead Family". If you call them Units, it reads "Snead Unit". So if you would like to see "Snead Family", set your label to Family and every screen follows.

Two smaller things worth knowing. The name follows the head of household, so changing who heads a family changes what it is called. And if the head has no surname on file, their first name is used instead, falling back to the headcount only when there is no name to use at all.

Searching the households list works the way you would expect too: type a surname and the family comes up, even though nobody ever named that household.

One family per row

The households page now lists one family per row instead of spreading them three and four across. On a normal screen you will see roughly three times as many at once, and finding a family means running your eye down a single column of names rather than hunting across a grid.

Everything that was on the cards is still there: who heads the family, how many people are in it and how many of those have their own record with you, how many children, a phone number, and where they are.

Click any heading to sort by it, and click it again to reverse. That replaces the sort menu that used to sit above the list, so the thing you sort by and the thing that tells you how it is sorted are now the same control.

One ordering has gone: sorting by newest or oldest. It ordered families by the date their record was created, which the page does not show, so the list would rearrange itself with nothing on screen explaining the new order. Families now open in alphabetical order. If date order is something you relied on, tell us and we will find a better way to offer it.

On a phone the list shows the family name and size, with the rest appearing as the screen gets wider.

Two fixes on services: edits that stick, and a people count that includes families

Two things on the services side were quietly wrong. Both are fixed.

Editing a second field on a service record no longer fails. If you changed a value on a record, waited for it to save, then changed a second value on that same record, the second change was refused with a message saying somebody else had modified the record. Nobody had. The value you typed was then taken back off the screen and had to be retyped after a page refresh.

The record keeps a version number so two people editing the same thing at once cannot overwrite each other. Your own save moves that number on, and the page was not being told the new one, so it kept presenting the old one and got turned away. It now holds whatever the server just wrote, so you can correct as many fields on a record as you like, one after another, without refreshing anything.

The protection itself is untouched. If a colleague really does edit the same record while you are working on it, you still get told, and your next edit will save normally instead of being stuck until you reload.

"People Served" on the services page now counts the families. It only ever counted individual clients, so an organization delivering mostly to families watched a number that never moved no matter how many families they added. A page showing thirty one service records could still read one person served.

It now counts distinct clients plus the size of each family served, which is exactly how your reports have always counted it, so the two finally agree. A family served three times counts once. Next to it is a new Families Served figure, because for a holiday delivery or a food programme the number of families is the headline.

Two smaller things came along with it. Families whose records were deleted are no longer counted, and the figures are now worked out across every service record you have rather than the first thousand, so they stay right as you grow.

Stock levels at a glance

Opening an item's stock used to mean scrolling past a card for every batch you had ever received before you could read how many you actually have. Now the panel leads with the answer.

You get the total on hand, then a short table: each variation, where it is stored, and how many. A pack of bibs that came in over four separate deliveries reads as one line saying eleven, not four lines you have to add up yourself.

Batch detail has not gone anywhere, it has just moved out of the way. It sits behind a Batch detail link at the bottom, and every batch still keeps its own cost, date received and expiry.

If your organization tracks expiry dates, batch numbers or serial numbers, that section opens on its own, because those details are the reason you are looking. If you do not record any of them, which is most organizations handing out food, clothing and supplies, it stays closed and out of your way. There is nothing to set up either way.

The items list is tidier too. The batch count next to each item is gone, since it was a bookkeeping number rather than something you needed, and the View button that opens the panel is still right where it was.

Week of September 7, 202638 updates

Put your contact details on your forms

A form could carry your logo, and nothing else that said who you are. That is a problem mostly on paper: someone is handed an intake form, takes it home to fill in, and the sheet gives them no way to ask a question or return it.

Your forms can now show your organization's phone number, email address, postal address and website. Open a form's Style tab and turn on Contact information. Choose which of the four to show and whether they sit under the logo or below the last question.

The details come from your organization's record, not from the form. Change your phone number once in your settings and every form that shows it updates. A field you have not filled in is simply left off rather than printed as an empty line.

They appear on the web version, on the printed and PDF version, and on check-in forms. On screen the phone number and email are tappable. On paper they print in the header, next to your name and logo, where a "return this to us" line belongs.

This is off for every existing form. Nothing you have already published starts showing contact details until you turn them on.

Delete any form from the list, and see it go

Only draft forms could be deleted from the forms list. Once a form was published, the option disappeared, and the only way to remove it was to open the form and find a delete there.

Every form can now be deleted from the list, published or not.

Because deleting a form also deletes the responses people submitted to it, the confirmation now tells you exactly what you are about to lose. If a form has responses, it names how many and asks you to tick a box confirming you understand they go too. A form with no responses deletes in a single step, as before.

If you would rather keep the responses and simply stop accepting new ones, deactivate the form instead. That option has not changed.

We also fixed a smaller annoyance: deleting a form from its own page used to send you back to the list with the form still sitting there until you refreshed the browser. It disappears immediately now. The same applies to activating or deactivating a form, which previously left the old status showing in the list.

Deleting is available to team members whose role allows it, which was already what the system enforced behind the scenes.

International phone numbers keep their country code

A phone number entered with a country code was losing the plus sign when it was saved. A UK number written +44 20 7946 0958 was stored as 442079460958. All the digits were there, but the number was no longer in the standard international format, and there was nothing left to say which country it belonged to.

Numbers entered with a country code now keep it. Numbers entered without one are stored exactly as they always were, so nothing already in your records changes.

This also fixes text messaging to people outside your own country. When a client record says which country they are in, messages are addressed using the proper international format. When it does not, we send the number exactly as you stored it rather than guessing a country for it.

Extensions still work the same way. They are kept with the number on the record and left off when a text message is sent, since a text cannot dial one.

Turn someone you serve into a volunteer

People an organization serves often volunteer for it too. A pantry client helps at distributions; a program graduate mentors the next group. Until now the software treated them as two unrelated strangers, so staff retyped a name, email and phone number already on file and ended up with two records that never referenced each other.

Client records now have a Make Volunteer action. It sends the person your usual volunteer invitation, already filled in from their client record, and they set up a volunteer account the same way anyone else does.

The two records stay connected afterwards. That connection is the useful part: it lets you answer how many of your volunteers are also people you serve, which is exactly the kind of participation story a funder asks about.

The button tells you where things stand. If someone is already a volunteer, it says so instead of offering to create a second record. If you have already invited them and they have not finished setting up, it says that too.

One limit worth knowing: a volunteer invitation is sent by email, so a client with no email address on file cannot be invited yet. The button explains this rather than disappearing. Add an email to their record and it becomes available.

The action only appears for staff who can create volunteers, and nothing from the client record is visible to the volunteer or to anyone else on the volunteer side.

Postal codes outside the US now import correctly

If you imported clients with Canadian, British or any other non-US postal codes, they were being rewritten. A Canadian code like K1A 0B1 was stored as 00101, and a London postcode like SW1A 1AA became 11. Worse, the import preview showed the code unchanged, so there was nothing to tell you it had happened.

The cause was that we read every postal code as a US ZIP. US codes are always five digits, and spreadsheets drop the leading zero from codes like 02906, so we restore it. Applied to a code with letters in it, that repair produced nonsense.

Client records now have a Country, and postal codes are read by the rules of that country. You can map a Country column when you import, and rows without one use your organization's own country, so a Canadian organization's files work with no extra setup.

Non-US codes are now stored exactly as you provide them, with no letters stripped and no digits padded. US codes behave exactly as before, leading zeros and all. The import preview shows the value that will actually be saved, whichever country it belongs to.

Provinces, counties and other regions also pass validation now. Previously only a US state was accepted, so a Canadian address could fail before it ever reached the point of being stored.

Put donated goods on the shelf from the gift itself

A gift of goods can be recorded in two places, and they mean different things.

Recording it under Donors — from the Add Donation dialog or a donations import — captures the donor, the value and a description of what was given. It never adds anything to your inventory. That is deliberate: most in-kind records are history, and the coats and canned goods in them were handed out long ago. Putting them on the shelf now would inflate what you appear to have on hand and everything that reads from it.

Receiving it under Inventory — or importing items with a Donor Name column — is how goods that are actually in the building get counted. That path creates the donor, the gift and the stock together, so the donation and the shelf agree.

What was missing was the connection between the two. If you recorded a gift first and the goods are still on hand, an in-kind donation with nothing received against it now offers Receive these goods into inventory. It opens the Receive form with that gift already chosen, so the stock lands with its donor attached and the gift's goods list fills in. The link only appears for people who can receive inventory.

The import field help for fair market value and "what was donated" now says the same thing, so a file of gift history is not mistaken for a stock count.

Imports pick the best column match, not the first one

When your file had two columns that could both fill the same field, the importer handed the field to whichever came first — even when a later column was the obvious right answer.

A file with "Family Size" before "Household Size" gave the field to Family Size on a loose resemblance, and left the column that matched exactly with nowhere to go. The same happened with "Home Phone" ahead of "Phone Number", and "Birthday" ahead of "Date of Birth". Moving the columns around in your spreadsheet changed the result, which is not something you should ever have to think about.

The importer now gives each field to the column that matches it best, wherever that column sits in the file. A column that loses out is only auto-mapped elsewhere when another field clearly matches its name; otherwise it is left for you to place, as before.

Fixed buttons that stopped responding on long pages

On pages with a lot of fields, the buttons in the bar at the top of the page could stop responding. Saving a new service was the clearest example: you filled everything in, clicked Create, and nothing happened at all. No error, no message, nothing. Reloading the page was the only way out, and it lost everything you had typed.

The cause was the page quietly sliding underneath the bar along the top of the screen, which left the buttons behind it. They were still drawn on screen and looked completely normal, which is why it was so confusing. The more fields you added, the more likely it was to happen, so a page could work when you started and stop working part way through.

Those buttons now stay put and respond every time, on every page and in the funding partner portal.

Import your stock, not just your catalog

The inventory import used to load only your item list. Quantities had nowhere to go, so an organisation could import five hundred items and then had to receive every one of them by hand.

Now a row with a quantity brings its stock with it. Nothing in the file has to say which kind of file it is — each row is read on its own:

  • A row with no quantity adds the item, exactly as before.
  • A row with a quantity adds the item and puts the stock on the shelf.
  • A row whose SKU you already have receives the stock onto that item instead of complaining about a duplicate.

That last one means the same import works for a first load of the whole warehouse and for the delivery that arrived this morning.

A row can also say where its stock came from. Name a donor and the import records it as a gift in kind — creating the donor, the donation and the receipt together — so donated goods show up in your giving history instead of appearing from nowhere. Rows can carry a received date, a unit value, an expiry date and a lot number. A quantity with nothing else said is recorded as an opening balance: neither bought nor donated, because guessing either would put a number in your reports that nobody entered.

Rolling an import back removes the stock it created along with the items. Anything you have since distributed, counted or moved is left alone, along with the item it belongs to.

When your file is missing something

Imports used to stop dead when a required column was missing, and fail row by row when a column was there but some cells were empty. Either way the only way forward was to leave, fix the spreadsheet, and start over.

The mapping step now tells you what the import still needs and lets you answer it there. Choose a value to use for every row that has none — an item type picked from your own list, for instance. For SKUs you can have them generated from the item name, so "Pasta (16oz box)" becomes PASTA-16OZ-BOX, with repeats numbered.

A value you supply only fills the gaps. Any row that already has its own value keeps it.

Record details for each family member, however the family reaches you

If you run a programme that serves whole families, you can now set up what you record about each person on the service itself, and record it whether the family applied online, phoned, or walked in.

Before this, those questions lived on a public form. That worked if a family filled one in, but it left a gap: a family you took over the phone had no way to have a child's size or a dietary need recorded at all, and there was no screen anywhere that could add it afterwards. A note typed during an intake call was also permanent, because nothing could correct it.

Three things change.

You set the questions up on the service, under a new Family members tab in the service configuration. They repeat for each person in a family, so an age, a size, a grade or a dietary need belongs there, while anything the whole family shares stays on the service's own fields.

Any public form attached to that service now asks exactly those questions. There is one list, in one place, so a form and the programme behind it can no longer drift apart.

You can record a family's details when you add them to a service, or add and correct them later from the family's entry. Skipping is fine: the family is added either way and the details can follow.

Two smaller improvements come with it. Printed sponsor sheets and the family view now use your own wording for each question instead of a tidied-up version of the field name, and the questions appear in the order you arranged them.

Reports for services delivered to families

A service delivered to families or to partner organizations could not be reported on. The Create Report button was there, and pressing it produced a report with nothing in it.

Reports were built only from the people on a service. A family and a partner organization are recipients in their own right, so a holiday delivery programme that had served six families looked, to the report, like a programme that had served nobody: no rows, no charts, and an AI summary that dutifully described a service nobody had used.

Reports now cover every kind of recipient.

  • The number of deliveries matches what the service page shows you.
  • People served counts the people in each family, using the family size you recorded. A family served twice is counted once toward people and twice toward deliveries.
  • Families served and organizations served are shown alongside it.
  • Family sizes are the figures recorded now, which the report says on its face, so a figure read months later is not mistaken for a figure as at the delivery.

Where a report cannot answer something, it now says so instead of leaving a blank. A family has no address of its own, so a family programme's report states that it cannot be broken down by location rather than showing an empty chart that reads like a finding. The same applies to the figures that only make sense for individual people: a rate per person is left out of a family programme's report rather than shown as zero.

Two things changed for reports that only cover individual people, both because the numbers were not matching the report they sat on. A report's headline figures are now counted from the same set of records the report saves, so they can no longer disagree with the rows underneath them. And a record with no date on it now stays inside a report you have given a date range, instead of being dropped from the count while still appearing in the list.

The AI summary follows the same rules. It is told who the service reached and in what numbers, it is told which questions the data cannot answer, and it is told not to describe them. Nothing about an individual family member reaches it: what it receives is how many members were recorded and how many have each detail filled in, never a name, never a size, and never anything anyone typed in a notes or wish-list field.

Service counts now include families and organizations

The services list only ever counted the people you serve one at a time. Services delivered to a whole family, or to another organization, were left out of the numbers.

The clearest case was a service where every recipient is a family, like an Adopt-a-Family programme. The list said it had no recipients at all, while opening it showed six families and twenty-four people. Deliveries to organizations were missing in the same quiet way, which made some services look slightly smaller than they were.

Every kind of recipient is now counted, so the list and the page for a service agree with each other.

The figure next to each service is also named more clearly. It counts entries rather than people, because a person you serve twice is two entries, and an entry can now be a whole family.

The head of the family counts

When a service page showed a family's roster, it left out the head of household.

The people in a family each have their own record, but the head of the household does not have a second one — they are on the family itself. The service page was reading only the member records, so the person whose name and phone number are on the delivery was missing from the roster, and the count of who was on file came out one short of what the family's own page said. A family of Maria, Ana and Luis printed a sponsor sheet listing two people, neither of them Maria.

The head now leads the roster, marked as the head, on the service grid, the family panel and the printed sheet. A family entered with only a head is a roster of one instead of an empty one.

This applies to families whose roster comes from their current records. A family that registered through a public form still prints exactly what they registered with, unchanged.

Put split stock back together

When you open an item's lots, the panel now starts with the total on hand and how many batches it is spread across. If the item comes in different variations, each one gets its own subtotal with its batches grouped beneath it. Receiving the same thing twice at two prices creates two batches, which is right — each keeps its own cost — but the total now says so plainly instead of leaving you to add the cards up.

If you received the same product twice and filled in a detail like condition or size differently — or left it blank one time — the two ended up counted as separate variants, and your stock screen looked like the new arrivals had not joined what you already had.

Two changes fix that.

While you are receiving stock, each line now tells you where it is going: either "adds to" an existing variant with its current count, or that it will create a new one. If the item already has stock, creating a new variant is flagged, so you can match the existing details instead of starting a second pile by accident.

For stock that already split, an item with more than one variant now has a Combine variants button. Choose which to move and where it should go, and everything folds together. Each batch keeps its own cost, date received and expiry, so your valuation and reports are untouched — only the way the stock is grouped changes. If the two variants genuinely differ, you are warned before anything moves.

Settle duplicate SKUs before an item import runs

A SKU can only be used once in your organization, so importing a catalogue that reuses one always failed those rows. That was easiest to hit by re-running a file you had already imported, or fixing a few rows and uploading the whole thing again.

The import now checks before it writes anything. If any row's SKU is already in use, the last step of the wizard lists just those rows and asks what to do with each one: type a new SKU yourself, or press Generate to be given an unused one. There is a Generate for all button when the whole file needs it, and the import waits until every clash has an answer.

It also catches a file that uses the same SKU on two of its own rows, which nothing warned about before. The first row would import and the second would fail on its own, with no sign the two were related.

Rows that are fine are left exactly as they are, and nothing is written until you press Import, so the file lands in one go instead of half now and half after a second attempt.

See the whole family on a service page

Services that serve families now show families.

Until now, a family on a service page borrowed the columns built for one person. A complete family record looked like a half-finished client record: the ID column read "Household of 4", and columns for things a family does not have, like a date of birth or a gender, sat empty. The people in the family were not on the page at all. The only way to see who was in a household was to print the family sheets.

Now a family gets its own columns: the family name, how many people are in it, how many of them are on file, and who they are. Click the members to open the full roster, with everything that was recorded for each person at registration. On a service that only serves families, the columns that only make sense for an individual are no longer shown at all, and the contact details are labelled as the head of household's, because that is whose they are.

A few smaller things on the same page:

  • The recipient picker opens on Households for a service that serves households, instead of always starting on People.
  • The search box says what it searches, and searching now finds families by their name or by whoever heads them.
  • The summary no longer shows "0.0 avg" on a service with no individual entries. It shows how many families you are serving instead.

We also fixed the form for adding a new person from inside a household. Opened from a member row it was squeezed into a narrow column, with City, State and ZIP only a few characters wide, and it covered the household fields behind it. It now opens as a properly sized window. Choosing an address suggestion also fills in City, State and ZIP, which it had been quietly failing to do.

Family sheets name the family

Print family sheets used to say "No family members were listed on the registration" for any family you added yourself, rather than through a public form. That was wrong. The sheet only ever looked at the roster a registration form collects, so a family you entered by hand had nothing to show, and the page a volunteer is handed named nobody.

It now falls back to the people on file for that family. A family that registered through a form still prints exactly what they registered with, unchanged, because a sheet printed in December has to match what was agreed in November. Either way the sheet says which one you are looking at, so the two are never confused. The same roster now shows on the service page itself and in the family panel beside it, with the same label.

Three other things on that sheet. A family with no name of its own is now headed by whoever heads the household, instead of "Household of 2". The phone number is formatted the way it is everywhere else, so it can be read off the page and dialled. And the date is labelled, so you can tell a delivery date from the day the record was entered.

You can also set the delivery date now. Linking a family, an organization, or a person to a service asks you when the delivery is, instead of quietly recording the day you typed it in. It still starts on today, so nothing changes if that is what you wanted.

Organizations you serve were missing from service pages entirely. If you had linked an organization to a service, the page showed it as though nothing was linked, and the totals at the top left it out. They are back, and the counts include them. Families you had deleted were doing the opposite: still sitting on the service page and still counting toward the number of people served. They are gone now too.

Repeating events, clearer forms, and a preview that shows the real form

Events that repeat. When you create an event you can now say that it repeats: every week on the days you choose, or every few days, up to an end date you set. The dates are created straight away so you can see the whole run.

Building a multi-day event is no longer a chore. Dates can be typed as well as picked from the calendar, and editing a date no longer throws you back to the top of the page or loses your place in the field you were filling in.

The form preview shows your actual form. Every field used to appear as the same empty box, so a dropdown looked exactly like a text box. Now each one looks like itself: dropdowns list their options, dates show a date control, checkboxes show checkboxes, and section headings read as headings. The desktop preview also uses the full width instead of a narrow column.

Adding a question explains itself. Hover any question type to see what it does and what happens to the answer, including which ones save to a person's record and which stay on the form.

Your own consent wording. The consent checkboxes had fixed wording nobody could change. You can now write your organization's own text for each one, and section headings and consent notices support bold text and paragraphs.

Email a team member when a form comes in. Previously you had to type a colleague's email address by hand and keep it up to date. Now you can pick team members directly, and their address is always current.

We also removed the "New or existing" setting from forms. It never actually did anything, and every form has always accepted both new and returning people.

Register a whole family on one form

If your programme serves families rather than individuals, a public form can now sign up the whole household.

When you create a service form, you choose who receives the service: one person, or a household. Pick a household and the form asks how many people live in the home, and lets families list each person along with whatever you need to know about them, such as an age, a shirt size or a gift wish. You decide what those questions are when you build the form.

Approving one of these registrations creates the family, links it to the service, and keeps everything the family told you. Your reported numbers count everyone in the household, not just the person who filled in the form. If the same family signs up again next season, they are matched to the family already on file instead of being added twice, and each year's details are kept separately so last season's sizes never overwrite this season's.

There is a new Print family sheets button on the service page. It gives you one page per family with their contact details and everyone in the household, ready to hand to a sponsor or take out on delivery day.

Forms that sign up one person work exactly as they did before, and nothing changes for forms you have already built.

Call households whatever your organization calls them

If your organization says "families" rather than "households", the app can now say it too. Settings → Organization labels has a third row alongside Clients and Services: set the singular and the plural, save, and the word changes everywhere.

That means the sidebar, the list and detail pages, the New and Edit dialogs, the household section on a person's record, the households settings page, and the household wording inside Services, Donors and Inventory.

It also covers the one that matters most while you are typing from paper. A household with no name of its own used to read "Household of 4"; it now reads "Family of 4", or whatever your word is.

You can rename just the plural and keep the default singular, and clearing a box puts that word back to the default. Your own wording is never translated: if you call them "Familias", French and Spanish users see "Familias" too, while an organization that changes nothing sees the usual Household and Households in its own language.

Nothing else changes. Links, permissions and exports are untouched, so anything you have bookmarked keeps working.

See the family before you approve

When a family registers through a public form, the review screen now tells you what approving will actually do before you do it.

If the applicant is new to you, it says a new family will be created and how many people it will hold. If they have registered with you before, it names the family already on file and tells you the delivery will be added to it rather than starting a second one. When more than one family could be the right match, it asks you to pick, because guessing on your behalf is how duplicate families get made.

The submissions list beside it now carries the family too: the family name, how many people are in it, and each person listed with the answers they gave. Whoever is shopping or packing can work straight from the list.

Household pages got the same treatment. A family page now leads with how many people are in the household and how many of them have their own record, so a household of five with two people listed no longer looks like a mistake. It also shows where a delivery goes, taken from the head of the household's details, and the households list shows a phone number and town on every family.

Creating a service now has its own page

Setting up a service means naming it and defining every field it collects, and that deserves more room than a pop-up window. New services are now created on their own page, with the field builder laid out top to bottom and no scrolling inside a box.

Because it is a real page, you can share the link, use the browser's back button, and you will be asked before leaving if you have unsaved work. Duplicating a service and starting from a template both open the same page with the fields already filled in. After saving, you land on the new service.

Kiosk mode for public forms

Put a tablet or laptop on a table and let people fill in one of your forms one after another. Every thank-you screen now has a Submit another response button that brings up a blank form, keeping the language the last person chose.

For a device that will serve a whole line, turn on Kiosk mode in the form's settings and open the kiosk link it gives you. On that link the form looks after itself: the thank-you screen returns to a blank form after five seconds, a form someone walked away from clears after a short warning, the browser stops offering the previous person's name and address as suggestions, and the usual limit on submissions from one device is lifted to a kiosk-sized allowance.

Your forms list marks every form that is set up this way with a Kiosk mode badge, so you can tell at a glance which ones are running on a shared device.

Print a filled-out copy of any form submission

You could already print a blank copy of a public form for paper intake. Now each submission has a Print button too, on the form's page, in the review window and in the submissions list, which prints the same form filled in with that person's answers.

It is the same document, question for question: typed answers on the lines, the chosen options marked, dates and amounts in place, and the name of any uploaded file. Questions the person did not answer print blank, and questions they were never shown (because of an earlier answer) are left out. The top of the page shows your organization, the form's name, when it was submitted, its status and when it was reviewed, so the printout stands on its own in a case file or for an auditor.

If someone filled the form in Spanish or French, their copy prints in that language.

Search long filter lists, match on all values, and paste that keeps its blank rows

Filtering a column with a long list of choices meant scrolling through every one of them to find the value you wanted. Now, once a list runs past ten choices, the filter opens with a search box at the top. Type any part of a choice and the list narrows to what matches, accents and capitalisation aside, so searching for "garcia" still finds "García".

"Select all" now takes only what your search turned up, and says how many that is, so you can never select a thousand hidden choices by accident. Anything you had already ticked stays in view while you search, listed above the results under its own heading. Escape clears the search without closing the filter.

Columns that hold several values at once, such as a check-all-that-apply field, gained a Match setting. Any is what filtering has always done: tick three services and you get everyone in at least one of them. All is new: tick the same three and you get only the people in all three. Existing saved filters keep working exactly as they did.

Copying a run of cells down a column and pasting it into another column also lost its blank rows: the values closed up the gaps and landed against the wrong rows. Empty cells are now carried through the paste, so what you paste lines up with what you copied, right down to a blank row at the very end.

Your service data is now in the organization export

Exporting your organization's data produced a service records file with dates, statuses and identifiers, but none of the information your staff actually recorded against each service. Everything you had entered into your service fields was missing.

Those values are now columns in the file, one per field your services define, with the service name alongside so it is clear which service a row belongs to. The services file also lists the fields each service records.

The donors file had a separate problem that made it come back empty for every organization. That is fixed too.

Service record imports now carry your field values

Importing service records used to keep only the basics: the service, the client, the date, the status and a note. Everything else in the file, such as "Number of Turkeys", "Rent Payment" or "Program Type", was dropped without a word.

Those columns can now be mapped like any other. The mapping step offers the fields your services already collect, and the "Create field" button adds a new one to each service the import writes to. Values are checked against the field's type as they land, so a stray "many" in a number column fails that row with a clear reason instead of slipping through.

A file that identifies clients by their HumanixOS client ID, which is how our own export writes them, now matches those clients directly. Previously such rows all showed as unmatched.

Choose how large your logo appears

Settings → Branding now has a Small / Medium / Large choice for your organization's logo, with a preview of the dashboard header at each size. Square marks that looked lost in the header can now fill it.

Nothing changes until you pick a size: Medium is what you see today. Public forms that use your organization's logo follow the same choice unless the form sets its own size, and new email header blocks start from it too.

Get an email when someone submits your form

You no longer have to keep checking the dashboard to know a form came in.

  • In any form's options, turn on Email on submission and list the addresses that should hear about it, up to ten.
  • Every new submission sends a short email with the form name, when it arrived, and the submitter's name, email, and phone when the form collected them, plus a link straight to the submission.
  • The full set of answers stays in HumanixOS rather than in your inbox.

If an email cannot be delivered, the submission is still recorded as normal.

Funding partner dashboard loads for very large portfolios

If one of your grantee organizations serves hundreds of thousands of people, the funding partner dashboard could time out and show "We couldn't load your dashboard" instead of your numbers.

The headline counts are now read from the hourly precomputed figures plus whatever was added since, the city breakdown keeps the fifty largest cities per year instead of every one, and the trend charts no longer compete with the core numbers for the same time budget. The dashboard loads in well under a second for a portfolio of half a million people.

Import your inventory catalog from a spreadsheet

Inventory items can now be imported from a CSV or Excel file, the same way clients, donors and grants already are. Upload your catalog with SKU, item name and item type, plus optional description, barcode, retail value and cost.

The Item Type column is matched by name against the types you have set up, including the built-in ones. If a row names a type that does not exist yet, that row is flagged with the type it could not find, so you can create it and re-run the file. Nothing is invented on your behalf.

As with every import, you can undo it. Items you have already received stock against are kept, so an undo never removes something your records depend on.

Importing a contact list creates one organization per organization

Many of the spreadsheets you import are contact lists: one row per person, with the organization they belong to alongside their name, state and ZIP. Importing one of these used to go wrong in a few ways.

Imported as organizations, every row became its own organization, so an organization with thirteen contacts showed up thirteen times. Imported as people, the organizations were created once but as bare names, with no contact, state or ZIP. And one stray value in a date column could fail a hundred rows around it.

Now an organization import creates one record per organization name and combines the rows that repeat it, keeping the first contact on the sheet as the contact and filling in any blanks from the later rows. Rows that name an organization you already have are skipped and the existing record is left exactly as it was. A people import that creates organizations from its organization column gives each new organization the first person's name, email and phone as its contact and the row's address, state and ZIP. Importing a file as both organizations and people links every person to their organization.

A cell that is not a date is now flagged in the review step before anything is imported, and if a row still fails, only that row is reported. The rest of the file imports as normal.

Imports recognize more of your column names

Import files come with column headings like "Home Phone", "DOB", "Mailing Address" and "Postal Code". Many of those were not being recognized and had to be mapped by hand every time.

The matcher now treats underscores, hyphens and dots as word breaks, so a heading written any of the usual ways lands on the same field. We also added the qualified forms people actually export: home, work, mobile, cell and primary phone; email address; home and mailing address.

Your saved mappings from previous imports still take priority, so nothing you have already corrected will change.

Purchase orders show what was received, and drives show what they brought in

Receiving stock against a purchase order now records the link on the receipt itself. The purchase order page lists every receipt against it and shows a Received column beside each line's ordered quantity, so a partial delivery is visible at a glance instead of silently marking the whole order received. Marking the order received happens in the same step as recording the receipt, so the two can no longer disagree. A purchase order that stock has been received against can no longer be deleted.

The Drives page now shows, for each drive, how many receipts it produced, the total units received, and their fair-market value. Click the receipt count to see the individual receipts.

The receive form's item picker is now searchable by name or SKU, the same picker the purchase-order form already used.

See what each role can do before you assign it

Assigning a teammate a role used to mean guessing what that role could actually do. Now the answer is on the page.

  • When you invite someone, a short summary appears under the role picker: what the role is, and which areas it has full access to, can change, can only view, or cannot see at all.
  • In the team list, an info button next to each member's role opens the same summary for that person.
  • The summary reflects your organization's own permission settings, so if you have customized what Members can do, that is what it shows.

Admins get a direct link to the Permissions page from the summary to make changes.

Ask AI now tells you what went wrong

When a question in the dashboard's Ask AI box couldn't be answered, you used to see the same line every time: "Failed to execute search. Please try again." Sometimes trying again was the right move. Often it wasn't, and the message didn't say which.

Now the message matches the cause:

  • You've asked a lot in a short time — it tells you to wait, and for how long when we know.
  • The AI service is having a moment — it says so, and that your data is fine.
  • The question didn't land — it suggests naming what you're after, with an example.
  • Something broke on our side — it says that plainly, and that nothing was changed.

Slow answers also show a "Still thinking…" note so a long wait isn't mistaken for a failure. Every message is available in English, French, and Spanish.

The calendar now shows new and changed events right away

After creating, editing or deleting an event, the calendar and its selected-day panel could keep showing the old picture for up to five minutes, or until you switched tabs and back. The calendar now refreshes as soon as the change is saved. The same applies to service records, board meetings, scheduled email campaigns and grant dates, which all appear on the calendar.

Reports show what you actually recorded, and the report screen has room to breathe

Three fixes to reports this week, plus a bit more room to work in.

Your edits now show up in the report preview right away. If you changed something in the grid on a service page, a registration status or an amount, and then opened Create Report, the preview still showed the old values. Reloading the page fixed it. The report you generated was always correct, which made this an especially confusing thing to run into: the screen disagreed with itself, and the version you could see was the wrong one. The preview now keeps up with your edits as you make them.

Service reports no longer lead with a status almost nobody sets. Every report on a single service carried a "Status Distribution" chart reading 100% active, an "Active Rate" of 100%, and an AI summary that dutifully mentioned it. For nearly everyone that number was meaningless: there is no way to set the status of a person within a service from the service page, so unless you were using one of the few side routes that touch it, every row said active and the chart could only read 100%. The chart, the figure and the sentence are gone. Reports across several services no longer show an "Active" count either, for the same reason.

AI summaries now talk about your service data. A summary of a single service used to cover how many entries there were, how many people, and where they lived, and nothing about what your organization actually recorded. If you track a registration status, an amount handed out or a referral source, the summary said nothing about any of it. It now leads with those fields: how the choices break down, totals and averages for amounts, and the date range covered. Free text fields like notes are counted but never quoted, so what you write about someone stays between you and the record.

More room on the Create Report screen. The name, the summary, the options and the buttons were all crammed into one row, which left the summary box about the width of a word. A generated summary was in there, you just could not read it. The summary now gets a proper field several lines tall that you can drag taller, the buttons have moved up to the bar at the top of the page, and there is a labelled way back to where you came from instead of an unlabelled X. The people list has the same layout now, and opening either screen no longer jumps you past the charts section.

Linking people to a service is tidier. The Link People button sits on the top bar where it stays put while you scroll the list, the redundant Cancel button is gone since the back link does the same thing, and the heading that repeated the service name has been removed. That is a good chunk of the screen handed back to the list you are actually reading.

Week of August 31, 202637 updates

Add your own service categories for anonymous distributions

When you record an inventory distribution to an anonymous recipient, the service category picker offered six built-in options. Anything else had to go under "Other", which made funder reporting harder than it should be.

You can now add your own categories. Pick "Add a new category" at the bottom of the list, type the name, and it is saved for your organization and selected right away. Your categories also appear in the recall report and can be renamed or retired under Settings, Inventory, Categories.

The built-in list stays shared across organizations so cross-organization reporting remains comparable. Where a report compares organizations or an eligibility rule checks the category, a custom category counts as "Other".

Type numbers the way your language writes them

If you use HumanixOS in French or Spanish, numeric cells in the data grids already displayed decimals with a comma, as in 3,5. Typing that comma back into the cell, though, was refused with a "numbers only" message.

Numeric cells now accept numbers spelled the way your language displays them. In French and Spanish, 3,5 is three and a half, and a thousands separator (a space in French, a point in Spanish) is understood. In English, a thousands comma such as 1,234.5 is accepted too. Pasting a copied value, including one with a currency symbol, reads the same way.

Where a point in Spanish could be read either way, it is treated as a thousands separator only when it sits in the thousands position, as in 12.345. Anywhere else, such as 3.5, it is treated as a decimal point, so a habit of typing a point never silently produces a number ten times too large.

The grant finder now searches the web and only shows links it has checked

Research Grant Opportunities used to draw on the assistant's memory, which meant a link could point at a page that no longer exists or at a funder's homepage instead of the program. Every search now runs a live web search, and each link is checked before it is shown. If a page cannot be confirmed, the result appears with "No verified link" rather than a link that might be wrong.

Amounts and deadlines still come from the assistant's reading of the pages it found, so they carry a reminder to confirm with the funder. When a deadline has already passed, it is struck through with a note to check for the next cycle.

Recording a donation is faster, and reachable from the donors page

Recording a gift is one of the most common things you do in HumanixOS, and it was one of the harder things to reach. The donors page offered only "Add Donor", so recording a gift meant first noticing that Donations is a separate tab.

You can now record a donation straight from the donors page, next to Add Donor. It opens the same form, and the donor list and totals update as soon as you save.

The form itself is shorter. It asks for the giver, the amount, the date and the payment method, and everything else now sits under "More details", one click away. Fund, campaign, program, status, channel, notes and the anonymous option are all still there, still optional, and the section tells you when it is holding something. If you use those fields regularly it remembers that you like it open. Editing a gift always shows everything, so nothing is out of sight while you are correcting a record.

A few related fixes came with it:

Searching for a donor now looks across your whole donor list. Before, the picker quietly loaded only the first 200 donors and searched within those, so larger organizations could not find most of their donors and nothing on screen said the list was incomplete.

Opening "Record donation" from a donor's own page now shows that donor already filled in. It used to show an empty donor box even though it was recording the gift against the right person.

Recording a gift of goods now saves. In-kind gifts carry their value as a fair market value rather than a cash amount, and the form was being turned away for having no cash amount. It now saves as intended, and still asks for a fair market value so a gift of goods is never recorded as worth nothing.

If your organization has turned off Funds or Campaigns, the form no longer asks about them.

Offer event timeslots on a form, and let people check themselves in

One event can now run at several times, and people can pick the time that suits them.

Set the times up front. When you create an event you can add its timeslots right there, instead of saving the event and adding them afterwards. A single timeslot is filled in for you, so an event that runs once is no more work than before.

Put the real times on your form. A registration form linked to an event can now offer that event's timeslots. The list comes straight from the event, so there is no second copy to keep up to date, and a time you change or remove changes on the form too. Each option shows how many spots are left, and a full timeslot says so.

Both ways of checking in. Staff can check someone into the specific timeslot they registered for, and people can still check themselves in. Every check-in now records how it happened, and attendance that someone recorded for themselves is labelled, so you can see at a glance which attendance was observed by your team.

One person can register for several timeslots of the same event, which is what a weekly class or a multi-day workshop needs.

A roster you can read. Because one person can now hold several registrations, the attendee list groups by person: one line each, with their timeslots underneath. You can search it, narrow it to one timeslot, and filter by how much of it someone attended, including who came to every timeslot. The count above the list tells you how many people you have and how many registrations they hold between them.

Volunteer shifts follow the event. Creating a shift for an event now offers that event's timeslots. Pick the ones the shift covers and you get a shift for each, already set to that timeslot's time and place, instead of typing the same dates and addresses again.

Funder dashboard loads for very large organizations

Funding partners whose portfolio includes a very large organization (hundreds of thousands of clients) were seeing "We couldn't load your dashboard" instead of their numbers. The dashboard, the organizations list and each organization's page now load in a few seconds regardless of size.

Part of how this works: the demographic breakdowns, the service breakdown and the impact figures are now computed on a schedule, once an hour, instead of on every page view. The dashboard shows when those figures were last computed. An organization attached to your partnership since the last run is listed as pending in those sections until the next hourly refresh, rather than appearing with zeros. Activity, new-client counts, and organization summaries remain live.

Funding partners can now see delivery over time

The funding partner portal has a new Trends over time section, on both the main dashboard and each organization's page.

Until now every figure in the portal was a lifetime total, a single calendar year, or a this-week snapshot. That tells you how much, but not whether it is growing, when it happened, or which organization it came from.

What is new:

  • A chart of delivery over time. Pick any of the metrics you already see as tiles: service records, people served, value of goods distributed, items distributed, events held, or volunteer hours.
  • A period that matches your grant, not the calendar. Last 12 months, last 24 months, year to date, or your own start and end dates. Group by month, quarter or year.
  • A comparison across your organizations. Who delivered the most this period, what share of the total each represents, and whether they are up or down against the period before.
  • Export to CSV, so the numbers can go straight into a board memo or an annual report.

The period you choose is part of the page address, so you can send a colleague a link to exactly the view you were looking at, and it follows you when you click into a single organization.

Totals in the new section match the impact figures above them for the same window, including "people served", which counts each person once no matter how many months they appear in.

As always, the portal shows aggregate figures only. No individual client information is ever visible to a funding partner.

Funding partners can see how their organizations use the system

Alongside the new delivery trends, the funding partner portal now shows a How they use the system section on the dashboard and on each organization's page.

Delivery numbers say what an organization achieved. This says whether HumanixOS is actually part of how they work:

  • Active days and the typical gap between them. Steady weekly use and one big catch-up session can produce the same number of records, and they mean very different things.
  • Visits, counted whenever someone signs in and uses the system, whether or not they record anything while they are there.
  • People active, against how many accounts the organization has. One person carrying all the data entry is worth knowing about.
  • What they use it for, with a share for each part of the product and when it was last touched.
  • Switched on, but not used, listing features an organization has enabled and recorded nothing in during the period.

All of it respects the same period and grouping controls as the delivery trends, and exports to CSV.

Two deliberate limits. Where usage was never measured, the portal says so rather than showing zeros, because "we did not measure this" and "they stopped using it" are very different statements. And as everywhere else in the portal, these are counts only: a funding partner never sees who did what, only how many people were active.

The page toolbar no longer disappears on Link Clients

The sticky toolbar that sits at the top of every dashboard page was missing on two service pages: Link Clients and Service Templates. Opening Link Clients from a service made the toolbar vanish, which looked like a glitch.

Both pages now carry the toolbar, with a clear way back to where you came from.

More of the app now follows your language setting

If you use HumanixOS in French or Spanish, a number of screens were still showing English. This release closes most of those gaps.

The dashboard home tiles, the notification center, the email campaign area (the campaign builder, the automation editor, list filters and the new-campaign pages), the board portal tab titles, the integrations page, the import wizard's field list, and the pickers for team members and ledger accounts now render in your chosen language. Success and error messages in the grants, donors, forms and SMS areas are translated too, and the "delete saved block" confirmation in the email builder is now a proper in-app dialog instead of a browser popup.

Dates across the app now respect your language as well. Month and weekday names, "3 days ago" style timestamps, the auto-save indicator, and dates in exported spreadsheets used to come out in English, or followed your browser's language rather than the one you picked in HumanixOS.

The standard client field names (First Name, Date of Birth, ZIP Code and the rest) are now translated wherever they appear: table headers, the client profile card, the import wizard, exports, and the email editor. If your organization has renamed one of these fields, your own name is always shown exactly as you entered it.

As before, anything your organization typed in, such as campaign names, subject lines, saved views, category names, or custom field labels, is never translated.

Filtering by a multi-select field works again

Filtering a table by a multi-select field (a custom field where a record can have several options ticked) returned no rows at all, and the "Is empty" and "Is not empty" checks on those fields gave the wrong answer. Both are fixed on the People list, on organization record contact lists, and in generated reports.

On a service's client list, filters on the service's own fields were being ignored entirely, so the list stayed unfiltered no matter what you chose. Those filters now apply.

Filtering by a value that contains a comma or parentheses, such as "Food, Pantry (weekly)", also used to fail with an error. That works now too.

Service pages now explain why a page will not open

If you did not have permission to link people to a service, the page used to say the service could not be found. The service was there the whole time, and the message sent people looking for a missing record instead of asking for access.

Service pages now tell you what is actually happening:

  • If you do not have edit access, the page says so and tells you to ask an administrator.
  • If something went wrong loading the service, you get an error you can retry, instead of being told it does not exist.
  • While a service is still loading, you see it loading.
  • "Not found" now means the service really is not there.

The button that opens the client picker is also hidden when you do not have edit access, so you are no longer invited into a page that will turn you away.

Donation imports create donors for first-time givers

Importing gifts used to require that every donor already existed. A gift from someone new failed its row with "import your donors first", so recording a handful of donations from first-time givers meant adding each of them by hand before the file would go in.

Now a donation import creates a donor for anyone it doesn't recognise. Before it does, it checks your clients: if the giver is already a client, the new donor is linked to that client record instead of starting a second, separate identity for the same person. When someone gives more than once in the same file, they get one donor, not one per gift.

The import tells you how many donors it created and how many linked to a client, and that note is kept on the import record, so nothing appears without explanation. If you undo the import, the donors it created are undone with it.

Two things deliberately did not change. A gift naming someone that two of your donors already share still fails that row and says so, because choosing one of them would attribute the money to the wrong person and only you can say which was meant. And rows with no amount, the subtotal and placeholder lines that donor exports are full of, are still skipped rather than turned into donors.

If you are moving from another system and have a donor export, importing it first is still the better order. Donors created from a gifts file start with just a name, since that is usually all a gifts file carries.

Find your newest form, and read every answer

Two changes to the forms area, both from watching people use it.

Your forms list now starts with the newest. Previously the list led with forms that had submissions waiting, which meant a form you had just created could land near the bottom, below everything with activity on it. Now the most recently created form is first, so a form you just made is right where you expect it. If you liked the old order, it is still there under the Priority sort option, and whichever sort you pick now sticks with you as you move around instead of resetting every time you open a form.

Long answers are readable. Responses used to be cut off after a single line with no way to see the rest, which made long-form questions almost pointless. Answers now wrap onto several lines, longer ones have a Show more link that opens the whole thing, and questions that ask for a paragraph get more room on the page. Line breaks people typed into their answers are kept as well.

Sort your forms by service

If you run a lot of intake forms across several services, the forms list now has a Service sort option. Pick it and your forms group together by the service each one is linked to, in alphabetical order, with forms inside a service listed by name.

Forms that aren't tied to a service are gathered together at the end of the list, so nothing gets scattered. It's a small addition, but it makes finding every form for a given program much quicker.

Import in-kind donations, with their value and what was given

Gifts of goods and services can now come in through a donation import along with everything else.

Set the donation type to "In Kind" and map your file's amount column as usual. In-kind value is held separately from cash so that goods and money stay distinguishable, and the import puts it in the right place for you rather than making you know that. It says how many rows it moved. If your file keeps cash and fair-market value in separate columns, there is now a column for that too.

Donations of goods also carry what was actually given — "Gift basket and gift card for raffle", "four hours of legal advice". You can map it from your file's gift note or memo column, and it is there when you add an in-kind donation by hand as well. It shows with the gift, so a year later the record says more than a dollar figure. An amount with no description is not something you can write a thank-you letter from.

Type columns are also more forgiving now. "In Kind", "in-kind", "Credit Card" and "credit_card" are all understood, so a file exported for humans to read no longer has to be rewritten for us.

If your donated goods enter your stock and get handed out, keep receiving them through Inventory — that tracks items, quantities and per-unit values, which a donation record does not.

Number columns are easier to spot

If you have a column set up to hold numbers, it now looks like one. Numbers line up along the right edge of the column the way they do in a spreadsheet, so you can scan down a column and compare figures at a glance. Column headings for these columns are marked too, so you can tell what a column expects before you start typing in it.

There's one more change worth knowing about. A number column has always refused letters, but it used to refuse them silently, which made the cell look like it had stopped responding. Now, if you type a letter into a number cell, the cell tells you it only takes numbers. What you can enter hasn't changed at all, but you'll no longer be left guessing why nothing happened.

Importing organization records works again

Importing organization records from a spreadsheet was failing for everyone with a "you do not have permission" message, even for account owners. That's fixed — you can now import organization records as expected, and the import respects your organization's permissions like every other import.

Drag grant cards between columns

The grant opportunities board now works the way it looks like it should: drag a card from one column to another to change its status. Until now the board only grouped opportunities — changing a status meant opening the card's menu.

The grant pipeline board got the same treatment. Both boards now use one drag implementation, which means:

  • Dragging works on a phone or tablet. Press and hold the grip handle on the left of a card to pick it up, then drop it in another column. A plain swipe still scrolls the board, so you can browse without moving anything by accident.
  • It works from the keyboard too. Tab to a card's grip, press Space to pick it up, use the arrow keys, then Space again to drop.
  • The card moves right away, and slides back to where it started if the change doesn't save — with a message telling you what went wrong.
  • Clicking a card still opens it. The grip handle on the left of each card is what starts a drag.
  • Only people who can edit grants can drag. If your role is view-only, the boards look the same but the cards stay put.

One deliberate exception: on the opportunities board, the Promoted column doesn't accept drops. Promoting an opportunity creates a real grant in your pipeline, so it still goes through the Promote action on the card's menu.

Event custom fields now appear in event reports

If you collect extra information from event attendees — dietary needs, a t-shirt size, which session someone picked — that information now travels with your event reports.

  • One column per custom field, named the way you named the field, in the order you arranged it on the event.
  • Included in every export: CSV, Excel and PDF.
  • Visible in the report preview, in a table built for attendee rosters rather than the generic one it used to fall back on.
  • Available to charts. Ask for a visualization of an event report and the AI can now group and count by your own fields, using the field type you chose rather than guessing from the values.

A field you defined but nobody filled in still gets its column, so a gap in the data looks like a gap rather than a missing column.

Reports you generated before today keep working exactly as they did — they just don't have the new columns, because the information wasn't captured in them at the time.

One thing to know: event custom fields aren't covered by the report's "include personal information" toggle, which controls attendee names, emails and phone numbers. If a custom field holds something sensitive, that's worth keeping in mind when you share the report.

Fix an item's type before stock arrives

Picked the wrong type when you added an inventory item? You can now change it — as long as nothing has been received against that item yet. Open the item, edit it, and choose the right type.

Once stock has been received, the type locks for good. Everything on the shelf is described in terms of the type it arrived under — sizes, expiry dates, lot numbers — so changing it later would quietly rewrite your history. The edit dialog now says which of the two situations you are in, instead of only telling you the type is fixed.

Getting the type right matters beyond tidiness: it decides which category an item's distributions appear under in your reports and funder summaries.

The funder dashboard now tells you when it can't load

If something went wrong fetching your organizations' numbers, the funding partner dashboard used to show zeros and empty tables — which looks exactly like a portfolio that hasn't recorded anything yet. There was no way to tell "nothing happened" from "we couldn't ask".

Now it says so, and gives you a retry. If only part of the page is affected — impact, goods distributed, or organization activity — the rest still loads and a note names what's missing, so you know which numbers to trust.

Funding partner Team page now shows your whole team

The Team page on a funding partner account was only ever showing one person — you. Anyone else on the account was invisible, which also meant an owner had no way to remove a member they hadn't added themselves, and inviting a teammate who was already on the account failed with "already a member" while the page showed no such person.

The roster now lists everyone on the funding partner, for every member of it. If you do try to invite someone who is already on the team, the message points you at the Members list instead of contradicting it.

Households get their own home — and can now give

Households are no longer tucked inside Inventory. They now have their own place in the sidebar, their own on/off switch in Settings → Modules, and their own permissions — so your team can manage client families even if you never use inventory.

What's new:

  • A real household page. Click any household to see its members, their roles, custom fields, and quick links to each person's record.
  • Member roles. Every household member can be marked as a Guardian, Child, or Adult. Assign the guardian role to whoever fills it in that family — parents, grandparents, aunts and uncles. A child's guardians are always visible from their record.
  • Donations from a household. When recording a donation, you can now pick a household as the donor — perfect for joint gifts from spouses. The gift is counted once in your totals, shows up on both partners' donor pages as household giving, and thank-you letters address both names ("Dear Maria & José Rivera").
  • Household custom fields moved to Settings → Households, and keep working whether or not inventory is enabled.

Existing links to household pages keep working, and everything you already set up carries over automatically.

Organizations is available to every account

Signing up used to ask whether you serve individuals, other organizations, or both. That answer did one thing: it decided whether the Organizations area appeared in your sidebar — a question most people had no way to answer before they'd used the product.

The question is gone, and Organizations is now available to everyone. If you don't track organization records or corporate partners, you can switch the module off under Settings → Modules, along with anything else you don't use.

Accounts that previously had it hidden now have it available. If you had deliberately turned it off yourself, it stays off.

Client data now follows your permission settings everywhere

Permissions for client records are now enforced consistently, including when you ask the AI assistant.

Previously, a few places checked only that you belonged to the organization — so someone whose access to client records had been turned off could still reach that data through the assistant or a direct request, even though the buttons and menus were correctly hidden from them. The permission settings you configure now apply everywhere the data can be reached.

What this means day to day:

  • Finding and merging duplicate clients — including asking the assistant to find duplicates — now requires the same permission as merging them. If you can act on a duplicate, you can still find one; if you couldn't merge before, you'll now see a message explaining what access you need instead of results.
  • Exporting a client's record requires the export permission.
  • Viewing client lists requires the view permission.

Owners and admins are unaffected. The one real change is for roles that can't merge clients — managers and members by default: asking the assistant to find duplicates now returns the same answer the Find duplicates menu already gave them, which is that they don't have access. Anyone blocked now sees a clear explanation of what to ask an administrator for, rather than a generic error.

Link donations to the program they support

Donations can now be attributed to a specific service or program.

  • In-kind receiving: when you record received goods and create the donation on the spot, you can pick which program the gift supports. The link is saved on the donation record.
  • Recording a donation: the Record Donation form now has an optional service picker alongside Campaign and Fund, so cash gifts can carry the same attribution.
  • Where you'll see it: the Donations list and each donor's giving history now show the linked program.

The link is optional, and it never changes donation amounts or fair-market values — it's attribution only.

Duplicate scan now catches name changes

When someone comes back to you under a new surname — after a marriage, say — their intake form creates a second record rather than quietly overwriting the first. That is deliberate: rewriting one person's record with another's details is the kind of mistake that is very hard to undo.

The catch was that the duplicate scan couldn't see those pairs, because it never compared Social Security numbers. Two records for the same person with nothing in common but an SSN simply didn't show up.

They do now. If your organization collects SSNs, the scan on the clients page flags a pair whose numbers match exactly, tagged SSN, ready to merge.

The number itself is never involved in any of this: the comparison happens on the server against a one-way fingerprint, and no SSN — or anything derived from one — is ever sent to your browser or shown on screen. The badge tells you the two records agree, and nothing more.

One deliberate exception: Select all ≥ 90% skips pairs whose names don't match, so a matching SSN under two different names isn't swept up by that shortcut. Those pairs are listed like any other and you can tick them yourself, and if a bulk merge does include one, the confirmation step now tells you how many of the pairs you're about to merge carry two different names.

Exact matches now take priority in client matching

When HumanixOS looks for existing clients — during imports, form submission review, or duplicate scans — records that match exactly now always rank above near matches.

  • A client whose name, date of birth, and phone all match your file exactly is linked with full confidence, even when a similarly-named client exists.
  • A close-but-not-exact name (for example "Jon" vs "John") no longer scores the same as a perfect match. During imports, those rows are held for your review instead of being linked automatically.
  • Some exact combinations — like matching date of birth and phone together — were previously scored too low and are now weighted correctly, so real duplicates surface more reliably.

Filters now follow through to your reports

Two fixes to how filtering by Organization, Service or Household behaves.

Reports respect those filters. Filtering your client list by a service and then choosing "Create Report" used to produce a report covering every client in your organization — the filter was quietly dropped on the way, and nothing on screen told you. The report now covers exactly the clients you were looking at.

Large services filter correctly. If a service had more than 1,000 people enrolled, filtering by it only ever matched the first 1,000 — again silently, with a total that agreed with the wrong number. All matching clients are now found, however many there are. The same fix applies to filtering by organization and by household.

If you have saved views or reports built on these filters, they will start returning the complete set. A report generated before today keeps the numbers it was generated with; re-run it to pick up the corrected results.

A clearer funding partner portal

The funding partner portal got a round of improvements focused on making a portfolio easier to read at a glance.

See what was actually distributed. Alongside the goods value totals, funders can now see a per-item breakdown of goods distributed — each item with its quantity and retail value — both across the whole portfolio and on each organization's page. Items without a recorded price still appear with their quantities.

Impact totals expand by organization. Each impact metric on the dashboard (service records, clients served, volunteer hours, and the rest) can now be expanded to show how much each organization contributed to the total.

Activity you can rank — and trust. "Last active" now reads as an exact day count — "Active 12 days ago" instead of "about 2 months ago" — capped at 90+ days. The organizations list also opens sorted by recent activity, in a single column so the order reads straight down, and the day shown always matches when the work happened, whatever timezone you view it from. Activity itself got more honest too: an organization now counts as active when its people sign in or update existing records, not only when they create new ones, and entering a backdated donation or volunteer hours counts as activity on the day it was entered.

Polish. The portal shows loading placeholders instead of appearing empty while data arrives, organization pages put the organization's name in the page header, and the numbers on the detail cards line up properly.

Import notes now stick around

When an import brings in records that couldn't be linked to something you already have — for example, donors whose names didn't match an existing client — HumanixOS explains what happened. Until now that explanation only appeared as a brief pop-up message, and once it disappeared there was no way to get it back.

Those notes are now saved with the import itself. On the Imports page, any import that has notes shows a Notes button that opens the full list, so you can review what needs follow-up whenever you're ready. If you download the import's error file, the notes are included there too.

Mention teammates in client notes

You can now tag a teammate in a note on a client's page. Type @ in the note box and pick a teammate from the list — their name appears highlighted in the saved note, and they get an in-app notification that takes them straight to that client.

A few details we took care of:

  • Mentions always show the teammate's current name, even if they change it later.
  • Only members of your organization can be mentioned.
  • Editing a note only notifies people you newly mention — nobody gets pinged twice.
  • You can turn these notifications off under Settings → Notifications.

Print public forms to fill out on paper

Public forms can now be printed for paper intake. A new Print blank form button on every public form produces a clean, clipboard-ready version: ruled lines sized for handwriting, every dropdown and multi-select choice printed with a checkbox or circle next to it, and clear space for dates and longer answers.

The printout carries your organization's name and the form's title, skips anything that only makes sense on a screen (like file uploads, which become a short instruction instead), and prints in whichever language the visitor has selected — so a family reading the form in Spanish gets a Spanish printout.

This makes one link the single source of truth for a form, whether it's filled out online, at a community event with no wifi, in a waiting room, or during a home visit. You can also use the button with your browser's "Save as PDF" option to keep blank copies on hand.

A better recipient picker for distributions

Recording a distribution now opens a proper search window for choosing who received it — whether that's a person, a household, or a partner organization.

  • Recently served first. The people and households you serve most often appear before you type anything — regular weekly pickups are now two clicks.
  • Search that matches how you identify people. Typing a name, client ID, phone number, or email finds the right person — and no longer surfaces unrelated matches from addresses or other fields.
  • Tell namesakes apart. Every result shows the person's date of birth and client ID under their name, so twenty "Maria Garcia"s are no longer a guessing game.
  • Households by member name. Search for a household by the household's name or by anyone in it — "Garcia" finds Maria Garcia's household.
  • Short surnames work now. Clients named "Li", "Ng", or "Wu" can finally be found by typing their surname.
  • Big lists stay reliable. Organizations with many households or partner agencies no longer risk records silently missing from the end of a long dropdown.

Clearer Stripe donation settings, with a pause option

Setting up Stripe donations is clearer, and the settings page now does a few things it should have been doing all along.

No more "setup incomplete" when nothing is missing. After you finish setting up Stripe, Stripe spends a few minutes checking your details. The page used to say Stripe still needed information from you, which made a finished setup look like a failed one. It now says your details are being checked, tells you there's nothing to do, and updates on its own the moment you're ready to accept donations.

You can pause donations instead of disconnecting. If you need to stop taking donations for a while, you can now pause them and turn them back on whenever you're ready. Your Stripe account stays exactly as it is.

Disconnecting now asks first. Disconnecting closes your Stripe account for good, so it now asks you to confirm and explains what happens: monthly donations stop, your donation records stay in HumanixOS, and setting Stripe up again later means starting over with a new account. If your account still holds money that hasn't reached your bank, we'll tell you before you decide. And if Stripe can't close your account, we say so plainly instead of reporting success.

See where your money is. The settings page now shows what's available, what's on the way to your bank, and your recent payouts, with a link straight into your own Stripe account for everything else.

Clearer upgrade prompts for SMS & AI on the free trial

The free trial has always been described as including everything except SMS & AI. Those limits are now applied consistently: if your organization is on the free trial and you try to send a text message, set up SMS, or use one of the AI-powered tools, you'll see a clear message with a one-click path to upgrade — instead of a confusing error or, in some cases, no restriction at all.

Everything else in your trial works exactly as before, and nothing changes for paid or sponsored organizations.

All months