N

Ndizi Project Management

3.5/5 (4 ratings) 10 active installs Updated Jun 18, 2026
<strong>Reports Dashboard</strong>: Interactive, responsive summaries of billable time allocations and user productivity, with date-range and project/user filters.

<strong>Reports Dashboard</strong>: Interactive, responsive summaries of billable time allocations and user productivity, with date-range and project/user filters.

Ndizi Project Management is a professional, native WordPress system built for freelancers, designers, and small agencies to coordinate client work, manage tasks, record project hours, and generate invoices—all inside a single WordPress environment.

Source & development: The full, human-readable source (including the uncompressed src/ for every compiled asset) lives on GitHub at github.com/georgestephanis/plugins.

Decoupling high-frequency data from standard WordPress posts storage, Ndizi records all time logs in a dedicated custom SQL table (wp_ndizi_time_entries). This architectural choice keeps your database queries fast and completely avoids wp_posts and wp_postmeta database inflation.

Key Features

  • Premium Dashboards: Interactive, responsive HTML/CSS dashboards for managers to analyze team time allocations, billable totals, and project status.
  • Gantt Timelines: Custom CSS Grid and SVG-based Gantt charts directly in your admin dashboard to visualize project schedules — no third-party chart library required.
  • Decoupled Time Tracker: Start, stop, and log timesheets directly in the admin bar, meta boxes, or standalone pages. Projects are neatly grouped by client, and input modes are gated (either/or) to prevent conflicts.
  • Standalone PWA Companion App: A distraction-free companion tracking page stripped of WordPress admin menus/bars. Chrome-installable as a borderless desktop application featuring a dark glassmorphic interface, a ticking digital clock, and today’s logged entry feed. Fully responsive at small-screen widths. Supports a ?desc= URL parameter to pre-fill the description input (used by the Chrome extension). Requests browser notification permission and fires a push notification when the active timer exceeds 8 hours.
  • Idle Warning Banner: When an active timer has been running for more than 8 hours, a warning banner appears in the admin bar panel and on the standalone tracker page prompting the user to verify their logged time.
  • Lock Date / Time Entry Locking: Configure a lock date on the Settings page to prevent creating, editing, or deleting any time entry dated on or before that date. Protects closed billing periods from accidental modification — enforced across the REST API, the DB layer, and the admin UI.
  • Customizable Tracker Icons: A settings dashboard allowing users to select and dynamically render their preferred tracker icon (Banana, Clock, Punch Clock, Hourglass).
  • Hierarchical Billing Rates: Billing rates are resolved in priority order — task override then user default then project default — at invoice and report generation time. An explicit rate of 0.00 at any level is honored for pro-bono entries.
  • Date-Range Filtered Reports: The Reports dashboard supports start date / end date, project, and team member filters with bookmarkable URLs. KPI cards surface total hours, billable hours, revenue, estimated salary cost, and profit margin.
  • Invoice Generation & Exports: Automatically aggregate un-invoiced billable hours into detailed project invoices. Export invoice line items to CSV or JSON formats, or print/save them using a clean, professional print stylesheet.
  • QuickBooks CSV Export: Export filtered time report data as a QuickBooks-compatible CSV file (Customer, Item, Date, Hours, Rate, Description) for direct import into accounting software.
  • Glassmorphic Client Portal: A premium front-end experience available as the [ndizi_client_portal] shortcode or the Ndizi Client Portal block in the block editor. Clients can review projects, verify tasks, download invoices, and submit new requests.
  • Secure Passwordless Portal Auth: Authorize client portal sessions using unique, secure client authentication keys, avoiding the need for clients to create standard WordPress user accounts.
  • Collaborative Discussions: Task and project comment boxes are filtered and embedded into the Client Portal, allowing team members and clients to exchange feedback and upload file attachments.
  • Email Notifications: Sends emails when a task is assigned or reassigned to a team member, and when a task’s status changes.
  • Outbound Webhooks & Slack: Dispatches JSON event payloads to a configurable webhook endpoint and formatted messages to a Slack incoming webhook on timer events, time entry CRUD, CPT status transitions, and task/invoice metadata changes.
  • Time Entry Approval Workflow: Time entries carry approved and approved_by fields. Once approved, entries cannot be edited or deleted through normal write paths — only the approval status itself can be updated. Approval-only updates bypass lock-date enforcement.
  • Google Calendar Sync: When Google OAuth2 credentials are configured in Settings, tasks with due dates are synced to Google Calendar and time entries are pushed after each stop or manual log. An iCal subscription feed is available at /wp-json/ndizi/v1/calendar/ical.
  • Stripe Online Payments: Configure Stripe API keys in Settings to add a “Pay Online” button to unpaid invoices in the client portal. The plugin creates a Stripe Checkout session via the REST API and auto-marks invoices paid via the Stripe webhook endpoint.
  • Client Portal Time-Off Requests: Clients and team members can submit time-off and absence requests directly from the portal sidebar. Requests are stored as ndizi_time_off posts with start/end dates, type, and approval status.
  • Browser Extension: A companion Chrome extension (chrome-extension/) connects to the site’s REST API to start/stop timers, browse projects and tasks, and open the standalone tracker — from any browser tab.
  • REST API Integration: Custom API routes under /wp-json/ndizi/v1 let desktop widgets or mobile timekeepers start, stop, log, list, edit, and delete timer entries remotely.
  • WP-CLI Commands: Manage timers from the terminal with wp ndizi time start, wp ndizi time stop, and wp ndizi time status. Accepts project/task names or IDs, user login or ID, description, and billable flag.
  • Modular Architecture: Each major feature group (Invoicing, Client Portal, Admin Bar Tracker, Email Notifications, Gantt Charts, Webhooks) can be individually toggled on or off from the Settings page. Inactive modules are not loaded, reducing overhead on sites that don’t need every feature.

