A lightweight, self-contained browser-based case management tool for small Irish solicitor firms.
Case Manager is a zero-infrastructure, single-file web application designed to replace the chaos of Word documents, shared folders, and email threads in a small Irish law practice. It consolidates five core workflows into one tool that runs entirely in your browser — no installation, no server, no database required.
| Module | Description |
|---|---|
| Matters (Case Tracking) | Create, update, and close legal matters with client name, case type, status, and assigned fee earner |
| Document Management | Attach file references, record document versions, and add notes against individual matters |
| Time Tracking & Billing | Log time entries and disbursements against matters; generate formatted billing summaries suitable for client invoicing |
| Client Communications | Maintain a per-matter chronological log of calls, emails, letters, and meeting notes |
| Court Dates & Deadlines | Track upcoming hearings, filing deadlines, and statutory time limits in a clear list view |
The application uses Irish legal terminology throughout (matter, solicitor, counsel, court sitting, etc.) and reflects Irish workflow conventions.
All data is persisted to browser localStorage — your data survives page reloads and browser restarts with no server-side component required.
| Requirement | Details |
|---|---|
| Browser | Any modern evergreen browser: Chrome, Firefox, Safari, or Edge (latest two major versions) |
| localStorage | Must be enabled and not blocked by browser settings or private/incognito mode restrictions |
| Server (optional) | Any static file server, or simply open the file directly from your filesystem |
| Docker (optional) | Docker Engine, if you wish to use the bundled container image |
No Node.js, Python, Ruby, or any other runtime is required. No build tools. No package managers.
There is no installation step. The deliverable is a single self-contained HTML file.
- Obtain
index.htmlfrom the project root (orsrc/index.html— they are identical). - That's it.
Double-click index.html
Or drag and drop the file onto an open browser window. This works on all major operating systems.
If you prefer to serve the file over HTTP (e.g. to avoid any file:// protocol restrictions in certain browsers):
# Python 3
python3 -m http.server 8080
# Then open: http://localhost:8080/index.html# Node.js (npx — no global install required)
npx serve .
# Then open the URL shown in the terminal# PHP built-in server
php -S localhost:8080
# Then open: http://localhost:8080/index.htmlA Dockerfile is included at the project root. It serves the application via nginx on port 80:
# Build the image
docker build -t case-manager .
# Run the container
docker run -p 8080:80 case-manager
# Then open:
# http://localhost:8080/index.htmlUpload index.html to any static hosting service (e.g. GitHub Pages, Netlify, an internal web server). The file works correctly when served from any sub-path URL — for example:
https://yourfirm.ie/tools/case-manager/index.html
No root-relative paths are used; no configuration is needed.
- Open
index.htmlin your browser. - Navigate to the Matters tab and click New Matter to create your first case.
- Fill in the client name, case type, assigned solicitor/fee earner, and save.
- Go to Time & Billing, select your new matter, and log a time entry.
- Go to Court Dates, select the matter, and record an upcoming court sitting or deadline.
- Go to Communications to log a call, email, or letter against the matter.
- Go to Documents to attach a file reference or note a document version.
- Click the Help / How to Use tab at any time for embedded in-app guidance covering all five modules.
The application ships with a browser-based test suite. Because the entire application is client-side JavaScript inside a single HTML file, tests are run by serving the application and exercising it in a browser.
# From the project root, start a local server:
python3 -m http.server 8080
# Open the application:
# http://localhost:8080/index.html
# Open the browser's Developer Tools console (F12 → Console)
# to observe any runtime errors or assertion failures.The following manual checks validate all five core modules and key success criteria:
| # | Test | Expected Result |
|---|---|---|
| 1 | Open index.html without a server (file:// protocol) |
Application loads and all tabs are visible |
| 2 | Create a new Matter | Matter appears in the Matters list immediately |
| 3 | Reload the page | Previously created matter is still present (localStorage persistence) |
| 4 | Log a time entry against the matter | Entry appears in Time & Billing |
| 5 | Click Print Billing Summary | Browser print dialog opens with a clean layout |
| 6 | Add a court sitting date | Date appears in the Court Dates list |
| 7 | Add a communication log entry | Entry appears in chronological order |
| 8 | Add a document reference | Document appears in the matter's document list |
| 9 | Serve from a sub-path URL (e.g. /tools/case-manager/index.html) |
Application loads and functions correctly |
| 10 | Open in an incognito window | Application loads (data will not persist across sessions) |
Pre-recorded test artefacts and session outputs are stored in the test-results/ directory for reference.
.
├── index.html # Primary deliverable — open this in your browser
├── case-manager.html # Earlier build iteration (superseded by index.html)
├── Dockerfile # nginx-based container image for static serving
├── README.md # This file
├── src/
│ └── index.html # Development/source copy (identical to root index.html)
├── artifacts/
│ ├── index.html # Archived build artefact
│ ├── charter_v1.json # Project charter (v1)
│ ├── charter_v2.json # Project charter (v2)
│ ├── domain_context_v1.json
│ ├── persona_selection_v1.json
│ ├── prd_v1.json # Product requirements document
│ ├── shell_v1.json # Application shell specification
│ ├── task_plan_v1.json # Delivery task plan
│ └── ux_spec_v1.json # UX specification
├── tests/ # Test artefact directory
└── test-results/ # Test run outputs
The application is intentionally configuration-free for end users. All settings are managed through the in-app interface. The following behaviours are worth noting:
All data is stored under the following localStorage keys (prefix: caseManager_):
| Key | Contents |
|---|---|
caseManager_matters |
Array of matter/case records |
caseManager_documents |
Document references per matter |
caseManager_timeEntries |
Time and disbursement entries |
caseManager_communications |
Client communication log entries |
caseManager_courtDates |
Court dates and deadline records |
You can inspect or back up your data at any time via your browser's Developer Tools → Application → Local Storage.
- Navigate to Time & Billing, select a matter, and click Print Billing Summary.
- The browser's native print dialog opens with a clean, client-ready layout.
- PDF generation is not included in this version; use your browser's Save as PDF print destination if a PDF copy is required.
- Use the Export button (available in each module) to download a JSON snapshot of your data.
- To restore data, use the Import option and select a previously exported JSON file.
- To clear all data, use the Clear All Data option in the Settings panel (irreversible — back up first).
The application respects the operating system's preferred colour scheme via prefers-color-scheme. No manual toggle is required; simply change your OS theme setting.
| In Scope | Out of Scope |
|---|---|
| Metadata, file names, dates, and notes for documents | Actual binary file storage / upload |
| On-screen billing summary with browser print support | PDF generation |
| localStorage persistence across sessions | Server-side database or cloud sync |
| Single self-contained HTML file | Multi-file builds, CDN dependencies, backend APIs |
| Irish legal terminology and workflows | Multi-jurisdiction or international law workflows |
| Static deployment at any sub-path URL | Authentication, user accounts, or multi-user access |
| Browser | Support |
|---|---|
| Chrome / Chromium (latest 2 versions) | ✅ Full support |
| Firefox (latest 2 versions) | ✅ Full support |
| Safari (latest 2 versions) | ✅ Full support |
| Microsoft Edge (latest 2 versions) | ✅ Full support |
| Internet Explorer | ❌ Not supported |
Note: Private/Incognito browsing modes may restrict localStorage. Data will not persist across sessions when using these modes. A warning is displayed in-app when localStorage is unavailable.
- All data is stored exclusively on the user's own device in browser localStorage.
- No data is transmitted to any external server, API, or third party.
- No analytics, tracking scripts, or external network requests are made at any time.
- No authentication mechanism is included — access control is the responsibility of the device owner.
This application was built for use by small Irish solicitor practices. All source code is contained within the single HTML file and may be inspected freely.
Built by HermesOrg — an orchestration of distinct AI personas working in concert: Product Manager → Designer → Engineer → QA, each contributing expertise to deliver a production-ready tool.