Case study · Custom software
A document system with real permissions and a record of every change
The files lived in shared folders where anyone could move or delete anything and nobody could say who had. We built a document system on top of the storage the firm already paid for.
The client
A firm whose client documents must be kept, found again and shown to an auditor. We do not name clients on this site; we are happy to talk about the work in detail on a call.
What needed to change
- Client documents scattered across shared folders.
- No control over who could see or change which files.
- No record of who uploaded, changed or deleted a document.
What we built
No.PartWhat it means in practice
01OneDrive underneathFiles stay in the firm's own OneDrive, so there is no new storage bill and no copy of the data elsewhere.
02Roles and permissionsWho may see, upload, change or delete is set by role and by client, not by folder sharing.
03Audit logEvery upload, change, download and deletion is recorded with the person and the time.
04DashboardA dashboard of what has come in, what is waiting and what is missing, by client.
How it runs now
Documents are filed and found through the system, and the audit log answers the question auditors always ask: who touched this, and when.
Built with: Next.js, PostgreSQL, Microsoft Graph (OneDrive), Role-based access control.
Related
More case studies
- ExamYard: Odoo 19 ERP for an Education Publisher →
- QuickBooks Desktop to Odoo for a Contractor →
- Odoo HR, Attendance and Payroll Rules →
- Multi-Tenant Cloud ERP with FBR Integration →
- ExamYard Teacher and Student Portals →
- Accountancy Firm ERP Run with an AI Agent →
- Geotechnical Boring Log System on Odoo →
- Ask Zara: AI Assistant for a Tax Practice →
- Global Tender Finder: Daily Tender Research Bot →
- ExamYard: SEO, AEO and AI Search Visibility →
- ExamYard: 12,000+ AI Video Lessons, Automated →
- ExamYard: A 24/7 YouTube Study Stream from a Server →
- ExamYard: 1,800+ Verified Leads and Email Outreach →
Book a meeting
Free 30-minute call