Skip to content

feat: client proposal management dashboard (#213) - #226

Merged
SudiptaPaul-31 merged 1 commit into
Lumina-eX:mainfrom
Cmitchelle7:feat/proposal-management-dashboard
Sep 27, 2026
Merged

SudiptaPaul-31 merged 1 commit into
Lumina-eX:mainfrom
Cmitchelle7:feat/proposal-management-dashboard

Conversation

@Cmitchelle7

Copy link
Copy Markdown
Contributor

Closes #213

Summary

Proposal management dashboard for clients to review, filter, and manage freelancer proposals.

Endpoints

  • GET /api/proposals?projectId=... — list (client sees all for the project, freelancer sees their own)
  • PATCH /api/proposals/:id — accept/reject (client only, 403 for others)

UI

  • app/dashboard/proposals/[projectId]/page.tsx — dashboard page
  • components/proposals/* — filters bar, card, confirm dialog, status badge, skeleton, empty state

Data

  • lib/db/migrations/010_proposals.sql — creates proposals and proposal_audit_logs
  • lib/proposals/service.ts — Neon-backed list/update with audit trail

Acceptance criteria

  • List proposals
  • Freelancer preview (name, skills, rating, completed jobs)
  • Proposed budget with currency formatting
  • Estimated completion time
  • Accept/reject with confirmation dialog
  • Proposal status (Pending / Accepted / Rejected / Updated)
  • Filter by status
  • Role-based UI (clients manage, freelancers read-only)
  • Empty state
  • Loading state (skeleton)
  • Responsive (mobile + desktop)

Additional

  • Sort by budget / delivery time / rating / recent
  • Audit trail (proposal_audit_logs on every accept/reject)

Notes

  • Dynamic ORDER BY uses Neon tagged-template fragments + a whitelisted column list (no .unsafe(), no injection).
  • The existing lib/db.ts sql proxy fails under Turbopack with "sql is not a function"; lib/proposals/db.ts provides a scoped direct neon() instance for this feature. Fixing the shared proxy is out of scope for this issue.

@drips-wave

drips-wave Bot commented Sep 24, 2026

Copy link
Copy Markdown

@Cmitchelle7 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@SudiptaPaul-31
SudiptaPaul-31 merged commit ac61adc into Lumina-eX:main Sep 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Client Proposal Management Dashboard

2 participants