TomaszRewak/TimeWriter
39.5
Weak · 21 September 2026
2k
lines of production code
JavaScript
primary language
4
measurements over time
What this system is
This system is a real-time collaborative text editor that enables multiple users to edit documents simultaneously. It manages document state through an event-sourcing architecture, supporting features like undo/redo, syntax highlighting, and multi-user cursor visualization. The application consists of a React-based client for the editing interface and a Node.js server that handles synchronization, persistence, and room-based broadcasting via Socket.IO.
Features
Added sample React component for time-writer-event-sourcing
A new sample file, sample-text.js, was added to the time-writer-event-sourcing/samples directory. It provides a basic React component example, likely for demonstration or testing purposes within the time-writer-event-sourcing context.
time-writer-event-sourcing/samples · high confidence
Initial deployment setup for the time-writer client
The time-writer-client application is now configured for initial deployment with a new Express server setup in app.js that serves static files and the main index.html page. The project includes a webpack configuration to bundle React/JSX source code into a single bundle.js file, using Babel for transpilation and CSS loaders for styling. This establishes the foundational structure for the client-side application, including the HTML template with a root div for React mounting and the necessary build tooling.
time-writer-client · high confidence
Initial server implementation with real-time collaboration and document management
The time-writer-server introduces a new Node.js backend that serves the static frontend, exposes a REST endpoint to retrieve document history, and manages real-time collaboration via Socket.IO. The server automatically assigns timestamps to all events, broadcasts changes to connected clients in a room, and handles disconnections by removing carets. Additionally, a scheduled job runs daily to remove old documents, and the project is configured with Webpack for bundling.
time-writer-server/src · high confidence
Introduce TextDocument class for document state management
A new TextDocument class has been added to manage document state and event history. It initializes with an optional event history (defaulting to a sample text and empty carets) and exposes the event store's history and state. It provides methods to add events and update timestamps, effectively encapsulating the document's lifecycle and data access.
time-writer-event-sourcing/document · high confidence
Introduced text formatting and navigation services
Added new services for text formatting and navigation. The text formatting service now calculates indentation levels based on tab characters, while the text navigation service provides methods for line/column calculations, caret coordinate mapping, and fast text traversal.
time-writer-event-sourcing/services · high confidence
Introduced workspace UI with tabbed document management
Added a new workspace component that renders a top bar for managing open documents. Users can now select, close, and add new files via the workspace bar, with each document displayed as a selectable tab. The workspace also includes a user profile popup and links to external resources like GitHub and LinkedIn.
time-writer-react/components/workspace · high confidence
Introduces event-factory and server-connection services for collaborative editing
Adds two new services to the application: EventFactory, which translates keyboard and mouse interactions (such as Ctrl+Z for undo, Ctrl+Y for redo, and navigation keys) into structured events, and ServerConnection, which manages the Socket.IO connection for real-time document synchronization and state retrieval.
time-writer-react/services · high confidence
New document editing interface with syntax highlighting and multi-user carets
The document component has been refactored into a new structure that introduces syntax highlighting for code elements (comments, strings, statements, etc.) and supports multi-user cursor (caret) visualization. Users will see colored text fragments based on their type, distinct caret ranges for each connected user, and an input panel that handles keyboard and mouse interactions for editing, selection, and scrolling.
time-writer-react/components/document · medium confidence
New logging UI component for displaying recent events
A new 'Logs' component has been introduced to the time-writer-react application, providing a dedicated UI for displaying the last 10 events from the history. This feature includes a toggle to show or hide the log panel, displays event data with syntax highlighting for object structures, and presents informational messages about the demo version's limitations, such as the 10,000 character document limit and 3-day inactivity removal policy.
time-writer-react/components/logging · high confidence
Behavioural changes
Introduce centralized routing configuration for the Workspace
The application's routing logic has been extracted into a new \routing.js\ module. This component now wraps the application in a \BrowserRouter\ and defines the root route (\/\) to render the \Workspace\ component, effectively replacing the previous home page setup.
time-writer-react/components/routing · high confidence
Introduces undo/redo support and event history management
The event history module now supports undo and redo operations, allowing users to revert or reapply changes. This is enabled by new classes that manage the event chain, including a reducer for adding/removing events, a state updater that tracks undo/redo levels per author, and a repair mechanism to fix timestamp ordering. Additionally, the system enforces a 10,000-character limit on file length and cleans up old states to manage memory.
time-writer-event-sourcing/document/event-history · medium confidence
Prevents default browser shortcuts and keys
The application now intercepts and prevents default behavior for specific keyboard inputs, including the spacebar, backspace, tab, and the Ctrl+A and Ctrl+S hotkeys. This ensures that these keys do not trigger native browser actions or navigate away from the page, providing a more controlled writing environment.
time-writer-client/src · high confidence
Refactored document event processing with modular reducers
The document event processing logic has been refactored into a modular structure, introducing specific reducers for insertion, deletion, navigation, and caret management. This change introduces a new \EventReducer\ that routes events to specialized sub-reducers, each handling a specific type of document update. The system now supports vertical and horizontal navigation, caret creation and removal, and text insertion and deletion with improved position tracking and duplicate removal.
time-writer-event-sourcing/document/event-processing · medium confidence
Server-side document state persistence and cleanup
The time-writer-server now maintains an in-memory cache of documents, allowing the server to remember document state between requests. A new DocumentRepository class manages this cache, automatically creating new documents on first access and tracking their last-accessed time. Additionally, a mechanism has been added to automatically remove documents that have not been accessed in the last three days, ensuring the server's memory usage remains bounded.
time-writer-server/documents · high confidence
Test coverage
Added unit tests for TextNavigationService
Added unit tests for the TextNavigationService, covering scenarios for counting lines and calculating caret coordinates and positions. The test suite includes cases for empty strings, single and multi-line texts, and edge cases such as positions beyond the end of the text or lines.
time-writer-react/external, time-writer-test · high confidence
Dependencies
Initial project setup with Babel 7 and React 16.6
The project has been initialized with a new dependency structure across multiple sub-projects (client, server, react, test). This includes adding Babel 7 (specifically @babel/core 7.2.0, @babel/polyfill 7.2.5, @babel/preset-env 7.1.6) for JavaScript transpilation and @babel/node for testing. The client and React components now depend on React 16.6.3 and React-DOM 16.6.3. Additionally, the server side incorporates Express 4.16.4, Socket.io 2.2.0, and Node-schedule 1.3.1, while the test environment uses Jasmine 3.3.1. These changes establish the foundational tooling and library versions for the application's frontend, backend, and testing infrastructure.
(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 43 → 40 (-3.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 65 → 67 (+2.4)
- Architecture 87 → 62 (-25.0)
- Maturity 43 → 43 (+0.7)
- Readiness 25 → 28 (+2.8)
- Security 75 → 50 (-25.0)
Resolved (56)
- Coverage not included — suite not readable by the collector
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-react/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-react/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical vulnerability: [GHSA redacted] (time-writer-client/package-lock.json)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- High CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- …and 36 more
New (72)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-react/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-react/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical CVE: [GHSA redacted] (time-writer-client/package-lock.json)
- Critical vulnerability: [GHSA redacted] (time-writer-client/package-lock.json)
- Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (the committed lockfile is in a format this engine cannot resolve)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- …and 52 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
TomaszRewak/TimeWriter 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 3de9f2ad34f852a232b6082cff85927267539e3e — 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-fa71c66cabd8.