{"id":378024,"date":"2026-10-06T04:04:19","date_gmt":"2026-10-06T04:04:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/egydevinfo-client-progress-portal\/"},"modified":"2026-10-06T04:03:47","modified_gmt":"2026-10-06T04:03:47","slug":"egydevinfo-client-progress-portal","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/egydevinfo-client-progress-portal\/","author":23319591,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.1","stable_tag":"1.1.1","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"EgyDevInfo Client Progress Portal","header_author":"EgyDevInfo.com - Egypt Web Developers","header_description":"Password-protected progress pages for your clients at \/project\/clientsite.com \u2014 phases, tasks, a live progress bar, and JSON\/CSV import & export with reusable project templates.","assets_banners_color":"345b4e","last_updated":"2026-10-06 04:03:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.egydevinfo.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":233,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.1":{"tag":"1.1.1","author":"egydevinfo","date":"2026-10-06 04:03:47","revision":3729971}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3729970,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3729970,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3729970,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3729970,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3729970,"resolution":"1","location":"assets","locale":"","width":1920,"height":945},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3729970,"resolution":"2","location":"assets","locale":"","width":1920,"height":943},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3729970,"resolution":"3","location":"assets","locale":"","width":1920,"height":2873},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3729970,"resolution":"4","location":"assets","locale":"","width":1920,"height":977}},"screenshots":[]},"plugin_section":[],"plugin_tags":[5590,17989,9351,7135,284620],"plugin_category":[],"plugin_contributors":[280526],"plugin_business_model":[],"class_list":["post-378024","plugin","type-plugin","status-publish","hentry","plugin_tags-agency","plugin_tags-client-portal","plugin_tags-progress-bar","plugin_tags-project-management","plugin_tags-project-progress","plugin_contributors-egydevinfo","plugin_committers-egydevinfo"],"banners":{"banner":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/banner-772x250.png?rev=3729970","banner_2x":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/banner-1544x500.png?rev=3729970","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/icon-128x128.png?rev=3729970","icon_2x":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/icon-256x256.png?rev=3729970","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/screenshot-1.png?rev=3729970","caption":""},{"src":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/screenshot-2.png?rev=3729970","caption":""},{"src":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/screenshot-3.png?rev=3729970","caption":""},{"src":"https:\/\/ps.w.org\/egydevinfo-client-progress-portal\/assets\/screenshot-4.png?rev=3729970","caption":""}],"raw_content":"<!--section=description-->\n<p>EgyDevInfo Client Progress Portal is for freelancers and small agencies who build websites for clients and are tired of answering \"how far along are we?\" by email or WhatsApp.<\/p>\n\n<p>Each project gets its own private page at <code>yoursite.com\/project\/clientsite.com<\/code>. The client unlocks it with a password and sees:<\/p>\n\n<ul>\n<li>A progress bar that updates as you mark tasks finished<\/li>\n<li>Every phase (Discovery, Design, Development, Launch\u2026) with its tasks and their status<\/li>\n<li>Optional day counters per phase (\"6 \/ 10 days\")<\/li>\n<li>A \"Visit staging site\" button<\/li>\n<li>Your brand color: pick one color (or a preset) and the whole portal is re-shaded from it<\/li>\n<\/ul>\n\n<p>The client needs no WordPress account, and you don't install a full client-management system.<\/p>\n\n<h4>Start new projects in seconds<\/h4>\n\n<ul>\n<li><strong>Starter templates<\/strong>: Business website, Online store and Website redesign<\/li>\n<li><strong>Your own templates<\/strong>: save any project's phases and tasks as a template and reuse it<\/li>\n<li><strong>Import JSON or CSV<\/strong> straight into the project editor. Plan in Excel or Google Sheets, then import (columns: <code>phase, days, task, status<\/code>)<\/li>\n<li><strong>Export JSON or CSV<\/strong> from the editor at any time<\/li>\n<li><strong>Replace or add<\/strong>: imported phases can replace the current ones or be added after them, with an option to reset every task to \"Not started\"<\/li>\n<li><strong>Duplicate as new<\/strong>: copy an existing project with all tasks reset<\/li>\n<\/ul>\n\n<h4>Move projects between sites<\/h4>\n\n<ul>\n<li>Export one project (row action), several (bulk action) or all of them (Client Projects \u2192 Import \/ Export)<\/li>\n<li>Import the file on another site. Projects are created as drafts, and client passwords are never exported<\/li>\n<\/ul>\n\n<h4>Security and privacy<\/h4>\n\n<ul>\n<li>Passwords are hashed with WordPress's own password hashing<\/li>\n<li>Access is kept in a signed, HTTP-only cookie that stops working as soon as you change the password<\/li>\n<li>Failed logins are rate-limited per project and visitor<\/li>\n<li>Portal pages are marked noindex and excluded from page caching<\/li>\n<li>The plugin makes no external requests and loads no third-party assets<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin does not send data to any external service. When a client unlocks a portal, a functional cookie is stored in their browser for 7 days. Failed password attempts are counted for 10 minutes using a hash of the visitor's IP address, then discarded automatically.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <strong>Client Projects \u2192 Add New Project<\/strong>.<\/li>\n<li>Enter the project title and the <strong>Client site<\/strong> (for example <code>clientsite.com<\/code>), set a <strong>Client password<\/strong>, and optionally a <strong>Staging URL<\/strong>.<\/li>\n<li>Under <strong>Phases &amp; tasks<\/strong>, apply a template, import a JSON\/CSV file, or add phases by hand.<\/li>\n<li>Publish, then click <strong>Open client portal<\/strong> in the Publish box and share the link and password with your client.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20does%20the%20client%20see%3F\"><h3>What does the client see?<\/h3><\/dt>\n<dd><p>A password screen, then a single page with the overall progress bar, every phase with its tasks and status, optional day counters, and the staging-site button. Nothing else from your site is shown.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20%2Fproject%2F%20part%20of%20the%20link%3F\"><h3>Can I change the \/project\/ part of the link?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>Client Projects \u2192 Settings \u2192 Portal URL base<\/strong>. Links you have already shared will stop working if you change it.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20portal%20colors%3F\"><h3>Can I change the portal colors?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>Client Projects \u2192 Settings \u2192 Portal color<\/strong> and pick any color or one of the presets (green, blue, teal, purple, pink, red, orange, gold, slate). The whole portal is built from that one color: dark shades for the background and cards, light shades for text, and the color itself for buttons and the progress bar. Colors that would make button text hard to read are lightened automatically.<\/p><\/dd>\n<dt id=\"what%20csv%20format%20does%20the%20import%20use%3F\"><h3>What CSV format does the import use?<\/h3><\/dt>\n<dd><p>One row per task with the columns <code>phase, days, task, status<\/code>. Rows with the same phase name are grouped into one phase. Status can be <code>not_started<\/code>, <code>in_progress<\/code> or <code>finished<\/code> (common spellings such as \"done\" or \"in progress\" also work). A blank status means not started. Use <strong>Export CSV<\/strong> on any project to get a ready-made example.<\/p><\/dd>\n<dt id=\"are%20client%20passwords%20included%20in%20exports%3F\"><h3>Are client passwords included in exports?<\/h3><\/dt>\n<dd><p>No. Imported and duplicated projects never have a password, so you set a new one before publishing.<\/p><\/dd>\n<dt id=\"how%20do%20the%20day%20counters%20work%3F\"><h3>How do the day counters work?<\/h3><\/dt>\n<dd><p>A phase's counter starts when its first task leaves \"Not started\" and stops when all of its tasks are finished. Set the planned number of days for each phase to show \"elapsed \/ planned\".<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20caching%20plugins%3F\"><h3>Does it work with caching plugins?<\/h3><\/dt>\n<dd><p>Yes. Portal pages tell caching plugins not to cache them and send no-cache headers, so every client always sees their own current progress.<\/p><\/dd>\n<dt id=\"who%20can%20manage%20projects%3F\"><h3>Who can manage projects?<\/h3><\/dt>\n<dd><p>Editors and administrators, by default. Developers can change this with the <code>egydevinfo_cpp_capability<\/code> filter.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20store%20cookies%3F\"><h3>Does the plugin store cookies?<\/h3><\/dt>\n<dd><p>Only after a client enters the correct password. It sets one functional cookie (<code>egydevinfo_cpp_auth_{project ID}<\/code>) for 7 days so the client stays unlocked. It contains no personal data. The plugin does not track visitors.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Removed all built-in quantity caps: unlimited saved templates, phases, tasks, planned days and projects per import\/export. File imports are only bounded by your server's own upload settings.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Portal color setting with presets. The full portal palette is generated from one color and kept readable (WCAG AA contrast for text and buttons).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First WordPress.org release (previously the private ClientFlow Tracker plugin).<\/li>\n<li>Password-protected client portals at \/project\/clientsite.com, with a configurable base.<\/li>\n<li>Phases and tasks with a progress bar, a project status badge and optional day counters.<\/li>\n<li>JSON and CSV import\/export in the project editor, with replace\/add and reset-status options.<\/li>\n<li>Starter templates and your own saved templates.<\/li>\n<li>Duplicate as new, single and bulk JSON export, and an Import \/ Export page for moving projects between sites.<\/li>\n<\/ul>","raw_excerpt":"Give each client a password-protected progress page at \/project\/clientsite.com, with phases, tasks and templates you can import from JSON or CSV.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/378024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=378024"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/egydevinfo"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=378024"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=378024"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=378024"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=378024"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=378024"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=378024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}