Repository navigation
Summary
- Multi-currency: Support any currency, with dashboard totals and reports converted to your workspace currency.
- Billable expenses: Add unbilled client expenses to invoices, emails, and PDFs.
- Client communications: Business-branded emails and milestone-completion notifications.
- Portal access control: Set workspace defaults, customize permissions per client, and restrict users to specific projects. Suspensions and revocations take effect immediately.
- Security & isolation: Fixed cross-workspace data exposure, tightened client and project relationships, and secured uploaded files.
- Platform upgrades: Updated Angular, NestJS, Prisma, Nx, and other dependencies; migrated API tests to Vitest.
Details
Multi-currency support (#31)
- Replaced the fixed currency enum with ISO 4217 currency codes.
- Added client-specific currencies for project budgets, hourly rates, and portal displays.
- Dashboard totals, revenue charts, and reports convert amounts to the workspace currency; lists retain original amounts with converted estimates.
- Added internal project notes, hidden from clients.
- Added a CI workflow for tests.
Billable expenses & invoice emails (#29)
- Added a billable-expenses picker when creating invoices. Expenses can only be billed once, in the same currency, with amounts preserved at invoicing.
- Invoice emails, PDFs, and portal views now display billed expenses separately, with their own subtotal.
- Client emails use the workspace's business name and configured sending domain.
- Added milestone-completion emails and enhanced project-status notifications with progress, next milestones, and portal links.
- Fixed cancelled invoices being sent.
Workspace & client isolation (#30)
- Added explicit workspace ownership to expenses and documents, preventing cross-workspace exposure.
- Moving projects between clients now transfers associated expenses and documents and updates portal sharing atomically.
- Enforced matching client/project ownership for documents and client/invoice ownership for payments.
- Removed public upload serving and storage URL exposure; file downloads now require authorization.
- Blocked portal tokens from accessing the notification WebSocket gateway.
Client portal access control (#32)
- Added workspace-wide default permissions for projects, documents, quotes, and payments, with per-client overrides.
- Added per-user project restrictions, supporting access to all shared projects or selected projects only.
- Rebuilt portal access management for enabling access, sharing projects, managing permissions, and inviting or revoking users.
- User suspensions and revocations now take effect immediately.
- Existing custom client permissions are preserved during migration.
Platform upgrade (#33)
- Upgraded Angular 22, Nx 23.3, Prisma 7.10, TypeScript 6, Express 5, and related dependencies.
- Migrated API tests from Jest to Vitest.
- Removed the need for --legacy-peer-deps during installation and Docker builds.
- Removed unused template libraries from the original workspace.
- Added optional MAIL_TEMPLATES_DIR configuration for custom email templates (work in progress).
Full Changelog: v0.3.0...v0.4.0