Case Study · Engineering & Drafting

From one shared XLSX to a real-time job tracker that syncs straight to Egnyte.

A drafting & engineering firm was running their entire pipeline — revenue, job status, ownership — out of a single, shared, ever-growing Excel file. Multiple people. Same file. Daily merge conflicts. We rebuilt it as a role-based web app, with files living in their existing Egnyte storage and staying perfectly in sync.

Industry Drafting / Engineering
Project Type Custom Web App + API Integration
Stack PHP · MySQL · jQuery · Egnyte API
Outcome 5-star delivery, real-time job + revenue tracking
Team logs in
Job Tracker App Roles, jobs, revenue
Egnyte Source of truth for files
1 → ∞
Concurrent users (without breaking the sheet)
Real-time
Revenue + job status visibility
0
Manual file moves between system & storage
5.0★
Client rating on delivery
The challenge

A spreadsheet had quietly become the company's operating system.

On paper, the spreadsheet was just a tool. In practice, it was the system of record for jobs, ownership, revenue, and project state — the thing the entire firm depended on to know what was happening, and what they were getting paid for.

That came with all the usual costs:

  • Race conditions. Two people editing the same job at the same time. Last-write-wins.
  • No source of truth. The "real" file lived in someone's email, not the file server.
  • Zero permissions. Anyone could see (and accidentally edit) everything.
  • Files lived two places. The spreadsheet said one thing; Egnyte said another.
  • Revenue was a guess. Reporting required someone manually re-summing the sheet.
jobs_master_v37_DO_NOT_DELETE.xlsx
D14 =SUMIFS('jobs'!E:E,'jobs'!C:C,$B14,'jobs'!D:D,"Active")
Job #ClientStatusOwnerRev
12024-118Atlas ReActiveMike$8,250
22024-119Drake BldLocked?#REF!$12,400
32024-120VistaDoneSara#N/A
42024-121HQ RenoActiveMike$5,800
52024-122Phoenix??$3,100
62024-123Beacon#REF!Sara$9,750
jobs jobs_old backup_2023 DONT_TOUCH copy_of_copy
BEFORE
The solution

A role-based job tracker, with the file system already where their files lived.

The team didn't want to migrate off Egnyte — that was already their source of truth for drawings, deliverables, and client files. The win wasn't replacing Egnyte; it was making the job tracker speak to it natively.

Users
Admin
Engineer
Read-only
Web App
Auth + Roles
Login, permissions, audit log
Jobs Module
Import, view, create, update
Revenue View
Live totals, by status & owner
Sync layer
Storage
Egnyte Source of truth for all job files
The hard part

Keeping the app and Egnyte in lockstep, automatically.

The whole project was built around one principle: if a job exists in the app, the matching folder structure exists in Egnyte — and vice versa. No drift. No "where did that file go?" Slack messages.

  • Folder provisioning. Creating a job in the app provisions a structured folder tree in Egnyte the same second.
  • Bi-directional awareness. Files dropped in Egnyte show up against the right job inside the app.
  • Permission mapping. Roles in the app translate to access on the Egnyte side — one place to manage who sees what.
  • Bulk import. Existing jobs (and their existing folders) were imported into the app without breaking links.
JobLifecycle.php
// When a job is created in the app, mirror it in Egnyte
public function createJob($payload) {
    $job = $this->jobs->insert($payload);

    // Provision the canonical folder tree
    $this->egnyte->createFolderTree([
        '/Jobs/' . $job->number . '/',
        '/Jobs/' . $job->number . '/01_Drawings',
        '/Jobs/' . $job->number . '/02_Deliverables',
        '/Jobs/' . $job->number . '/03_Client_Comms',
    ]);

    // Map app roles to Egnyte permissions
    $this->egnyte->applyPermissions($job, [
        'admin' => 'full',
        'engineer' => 'editor',
        'readonly' => 'viewer',
    ]);

    return $job;
}

Simplified, but representative. Every job in the app has a guaranteed home in Egnyte — same names, same structure, every time.

What we built

The features that replaced the spreadsheet.

Role-Based Access Control

Admins, engineers, and read-only stakeholders each get a tailored view. Permissions can't be "accidentally" granted by sending a file.

Bulk Job Import

Imported the existing spreadsheet of in-flight jobs in one pass — including matching them up to their existing Egnyte folders.

Real-time Updates

When a job's status, owner, or revenue changes, every user sees it immediately. No "refresh the file."

Auto Folder Provisioning

Creating a job in the app instantly provisions a structured folder tree in Egnyte. Drawings, deliverables, client comms — always in the same place.

Live Revenue Dashboard

Revenue by status, owner, and timeframe — calculated live, never stale, never wrong because someone broke a SUMIF.

Audit Log

Every change attributed to a user with a timestamp. No more "who set this to Done last night?" mysteries.

The build

Stack chosen for boring reliability.

Drafting firms aren't interested in framework-of-the-month. They want something that works in five years and that another developer can pick up if needed. We built on a battle-tested stack with a clean separation between the app and the Egnyte sync layer.

PHP
MySQL
jQuery
Bootstrap
Egnyte API
Role auth
01

Discovery + Workflow Audit

Mapped the actual life of a job from quoting through delivery. Identified the Egnyte folder convention they were already (mostly) using.

02

Schema + Auth

Designed the data model around jobs, users, roles, and audit events. Built a secure login + permission layer first.

03

Egnyte Sync Layer

Wrote the integration that creates, mirrors, and permission-maps job folders inside Egnyte automatically.

04

Migration + Launch

Imported their live spreadsheet, reconciled it with existing Egnyte folders, trained the team, and went live without a hiccup.

The results

A system the team actually wants to use.

Real-time visibility

Job status and revenue update for everyone the second they change.

No more clobbering

Users edit at the same time without overwriting each other's work.

One source of truth

Jobs and files in lockstep — always — between app & Egnyte.

Reporting on demand

Revenue and pipeline numbers come from the system, not a person re-summing the sheet.

The biggest win wasn't even the dashboard — it was that we stopped having three versions of "the file." Everything just lives in the app and Egnyte now, and it's always in sync.

— Project sponsor, Drafting & Engineering Firm
Estimated ROI

The kind of impact this usually creates.

Exact numbers vary by team size and workflow, but for firms moving off a shared master spreadsheet, these are common outcomes we see after rollout.

15-25 hrs/week
Estimated time saved in coordination and status chasing
Fewer errors
Reduced operational mistakes from stale or conflicting data
Faster visibility
Near real-time project and revenue insight across teams
More scalable ops
Processes hold as project volume and headcount increase

Want a custom estimate for your team? We can map your current workflow and provide a practical ROI range.

Sound familiar?

Running your firm out of one big spreadsheet?

If you're a drafting, engineering, AEC, or services firm with a "master" sheet that everyone fights over, you're a great candidate for this kind of build.

  • 30-min discovery call, free
  • Written audit + roadmap
  • Fixed-price quote (if you want one)
  • Yours to keep, no obligation
We respond personally, usually within 24 hours. Your info is never sold or shared.
Got it. We'll be in touch within 24 hours with your audit.
Something went wrong. Email grant@websitegranted.com directly.