Back to milestra.app
Resources
Changelog
Every notable change to Milestra, newest first. Shipping notes are also posted in-app under Notifications for workspace admins.
Check-ins, alignment map, donor reporting and a public API — 1.8.0September 29, 2026
Added
- Weekly check-in: one screen to update your key-result numbers, rate confidence (on track / at risk / off track), tick off actions and flag blockers — about a minute a week. Streaks, a team completion view for managers, blockers on the dashboard and check-in history on every goal.
- AI goal writer: describe a goal in your own words and get a measurable objective with key results, milestones and first actions. Every goal also shows a 0–100 quality score with specific fixes.
- Template library: 24 complete goal templates across nonprofit, education, health, startup, sales, marketing, people, operations, customer and finance, plus a public gallery.
- Alignment map: the whole goal tree coloured by health, with zoom, collapse, filters, an outline view for phones and PNG export.
- Donor reporting: logframe levels, indicator details (code, unit, means of verification, data source, frequency), results broken down by gender, age band, location or any custom breakdown, a printable donor report and indicator CSVs.
- Import from Viva Goals, Perdoo, Weekdone, Profit.co and other OKR tools — objectives, key results with their values, and initiatives come across in one go.
- Public REST API with scoped, hashed API keys and per-key rate limits, plus signed webhooks for goal created, key result updated, check-in submitted and action completed.
Fixed
- Templates and AI suggestions now create real key results and action steps on the goal instead of loose workspace KPIs.
- Imported key results keep their start and current values instead of resetting to zero.
Launch hardening — 1.7.0September 28, 2026
Added
- Weekly digest to Slack and email, CSV export of goals, key results and actions, and a printable board report.
- Live status page, error monitoring, automated tests on every change, and a mobile menu on the website.
Security
- AI features require sign-in and have daily limits; deletes are restricted by role; the audit log can't be edited; security headers added; sessions refresh safely.
Import goals from a spreadsheet or bulk paste — 1.6.1September 19, 2026
Added
- Goals can now be imported in bulk from the goals list. A new “Import goals” button opens a modal that accepts a pasted spreadsheet-style table or an uploaded `.xlsx` / `.csv` file.
- The importer detects headers and maps them to goal fields (title, description, period type/name, parent title, department, owner email, priority, category, scope/kind, start date, evidence required) plus repeatable `key_results` and `action_steps` columns. Unknown columns are rejected.
- A pre-flight check runs before anything is written: every included row must have a valid title and period, the parent title (if given) must resolve to an existing goal, department and owner email must resolve, and duplicates are flagged. The dialog reports “X valid, Y invalid” with per-row errors and warnings before confirm.
- On confirm, goals are created in one server write with each goal's key results and action steps attached, owners assigned (skipped for annual/company goals, matching the create dialog), and any pre-existing goal whose title matched a `parent_title` is reconnected as the new parent. Sub-goals inherit the imported period.
Goals now track themselves — 1.6.0September 18, 2026
Added
- Goal progress and status are computed automatically from everything tracked under a goal — key results, action steps, verified evidence, approvals and sub-goals. Completing a single action step moves the goal's progress and flips its status off “Not started” without anyone opening the edit dialog; verified evidence and approved sign-off stages each contribute their share; sub-goals roll up by weight.
- Parent goals inherit all of it: every change under a goal re-derives that goal and cascades up the whole parent chain, so an annual goal reflects the quarter beneath it the instant a step is ticked.
- Progress reaching 100 completes a goal automatically; a rejected approval, unverified evidence or an un-completed step un-completes it again. Manual health refinements (On track, Behind, At risk) survive until the goal actually completes, and “Abandoned” is never overwritten — it is now a deliberate button in the edit dialog, alongside a “Reactivate” action to leave it.
- The edit dialog no longer asks for progress or status by hand: both appear as read-only “tracked automatically” panels showing the live values, with the weight field remaining for parent rollups.
- The goal page updates live — the header progress bar, status badge and sparkline refresh the moment anything under the goal changes, with no reload.
- Evidence linked to a key result or action step counts toward that goal's progress (previously only goal-level evidence did), and the backfill recomputed every existing goal from its artifacts on upgrade — goals with nothing trackable kept their hand-set values.
- Fixed a latent crash in the goal completion gate: completing a goal with no approval rows (or evidence attached only to a key result / action step) could raise “query returned no rows” or be wrongly blocked. The gate now accepts goals with no approvals requested, counts evidence anywhere under the goal, and if it still refuses completion (e.g. evidence required but nothing verified), automatic tracking holds the goal at 99.9% instead of failing the save.
Goal periods for every cycle, not just the ones you created — 1.5.5September 17, 2026
Added
- Creating a goal now uses a two-level period picker: choose a period type (Annual, Quarterly, Monthly, Weekly), then the specific cycle. Previously the dropdowns only listed rows already in goal_periods, so a fresh organization saw just Annual and one quarter and could pick nothing else. The picker now derives canonical ranges — this year and next for annual/quarterly/monthly, and nine weeks centred on today for weekly (e.g. September 2026, Week of Sep 14, 2026), confirming the exact dates under the field.
- Periods are resolved-or-created on save, so choosing a month the organization has never used creates that goal_periods row automatically instead of failing. Ranges that already exist are reused by exact date match, so an organization's own naming (Annual, Q3) is preserved rather than duplicated, and a race with a concurrent insert falls back to the existing row.
- Closed periods appear in the list but are not selectable, with an inline explanation, so a goal can no longer be aimed at a finished cycle.
Invitation links now land on “set your password” — 1.5.4September 17, 2026
Fixed
- Accepting a team invitation no longer dumps the invitee on the login page. The invite email pointed at /auth/callback, a server route — but an invite is created server-side, so the link returns the session in the URL fragment, which browsers never send to a server. The route saw no code, failed the exchange, and redirected to /login — leaving the invitee with an account but no password and no way in. Invites now point at the client page /auth/set-password, which can read the fragment and store the session.
- /auth/set-password now consumes the invite fragment explicitly and scrubs the tokens from the address bar, instead of racing the Supabase client's own URL detection. Previously the session check could run a tick too early and show “your session has expired” on a perfectly valid invite link.
- Invitees now get their profiles row (with the inviting organization and role from the invite metadata) when they accept in the browser. Links that complete client-side never passed through a server route, so the row was never created and the new member could land in the app with no organization.
Signup confirmation notice — 1.5.3September 17, 2026
Fixed
- New accounts now see the “check your inbox” notice after signing up instead of being dropped straight on the login page. Email confirmation is on, so a brand-new signup comes back with no session — the old code still pushed the user to onboarding, which the middleware bounced to login. The page now detects the sessionless response and shows the verification step, with a resend button, a 60-second cooldown, and a “use a different email” escape hatch.
- Verification and reset links now return the user to workspace setup (/auth/callback?next=/onboarding) instead of the dashboard, so a freshly confirmed account continues straight into onboarding.
Due-soon reminders restored — 1.5.2September 17, 2026
Fixed
- Restored the “due soon” heads-up: owners of action steps and goals falling due within three days are notified again. The escalation rewrite had left the daily reminder job overdue-only, so items approaching their deadline stopped warning anyone. The overdue nudge and the escalation ladder are unchanged, and each item still earns exactly one notification.
Security and performance hardening — 1.5.1September 17, 2026
Security
- Escalation rules (the overdue → manager → department ladder) can now only be changed by organisation admins — previously any member could modify them through a direct API call, even though the interface hid the tab.
Improved
- New indexes on the hottest lookup paths — goal ownership and commitments by organisation — keep lists and the daily escalation sweep fast as data grows.
- The search page shows a loading skeleton instead of a blank screen while results load.
KPI history and trends — 1.5.0September 17, 2026
Added
- KPI cards show a trend sparkline plus the latest movement, coloured by whether it helps or hurts the target — respecting “more is better” and “less is better” KPIs.
- Every KPI value change is recorded automatically by the database, and the KPI list refreshes itself live as values change.
- New KPIs get an initial history point at creation, so the trend line has data from day one.
- Annual goals are no longer owned by individuals — the owner picker is hidden for annual periods, and the database rejects owner assignments on annual goals. Quarterly, monthly, and weekly goals keep individual owners.
- The notification bell updates instantly via realtime push instead of polling the server every minute.
Fixed
- The KPI history triggers had never been applied to the live database, so history silently accumulated nothing; KPIs and their history are now also on the realtime publication.
Org goal templates — 1.4.0September 17, 2026
Added
- A Templates tab in Settings where admins create and manage their organisation's own goal templates — suggested KPIs, milestones and actions included.
- “Start from a template” in the goal-create dialog: picking one pre-fills the title, description, category and the full breakdown, and the suggestions are created alongside the goal.
- Templates are served from the database — your organisation's own plus the bundled globals — with the built-in list kept as an offline fallback.
Fixed
- The template picker existed but was never mounted, so starting a goal from a template had never actually been reachable; it is now wired into the create dialog.
Search, realtime and list polish — 1.3.0September 17, 2026
Added
- A cross-entity search — type in the header (or press ⌘K) to find goals, KPIs, meetings, commitments and people at once, with keyboard navigation and a full results page.
- A shared search API scoped server-side, so results always respect row-level security.
- Live updates: goals, commitments, meetings and My Work refresh themselves when teammates make changes — no manual reload.
- Client-side pagination on the goals, team and meetings lists, with an accessible “Showing x–y of z” summary.
Improved
- Empty states on the dashboard, reports and My Work now carry a direct call to action — create your first goal, KPI or commitment from the spot where the empty list appeared.
Fixed
- Databases provisioned before the gap-closure migrations were missing the commitments table, so the Commitments page silently showed nothing; a catch-up migration creates it, and the realtime migration now skips tables it cannot find instead of aborting.
- The organisation-health view was uncreatable on any database because it referenced an undefined function; the helper is now defined and the view inherits table row-level-security via security-invoker semantics.
Chart series and card header controls — 1.2.1September 17, 2026
Added
- A four-colour chart palette — teal, coral, lime and violet — that works in both light and dark mode.
- A period selector on the dashboard's Goals by Period chart, so you can narrow it to the last 8 or last 4 periods.
- The dashboard greeting now highlights one phrase and shows how many goals are off track.
Improved
- Chart colours now come from the same design-token layer as the rest of the interface, so they stay legible in both modes.
Fixed
- A donut chart with no explicit segment colours would render as a single-colour ring.
Two-mode design system — 1.2.0September 17, 2026
Added
- A Light/Dark switch in the app header, on every page. Your choice is remembered; until you make one, Milestra follows your operating system.
- A shared design-token layer that drives every surface, border, text colour, chip tint and chart stroke in both modes at once.
Improved
- Dark mode now works properly. It previously relied on the operating system alone, and part of its stylesheet could never take effect.
- Sidebar and mobile navigation highlight the current page with the brand lime-to-teal gradient.
- Cards use a single hairline-border treatment instead of heavy shadows, so content reads first and chrome recedes.
- Status chips are soft tonal pills rather than ringed outlines, and keep their meaning: teal for completed, sky for on-track, amber for in-progress, red for at-risk.
- Buttons, inputs, tabs, selects, dialogs and progress bars share one radius, focus ring and surface scale.
- Charts pick up the brand accents and adapt to the active mode, including gridlines and axis labels.
- The marketing site is unchanged — it is intentionally always dark.
Fixed
- Text that was previously unreadable in dark mode (dark ink on a dark canvas) now resolves to the correct foreground colour.
- Nested panels inside cards no longer disappear into their parent surface.
Polish, performance and trust — 1.1.0September 15, 2026
Improved
- Real skeleton loaders on every list, board and detail view instead of text placeholders.
- The goals list now renders server-side — content paints on first load instead of after a client fetch.
- Milestra branding and your workspace name appear instantly in the app sidebar, with no flash on load.
- Status labels are consistently humanized everywhere (e.g. “At Risk”, “In Progress”).
- Password strength indicator on sign-up with clear requirements.
- Destructive actions (departments, teams, KPIs, evidence) now ask for confirmation.
- Mobile navigation promotes KPIs and Reports to primary slots.
- A friendly error boundary keeps a crashed widget from blanking the whole page.
Fixed
- Duplicate date display on meeting cards.
- Footer links now point at real pages, including Privacy, Terms and DPA.
- Explicit column selects on reports queries to cut payload size.
Initial release — 1.0.0August 2026
Platform
- Cascading goals (annual → quarterly → monthly → weekly) with key results and action steps.
- KPI tracking with multiple measurement types.
- Meeting agendas, notes and action-item extraction.
- Evidence vault with AI-assisted verification.
- Reports and progress dashboards for managers.
- Team management with departments, teams and invites.