v1.0.0 — Portfolio OS
First complete release. Built as seven milestones, each shipped and verified before
the next began.
Milestone 1 — Foundation
- Laravel application skeleton, authentication, password reset.
- Many-to-many roles and permissions: 49 granular permissions across 5 seeded roles
(admin, partner, supervisor, staff, accountant). Effective permissions are the union
of a user's roles; norolecolumn and no role switcher. - User administration, activation state, and an app settings store.
- Application shell: navigation rail, top bar, command palette, mobile drawer and
thumb bar. - Design system: tokens, dark mode, density modes and a Blade component library.
- Seeders for roles, permissions, settings and task templates.
Milestone 2 — Projects & credentials
- Project portfolio CRUD with status, CMS, niche, monetisation state, acquisition cost.
- Per-project ownership shares validated to total 100%, and team assignment that scopes
staff visibility. - Encrypted credential vault, with reveal gated by its own permission and every reveal
written to an audit log. - Scheduled credential expiry alerts with configurable warning windows.
- Portfolio dashboard.
Milestone 3 — Work
- Tasks with checklists, priorities, due dates, attachments, comments and evidence
on submit. - Recurring task generation and reusable task templates.
- Article pipeline from brief to published, with word-count targets and per-article cost.
- Link building log with per-project monthly budgets.
- A single keyboard-driven approval queue across tasks, articles and links, optionally
raising the matching expense on approval.
Milestone 4 — People
- Attendance derived from the first login of the day, with a configurable late hour,
plus supervisor leave and holiday marking. - Login history with IP and user agent.
- Daily work logs.
- Monthly scorecards aggregating output per person, costed against mixed pay rates
(monthly salary and/or per-article, per-link, per-task).
Milestone 5 — Money
- Revenue per project per month, entered directly or imported from CSV, with the FX
rate frozen on each row so historical figures never re-convert. - Direct and shared expenses, receipt uploads, recurring expense templates, paid state.
- Monthly profit and loss with shared costs allocated across projects in proportion
to revenue. - Manual partner distributions computed from ownership shares; approving a run locks it
permanently, and corrections are new adjusting entries. - Partner ledger and per-partner statements for capital, withdrawals and distribution
credits. - All monetary values stored as integer minor units.
Milestone 6 — Deployment
- FTP packaging scripts for shared hosting (
deploy/package.sh,deploy/package.ps1)
producing an app archive and a public archive. - Dual-path
public/index.phpthat works both in the split shared-hosting layout and
locally. - Token-gated
/_ops/{action}maintenance route for hosts without SSH, disabled
entirely when no token is set. storage:linkfallback that copies whensymlink()is unavailable, plus a public
media fallback route.- Pure-PHP database backup command requiring no
mysqldumpor shell access. DEPLOYMENT.md.
Milestone 7 — AI assistant
- Optional natural-language "ask your data" assistant and drafted monthly summaries,
completely hidden when no provider key is configured. - Questions map onto a fixed whitelist of read-only report methods that re-apply the
caller's permissions and project scope; a model never generates executed SQL. - Credentials, passwords, keys and bank details are stripped before any prompt is built.
- Monthly spend cap, per-request token and cost logging, and response caching.