Keel - Client portal for modern agencies
The white-label client portal your agency actually runs on.
Projects, invoices, files, messaging, time tracking, e-sign — one branded Laravel app running on your own hosting. Your domain. Your brand. Your data. One-time price, lifetime license, unlimited clients.
Stop paying $400/month for five disconnected SaaS tools.
Keel bundles every workflow an agency actually needs into one self-hosted Laravel app. Pay once, own it forever, and stop explaining to clients why their data lives in four places.
One-time, not monthly
Your competitors pay $30-150/user/month to five vendors. You pay once for Keel, add all the users you want, and never see an invoice again.
White-label by default
Your logo, your domain, your colours, your emails, your favicon. Clients never see "Keel" — they see your agency. Rebrandable in five minutes from the Settings panel.
Your data, your server
Self-hosted means your database stays on your infrastructure. No vendor breach, no policy changes, no vendor shutting down. GDPR-friendly out of the box.
Everything your agency runs on — in one app.
Thirteen modules. One codebase. One login. One branded experience.
Clients & CRM
Rich client profiles, multiple contacts per client, custom fields, tags, notes, and a full activity feed. Each contact can be a portal user.
Projects & Milestones
Status workflow, milestones, budgets, team assignments, public shareable pages.
Tasks & Kanban
Kanban or list, checklists, mentions, attachments, recurring rules.
Time Tracking
Per-task timers, timesheets, billable toggle, convert hours to invoice, Monday digest email.
Invoicing & Retainers
Manual payment recording with a per-invoice Pay URL, recurring billing, retainer hour ceilings, PDF export, overdue reminders, multi-currency.
E-Sign Documents
Tokenized signing links, IP-stamped audit trail, reusable templates. No DocuSign subscription.
Onboarding Forms
Public intake forms with text / select / radio / checkbox / file fields; submissions auto-create a client + optional project.
AI Assistant
Toggleable, staff-only AI. Generates a status summary for any project and rewrites rough invoice line items into polished copy.
Every module built properly, not checkbox-deep.
Click through a few of Keel's modules. Each one is a full, cohesive feature — not a placeholder.
Projects & Tasks
Kanban boards, list views, and a cross-project "My tasks" queue. Everything your team needs to know what's next — without leaving the portal.
- Kanban and list views per project; drag-drop between statuses
- Milestones that group tasks and roll up project progress %
- Subtasks, comments with @mentions + in-app notifications, dependencies (blocked-by)
- Recurring task rules: flip any task into a daily / weekly / monthly template that auto-spawns the next occurrence
- Customisable workflow statuses per project — add columns like "Blocked" or "QA review" with their own colour; they appear on the kanban and the task status dropdown
- Public shareable project pages for stakeholders without logins
- Soft-delete + restore for archived tasks
Invoicing & Retainers
From draft to paid without leaving Keel. Manual payment recording with full audit, PDF export built in, retainer hour tracking, and automated overdue reminders — your cash flow on autopilot.
- Draft → Sent → Paid workflow with per-line taxes and discounts
- Recurring invoices at any interval (weekly, monthly, quarterly, annual)
- Retainers with monthly hour caps and 80%/100% alerts
- Per-invoice Pay URL field — drop a Stripe / PayPal / bank link here for clients to follow
- Milestone auto-invoicing — flip a switch on any milestone, set an amount, and Keel drafts the invoice the moment that milestone hits 100%
- PDF export via dompdf with your own header/footer and branding
- Convert unbilled time entries into invoice lines with two clicks
Time Tracking
One timer across every project, with billable/non-billable distinction and rate resolution that actually works the way agencies bill.
- Start/stop timer from any task, or log manually with start/end times
- Global running-timer indicator visible from any page
- Per-entry hourly rate; billable / non-billable toggle
- Timesheet export: CSV filterable by user, client, date range
- Per-project hours rollup; pull unbilled time into a draft invoice
- Weekly digest delivered every Monday — personalised email + in-app notification to admins / agency with team hours, your hours, outstanding $, and the week-over-week billable % trend
E-Sign, without DocuSign
Draft a contract, send a link, get a signature. No per-envelope fees, no seat costs, no watermark.
- Write a rich-text / Markdown agreement using
{{client_name}}style variables - Tokenized signing link — signers don't need an account
- HTML5 canvas signature capture, mobile-friendly
- Full audit trail: IP, user agent, timestamp recorded on submission
- Reusable template library (MSA / NDA / SOW / Proposal / Custom)
- One-click conversion of a signed agreement into a draft invoice
Built-in AI Assistant
Built on Prism PHP. Pick from six providers in the admin settings: OpenAI, Anthropic, Google Gemini, Mistral, Groq, or local Ollama — drop the matching API key (or URL for Ollama) in .env and you're done. Your data never trains anyone's model.
- Project summary — generate a 2-3 sentence status paragraph from the project's tasks, progress and dates
- Invoice line rewrite — turn a one-line hint ("logo design v2") into polished invoice copy
- Toggle on/off per install; per-provider env key inputs with live hints in the settings UI
- Falls back to deterministic placeholders if the provider is unreachable — never blocks the UI
- Staff-only surface — clients never see the AI
- Roadmap: thread summarisation, task-list generation, email-tone rewrite
Built for agencies. Flexible enough for freelancers, studios & consultancies.
Creative agencies
Brand, design and web shops juggling retainer clients, milestones and monthly invoices.
Dev studios
Sprint tracking, client-side project visibility, and hourly billing without a Jira + Harvest + DocuSign stack.
Marketing agencies
Content calendars as tasks, retainer tracking, monthly reports, and client-portal access baked in.
Consultancies
E-sign SOWs, track billable hours, auto-invoice, share deliverables — all under your domain.
Solo freelancers
Look like a 10-person shop on $5/mo shared hosting. Send invoices, accept payment via any link you choose, the day you install.
SMB service firms
Accountants, lawyers, architects — any service business that juggles clients, deliverables and hours.
Startups & founders
Onboard early customers, handle contracts, collect payments, all from one branded portal.
Coaches & educators
Client intake forms, session scheduling, deliverable sharing, and recurring invoices for programmes.
You're not buying a portal — you're cancelling five subscriptions.
Here's what a typical agency replaces on day one.
$400+/mo
3+ months
One-time
What you get when you buy.
Everything below ships in a single zip. Upload, install, done.
Full source code
Commented PHP, Blade, Livewire and JS. Modify, fork, extend.
Web installer
5-step wizard: requirements → license → DB → admin → finish.
Vendor pre-built
Composer and Vite compiled. No composer/npm on the server.
HTML documentation
9 pages: install, license, config, features, customisation, troubleshooting, changelog.
Demo data seeder
Optional sample clients, projects & invoices to explore instantly.
Role-based access
Admin, agency, client roles pre-configured and fully editable.
Email templates
Every transactional email editable in admin, no code.
6 months support
Email support through AppTrovo. Renewable.
Free updates
All v1.x releases included via your AppTrovo purchase page.
Multi-language ready
Laravel localisation; English ships in the box, add more via translation files.
PWA manifest
Install as an app on mobile and desktop; offline-ready shell.
Command palette
Ctrl+K to jump to any client, project or invoice — staff productivity built in.
Built on what Laravel devs already know.
Boring tech, battle-tested packages, zero surprises. Any Laravel developer can extend it.
Built for agencies that handle their clients' most sensitive data.
Laravel's modern security primitives out of the box. Self-hosted means no third-party vendor has access.
Bcrypt hashing
Passwords hashed with bcrypt + configurable cost factor. Never stored in plaintext.
CSRF + XSS protection
Automatic CSRF tokens on every form. Blade escapes by default.
Role-based access
Spatie Permissions: 21 fine-grained permissions across 3 built-in roles.
Encrypted sessions
Session payloads encrypted at rest; configurable cookie lifetime and domain scope.
Audit trails
E-sign signatures and every webhook delivery logged with IP, user-agent and timestamp.
Self-hosted
Your DB stays on your infrastructure — no vendor breach risk. CSV exports for clients, invoices and time; users deletable via admin.
No phone-home
One license verification at install, then never again. Optional OAuth, AI and webhooks only if enabled.
Two-factor authentication
TOTP enrollment with QR code from /profile. Recovery codes generated and re-generable. Login challenge step. Works with Google Authenticator, 1Password, Authy.
Social SSO
Sign in with Google, GitHub, Facebook or LinkedIn (OIDC). Per-provider toggle in admin Settings; keys live in .env only.
One purchase. The whole catalog.
23 modules, no add-ons, no per-feature gates. Live pricing on the AppTrovo listing page.
Get paid
5 modulesInvoices
Itemised invoices, PDF export, public pay-link, mark sent / paid / void.
Payments
Record manual payments against any invoice with overpayment guard and audit trail.
Recurring billing
Schedule recurring invoices (weekly / monthly / yearly) with auto-fired drafts.
Retainers
Hours-block retainers per client with used / remaining bars and auto roll-over.
Services catalog
Re-usable line items with default unit price & unit (hour / month / fixed).
Track work
5 modulesProjects
Per-client project workspaces with milestones, files, tags, public share link.
Tasks
Status / priority / assignee, subtasks, comments, mentions, bulk actions.
Milestones
Group tasks into phases; auto-progress rolls up from completed tasks. Optional auto-invoicing fires when a milestone completes.
Time tracker
Live timer + manual entries, hourly-rate per project, billable / non-billable.
Calendar
Tasks & invoice due-dates in one month grid, with month/year picker and filter.
Engage clients
6 modulesClient portal
Branded login + scoped views so each client only sees their own projects & invoices.
E-sign
Tokenised signing links, IP-stamped audit trail, reusable templates with variables.
Onboarding forms
Public intake forms that auto-create the client + optional project from a submission.
File approvals
Tokenised public URLs to get a client's decision on any project file. Audit trail with IP + timestamp.
Project messages
Per-project thread with attachments and in-app notifications.
Files
Drag-and-drop uploads attached to projects with type icons, size, uploader.
Insight & admin
7 modulesDashboard
Stat cards (clients / projects / outstanding) plus activity feed and recent lists.
Goals
Track quarterly goals (NPS, MRR, hours billed) with bump buttons and progress bars.
NPS feedback
Send tokenised survey links to clients; admin dashboard with NPS score, promoters / passives / detractors.
AI assistant
Six providers via Prism (OpenAI / Anthropic / Gemini / Mistral / Groq / Ollama) — project summary + invoice line rewrite, staff-only.
Webhooks
Outbound events on invoice / project / task changes, with test-fire, delivery log inspector and one-click replay.
2FA & access
TOTP enrollment with QR + recovery codes per user. 21 fine-grained permissions across 3 built-in roles.
Settings & branding
Brand name + colour, social-auth toggles, AI provider, mail-from, in-bound email.
Single-domain activation, transferable. Move the install to a different domain by deactivating in Settings → License, then re-activating on the new one — no new purchase required.
Questions buyers always ask.
Will Keel run on cheap shared hosting?
Yes. The minimum bar is PHP 8.4 and a MySQL/PostgreSQL/SQLite database. Out of the box Keel uses database queues, database cache and database sessions — no Redis worker required. Assets are pre-built. Hostinger, SiteGround, cPanel, Plesk, DigitalOcean, Laravel Forge — all confirmed working.
Is the license per-domain? Can I move it?
The license covers a single domain. To move to a new domain, deactivate from Settings → License on the old install, then reactivate on the new one — no new purchase needed. The license re-verifies weekly with AppTrovo in the background, but works gracefully offline if the API is unreachable.
How long does install take?
Five minutes. The web installer walks you through requirements → license → database → admin user → finish. You don't need SSH or composer — everything is pre-built. Cron setup takes another minute.
Can clients log in to see their own projects?
Yes — the client role is preconfigured with view-only access to their own projects, invoices, files and message threads. You can also disable the client portal entirely and use Keel as an internal-only tool.
Is there SSO / OAuth login?
Out of the box: Google, GitHub, Facebook and LinkedIn (OIDC) via Laravel Socialite. Toggle each provider on/off from Settings → Social login; client IDs and secrets live in .env. New users created through SSO are auto-linked to a matching email if one already exists.
Passwordless magic-link sign-in is also bundled — used for team invites by default, and admins can issue a one-time link to any user from /team.
Enterprise SAML 2.0 and provider-agnostic OIDC (Okta, Azure AD, Google Workspace) aren't in the default install. Adding either is a Socialite-provider package away, and full source ships so any Laravel developer can wire one in.
Can I customise the colours, logo and branding?
All from the Settings → Branding admin panel: company name, logo (light + dark), favicon, primary colour, email header, login background. No code changes required.
Which AI provider does it use?
OpenAI or Anthropic (Claude) out of the box, picked from the admin Settings page. Powered by Prism PHP, so other providers (Google Gemini, Mistral, Ollama, etc.) are a short config change away. Bring your own API key. Your data never trains anyone's model.
What about multi-language support?
Keel uses Laravel's built-in localisation system. English ships in the box. Add more languages by dropping translation files into resources/lang/. Locale is set globally via the APP_LOCALE env value; per-user preference is on the roadmap.
Can I extend it myself?
Absolutely. Full source code ships with every purchase. Standard Laravel 13 + Livewire 4 conventions — any Laravel developer can add modules, modify views, wire in custom integrations. Keep customisations in new files so upgrades stay trivial.
What's the refund policy?
Follow AppTrovo's standard refund policy. If the license fails to verify, or if a feature documented in this listing doesn't work as described, we'll make it right first.
Do I need a queue worker or Redis?
No. Queues, cache and sessions all use the database by default. A simple cron entry runs php artisan schedule:run every minute and dispatches any queued jobs. Redis is optional for high-traffic installations.
Does it work with Stripe? PayPal?
Keel is payment-processor-agnostic. Every invoice has a Pay URL field — drop in a Stripe Checkout link, a PayPal.me URL, Razorpay, a bank-transfer instructions page, anything you like — and it renders as a "Pay now" button on the sent invoice. Payments are recorded manually (per partial payment with amount, method and reference) so the audit trail is identical regardless of which gateway your client used. For deeper Stripe/PayPal automation, fire on the invoice.paid outbound webhook or add a controller on top.
Demo Credentials
| Role | User | Pass |
|---|---|---|
| Admin |
admin@keel.test
|
|
| Agency |
agent@keel.test
|
|
| Client |
client@keel.test
|
Item Details
Tech Stack
Tech Stack
Database
Deployment
Authentication
Hosting Compatibility
Frontend Framework
Multi-tenancy
Mobile Responsive
Real-time Features
License Type
Support Period
Dark Mode
Comments (0)
Sign in to leave a comment
Log in →No comments yet. Be the first to comment!