01 · 2024 · Founder-built
Internal Company Management System
A full-stack internal system covering employees, teams, roles, tasks and activity history, built to explore how much of an organization's daily operation can live in one coherent place.
Problem
Internal operations in small organizations tend to fragment across spreadsheets and chat. The interesting engineering problem is not any single module, but keeping permissions, history and structure consistent across all of them.
Objectives
- Model an organization: people, teams, departments and roles
- Enforce permissions consistently at every layer
- Record a reliable activity history for every change
- Keep the interface fast enough for daily use
Approach
The data model came first. Roles, permissions and organizational structure were designed before any screen, so that access control could be enforced at the data layer rather than patched into the interface.
UX / UI
A dense but calm administrative interface: consistent table patterns, a single detail-panel convention, and destructive actions that always require a deliberate second step.
Features
- Employee, team and department records
- Role and permission management
- Task assignment and status tracking
- Document attachment against records
- Activity log for every mutation
- Notification and reporting views
Interface preview
Gallery
Organization overview
People, teams and departments
Permission matrix
Roles mapped to capability
Activity log
Every change, attributed
Engineering
Server-side authorization on every query, an append-only activity log, and a normalized schema that allows organizational structure to change without rewriting historical records.
Architecture
- Relational schema with organization-scoped keys
- Authorization enforced at the data access layer
- Append-only activity log table
- Server-rendered application shell with client interactivity
Technology
- TypeScript
- React
- Node.js
- PostgreSQL
- Tailwind CSS
Challenges
Permissions that stay correct
Checking permissions in the interface is easy and wrong. Moving every check to the data layer took longer but removed an entire category of bug.
History without noise
Logging everything produces an unreadable log. Deciding what constitutes a meaningful event was a design problem, not a technical one.
Outcome
An independently built, working system that demonstrates our approach to permissions, auditability and operational interface design. It is a founder-built project, not a client deployment.
Have something worth building?
Tell us what you're trying to build, improve or solve. We'll tell you honestly whether we're the right studio for it.