Loading…
Individual operatorOperador individual phase 1
Registro individual · King Kone, Hash Hole, diamond dusting
Line / crewLínea / equipo phase 2
Registro de línea · one record per line, per WO, per shift
Machine + attendantsMáquina + operarios phase 2
The counter reports the machine, the labour follows the people
Batch / weight phase 2
Processing · measured in pounds and yield, never in pre-roll units
Lost time phase 3
Tiempo perdido · hours consumed with no output. This is what explains a bad rate.
Chris estimated roughly 90 minutes lost per changeover. This turns that estimate into a measured number.
No clock-in or clock-out fields. ADP already records those to the minute and handles the Thu–Wed workweek and 40-hour threshold. This captures which station the time went to, which is the one thing payroll cannot tell you.
Logged production
Live from the database. Seeded with 91 real pre-roll sessions from Frank's leaderboard.
| Date | Type | Station | WO | Who | Labour hrs | Wages | Units | Units/hr |
|---|
Counted once, here. Every other stage contributes hours and wages only, so nothing is double counted.
Wage figures use placeholder rates
Real per-person rates need the ADP pull. Station bands from the transcript are used meanwhile: $17.50 King Kone, $18 Hash Hole, $17 Infusion, $16 Processing, $15.50 Packaging and Fulfillment, $15 Cleaning. Overtime premium is not modelled, so wage figures are optimistic.
Operator performance vs. guardrails
Destino's thresholds: under 650/hr retrain, under 550/hr reassign. Individually-attributable stations only.
| Operator | Logged as | Units | Hours | Rate/hr | Sessions | vs 980 | Status |
|---|
Source hours are clock-in to clock-out with no lunch deducted, so true rates are likely higher than shown.
Overtime by pay cycle
Real ADP data. Overtime is per workweek (Thu–Wed, 40 hrs), never per pay period.
| Check date | Employees | With OT | OT hours | OT cost | Avg $/OT employee |
|---|
Unresolved: whose payroll is this?
These cycles are labelled Wrapped Solutions LLC. The timecard and skills matrix say Mia Retail Systems. Angel and Frank email from majorleaguetrees.com. The Mar 19–Apr 1 timecard shows 3 employees in overtime; these show 59, 75 and 71.
New-operator ramp curve
Measured during the pre-weigh rollout. Old-system baseline 779/hr.
My availabilityMi disponibilidad
Mark the hours you can work. Click and drag across the grid, drag again over marked hours to clear them · Marque las horas que puede trabajar
Weeks run Thursday to Wednesday, matching the ADP workweek, so availability lines up with how overtime is calculated. The day window is 6am to 10pm, which covers the earliest and latest activity in the real logs (7:15am starts, PM shifts running to 8:20pm).
No login in this prototype
Anyone can pick any name from the dropdown. A real deployment needs authentication, and the open question of whether operators enter this themselves on personal phones or a lead enters it for the line, which is still tied to the unresolved floor phone policy.
Team coverage, hour by hour
How many people are available each hour, coloured by whether enough of them can actually run a phase-1 station
Numbers are people available. Colour reflects how many of those are rated 3 or higher at King Kone or Hash Hole. An hour with people but nobody qualified cannot run pre-roll, and that is invisible if you only count bodies.
Submissions
| Employee | Hours available | Note |
|---|
Select work orders
These will share one workforce. Nobody gets booked into two places at once, and the 40-hour cap applies across everything you tick.
0 selected
Weeks run Thursday to Wednesday, matching the ADP workweek used for the 40-hour overtime threshold, so these buckets line up with payroll.
Units per labour hour
Dashed line is the 779/hr old-system baseline
Units per wage dollar
Per $20 and per $15 of wages paid
Labour hours
Total logged against hours lost to changeover, downtime and material wait
Coverage and volume
Stations reporting, and entries logged per week
Week by week
| Week (Thu–Wed) | Units | Labour hrs | Wages | Units/hr | Per $20 | Per $15 | Lost hrs | Rework | Stations | Entries |
|---|
Accounts
Change a role and it takes effect on that person's next request. Deactivating someone also ends their active sessions.
| Login | Role | Linked employee | Status | Created | Last sign-in |
|---|
Add an account directly
For people who are not on the production roster: other administrators, office staff, you.
Floor staff should sign up themselves and be approved above, so the roster link is theirs and nobody
is guessing which name belongs to whom.
Creates an employee record so payroll and ADP line up later,
marked not schedulable so they never enter the station scheduler or the unrated-operator count.
Created already approved, because an admin creating an account is the approval.
Leave both name fields blank for someone who does not work for Destino at all, such as an outside consultant.
What each role can do
| Capability | Operator | Lead | Supervisor | Admin |
|---|
Enforced on the server, not just hidden in the interface. A role that lacks a capability gets a 403 even if it calls the API directly.
Testing several roles from one inbox
Plus-addressing works, so
pc+lead@tsl.io and pc+supervisor@tsl.io are distinct accounts that both deliver to pc@tsl.io. The email validator here accepts + deliberately.
Read live from the database
This is generated from
sqlite_master and PRAGMA table_info at request time, so it always reflects the actual schema rather than documentation that has drifted from it.Design notes
- One entries table, five shapes. Rather than a table per capture mode,
kinddiscriminates and the unused columns stay null. Keeps the KPI queries to a single scan and makes adding a sixth setup cheap. - countable is the double-count guard. Batch and lost-time rows carry hours and wages but never units, so they can only ever move the denominator.
- People are a join table, not a column.
entry_peoplehandles one person on an individual entry and fifty on a packaging line with the same structure. - raw_name preserves the original. An unresolved leaderboard nickname is kept alongside the employee id, so confirming a mapping later can backfill history without losing what was actually written down.
- Skills store only non-zero ratings. An absent row means unrated, which is different from a zero and matters given 53 people currently have no rating anywhere.
- No wage rates on employees yet.
hourly_rateis null by design; rates currently come from the station band instations.default_rateand get replaced per person once ADP is connected.
Totals recomputed from raw ratings
The source spreadsheet's own Total Score column is broken on several rows. Carrazana has a 4 in King Kone totalling 0; Carvajal a 5 in Cleaning totalling 0; Castellon a 3 in King Kone totalling 0. The database recalculates from the underlying per-station ratings, so these figures differ from the spreadsheet's own summary line.
Coverage by station
Qualified = rated 3+. Trainers = rated 5.
| Station | Mode | Qualified | Trainers | In training | Avg | Depth | Risk |
|---|
Cross-training
Stations each person can run independently. Low cross-training is the mechanical reason overtime is structural: you cannot move people to where the work is.
| Multi-station operators | Count | Qualified at |
|---|
Why phased
A form does not create a counting habit. Phase 1 digitises something they already do on paper. Each later phase adds one new behaviour, only once the previous one is sticking.
Phase 1 — replace the paper pre-roll log start here
King Kone and Hash Hole · individual mode
- Replaces exactly what Frank already collects on paper and photographs. No new behaviour.
- Entered by the line lead, not 120 operators, so roughly five or six devices, which sidesteps the unresolved floor phone policy.
- Kills the transcription step and the legibility problem the analysis file admits to.
- Success test: one full pay cycle logged with no paper fallback.
Phase 2 — add packaging, machines and processing next
Line, machine and batch modes
- Where Chris says the real scheduling difficulty lives, and where there is currently no data at all.
- One record per line per shift, not per person.
- Unlocks units per labour hour for a whole work order rather than just its pre-roll portion.
- Success test: a full work order costed end to end.
Phase 3 — add rework and lost time later
- Genuinely new behaviour, so it needs its own reason to exist before it will stick.
- Line-level counts at end of shift. Per-person attribution is neither realistic nor necessary.
- Without it, units per hour rewards speed over quality, and bad rates stay unexplained.
- Success test: a rework figure that moves when process changes, rather than sitting at zero.
Decisions Destino still owns
- Who enters the data, and does the floor phone policy allow it?
- Who keeps the roster current? The skills matrix "Last Updated" field is blank.
- Which legal entity is being scheduled? Three names appear across these files.
- Where this lives for real: this SQLite database, or the Postgres already scoped in the foundational infrastructure work.
The join is better than expected
Skills matrix and timecard share the same formal naming convention. After normalising case, punctuation and word order, 65 of 77 timecard names match the skills matrix exactly, with no fuzzy matching. Only the pre-roll leaderboard uses shop-floor nicknames.
Nickname → payroll name
Confirming a mapping rewrites every historical entry logged under that nickname.
| Leaderboard | Maps to | Confidence | Issue |
|---|
On payroll, absent from the skills matrix
Drawing hours with no row in the matrix at all, so invisible to any skills-aware scheduler.
In the skills matrix, rated at nothing
On the matrix but with no rating at any of the seven stations. Either genuinely untrained, or the matrix was never filled in for them. This is the larger of the two gaps.
What is real
| Data | Source file | Period |
|---|---|---|
| 91 pre-roll sessions | Pre-Roll_Leaderboard.xlsx | Apr 9–27 2026 |
| Ramp curve, old/new baselines | PreRoll_Production_Analysis.xlsx | Feb–Apr 2026 |
| Roster, 7 stations, ratings | Station_Skills_INTERACTIVE - Master.xlsx | undated |
| Payroll-only names, workweek definition | Timecard_Summary_2026-03-19_to_2026-04-01.xlsx | Mar 19–Apr 1 2026 |
| 3 cycles OT hours and dollars | Wrapped Overtime 3-Cycle | Jun 26–Jul 24 2026 |
| Guardrails 650/550, 40hr threshold | Meeting transcript + timecard header | — |
Wage rates are the only invented figures, and they are station bands from the transcript rather than per-person rates.
What still cannot be computed
Units per labour hour for a complete work order. The datasets cover non-overlapping windows and production data exists for one station out of seven. Nothing analytical fixes that; one cycle of phase 1 plus phase 2 does.
Open questions
- Are Mia Retail Systems, Wrapped Solutions LLC and Major League Trees separate payrolls?
- Why do 11 people on payroll have no skills-matrix entry?
- Valentina anchors the flagship old-vs-new comparison but appears on neither roster.
- Fulfillment shows zero qualified staff. Real gap, or an unfilled column?
- Processing is tracked as pounds per hour per operator. Batch mode, or individual like pre-roll?
- Is rework counted anywhere at all today?