Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

274 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel Time Estimates

A collaborative time and quote estimation prototype for teams. Create estimates, assign team members, collect private or open inputs, review team calculations, and finalise quotes.

This is an experimentation project. It is built to validate look, feel, and needed features. Code is not production-ready or polished. Do not use in a live environment.


Feature Map

Dashboard & Activity

  • Assigned drafts and recently edited estimates
  • Team activity feed for estimate, task, assignment, import, deletion, and status changes

Estimate Catalogue & Lifecycle

  • List all estimates with filtering by tag, project type, and assignment
  • Rough and detailed estimate types with optional client and project classification
  • Estimate statuses: draft (editable) and finalized (locked)
  • Create and update estimates, with client-name autocomplete
  • Archive (soft-delete) and restore estimates

Task Entry, Reordering & Bulk Markdown

  • Add, edit, reorder, and delete task rows within an estimate
  • Bulk create titled tasks and descriptions from pasted markdown

Estimation Values & Team Calculations

  • Autosave one single-value or min/max-range estimate per user and task
  • Estimate in hours or days, with days normalized to eight hours
  • Confidence rating, response count, team mean, and low-confidence risk indicator per task
  • Auto-calculated totals with configurable risk buffer factor
  • Hourly rate and quote display
  • Hideable summary and personal/team calculation views
  • Blind estimation mode masks other members' values while an estimate is a draft

Team Assignments & Notifications

  • Assign and unassign users; unassignment removes that user's estimate inputs
  • Database assignment notification, plus email when enabled in the recipient's profile
  • Idle-aware polling refreshes collaborative estimate data

Similar-Project Search & Row Import

  • Search existing estimates by title, client name, project type, and tags
  • Import task rows from a matched estimate into the current estimate

Rough-to-Detailed Conversion & Version History

  • Convert a rough estimate into a linked detailed estimate
  • Copy tasks, inputs, tags, project type, pricing settings, and blind-estimation setting
  • Navigate parent and child estimates through version history

Tags & Project Types

  • Tag estimates with reusable tags (tags auto-clean when unused)
  • Categorise estimates by project type
  • Filter the catalogue and similar-project search by both
  • Create, rename, and delete project types from the administration area

Roles & Permissions

  • Granular per-user capability flags (can_manage_users, can_finalize, can_assign, can_change_tags, can_enforce_blind_estimation, can_update_project_details, etc.)
  • Policy-based authorisation for estimates, rows, tags, project types, and users

Admin: User Management, Impersonation & Mail Test

  • List, create, edit, activate, deactivate, and delete users
  • Change roles and granular permissions, and send password reset links
  • Impersonate eligible active users and return to the administrator session
  • Send a test mail from the admin panel

Profile, Auth & Theme

  • Login, logout, password confirmation, and password reset
  • Profile, password, and email-notification preference editing
  • Account deletion and automatic logout for deactivated users
  • Light, dark, and system appearance modes

Workflow Map

Create Estimate (draft, rough or detailed)
  -> Add Task Rows (manual or bulk markdown)
  -> Assign Team Members
  -> Members Enter Inputs (hours/days, range or single, confidence)
  -> Review Calculations (team mean, totals, risk buffer, quote)
  -> Finalize (locks estimate)
  -> Unlock if changes needed
  -> Archive when done

Role Map

Role Capabilities
Admin Full estimate and administration access, including users, project types, archive, impersonation, and mail testing
Manager Manage estimates, assignments, finalization, and archive; user and project-type administration can be delegated with permission flags
Member View and create estimates, manage owned drafts where permitted, and submit input to assigned drafts

All authenticated users can view the estimate catalogue and estimate details. Permission flags provide finer control over user management, project types, assignment, finalization, tags, blind estimation, and project details.


Current Boundaries

The following are not yet implemented in this prototype:

  • Production hardening, security review, operational safeguards, and complete audit coverage
  • Public registration (only seeded/admin-created accounts)
  • Public links or client portal
  • Comments or approval workflow
  • Notification inbox or read/unread workflow
  • Real-time WebSockets (estimate collaboration uses polling)
  • PDF or CSV export
  • Permanent archive deletion (soft-delete only)

Screenshots

Bulk markdown task creation

Blind/private estimate view

Team calculation view

User management

Dashboard and team activity

Finalized estimate


Stack

  • PHP 8.4+
  • Laravel 12
  • Inertia 2
  • React 19
  • Tailwind CSS 3 (dark-mode class strategy)
  • Vite 7 (build only; dev mode uses build --watch)
  • SQLite (default; configurable via .env)
  • DDEV local development environment

Local Setup (DDEV)

ddev start
# Copy .env if absent (DDEV may do this automatically):
ddev exec bash -c 'test -f .env || cp .env.example .env'
ddev composer install
ddev artisan key:generate
ddev artisan migrate --seed
ddev npm install
ddev npm run build

DDEV serves the Laravel site at the URL reported by ddev describe. Use ddev npm run dev to rebuild frontend assets while editing. The optional ddev composer run dev command also starts an application server, queue listener, and Pail logs, but its application server is redundant when DDEV is already serving the site.

The checked-in DDEV configuration binds its published development ports to 0.0.0.0 for access from outside a VM. Use it only on a trusted network and restrict exposed ports with the VM or host firewall. Vite's server.host setting applies only when the Vite development server is invoked directly; the standard build --watch workflow does not open a Vite port.


Seeded Accounts

Email Password Role
admin@company.com password Admin
manager@company.com password Manager
member@company.com password Member (default role)

Useful Commands

# Run tests
ddev artisan test --compact

# TypeScript type checking
ddev npm run typecheck

# Format PHP code (Laravel Pint)
ddev exec vendor/bin/pint --dirty

# Format frontend code (Prettier)
ddev npm run format

About

A collaborative time and quote estimation prototype for teams. Create estimates, assign team members, collect private or open inputs, review team calculations, and finalise quotes.

Resources

Stars

Watchers

Forks

Contributors

Languages