Help guide
Everything in Open Charity CRM, explained section by section. If you're brand new, read Getting started and Records, lists & fields first β the rest builds on those two.
π Getting started
On your very first visit to a fresh installation, the sign-in page asks you to create the administrator account β do this straight away, because until then anyone visiting the site could claim it. After that, the same page is the normal sign-in.
The three roles
- Admin β everything, including database structure, users, connections and settings.
- Editor β day-to-day work: records, fundraising, tasks, workflows.
- Read-only β can view and export everything, change nothing. Ideal for trustees.
Invite colleagues from Settings β Users β + Invite user. A one-time temporary password is generated β pass it on securely; they can change it after signing in with the π button at the bottom of the sidebar.
The π button in the sidebar footer switches between light and dark themes. The footer also shows the running version and start time β handy for checking a new deployment has landed.
π Dashboard
The Home page is made of cards: metric cards (a count or sum, optionally filtered β e.g. "Donations this quarter"), list cards (recent records), and chart cards (any saved chart).
- Click β Customise to enter edit mode, then + Add card to add, or β to remove a card.
- π Process recurring runs the daily housekeeping on demand: generates payments due on active regular gifts, lapses overdue memberships, and creates grant deadline/report reminder tasks. The same jobs also run automatically every time the server starts.
ποΈ Records, lists & fields
The whole CRM is built on one idea: everything is a record of a type. People, Payments, Events, Grant applications β all records. Each type has fields, and both types and fields are editable data, not code: change them in Settings and every list, form, filter, chart and API updates instantly.
Working with lists
- Search looks across every field of the type, as you type.
- β² Filters builds AND/OR condition groups with operators that match each field's type (contains, is, greater than, before, is emptyβ¦).
- β Save view stores the current search + filters + sort as a named pill above the list, per record type β one click to return to it.
- Click a column heading to sort; click a row to open the record.
The record page
Four tabs: Details (edit fields inline β changes save from the tick that appears), Relationships (what this record points at, and everything that points back at it β a person shows their payments, tasks, memberships and grants automatically), Attachments (files you've uploaded onto this record), and Timeline (activities, emails, payments and the full audit history in date order).
Attachments
The Attachments tab lets you keep files with the record they belong to β
a signed grant agreement on the grant application, a scanned letter on a person, funder
correspondence on an organisation. Click β§ Upload file, pick a file (up to
10 MB each), and it appears in the list with its size and who uploaded it. Click a file
name to download it; use the π button to remove one. Every upload and removal is recorded
in the record's Timeline. Read-only users can download files but not
add or delete them. Files are stored on your server's data volume alongside the database β
if you back up the database, back up the attachments folder next to it too.
Custom types and fields (admins)
In Settings, add fields to any type or create whole new
record types. Field types include text, numbers, currency, dates, checkboxes, ratings,
dropdowns (single or multi-choice), "point to another record" relationships (single or
multiple), and user fields for assigning things to colleagues. Record
naming is controlled by an editable title template like
{first_name} {last_name}.
CSV import and export
- β© Export CSV exports the current list respecting search and filters, with relationships resolved to names.
- β§ Import CSV matches columns to field labels or keys
(case-insensitive). Multiple emails or multi-choice values go in one cell separated by
semicolons:
a@x.je; b@x.je.
Bulk update
Need to set the same value on lots of records at once? Search and filter the list down to exactly the records you want, then click β Bulk update. Pick a field, choose the new value, and confirm β every record currently shown is updated in one go. Records that already hold that value are left alone, and each change is written to the record's history just like a normal edit. (Read-only users don't see the button.)
π€ People & organisations
People and Organisations are the heart of the database β nearly everything else links to them. Emails and phones are multi-value with a starred primary: add as many as you like and mark which one to use by default. A person can belong to several organisations, and can be more than one thing at once β Supporter type is multi-choice (Donor and Volunteer, say).
- β Send email on a person's record sends a templated email (see Workflows & emails).
- π Portal link generates their secure self-service link (see Supporter portal).
- π§Ή Duplicates in the list header finds and merges duplicate entries (see Duplicates & merging).
π· Payments & regular giving
A Payment is any money in: donation, membership fee, ticket sale, grant, legacy. It links to the person or organisation it came from, and optionally to a campaign, membership, subscription or grant application.
Subscriptions are Beacon-style regular giving: the subscription record is the agreement (amount, frequency, status, next payment date) and payments are the transactions. In demo mode a monthly gift is handled by the built-in scheduler, which creates each Payment record when it falls due and advances the next-payment date. When PayPal is switched on, a monthly gift becomes a PayPal subscription: PayPal charges the donor and each payment is recorded automatically, so the scheduler leaves those alone.
π Jersey Gift Support
Open Charity CRM implements Jersey Gift Support (not UK Gift Aid): single donations of Β£50 or more from Jersey-resident taxpayers earn the charity an extra 25p per Β£1, reclaimed from Revenue Jersey.
How it works, end to end
- A donor makes a declaration and provides their tax identification number (TIN) β via your donation page, the supporter portal, or typed into their person record by you.
- Every donation is checked automatically as it arrives or changes: type Donation, Β£50+, declared donor with a TIN.
- Eligible donations accrue onto the current quarterly claim, visible on the π Gift Support page with running totals and the 25% reclaim value.
- When the quarter is ready, export the reclaim schedule CSV (donor, address, TIN, date, amount, reclaim) and send it to Revenue Jersey, then mark the claim Submitted β which locks its payments β and later Paid.
ποΈ Grant applications
Track the grants your charity applies for β trusts, foundations, public funds. Each application records the funder (an organisation) and your contact there, the amounts requested and awarded, the application deadline, submitted and decision dates, the next report due to the funder, and what the funding is for.
The pipeline
Grant applications open as a board: columns for Researching β Preparing β Submitted β Awarded / Declined β Completed, with each column showing its count and total money. Drag a card to move an application between stages; click it to open the full record. The β° button switches back to a normal list.
Never miss a deadline
When an application in Researching or Preparing has a deadline within 14 days, a reminder task is created automatically β once. The same happens for the report due date on Awarded grants. Reminders appear on the Tasks page linked to their grant. They're generated at server start and whenever you press π Process recurring.
Link the money
When an award arrives, record it as a Payment (or pull it in from Xero) and set its Grant application field β the grant record then shows exactly what was received against it, totalled.
π Xero accounting sync
Entirely opt-in, set up from Settings β Connections. It
needs a free Xero developer app and two environment variables on your server β the
DEPLOY.md file in the repository walks through this once-only setup.
Pushing payments to Xero
After connecting, choose which Xero bank account payments post to and an income account code per payment type (custom payment types appear automatically). From then on payments sync as bank transactions β automatically at startup, on β» Sync now, or from a workflow action. The sync is idempotent (a payment is never posted twice) and never blocks payment creation if Xero is unreachable; a log on the Connections card shows every attempt.
Pulling money in from Xero
For money that landed in Xero without going through the CRM (a bank transfer entered by your bookkeeper), open Settings β Connections β Import donations from Xero: tick which Xero income accounts to pull from, press β Pull from Xero, and review the staged transactions. Link each one to an existing donor β or create a new person/organisation on the spot β then press Import. Nothing is ever created without that explicit step, imported payments are excluded from outbound sync, and already-known transactions are filtered out automatically.
πͺ§ Public forms & giving pages
"Donation forms" records define your public pages β each has a web address like
/give/spring-appeal that you can link from your website or share directly.
Three form types:
- Donation β suggested amounts, optional monthly giving, campaign allocation, and a built-in Jersey Gift Support declaration with TIN capture. Donors are matched to existing people by email or created automatically.
- Membership β tiered prices ("Individual: 25, Family: 40, Life: 250"), automatic member numbers, and the joining payment recorded.
- Event registration β priced ticket types including multi-attendee tickets ("Table of 8: 250 x8"), live totals, and capacity enforcement with sold-out handling.
Every form record has an Active switch, and the record page shows an πͺ§ Open public form button so you can see exactly what supporters see. Submissions from any form trigger workflows.
πͺ Events, tickets & memberships
- Events hold the date, location, capacity and campaign; each sale creates Ticket records linked to the buyer and payment, and capacity is enforced across all ticket types (a "Table of 8" counts as eight seats).
- Memberships record the type, status, member number and renewal date. Memberships past their renewal date lapse automatically. Life memberships never expire.
π Supporter portal
On any person's record, π Portal link generates a secure tokenised link to give them. Without needing an account, the supporter can update their contact details, make or update their Jersey Gift Support declaration and TIN (which re-runs eligibility on their donations), choose whether to receive emails (their email consent), and see their memberships, regular gifts and payment history. Changes they make are recorded in the record's history as "Supporter portal".
β Tasks
The Tasks page (top of the sidebar) shows every open task grouped Overdue / Today / Upcoming / No date, each with its due date, assignee and links to the related person, organisation or grant. Tick the checkbox to complete a task; recently completed ones sit struck-through at the bottom.
- + New task creates one pre-assigned to you β change the assignee to any colleague.
- Assigned to me filters the page to your own tasks.
- Tasks are Activity records under the hood, so they also appear on the timeline of whatever they're linked to, and workflows can create them automatically.
β«Ώβ«Ώ Pipeline boards
Any record type with a dropdown field can be viewed as a drag-and-drop board: the β° / β«Ώβ«Ώ toggle appears in the list header, with a picker for which dropdown drives the columns. Cards show the record's name, money and date; columns show counts and currency totals. Dragging a card updates the field for real β including triggering any workflows that watch it. Search and filters still apply in board view.
Grant applications open on their pipeline by default; Payments by type, event check-in by status, and any custom status field you add all work the same way.
π Charts
Build charts from any record type at Reporting β Charts: choose bar, line or pie, whether to count records or sum a field, what to group by (a dropdown, checkbox, rating or date β dates bucket by day/week/month/quarter/year), and an optional filter condition. Charts preview live on the page, and any saved chart can be pinned to the Dashboard via Customise β + Add card β Chart.
Line charts need a date field to group by β a trend only means something over time.
β‘ Workflows & emails
Workflows automate the routine: when a record of a chosen type is created or updated, if it matches your filter conditions, then run actions:
- Create a record β e.g. a thank-you Task linked to the donor. Values
support
{field}merge tokens from the trigger and{today}. - Update the triggering record β set a status, stamp a date.
- Send an email β from a template, with merge tokens.
- Sync to Xero β for payment workflows.
Workflow actions never trigger other workflows, so you can't create loops. Email templates live on the βοΈ Emails page along with the outbox.
Real delivery & email consent
When your administrator has connected an email provider (Postmark β see Deploying), emails are sent for real; otherwise they're logged in demo mode. The βοΈ Emails page tells you which mode you're in.
To respect Jersey data-protection rules, the app only delivers emails to people whose Email consent is βOpted inβ. Anyone else β βNot askedβ or βOpted outβ β still gets the email logged to their timeline, but it is not sent. The send screen warns you before it does this. People can opt in themselves by ticking βkeep me updatedβ on a donation form or in the supporter portal, and staff can set consent on a person's record. Every consent change is recorded in the person's history.
π Letters & mail merge
Generate Word letters from a template with the record's details filled in β thank-you letters, Gift Support acknowledgements, funder cover letters. Templates live on the π Letters page.
- Create a template: give it a name, choose which record type it
merges against (People, Grant applicationsβ¦), and write the letter body. Drop in
{token}merge fields β the editor lists every token available for the chosen type, plus{today}and{title}. A typo like{frist_name}is left visible in the letter so you spot it. - One letter: open any record and click π Letter β a
.docxdownloads with that record's details merged in, ready to print or post. - A whole batch: on a list, filter down to the records you want (e.g.
donors who gave last quarter), then click π Letters on the toolbar. You
get a
.zipcontaining one.docxper record.
π Record history
Every record keeps a permanent audit trail, shown in its Timeline tab: who created it, every field change with before β after values ("Amount: Β£50 β Β£75, by Sam"), and how it entered the system β an admin edit, CSV import, donation form, supporter portal, Xero import, workflow or the scheduler. History is append-only: it can't be edited or deleted, even by admins.
π§Ή Duplicates & merging
The π§Ή Duplicates button on the People and Organisations lists finds likely duplicates β people who share an email address or a full name, organisations that share a name. For each pair, Mergeβ¦ lets you:
- Choose which record to keep (the other is merged in, then deleted).
- Resolve any fields where the two records genuinely conflict.
Everything else is automatic: gaps on the kept record are filled from the other, emails and phones are combined without duplicates, and every linked record β payments, tasks, memberships, tickets, grants β is re-pointed to the kept record. The merge is recorded in its history. Nothing that referenced either record is lost.
π Users, roles & security
- Roles are enforced on the server for every request β hiding a button is never the only protection.
- Passwords are stored with modern scrypt hashing; sessions are HttpOnly cookies; sign-in attempts are rate-limited per account.
- There must always be at least one active administrator β the system prevents removing the last one.
- Deactivating a user signs them out immediately and blocks sign-in, without deleting anything they did (their name stays in record history).
π API access
Every signed-in user can create API keys from π API Access in the sidebar. A key acts with its owner's role β a read-only user's key is read-only β and keys can never manage users, other keys or passwords, so a leaked key can't mint itself more access. The plaintext key is shown once at creation.
The versioned read-only API lives at /api/v1: schema, filtered/paginated
record queries, record detail with relationships, CSV export, and a one-call
full-database export as JSON. Documentation is generated live from your
own schema β custom types and fields included β at /api/v1/docs.
π Deploying & backups
The app is one Node.js process with a single SQLite database file, so it runs anywhere with Node 22+ (or Docker) and a persistent disk β Render, Fly.io and Railway all work well and cost a few pounds a month. The essentials:
- Set the
DATA_DIRenvironment variable to the persistent disk path β without it the database is wiped on every deploy. - Visit the site immediately after first deploy to claim the admin account.
- Backups: the whole database is one file (
crm.db) β download a copy on a schedule, or use continuous replication. - Xero needs
XERO_CLIENT_IDandXERO_CLIENT_SECRETset the same way.
The step-by-step platform walkthroughs (Render, Fly.io, Railway, custom domains, the
Xero developer-app setup and a go-live checklist) live in the repository's
DEPLOY.md file.