Sample facility — not a customer site.
Site workbook
STACK OS

Integrations

Pulls into STACK. Nothing is sent back, and STACK keeps its own IDs.

Metrc

Sandbox application submitted — Ohio.
STACK does not send anything to Metrc today, and no key is needed yet. These are the calls STACK intends to make once a sandbox key is issued:
  • Read plants
  • Create harvest
  • Create package
  • Store the returned IDs on the STACK batch
Production connects only with a site’s own Metrc API key. STACK holds no shared key. Until then, harvests and packages are entered in STACK or imported from CSV.
Fallback: no Metrc connection (CSV)
Harvests can still be entered or imported from CSV on the Harvest page, and packages created from harvests on the Packaging & Inventory panel. Nothing about those paths depends on this connection.

Environmental data — generic BMS CSV

Reads a CSV export from a building-management or environmental controller (one row per reading: time, room or zone, and any of temperature, humidity, VPD, CO₂, PPFD) and adds the readings to the environmental log, where they are compared with each room’s targets like any other reading. Pull only: a scheduled run is a plain GET of the feed URL, or load a file now. Growlink isn’t connected because no Growlink credentials exist; when they do, it would be a second adapter here.
Last sync
Never
Next scheduled run
—
Rooms are matched by name (or the aliases above); readings from a zone with no matching room are skipped and listed, never added as a new room. Re-importing the same data adds nothing twice. VPD is taken from the file when present, otherwise worked out from air temperature and humidity and marked as computed. Targets are compared as of now (the room’s active stage target, else its default), not as of the reading’s own time. Scheduled runs happen while STACK is open.

QuickBooks — export only

Exports STACK’s cost records and labor dollars as a file you import into QuickBooks (Journal Entries import) or as a plain detail CSV. There is no connection to QuickBooks: nothing is imported (no invoices) and nothing is written back. Account and class names must already exist in QuickBooks.
Last export
Never
The journal has one entry per month: a debit line per cost type (and class) and one offset line, so each entry balances. Records with no date are left out, never guessed. Labor is only counted where the employee has an hourly rate. Re-exporting the same month reuses its journal number, so QuickBooks will flag it as a duplicate rather than double-count.

Green Leaf — employee sync: name, department, role, hourly rate, status, hire date

Last sync
Never
Last dry run (nothing fetched)
Never
Next scheduled run
—
STACK keeps its own employee ID and each record’s linked app account; a sync never changes either. It fills only the six fields above, and only where Green Leaf supplies a value. Scheduled runs happen while STACK is open. CSV import on the Employees page stays as the fallback.
What the last runs would pull / did pull

Glossary

Terminology note: "Run" and "Batch" mean the same thing everywhere in STACK — one actual instance of cultivation, in a real room, on a real timeline. Different screens use different words for historical reasons; this isn't two features, it's one. "Batch" is the preferred term going forward.
Live

Owner Command Center

What needs attention, what's at risk, what's costing money — the whole site in one screen
Site Health ?
— —
—
KPIs Off Target
—
Overdue Work
—
Rooms At Risk
—
Batches At Risk

What Needs Attention

What To Investigate Next

Off-Target KPIs

Every number above is read from the same Executive Scorecard and Room Rankings the rest of the platform uses — nothing here is calculated separately.

Harvest Intelligence

Same numbers as the full report, one click away

Strain Rankings

Best and worst performing strains, by composite score

Top Performers

Trending Up

Underperformers

Trending Down

StrainYield/PlantYield/SqftConsistencyRevenueHarvest Freq.TrendGrade

Room Rankings

Best and worst rooms, by composite score

Best Rooms

Worst Rooms

Operational Concerns

RoomYieldRevenueHealth ScoreEnv. ComplianceProduction EfficiencyHarvestsScore

Profit Per Room & Strain

Revenue, cost, and margin, broken down both ways

By Strain

StrainRevenueLaborInputCost/lbMargin

By Room

RoomRevenueLaborInputCost/lbMargin

Executive Pulse

What the site is worth right now
—
Est. flower value
—
Yield / ft²
—
Waste $
—
Labor (completed hrs)
—
Days to next harvest
0 / 0
Feed days logged
What's Winning
What's Losing
Supporting Analytics
Leaderboards & Momentum

Executive Command Center

