User Guide · Version 1.0 · 2026

Everything you need to know

A complete, practical guide to every feature in Endulo — from your first project to advanced team workflows.

Getting Started

1.1 Creating an Account

Visit endulo.com and click Get Started. Enter your full name, email address, and a password. After submitting, check your inbox for a verification email — click the link to activate your account. You cannot log in until your email is verified.

1.2 Logging In

Go to endulo.com/login and enter your credentials. After five failed attempts within 15 minutes, your account is temporarily locked. If this happens, wait 15 minutes or contact your administrator.

1.3 Personal Space vs. Organization

Endulo gives every user a Personal Space on first login — a private workspace that belongs only to you, always available even without a team. Use it for independent projects, notes, and personal task management.

An Organization is a shared workspace for a firm or team. It unlocks shared projects, team management, phase templates, and time tracking across members. You can belong to multiple organizations simultaneously.

Your workspaces

Studio Ionescu & Partners

Admin

Active

Arh. Popescu SRL

Architect

Personal Space

Owner

1.4 Organization Onboarding

After creating an organization, a step-by-step wizard walks you through: naming your org, uploading a logo, inviting your first members, and configuring phase templates. Each step is optional — you can skip any of them and return later under Settings → Organization.

1.5 Switching Organizations

Click the organization name at the top of the sidebar to open the workspace switcher. Selecting a different org instantly updates the entire app context — all pages (projects, team, time) reflect the selected workspace.

1.6 Navigation Overview

The sidebar (desktop) and bottom bar (mobile) are your primary navigation. Key sections:

  • Dashboard — home screen with stats, tasks, and deadlines
  • My Work — your personal task board across all projects
  • Time — log and review work hours
  • Workspaces — projects, documents, resources, vendors, collaborators
  • Team — members, roles, invitations, and teams
  • Notifications — alerts and updates

Dashboard

The Dashboard is your home screen. It gives you a real-time read of the entire workspace at a glance — stats, tasks, projects, and deadlines — without clicking into individual pages.

2.1 Stat Cards

Four cards across the top summarize the most critical numbers. Each has a colored top border that makes it instantly scannable:

  • Active Projects (blue) — projects currently in progress
  • Due This Week (blue) — your tasks due between today and the end of the week
  • This Month (green) — your tasks completed since the first of the month
  • Overdue (red) — your tasks past their due date; shows a ring when non-zero

All four cards — like the Upcoming Deadlines list — count only active projects: closing a project (or moving it to the trash) removes its phases and tasks from these numbers.

The three that count tasks count your own tasks — the ones assigned to you — so they describe the same work as the My Tasks list beneath them and the My Work page they open. Active Projects counts the projects you can see: for a role holding Can see all projects that is every project in the organization, and for one without it, the projects you are on the Project Team of (see Project Visibility in Section 3.4). "Due This Week" includes today and tomorrow, because Home has no separate Due Today card. Overdue follows the rule in Section 4.2 — due before today, and never a task you have finished.

Every widget on this page is drawn from that same set of projects, so the page cannot count four and then list two: the stat cards, My Tasks, Recent Projects, and Upcoming Deadlines all describe the projects you can see.

Active Projects

12

Due This Week

4

This Month

28

Overdue

2

2.2 My Tasks

A list of the tasks assigned to you, ordered by due date. Only tasks where you are the assignee appear — unassigned tasks and tasks assigned to teammates are not shown, and tasks from closed projects are excluded, matching the My Work page. Each row shows the task name, parent project, priority badge, and due date. Click any row to open the task detail. Overdue items show the date in red.

My Tasks

Site analysis — Building A

Ionescu HQ

HighTomorrow

Structural load calculations

Popescu Villa

Medium3 days

Permit submission package

Office Tower B

HighOverdue

Client presentation deck

Ionescu HQ

LowDone

2.3 Recent Projects

The projects most recently updated in your organization. Each row shows the project name, a progress bar (completed tasks / total tasks), and deadline. Click any row to open the project.

Recent Projects

Residence Popescu

7/12
Jun 15

Ionescu HQ

18/24
Sep 30

Office Tower B

3/8
Aug 01

Casa Vladescu

1/6
Dec 20

2.4 Upcoming Deadlines

The right column shows a calendar-style list of upcoming deadlines — projects, phases, and tasks — ordered chronologically. Each item shows the day, month, type badge, name, and parent project.


Projects

3.1 Creating a Project

Go to Workspaces → Projects and click New Project. Fill in:

  • Name — visible to all members; use a consistent naming convention
  • Coderequired: a short identifier (e.g. IONHQ-01) shown in task lists and exports
  • Type — the project category. Your organization can configure custom types under Settings → Types
  • Beneficiary — the client name
  • Deadline — the target completion date
  • Description (optional) — a brief scope statement visible on the project card

Creating a project puts you on its Project Team automatically, as an individually added member — a new project is never sightless to its maker. You can remove yourself afterwards from the project's Team tab like any other individually added member.

Design Development
POP-RES-01001/2026Residence Popescu
Design Phase
Familia Popescu
15 Jun 2026

Project Code is required. A new project cannot be created without one — it is how the project is identified in every list, so the Create button stays disabled until the field is filled. The field types in uppercase and stops at 12 characters, and what is stored is exactly what you see: trimmed and uppercased. So gav, GAV  and Gav are all stored as the same code, and search, generated documents and the project card all agree on it.

Projects created before this became a requirement keep working with no code — they load and save normally, and nobody has to go back and fill them in. But once a project has a code, it cannot be saved with the field emptied.

If the code is already in use, you are told. When you leave the Code field, the other projects in your organization already using that code are named right underneath it, each as GAV 001/2026 · Full title, with closed ones marked “Closed”. Sharing a code is not an error: a repeat client keeps the same code across every project they commission. It is not free either — it makes the project number required, on your project and on theirs, which the next paragraph explains. Naming them happens while the form is still open, so you find out before pressing Save rather than after. The same check runs when you edit the code on the project’s Cover tab — the project you are editing is never counted against itself, and projects in the trash are not counted at all. The comparison ignores case and spacing, so typing gav finds the project stored as GAV.

A shared code makes the project number required — on both projects. Two projects using the same code are told apart by nothing but their numbers, so the moment the code you typed is already in use, Project No. stops being optional and is marked required. The same goes for the projects already using it: any of them carrying no number gets its own number field right there in the list, and you fill those in before saving. That is deliberate. The older project was created back when nothing else used the code, so nobody ever asked it for a number — and it is the one nothing can identify once yours exists. However many of them there are, they all get a field — closed ones included, since they are still listed and still identified by their code.

And the numbers have to differ. Two projects reading GAV 001/2026 are as impossible to tell apart as two reading GAV, so a number already carried by a project sharing the code is refused, and two of the inline fields cannot be given the same number either. The field that repeats another is outlined in red and Save stays disabled until it is changed. Two existing projects that already share a number are left alone — neither of them was given a field here, and refusing your save over something you cannot reach would strand you; they are settled the next time one of them is edited.

Everything is saved in one go: your project and the numbers you supplied for theirs land together, or nothing does. An existing project is never changed except by a number you typed into the field the form put in front of you. If the code is not shared, nothing changes — the number stays optional and no extra fields appear. The rule holds wherever the code is edited, in the New/Edit Project panel and on the project’s Cover tab, and opening either of them on a project that already has a code runs the check straight away — so a pair that has been ambiguous for months is settled the next time one of them is edited.

How a project is named on screen. Project cards and the project page header lead with the project’s code — bold, uppercase, monospaced — with the project number in smaller grey text beside it, and the full title in grey underneath, shortened to two lines. Hover the title to read it in full. The code and the number always appear together: a repeat client keeps the same code across every one of their projects, so the number is what tells two of them apart. A project with no code shows its title in the leading position instead, exactly as before. The client portal is unaffected — clients see the full project title only.

The same name everywhere. Wherever a project is named to someone inside the organization, it is named that same way, on one line: GAV 001/2026 · Full title. That covers the task cards and rows on My Work, the dashboard’s tasks, deadlines and recent projects, the project a document belongs to, a team member’s tasks and projects, search results, what the assistant answers with, and the time log. The drop-downs that pick a project — a meeting, logging time, filing a document, generating one from a template — are all the same picker, reading the same way: code and number leading, the title in grey after them, one line per project, the full title on hover. The document and template pickers list projects by code, so the order matches what you are reading, with the codeless ones at the end; the meeting and Log Hours pickers lead with the projects touched most recently. On the plain-text surfaces that remain — the document page’s “Project:” line, and the deadline chips on the Time calendar, which read GAV 001/2026 · Full title: project deadline for a project deadline and name the phase after the project for a phase deadline — a very long title (say, a full legal parcel description) is shortened to its first 60 characters with an ellipsis, so the line stays readable; the code and the number are never shortened. So a project you know as GAV is findable as GAV on every screen, and its number is always there to say which GAV it is.

3.2 Project Phases

Phases are the structured workflow inside a project — a sequence of steps copied from your organization's active phase template when the project is created. They are a snapshot: editing the template later does not retroactively change existing projects.

Default phases: Concept → Design → Permitting → Construction → Handover. Each phase tracks status (Not Started, In Progress, Completed, Skipped) and estimated duration. To view or update phases, open a project and click the Phases tab.

A phase's dates and duration are independent facts, and editing one never rewrites another. Estimated weeks is your estimate of how long the work takes. Planned start is optional: leave it empty and the phase follows the previous phase on the timeline; set it to plan a break after the previous phase or a deliberate overlap. Deadline is the date the phase was promised — it never changes the estimate; instead the timeline shows when the plan disagrees with the promise. Clearing any of these fields in the edit form clears the saved value. Completed on is recorded automatically when the phase is marked complete, and can be adjusted or cleared in the edit form.

A completed phase accepts no new tasks. On the phase board its inline "Add a task" row is simply not there — never shown disabled — and marking the phase incomplete brings it straight back. The header's Add task dialog does not offer a completed phase at all, and a project whose phases are all completed says exactly that in the dialog rather than presenting an empty list. Asking the assistant to create a task in one — or moving an existing task into one — is refused with a message naming the reason and the remedy: mark the phase incomplete first. The rule is also enforced on the server, so a phase completed from another tab refuses an add row that was still on screen. Everything else is untouched: tasks already inside a completed phase stay fully editable, movable out of it, and deletable.

  • ConceptCompleted


  • DesignIn Progress


  • PermittingNot Started


  • ConstructionNot Started


  • HandoverNot Started

Task references. Every task has a Reference — a short, permanent name like T-1482. It exists for the sentence you say down a phone or type into a message Endulo will never see: one token naming one task. The Reference leads the task's row on the phase board, in both the list and the board view, and it leads the task everywhere else it is named: the cards and rows on My Work, the My Tasks list on Home, and a colleague's task table on their team page — in small grey monospace beside the title. Where a task is shown with its project, both are on screen at once — the Reference names the task, the project keeps its own name below it — so you can see at a glance that T-1482 belongs to GAV 001/2026.

Click a Reference to copy it. Anywhere it appears, clicking puts it on your clipboard and a confirmation appears at the bottom of the screen — nobody should be retyping a number off a phone screen.

Type a Reference into search and you land on the task. The command palette takes it in whatever form you read it out — T-1482, t1482, T 1482, #1482, or a bare 1482 — and matches it exactly on the number, so 1482 finds T-1482 and never T-11482. Titles still match as they always did, so a search that looks like a Reference and is also somebody's title returns both. A bare number carries no letter and so may one day name more than one kind of thing; results are grouped by kind, under their own headings, so you choose in one glance rather than being sent somewhere on a guess. A number nothing carries simply finds nothing. Search normally waits for two characters before it looks inside names — a single letter would match half the office — but a Reference is exempt, because it is looked up exactly rather than searched for: type 7 and you get T-7 and nothing else.

Task results show their Reference beside the title, and clicking one takes you to the project's phase board with the containing phase already open, the task's row scrolled to and lit for a moment — no scanning the board for it. Copying the Reference from a search result works there too: click the T-1482 on the row rather than the row itself. The address you land on names the task, so it can be pasted to a colleague; arriving at a phase board without one behaves exactly as it always has.

The assistant speaks References. Say one to it and it names exactly one task — "mark T-1482 as done" needs no search — and every task in an answer it gives carries its Reference, clickable to copy like anywhere else. See Naming a task by its Reference under AI Assistant below.

When a task is assigned to you, the notification names it by its Reference too — T-1482 · "Depunere DTAC" in "Casa Verde" — so the work arrives already sayable. Assigning several tasks in one gesture still sends one notification naming the count; the tasks themselves carry their References on My Work.

On a joint project a Reference crosses the firm boundary read-only: it belongs to the owner firm's sequence, both firms read the same token on the same task, and a staffed partner user can see it, copy it, and search for it exactly as described here — see References across the boundary under Partnerships below.

A Reference is minted when the task is created and nothing afterwards changes it — move the task to another phase or another project and it keeps the same one, because a Reference names the work rather than where the work sits. Numbers are counted per organization, so every organization starts at T-1 and yours stay short. They are never reused: a deleted task's number stays spent, so a gap (T-13 then T-15) is normal rather than a sign that something is missing. Tasks created before References existed were numbered in the order they were created, so every task has one. References are internal — a client reading the portal is never shown one, and a role whose Tasks access is Hidden has no task surface and so sees no Reference. If such a member is handed work anyway — the assignment picker flags them rather than refusing — the notification still names the task.

Task status. Every task is To Do, In Progress, Blocked, or Done, and each carries a colour the whole app agrees on: To Do neutral, In Progress information, Blocked a warning, Done a success. Wherever a task's status can be set — the status cell on a phase board, the status control on a My Work row — that colour shows as a small dot beside the name, so the thing a list is scanned by can be read at a glance rather than word by word. It is one control, and it behaves the same on both pages.

To Do
In Progress
Blocked
Done

Click it and the menu opens inside the page — solid, above the row, with the status currently set ticked and every option carrying its own dot. Typing the first letter of a status jumps to it, so b reaches Blocked without the mouse. Choosing one applies it at once: the row changes as you let go, before the server has answered, and the control stays open to a second change rather than greying out. Choosing the status already set changes nothing. The numbers derived from status — a phase's progress bar and its task counts, the due-date groups and badges on My Work — are read from the server rather than from the row, so they catch up a moment later. If a save is refused, the row returns to the status it had and says why — see When an edit does not save, below.

On a phone the same control opens a sheet from the bottom of the screen instead of a menu: all four statuses as full-width rows sized for a thumb, titled Status, the current one ticked. It is the same gesture the board view uses to move a card. A role that reads tasks but cannot edit them sees the dot and the name with nothing to open — the colour is information, not a permission.

When an edit does not save. Every edit you make on a task row is applied the moment you make it, before the server has answered — the status, the title, the priority, the due date, the assignee. Almost always the server agrees and nothing more happens: a save that worked says nothing at all. When it does not agree — your role may not edit tasks, the task was deleted from under you, the connection dropped — the cell goes back to the value it had and a message appears at the bottom of the screen naming the field and the reason: Could not save the due date — you do not have permission to perform this action. A value that appeared and then reverted with no explanation was the old behaviour, and was indistinguishable from a bug.

On My Work the message leads with the task's Reference — T-1482: could not save the status — … — because that page gathers tasks from every project into due-date groups and columns, so which row changed its mind is a real question. On a phase board it is left out: you are looking at one phase and just clicked one row. On either board view — My Work's and the phase board's — a refused drag moves the card back to the column it came from as the message appears, rather than leaving it sitting in the wrong column until the page catches up. Deleting a single task that is refused leaves the row where it is and says so; deleting several from the bulk bar reports differently — a line appears above the task table counting how many of the selection could not be deleted (3 of 12 tasks could not be deleted.), in the same place a refused bulk assign or bulk priority change already reports.

