[{"data":1,"prerenderedAt":428},["ShallowReactive",2],{"navigation":3,"\u002Fguide\u002Fteam":80,"\u002Fguide\u002Fteam-surround":423},[4,9,14,50,75],{"title":5,"path":6,"stem":7,"icon":8},"Getting started","\u002Fgetting-started","1.getting-started","i-lucide-rocket",{"title":10,"path":11,"stem":12,"icon":13},"Installation","\u002Finstallation","2.installation","i-lucide-hard-drive-download",{"title":15,"path":16,"stem":17,"children":18,"page":49},"Guide","\u002Fguide","3.guide",[19,24,29,34,39,44],{"title":20,"path":21,"stem":22,"icon":23},"Timer & entries","\u002Fguide\u002Ftimer-and-entries","3.guide\u002F1.timer-and-entries","i-lucide-timer",{"title":25,"path":26,"stem":27,"icon":28},"Projects, clients & tasks","\u002Fguide\u002Fprojects-clients-tasks","3.guide\u002F2.projects-clients-tasks","i-lucide-git-branch",{"title":30,"path":31,"stem":32,"icon":33},"Reports & calendar","\u002Fguide\u002Freports-calendar","3.guide\u002F3.reports-calendar","i-lucide-chart-column",{"title":35,"path":36,"stem":37,"icon":38},"Theme editor","\u002Fguide\u002Ftheme-editor","3.guide\u002F4.theme-editor","i-lucide-palette",{"title":40,"path":41,"stem":42,"icon":43},"Importing data","\u002Fguide\u002Fimport","3.guide\u002F5.import","i-lucide-hard-drive-upload",{"title":45,"path":46,"stem":47,"icon":48},"Team & organizations","\u002Fguide\u002Fteam","3.guide\u002F6.team","i-lucide-users",false,{"title":51,"path":52,"stem":53,"children":54,"page":49},"Reference","\u002Freference","4.reference",[55,60,65,70],{"title":56,"path":57,"stem":58,"icon":59},"Data model","\u002Freference\u002Fdata-model","4.reference\u002F1.data-model","i-lucide-database",{"title":61,"path":62,"stem":63,"icon":64},"API routes","\u002Freference\u002Fapi","4.reference\u002F2.api","i-lucide-route",{"title":66,"path":67,"stem":68,"icon":69},"Environment variables","\u002Freference\u002Fenv","4.reference\u002F3.env","i-lucide-settings-2",{"title":71,"path":72,"stem":73,"icon":74},"Security","\u002Freference\u002Fsecurity","4.reference\u002F4.security","i-lucide-shield",{"title":76,"path":77,"stem":78,"icon":79},"About","\u002Fabout","5.about","i-lucide-info",{"id":81,"title":45,"body":82,"description":417,"extension":418,"meta":419,"navigation":420,"path":46,"seo":421,"stem":47,"__hash__":422},"docs\u002F3.guide\u002F6.team.md",{"type":83,"value":84,"toc":404},"minimark",[85,98,103,161,164,168,174,198,203,212,222,229,233,247,275,287,317,321,325,330,337,341,348,379,386,396],[86,87,88,89,93,94,97],"p",{},"Every Tick user belongs to an ",[90,91,92],"strong",{},"organization",". Registering creates a personal org with you as its ",[90,95,96],{},"owner","; clients, projects, tasks, tags and entries all live inside the org, so everything in this guide is shared with the people you invite.",[99,100,102],"h2",{"id":101},"roles","Roles",[104,105,106,119],"table",{},[107,108,109],"thead",{},[110,111,112,116],"tr",{},[113,114,115],"th",{},"Role",[113,117,118],{},"Can do",[120,121,122,141,151],"tbody",{},[110,123,124,130],{},[125,126,127],"td",{},[128,129,96],"code",{},[125,131,132,133,136,137,140],{},"Everything: rename the org, manage members and roles, create and revoke invites — including inviting and managing other ",[90,134,135],{},"owners",". The ",[90,138,139],{},"last owner can never be demoted or removed"," (the API refuses with a 409).",[110,142,143,148],{},[125,144,145],{},[128,146,147],{},"admin",[125,149,150],{},"The same day-to-day powers, with one boundary: admins cannot touch owner accounts, and cannot grant the owner role. Attempts get a 403.",[110,152,153,158],{},[125,154,155],{},[128,156,157],{},"member",[125,159,160],{},"Track time and use the catalog; no member\u002Forg management.",[86,162,163],{},"Roles are enforced on the server, and the caller's role is re-read from the database on every request — demote or remove someone and it takes effect on their very next click, not at their next login.",[99,165,167],{"id":166},"members-roles","Members & roles",[86,169,170,173],{},[90,171,172],{},"Settings → Members & roles"," lists everyone in the org with name, email, role and rate. Owners and admins can:",[175,176,177,185,192],"ul",{},[178,179,180,181,184],"li",{},"Change a member's ",[90,182,183],{},"role"," (within the boundary above).",[178,186,187,188,191],{},"Set a per-member ",[90,189,190],{},"rate override"," (see below).",[178,193,194,197],{},[90,195,196],{},"Remove"," a member from the org. Their time entries stay — removal drops the membership, not the history.",[199,200,202],"h3",{"id":201},"rates-per-member","Rates per member",[86,204,205,206,211],{},"Each membership can carry its own $\u002Fh rate. It slots into the ",[207,208,210],"a",{"href":209},"\u002Fguide\u002Fprojects-clients-tasks#rule-2-rate-inheritance","Rule 2 inheritance chain"," between client rate and the user's personal default:",[213,214,219],"pre",{"className":215,"code":217,"language":218},[216],"language-text","entry override → project → client → org member → user default\n","text",[128,220,217],{"__ignoreMap":221},"",[86,223,224,225,228],{},"So a team can price one person differently across the whole org without touching any project, and each user still has a personal default (",[90,226,227],{},"Settings → Profile",") as the final fallback.",[99,230,232],{"id":231},"invites","Invites",[86,234,235,238,239,242,243,246],{},[90,236,237],{},"Invite member"," takes an email and a role and creates an invite that is valid for ",[90,240,241],{},"7 days"," and works ",[90,244,245],{},"once",".",[248,249,250,256,272],"ol",{},[178,251,252,253,255],{},"An owner or admin creates the invite. Only owners may pick the ",[128,254,96],{}," role; inviting an address that is already a member is refused with a 409.",[178,257,258,259,263,264,267,268,271],{},"If ",[207,260,262],{"href":261},"\u002Finstallation#email-smtp","SMTP is configured",", the invitee gets an email with the join link and the dialog says so. If not, the dialog shows the ",[128,265,266],{},"…\u002Fregister?invite=TOKEN"," link with a ",[90,269,270],{},"copy"," button — send it however you like.",[178,273,274],{},"The register page looks the token up, prefills the email, and shows which org and role the invite is for. Registering with the token joins the existing org with the invite's role instead of creating a personal one.",[86,276,277,278,282,283,286],{},"Pending invites — unaccepted and unexpired — are listed with an \"expires in ",[279,280,281],"em",{},"n","d\" label, a copy-link action and ",[90,284,285],{},"Revoke",". Revoking asks for confirmation first, because it kills a live signup link; afterwards the link returns a clear \"expired or already used\" message. Used and expired invites drop off the list on their own.",[288,289,290],"note",{},[86,291,292,293,296,297,300,301,304,305,308,309,312,313,246],{},"Who can sign up ",[279,294,295],{},"without"," an invite is an operator setting: ",[128,298,299],{},"NUXT_PUBLIC_REGISTRATION"," is ",[128,302,303],{},"open"," by default, and should be ",[128,306,307],{},"invite"," or ",[128,310,311],{},"closed"," on anything exposed to the internet. See ",[207,314,316],{"href":315},"\u002Finstallation#registration-modes","registration modes",[99,318,320],{"id":319},"passwords","Passwords",[199,322,324],{"id":323},"changing-your-own","Changing your own",[86,326,327,329],{},[90,328,227],{}," has the password form: current password, then the new one (8 characters minimum). A wrong current password gets a deliberately vague 403.",[86,331,332,333,336],{},"A successful change ",[90,334,335],{},"logs out your other sessions"," and keeps the one you are using. That is the intended way to kick a stolen or forgotten device out of a workspace.",[199,338,340],{"id":339},"forgotten-passwords","Forgotten passwords",[86,342,343,344,347],{},"The login page links to ",[90,345,346],{},"Forgot password",", which is a three-step flow:",[248,349,350,357,372],{},[178,351,352,353,356],{},"You submit an email address. The reply is always the same ",[279,354,355],{},"\"Check your email — if an account exists for that address, a reset link is on its way\""," — Tick will not tell a stranger whether an account exists.",[178,358,359,360,363,364,367,368,371],{},"If the address does match a user, a single-use token valid for ",[90,361,362],{},"one hour"," is created and a reset link is emailed. With no SMTP configured, the link is written to the ",[90,365,366],{},"server console"," instead (",[128,369,370],{},"docker compose logs app",") so a self-hoster can still recover an account.",[178,373,374,375,378],{},"The link opens ",[128,376,377],{},"\u002Freset-password?token=…",", where you set a new password. Used, expired and unknown tokens all get the same \"invalid or expired — request a new one\" page.",[86,380,381,382,385],{},"Finishing a reset invalidates ",[90,383,384],{},"every"," session for that user, and voids any other reset links they had outstanding.",[387,388,389],"warning",{},[86,390,391,392,395],{},"With no SMTP set up, reset links appear in your server logs — so log access is effectively account access. Configure ",[207,393,394],{"href":261},"SMTP"," on any instance with more than one user.",[288,397,398],{},[86,399,400,401,403],{},"Tick has no email verification: an address is whatever the user typed, confirmed only by the fact that an invite or reset link reached it. The full inventory of what the app does and does not protect is on the ",[207,402,71],{"href":72}," page.",{"title":221,"searchDepth":405,"depth":405,"links":406},2,[407,408,412,413],{"id":101,"depth":405,"text":102},{"id":166,"depth":405,"text":167,"children":409},[410],{"id":201,"depth":411,"text":202},3,{"id":231,"depth":405,"text":232},{"id":319,"depth":405,"text":320,"children":414},[415,416],{"id":323,"depth":411,"text":324},{"id":339,"depth":411,"text":340},"Orgs, member roles, per-member rates, invites, and the password-reset flow.","md",{},{"icon":48},{"title":45,"description":417},"Zsg6TLE_k1ViY00g4o1uAdAY5JnwtReJ6_r04ywunEc",[424,426],{"title":40,"path":41,"stem":42,"description":425,"icon":43,"children":-1},"Bring entries in from Toggl Track, Clockify, or any CSV — with a dry-run preview before anything is written.",{"title":56,"path":57,"stem":58,"description":427,"icon":59,"children":-1},"The PostgreSQL entities and the four rules that govern references, rates and deletion.",1790777312389]