External services

This plugin can connect to third-party services, but only after a site administrator explicitly configures and enables the relevant integration. Out of the box, with no credentials entered and the optional features left at their defaults, the plugin makes no requests to any external service. Each integration below is opt-in: it stays dormant until you supply its API keys / credentials (or, for Google Fonts, tick its checkbox) on the Ndizi PM Settings screen.

Google Calendar API

Used by the optional “Google Calendar Sync” module to mirror task due dates and project milestones to your Google Calendar. It is only active after an administrator enters Google OAuth credentials and connects an account on the Settings screen.

When a task with a due date is created, updated, or deleted, the plugin sends that task’s title, description, and start/end date-times to the Google Calendar API (https://www.googleapis.com/calendar/v3/...) authenticated with the connected account’s access token. No data is sent until an account is connected, and nothing is sent for sites that never enable the integration.

Google’s terms and privacy policy: https://policies.google.com/terms and https://policies.google.com/privacy

Google OAuth 2.0

Used to authenticate the Google Calendar integration above. When an administrator clicks “Connect to Google Calendar,” the plugin exchanges the authorization code, and later refreshes the access token, against Google’s OAuth token endpoint (https://oauth2.googleapis.com/token). The data sent is the OAuth client ID, client secret, and authorization/refresh token that the administrator configured. This only happens during the connect flow and subsequent token refreshes for a connected account.

Google’s terms and privacy policy: https://policies.google.com/terms and https://policies.google.com/privacy

Stripe API

Used by the optional “Invoicing & Billing” module to let clients pay invoices online. It is only active after an administrator enters Stripe API keys on the Settings screen.

When a client chooses to pay an invoice, the plugin creates a Stripe Checkout session by sending the invoice amount, currency, description, invoice ID, and success/cancel URLs to the Stripe API (https://api.stripe.com/v1/checkout/sessions), authenticated with the configured Stripe secret key. The plugin also receives Stripe webhook callbacks to mark invoices paid. No data is sent until Stripe keys are configured and a client initiates a payment.

Stripe’s terms and privacy policy: https://stripe.com/legal/ssa and https://stripe.com/privacy

Google Fonts

The client portal, the standalone time tracker, and printable invoices can use the Inter and Outfit webfonts served by Google Fonts. This is off by default. When an administrator enables “Load Google Fonts” under Ndizi PM Settings Typography, the affected pages request stylesheets and font files from Google’s servers (https://fonts.googleapis.com and https://fonts.gstatic.com); as with any web request, this exposes the visitor’s IP address and user agent to Google. When the setting is disabled (the default), the plugin uses a web-safe system font stack and makes no requests to Google.

Google’s terms and privacy policy: https://policies.google.com/terms and https://policies.google.com/privacy