The Task details window speaks differently, because it is holding something. Opening a task's details gives you a Notes box and, if your organization has defined any for tasks, the task's Parameters underneath a divider that reads Parameters. Both are saved by the one Save button, in a single action — so a refusal is one answer about one gesture, and there is no way to end up with the notes saved and the parameters not. When that save is refused, the window stays open with everything you typed still in it, and the reason appears in a red banner across the top: Could not save the change — you do not have permission to perform this action. (It names the notes specifically when the task has no parameters to save.) Nothing is closed and nothing is refreshed, so you can copy what you wrote, or fix the problem and press Save again. Before, the window closed on a refusal exactly as it did on a success, and the notes you had just typed went with it.

Quick task add: the last row of every phase's task table is an inline add row — type a title and press Enter, or simply click or tab anywhere outside the row; both save the task. Using the row's own priority, due date, or assignee pickers (including choosing inside their dropdowns) keeps the draft open, so you can set those before the task is created — the assignee picker is the project's Project Team, exactly as it is on a saved row. Escape discards the draft, and clicking away from an empty row does nothing — the picker values you set stick around for your next quick-add. If a save fails (lost connection, expired session), an error toast appears and your typed title stays in the input.

Add task from the header: with the Quick Actions preference enabled (Settings → Profile) and a role that can edit tasks, an Add task button sits in the header on every page, desktop and mobile. It opens a dialog: pick a project (closed ones are not offered), then one of its phases, and type a title — those three are required. The phase list offers only the project's uncompleted phases, in board order — a completed phase refuses new tasks, so it is not offered here. A project with no phases yet says so and cannot be submitted, and a project whose phases are all completed says that instead — two different situations, two different messages. Priority, due date, assignee, and notes are optional; the assignee list is the chosen project's Project Team, with the Not on this project's team section for roles that also manage the team and the usual "no task access" flag beside anyone whose role cannot see tasks (the assignee field appears only for roles that can view the team — member names are a Team read, exactly as on the phase board). The assignee field waits for a project to be picked, because who can be assigned depends on which project it is. Changing the project resets the phase choice and the assignee — both belong to the project — and keeps everything else you filled in. The task is created exactly as it would be from the phase board — an assignee is notified the same way — and on success the dialog closes and a message offers a link to that project's phase board while you stay on the page you were on. The dialog opens blank every time; nothing is preselected or remembered. Without the preference, or without task-editing rights, the button simply is not there.

Bulk task actions: tick the checkboxes next to a phase's tasks — or the header checkbox to take all of them — and a bar appears offering assign, priority, mark done, and delete. The whole selection is saved in one action, so assigning several tasks at once sends the new assignee a single notification naming the count instead of one per task (see Notifications). Selection is per phase.

Who a task can be assigned to. An open task's assignee is always on the project's Project Team (see Project Team & Collaborators). Every assignee picker in the app — the phase board's assignee cell, its inline quick-add row, the bulk bar's Assign to…, and the header's Add task dialog — offers that team and nothing else, and the server refuses an assignee who is not on it whichever way the request arrives, the assistant included. Unassigning is always available, and assigning yourself works exactly like assigning anyone else: you have to be on the team.

If the person you want is not on the team, the picker does not leave you at a dead end. A role that also manages the team (Team at Editor) sees a second section below the team, headed Not on this project's team, listing the organization's remaining members and saying that choosing one adds them to the Project Team. Choosing one does exactly that: they are added as an individually added member, and then the task is assigned — two ordinary gestures in one motion, each still under its own permission. A role without Team at Editor sees no second section, because staffing a project is not its authority.

Moving a task to another project obeys the same rule. An open task carrying an assignee cannot be moved into a phase of a project that person is not on — the move is refused and names both ways forward: unassign the task first, or add them to that Project Team. It is not unassigned for you, because stranding work as a side effect of a drag is exactly what the Keep Choice contract exists to prevent. Moves within one project are unaffected, and a done task moves freely.

A project with nobody on its team says so in the picker rather than showing an empty menu — and the add section is still offered to those entitled, so an empty Project Team is a starting point and not a wall. A role that can edit tasks but cannot view the team (Team Hidden) sees neither section and is told why: who is on a project is a Team read. The no task access badge sits beside names in both sections. Done tasks are untouched by all of this: a completed task keeps whoever it was assigned to, even after that person leaves the Project Team, and their name still shows on the row.

Who can see phases and tasks. Phases and Tasks are two Feature Areas in the Roles editor (Settings → Roles), each on its own Access Level — Hidden, Viewer, or Editor. Tasks is nested under Phases, and the two are graded independently.

Phases. A role whose Phases are Hidden does not have the phase board at all: no Phases tab on any project, an access notice rather than a board if someone types the address, no timeline, no current-phase line on the project cards, and no phase deadlines among the upcoming deadlines on Home. Phases at Viewer reads the whole board and changes nothing on it — no Add Phase, no Apply Template, no editing or deleting, no reordering by drag, and the complete mark reads as a symbol rather than a button. Phases at Editor restructures the board, and also covers the phase gallery in the client portal and the images filed against a phase.

Tasks. Tasks sit inside phases, and grading them separately is the point. Phases at Viewer with Tasks at Editor is the everyday case: an employed architect who edits and moves tasks on a board they cannot restructure, with the phases readable so their work has its context. Tasks at Viewer reads every task and edits none: the status still shows its colour dot and its name — colour is information, not an edit affordance — but with nothing to open, and there is no click-to-edit title, no priority, date or assignee picker, no checkboxes or bulk bar, and no quick-add row. Tasks Hidden means no tasks at all: no task list under a phase (a sentence says so, so a phase is never mistaken for an empty one), no board view, no task counts or progress bars anywhere, no My Work in the navigation, and no colleague's workload page.

Because of Upward Implication, any level on Tasks raises Phases and Projects to at least Viewer — an area is only reachable through the areas that contain it, so there is no such thing as a task editor who cannot open the board the tasks sit on.

Where else this reaches. Tasks are tasks wherever they appear: a task's custom parameters follow the Tasks area like the task itself, the Time page's task picker is empty for a role whose Tasks are Hidden (hours still log against a project or a phase), and the global search returns no tasks. On My Work, Tasks at Viewer reads the board and the list without moving anything — the status shows its colour dot and its name with nothing to open, and the cards do not drag.

Assigning to someone who cannot see tasks. The assignee picker marks any member whose role has Tasks Hidden with a small no task access badge. They are still selectable — who is doing the work is your decision — but the badge says plainly that the task will not appear anywhere that person can look. The badge sits beside the name in both of the picker's sections, on the Project Team and among the members not on it. Admin holds both areas at Editor automatically.

3.3 Closing and Reopening a Project

A finished project is closed, not deleted: open the project card's three-dot menu and choose Close project, then confirm. Closing is manual and reversible — the same menu offers Reopen project on a closed project, and nothing else about the project changes.

The confirmation knows what it is asking. There is exactly one Close action, and its dialog adapts to the phases as they stand: when every phase is completed it asks Close this project as completed?; when phases remain it warns with the real counts — 3 of 5 phases are not completed. Close anyway? The project will be closed as uncompleted. You are never asked to classify the outcome yourself.

Completing the last phase offers to close. The moment you mark the last remaining uncompleted phase complete, a prompt asks All phases are complete. Close the project as completed? Accept and the project closes as Completed on the spot. Choose Not now and it simply stays open with all phases done — a perfectly legal state — and nothing asks again unless a last phase completes again (un-complete a phase and complete it back, for instance).

You never choose what the closure is called — the system does. A closed project whose phases are all completed reads Completed; a closed project with unfinished phases reads Closed. The badge appears on the project card and on the project page header, and reopening removes it. Open projects carry no lifecycle badge at all.

Closed projects leave the default list. The Projects page opens on the Active filter; switch the filter to Closed to see them. A closed project is dimmed on its card, keeps everything it had, and stays out of the dashboard numbers, My Work, the quick task dialog, and the document picker.

Closing freezes phase completion. On a closed project the complete/incomplete mark on the phase board reads as a symbol, not a button, and a completion change is refused however it is attempted. Reopening the project unfreezes it. Deleting a closed project (from the same menu) is what actually removes it — and that is a separate, permanent act.

3.4 Project Team, Collaborators & Vendors

Inside each project, three tabs let you associate people and companies:

  • Team — the Project Team: who works this project.
  • Collaborators — link external professionals from your org's Collaborators directory. Set estimated and contracted fees per collaborator.
  • Vendors — link suppliers and vendors. Set estimated and contracted fees per vendor.

The Project Team is the set of people working a project: everyone in the organization teams currently assigned to it, plus members added individually — one deduplicated roster, not two lists. The roster is resolved live, so someone who joins an assigned team appears on the project immediately, and each person appears once with a badge saying why they are on it: via which team(s), Individual, or both.

The Team tab manages both halves under the same grants as the Team workspace: Team at Viewer reads the roster, Team at Editor assigns and removes teams and adds and removes individual members. Add Member offers the organization members not yet on the Project Team — adding one is how a project's staffing says “the Structural team plus Ana”.

Removing someone depends on how they are on the team. An individually added member has a remove control. A person carried by an assigned team has no individual remove — there is no exclusion list, so taking them off the project means removing that team from the project, or removing the person from that team in Team Management.

Keep Choice. Every way off a Project Team is chosen, never silent, because an open task's assignee is always on the Project Team. Removing a team from a project opens the Keep Choice dialog listing every member that team carries: each row is a checkbox, and checked means the person stays on the project as an individually added member. Rows for members holding open tasks on the project arrive pre-checked and name the count; unchecking such a row states inline that those open tasks become unassigned. A member another assigned team or an individual row already retains simply says they stay — there is no choice to make for them. Removing an individually added member is the one-pairing case: with open tasks the confirm names the count and the unassignment, without them it is a simple confirm. Done tasks are untouched by all of it and keep their assignee as history. The same contract holds on the Team Management side — removing a person from a team, deleting a team, and removing a member from the organization all pass through it (§6.3, §6.5).

The Project Team is who a task can be assigned to. Every assignee picker offers this roster and the server accepts nobody else, so work is never handed to someone who cannot see the project — see Who a task can be assigned to under Phases & Tasks. That is also why the Add Member gesture appears inside the picker itself for roles that manage the team: discovering a missing colleague mid-assignment adds them here and assigns in one motion, rather than sending you to this tab and back.

Notifications addressed to a project's members reach everyone on the Project Team — individually added members get the project's bell entries exactly as team-carried ones do.

Project Visibility

Which projects you see is your Project Team membership. For a role that does not hold Can see all projects (Section 11.4.3), Projects at Viewer means the projects you are on the Project Team of — nothing narrower and nothing wider. Your project list contains exactly those, closed ones included on the same terms: a closed project is one of yours or it is not, and closing it does not change the answer.

The whole project goes with it. Visibility is decided once, at the project, and covers everything inside — the Cover, the brief, the phases and their tasks, the norms, the documents filed against the project, its collaborators and vendors, its team, its budget, its parameters, and its client portal. Seeing a project is one question, not eleven, so there is no state where a project's tab strip is open to you and its contents are not.

Following a link to a project you are not on does not read as broken. The page answers with a notice saying You're not on this project's team and telling you what to ask for — a project manager or an administrator adds you, and the page opens. It is deliberately not a “not found” and deliberately not an empty page: the project exists, a colleague said its name, and the app says so. A project id belonging to another organization is a different thing entirely and still reads as not found.

A role holding Can see all projects — and every administrator, who holds it automatically — sees every project in the organization exactly as before, with no notice anywhere. Joining an organization team that is assigned to a project puts you on that project immediately, creating a project puts you on it, and every way off a Project Team passes through the Keep Choice dialog above, so nobody's project list shrinks silently.

Areas of their own still name projects, and they name yours. The document library is an organization-wide grant — a document is yours to read because your role reads Documents, not because you are on a project — so every document you could read before is still listed. What changes is the project label on the row: it appears on the documents filed against your projects and nowhere else, and the project pickers that file a document offer your projects only (Section 5.15). A client's page lists the client's projects that are yours, while the client's status badge and project count stay whole, because those are facts about the client rather than a way to read its projects (Section 10.1).

The rest of the app reads the same list. Search returns your projects and the tasks inside them and nothing else — typing a colleague's project abbreviation finds nothing, and so does a task Reference (T-1482) belonging to a project you are not on. The Dashboard counts and lists the projects you can see, in every widget on it (Section 2.1). A project's Timeline opens with the project or not at all (Section 13). The Log Hours form on the Time page offers your projects and the tasks on them, and the save accepts nothing else — a picker and a save that disagreed about which projects are yours would be worse than either on its own. And the assistant answers with your visibility (Section 15): it lists and searches your projects, and asking it directly about a project you are not on is answered with the same sentence the page gives, not with the project's status and not with “not found”.

What deliberately does not narrow. Team workload, team capacity, and Manager View keep answering organization-wide: those are oversight grants, and a role given one was given the whole board on purpose. Meetings stay as they are, because being invited to one is what concerns you, whatever project it belongs to. Dashboard widgets keep answering with the rights of whoever defined them. And My Work is already exactly your tasks — the assignment rule above guarantees every open task you hold is on a project you are on.

3.5 Project Theme

The Project Theme is a per-project parametric data schema — a structured brief that captures every key technical parameter for a project in one place. Think of it as a living datasheet: site area, seismic zone, number of storeys, unit costs, or any field your firm needs.

Admins create reusable Theme Templates under Settings → Theme Templates, defining sections and typed fields. When a template is applied to a project, each field stores a project-specific value. Field types:

  • Text — free text (addresses, notes)
  • Number / Area — numeric values, optionally in m²
  • Boolean — yes/no toggles
  • Enum — dropdown from a fixed list
  • Date — calendar picker
  • URL — link to an external resource
  • Calculated — formula referencing other numeric fields (e.g. floor_area * unit_cost), evaluated automatically

Every field change is logged in an audit trail. Theme values auto-populate matching document parameter fields by slug — data entered once in the theme flows into the New Document form automatically.

The Project Brief is the Theme Feature Area in the Roles editor (Settings → Roles), on the Hidden / Viewer / Editor scale. A role whose Theme is Hidden does not have the brief at all: no Theme tab on any project, no brief values reaching documents, no brief fields offered when configuring a phase gate, and an access notice saying the role does not include it if someone types the address — never an empty brief, so “hidden” and “empty” never look alike. Theme at Viewer reads the whole brief and changes nothing in it: values render as text rather than click-to-edit fields, there is no Edit Structure button, and no template can be applied — including the Theme Template picker on the new-project form, since applying one is a brief write. Theme at Editor edits the sections, the fields, and the values, and Admin holds it at Editor automatically.

3.6 Phase Dependencies

A phase can be configured to depend on another phase — indicating it logically starts after the dependency is complete. Edit a phase and choose a phase from the Depends on dropdown. Circular dependencies are rejected. A ↳ after Design badge appears on the dependent phase in the list.

3.7 Project Norms

Link building codes and regulations from your org's Resources library under the Norms tab. Each linked norm has a compliance status: Pending → Analyzed → Implemented → Inapplicable. Change it with the dropdown directly on the norm card. If the resource has task templates defined, linking it automatically generates tasks in the matching project phase — these norms show an auto-tasks badge.

Norms is a Feature Area of its own in the Roles editor (Settings → Roles), on the Hidden / Viewer / Editor scale. A role whose Norms are Hidden has no Norms tab on any project, and opening the address directly answers with an access notice saying the role does not include this section — never a page reading “no regulations linked yet”, so hidden and empty never look alike. Norms at Viewer reads the linked norms and their notes and changes nothing: the compliance status shows as a badge rather than a dropdown, and there is no Link Resource button, no unlink, and no notes to edit. Norms at Editor links, unlinks, edits notes, and changes compliance statuses. The picker of resources still available to link needs Resources at Viewer as well, since the list it shows is your Resources library. Admin holds it at Editor automatically.

