Warning
This app is not ready for production. Large changes should be expected until a 1.0.0 version is released.
A fully open-source church management app built on the Frappe Framework.
Prayers | People | Finances |
---|---|---|
The following features have been implemented in this app (see the 🗺️ Roadmap below for future plans):
- Portal for users with a login:
- Prayer request submission & viewing
Church Person
tracking- Define and track
Church Person Relation
ships- Define
Church Person Relation Type
s
- Define
- Define & track
Church Person Role
s (i.e. board member, deacon, pastor, etc)
- Define and track
Church Family
tracking- Track head of household (Set on
Church Person
record)
- Track head of household (Set on
Church Prayer Request
tracking- Authenticated or Anonymous web-form submissions
- Authenticated users can manage their own prayer requests
Church Missionary
&Church Missionary Agency
tracking- Church module desk workspace with guided setup steps
- Event tracking
- Event types, details, basic attendance tracking & reporting & templating
- Collection/donation tracking
- Donation entry with collection totals & split check support
- Bank reconciliation report
- Fund balance tracking
- Collections automatically update funds when saved
- Church Belief tracking
- Basic Church Website
- About Page
- Church Letter tracking (from people & missionaries)
To use the 'Church' app, you must have a working Frappe environment first. There are a variety of ways to install a Frappe instance. The recommended ways for this project are:
The easiest (but not free) way to get a working Frappe environment is to use Frappe Cloud. For a few dollars per month you can run an instance in the cloud. You get your choice of support options and shouldn't need to worry about data loss yourself. Note: Wit this option, the money you pay to FrappeCloud is not received by maintainers of this 'Church' app. - We offer the 'Church' software for free, but you pay for the cloud hosting through Frappe.
If you're the more technical and/or frugal type, you can self-host an instance on a home pc or server. Frappe Manager can be used to quickly setup a local frappe instance. It's not as easy as a simple .exe file install, but we think you can do it (Please ask us for help if you can't)! The general steps are:
- Find a machine onto which you can install Frappe (A dedicated linux-based machine is best. Windows is possible, but is not recommended as it requires some extra steps and the use of WSL.)
- Run the frappe-manager install script
- Create a new site using frappe-manager:
fm create -e prod <church.your_site.com>
. - Update DNS records to point to your new site. This is a bit outside the scope of this project, but basically you need to either update your hosts file to map your site url (used in the above command) to the ip address of the machine hosting the frappe instance. Alternatively, you can update your DNS server on your router to point to your new site. If you need help with this, you can file an issue and I'd be glad to schedule a call to try to help you set it up.
Making a local instance of frappe accessible from outside of your network is currently out of the scope of this project, but with some persistence and some technical expertise, it can be achieved. If you are completely lost or uncomfortable with this, it may be best to use the Frappe Cloud option above, or contact us for help. We'd be glad to help where we can.
To install this app on your frappe instance:
-
If hosting on Frappe Cloud, you should be able to log into your Frappe Cloud dashboard, select your site, and install the app from the list of apps.
-
If you are self-hosting, you can use bench by activating the bench environment with
fm shell
and then running the following# Set the bench command to use your site (Replace `<church.your_site.com>` with your actual site name): bench use <church.your_site.com> # Download the app: bench get-app https://github.com/meichthys/church ## Or if you want to try the latest development version: bench get-app https://github.com/meichthys/church --branch develop # Install the app: bench install-app church # Migrate the app for good measure: bench migrate # In the future, to update the app to the latest version, log into the host server and run: fm shell bench update bench migrate
After the above installation you should be able to access the web interface using the URL you defined in the bench create
command above. You should see the Church
app installed when you view Help > About
.
Before you start using the app be sure to:
- Change the
Administrator
users's password (the default isadmin
). This user should only be used by the site administrator - and should not be used on a daily basis. - Setup a new user in the system by typing
New User
in the searchbar. Under the "Roles & Permissions" tab, Give this user theChurch Manager
Role Profile andChurch
Module Profile. This user will be able to manage all aspects of the church. - If you want more than one user on the system, or if you want to delegate some responsibilities to other people, you can create additional users with the
Church User
Role Profile andChurch
Module Profiles. These types of users will be able to read and update most information, but not certain critical information.- To see a list of permissions you can open the
Role Permissions Manager
and select theChurch Manager
orChurch User
roles to see what permissions these users roles have.
- To see a list of permissions you can open the
Hopefully this roadmap will help avoid too much scope creep and provide a sense of where this project is headed. The items below are listed in order of current priority.
- Sermon Doctype
- Ministry tracking
- Add standard church website pages:
- Home/Welcome
- About
- Missions
- Beliefs/Statement of Faith
- Calendar
- Contact Us
- Collection Improvements
- Make collections submittable(?)
- Additional portal pages
- Show tracked giving
- Show tracked attendance
- Allow updating attendance status(?)
- Add Onboarding Tours
- Add 'Tutorial' button to each doctype form
- Email setup
Contributions are very welcome! If you plan any large contributions, please let me know first so we can coordinate and make the chances of a merged pull-request more likely.
- Doctype Naming: I've generally been using a single fieldname for the doctype names when the records in the doctype have low chance of clashing. If there is a higher chance of clashing, I've been using multiple fields in the name along with a
{##}
auto increment. The number of digits in the auto-increment are just sane values that should never be exceeded. I then specify the Title Field in the View Settings, and check theShow Title in LInk Fields
option. This mostly hides the autonumber name from the user and lets the user only see the not-so-confusing name specified in theTitle Field
(sometimes I create a custom field to concatenate values - since theTitle Field
cannot take multiple fields at once afaik.)
- Make sure the doctype name is pre-pended with
Church
- Add a doctype description on the settings tab
- Add fields for the doctype (if necessary add field descriptions).
- Add permissions for the new doctype to the
Church User
andChurch Admin
roles. (Not necessary for child tables)- After adding permissions, export the permissions by going to the DocType and chosing ... > Customize > Action > Export Customizations. Select the relevant
Church
module and check both the 'Sync on Migrate' andExport Custom Permissions
options and click 'Submit'.
- After adding permissions, export the permissions by going to the DocType and chosing ... > Customize > Action > Export Customizations. Select the relevant
- Add the doctype to the relevant workspace. (not necessary for child tables)
- If necessary, add an onboarding step & form tour to explain specific fields.
- If any default records for this doctype should be shipped with the app, add fixtures for them in
hooks.py
.
This app uses pre-commit
for code formatting and linting. Please install pre-commit and enable it for this repository:
cd apps/church
pre-commit install
Pre-commit is configured to use the following tools for checking and formatting your code:
- ruff
- eslint
- prettier
- pyupgrade
MIT