Generated page. Written from IdaMilk/Portal at commit 091267c on 2026-07-28, version 1.2.2. The README is the unmodified Vue/Vite scaffold template, so everything below is inferred from source.
Portal
What is it?
A Vue 3 single-page application serving portal.idamilk.com. It presents operational reports — production efficiency, lab results, milk shrink, diversion, SCC compliance — and a lightweight sales lead tracker, to an audience outside the plant floor.
Where SunApps is the operational tool people use to do work, Portal is where people look at what happened.
Purpose
Reporting data lives across NetSuite, the MES and SQL Server, none of which are places a manager or a customer-facing employee should be asked to go. Portal presents that data as fixed, shareable reports with week-based filtering and Excel export.
How it Works
Vue 3 with <script setup>, Vue Router with lazy-loaded report views, and Pinia. Every report view is code-split, so the initial load stays small even though there are a dozen reports.
The interesting structure is in the composables. useReportData centralises fetching and loading/error state; useWeekPicker handles the week-based period selection every report shares; useSortable and SortableTh.vue give every table consistent column sorting; useExcelExport turns the current view into a spreadsheet via SheetJS. A new report is mostly a matter of composing those four.
All data comes through Portal API — the front-end never talks to an internal service directly, and never sees internal URLs or field names.
Routing enforces authentication: unauthenticated navigation redirects to home carrying a redirect query, and several guards bounce invalid report keys back to the reports index.
Core Features
| Area | Screens |
|---|---|
| Reports index | Report picker |
| Production | Machine efficiency, finished product rework |
| Quality | Lab results, SCC compliance |
| Raw milk | Shrink — organic, A2 and conventional variants |
| Milk logistics | Milk trucks, milk diversion |
| Links | Link sheets index and per-sheet view |
| Leads | Lead list and lead detail, with note capture |
| Account | Login, set password, forgot password, reset password |
Three separate raw-milk shrink reports — organic, A2, conventional — reflect that the three streams are tracked and reconciled independently.
Tech Stack
| Technology | Version | Purpose |
|---|---|---|
| Vue | 3.5.34 | Framework |
| Vue Router | 5.1.0 | Routing with lazy-loaded views |
| Pinia | 3.0.4 | State management |
| Bulma | 1.0.4 | CSS framework |
| Font Awesome | 7.2.0 | Icons |
SheetJS (xlsx) | 0.18.5 | Excel export |
| Vite | (dev) | Build tool |
Branding assets in public/logos/ are the Ida Milk seal and wordmark — the same marks used by the marketing site and this wiki.
Interfaces
| System | Direction | Purpose |
|---|---|---|
| Portal API | outbound | All data, via src/api/client.js |
src/services/ splits that into leadsService, linkService and the general api client.
Operations
Three GitHub Actions workflows: production_deploy.yml, auto_tag.yml and first_build.yml — an auto-tagging release flow rather than the manual release-publish trigger the SunApps services use.
The repository carries a .claude/skills/verify/SKILL.md, so verification steps for this project are defined for Claude Code as a repo-local skill.
Repository
| Repository | IdaMilk/Portal |
| Version | 1.2.2 |
| Primary language | Vue / JavaScript |
| Files | 68 |
| Last activity | 2026-07-24 |
| Status | Active |
The README is still the stock Vue + Vite template. It describes neither what Portal is nor how to run it against the API. CHANGELOG.md is maintained, so release history is available even though the README is not.