3.8 Project Parameters

The Parameters tab on any project gives you a flat list of parameters activated for this project. You can apply a parameter template (which activates all its params at once) or add individual parameters from the catalog. Any parameter that has been globally scoped to "Project" in Settings → Parameters appears here automatically with a global label and cannot be removed from this view.

Once parameters are activated, fill in their values directly on this page and click Save values. Project-level parameter values are also visible in the Project Theme view for fields linked to catalog parameters.

A project's parameter values are the Parameters Feature Area in the Roles editor (Settings → Roles), on the Hidden / Viewer / Editor scale. A role whose Parameters are Hidden has no Parameters tab, no parameter block on the project Cover, and no parameter columns or filters on the projects list and the dashboard; opening the address directly answers with an access notice rather than an empty panel. Parameters at Viewer reads the values as text — no Save, no template to apply, nothing to add or remove. Parameters at Editor activates parameters, applies templates, and fills the values in. Three consequences: creating a project no longer fills in required project parameters unless the role holds Parameters at Editor; a document created from a template stops auto-filling fields sourced from a project parameter for a role whose Parameters are Hidden; and a cascading parameter stops flowing down, since the value inherited by a task or a document is the project's value under another name — the child's own values are untouched.

This governs a project's values only. The parameter vocabulary itself — Settings → Parameters, and the templates beside it — stays with Organization at Editor, and parameters on a task, document, vendor, collaborator, client, or resource keep following that entity's own Feature Area. A brief field linked to a catalog parameter is read and written with the brief, under Theme, because it is a brief field the reader navigates to under the brief's name.


My Work

My Work is your personal command center — it aggregates every task assigned to you across all projects into one view. No need to navigate into individual projects to find your next action. It needs Tasks at Viewer or above: a role whose Tasks are Hidden has no My Work entry in the navigation, and reaching the address answers with an access notice rather than an empty board (Section 3.2).

4.1 Board View

The default view groups tasks into status columns: To Do, In Progress, Blocked, and Done. Drag a card to a different column to update its status immediately. Each card shows the task name, parent project, and priority badge. Blocked marks a task that cannot progress until something outside it is resolved; blocked tasks still count as open and keep their due dates.

To Do

3

Structural review

Ionescu HQHigh

Permit documentation

Office Tower BHigh

3D model update

Casa VladescuLow

In Progress

2

Site analysis report

Ionescu HQCritical

Client presentation deck

Ionescu HQMedium

Done

2

Initial concept sketches

Popescu VillaMedium

Contract review

Office Tower BHigh

4.2 When a Task Is Due

Sorted by due date, the list groups tasks into Overdue, Due Today, Due Tomorrow, This Week, Later, No Due Date, and Completed. The badges along the top of the page count the same buckets, so a group heading and its badge always show the same number.

Two rules decide the grouping. A due date is a date, not an appointment: a task due today stays in Due Today until midnight and only then becomes Overdue, whatever time of day is stored on it. And a finished task is never late: completing a task moves it out of every due bucket into Completed, however long ago it was due. "This Week" means the days after tomorrow up to the end of the current Monday–Sunday week; anything beyond that is Later.

The same two rules are used everywhere a task's timing is shown — the red due date on a row, the Overdue filter, the cards on the Dashboard, and the workload badges on the Team page — so a task reads the same way on every screen.

4.2.1 Table View

Switch to Table view using the toggle at the top right. The table shows all your tasks in a spreadsheet-style layout with sortable columns: Project, Phase, Priority, Due Date, and Status. Ideal for reviewing a large backlog or doing bulk status updates.

Each row's status is the same control the phase board uses, and behaves identically: the colour dot and the name closed, the app's own menu open, first-letter typeahead, a bottom sheet on a phone, and the dot and name alone for a role that may read tasks but not edit them. Choosing a status changes the row immediately — the title strikes through the moment you pick Done — while the badges along the top and the due-date group the task belongs to follow a moment later, once the save is confirmed. A refused save puts the row back to its previous status.

4.3 Filtering & URL State

Use the filter bar to narrow tasks by project, priority (Low, Medium, High, Critical), or status. Filters are stored in the URL — bookmark a filtered view or share it with a colleague and they will see the same filtered result.

4.4 Task Priority

Four priority levels are available. Set priority when creating or editing a task:

LowMediumHighCritical

Documents

The Documents module is the central repository for all project files — drawings, technical specifications, permits, contracts, and reference materials. Documents are versioned, searchable, and linked to projects. Templates let you generate filled PDFs directly from project data.

5.1 Creating a Document

Go to Workspaces → Documents and click New Document. Give it a title, assign it to a project, and optionally set a document type. The project dropdown is the same one the meeting and Log Hours forms use — code and number leading, the title in grey after them, one line per project; hover a row to read a full title that has been shortened. The project stays optional here: pick “No project (standalone)” for an organization-level document that belongs to no project. Which projects the dropdown offers is Project Visibility's question, answered in Section 5.15. The document starts in Draft status. Upload a PDF file from the document detail page after creation.

5.2 Document Status

Every document moves through a simple lifecycle:

DraftCompletedArchived
  • Draft — the document is being worked on; files can be uploaded and content edited
  • Completed — the document is finalized; use the three-dot menu or the document detail page to mark it complete. Status changes from the list happen in place — the badge updates and a confirmation toast appears, without opening the document. Click a document's title to open it.
  • Archived — the document is closed; it remains in the system but is hidden from the default list. Archived documents can be restored to Draft at any time.

Documents

Contract Popescu

Contract

Completed

Today

Ofertare Arhitectura

Offer

DraftFill

Yesterday

Tema de Ofertare

Brief

Draft

3 days ago

Memoriu Tehnic

Technical

Archived

1 week ago

5.3 File Upload & Versioning

Open a document and click Upload in the File section to attach a PDF. Every upload creates a new version — the previous file is preserved. Click Versions on the file section header to see the full history with uploader name, date, and file size. Click Open on any version to download it.

5.4 Document Drawer

Click any document card to open the Document Drawer — a slide-over panel showing a PDF preview, version history, status, and a Fill button (for template-backed documents). Use Full page to open the dedicated document view.

5.5 Filtering & Search

Use the status filter, type filter, and search bar at the top of the Documents page to narrow the list. All filters can be combined.

5.6 Document Templates

Templates are master PDF files — contracts, offer letters, briefs — that can be deployed to any project with field values pre-filled from project data. Manage them under Workspaces → Documents → Templates.

Templates support two PDF types:

  • AcroForm PDFs Fillable — PDFs with named form fields (created in Adobe Acrobat or similar). Endulo detects the fields automatically on upload and can fill them in-app.
  • Flat PDFs Flat PDF — standard PDFs without form fields. Users download, fill manually, and upload the completed version.

5.7 Creating a Template

Go to Workspaces → Documents → Templates and click New Template. Enter a title and optionally a document type. To attach a PDF, click Upload PDF template and select a file. After creation:

  • If the PDF has AcroForm fields, a Fillable badge appears and the Map fields button becomes available.
  • If the PDF has no form fields, a Flat PDF badge appears and you can add fill prompts instead.
  • Templates without a PDF file can be created and the file uploaded later from the document detail page.

5.8 Mapping Template Fields (AcroForm PDFs)

Click Map fields on a Fillable template row. The field mapping panel opens below the row showing every detected AcroForm field name. For each field:

  • Label — the human-readable name shown in the fill form (e.g. "Client Name")
  • Data source — where the value comes from automatically: project title, project code, client name, client CUI, client address, contact details, organization name, today's date, a project parameter, or Manual input (user fills it)
  • Required — toggle to make the field mandatory before a filled PDF can be generated

Click Save mapping when done. The mapping can be updated at any time — it does not affect already-generated documents. If the save fails, the error appears at the top of the mapping panel and the panel stays open with your edits intact.

Field Mapping

client_name

Client Name
Client name

project_title

Project Title
Project title

date_signed

Date Signed
Today's date

total_fee

Total Fee
Manual input

5.9 Adding Fill Prompts (Flat PDFs)

For flat PDFs (no AcroForms), click Map fields and use Add prompt to describe what the user needs to fill in manually — for example "Enter the client's CUI" or "Sign and date". These prompts appear in the fill slide-over as a checklist and reminder. Save with Save mapping.

5.10 Using a Template in a Project

Click Use in project on any template row, select the target project, and click Add to project. The project dropdown is the same one the meeting and Log Hours forms use — code and number leading, the title in grey after them, one line per project; hover a row to read a full title that has been shortened. A project is required, so there is no “No project” row here: the Add to project button stays disabled until one is chosen. Endulo:

  • Creates a new Draft document in the project linked to this template
  • Copies the template's PDF as version 1 of the new document
  • Pre-populates all auto-fill fields (project title, client name, etc.) from project data and stores them in the document

Documents created from a template show a Fill badge in the list — a reminder that manual fields still need to be completed.

5.11 Filling a Document

