A custom Frappe app for ERPNext v15. It adds the ATA Project Portal, a web app at /portal-app for projects, tasks, planning views, a standard project folder tree, file sharing and a client portal. Everything is stored in normal ERPNext records such as Project, Task, File, Customer and User.
Every login has one of five roles: Super Admin, Department Admin, Team Lead, Team Member or Client Customer. The role and the Department data decide which projects a person sees and what they can change. See DOCUMENTATION.md → Who is who.
Start with DOCUMENTATION.md. It has an overview, a list of every feature and the key addresses.
| Document | For whom | Hosted copy on the site |
|---|---|---|
| DOCUMENTATION.md | Everyone. Start here. | — |
| USER_GUIDE.md | Staff and client users | /handbook (public, no login) |
| DEVELOPER_GUIDE.md | People who maintain the portal: how it works with ERPNext, the API, build and deploy | /tech-guide (login, System Managers only) |
| TESTING.md and docs/UAT_TEST_GUIDE.md | Testers | /test-guide (login, System Managers only) |
Warning: this repository and
/handbookare public. Never commit passwords, API keys, server addresses, test logins or real client names.
- Frappe and ERPNext v15 on a bench. The app lists
erpnextas a required app. - Node 22 (see
frontend/.nvmrc) and yarn, to build the portal screens.
You can install this app using the bench CLI:
cd $PATH_TO_YOUR_BENCH
bench get-app $URL_OF_THIS_REPO --branch main
bench --site <site> install-app portal_app
bench build --app portal_appbench build --app portal_app also runs the build script in the app's root package.json, which builds the Vue screens into portal_app/public/frontend. That folder is not stored in git, so it has to be built on every server.
Installing (and every bench migrate) adds the portal's custom fields to Project, Department, User, Event and File. It also creates the Client Customer role (an older Portal Customer role is renamed, not replaced) and the Department Admin and Team Lead roles, adds the default file types and imports the Desk workspace Project Portal.
-
cd apps/portal_app && git pull -
Build the screens with Node 22 (for example through nvm):
cd frontend && yarn build. Runyarn installfirst iffrontend/package.jsonchanged. -
Check what changed:
git diff --name-only ORIG_HEAD HEAD. If the list has a DocType JSON,install.py,patches.txt/patches/,fixtures/, or a change toscheduler_events,fixturesorafter_migrateinhooks.py(check withgit diff ORIG_HEAD HEAD -- portal_app/hooks.py), you must migrate. Onlybench migratesyncs fixtures and scheduled jobs and runs theafter_migratehook;clear-cachedoes none of these:- Take a backup first:
bench --site <site> backup --with-files. bench --site <site> migrate.
Otherwise:
bench --site <site> clear-cache. (Full steps: DEVELOPER_GUIDE.md §10.1.)The five-role update of 13 October 2026 needs a migrate: it renames the client role, adds the
Portal Department AdminDocType and three patches, and files the loose files in each client folder. Afterwards a Team Member sees only the projects they are on, so put people on their projects (see DEVELOPER_GUIDE.md §3.4). - Take a backup first:
-
bench --site <site> clear-website-cache -
Reload the web and background workers:
bench restart, or send a QUIT signal to the gunicorn and worker processes throughsupervisorctl.
This app uses pre-commit for code formatting and linting. Please install pre-commit and enable it for this repository:
cd apps/portal_app
pre-commit installPre-commit is configured to use the following tools for checking and formatting your code:
- ruff
- eslint
- prettier
- pyupgrade
Automated tests live in portal_app/tests/ (74 tests). Run them on a development or test site that has tests allowed, never on production:
bench --site <test-site> run-tests --app portal_appagpl-3.0