fairnesscoop/permacoop
52.1
Adequate · 21 September 2026
10.6k
lines of production code
TypeScript
primary language
4
measurements over time
What this system is
This system is a NestJS-based web application that manages customer relationships, project tracking, and employee leave requests. It implements a clean architecture with CQRS patterns to handle business logic for entities like customers, projects, and fair calendar events. The frontend is a custom-built interface featuring a dashboard, calendar views, and leave management tools, supported by a PostgreSQL database.
Features
Add colorized prefix utility for local development
A new shell script, tools/colorize\_prefix.sh, has been added to support local development tooling. This utility allows users to run commands with colorized prefixes in the terminal output, enhancing the visibility of logs during development workflows.
tools · high confidence
Added Customer domain model and validation logic
Introduced the Customer entity with properties for id, name, and createdAt, along with methods to retrieve and update the customer's name. Added a specification class IsCustomerAlreadyExist to validate whether a customer already exists by name, supported by a repository interface defining save, find, and search operations. Included unit tests for the entity and the existence check, as well as custom exceptions for duplicate and not-found scenarios.
src/Domain/Customer · high confidence
Added domain entities, repository interfaces, and layout CSS classes
The application now includes domain models for Sessions, Cooperatives, and Tasks, each with their respective entity classes, repository interfaces, and exception classes. Additionally, a new set of CSS layout classes (box, cluster, container, frame, grid, sidebar, and stack) has been introduced to support the frontend structure.
(repo-wide) · high confidence
Adds French translations for leave management and calendar features
The application now supports French (fr-FR) for the leave management and calendar sections. This includes translations for leave types (paid, unpaid, medical, relocation, menstrual, etc.), status messages (pending, accepted, refused), and calendar view labels. Users will see the interface in French for these specific areas.
src/translations · high confidence
Complete frontend rewrite with new layout and component system
The frontend has been rewritten using a new component-based architecture. This introduces a new base layout (\\_base.njk\) and application layout (\app.njk\) featuring a header with a mobile navigation menu, a desktop sidebar, and a main content area. A reusable navigation system (\nav\_links.njk\) provides access to the dashboard, FairCalendar, CRM, People, and other sections. The header includes a theme toggler for light/dark mode, a user profile dropdown, and a mobile menu. The change also adds a new pagination component, error page templates, and various UI macros (icons, buttons, forms, breadcrumbs) to standardize the user interface across the application.
src/templates · high confidence
Initial project scaffolding and tooling setup
The repository was initialized with essential configuration files to support development and testing workflows. This includes setting up the Node.js version via .nvmrc, configuring ESLint and Prettier for code quality, and establishing a Playwright-based end-to-end testing environment. Additionally, a Docker Compose configuration was added to manage the PostgreSQL database service, and a Makefile was introduced to streamline common tasks such as building, testing, and managing the database.
(repo-wide) · high confidence
Initializes the NestJS backend application structure
The backend application is initialized with a new entry point (main.ts) that configures security headers (helmet), cookie parsing, global validation pipes, session management, and static asset serving. The app module (app.module.ts) integrates multiple domain modules (Home, Project, Customer, Task, etc.) and registers global exception filters. Database connectivity is established via TypeORM with PostgreSQL, and a seeding mechanism is added to populate initial data.
src · high confidence
Introduce FairCalendar domain model and validation logic
Added the core domain model for the FairCalendar feature, including the Event entity, repository interfaces, and a set of specification classes that enforce business rules. These specifications validate that events belong to the correct user, check that the daily time limit (720 minutes) is not exceeded, and ensure no duplicate leaves exist for a given period. The change also introduces a factory for generating calendar overviews by aggregating event data.
src/Domain/FairCalendar · high confidence
Introduce notification domain model and repository interface
A new Notification entity has been added to the domain layer, supporting three notification types: POST, COMMENT, and REACTION. The entity stores a message, resource ID, and optional association with a LeaveRequest. A corresponding repository interface (INotificationRepository) is introduced to handle saving and retrieving notifications by leave request ID and type. Unit tests verify the entity's getters and construction.
src/Domain/Notification · high confidence
Introduced Project domain model and validation
Added the Project entity with fields for name, invoice unit, active status, and associated customer, along with a specification to check for duplicate project names. This introduces the core domain model for managing projects, including validation logic to prevent creating projects with existing names.
src/Domain/Project · medium confidence
Introduces CQRS structure for Customer and FairCalendar domains
The application layer now implements a Command/Query pattern for managing customers and fair calendar events. This includes command handlers for creating, updating, and deleting calendar events, as well as queries for retrieving them. Additionally, new command and query handlers are provided for customer creation and updates, alongside supporting classes like \MonthDate\ and \Pagination\ to handle common application logic.
src/Application · high confidence
Introduces leave request management and meal ticket removal features
This change introduces the core domain models and logic for managing employee leave requests and meal ticket removals. For leave requests, it adds the \LeaveRequest\ and \Leave\ entities, along with a converter to transform requests into individual leave records. It enforces a monthly quota for menstrual leave (capped at two days per calendar month) and ensures that sensitive leave types (like menstrual leave) are anonymized for other users. For meal tickets, it adds the \MealTicketRemoval\ entity and associated repository interfaces. The update also includes comprehensive unit tests for these new components.
src/Domain/HumanResource · high confidence
Introduces new custom elements for UI interactions
Adds a suite of new custom elements to the frontend to handle specific user interactions and state management. This includes \pc-auto-form\ for progressive form submission, \pc-clipboard-button\ for copying text to the clipboard, \pc-dialog-trigger\ for managing modal dialogs, \pc-eventcalendar\ for rendering and navigating event calendars, \pc-event-form\ for conditionally displaying mission-specific fields, \pc-form-submit\ for triggering form submissions via events, \pc-frame\ and \pc-frame-form\ for handling frame-based navigation and form submissions, \pc-month-navigator\ for month/year selection, \pc-nav-menu-button\ for toggling navigation menus, and \pc-theme-toggler\ for persisting and applying dark/light theme preferences via cookies.
src/assets/customElements · medium confidence
New frontend utility libraries for cookies, DOM, and navigation
The frontend codebase now includes new utility modules in the lib directory to support the rewritten UI. cookie.js provides functions to create and remove cookies with strict SameSite policies. customElements.js adds helpers to wait for elements to appear in the DOM and handle custom element lifecycle quirks. frame.js enables dynamic frame updates via custom events and fetches new content. eventCalendar.js initializes a FullCalendar instance with specific day and interaction plugins. These changes introduce new capabilities for managing state, DOM interactions, and calendar rendering.
src/assets/lib · high confidence
New utility CSS classes for layout, styling, and accessibility
A new set of CSS utility classes has been introduced in the frontend stylesheets to standardize common UI patterns. These include accessibility helpers (e.g., .pc-visually-hidden), background color utilities, gap and spacing controls, text styling, and layout aids like centering and sizing. These classes provide a consistent way to apply common styles across the application.
src/assets/styles/utilities · high confidence
Architecture
Adopts a clean architecture with adapters and command/query buses
The infrastructure layer has been restructured to implement a clean architecture pattern. New adapter classes (CommandBusAdapter, EventBusAdapter, QueryBusAdapter) wrap the underlying CQRS and event bus implementations. Additionally, a suite of utility adapters (DateUtilsAdapter, PasswordEncoderAdapter, FluentTranslatorAdapter, MattermostNotifier) and DTOs (IdDTO, PaginationDTO, CustomerDTO) have been introduced to standardize interactions with external systems and validate input data.
src/Infrastructure · high confidence
Behavioural changes
Database schema refactored to remove legacy features and add new capabilities
The database schema has been significantly restructured. Several legacy tables and columns have been removed, including pay slips, daily rates, quotes, contacts, files, and the billable flag on events. Conversely, new tables and columns have been added to support updated business logic: a session table for authentication, an active flag for projects, a sustainable mobility fee for employees, and an interest rate table linked to user savings records. Additionally, the leave request type was extended to include an 'illimited' option, and the contact table was expanded to track which user initiated the contact.
migrations · high confidence
New component styles for the frontend rewrite
The frontend has been rewritten with a new set of CSS styles for core UI components, including badges, buttons, cards, dropdowns, navigation menus, and tables. This update introduces a consistent visual design system, featuring a sticky header, improved button variants (secondary, error, muted, circle), and enhanced navigation styling with active state indicators. Additionally, the calendar view now supports detailed mission information in tooltips, and the shell layout ensures full-height pages with proper content area growth.
src/assets/styles/components · high confidence
New default CSS styles and dark mode support
The application now uses a new set of default CSS styles, including a CSS reset, typography defaults, and a comprehensive set of CSS variables for colors, spacing, and fonts. These variables support both light and dark themes, enabling dark mode for the interface.
src/assets/styles · high confidence
Test coverage
Added end-to-end tests for the frontend application
Added end-to-end tests for the frontend application, including authentication, navigation, and specific feature pages such as the home dashboard, customer list, fair calendar, and login flow. The tests verify that unauthenticated users are redirected to the login page, that authenticated users can access protected routes, and that key UI elements and navigation links function correctly.
e2e · high confidence
Dependencies
Initial project setup with NestJS and related dependencies
Added the initial \package.json\ and \package-lock.json\ files for the server application, establishing the project's dependency tree. This includes the core NestJS framework (version 9.2.0), TypeORM, and various utility libraries such as \axios\, \lodash\, and \date-fns\, along with development tools like Jest, ESLint, and Playwright for testing and code quality.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 32 → 52 (+20.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 92 → 93 (+0.9)
- Architecture 90 → 75 (-14.8)
- Maturity 60 → 61 (+1.6)
- Readiness 26 → 34 (+8.4)
- Security 63 → 71 (+8.7)
- Accessibility 71 (new)
Resolved (58)
- Coverage not included — suite not readable by the collector
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- …and 38 more
New (121)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Critical CVE: [GHSA redacted] (package-lock.json)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- End-of-life runtime: Node.js 16
- Floating npm dependency: lodash
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- …and 101 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
fairnesscoop/permacoop was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 1eb778033a12d8ef4c8ed5f02c0dc2e640c7c4c2 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.