Open the document drawer or the document detail page and click Fill. The Fill slide-over opens with two sections:

  • Auto-filled from project — fields mapped to project data (client name, project code, today's date, etc.) are pre-populated. You can review and override any value before generating.
  • Manual fields — fields marked as Manual input, shown as form inputs. Required fields are flagged with a red asterisk.

For Fillable (AcroForm) documents, click Generate filled PDF at the bottom. Endulo fills the AcroForm fields using pdf-lib, uploads the result, and saves it as a new document version. The document list and drawer update immediately.

For Flat PDF documents, the slide-over shows the fill prompts as a reference checklist and a Download template link. Fill the PDF manually (in Acrobat or equivalent), then upload the completed version using the file upload on the document page.

Fill Document

Auto-filled from project

Client Name

Client name
Familia Popescu

Project Title

Project title
Residence Popescu

Date

Today's date
22/05/2026

Manual fields

Total Fee *

Enter amount…

5.12 Written Content

Besides (or instead of) an uploaded PDF, a document can hold text content written directly in the app: open the document and use Edit in the Content card. The editor supports headings, bold/italic, and lists. Long content displays in its own scrollable area, so the document header and actions stay visible while you read.

5.13 Parameter Tokens

While writing, press the + Parameter toolbar button or type {{ to insert a live parameter token as a colored chip. The picker offers, grouped: built-in project fields (project title, code, number, deadline, client details, organization name, today's date), project parameters, Project Brief fields, and document parameters. Two of those groups follow their own Feature Area: the Project parameters group is absent for a role whose Parameters are Hidden, and the Brief fields group for a role whose Theme is Hidden — with no value from either resolved into a token. The client tokens follow Clients the same way.

The document stores a reference, not a value — when the underlying value changes, every document showing that token updates automatically. In the saved document, chips display the current value on a highlighted background; a token whose value is not set shows a warning-styled chip with the parameter name.

5.14 Export to PDF

The Content card's Export PDF button opens an A4 print view with all token values resolved and rendered as plain text. Use the browser's print dialog and choose "Save as PDF". Values are resolved at export time, so the PDF always reflects current data.

5.15 Which Project a Document Names

Reading documents is an organization-wide grant: Documents at Viewer opens the library, and the library holds the organization's documents, whichever project they were filed against. Project Visibility (Section 3.4) does not take documents away from you — it decides which of them say a project's name.

For a role without Can see all projects, a document filed against a project you are on carries that project's abbreviation, number, and title on its row and on its page, exactly as before. A document filed against a colleague's project is listed just the same, with no project label on it: the document is yours to read, the project's identity is not. The same holds for the template fill panel — a document whose project is not yours resolves none of the project's fields, and they are typed in by hand, exactly as they are for a role whose Parameters are Hidden.

The pickers follow: the project dropdown on New Document, on a document's edit form, and on Use in project offers the projects you are on, and the server refuses any other — so what the picker offers and what the save accepts cannot disagree. A role whose Projects are Hidden is offered no project at all and reads no project label anywhere, which is the stricter answer and unchanged.


Team & Roles

The Team page is where you manage everyone who has access to your organization — members, their roles, pending invitations, and team groups.

6.1 Inviting Members

Go to Team and click Invite Member. Enter the person's email and choose their role. They receive an invitation email with a direct link to create their account or accept the invite. Pending invitations appear in the Invitations list and can be cancelled or resent at any time before acceptance — resending extends the expiry and keeps the original email link valid.

If the invitee opens the link while logged out, they are prompted to log in (or create an account) with the invited email and are brought back to accept automatically. Logged-in users also see a banner at the top of the app listing any pending invitations addressed to their email, with an Accept button — no email link needed.

6.2 Roles and Access

Roles control what each member can do across the entire organization. Access is granted per Feature Area on the Access Level scale — Hidden, Viewer, Editor — with Extras beside it for the authorities that do not follow from the scale (Section 11.4). The four default roles cover the typical architecture firm hierarchy:

RoleWhat they can doRestrictions
ViewerViewer on every area; can request leaveEditor nowhere
ArchitectEditor inside a project; vendors, documentsNo Extras; Team and Organization read-only
Project ManagerThe Architect's areas, plus Team at Editor and every projectOrganization Hidden bar inviting members
AdminEditor on every area, and every Extra

An Access Level governs both reading and editing, and the same vocabulary describes every area of the app. Projects at Viewer is what opens the Dashboard, the project list, and a project's page; Team, Collaborators, Vendors, and Documents at Viewer open their sidebar pages and the matching tab on a project — one area each, whichever way you reach it. Inside a project, the tabs are graded independently of one another: Phases for the board, the timeline, and phase images and Tasks for the tasks on it and My Work (Section 3.2, which is also where the everyday combination lives — Phases at Viewer with Tasks at Editor, editing tasks on a board you may read but not restructure), Theme for the Project Brief (Section 3.5), Norms (Section 3.7), Parameters for a project's values (Section 3.8), Budget (Section 11.4.2), and Client Portal (Section 12.0).

Cover — a project's title, code, number, deadline, and next meeting — is the identity a project page always shows, so it offers Viewer and Editor and never Hidden; a role at Cover Editor renames a project and sets its dates and does not thereby rearrange its phases or decide who works on it. At Cover Viewer the page has no Edit button at all — the identity reads as text, and a control the role's save would be refused on is not offered in the first place. Creating and deleting a project are two of the three Extras on the Projects row: can create projects and can delete projects; the third, can see all projects, is about which projects the row shows (Section 11.4.3).

Across the workspace lists it reads the same way. Clients, Collaborators, Resources, Documents, Vendors, and Team at Viewer open their pages; the same area at Editor adds, edits, and deletes on them — including creating, editing, filling, and deleting documents, and assigning or unassigning a team on a project. Viewer means the page without its writing controls: on the client directory the New, Edit, and Delete buttons simply are not there for a role at Viewer, rather than present and refusing. Managing members and invitations is Organization at Editor, with one exception carved out as an Extra: can invite members grows the team without touching settings, and it works with Organization left Hidden.

Custom parameters follow whatever they are attached to, in that thing's own area. Parameters on a task follow Tasks, on a document Documents, and on a vendor, collaborator, client, or resource that area — so a member whose Vendors are Hidden cannot read a vendor's parameters either. A project's parameters are their own area, Parameters (Section 3.8), and the Project Brief is Theme one area over (Section 3.5). The catalogues themselves — Settings → Parameters, Settings → Phases, Settings → Project Brief templates, and the field mapping of a PDF template — stay with Organization at Editor: an area governs a project's values, not your organization's vocabulary.

The Time page follows the same rule. Projects at Viewer is what gives it a Log Hours tab, since hours are always logged against a project. Within it, Team at Viewer gates the team leave overview, the can request leave Extra gates filing a request, can approve leave gates approving and declining, and Time & Leave at Editor gates the Manage tab — the pending queue, other members' balances, and the leave types, policies, holiday calendars, and balance adjustments in Organization settings. Schedules at Editor gates the organization default work schedule; reading or editing another person's schedule, or anyone's hourly rate, needs Organization at Editor. Time & Leave and Meetings can never be Hidden — your own calendar, your own leave, and your own time log always load, whatever your role.

Finding a project in search. The command palette matches projects on their title, their code, and their number — typing GAV or 001/2026 finds the project just as typing its title does. Each project result reads the way its card does: the code in bold monospace, the number beside it, the title in grey.

Finding a task in search. The palette matches tasks on their title and on their Reference — see the Task references part of the Phases & Tasks section for the forms a Reference can be typed in, and where clicking a task result lands you.

Global search obeys the Access Levels section by section: projects and tasks need Projects and Tasks, documents Documents, vendors Vendors, collaborators Collaborators, and resources Resources. A role with one of those Hidden gets no results from that section rather than a hidden peek at it — a search is a reading of an area, one answer at a time.

It obeys Project Visibility too (Section 3.4): the projects section returns your projects, and the tasks section the tasks inside them. Without Can see all projects, typing a colleague's project abbreviation finds nothing, and neither does a Reference naming a task on a project you are not on. The other four sections are areas of their own and are unchanged — a document, a vendor, a collaborator, and a resource belong to the organization rather than to a project.

The calendar shows your own meetings, leave, holidays, and deadlines to any member. Opening someone else's calendar needs the can see all calendars or can see team workload Extra. Creating a meeting is Meetings at Editor; editing or cancelling one needs either can see all calendars, or to be its organizer while holding Meetings at Editor. The client portal's comments and approval-request sections read at Client Portal at Viewer and are managed at Editor (Section 12.0), and the Gantt timeline reads with Phases at Viewer.

Logos follow whatever they are attached to: Vendors at Editor for a vendor's logo, Collaborators at Editor for a collaborator's, and Organization at Editor for a brand's or the organization's own. Your profile photo is always yours to change. Reading the brands directory needs either Vendors at Viewer or Organization at Editor, since brands are shown both on the Vendors page and in Settings → Entity Types.

A refused page says so. When a role does not include an area, the page renders an access notice — “You don't have access to this”, with a line saying your role does not include that section — and not an empty list and not an error with a Try again button. A refusal is not something a retry fixes, and “hidden” and “empty” must never look alike: an empty page always means there is genuinely nothing there. A record that belongs to another organization is the separate case, and reads as nonexistent rather than as refused.

A refused action says which action. A control you are allowed to see but not to use reports in one sentence naming what you tried and why it was refused: Could not update the role — you do not have permission to perform this action. The gesture comes first because a row often carries three of them — a member's role, their leave policy, and Remove all sit inches apart — and a message saying only that permission was missing leaves you guessing which button spoke. The reason is repeated exactly as the server gave it, so a refusal (“you do not have permission”) and a failure (“something went wrong, please try again”) stay distinguishable: one means stop, the other means try again. Document deletes and status changes, document content saves, role, leave policy and member removal, resending and revoking an invitation, a quick-added task, uploading or removing a vendor's, collaborator's or brand's logo, and a refused parameter save on any form or on a project's Parameters tab (Section 11.5) all speak this way, matching how a refused task edit already reported (Section 3.2, When an Edit Does Not Save).

Roles are managed under Settings → Roles (Organization at Editor). Viewer, Architect, and Project Manager are fully customizable: rename them, set each Feature Area to Hidden, Viewer, or Editor, switch Extras on, and create new roles from scratch (Section 11.4). The Admin role is not: it always holds everything the product has — including areas and Extras added after your organization was created — so there is nothing to edit, and it cannot be modified or renamed. The roles page shows Admin at the full count, every Feature Area at its top level and locked. Every other role holds exactly what has been granted to it, nothing more.

6.3 Member List

The member list shows every active member with their name, email, role badge, and join date. Click the three-dot menu on any row to change their role or remove them from the organization. Removal is the one removal with no keep to offer — the person is leaving the organization, so the dialog names their open tasks per project and states that confirming unassigns them. They leave every team and every Project Team; completed tasks keep them as assignee, so history stays intact. Access is revoked immediately on confirm.

Organization Members4

A

Andrei Ionescu

andrei@studio.ro

Admin
M

Maria Constantin

maria@studio.ro

Project Manager
R

Radu Popa

radu@studio.ro

Architect
E

Elena Dinu

elena@studio.ro

Viewer

6.4 Hourly Rates

Admins can set an hourly rate (RON/hr) per team member directly in the Organization Members list. Click the rate value on any member row to edit it inline. Rates are stored with effective dates — history is preserved when you update a rate. Pay data is administrative: the rate column is shown only to roles with Organization at Editor, and other members never receive it.

6.5 Teams

Create named teams (e.g. "Structural", "Interior Design", "Site Supervision") to group members for organizational clarity. A member can belong to multiple teams. Teams are assigned to projects in the project's Team tab.

Removing a person from a team is a Keep Choice (§3.4), because team membership is what carries them onto every project the team is assigned to. The dialog lists those projects: each row is a checkbox, checked keeps the person on that project as an individually added member, rows where they hold open tasks arrive pre-checked naming the count, and unchecking such a row states that those open tasks become unassigned. A project where another assigned team or an individual row already retains them says they stay.

Deleting a team runs the same contract across every person-and-project pairing the team touches, grouped by project — the biggest removal gesture follows the same rules as the smallest, so deleting a team never silently strips anyone from a project or orphans their work.

6.6 Team Templates

Admins can define Team Templates — named sets of role-count combinations describing the composition of a standard project team. For example: "Residential Team = 1 × Project Manager + 2 × Architect". Templates are available when assembling teams for a project.

6.7 Transfer Ownership

If you are the only admin and want to leave, first transfer the admin role to another member. Go to Settings → Organization → Danger Zone and click Transfer Ownership. Select the new admin from the dropdown and confirm.

Wherever these safeguards count admins — the only-admin check on leaving, the last-admin check when changing or removing a member, and the role granted by Transfer Ownership — an admin is a member whose role holds Organization at Editor, and the Admin role always counts, even in an organization created before an area existed, matching the rule that Admin holds everything automatically.

6.8 Manager View

Members whose role carries the can see team workload Extra on the Team area (Admin and Project Manager by default) can open any colleague's profile from the Team page by clicking their name. The profile centralizes that person's activity:

  • Stat cards — open tasks, overdue, blocked, due this week, active projects, and meeting hours in the current week. Overdue and blocked counts are highlighted so overload is visible at a glance.
  • Tasks tab — all tasks assigned to the member, filterable by status.
  • Projects tab — every active project the member is on the Project Team of (Section 5.2), added individually or carried by one of its assigned teams, with their open task count and the nearest phase deadline. Being on the team is what counts, not holding a task there: a member with no tasks yet on a project is still involved in it.
  • Calendar tab — the member's meetings, approved leave, public holidays, and project deadlines in one calendar.

The Team page itself shows compact workload badges (open, overdue, blocked, on leave) next to each member for holders of that Extra. Users can always open their own profile. The Extra is offered from Team at Viewer up, and can be switched on for any role under Settings → Roles.


Time Tracking

Time tracking in Endulo lets you log hours against specific projects and tasks, review your own utilization, and — for managers — see team-wide time data.

7.1 Logging Hours

Go to Time and click Log Time. Fill in:

  • Project — required; the dropdown is the same one the meeting form uses — code and number leading, the title in grey after them, one line per project; hover a row to read a full title that has been shortened. There is no "No project" row here — the Log button stays disabled until a project is chosen
  • Phase — optional; appears once a project is chosen, loading briefly while the project's phases are fetched, and defaults to "No specific phase". The phases are listed in project order; a completed or not-yet-started phase says so after its name and stays choosable, so hours can be logged retroactively on a phase that has since closed
  • Task — optional; select from the tasks assigned to you on the project, narrowed to the chosen phase's tasks when a phase is picked
  • Date — defaults to today
  • Hours — decimal values accepted (e.g. 1.5 for 90 minutes)
  • Description — a brief note about the work done

The three pickers keep each other consistent: picking a task fills in its phase, changing the phase clears a chosen task that does not belong to it (and choosing "No specific phase" clears it too, since a task always carries its phase onto the entry), and changing the project resets phase and task together. A project with no phases shows no phase dropdown and logs exactly as before, and a role whose Phases are Hidden logs against the project alone.

The project dropdown offers the projects you can see (see Project Visibility in Section 3.4) and the phase and task pickers beside it the phases and tasks on them, and the save accepts nothing else — hours land on work you are part of. A joint project you are staffed on appears in the picker beside your own, with its phases and your assigned tasks on it; the entry is saved in your own organization, under your own rates and schedules — see Hours stay home in Section 11.11.

7.2 Reviewing Your Log

The Time page shows your personal entries grouped by day. Use the date range picker to filter by period. The total hours for the selected range appear at the top. Click any entry to edit or delete it. Under the project, an entry's phase and task appear in muted text — combined on one line as "Phase — Task" when the entry has both, so a row stays at most three lines.

This Week

Apr 14 – Apr 21

24.5h

Total logged

Structural drawings

Residence Popescu · Foundation details

3.5h

Today

Client presentation

Ionescu HQ · Slide deck prep

1.0h

Today

Permit documentation

Office Tower B · DTAC documentation

4.0h

Yesterday

Concept sketches

Casa Vladescu · Initial massing study

2.5h

Monday

7.3 Team Overview (Managers & Admins)

Users with the Project Manager or Admin role can view team-wide time entries. Use the member filter to analyze utilization per person, or the project filter to see total hours logged against a specific project.

7.4 Calendar & Meetings

The Time section opens on a Calendar tab with month, week, and day views. It shows four kinds of events: your meetings (blue), approved leave (amber), public holidays (grey), and project or phase deadlines (light blue) for projects you are on.

Users whose role holds Meetings at Editor can add a meeting by clicking a time slot or the Add Meeting button: title, date, start time, duration, participants from the organization's members, physical or online location, an optional linked project, and an optional recurrence (weekly, every two weeks, or monthly, with an end date; occurrences are created up to six months ahead). The project dropdown names each project the way the rest of the app does — code and number leading, the title in grey after them, one line per project; hover a row to read a full title that has been shortened. Pick No project for an internal meeting that belongs to none. A project without a code is listed by its title. While picking a time, participants who already have a meeting or approved leave in that slot are flagged with a warning — the meeting can still be created; conflicts never block scheduling.

What a click on the calendar fills in. Clicking a time slot in the week or day view opens the form at that hour, an hour long — the default. Dragging across a range opens it at the length you drew instead, rounded to the nearest duration the picker offers (30, 45, 60, 90, 120, 180 or 240 minutes): a drag from 09:00 to 11:00 opens at two hours, one from 09:00 to 10:15 opens at an hour and a half, and the shortest drag the grid allows opens at half an hour. A range drawn exactly halfway between two of the durations takes the longer one, so the meeting covers the time you drew. A day cell in the month view, and the all-day strip above the week and day grids, name a day and not an hour: those open at 09:00, an hour long, and the time is yours to change.

Invited participants receive an in-app notification and an email with a calendar attachment they can add to Google Calendar or Outlook. Updates and cancellations send the same. When an edit changes who is invited, each person hears what happened to them: a member added by the edit receives an invitation — not an update to one they never got — a member kept on the meeting receives the update, and a member taken off receives a cancellation, so the event clears from their mail calendar too. Editing one occurrence of a recurring meeting asks whether to change only that meeting or this and future meetings.

Everyone sees their own calendar and meetings they are invited to — Meetings can never be Hidden, because your own calendar is yours whatever your role. Users whose role carries the can see all calendars Extra (managers) can switch the calendar to any member and can edit or cancel any meeting. Meetings also appear automatically in your personal iCal feed subscription (see the Calendar Feed section).

7.5 Leave Management

The My Leave tab shows your leave balances per type (allocated, carried over, used, pending) and, under My Requests, your own requests — only yours, whatever your role. Time & Leave can never be Hidden for that reason: your own leave is yours. Administrators see the rest of the organization on the Manage tab, never here. Click Request Leave to file one — that button needs the can request leave Extra: leave type, start and end dates, and an optional note. Working days are counted against your work schedule and the organization's public holidays. You can cancel your own pending or approved requests; a cancellation releases the days back to your balance.

The Team tab (needs Team at Viewer) shows who is on leave today and all upcoming approved leave across the organization, with names. The Manage tab (needs Time & Leave at Editor) holds the organization-wide pending approval queue and other members' balances. Answering a request — approving or declining it — is the can approve leave Extra, which a team lead can hold without configuring any leave policy.


Resources

Resources are organization-level reference items — standard specification documents, material libraries, DIN/ISO/EN standards, typical details, or reference images — that are not tied to a single project. They live in a shared library accessible to all members.

8.1 Adding a Resource

Go to Workspaces → Resources and click Add Resource. Provide a name, type (Standard, Specification, Reference, Material, etc.), and upload the file. Resources are immediately visible to all organization members.

8.2 Linking to Projects (Norms)

Resources are linked to projects via the project's Norms tab. Each linked norm shows a compliance status dropdown (Pending / Analyzed / Implemented / Inapplicable).

8.3 Task Templates

Admins can define task templates on a resource — a list of tasks that should be created whenever this norm is linked to a project. Each template entry specifies: task name, description, target phase category, and estimated hours. When you link a resource with templates to a project, Endulo automatically generates those tasks in the matching phase. Norm cards with templates show an auto-tasks badge.

Resources Library8

SR EN 1992-1-1: Concrete Structures

Standard

Interior Finish Specification v2.1

Specification

Thermal Insulation — SR EN 13163

Standard

Site Photography Archive — Mar 2026

Reference

Vendors & Collaborators

9.1 Vendors

Vendors are the suppliers and material vendors your organization works with. Build your directory under Workspaces → Vendors & Brands — the page has two tabs: Vendors (companies you buy from) and Brands (the manufacturers whose products those vendors carry). Each vendor stores: company name, hierarchical categories, linked brands, fiscal data, contact details, showroom locations, and custom parameters.

Vendor cards are compact and uniform: logo, name, category badges, phone, and website. Fiscal data, brands, and origin countries live in the edit form and the toolbar filters instead of on the card. The number next to the bookmark icon shows how many teammates saved that vendor to their favorites.

The category filter opens a collapsible tree: root categories are listed first, and expanding one reveals its subcategories. Selecting a category also matches vendors tagged with any of its subcategories.

Besides its main address, a vendor can have any number of showrooms (or warehouses/depots) — added in the edit form with a label and an autocompleted address. They appear on the map view as smaller secondary pins, with a toggle to show or hide them.

The Brands tab shows each brand as a card with its logo, countries of origin, the 3D-assets icon, and how many vendors carry it. Admins add and edit brands directly there; the same list also remains manageable under Settings → Entity Types.

Link vendors to specific projects in the project's Vendors tab to create a clear trail of which vendors are involved in which work.

Vendors, collaborators, and clients each have two names: the name (the market/brand name, shown everywhere in the app) and an optional Legal Name (the officially registered company name, in the Legal section). The ANAF lookup fills the Legal Name, CUI, Trade Register number, address, and VAT status — it never overwrites the brand name (it only prefills it when the name is still empty).

When a vendor's address changes — whether you edit it yourself or an ANAF lookup brings back a different one — the old map pin is cleared when you save, so you are never shown a pin already known to be wrong; cancelling the form leaves it where it was. The new address is queued for geocoding and the pin reappears at the new location once the background job runs (within about 15 minutes). A refresh that returns the same address leaves the pin exactly where it is. If ANAF has no address on file for that company, the lookup leaves your stored address and its pin untouched — a blank answer from ANAF means "nothing on record", never "delete what you have". The same holds for the Legal Name and Trade Register number: an ANAF lookup fills them in when ANAF has them, and leaves whatever you already entered when it doesn't.

When geocoding can't place the address — two different things can go wrong, and they are treated differently.

If the map service answers and says it knows no such place, the vendor stays pinless: asking again would get the same answer, so nothing is retried. The vendor's card shows a crossed-out map-pin icon next to its name, and opening the vendor spells it out under the Address field — the address could not be found, check it for typos or missing detail. Fixing the address and saving queues a fresh attempt.

If the map service doesn't answer at all (an outage, a quota limit, a misconfigured key), the address is tried again automatically — after 15 minutes, then an hour, then four hours. An outage that ends inside that window costs you nothing but a delayed pin. If all the attempts run out, the vendor gets the same crossed-out pin icon, and the note under the Address field says the map service could not be reached and that the address itself may be fine. That note carries a Try again link, which queues a new attempt straight away — you do not have to touch a perfectly good address to get another go.

A vendor that is merely waiting on its first lookup shows no warning at all; the icon means an attempt has finished without a pin, not that one is still running. Showrooms get the same note under their own address, without the link — saving the vendor re-queues them anyway. In every case the vendor keeps its address and stays off the map until an attempt succeeds.

Phone numbers on vendors, collaborators, and clients (including client contact persons and the quick-add New Client panel in the project form) are normalized automatically to a single standard format (+40712345678) when you leave the field or save — pasted numbers like +(40) 745 239 200, 0745 239 200, or 0040745239200 all become the same canonical form. Numbers that don't look like phone numbers are left as typed. Saving normalizes the field whether you clicked Save, pressed Enter, or never left the field at all, so the rule holds in every browser — if the save then fails, the form reopens showing the normalized number.

Logos are derived automatically from the vendor's website. For businesses without a website (or when the derived logo is wrong), upload a custom logo while editing the vendor — it takes precedence, and removing it falls back to the website logo. The same option exists for collaborators (edit form) and brands/manufacturers (Settings → Entity Types → Brands). PNG or JPEG, max 2MB.

9.2 Collaborators

Collaborators are external professionals — structural engineers, MEP consultants, surveyors, landscape architects — who are not full organization members but contribute to your projects. Manage them under Workspaces → Collaborators.

Collaborators do not have a login and cannot access the platform. They are for your team's reference: contact details, specialization tags, and project linkage.

Mihai Dumitru & Asociații

Structural Engineer
ConcreteSteelSeismic
+40 721 123 456
office@dumitru-struct.ro
dumitru-struct.ro

Ana Constantin MEP

MEP Consultant
HVACElectricalPlumbing
+40 733 987 654
ana@constantin-mep.ro
constantin-mep.ro

9.3 Custom Parameters

Your org can define custom parameters under Settings → Parameters. Parameters can be applied to vendors and collaborators in two ways:

  • Global scope — set a parameter's scope to "Vendor" or "Collaborator" in the catalog and it appears automatically on every instance of that entity type. Globally scoped params also appear as filters in the list view.
  • Per-instance — open any vendor or collaborator edit form, scroll to the Parameters section, and add individual params or apply a template. These only appear on that specific record.

Clients

The Clients directory stores every client your firm works with or is pursuing. Go to Workspaces → Clients to manage it. Adding, editing, and deleting clients needs Clients at Editor; at Viewer the directory reads without those buttons. A delete that cannot complete keeps the card in the grid and says why at the bottom of the screen — a client never silently disappears from the list while still existing on the server.

10.1 Client Status

A client's status is derived from their projects — nobody sets it, and there is no status field on the client form. A client with no projects reads Potential (a prospect); a client with at least one open project reads Active; a client whose every project is closed reads Former. Creating, closing, reopening, or deleting projects updates the badge on its own; deleted projects do not count.

PotentialActiveFormer

Filter the client list by status using the dropdown next to the search bar. The client detail page lists the client's projects with their lifecycle badges, so why a client reads Former is visible at a glance.

The list of projects is yours; the status and the count are the client's. For a role without Can see all projects (Section 3.4), the Projects card on a client's page lists that client's projects you are on the Project Team of, and the card is absent when none of them are. The badge above it and the count on the client's card do not narrow with it: they are derived from every project the client has, so a client reads Active or Former to everyone who can read clients, and two colleagues never see the directory disagree with itself. A role whose Projects are Hidden reads the status and the count and no project list at all.

10.2 ANAF Lookup

When adding or editing a company-type client, use the ANAF Lookup section at the top of the form to auto-fill legal data from the Romanian tax authority. Enter the CUI and press Tab — the firm name, address, Trade Register number, and VAT payer status are filled in automatically, and every field stays editable afterwards. On the client detail page, a Refresh from ANAF button re-fetches current data using the stored CUI.

If ANAF has nothing on file for a field, the lookup leaves whatever you already entered — a blank answer from ANAF means "nothing on record", never "delete what you have". This holds for the Legal Name, address, Trade Register number, and VAT status alike, both in the form and behind the Refresh button. The brand name is never overwritten at all; it is only prefilled while still empty.

10.3 Linking Clients to Projects

When creating or editing a project, select the client from the dropdown, or press the New button beside it to add a client without leaving the form — the New button appears only for a role with Clients at Editor, since it creates a client; picking from the list needs only Clients at Viewer. In that quick-add panel, pressing Enter saves the new client and selects it — it never submits the project itself, so a half-typed client is never lost to an accidental project save. Closing the panel — with Cancel or the New button — discards what you typed, so reopening it always starts empty rather than pre-filled with an abandoned entry; the same panel on the project's Cover tab behaves identically. Cancel is unavailable while a client is being saved, because the save can no longer be called back at that point. The client name appears on the project card and in the Client Portal cover.


Notifications

10.1 Accessing Notifications

Click the Bell icon in the sidebar (or bottom navigation on mobile). A red badge shows the count of unread notifications — it refreshes about once a minute while the tab is open, and immediately when you read or clear notifications.

10.2 Notification Types

Endulo generates notifications for these events. Each notification also shows the avatar of the person who triggered it (where applicable):

Notifications3

Task assigned to you

"Obtain building permit" in "Casa Verde"

2 min ago

Meeting invitation

Maria: Site walkthrough (14 Mar 2026, 10:00 - 11:00)

5 min ago

Budget submitted for approval

Budget for "Office Tower B" is awaiting your approval.

1 hour ago

New comment from Ion Popescu

On phase: Detailed Design

3 hours ago

Tasks generated from norm

4 task(s) created from "P100-1/2013 seismic design"

1 day ago

Leave request approved

Your leave from 2026-04-02 to 2026-04-06 has been approved.

2 days ago

10.3 Task Assignments

When a colleague hands you a task, you are told on the bell — no email, since the task also lands on your My Work page. You are told when the assigneechanges to you: re-saving you onto a task you already hold sends nothing, and assigning a task to yourself is silent. Assigning several tasks in one gesture produces one notification naming the count (9 tasks assigned in "Casa Verde") rather than one per task; a single assignment names the task. Nobody is told when a task is taken away from them. Assignments belong to the Tasks & deadlines group, so muting that group silences them along with norm-generated tasks.

On a joint project the assignment crosses the firm boundary: a task assigned to a partner firm's staffed member bells them under their own organization, with the project badged with the owner firm's name (in "Casa Verde" (Atelier Nord)) and a link to the joint project page — the owner's tab pages answer a partner with a not-found. A partner contributor assigning to someone at the owner firm bells them the ordinary way; assignments between colleagues of one firm are unchanged.

10.4 Who Receives What

Notifications for project-specific events — norm tasks generated, client portal comments, a client's answer to an approval request — go only to the project's Project Team (team-carried and individually added members alike), not the whole organization. Norm tasks additionally fall back to every role holding Tasks at Editor when the Project Team is empty — tasks were generated, so the people told are the ones who can act on tasks; the two client portal notifications do not, so put someone on the Project Team of any project whose portal is open. Those two are narrowed further still: they reach only the project members whose role includes the Client Portal area, since both link to the portal management page and a notice about a section you are refused is a trace of it rather than a message. If nobody on the project's teams holds it — the state every organization starts in, since the portal was granted to nobody — they go to everyone in the organization who does, Admins included, rather than to nobody at all. A budget submitted for approval goes to the roles holding Budget at Editor outright: the people who can actually answer it, never every member of the firm.

Wherever a notification is addressed to the roles holding an area, Admins always count among them — an Admin receives it even in an organization created before that area existed, matching the rule that Admin holds everything automatically.

Joint projects notify both firms: a new comment or a phase status change on a joint project — whichever firm made it — reaches the owner firm's project members and the partner firm's staffed members. Each person is notified under their own organization — a partner user reads the project badged with the owner firm's name — and never about anything the sharing terms do not show them. Severance rings the bell too: a detach or a partnership end starting a notice period tells the affected firm's admins, severance landing tells both firms, and a notice-period proposal or its answer tells the other firm's admins. All of these belong to the Projects & documents group, so muting it silences them like any other member of the group.

10.5 Marking as Read

Click a notification row to navigate to the related item — this also marks it as read. Use Mark all as read at the top of the list to clear the badge in one click.

10.6 Notification Preferences

Under Settings → Profile → Notifications, switch off the groups you don't want: Tasks & deadlines, Leave requests, Budget & approvals, Projects & documents, Meetings. Muting a group silences every channel it uses — the bell entry and the email alike, including meeting invitations and their calendar attachments. Muted notifications are never created for you, not merely hidden. Everything is on by default.


Settings

Settings is divided into two areas: personal settings (profile, accessible to everyone) and organization settings, which need Organization at Editor — the Organization Feature Area has no reading short of managing it, which is why its row is Hidden or Editor and never Viewer.

11.1 Profile

Go to Settings → Profile to update your display name, profile picture (avatar), and password. Changes take effect immediately and are visible to all members in your organizations.

To change your email address, click Change next to the email field and enter the new address plus your current password. A confirmation link is sent to the new address — your email only changes once you click it, and the old address receives a notice. Sign in with the new address afterwards.

The Profile page also carries a Quick Actions toggle, off by default. Enabling it adds an Add task button to the header on every page — immediately, no reload needed — for creating a task in any project without leaving where you are (see "Add task from the header" under Project Phases). The preference is saved on your account — it follows you across devices and across your organizations.

11.2 Organization

Admins can update the organization name and upload a logo under Settings → Organization. The logo appears in the sidebar and on exported documents.

11.3 Phase Catalog & Templates

Phase templates define the standard workflow applied when a new project is created. Go to Settings → Phases to:

  • Manage the phase catalog — reusable phase definitions shared across templates
  • Drag catalog phases into your firm's preferred order (pointer, touch, or keyboard) — the order persists, new phases append at the end, and rearranging the catalog changes no template's sequence and no project
  • Create multiple named templates (e.g. "Standard Residential", "Interior Only", "Urban Planning")
  • Add phases from the catalog with estimated durations in weeks
  • Reorder phases by drag-and-drop
  • Mark one template as the default for new projects

New organizations start with six standard phases and a "Standard Architectural Workflow" template. These are ordinary entries, not locked defaults — rename, edit, or delete any of them, seeded or not. The whole catalog is fully editable.

Important: editing or deleting a catalog phase or template never changes existing projects — phases are copied as a snapshot at project creation time. Before a catalog phase is deleted, the confirmation dialog states how many templates currently reference it (deleting removes it from those templates) and reminds you that existing projects are unaffected.

Standard Residential

Default template · 5 phases

Default
1

Concept

Pre-Design

2–3 weeks
2

Design

Design

6–10 weeks
3

Permitting

Approval

4–8 weeks
4

Construction

Execution

12–24 weeks
5

Handover

Closeout

1–2 weeks

11.4 Roles

Admins customize roles under Settings → Roles — rename any role, create new ones from scratch, and grant access area by area. The editor mirrors the structure of the app itself rather than a list of permission names: one row per Feature Area, the areas a member navigates. Projects comes first, with Cover, Theme, Phases (with Tasks nested inside it), Norms, Parameters, Budget, and Client Portal underneath it; then Documents, Vendors, Collaborators, Team, Clients, Resources, Organization, Time & Leave, Schedules, and Meetings beside it. Click a parent row's title to fold its children away. Changes take effect immediately for every member holding that role.

Access Level. Every row carries one choice on a three-step scale: Hidden, Viewer, Editor. Hidden means the area does not exist for that role — no tab, no screen, no mention on a card, and typing the address directly answers with an access notice rather than an empty page, so “hidden” and “empty” never look alike. Viewer reads the area and changes nothing in it. Editor reads and edits it; Editor always includes Viewer, which is why there is no “edit but not see” state to build. Someone who should work in an area is given Viewer or Editor — never an exception that pierces Hidden.

Not every row offers all three, and the reason is always the area itself. Cover — a project's title, code, and dates — is offered at Viewer or Editor only: a project page you can open always shows at least the project's identity. Meetings and Time & Leave cannot be hidden either, because your own calendar and your own leave are yours whatever your role. Organization has no reading short of managing it, so it is Hidden or Editor. And the Projects row itself carries Hidden or Viewer only: it is the gate on the project list and the project page, while editing what is inside a project belongs to the rows nested under it.

Extras. An Extra is a named authority that does not follow from the scale, switched on one at a time beside its area — it exists exactly where a real authority does not follow from Editor or Viewer, and folding it into the scale would either widen Editor or lose the distinction. Each one hangs off its area at one of three attachment points, and the editor says which:

  • A Standalone Extra is reachable at any Access Level, Hidden included: can create projects and can delete projects on Projects, can sign documents on Documents, can invite members on Organization, can approve leave and can request leave on Time & Leave. This is how a partner signs drawings they do not upload, a project manager grows the team without touching settings, and a team lead approves leave without configuring leave policy.
  • A Viewer Extra is offered from Viewer up and stays switched off — and says so — while its row is Hidden: can see team workload on Team, can see all calendars on Meetings, can see all projects on Projects (Section 11.4.3). Reading a colleague's workload presupposes reading the Team area at all, so hiding Team withdraws it, and seeing every project presupposes seeing a project at all; Meetings can never be Hidden, so its Extra is always on offer.
  • An Editor Extra would be offered only at Editor and imply it. The attachment point exists; no Extra in the product uses it today.

Extras and Hidden. Hiding an area withdraws only what hangs off its levels, so a Standalone Extra survives its area being Hidden — and that is the point of it. “Invites members without managing the organization” is a role you build exactly one way: leave Organization Hidden and switch can invite members on.

Upward Implication. An area is only reachable through the areas that contain it, so selecting Editor on Tasks raises Phases and Projects to at least Viewer, and the editor says which rows it raised. It reaches ancestors and never the granting row itself, which is why a Standalone Extra on a top-level area stays reachable with that area Hidden. A child may still exceed its parent — Phases at Viewer with Tasks at Editor is the everyday employed-architect role, editing tasks on a board they may read but not restructure. Setting a row to Hidden clears everything nested under it, after a confirmation naming exactly what goes, so no grant is left stranded under an area nobody can reach.

What the app enforces. Every Feature Area in the editor is enforced, and so is every Extra — every switch here is one the app acts on (Sections 3.2, 3.5, 3.7, 3.8, 11.4.1, 11.4.2, and 12.0). Can see all projects was the last one still ahead of its enforcement, and it is not any more: with it off, a role's Projects at Viewer means the projects its members are on the Project Team of (Sections 3.4 and 11.4.3). Cover was the last area to land: it now means the project's identity and nothing else — the title, the abbreviation, the number, the deadline, the next meeting. A role at Cover Editor renames a project and sets its dates; it does not thereby rearrange the phases, rewrite the brief, set what the project is worth, or decide who works on it. Every project page still shows at least the project's identity, whatever else the role has, which is why Cover offers Viewer and Editor and never Hidden. Creating and deleting projects stay their own Extras on the Projects row, and closing a project (and reopening it) — reversible, and a fact about the project itself — goes with Cover editing.

What Hidden takes away everywhere else. Hidden reaches past the tab it removes. The sidebar and the mobile bar drop the entry, and the Workspaces index drops the tile and its count with it — a count is a reading of an area too. Home draws only on projects, so a role whose Projects are Hidden is told so once rather than shown a page that reads as an office with nothing in it, and the Time page keeps its calendar and its leave and loses the Log Hours tab, since hours are always logged against a project. Search returns nothing from a Hidden area. And the assistant obeys the same rules as the screens: every question it can answer names a Feature Area, so a role that has no Projects, no Tasks, or no Team gets a refusal rather than the answer, and asking in prose is never a way around the editor.

Which client a project belongs to follows Clients the same way. A role whose Clients are Hidden reads projects with no client on their cards, no client card on the Cover, and no client picker when creating or editing one — and a project it saves keeps the client it already had, untouched. Searching by a client's name finds nothing for that role either, on the projects list and through the assistant, since a search is a reading of the name one answer at a time.

Role card badges. Each role card badges the domains the role reaches, in the same words as the editor, and a legend above the cards says so on the screen itself. A dark badge means Editor on every Feature Area in that domain; a dark badge carrying a count — Projects 3/7 — means Editor on some of them, and says how many out of how many; a light badge means the role holds something there but edits none of it, whether that is reading the domain or an Extra such as can invite members; and a domain the role does not have at all carries no badge, because Hidden is an absence rather than a state to draw. Extras never count toward the number: signing documents is an authority beside the scale, not a step along it, so a role that signs drawings but uploads none still badges Documents light. This is why the default Project Manager badges Organization light — it invites members without managing settings — where before the areas were split it badged dark, which read as though it managed the organization. Admin shows every badge dark.

Admin is the exception to all of it. It holds everything the product has automatically, including areas and Extras added later, so its rows are shown at their level and locked, and there is nothing to edit.

What changed for an organization that already existed. Your existing roles arrived at the Access Levels that match what each one could do before the areas were split apart: a role that could edit projects reads Editor on Theme, Phases, Tasks, Norms, Parameters, and Budget, and a role that could only view projects reads Viewer on them. Nothing anyone can do changed — the levels describe the access the role already had, in finer words, and a role you had narrowed stays narrowed. Nothing changes for a role until you narrow it yourself. New organizations get the same shapes when their four roles are created.

Client Portal is the one exception: it is Hidden on every role but Admin, because sharing a project outward is a decision to make on purpose rather than one to inherit from being able to edit. That is enforced as well as stored (Section 12.0) — until you grant it, no role but Admin has a Client Portal tab on any project. Grant it to whichever roles should manage the client link.

One thing to check. Assigning a team to a project used to come with project editing; it now comes with Team at Editor, which is the point — seeing who is on a project and deciding who is on it are different authorities. The default Architect role edits projects and reads the team without managing it, so an Architect can no longer add or remove a team on a project. If that is work your architects do, set Team to Editor on that role under Settings → Roles; it takes one click and applies immediately. That is the only re-pointing that changes what an existing role can do — every other area was granted the finer access automatically when the areas were split apart.

One other thing may have changed, and only for an unusual role. If you had built a role that could manage something without being able to view it — Clients manageable and not viewable, say — that role now reads Editor there, seeing included. Editor includes Viewer on this scale, so that combination has nowhere to sit on it, and the alternative was to take away editing you had granted on purpose. No role gained the ability to change anything it could not change before.

Architect

4 members
ProjectsHiddenViewer
CoverViewerEditor
ThemeHiddenViewerEditor
PhasesHiddenViewerEditor
TasksHiddenViewerEditor
DocumentsHiddenViewerEditor
TeamHiddenViewerEditor
OrganizationHiddenEditor
Can sign documents
Can invite membersworks with Organization Hidden

11.4.1 The libraries beside a project. Documents, Vendors, Collaborators, and Team are one Feature Area each, whether you reach them from the sidebar or from a tab on a project. There is no separate setting for “this project's vendors”: a role whose Vendors are Hidden has no Vendors entry in the sidebar and no Vendors tab on any project, and typing either address answers with an access notice. A role with Team at Viewer reads who is on a project — the teams and their members — and is offered nothing to change: no Add Team button and no remove, because a control that cannot succeed says less than none at all. Team at Editor assigns and unassigns teams, on a project and in Team Management alike.

11.4.2 Budget access. Budget answers to two switches, and either one alone takes it away. The first is the app-wide one: project budgeting is switched off in this version, so the Budget row is absent from the Roles editor and the Budget tab from every project, whatever any role holds. The second is the role's own Access Level, which applies when budgeting is switched on. A role whose Budget is Hidden does not have the budget at all: no Budget tab, and opening the address directly answers with an access notice saying the role does not include this section — and no budget figure reaches it anywhere else either, not on a project, not on a phase, and not in an answer from the assistant. Budget at Viewer reads the client budget, the summary totals, the phase allocations, the vendor quotes, and the team capacity, and changes none of them: amounts are shown as figures rather than as click-to-edit fields, there is no Edit button on the client budget card, no Submit for Approval or Approve, and no quote to add, restatus, or delete. Budget at Editor does all of it — and every other place money is stored follows it too: the budget fields on a project, a phase's allocation, and the estimated and contracted fees on a collaborator or a vendor. A role that may rename a project, restructure its phases, or manage its vendors but not edit its budget is refused when a save carries an amount, rather than having the amount quietly dropped from a save that then reports success. Those fees are withheld on the way out as well — a role whose Budget is Hidden reads the Collaborators and Vendors tabs with no figures on them. Budget stands beside the other areas rather than inside them: a role can read the money on a project whose phases it may not restructure, and the reverse. What the budget shows about another area follows that area — the per-phase allocation lines need Phases at Viewer, the vendor quotes Vendors at Viewer, the team capacity rows Team at Viewer — so a role missing one of those still gets the totals without the list of names behind them. Budget approval requests are sent to the roles holding Budget at Editor, the people who can answer them. Admin holds all of it automatically.

11.4.3 Which projects a role sees. Projects at Viewer decides whether a role has projects at all; the can see all projects Extra beside it decides which — every project in the organization, rather than only the ones the member is on the Project Team of (Section 3.4). It is a Viewer Extra: offered from Projects at Viewer up, and switched off and unavailable while Projects is Hidden, because seeing every project presupposes seeing a project at all. Admin holds it automatically, like everything else. New organizations start with it switched on for Project Manager and off for Architect and Viewer — a fresh office begins with its architects seeing the projects they are on, and its managers seeing the whole board. Every existing role that could already see projects arrived with it switched on, so nobody's project list is shorter than it was: this is a choice your organization now makes per role, not one made for it. Switching it off takes effect immediately: members of that role then see the projects they are on the Project Team of, their project list narrows to those, and a project they are not on answers with the notice described in Section 3.4 rather than opening. Switching it back on restores the whole board with no other change.

11.5 Custom Parameters

Go to Settings → Parameters (Admin only) to build your organization's parameter catalog. Parameters are free by default — they are not tied to any entity type at creation. You decide where each one applies after creating it.

Each parameter has: name, type, category group, and discipline tag. Types:

  • Text, Number, Boolean, Date, URL — standard data entry
  • Enum — fixed dropdown list of options you define
  • Formula — computed from other numeric parameters using math expressions (e.g. plot_area * 0.6)
  • Lookup — reference to another entity

Categories and disciplines

Both lists are edited under Settings → Entity Types. No two categories, and no two disciplines, may share a name — capitalisation does not make them different. Renaming a category or a discipline takes effect everywhere immediately — every parameter filed under it keeps its filing, section headings and filters pick up the new name, and the category still counts as in use when you try to delete it. To retire one without disturbing existing parameters, deactivate it: it stops being offered on new parameters and stays where it is on the old ones.

Both lists start with suggestions — the four disciplines, and whatever categories you add — and they are yours from then on. Deleting every entry leaves the list empty and it stays empty; nothing puts the defaults back.

Global scope

To make a parameter appear automatically on all instances of an entity type, hover its row in the catalog and click the scope chevron. Check one or more entity types (Vendor, Project, Collaborator, Resource, etc.). Globally scoped parameters appear on every record of that type with a global label, and also appear as filters in list views. If a toggle fails to save, the error is shown inside the scope popover and the checkbox stays unchanged — the change is only real once it sticks.

Per-instance activation

Any parameter can be applied to a specific entity — vendor, collaborator, resource, or project — from that entity's edit form. Open the entity, scroll to the Parameters section, and use Add parameter or Apply template. Per-instance params coexist with globally scoped ones.

Parameter Templates

Templates are named flat lists of parameters — a convenient kit for a specific project type or workflow. Create them in the Parameter Templates section below the catalog. Toggle any catalog parameter on or off in a template. Apply a template from any entity's edit form or from a project's Parameters tab to activate all its parameters at once. Templates are universal and can be applied to any entity type. If a toggle fails to save, the error appears in the editing panel and the panel stays open.

Archive and delete

Archive a parameter to remove it from all entity forms while preserving stored values. Archived parameters appear under Show archived and can be restored. Click Delete on an archived parameter to permanently remove it along with all stored values — this cannot be undone.

When a parameter save is refused

Parameters are usually saved alongside something else — a vendor's details, a document's title, a new project — and they are written after that record is. What happens when the parameter half is refused depends on where the record stands.

Editing something that already exists — a vendor, a collaborator, a resource, a document — keeps the form open and shows the reason in the banner at the top: The vendor was saved, but its parameters were not — you do not have permission to perform this action. The record's own details did save. Pressing Save again re-sends both halves and creates nothing, so retrying is safe.

Creating something cannot keep the form open: the record has already been created by the time its parameters are written, so a second Save would create a second one. The form closes and a message at the bottom of the screen says both halves plainly — The vendor was created, but its parameters were not — … — naming the record as existing so nobody goes looking to create it again. Open it and fill the parameters in. On a new project the Project Brief template is reported the same way and separately, since it is a different half: The project was created, but its Project Brief template was not applied — …

A project's Parameters tab has nothing to preserve — the values you typed stay on screen — so a refused Save says Could not save the parameters — … at the bottom of the screen and leaves the panel exactly as it is. It deliberately does not reload: reloading would fetch the old values and present them as though the server had accepted them.

11.6 Document Types

Go to Settings → Document Types to define and manage document categories. Once document parameters exist, each type's name opens on click, and you choose there which custom parameters are required — the New Document form enforces these fields before saving. No two types may share a name, whatever the capitalisation.

Deactivate and Delete are two different things. Deactivating a type retires it from new use: the type stays, every document already filed under it keeps it, and that document's dropdown still lists it — marked inactive — so re-saving never quietly drops the type. Deleting a type says the term never existed, and is permitted only while nothing live references it; if something does, you are told how many records use it and pointed at Deactivate, which is usually the verb you meant. Default types are ordinary types: rename, deactivate or delete them like any other — they are starting suggestions, not locked system entries.

This is how every type list behaves — document types, resource types, vendor categories, collaborator types, parameter categories and parameter disciplines (see Custom Types below). Vendor categories are a tree, so both verbs read on the whole branch: deactivating a category retires its subcategories with it, and deleting one is refused while any vendor under it still uses it.

11.7 Theme Templates

Go to Settings → Theme Templates to create reusable project theme schemas. Define sections and typed fields that can be applied to any project. Mark one template as the default for new projects.

11.8 Custom Types

Under Settings, Admins can define the dropdown options used throughout the app: collaborator types, vendor categories, resource types. Customize these to match your firm's terminology. Renaming a vendor category takes effect everywhere immediately — vendors keep their assignments, and every dropdown, filter, and badge shows the new name. Deactivating a vendor category deactivates its entire subtree (and reactivating brings the whole branch back) — useful when a whole domain, like construction materials, is irrelevant to your practice. Deleting one is refused while any vendor still uses it or a subcategory under it: the message names how many, and points at Deactivate. Every list on this page works the same way — see Document Types above for the two verbs in full.

Names are unique within each list. Two entries in the same list cannot share a name, and capitalisation does not make them different — "Site Plan" and "site plan" are the same name. This holds when adding and when renaming, and you are told which entry already holds the name. Vendor categories are the partial exception: the name must be unique among siblings, so two different parent categories may each have a "General", but one parent cannot have two.

11.9 Theme

Click the theme toggle in the header (sun / moon / palette icon) to switch between three themes:

  • Studio (default) — warm neutral, ideal for composition and design
  • Dark — deep contrast for focused, screen-heavy sessions
  • Light — high contrast for presentations and bright environments

Your preference is saved automatically across sessions and devices.

11.10 Language

The interface is written in English, and only English. There is no language selector — not in your profile, not in the public navigation bar — and nothing in the app changes the language it is written in. Romanian is not offered, and no other language is; a second one would be a substantial piece of work rather than a setting being switched on, and nothing here promises when or whether it happens.

Dates, numbers, and amounts are written in English too — 15 Jan 2026, 10/08/2026, 1,234.5, RON 1,500 — on every screen, for every firm, regardless of what your computer's regional settings say. Two colleagues looking at the same deadline always read the same date. Dates stay day-first and the week still starts on Monday, so 10/08/2026 is the tenth of August, exactly as 10.08.2026 was.

Your country still matters — it decides which public holidays load, whether ANAF lookup applies, and how a phone number is normalized. It no longer decides how a date or an amount is punctuated: amounts group thousands with a comma, put the decimal after a dot, and name the currency before the figure, which is the opposite of the convention on a Romanian invoice. The one exception is meeting emails and calendar invitations, whose time labels are written in Romania's timezone next to the exact time carried by the calendar file itself.

11.11 Partnerships

Two firms can form a Partnership — an organization-level handshake made once and reusable for future joint work. Go to Settings → Partnerships (managing partnerships is Organization at Editor; the tab does not exist in a personal space, since partnerships are between firms).

Inviting. Enter the email address of an admin at the other firm and choose a Notice Period from the presets — 7, 14, 30, 60, or 90 days (default 30). The notice period is the severance term both firms agree to at the handshake. The invitation expires in 7 days; a pending invitation can be resent (extending the expiry while keeping the original emailed link valid) or revoked, which kills the emailed link on the spot.

Accepting. The recipient opens the emailed link, logs in with the invited email address, and accepts on behalf of an organization — choosing which one, if they hold Organization at Editor in several. Personal spaces cannot enter a partnership, an organization cannot partner with itself, and two firms cannot hold two active partnerships at once. Accepting activates the Partnership immediately with the agreed notice period; declining leaves nothing shared between the firms. A revoked, declined, or expired link explains itself politely and leads nowhere.

Managing. Both firms see the same section: invitations they have sent (an expired invitation stays listed with an Expired badge until it is resent or revoked, so resending is always reachable), active partnerships (partner firm, notice period, start date), and ended partnerships kept as history. Ending a partnership is unilateral — either firm's admin, no consent needed — and is a soft end: timestamped, visible to both firms, never deleted. Ending winds down the whole relationship predictably: every active joint attachment enters its notice period simultaneously, on the partnership's agreed notice period, and the other firm's admins are notified; pending attachment proposals simply die at zero cost, and an attachment already in its notice period keeps the countdown it has (see Severance below).

Changing the notice period. The agreed notice period changes only by mutual consent. Either firm's admin proposes a new preset from the Active partnerships table (Propose change); the other firm's admins are notified and see the proposal beside the current value, with Accept and Decline. Only acceptance writes the new period; the proposer can revise or withdraw an unanswered proposal at any time, at zero cost, and cannot answer their own. A notice countdown already running keeps its original end date — a renegotiation applies to detaches from then on, never to a window already open.

Joint projects. An active Partnership makes projects shareable, one at a time and by consent each time. On a project's Cover, the Partner firms card (proposing is Projects at Editor) lets the owner firm propose attaching a partner firm, picked from its active Partnerships. The proposal carries the joint mode and the sharing defaults; nothing about the project — not even its title — is visible to the partner before they accept, and the proposer can withdraw a pending proposal at any time, at zero cost.

The partner firm answers from its own Projects page, where pending proposals appear at the top for holders of Projects at Editor, naming the proposing firm and the partnership's notice period. Declining leaves nothing shared. On acceptance the project appears in the partner firm's main project list as a first-class row badged joint · with the other firm — the same badge the owner's list shows with the roles reversed, and the same dual-firm badge both firms see on the project header — and an All / Ours / Joint filter appears on both firms' project lists whenever there is joint work to separate. Joint projects count in both firms' dashboards. The project keeps exactly one owner: the partner-side row is participation, not ownership. While a joint attachment is active, the owner cannot delete the project — the partnership's notice protection cannot be bypassed by deletion.

Sharing terms. Beyond the fixed baseline, what crosses the boundary is governed by four sharing toggles on each attachment, set by the owner firm. Documents (default on): partner users see the project's documents and download their PDFs; Contributors can upload a PDF of their own (a title and a file — the owner's document types are not offered across the boundary). Financials (default off): partner users see project budget figures only — the project budget and each phase's allocated budget — never rates, quotes, or anything of the client beyond its name. Meetings (default on): partner users see the project's upcoming meetings — title, time, and where, never the owner's attendee list. Phase structure (default off): Contributor-grade partner users may add, edit, reorder, and remove phases from the joint project page. A holder of Projects at Editor at the owner firm edits the toggles in place on the Partner firms card — on a pending proposal or an active attachment — and changes take effect immediately; other Cover readers see the same lines read-only. Partner users get the same story from a read-only Sharing card at the bottom of the joint project page, so both firms always know exactly what is shared. A toggle change on an active joint project is recorded in the Activity feed, visible to both firms.

Staffing and grades. The owner attaches the partner firm, never its people. The partner firm staffs the joint project itself, from its own member list, on its own project page (staffing is Projects at Editor at the partner firm): each staffed person carries a per-project gradeContributor (works within what the sharing terms allow) or Viewer (reads only) — changeable or removable at any time. The owner firm never sees the partner's member directory, only the resulting roster, shown under the Partner firms card on the Cover with each person's grade. There is no mapping between the two firms' roles; the grade is the whole story.

What the partner sees. A staffed partner user opens the joint project from their own project list and gets the fixed baseline: title, code, deadline, phase structure and statuses, tasks, comments, the combined two-firm roster, and the project's activity feed — plus whatever the sharing toggles open: a Documents card, a Meetings card, the next-meeting date, and budget figures, each present only while its toggle is on. Where the project references the owner's records, the partner sees a name label only — the client is a name, never a link into the owner's client list. Everything organization-level at the owner firm — clients, vendors, type lists, teams, roles, rates, settings, the client portal, and each firm's time entries — is unreachable for partner users regardless of grade; that hard floor no sharing toggle can open. An unstaffed partner-side user sees nothing of the project beyond its list row: opening it answers with an access notice naming staffing (or, for a holder of Projects at Editor, just the staffing surface, so a project manager can staff people — themselves included — before anything else is shown).

References across the boundary. A task on a joint project carries the same ReferenceT-1482 — for both firms: it is minted from the owner firm's sequence, because the task belongs to the owner's project, and it reads the same on both screens. A staffed partner user sees it leading every task row on the joint project page and on the task's own edit panel, in the same small grey monospace, and clicking it copies it exactly as anywhere else. Phases on that page are collapsible, like the owner's board: the first unfinished one opens on arrival, and clicking a phase's name opens or closes it.

Typing a Reference resolves it across the boundary too. The command palette answers a staffed partner user with the joint tasks it names, under a heading naming the owner firm — Tasks · Atelier Nord — kept separate from your own firm's results and never displacing them; a bare number works here as it does at home. Titles match the same way, so part of a task's name finds it too. Joint projects answer to their name, code, or number in the same firm-headed way, for anyone at the partner firm whose project list already shows them. Opening a joint task result lands you on the joint project page with its phase open and the row lit for a moment — the same arrival the owner gets on their board — and the assignment notification that named T-1482 lands there too, rather than on the project page for you to scan.

Because Reference numbers are counted per organization, the same number can name one of your own tasks and one on a joint project at once, and if you work with two owner firms it can name three. All of them are shown, each under its own heading, so whose T-1482 you are opening is something you read rather than something you guess. Your own role at your own firm still decides what you see: a role with Tasks Hidden gets no joint task results and one with Projects Hidden gets no joint project results, whatever a partnership grants. Staffing is the gate for tasks — an unstaffed partner-firm member finds the joint project by name, as their list already shows it, and learns nothing of its tasks. A severed joint project drops out of search at the moment its page does; a closed one stays findable, exactly like a closed project at home; a deleted one is findable by nobody.

What a contributor can do. A partner user with the Contributor grade works on the joint project from that same page: adding and editing tasks (title, description, status, priority, due date, assignee), clicking a task's status badge to advance it, moving phases through their statuses (Start, Complete — subject to the same completion gates the owner's board enforces — and Reopen), and commenting on phases. When the documents toggle is on, a Contributor also uploads PDF documents; when the phase-structure toggle is on, a Contributor also adds, edits, reorders, and removes phases. A Viewer-grade partner user is offered none of these controls, and the server refuses the writes regardless of what a client sends. Tasks on a joint project can be assigned to anyone on the combined roster, from either side: the owner's assignee picker gains a Partner firm section listing the staffed partner members, and the partner's task form offers the whole roster. A task assigned to a partner user appears on that person's My Work like any other task, and its status can be changed from there.

Hours stay home. A staffed partner user logs time on the joint project from their own firm's Time page: the joint project appears in the Log Hours picker beside the firm's own projects — whatever the person's grade, since logging your own hours is your firm's record, not a project edit — with the project's phases and the person's assigned tasks on it. The entry is saved in the logger's own organization, referencing the joint project across the boundary, so the logger's own rates, schedules, leave, and payroll math apply, untouched. Neither firm ever sees the other's hours — no total and no per-person figure crosses the boundary, on any surface — and after the project is later detached, each firm's existing entries stay valid and visible at home, keeping the project's name on them.

Notifications across the boundary. Joint-project events ring in both firms: a new comment or a phase status change — whichever firm made it — notifies the owner's project members and the partner firm's staffed members, and a task assignment notifies its assignee whichever side they are on. Every notification lands under the recipient's own organization, so a partner user reads it on their own bell with the project badged with the owner firm's name, linking to the joint project page. Nothing behind an off sharing toggle or the hard floor is ever notified across the boundary, and the notification mutes apply to partner users exactly as at home.

Comments and activity. The comments on a joint project are one conversation on the project's phases, written by both firms and — where a Client Portal exists — including the client's portal comments, each entry labeled with the firm it came from (or Client). The owner reads and writes this conversation from a Comments card on the project's Cover (writing is Phases at Editor), the partner from the joint project page (writing is the Contributor grade). Beside it, an Activity card on both firms' pages records what partner users did — who created or edited which task, moved which phase, commented where — attributed by name and firm, so joint work is never anonymous.

Severance. A joint attachment ends with dignity, never overnight. The owner firm detaches the partner unilaterally from the Partner firms card on the Cover (Detach, Projects at Editor): the attachment enters its notice period — the days the partnership agreed at the handshake, frozen at that moment — the partner firm's admins are notified, and nothing changes for the partner until the window closes: staffed users keep exactly the access the sharing terms gave them, contributors keep working, hours keep being logged. Both firms see the countdown — the owner under the attachment on the Cover, the partner as a banner on the joint project page naming the end date and the days left. The sharing toggles are frozen for the duration. If the partner firm's admin consents to the detach (the banner's Consent to immediate severance — an Organization at Editor act, since the notice protection belongs to the firm, not to a grade), severance takes effect immediately instead. Otherwise the notice expires on its own: a scheduled job moves the attachment to severed and access ends, and both firms are told. Ending the whole Partnership is the same wind-down applied to every active attachment at once. A severed attachment stays on the owner's Cover as history, badged Severed. While an attachment is active or in its notice period the owner cannot delete the project, so the notice protection cannot be bypassed by deletion.

The Severance Fork. Whenever a joint attachment severs — the notice expiring, or the partner firm consenting to an immediate cut — the partner Organization automatically receives a closed record copy of the project, so each firm walks away holding the full record of the joint work. It arrives on its own, within minutes, as a first-class closed project in the partner firm's own project list, with a banner naming the firm the work was done with and the client. The partner's admins get a notification when it lands.

What the copy contains is exactly what the partner could see, and nothing else: the project's title, code, number and deadline; every phase with its dates and statuses; every task with its description, status, priority, due date and assignee; the whole conversation, each comment keeping the author's name and firm as it was written; and — if the documents toggle was on — the shared documents, whose files are re-uploaded into the partner firm's own storage rather than linked back to the owner's. Budget figures come across only if the financials toggle was on. Anything the sharing terms withheld, and everything behind the hard floor — the owner's clients, vendors, type lists, teams, rates, the client portal, the Project Brief, the other firm's hours — is simply not in the copy. Meetings are the one thing left out on purpose even where the toggle showed them: the copy is the record of the work, not an archive of the other firm's calendar.

Nothing in the copy points back at the owner firm's records. Where the shared project referred to one, the copy carries the plain-text label instead: the client is a name in the banner, each document's type is the label the partner's document list showed. The copy is the partner firm's outright — their project, their task numbers, closed from birth, editable and deletable by them like any other closed project, and untouched by anything the owner firm does afterwards. The owner keeps the severed attachment as history and nothing more.

Task numbers in the copy. The copy's tasks are numbered from your own firm's sequence, because the other firm's numbers would collide with yours. That means a task number quoted inside a copied comment — “blocked by T-1482” — refers to the task as it was numbered at the other firm, not to whatever T-1482 happens to be in your Organization. The banner says so, and every task in the copy shows its original number beside its new one, written was T-1482 in small grey type: that is how you find which task a copied comment meant. Comments themselves are never edited — a transcript says what was said, numbers included. The original number is a note of provenance and nothing more: search, the command palette and every link resolve by the copy's own number only. Tasks anywhere else in the app have no original number, because they were never renumbered.


Client Portal

The Client Portal lets you share a polished, read-only presentation of a project with your client — no account or registration required. Clients get a dedicated page with a full-bleed cover photo, phase-by-phase image galleries, before/after comparisons, and a space to leave comments. It presents as a professional deliverable from your firm, not as a SaaS tool.

12.0 Who Can Use the Portal

The Client Portal is its own Feature Area, and it is the one area no existing role arrived holding. Sharing a project outward is a decision to make on purpose rather than one to inherit from being able to edit a project, so when the areas were split apart the portal was granted to nobody but Admin. Until an Admin grants it under Settings → Roles, there is no Client Portal tab on any project — for anyone, however much else their role can do.

A role whose Client Portal is Hidden does not have the portal at all: no tab, and typing the address answers with an access notice saying the role does not include this section. Nothing about the share reaches such a role anywhere else either — a client's comment and a client's answer to an approval request are announced only to the project members whose role includes the portal, since a notification linking to a page you are refused is a trace of a section rather than a message.

Client Portal at Viewer reads the share and changes nothing in it: whether the portal is active, when the client last viewed it, the theme, whether a cover photo and a password are set, whether comments are allowed, the phase gallery, the client-facing PDFs, the approval requests and their answers, and the comments the client left. It cannot activate or deactivate the portal, change any setting, upload or remove anything, ask for an approval, or mark a comment read. The share link itself is not shown to it — and not merely left undrawn: the link never leaves the server for a role that may not share. The link is the ability to share the project — anyone holding it can pass it on — so it belongs to the roles holding Client Portal at Editor, which is the whole reason this area is not inherited. A Viewer is told as much in place of the link.

Client Portal at Editor does all of it, including opening the portal in the first place: a portal is created on first visit to the tab, and minting its link is an edit, so a viewer opening the tab on a project nobody has shared yet is told no portal has been opened rather than causing one to exist.

One boundary drawn on purpose: the images filed against a phase in the portal's phase gallery stay on Phases at Editor, because they are the phase's own record and are reached from the phase board too. The PDFs published to the client, and the switch deciding whether a phase appears in the portal at all, are the portal's. A role can hold either without the other — an architect who adds renders to a phase but does not decide what the client sees is exactly the shape this split allows. Admin holds it at Editor automatically.

12.1 Accessing the Portal Settings

Open any project and click the Client Portal tab ( icon). Endulo automatically creates a portal for the project the first time a role that can manage it visits this tab. The portal starts inactive — the link does not work until you explicitly activate it.

12.2 Activating the Portal

Toggle Portal access on to make the link live. Clients who have the link can immediately open the portal in any browser. Toggle it off at any time to deactivate it — the link stops working instantly and can be re-activated later without changing the URL.

Portal access

Clients with the link can view this project.

12.3 Password Protection

The portal is open to anyone with the link by default. To restrict access, set a password in the Password protection section. Clients will see a simple password prompt before they can view the project. You can change or remove the password at any time — existing sessions are not invalidated immediately but will expire within 30 days.

Studio Ionescu & Partners

Residence Popescu

Enter password

12.4 Portal Appearance

Under the Appearance section you can control how the portal looks to the client:

  • Theme — choose Light or Dark. The dark theme renders the entire portal in deep tones, well-suited for photography-heavy projects. The setting applies only to this portal and does not affect any other part of Endulo.
  • Cover photo — upload a full-bleed hero image (JPEG, PNG, or WebP, max 20 MB). It displays at roughly 70% of the screen height at the very top of the portal, with the project title overlaid. The sticky header becomes transparent over the cover and transitions to a frosted-glass finish as the client scrolls down. Remove or replace the cover at any time.

Appearance

Theme

Cover photo

JPEG, PNG or WebP — max 20 MB

12.5 Uploading Phase Images

The gallery manager on the Client Portal tab shows every phase of the project. For each phase you can upload rendered images that the client will see in that phase's section. Supported formats: JPEG, PNG, WebP — maximum 20 MB per image. Multiple images can be uploaded at once.

After uploading, click the image title to rename it inline, or click the caption area below to add descriptive text that appears in italics under the image. Use the up / down arrows to reorder images within a phase. Delete with the trash icon — deletion is permanent.

12.6 Phase Cover Images

One image per phase can be designated as its cover. Click the star icon that appears on hover to mark an image as the cover. The cover image is displayed as a full-bleed opener at the top of that phase's section — wider than the gallery grid and with a gradient caption bar overlay. It does not appear in the image gallery below. Click the star again to unset it.

Cover images are most effective for a hero render, an aerial view, or any single image that best represents the phase at a glance.

Design

Design

Star an image to use it as the full-bleed cover for this phase.

CoverHero Render
Floor Plan
Section A

12.7 Image Comparison Slider

When a phase has exactly two gallery images (excluding the cover), the client view automatically shows a Compare button above the gallery. Clicking it switches to a drag-to-reveal comparison slider — the client can drag a handle left and right to see both images overlaid. Clicking Gallery returns to the normal grid. This is ideal for before/after renders, day/night studies, or design option comparisons.

12.8 Adding Phase Descriptions

Clients can read a written explanation alongside the images for each phase. Phase descriptions are set inside the project's Phases tab — click a phase to edit its description. Any phase with either a description or at least one image will appear in the client view.

12.9 Client Comments

When comments are enabled, a floating Leave a Comment button appears on the public portal page. Clients enter their name and message — no account required.

To enable or disable comments, go to the project's Client Portal tab and toggle Allow comments in the Comments panel. When a client submits a comment, a notification is sent to org members. The Comments panel in the architect view shows all comments with read/unread state — click the checkmark icon to mark a comment as read.

12.10 Sending the Invite Email

Instead of copying the link manually, use the Send invite by emailform. Enter the client's email and optionally their name, then click Send. The client receives a branded email from Endulo with a direct link to the portal. You can resend the email at any time — the link itself does not change when you resend.

Send invite by email

12.11 Regenerating the Link

If a portal link has been shared too widely or you need to revoke access from someone who has it, click Regenerate next to the share link. This creates a new unique URL and immediately invalidates the old one — anyone who bookmarked the previous link will no longer be able to access the portal.

12.12 What the Client Sees

The client opens a clean, full-screen page with no Endulo chrome:

  • Sticky header — org name and project title, transparent over the cover photo and frosted-glass on scroll. A Print button lets the client save a paper copy.
  • Cover hero — if you upload a cover photo, it fills roughly 70% of the screen height with the project title overlaid in large type.
  • Alternating phase sections — odd phases align left (70% of screen width), even phases align right, creating a dynamic, editorial layout. Each section carries a ghost section number in the background for visual depth.
  • Phase headings — rendered in Cormorant Garamond, a classical serif, to emphasize the architectural character of the work.
  • Phase cover image — full-bleed above the phase description, separate from the gallery.
  • Image gallery — grid of thumbnails; click any to open a full-screen lightbox with keyboard navigation and a frosted caption bar.
  • Comparison slider — appears when a phase has exactly two gallery images; drag to reveal.
  • Comments — collapsible at the bottom of each phase; no login required.
  • Scroll progress bar and phase navigator — a thin progress line at the top and a right-side dot nav (visible on wide screens) help the client orient themselves.
  • Last updated — each phase shows when it was last progressed.
S

Studio Ionescu & Partners

Residence Popescu

Prepared for Familia Popescu

Residence Popescu

2 of 3 phases completed

01 — CONCEPT

Concept Phase

Site analysis, brief definition, feasibility study.

02 — DESIGN

Design Development

Schematic drawings and engineering coordination.

03 — PERMITTING

Permitting

In Progress

12.13 Who Can Reach These Settings

Everything on this page is the Client Portal Feature Area, at Editor — see Section 12.0 for the full account, including what Client Portal at Viewer reads and why the share link itself is withheld from it. The portal starts Hidden on every role but Admin, including Architect and Project Manager: sharing a project outward is a decision to make on purpose rather than one to inherit from being able to edit a project. Grant it under Settings → Roles to whichever roles should manage the client link.

12.14 Client Approval Requests

Use the Approval Requests section in the Client Portal tab to send formal approval requests to the client. Two types are supported:

  • Phase sign-off — the client reads the description, optionally adds a comment, and clicks Approve or Request revision.
  • Design option selection — the architect creates 2–4 labeled options, each with an optional image. The client picks their preferred option before approving or requesting revisions.

Only the oldest pending request is shown to the client at a time, as an "Action required" banner at the top of their portal view. When the client responds, the project team receives a notification. Pending requests can be deleted by the architect; responded requests are archived in place for reference.

Gantt Timeline

The timeline has no tab of its own. Open the project's Phases tab and scroll past the phase board: a read-only Gantt chart of all project phases, plotted on a time axis, sits at the bottom of that page under a Timeline heading. It reads with the board above it — a role whose Phases are Hidden reaches neither (Section 3.2). On a project with no phases the heading is still there, saying that none are defined yet.

13.1 Reading the Chart

Bars are colored by phase category (Concept, Design, Documentation, Permitting, Construction, Administration). Bar patterns indicate status: solid = completed, diagonal stripes = in progress, semi-transparent = pending. A red vertical line marks today; a yellow line marks the project deadline if one is set. Each phase with its own deadline also carries a dark vertical tick on its row — the phase deadline marker.

13.2 Date Derivation

A bar's length always comes from the phase's estimated duration; its deadline never reshapes the bar — it judges it (see 13.3). The start is: the actual start date if work has begun → the phase's Planned Start if one is set → cascaded from the previous phase's end, whatever that phase's status. Set a Planned Start to insert a break after the previous phase or to deliberately overlap phases running in parallel.

The end is the actual completion date for completed phases; for phases still open, the planned end (start + estimated weeks, using the override when present). An in-progress phase that outlives its estimate keeps growing to today until someone closes it — and pushes every later phase's derived start along with it. A phase with no estimate uses its deadline as the planned end, or 4 weeks as a last resort.

13.3 Overrun Warnings

Two thresholds judge every bar. The segment past the phase's planned end renders in the warning color — the estimate is blown, the promise still stands. The segment past the phase's deadline renders in the error color — the promise is blown. Once a bar has grown past its planned end, a thin marker shows where the plan said it would stop. Overrun history stays visible on phases completed late, and an infeasible plan shows its overrun before work even starts.

Calendar Feed

Endulo generates a personal iCal feed you can subscribe to in Google Calendar, Apple Calendar, Outlook, or any other calendar application. The feed is one-way: your calendar app reads from it on its own schedule, and nothing you enter or edit in that app flows back into Endulo.

14.1 Getting Your Feed

The quickest way: on the Time page, Calendar tab, click Add to your calendar — available to every member regardless of role. A dialog opens with the one-click subscribe links and the feed URL; the feed is created automatically the first time, so there is no separate generate step.

The same section also lives in Settings → Profile → Calendar Feed, where clicking Generate calendar feed creates it if you don't have one yet. Both places show the same links and URL.

The feed includes: phase deadlines, phase start dates, project deadlines, and your meetings across all organizations you belong to.

14.2 Subscribing

Add to Google Calendar opens Google Calendar with your feed pre-filled. Add to Apple Calendar opens your Calendar app's subscribe flow directly on an iPhone or Mac, over an encrypted connection — no "insecure connection" warning appears. For Outlook or any other calendar app, copy the feed URL and paste it into the app's "Subscribe to calendar" or "Add calendar from URL" feature. Subscribing needs no Endulo login on the device — the secret token in the URL is the authentication.

14.3 How Quickly Changes Appear

Your calendar app polls the feed on its own schedule. Google Calendar refreshes subscribed feeds periodically — a change can take up to a day to appear. Apple Calendar can refresh more often. Meeting invitations also arrive instantly by email with an attachment that adds the meeting to your calendar.

14.4 Security

The feed URL contains a secret feed token unique to your account. Treat it like a password — anyone with the URL can see your calendar events. If it is ever exposed, click Regenerate in the Calendar Feed section of Settings → Profile (regeneration lives only there, not in the Calendar tab dialog) — the old URL is immediately invalidated and a new one is created. Every existing subscription breaks and stops updating, so you must re-subscribe in each calendar app with the new URL. The app warns you before regenerating.

AI Assistant

The AI assistant (chat icon in the sidebar) can answer questions about how to use Endulo, query live data from your organisation's projects, and make changes on your behalf.

What It Can Do

Read-only queries:

  • List your active projects
  • Get the full status of a project: phases, task counts (total / completed / in-progress / pending), and deadlines
  • Search projects by name, code, or client
  • Search tasks by title, or look one up by its Reference (T-1482), across all projects
  • Show your open tasks across all projects, including overdue ones
  • List overdue tasks across the projects you can see, or for a specific project
  • Show how many open tasks each team member has (team workload)

Write actions, each needing the Access Level of the area it writes:

  • Update a task's status — mark as pending, in progress, or completed — Tasks at Editor
  • Update a task's assignee, due date, priority, or description — Tasks at Editor
  • Create a new task inside a project phase — Tasks at Editor
  • Mark a project phase as started, completed, or reopened — Phases at Editor

Assignment through the assistant obeys the same rule as the pickers: an assignee must be on the task's Project Team, and asking for anyone else is answered with a sentence saying so rather than done. The assistant cannot add someone to a Project Team — that is the project's Team tab.

Write actions available to everyone:

  • Log hours worked against a project, phase, or task (for the current user) — no Access Level beyond the Projects the hours are logged against, exactly as on the Time page, so a Viewer can log her own hours through the assistant

Every read the assistant can perform names a Feature Area too — projects and their identity need Projects at Viewer, phases Phases at Viewer, tasks and workload Tasks at Viewer, the member list Team at Viewer, and a project's client name Clients at Viewer — so asking in prose is never a way around the Roles editor. If your role does not include what an action needs, the assistant says so and names the action it could not run; it never pretends the feature does not exist. Ask someone whose role holds that area at Editor, usually a Project Manager or Admin.

The assistant sees the projects you see. Project Visibility (see Section 3.4) applies to it exactly as it applies to the pages: without Can see all projects, the projects it lists and searches are the ones you are on the Project Team of, the tasks it finds are the tasks inside them, and the phases and tasks it can change belong to them. Asked directly about a project you are not on, it answers with the same sentence the page shows — you're not on this project's team — rather than reporting a project that plainly exists as missing. Team workload is the exception, because the Extra behind it was granted as oversight, and your own open tasks are another: they are yours to be told about wherever they are.

Rich Results

When the assistant calls a tool, the response includes a visual card — a clickable project list, a phase progress breakdown, a task list with priority indicators, or a team workload chart — followed by the assistant's commentary. Clicking a project row opens that project directly.

How to Use It

Click the chat icon in the sidebar (or press ⌘K / Ctrl+K) and type your question in plain language. Examples:

  • "What projects are active right now?"
  • "How is the Florescu House project going?"
  • "Which of my tasks are overdue?"
  • "Who has the most open tasks on the team?"

When you have a project open, the assistant is automatically aware of which project you're viewing and you can refer to it as "this project".

Voice Input

On supported browsers (Chrome, Edge), a microphone button appears next to the send button. Click it to speak your question — the transcript fills the input field for you to review before sending. The browser will ask for microphone permission on first use.

Voice Readout

The speaker icon in the panel header toggles voice readout. When enabled, the assistant reads its text response aloud using your browser's built-in text-to-speech after each reply finishes. Click the speaker again to stop playback early.

Suggested Follow-Ups

After a response that includes live data, a row of quick-send chips appears above the input box. Clicking a chip sends that question immediately without typing. The chips update with each reply.

Slash Commands

Type / in the input to see instant commands. Navigate with arrow keys, confirm with Enter:

  • /tasks — your open tasks
  • /overdue — all overdue tasks
  • /projects — list active projects
  • /status — status of the current project
  • /workload — team workload overview

Conversation History

Your conversation is saved in the browser and restored when you reopen the panel. Click the trash icon in the header to clear it and start fresh.

Stop Generation

While the assistant is responding, a red stop button replaces the send button. Click it to interrupt early.

Expand Panel

The expand icon in the panel header widens the view for reading longer responses.

Daily Limit

Each user has a daily message limit (default 50), shown in the assistant panel. The limit resets at midnight UTC.

Naming a Task by its Reference

Every task has a ReferenceT-1482 — and the assistant speaks it. Say one and it names exactly one task: "mark T-1482 as done" needs no search and leaves no room for the assistant to pick the wrong "DTAC one". It takes the Reference in whatever form you read it out — T-1482, t1482, T 1482, #1482 or a bare 1482 — the same forms the search box takes, because there is nothing stricter to remember in the chat than in the box. Everywhere a task can be named to the assistant takes one: marking it done, changing its assignee, due date, priority or description, and logging hours against it.

Asking about one works the same way: "what is T-1482?" searches by the Reference rather than by title, matching exactly on the number, so 1482 finds T-1482 and never T-11482. A number that is also somebody's title returns both, the exact match first. Titles still work exactly as they did — a task you can only describe is still found by describing it.

The assistant answers with References too. Every task it lists carries one on its card, clickable to copy exactly as it is everywhere else, and a task it just changed or created is confirmed by its Reference — so the sentence you read back is the sentence you can send to a colleague. A task the assistant creates for you is named by the Reference it was minted with, which is how you learn what to call it.

A Reference nothing carries is answered plainly: the assistant says it found no such task and changes nothing, rather than acting on whichever task has the nearest-looking title. A Reference from another organization is the same answer — References are counted per organization, so somebody else's T-1482 is simply not a task here. And naming a task by its Reference gives no one any reach they did not already have: a role whose Tasks are Hidden gets the same refusal it gets for every other task question, and a role at Viewer on Tasks is still refused the write.

Updating Task Status

Say "mark T-1482 as done", or "mark [task name] as done" if you do not have the Reference to hand. Given a Reference the assistant goes straight to that task; given a title it searches first, and if several tasks match it asks which one you mean. The result card confirms the change and names the task by its Reference.

Updating Task Details

You can ask the assistant to change a task's assignee, due date, or priority. For example: "Assign the permit task to Stefan", "Set the due date on the design review to 15 August", or "Change priority of the inspection task to high". For assignment by name the assistant resolves the team member first; naming the task by its Reference — "assign T-1482 to Stefan" — skips the search for the task itself.

Updating Phase Status

Say "mark the [phase name] phase as started / complete / reopened" and name the project if needed. The assistant looks up the phase and updates its status.

Logging Time

Say "log [N] hours on [project]" and optionally include a phase, task, or date. Time is recorded against your account. Example: "Log 3 hours on the Ionescu Office project" or "Log 2.5 hours on the design phase for yesterday".

The task can be named by its Reference: "log 2 hours on T-1482". A phase or task you name has to belong to the project you named. If it doesn't, the assistant says so and logs nothing rather than filing the hours against something on another project.

Creating Tasks

Say "create a task [title] in the [phase] phase of [project]". The assistant looks up the project and phase, then creates the task. You can also say "assign it to me" and include a due date. The result card confirms the task name and phase, and leads with the Reference the new task was minted with — that is what to call it from now on.

What the Assistant Cannot Do

The assistant cannot delete data, change project settings, or manage documents. Editing or creating tasks needs Tasks at Editor and marking a phase needs Phases at Editor, so a role at Viewer on those areas asking for them is told so by name. Logging time is the exception: your own hours are your own data, so any member can log them — exactly as they can on the Time page.

Prompt Caching

To reduce API costs, the assistant's system prompt (including this user guide) is sent with Anthropic's prompt-cache flag. After the first request, repeated context is served from cache at roughly 90% lower cost per token.

The cached part holds nothing specific to you or your organization, so one cache entry serves everyone rather than one per person. Your role and the project you currently have open are sent separately, outside the cached part — the assistant still knows both.

Using Endulo on Your Phone

Endulo works in the browser on phones — no app installation is needed. On screens narrower than 768px the interface adapts automatically.

Bottom Navigation

The sidebar is replaced by a bottom navigation bar with five destinations: Home, My Work, Workspaces, Team, and Notifications. The Notifications icon shows your unread count.

My Work Board

In board view, the four status columns become tabs — tap a status to see its tasks. Drag-and-drop is disabled on touch screens; instead, tap the menu button on a task card and choose Move task to change its status. The list view stacks each task into a two-line card with the status, priority, and due date controls beneath the title; tapping the status opens the same bottom sheet the phase board's task rows open.

Calendar

The Time page calendar opens in a week-list view on phones, which is easier to read than the month grid. You can switch to the month view from the toolbar.

Tables Become Cards

Leave request tables and phase task tables display as stacked cards on phones, with the same inline editing available by tapping each field. Wide tables elsewhere in the app scroll sideways inside their own container.

Forms and Dialogs

Create and edit dialogs open full-screen on phones, with the action buttons pinned to the bottom of the screen above the keyboard.

Project Pages

The project tab strip scrolls sideways and automatically brings the active tab into view. The Gantt timeline keeps a narrow phase-name column and scrolls horizontally. Phase reordering by drag is desktop-only; task selection checkboxes and action menus are always visible on touch screens.

Client Portal

The client portal is fully phone-friendly — clients can read phase updates, browse image galleries, leave comments, and respond to approval requests from any device.

Ready to bring order to your practice?

Join architecture firms already using Endulo to run projects with precision.