The information most relevant to your role, first

Dashboard

What Needs Attention Today

Upcoming Attention Items

Daily Briefing

What happened yesterday, what's happening today, what changed since your last shift

Highlights

Yesterday

Wins (only when the data actually moved)

Exceptions

Shift Handoff Notes

Action Center

Every recommendation, with a real fix attached

Immediate Actions (Critical / High / Medium)

Upcoming Actions

Next 7 Days
Next 30 Days

Top 5 Actions That Most Improve Operational Maturity

Site Status

What's running right now
0
Open Work Orders
0
Overdue PMs
0
Repeat Failures (14 days)

Room Conditions

Every room, one line each — status, temp/humidity vs target, and anything that needs a look
Loading site data…
Room Temp vs target Humidity vs target VPD / CO₂ Alert

Attention Needed

Upcoming work, overdue items, and compliance

Today's Work

Feed, environmental, harvest, and clone actions due today
Expected Labor Today0 hrs

Benchmarking & Recommendations

What improved, what got worse, why, and what to change

Continuous Improvement Center

What improved, what got worse, why, and what to change -- one page, reviewed like a Cultivation Director would every morning.

What Improved

What Got Worse

Why

What To Change

Recommendations Engine

Problem, impact, and recommended action for every issue the system finds

Trend Detection

Yield, environmental, labor, and harvest trends, month over month

Yield

Environmental

Labor

Harvest

Harvest Prediction Accuracy

Forecasted harvest date and yield vs. what actually happened
—
Avg. Date Miss (days)
—
Avg. Yield Miss
—
Batches Compared
BatchStrainForecasted DateActual DateDate MissForecasted YieldActual YieldYield Miss

Strain Performance Profiles

Yield, revenue, consistency, cycle length, environmental sensitivity, and success rate
StrainYieldRevenueConsistencyCycle LengthEnv. SensitivitySuccess RateGrade

Site Benchmark Dashboard

Yield/sqft, yield/light, cost/lb, labor/lb, environmental compliance %, harvest success %, month over month
MonthYield/SqftYield/LightCost/lbLabor/lbEnv. ComplianceHarvest Success

Site & Performance Detail

Environmental, operational, and trend detail

Command Center — every room at a glance

Loading site data…
Operating normally

Operational Snapshot

Total dry yield
0 g
across 0 harvests
--
Clone success
0
Active batches
--
Avg cycle (days)
Waste
Yield / ft²

Performance

Efficiency, propagation, and strain-level results

Propagation Funnel

--
Rooting %
0
Clones cut
0
Plants harvested
--
Clone mortality rate
Plants harvested vs. clones cut is the whole-cycle survival check — a wide gap here usually traces back to rooting or mortality, not anything in veg or flower.

Strain by Strain

Strain Harvests Total dry (g) A+B (g) g / plant Clones cut Rooted Rooting % Mortality % Est. flower $

Process Map

Today's real batches on the blueprint

—

No Cultivation Programs yet — build one under Cultivation Program to see the site's process map here.

Production & Harvests

Active runs and what's coming out soon
0
Active Runs
0 hrs
Labor This Week
0 hrs
Labor This Month

Upcoming Harvests

Charts & Trends

The Cultivation KPI Scorecard — every major cultivation KPI at a glance

Cultivation KPI Scorecard

The primary weekly leadership view — every KPI computed directly from the same site data used across STACK's other reports, scored against simple, transparent targets. No AI scoring.
Site Score
—
Previous Period Score
—
Score Change
—
Top Performing KPI
—
Lowest Performing KPI
—
Management Attention Items
0

Comparison Mode

Executive Scorecard

Attention Needed

Overall Site Score Trend
KPI Trend Dashboard
Performance Ranking
Site Health Summary
Period Est. $
—
Value Over Time
Strain Mix — Est. Flower $
Dry Yield by Harvest
Feed vs. Runoff EC
--
Dry Yield by Harvest
--
Deaths by Day (Clone)
--

Workflow

0/8 — 8 steps remaining

Site Workflow Progress

The full path from an empty site to active production, in order. Whatever step is first incomplete is always marked Next — that is always the answer to "what do I do now."

Sites

Each site has its own set of Rooms and environmental targets. The site selected here (and at the top of every page) determines which Rooms show up below. Renaming the current site also updates the Workspace tab label and SOP header, same as before.

