A self-hosted client portal and project delivery management system — currently in active development.
HandOff helps agencies and freelancers manage client projects end-to-end: organize milestones, track deliverables, store credentials securely, schedule meetings, and maintain a complete audit trail — all in one place.
Agency ──▶ Project ──▶ Milestones (sequential) ──▶ Deliverables (versioned files)
│
├── Credentials (passwords, API keys, SSH keys)
├── Meetings (notes, recording links)
└── Activity Log (complete audit trail)
The agency (admin) creates projects, invites clients, and manages all project data. A client portal (view progress, download deliverables, approve/reject submissions) is planned — see CONTRIBUTING.md to help build it.
Status: HandOff is under active development. The admin workspace is functional; the client portal is upcoming. See CONTRIBUTING.md to help build it.
- Projects & Milestones — Organize work with sequential milestones and trackable deliverables
- Credential Storage — Securely store login credentials, API keys, SSH keys, and database passwords
- File Management — Version-controlled file uploads with agency submit-for-review workflow (client approve/reject in upcoming portal)
- Collaboration — Comment on projects, milestones, and deliverables (internal/external visibility)
- Meeting Scheduling — Track meetings with notes and recording links
- Activity Tracking — Complete audit trail of all project activities
- Notifications — Keep clients and team members informed
- PHP 8.2+ with extensions:
bcmath,ctype,curl,dom,fileinfo,intl,json,mbstring,openssl,pcre,pdo,tokenizer,xml - Composer 2.x
- Node.js 18+ & NPM
- Database: PostgreSQL (recommended), MySQL 8+, or SQLite
# Clone and install
git clone https://github.com/striker561/HandOff.git
cd HandOff
composer setup
# Configure your database in .env
# (composer setup copies .env.example if .env doesn't exist)
# See .env.example for all available options
DB_CONNECTION=pgsql
DB_DATABASE=handoff
DB_USERNAME=your_username
DB_PASSWORD=your_password
# Seed sample data (optional)
php artisan db:seed
# Start the development environment
composer devcomposer dev starts four processes concurrently: PHP server, queue worker, log tail, and Vite dev server. Visit http://localhost:8000.
# Run the full test suite
composer test # runs lint → static analysis → tests
# Individual steps
composer lint # Pint code style fixer
composer analyse # PHPStan static analysis
php artisan test # Pest test suite (with --compact for CI)| Layer | Technology |
|---|---|
| Framework | Laravel 13 |
| Language | PHP 8.2+ |
| CSS | Tailwind CSS 4 |
| UI | Livewire 4 + Flux UI + Alpine.js |
| Auth | Laravel Fortify + Passkeys |
| Database | PostgreSQL / MySQL / SQLite |
| Testing | Pest 4 + PHPStan |
| Code Style | Laravel Pint |
| Document | Purpose |
|---|---|
| ARCHITECTURE.md | Codebase structure, layers, UI conventions, patterns |
| CONTRIBUTING.md | Development workflow, service patterns, code style |
| SECURITY.md | Vulnerability reporting and security policy |
| CODE_OF_CONDUCT.md | Community guidelines |
We welcome contributors! See CONTRIBUTING.md for architecture details, service patterns, and development conventions.
Quick start for contributors:
# Fork → clone → setup → branch → code → test → PR
composer setup
php artisan db:seed
composer test # make sure everything passes
composer dev # start hackingMIT License — see LICENSE file for details.
Built with Laravel
