Back to projects

Shipped

Internal Tools Platform

A multi-module internal platform that grew from one recurring workflow problem into a real, deployed application.

structured / workflow / operational

IT
ReactTypeScriptSupabaseVercel

Why I built it

This project started from the idea that support and operational workflows often end up scattered across different tools and manual processes: a spreadsheet here, an email thread there, a process that lives in someone's head.

The goal was to build one consistent internal platform for several recurring workflows instead of a pile of disconnected fixes. Over time it evolved into a multi-module internal web application.

What it does

The platform brings role-based access and a set of focused modules (communication, problem reporting, quality, e-learning, onboarding and reporting) together behind one consistent interface for day-to-day operational and support work.

Key features

Dashboard

  • Central entry point into workflows

Internal communication

  • Support communication between different support levels

Problem reporting

  • Structured reporting and investigation workflow

Profile / accounts

  • User profile and account management

Permissions

  • Role-based access and permissions

Quality management

  • Workflows related to quality review

E-learning

  • Creating and managing internal learning content

Onboarding

  • Structured onboarding workflows

Reporting

  • CSV / reporting functionality where relevant

How it works

  1. 1Sign in
  2. 2Role-based access
  3. 3Module (dashboard, communication, reporting, quality, e-learning, onboarding)
  4. 4Supabase (data + auth)
  5. 5Deployed on Vercel

Architecture notes

Access is role-based: different operational responsibilities see and can do different things inside the same platform, rather than each team running its own separate tool.

Supabase backs authentication, permissions and application data; the app deploys to Vercel with a standard build, lint and test pipeline in front of production.

Tech stack

ReactTypeScriptSupabaseVercel

Interesting technical details

Detail

E-learning went beyond "add a feature"

The e-learning module evolved substantially through real usage: autosaving drafts, manageable list views, published vs. draft states, filtering, fixed text overflow, and less scroll in dense content-management screens. The goal was making content actually manageable for the people using it, not just adding more buttons.

Detail

Role-based access as a first-class concept

Permissions and role-based access run through the platform rather than being bolted onto individual modules, which keeps new modules consistent with how access already works.

Challenges & decisions

Decision

Security and access hardening

Role-based access, permission boundaries, and general security hardening were treated as ongoing work, not a one-time setup step.

Decision

A real dev-to-prod pipeline

Local/dev environment, linting, production builds, automated tests and a deployment workflow all had to hold together as the platform grew past its first few modules. At one point the automated suite was a clean 25/25, a small milestone, not a claim of full coverage.

Current status

Shipped and in active use: a mature prototype that keeps evolving with feedback.

  • Multiple modules in production: dashboard, communication, problem reporting, permissions, quality, e-learning, onboarding, reporting
  • Role-based access and authentication are live via Supabase
  • Deployment pipeline (build, lint, tests) runs in front of production on Vercel
  • Ongoing feedback-driven improvements, especially around content management screens

What's next

The best internal tools disappear into the workflow instead of asking people to admire them. This project matters to me personally because it grew from a small experiment into a real application with modules, auth, permissions, data and an actual deployment, proof that a practical operational problem can turn into working, maintained software.

Keep refining content-heavy screens based on real usageExtend reportingContinue hardening access and permissions as modules grow