[{"data":1,"prerenderedAt":864},["ShallowReactive",2],{"doc:\u002Fv\u002F2026.3\u002Fcore-workflows\u002Fclient-portal":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"section":10,"version":11,"lastUpdated":12,"body":13,"_type":858,"_id":859,"_source":860,"_file":861,"_stem":862,"_extension":863},"\u002Fv\u002F2026.3\u002Fcore-workflows\u002Fclient-portal","core-workflows",false,"","Client portal","Give each client a private, branded portal on 369.dev where they sign in with an email code to see their projects, boards, invoices, proposals, and contracts.","Client work","2026.3","2026-10-23",{"type":14,"children":15,"toc":848},"root",[16,24,29,36,64,70,191,196,202,207,319,331,337,400,405,559,564,570,604,657,663,674,742,748],{"type":17,"tag":18,"props":19,"children":20},"element","p",{},[21],{"type":22,"value":23},"text","The client portal is one private page per client, on 369.dev, that shows what you choose to share: projects, task boards, invoices, proposals, change orders, and contracts. A client gets in with the link you send them and a 6-digit code emailed to them. They do not need a Workspace369 account.",{"type":17,"tag":18,"props":25,"children":26},{},[27],{"type":22,"value":28},"The portal is included on every plan, starting with Cadet. Change orders start on the Specialist plan.",{"type":17,"tag":30,"props":31,"children":33},"h2",{"id":32},"who-can-turn-it-on",[34],{"type":22,"value":35},"Who can turn it on",{"type":17,"tag":18,"props":37,"children":38},{},[39,41,47,49,53,55,62],{"type":22,"value":40},"A member needs the ",{"type":17,"tag":42,"props":43,"children":44},"strong",{},[45],{"type":22,"value":46},"Share client portal",{"type":22,"value":48}," permission under Clients to see the ",{"type":17,"tag":42,"props":50,"children":51},{},[52],{"type":22,"value":8},{"type":22,"value":54}," button on a client. It is a separate switch from view and edit access, so you can let someone work on clients without letting them publish a portal. Projects and boards have their own sharing permissions. See ",{"type":17,"tag":56,"props":57,"children":59},"a",{"href":58},"\u002Fv\u002F2026.3\u002Fadmin\u002Fteam-access-and-permissions\u002F",[60],{"type":22,"value":61},"Team access and permissions",{"type":22,"value":63},".",{"type":17,"tag":30,"props":65,"children":67},{"id":66},"give-a-client-access",[68],{"type":22,"value":69},"Give a client access",{"type":17,"tag":71,"props":72,"children":73},"ol",{},[74,87,98,124,143,162,173],{"type":17,"tag":75,"props":76,"children":77},"li",{},[78,80,85],{"type":22,"value":79},"Open ",{"type":17,"tag":42,"props":81,"children":82},{},[83],{"type":22,"value":84},"Clients",{"type":22,"value":86}," and choose the client.",{"type":17,"tag":75,"props":88,"children":89},{},[90,92,96],{"type":22,"value":91},"Choose ",{"type":17,"tag":42,"props":93,"children":94},{},[95],{"type":22,"value":8},{"type":22,"value":97},". It is in the client's header and in its menu. The first time you open it, Workspace369 creates the portal and turns it on. The client's own email addresses can already sign in, and nobody else can until you add them.",{"type":17,"tag":75,"props":99,"children":100},{},[101,103,108,110,115,117,122],{"type":22,"value":102},"The ",{"type":17,"tag":42,"props":104,"children":105},{},[106],{"type":22,"value":107},"Share",{"type":22,"value":109}," sheet opens. Under ",{"type":17,"tag":42,"props":111,"children":112},{},[113],{"type":22,"value":114},"Link",{"type":22,"value":116},", the access is always ",{"type":17,"tag":42,"props":118,"children":119},{},[120],{"type":22,"value":121},"Private — email code required",{"type":22,"value":123},". A client portal cannot be made public.",{"type":17,"tag":75,"props":125,"children":126},{},[127,129,134,136,141],{"type":22,"value":128},"Under ",{"type":17,"tag":42,"props":130,"children":131},{},[132],{"type":22,"value":133},"People",{"type":22,"value":135},", check who is already covered. ",{"type":17,"tag":42,"props":137,"children":138},{},[139],{"type":22,"value":140},"Everyone at",{"type":22,"value":142}," the client covers every email address on the client record and every contact person's email. People you add to the client later get access too.",{"type":17,"tag":75,"props":144,"children":145},{},[146,148,153,155,160],{"type":22,"value":147},"To let in someone who is not on the client record, type their address in ",{"type":17,"tag":42,"props":149,"children":150},{},[151],{"type":22,"value":152},"Add people or type an email",{"type":22,"value":154}," and choose ",{"type":17,"tag":42,"props":156,"children":157},{},[158],{"type":22,"value":159},"Invite",{"type":22,"value":161}," followed by the address.",{"type":17,"tag":75,"props":163,"children":164},{},[165,166,171],{"type":22,"value":91},{"type":17,"tag":42,"props":167,"children":168},{},[169],{"type":22,"value":170},"Copy link",{"type":22,"value":172}," and send it to the client yourself. The sheet does not email or text the link.",{"type":17,"tag":75,"props":174,"children":175},{},[176,178,182,184,189],{"type":22,"value":177},"Optional: open the menu on the ",{"type":17,"tag":42,"props":179,"children":180},{},[181],{"type":22,"value":114},{"type":22,"value":183}," card and choose ",{"type":17,"tag":42,"props":185,"children":186},{},[187],{"type":22,"value":188},"Set expiry date",{"type":22,"value":190},". After that date the link stops working.",{"type":17,"tag":18,"props":192,"children":193},{},[194],{"type":22,"value":195},"Only addresses that are allowed get a code. A client portal has no per-person roles. Everyone allowed sees the same portal.",{"type":17,"tag":30,"props":197,"children":199},{"id":198},"what-you-choose-to-share",[200],{"type":22,"value":201},"What you choose to share",{"type":17,"tag":18,"props":203,"children":204},{},[205],{"type":22,"value":206},"The portal shows modules. Hide a module and its data is never sent to the client, not just hidden on screen.",{"type":17,"tag":208,"props":209,"children":210},"ul",{},[211,240,307],{"type":17,"tag":75,"props":212,"children":213},{},[214,215,220,222,227,228,232,234,238],{"type":22,"value":79},{"type":17,"tag":42,"props":216,"children":217},{},[218],{"type":22,"value":219},"Settings",{"type":22,"value":221}," → ",{"type":17,"tag":42,"props":223,"children":224},{},[225],{"type":22,"value":226},"Channels",{"type":22,"value":221},{"type":17,"tag":42,"props":229,"children":230},{},[231],{"type":22,"value":8},{"type":22,"value":233},", and choose the ",{"type":17,"tag":42,"props":235,"children":236},{},[237],{"type":22,"value":84},{"type":22,"value":239}," tab.",{"type":17,"tag":75,"props":241,"children":242},{},[243,244,249,251,256,258,263,264,269,270,275,276,281,282,287,288,293,294,299,301,306],{"type":22,"value":128},{"type":17,"tag":42,"props":245,"children":246},{},[247],{"type":22,"value":248},"Modules",{"type":22,"value":250},", switch each section on or off and drag to reorder: ",{"type":17,"tag":42,"props":252,"children":253},{},[254],{"type":22,"value":255},"Action items",{"type":22,"value":257},", ",{"type":17,"tag":42,"props":259,"children":260},{},[261],{"type":22,"value":262},"Projects",{"type":22,"value":257},{"type":17,"tag":42,"props":265,"children":266},{},[267],{"type":22,"value":268},"Boards",{"type":22,"value":257},{"type":17,"tag":42,"props":271,"children":272},{},[273],{"type":22,"value":274},"Events",{"type":22,"value":257},{"type":17,"tag":42,"props":277,"children":278},{},[279],{"type":22,"value":280},"Invoices",{"type":22,"value":257},{"type":17,"tag":42,"props":283,"children":284},{},[285],{"type":22,"value":286},"Retainer",{"type":22,"value":257},{"type":17,"tag":42,"props":289,"children":290},{},[291],{"type":22,"value":292},"Proposals",{"type":22,"value":257},{"type":17,"tag":42,"props":295,"children":296},{},[297],{"type":22,"value":298},"Change orders",{"type":22,"value":300},", and ",{"type":17,"tag":42,"props":302,"children":303},{},[304],{"type":22,"value":305},"Contracts",{"type":22,"value":63},{"type":17,"tag":75,"props":308,"children":309},{},[310,312,317],{"type":22,"value":311},"Use ",{"type":17,"tag":42,"props":313,"children":314},{},[315],{"type":22,"value":316},"Preview client page",{"type":22,"value":318}," to see sample data with your unsaved changes. Nothing is sent to a client.",{"type":17,"tag":18,"props":320,"children":321},{},[322,324,329],{"type":22,"value":323},"A project or board appears in the portal only when it belongs to that client and has been shared itself. Open its own sharing sheet and make sure the client's address is allowed there, and that the link is on and not expired. Invoices and proposals that are still drafts are not shown. To mark an event as visible, use ",{"type":17,"tag":42,"props":325,"children":326},{},[327],{"type":22,"value":328},"Show in client portals",{"type":22,"value":330}," on the event.",{"type":17,"tag":30,"props":332,"children":334},{"id":333},"what-the-client-sees-and-can-do",[335],{"type":22,"value":336},"What the client sees and can do",{"type":17,"tag":71,"props":338,"children":339},{},[340,358,369,395],{"type":17,"tag":75,"props":341,"children":342},{},[343,345,350,352,357],{"type":22,"value":344},"The client opens the link. The page says ",{"type":17,"tag":42,"props":346,"children":347},{},[348],{"type":22,"value":349},"Verification required",{"type":22,"value":351}," and shows ",{"type":17,"tag":42,"props":353,"children":354},{},[355],{"type":22,"value":356},"Verify email",{"type":22,"value":63},{"type":17,"tag":75,"props":359,"children":360},{},[361,363,368],{"type":22,"value":362},"They enter their email and choose ",{"type":17,"tag":42,"props":364,"children":365},{},[366],{"type":22,"value":367},"Send verification code",{"type":22,"value":63},{"type":17,"tag":75,"props":370,"children":371},{},[372,374,379,381,386,388,393],{"type":22,"value":373},"They type the 6-digit code and choose ",{"type":17,"tag":42,"props":375,"children":376},{},[377],{"type":22,"value":378},"Verify",{"type":22,"value":380},". The code works for 10 minutes. After 5 wrong tries they need a new one. ",{"type":17,"tag":42,"props":382,"children":383},{},[384],{"type":22,"value":385},"Use a different email",{"type":22,"value":387}," goes back a step, and ",{"type":17,"tag":42,"props":389,"children":390},{},[391],{"type":22,"value":392},"Resend code",{"type":22,"value":394}," appears after a short countdown. Each address can ask for up to 5 codes in 10 minutes.",{"type":17,"tag":75,"props":396,"children":397},{},[398],{"type":22,"value":399},"The portal opens with your logo and the client's name. It reads \"Shared by\" your workspace and \"Signed in as\" their address. The browser stays signed in for about a day.",{"type":17,"tag":18,"props":401,"children":402},{},[403],{"type":22,"value":404},"Then the client can:",{"type":17,"tag":208,"props":406,"children":407},{},[408,431,460,503,529],{"type":17,"tag":75,"props":409,"children":410},{},[411,415,417,422,424,429],{"type":17,"tag":42,"props":412,"children":413},{},[414],{"type":22,"value":255},{"type":22,"value":416},": see what needs them, such as an unpaid invoice with ",{"type":17,"tag":42,"props":418,"children":419},{},[420],{"type":22,"value":421},"Pay",{"type":22,"value":423},", a proposal or change order to ",{"type":17,"tag":42,"props":425,"children":426},{},[427],{"type":22,"value":428},"Review",{"type":22,"value":430},", or a contract they need to sign. When nothing is waiting it says \"You're all caught up.\"",{"type":17,"tag":75,"props":432,"children":433},{},[434,438,440,444,446,451,453,459],{"type":17,"tag":42,"props":435,"children":436},{},[437],{"type":22,"value":262},{"type":22,"value":439}," and ",{"type":17,"tag":42,"props":441,"children":442},{},[443],{"type":22,"value":268},{"type":22,"value":445},": choose ",{"type":17,"tag":42,"props":447,"children":448},{},[449],{"type":22,"value":450},"Open",{"type":22,"value":452}," to go into a shared project or board without a second code. What they can do there is set on that project or board: view, comment, upload files, view invoices, add tasks, or move tasks between statuses. See ",{"type":17,"tag":56,"props":454,"children":456},{"href":455},"\u002Fv\u002F2026.3\u002Fcore-workflows\u002Fprojects-tasks-scheduling\u002F",[457],{"type":22,"value":458},"Projects, tasks, and scheduling",{"type":22,"value":63},{"type":17,"tag":75,"props":461,"children":462},{},[463,467,469,473,475,480,482,487,489,494,496,502],{"type":17,"tag":42,"props":464,"children":465},{},[466],{"type":22,"value":280},{"type":22,"value":468},": see what is outstanding and how many are overdue, with a status on each. ",{"type":17,"tag":42,"props":470,"children":471},{},[472],{"type":22,"value":421},{"type":22,"value":474}," opens the invoice page when your workspace takes online payments and a balance is owed. Otherwise the button says ",{"type":17,"tag":42,"props":476,"children":477},{},[478],{"type":22,"value":479},"View",{"type":22,"value":481},". Past payments are under ",{"type":17,"tag":42,"props":483,"children":484},{},[485],{"type":22,"value":486},"Payment history",{"type":22,"value":488},", each with a ",{"type":17,"tag":42,"props":490,"children":491},{},[492],{"type":22,"value":493},"Receipt",{"type":22,"value":495},". See ",{"type":17,"tag":56,"props":497,"children":499},{"href":498},"\u002Fv\u002F2026.3\u002Ffinance\u002Finvoices-and-payments\u002F",[500],{"type":22,"value":501},"Invoices and payments",{"type":22,"value":63},{"type":17,"tag":75,"props":504,"children":505},{},[506,510,511,515,517,521,523,527],{"type":17,"tag":42,"props":507,"children":508},{},[509],{"type":22,"value":292},{"type":22,"value":439},{"type":17,"tag":42,"props":512,"children":513},{},[514],{"type":22,"value":298},{"type":22,"value":516},": ",{"type":17,"tag":42,"props":518,"children":519},{},[520],{"type":22,"value":479},{"type":22,"value":522}," a proposal, or ",{"type":17,"tag":42,"props":524,"children":525},{},[526],{"type":22,"value":428},{"type":22,"value":528}," a change order waiting on them.",{"type":17,"tag":75,"props":530,"children":531},{},[532,536,538,543,545,550,552,558],{"type":17,"tag":42,"props":533,"children":534},{},[535],{"type":22,"value":305},{"type":22,"value":537},": the person who has to sign sees ",{"type":17,"tag":42,"props":539,"children":540},{},[541],{"type":22,"value":542},"Review & sign",{"type":22,"value":544}," and can ",{"type":17,"tag":42,"props":546,"children":547},{},[548],{"type":22,"value":549},"Download",{"type":22,"value":551}," a copy. Others on the portal see only the contract's status. Signing happens on the signing page described in ",{"type":17,"tag":56,"props":553,"children":555},{"href":554},"\u002Fv\u002F2026.3\u002Fcontracts\u002Fwhat-recipients-see-when-they-sign\u002F",[556],{"type":22,"value":557},"What recipients see when they sign",{"type":22,"value":63},{"type":17,"tag":18,"props":560,"children":561},{},[562],{"type":22,"value":563},"If you have shared nothing, the page says your workspace \"hasn't shared anything here yet.\"",{"type":17,"tag":30,"props":565,"children":567},{"id":566},"how-branding-applies",[568],{"type":22,"value":569},"How branding applies",{"type":17,"tag":18,"props":571,"children":572},{},[573,574,578,579,583,584,588,590,595,597,602],{"type":22,"value":79},{"type":17,"tag":42,"props":575,"children":576},{},[577],{"type":22,"value":219},{"type":22,"value":221},{"type":17,"tag":42,"props":580,"children":581},{},[582],{"type":22,"value":226},{"type":22,"value":221},{"type":17,"tag":42,"props":585,"children":586},{},[587],{"type":22,"value":8},{"type":22,"value":589},". The ",{"type":17,"tag":42,"props":591,"children":592},{},[593],{"type":22,"value":594},"Brand",{"type":22,"value":596}," tab sets the ",{"type":17,"tag":42,"props":598,"children":599},{},[600],{"type":22,"value":601},"Look",{"type":22,"value":603},", accent color, and logo. They apply to every portal page, the sign-in screen, the code email, and your booking page. The logo comes from your workspace details.",{"type":17,"tag":18,"props":605,"children":606},{},[607,608,612,613,617,618,622,624,629,630,635,637,642,644,648,650,655],{"type":22,"value":102},{"type":17,"tag":42,"props":609,"children":610},{},[611],{"type":22,"value":262},{"type":22,"value":257},{"type":17,"tag":42,"props":614,"children":615},{},[616],{"type":22,"value":268},{"type":22,"value":300},{"type":17,"tag":42,"props":619,"children":620},{},[621],{"type":22,"value":84},{"type":22,"value":623}," tabs set the layout (",{"type":17,"tag":42,"props":625,"children":626},{},[627],{"type":22,"value":628},"Single column",{"type":22,"value":257},{"type":17,"tag":42,"props":631,"children":632},{},[633],{"type":22,"value":634},"Two columns",{"type":22,"value":636},", or ",{"type":17,"tag":42,"props":638,"children":639},{},[640],{"type":22,"value":641},"Tabs",{"type":22,"value":643},"), style, and density for each portal type. To style one client differently, open that client's ",{"type":17,"tag":42,"props":645,"children":646},{},[647],{"type":22,"value":107},{"type":22,"value":649}," sheet and choose ",{"type":17,"tag":42,"props":651,"children":652},{},[653],{"type":22,"value":654},"Appearance",{"type":22,"value":656},". Changes save as you make them, and clients see them on their next visit.",{"type":17,"tag":30,"props":658,"children":660},{"id":659},"remove-or-pause-access",[661],{"type":22,"value":662},"Remove or pause access",{"type":17,"tag":18,"props":664,"children":665},{},[666,668,672],{"type":22,"value":667},"In the ",{"type":17,"tag":42,"props":669,"children":670},{},[671],{"type":22,"value":107},{"type":22,"value":673}," sheet:",{"type":17,"tag":208,"props":675,"children":676},{},[677,706,716,732],{"type":17,"tag":75,"props":678,"children":679},{},[680,685,687,692,694,699,701],{"type":17,"tag":42,"props":681,"children":682},{},[683],{"type":22,"value":684},"Suspend",{"type":22,"value":686}," a person to block them, and ",{"type":17,"tag":42,"props":688,"children":689},{},[690],{"type":22,"value":691},"Resume",{"type":22,"value":693}," to let them back in. ",{"type":17,"tag":42,"props":695,"children":696},{},[697],{"type":22,"value":698},"Remove",{"type":22,"value":700}," takes them off the list after you confirm ",{"type":17,"tag":42,"props":702,"children":703},{},[704],{"type":22,"value":705},"Remove access?",{"type":17,"tag":75,"props":707,"children":708},{},[709,714],{"type":17,"tag":42,"props":710,"children":711},{},[712],{"type":22,"value":713},"Regenerate link",{"type":22,"value":715}," makes a new link, and the old one stops working at once. People you allowed stay on the list, so send them the new link.",{"type":17,"tag":75,"props":717,"children":718},{},[719,724,726,731],{"type":17,"tag":42,"props":720,"children":721},{},[722],{"type":22,"value":723},"Deactivate",{"type":22,"value":725}," turns the portal off. The link shows a not-found page until you choose ",{"type":17,"tag":42,"props":727,"children":728},{},[729],{"type":22,"value":730},"Activate",{"type":22,"value":63},{"type":17,"tag":75,"props":733,"children":734},{},[735,740],{"type":17,"tag":42,"props":736,"children":737},{},[738],{"type":22,"value":739},"Remove expiry",{"type":22,"value":741}," clears an expiry date.",{"type":17,"tag":30,"props":743,"children":745},{"id":744},"check-the-result",[746],{"type":22,"value":747},"Check the result",{"type":17,"tag":208,"props":749,"children":750},{},[751,756,767,785,803,808,819],{"type":17,"tag":75,"props":752,"children":753},{},[754],{"type":22,"value":755},"Open the link in a private browser window, request a code with an address you allowed, and confirm the portal loads.",{"type":17,"tag":75,"props":757,"children":758},{},[759,761,765],{"type":22,"value":760},"A code never arrives: the address is probably not on the list. For safety the page gives the same answer for every address. Check ",{"type":17,"tag":42,"props":762,"children":763},{},[764],{"type":22,"value":133},{"type":22,"value":766},", or add the address.",{"type":17,"tag":75,"props":768,"children":769},{},[770,772,777,779,783],{"type":22,"value":771},"The client sees ",{"type":17,"tag":42,"props":773,"children":774},{},[775],{"type":22,"value":776},"You don't have access",{"type":22,"value":778}," on the portal page: their address is not allowed. Add it and ask them to try again. If it appears after they choose ",{"type":17,"tag":42,"props":780,"children":781},{},[782],{"type":22,"value":450},{"type":22,"value":784}," on a project or board, share that project or board with their address.",{"type":17,"tag":75,"props":786,"children":787},{},[788,789,794,796,801],{"type":22,"value":771},{"type":17,"tag":42,"props":790,"children":791},{},[792],{"type":22,"value":793},"This link has expired",{"type":22,"value":795}," or ",{"type":17,"tag":42,"props":797,"children":798},{},[799],{"type":22,"value":800},"Invalid or Expired Link",{"type":22,"value":802},": check the expiry date, whether the portal is deactivated, and whether you regenerated the link.",{"type":17,"tag":75,"props":804,"children":805},{},[806],{"type":22,"value":807},"A project is missing from the portal: share that project and allow the client's address on it.",{"type":17,"tag":75,"props":809,"children":810},{},[811,813,817],{"type":22,"value":812},"Pay shows as ",{"type":17,"tag":42,"props":814,"children":815},{},[816],{"type":22,"value":479},{"type":22,"value":818},": the invoice has no balance, or your workspace is not set up for online payments.",{"type":17,"tag":75,"props":820,"children":821},{},[822,824,828,830,835,836,841,842,847],{"type":22,"value":823},"To hear when clients act, open notification preferences and look at the ",{"type":17,"tag":42,"props":825,"children":826},{},[827],{"type":22,"value":8},{"type":22,"value":829}," category, with ",{"type":17,"tag":42,"props":831,"children":832},{},[833],{"type":22,"value":834},"Client signed in",{"type":22,"value":257},{"type":17,"tag":42,"props":837,"children":838},{},[839],{"type":22,"value":840},"Payment made",{"type":22,"value":300},{"type":17,"tag":42,"props":843,"children":844},{},[845],{"type":22,"value":846},"Invoice viewed in the portal",{"type":22,"value":63},{"title":7,"searchDepth":849,"depth":849,"links":850},2,[851,852,853,854,855,856,857],{"id":32,"depth":849,"text":35},{"id":66,"depth":849,"text":69},{"id":198,"depth":849,"text":201},{"id":333,"depth":849,"text":336},{"id":566,"depth":849,"text":569},{"id":659,"depth":849,"text":662},{"id":744,"depth":849,"text":747},"markdown","content:v:2026.3:core-workflows:client-portal.md","content","v\u002F2026.3\u002Fcore-workflows\u002Fclient-portal.md","v\u002F2026.3\u002Fcore-workflows\u002Fclient-portal","md",1792811268444]