All Rooms

Every room in the selected site, its status, capacity, current environmental targets, and what's using it right now.
Add Room

New Room

Room owns site-level environmental defaults. A template's stage-specific target always wins where one is set; a Room's default only fills in where the template has nothing. This screen is UI only — it reads and writes the same Room records the rest of the app already uses.
DayNight
Temperature (°F)
Humidity (%)
Light intensity (PPFD)

Finance

User Management

NameRoleStatusCreated

Audit Trail

The full, searchable, hash-chained audit trail has its own page.

Site Economics

Your cost per gram
—
What you sell a gram for. Used for the Live ticker's schedule line.
The cost per gram you are trying to hit.

Backup & Recovery

Encrypting protects the file itself if it's lost or stolen; the passphrase is never stored anywhere, so write it down separately.
Recovery Health Score
    Recover from a file
    TakenTypeTierSizeIntegrity

    Audit Trail

    This is a real, hash-chained tamper-evident log — altering or deleting an event without recomputing every hash after it is detectable, and Verify Chain Integrity below checks exactly that. It is not tamper-proof: this code runs in the same browser a person with full device access also controls. It becomes genuinely legally defensible once anchored by the backend service planned for a later phase, not before.
    WhenEventUserRecordDeviceDetail
    Create a new cultivation program

    New Cultivation Program

    A Cultivation Program exists only to generate the Calendar. Enter stage durations once here; add and edit its Day-of-Life events under the Day of Life Events tab. STACK calculates every date automatically — there's nothing to schedule by hand, not offsets, not dependencies, not project logic.
    Day-of-Life events for this template are managed on the Day of Life Events tab, not here.
    No Cultivation Programs yet — create one above to see its setup progress here.
    All Saved Cultivation Programs

    Saved Cultivation Programs

    Every Cultivation Program this site runs — its stages, schedule, and how it's currently being used.

    Day of Life Events

    Every Day-of-Life event for this template, in one flat list, sorted by day. Assign each event to a stage, then give it a day range counted from that stage's own first day — "Veg Day 5" instead of a global day you'd have to calculate by hand — a single day is just a range where Start and End match. The read-only DOL column shows the global day this actually lands on, for cross-checking against Calendar. This data is what generates the Calendar and the Process Map. Display Name is optional and only affects the Process Map — Calendar, Scheduler, Logs, and reporting always use the full Name. Edits save on the Save button, not immediately.
    No Cultivation Programs yet — build one under Cultivation Program to manage its events here.
    →

    Process Map

    How this site operates this Cultivation Program, in Day of Life — every stage, every operational lane, aligned to one timeline. A blank cell means nothing happens there, not missing data. The Production Calendar is generated from this same data the moment a batch enters it.
    No Cultivation Programs yet — build one under Cultivation Program to see its Process Map here.

    IPM Program

    days — a spray ticket warns when the product shares a Rotation Group (mode of action) with an application in the same room within this many days. A warning can be overridden with a reason.
    No product is in the program yet. Add a product, give it its stage days, and pick how it goes on.

    Create Strain

    New genetics enter STACK here, and only here. Every other screen selects from what's created on this page — nothing elsewhere accepts a typed strain name.

    Active Strains

    Strain Name Breeder Lineage Flower Time Internal SKU Notes

    Retired Strains

    Strain Name Breeder Lineage Flower Time Internal SKU Notes

    Cut List Planner

    No strains in the plan yet. Click + Add Strain to get started — or Reset to demand defaults once there are active batches or upcoming harvests to plan around.

    Upcoming Cut Requirements

    Every cell on the Plan grid with a count, for the weeks in view: the strain, the week, the cuts, and the mothers that takes. Generate Batch on the Plan marks a requirement Scheduled and it stays here. A cell at zero is not listed.
    Filter
    No upcoming cut requirements match the current filters.

    All Cut Sources

    Every source of cuts in this site and where it stands: mother plants, cuts taken from a mother, and regular cuts (batches with no mother linked). Read from the same mother and batch records the rest of the app uses.
    TypeSourceStrainCutsMother cycleDateStatus

    Mother Plants

    Mothers are selected, not bought: pop seeds or run a clone batch, pick the best plants, and record them here against the run they came from. Every number below is real: Clone Count and Associated Yield/Cost read directly from real Clone Groups, Harvests, and Finance Records already linked to each mother. No score is invented. Cuttings per mother and the mother cycle belong to each mother; leave one blank to use the site default from the Plan tab.
    No Mother Plants recorded yet.

    Reports Library

    Generate once, download anytime
    →

    Search Reports

    Report List

    Facility Finance (8)

    Cost already logged against the facility, the room, the batch and the harvest.

    Facility Management (8)

    Equipment, rooms, failures and capital already logged.

    Executive Reports (8)

    High-level site intelligence and performance.

    Cultivation Performance (8)

    Yield, harvest, room, and cultivation analytics.

    Genetics & Propagation (8)

    Genetic, clone, and mother stock intelligence.

    Environmental & Resource Management (8)

    Environmental control and resource efficiency.

    Operations & Labor (8)

    Operational efficiency and labor tracking.

    Inventory & Post-Harvest (8)

    Inventory, cure, and availability intelligence.

    Compliance & Traceability (8)

    Compliance, auditing, and traceability.

    Saved Reports

    No saved reports yet — open a report from the list and save it.
    Report NameReport TypeGeneratedDate Range Covered

    SOP Repository

    Site standard operating procedures

    Add SOP

    No document content yet.

    Active SOPs

    SOP NameCategoryRevision Effective DateNotesFile

    Archived SOPs

    SOP NameCategoryRevision Effective DateNotesFile

    Facilities Management

    Work orders: requests, assigned work and preventive schedules

    Employees

    Operational workforce records — the source of labor attribution and, eventually, labor costing

    Add Employee

    Run Employee Sync

    Pulls employee data from your HRIS and updates STACK's employee records: name, department, role, hourly rate, status and hire date. STACK's own employee ID and each record's linked app account are never changed by a sync.
    Last sync
    Never
    Next scheduled run
    —
    Scheduled runs happen while STACK is open in a browser; a run that came due while it was closed happens the next time it opens.
    Fallback: Import from CSV (no HRIS, or one STACK doesn’t connect to yet)
    Columns, in order: Name, Department, Role, Hourly Rate, Status. First row may be a header (auto-detected).

    Employees

    NameDepartmentRole RateStatusHire DateWork orders

    Finance

    Cost per gram by batch, then the records behind it: Utilities, Testing, Consumables and Packaging — Labor (from employee rates), Nutrients and IPM are computed automatically and never entered here
    Cost per Gram by Harvest
    --

    Cost per gram by batch

    Labor is priced from employee rates. Utilities are shared across the harvests in the same span by dry weight.
    BatchDry (g)LaborNutrientsIPMUtilities & sitePackagingTesting & otherTotal$/g

    Add Finance Record

    Finance Records

    TypeAmountDate RoomBatchNotes

    COA Repository

    Certificates of Analysis, linked to Harvest

    Add COA

    COAs are linked directly to a Harvest record. The link works both ways — a COA added here appears on that harvest's own row in Harvest Data, and vice versa.

    Active COAs

    StatusCOA NameHarvestStrain Upload DateLabSample ID NotesFile

    Archived COAs

    COA NameHarvestStrain Upload DateLabSample ID NotesFile
    →

    Site Operations Calendar

    --
    Every task, every room, every batch for the period shown — this calendar is deliberately not organized by room.
    0 hrs forecasted this month
    Sun
    Mon
    Tue
    Wed
    Thu
    Fri
    Sat
    →

    Workspace

    BatchWork
    Pick a Batch — its room fills in on its own, and everything below becomes that Batch's work, already filtered, nothing to search for again.
    Filter by room
    →
    Correction tool. Clone batches and their schedules are created from the Cut List (Generate Batch on a cell, or Generate Production on a week). Use this page to fix a batch that already exists.
    Correct a batch schedule
    Re-generate the schedule of an existing Batch
    Every Batch Schedule belongs to a Batch — the Batch's own name and cultivar are what's shown everywhere else in the app (Calendar, Process Map, Dashboard). A schedule never stores its own copy of either.
    The Batch's cut date becomes Day 0 automatically.
    Batches

    Batches

    Compliance Readiness (operational, not a sync)

    Cut date Batch name Strains Clones cut Deaths Rooted Day Stage today Dome today Success Mortality Notes
    Active Batches

    Active Batches

    Completed / Archived Batches
    Clone success
    --
    Clones cut
    0
    Mortality rate
    0%
    Avg clones / batch
    0
    Top strain (rooted)
    --
    Most rooted
    Process reference, best practices & targets (yours to edit)

    Search Batch

    Find a specific batch's clone logs, history, statistics, and activity — selecting one filters the Daily Rooting Log and chart below to just that batch. Choose "All batches" to see everything again.

    Current Clone Batches

    Batches with an active clone or propagation run, at a glance — status, destination, and timing without opening a single log row.

    Daily Rooting Log

    Deaths and rooted counts roll up into the linked batch's totals. Rooted stays greyed out through Day 4 and unlocks Day 5.

    Quick Log — jump straight to today's entry

    Date Batch Strain Day # Dome status Feed ≤72°F? Watered Deaths today Rooted today Notes

    Deaths by Day (catches spikes early)

    Fertigation is planning — recipes and schedules. To log today's actual feeding, use Feed Log instead.

    Feed Schedule

    Build your own feeding stages for this Cultivation Program — name each one, give it a day range, and assign a recipe from Recipe Builder. Stages here are independent of the Program's own timeline and events.
    No Cultivation Programs yet — build one under Cultivation Program to plan its feed schedule here.

    Recipe Builder

    Build and switch between named recipes — Veg, Flower, Transition, Flush, or anything this site runs.

    Reservoir Setup

    100%
    Baseline EC of your plain water before nutrients — RO is close to 0, tap is often 0.2–0.5.
    The pH this recipe should be fed at. The Feed Log pre-fills it for any batch whose current stage uses this recipe.

    Feed Recipe

    ProductDose @ 100%EC @ 100%Add to reservoir
    EC @ 100% is how much this product raises EC (mS/cm) at its full-strength dose, mixed alone in your reservoir volume. Check the label, or dose it into plain water and read your EC meter — then enter that number here.
    mL added
    --
    % reservoir
    --
    Recipe EC
    --
    mS/cm
    Target pH
    --
    PPM 500
    --
    PPM 700
    --

    Active Rooms

    What room needs feed attention, at a glance.
    On track

    Feed Log

    This is where actual feeding gets logged. Recipes and schedules live under Fertigation.
    Avg runoff %
    --
    Target 10–20%
    Days logged
    0 / 0
    Days with a reading, of all rows
    Feed → runoff EC
    -- → --
    Average mS/cm
    Feed → runoff pH
    -- → --
    Average pH
    Veg / flower days
    0 / 0
    Days by stage
    mL added
    --
    % reservoir
    --
    Recipe EC
    --
    mS/cm
    Target pH
    --
    PPM 500
    --
    PPM 700
    --
    Narrows every row's batch dropdown to Batches currently in the selected room — already-entered rows are never hidden.
    Cycle start — · Veg — · Flower —
    Runoff should sit a little above feed on both EC and pH — a widening gap signals salt buildup or early lockout. Runoff % (volume, not concentration) checks the other half: target roughly 10–20%, and the number turns red outside that.

    Quick Log — jump straight to today's entry

    Date Batch Strain Day # Stage Feed EC Feed pH Feed vol Runoff EC Runoff pH Runoff vol Runoff % Notes
    Feed and runoff EC
    --
    Feed ECRunoff EC

    IPM Log

    Every application, scouting pass, or beneficial release, logged by room and Batch. Scheduled IPM activities from your Cultivation Programs already show up on the Process Map and Today's Tasks — this is the record of what was actually done.
    Date Room Batch Product / Beneficial Quantity Used Application Type Applicator Notes
    Spray Log

    Spray Ticket Log

    Every spray ticket generated, saved for compliance and audit retrieval. Click any ticket to reopen its full detail.
    DateRoomProductGallonsLabor

    Harvest by batch

    One row per harvested batch: weights, grade split, lot, hours and the packaging cost on the lot. Open a batch for its whole file. Use Harvest Room below to draft the record from the batch.
    BatchWet (g)Dry (g)A flowerB flowerExtractWasteLotBuck hrsTrim hrsPackaging

    Inventory Command Center

    Every package on this site, in one operational view -- what you have, what's available, what's blocked, and why. All numbers below read the same functions each package's own Details view reads; nothing here is calculated separately.

    Inventory Rollup

    By Site

    By Strain

    By Package Type

    Inventory Health

    Transfer Readiness (by package)

    Lineage Explorer

    Recent Inventory Activity

    Harvest Performance Summary

    Best harvest yet
    --
    Log a harvest to see it here
    0
    Harvests logged
    0 g
    Total dry biomass
    0 g
    Avg g / plant
    0 g
    Avg g / ft²
    0
    Avg total cycle days

    Harvest Log

    Post-Harvest Lot

    The real object between Harvest and Package: one lot, moving through Drying → Curing → Available (Bulk), tracking exactly what real post-harvest processing tracks -- moisture, burping, release readiness -- before anything gets packaged. Buck and Trim weights are read live from the existing Buck Log and Trim Log, not re-entered here.
    No Post-Harvest Lots yet. Select a completed harvest above to create the first one.

    Packaging & Inventory

    Every package traces back to the harvest and batch it came from -- created here, tracked here, no duplicate entry. This is the operational foundation for a future compliance sync, not a sync itself.
    No packages created yet. Select a completed harvest above to create the first one.

    Trimming Log

    Every trim session, by who did it and how much they finished — g/hr is computed live from Amount Trimmed ÷ Hours, not stored, so it's always consistent with whatever the two fields actually say. Scheduling a "Trimming" event on a Cultivation Program's Day-of-Life Events makes it show up on the Process Map and Calendar like any other stage activity; this log is the record of what actually happened, the same relationship the IPM log already has with IPM Activity events.
    No trim sessions logged yet. Use "Add Session" below to log the first one.
    Employee Productivity Summary
    No sessions logged yet.

    Bucking Log

    Every bucking session, by who did it and how much they finished — g/hr is computed live from Amount Bucked ÷ Hours, not stored. Scheduling a "Bucking" event on a Cultivation Program's Day-of-Life Events makes it show up on the Process Map and Calendar the same way; this log is the record of what actually happened.
    No bucking sessions logged yet. Use "Add Session" below to log the first one.
    Employee Productivity Summary
    No sessions logged yet.

    Log VPD Reading

    Active batch: —
    %
    °offset
    Tag to a specific batch
    Only needed if this reading belongs to a different batch than the one the system finds for this room.
    Logs the temperature, humidity, leaf offset, and VPD already shown on the gauge — nothing to re-enter. Requires a Room — nothing else is required to save.

    Live Reading

    --kPa
    --

    Temperature × Humidity Map

    Log CO₂ Reading

    Active batch: —
    Tag to a specific batch
    Only needed if this reading belongs to a different batch than the one the system finds for this room.
    Requires a Room — nothing else is required to save.

    Live Reading

    --ppm
    --
    Elevated CO₂ only helps if light, temperature, and airflow can keep up with it — the gauge reads whatever's entered above against the range flowering-stage cultivation typically targets.

    Log PPFD/DLI Reading

    Active batch: —
    Adds a specific height suggestion below, using the inverse-square relationship between distance and intensity.
    Tag to a specific batch
    Only needed if this reading belongs to a different batch than the one the system finds for this room.
    Logs the PPFD, photoperiod, and DLI already shown on the gauge — nothing to re-enter. Requires a Room — nothing else is required to save.

    Live Reading

    --μmol·m²·s⁻¹
    --
    --
    DLI mol/m²/day

    Photoperiod × PPFD Map

    Temperature, Humidity, and PPFD readings are logged directly from the VPD and PPFD/DLI calculators; CO₂ readings are logged from the CO₂ section on the VPD page. This page is the history of everything that's been logged, viewable by batch, room, and date range.

    At a Glance

    —
    Readings Today
    —
    Readings This Week
    —
    Rooms In Target
    —
    Rooms Needing Attention

    Current State by Room

    Target vs. most recent reading, right now — the same comparison Environmental Status shows on the Dashboard, reused here on the page that actually owns the logging.

    Data Log History

    Filter
    Temperature, Humidity & VPD
    Date & TimeBatchStrainRoomTempRHLeaf OffsetVPDLogged By
    PPFD
    Date & TimeBatchStrainRoomPPFDPhotoperiodDLILogged By
    CO₂
    Date & TimeBatchStrainRoomCO₂Logged By