Changelog

What we shipped

We're building Gryphin in public. Every release, every fix, every improvement — dated and out in the open.

Work codes — every card and checklist item has a name you can say out loud

Boards now derive a short prefix from their name, and every card and checklist item gets a number under it: GRY-42 for a card, GRY-42.3 for its third checklist item. Numbers come from per-parent counters and are never reused, so a code you paste into Slack still points at the same thing a year later. Checklists got the bigger upgrade underneath — items now carry groups, assignees, due dates, estimates, and a required flag that stops a card leaving a column until it is ticked.

  • NewBoard-scoped codes: a board named "Gryphin Web App" becomes GWA, one-word names take their first letters. Cards number sequentially; checklist items number under their card.
  • NewCodes are denormalised onto cards and subtasks, so search, the list surfaces, an agent or a Slack paste can match one without a join. Triggers keep them correct when a board prefix changes or a card moves board.
  • NewRequired checklist items gate column moves — mark a step required and the card refuses to reach Done until it is done. Definition-of-done the board enforces.
  • NewChecklist items now carry groups, assignees, due dates and estimates, and can be promoted into a full card.
  • ImprovedClick any code to copy it.
  • ImprovedCodes render across every card style and on subtask rows.

Eight more card types, because not everything is a bug or a feature

The card-type vocabulary was built for delivery work — bug, feature, improvement, research, design, docs, testing, chore. Everything else was being re-invented as a free-form label on every board. Admin, meetings, support, maintenance, sales, marketing, finance and content are now first-class types with their own icons and colours.

  • NewEight business and ops card types: Admin, Meeting, Support, Maintenance, Sales, Marketing, Finance, Content.
  • NewDefault label presets so a new board starts with something sensible instead of an empty picker.
  • ImprovedEvery type chip clears AA contrast (4.5:1) behind white text — the business family reads as a distinct group from the delivery types.

Payments ledger, voiding, and the fixed-cost side of profitability

Invoices can now record part-payments and have them voided with an audit trail, and workspaces can log their recurring overheads — the subscriptions and fixed costs that decide whether a month was actually profitable, not just busy.

  • NewPayments ledger against each invoice, with voiding and a reason.
  • NewWorkspace subscriptions: log recurring costs on any cycle (weekly, monthly, quarterly, annual) and see them normalised to a monthly figure against margin.
  • NewCross-workspace invoice roll-up with a per-contributor breakdown.

Members can invoice their own time

Until now only a workspace manager could raise an invoice, which left contractors either chasing someone else or going outside the tool entirely. A member can now bill their own hours — and only their own. The restriction is applied server-side when the entries are read, not trusted from the client, so it cannot be talked around.

  • NewMembers can issue an invoice for their own tracked time from /invoices/self.
  • NewOptional invoice visibility for members, off by default, with access control gating on every route.
  • ImprovedThe entry filter runs server-side: a member's invoice can only ever contain their own hours.

Voice and video calls, and you can see when a message was read

Messaging grew calling. A call is keyed by scope rather than by a chat table, which is what lets the iOS app ring from a DM and this app answer it from a workspace thread — either side can start or pick up the other's call. On iOS it rings through the phone's own call screen via CallKit, so it behaves like a real call rather than a notification you might miss.

  • NewReal-time voice and video calling with an in-app overlay and push-triggered ringing.
  • NewCallKit support on iOS — incoming calls use the native call screen, and work from the lock screen.
  • NewRead receipts across direct and group chat, updating live.
  • ImprovedEvery call mutation is a SECURITY DEFINER RPC, so nobody can join a room they were not rung for.

Quoted replies, swipe-to-reply, and a full-screen attachment viewer

Chat picked up the replying model people already expect from their phone, and attachments got a proper viewer instead of a download link.

  • NewQuote a message to reply to it, with swipe-to-reply on touch.
  • NewFull-screen attachment previewer with keyboard navigation and media support.
  • ImprovedDetailed upload progress for multi-file uploads, including the finalising state.
  • ImprovedQuoted messages are cached client-side so a long thread does not re-fetch what it already has.

A live timer on the card, and Done columns that tidy themselves

Time tracking moved onto the card itself and became live across every device — start it on your laptop, watch it running on your phone. The card's total is derived from the ledger by a database trigger rather than being kept in sync by hand, so it cannot drift. Separately, boards can now archive cards that have been sitting in Done for longer than a window you choose.

  • NewLive card timer, synchronised through a database trigger so every open view agrees.
  • NewPer-board auto-archive: pick a window and the nightly job clears stale Done cards, in undoable batches, with per-card exemptions.
  • NewTime-by-person breakdown in the card details dialog.
  • ImprovedManual time logging and estimates share one duration field, so both accept the same shorthand.

A client CRM, built around what agencies actually need to remember

Clients are now more than a name on an invoice. Each one carries the people you deal with, the services you run for them, their social accounts and — the part we thought hardest about — a record of where their logins are kept. That last one stores a pointer, never a secret: there is no password field in the schema, in the API, or in the form, and there must never be one.

  • NewClient lifecycle: lead, active, paused, former.
  • NewFour collections per client — people (with roles and a primary contact), socials (with who manages each), services (linked to the board delivering them), and access.
  • NewAccess records store where a credential lives ("1Password · Clients vault") and who holds it. Never the credential.
  • NewClient detail pages with a full activity and time view.

Invoicing — turn tracked hours into a sent, paid invoice

The biggest thing we have shipped. Pick a set of billable hours and Gryphin builds the invoice: line items from the work, a snapshotted tax split, an atomic invoice number, your business identity as it stood that day. Send it, and the client can pay by card through your own Stripe account — money goes to you, you stay the merchant of record. Hours carry an invoice stamp, so the same work can never be billed twice.

  • NewInvoices generated from tracked time, with drafts, manual line items, tax splits and PDF export.
  • NewStripe Connect: card payment into the workspace's own connected account.
  • NewRecurring invoices for retainers — weekly through yearly, issued automatically with the same numbering and tax treatment as any other.
  • NewInvoice email with reminders, and a business-details snapshot so a rebrand never rewrites history.
  • NewProfitability: cost rates and margin per board and per client, with cost data redacted for anyone who is not a manager.
  • ImprovedAmounts are recomputed server-side from entry IDs — the client never sends hours, rates or totals, so a stale or tampered page cannot issue an invoice that disagrees with the logged time.

Card styles — seven new looks, picked during onboarding

The default kanban card got a serious upgrade. The old card was carrying too many fights at once — colored chips on top, a colored type chip on the bottom, a pink avatar, an emoji prefix in the title — six color signals competing for attention. We tore it down and rebuilt around one rule: the title reads first, color is reserved for signal (overdue, blocked, attention). Then we built seven full card styles around that rule and put a picker into onboarding so new users choose the look they want before they land on their welcome board. Existing boards are untouched — they keep the original look until their owner opts in via Board Settings → Cards → Style.

  • NewSeven new card styles, each a different mental model: Status Strip (default, brand rail), Minimal (Things-3 calm), Tactile (skeuomorphic depth), Notion (document row), Boarding Pass (airline ticket with dated stub + gate code), Iridescent (premium conic-gradient border), and Brutalist (Swiss poster with hard black border + orange offset shadow).
  • NewOnboarding step at /onboarding/card-style — visual picker with live previews, runs once after signup before your welcome board renders.
  • NewPer-board card style: each board can have its own look. Switch anytime in Board Settings → Cards → Style.
  • ImprovedTitle is the hero across every style: weight 500–600, tracking −0.005em, line-height 1.32–1.38. Footer rows only render when there is something to say.
  • ImprovedBrand colors used purposefully: orange rails, gradient dots, conic borders, aurora bleeds, tinted date pills — never as decoration.
  • ImprovedAll styles handle every state: cover image, completed (strikethrough), overdue (red), today (amber), blocked, glowing, dragging, plus full subtask/comment/attachment/time-tracker meta.
  • FasterEvery shell is React.memo + transform-gpu. Iridescent uses @property + CSS variable animation — pure GPU, no JS.
  • FasterShared cover, avatar-stack, featured-link, priority-dot, and type-icon atoms dedupe across all seven shells; tree-shakable per-style imports.
  • ImprovedEvery card now surfaces five glanceable signals: title (always hero), type icon, label, priority dot (with urgent halo), due date with state coloring, and assignee avatar stack. Each style expresses them differently; all six are answerable in under a second.
  • InfraNew boards default to Status Strip. Existing boards default to Classic (the original) so nothing changes for them — feature is opt-in for legacy boards.
  • InfraStyle choice syncs across collaborators in real-time via the existing board-update channel.

Building in public — changelog, roadmap, and stats are now public

We're committing to building Gryphin in public. Today we shipped four new public surfaces — this changelog, a public roadmap with upvoting, a public stats page, and a build-in-public landing that ties it all together. There's also a 'What's new' popover in the dashboard, an RSS feed for the changelog, and auto-generated social cards for every release.

  • NewPublic changelog at /changelog with detail pages and RSS feed.
  • NewPublic roadmap at /roadmap with upvoting on Now / Next / Later items.
  • NewPublic stats page at /stats with weekly snapshots and milestones.
  • New/build-in-public landing page explaining how we work.
  • NewIn-app 'What's new' popover that surfaces new releases on the dashboard.
  • ImprovedAuto-generated OG images per changelog entry and for the roadmap.
  • ImprovedFeedback modal now hints when a request matches a roadmap item — vote it up directly.

Beta mission control polish and pricing restructure

We polished the beta mission control with a live ticker tape, anchor-based nav, signup toasts, and confetti when new users land. We also restructured pricing into Team and Pro tiers with lower per-user rates, and added a Gryphin 101 section to the beta landing page so visitors can see what they're signing up for.

  • NewBeta mission control: ticker tape, anchor nav, signup toasts, and confetti for new users.
  • ImprovedPricing restructured to Team and Pro tiers with reduced per-user monthly rates.
  • NewGryphin 101 section added to the beta landing page.
  • NewModular dashboard system with markdown editor and widget support.

Mobile polish and a production hot standby

We spent the week shoring up the parts of the product you actually touch every day. Mobile got a real overhaul — the dashboard finally fits on a phone, board navigation isn't janky on iOS, and the native shell now lands you on /login like a normal app. We also stood up Railway + Cloudflare as a hot standby for production so an outage on our primary doesn't take Gryphin down with it.

  • InfraRailway + Cloudflare deployment running as a production hot standby.
  • FixedCapacitor native shell now lands on /login instead of /home.
  • ImprovedDashboard workspace bento tightened up for mobile screens.
  • FixedBoard navigation on mobile no longer fights with iOS safe areas.
  • NewManual up/down reorder buttons on cards, plus better drag-and-drop column targeting.
  • NewInline card creation from board views with optimistic subtask updates.

Beta mission control and a friendlier first run

Big week for the beta launch machinery. Admins get a real mission-control dashboard for the waitlist, including approval workflows and Resend sync. New users get a redesigned welcome email, friendlier empty states, and skeleton loading so the dashboard never feels broken on first load. We also redesigned the in-app feedback modal — screenshot attachments and draft persistence so nothing gets lost mid-thought.

  • NewBeta mission control dashboard with approval/rejection workflows.
  • NewBeta waitlist welcome email with dynamic perks and content.
  • NewEmail preview and testing dashboard for beta templates.
  • ImprovedEmptyColumnState component with a one-tap card creation action.
  • ImprovedSkeleton loading states across dashboard and admin modules.
  • ImprovedFeedback modal redesigned to match the marketing style, with screenshot attachments and draft persistence.
  • NewAnimated landing page hero with a new video modal.
  • InfraCustom error boundaries wired into Sentry across the app.

Calendar revamp, Gantt PDF export, and CSV import

If your work doesn't live on a single board, this release is for you. The calendar view got a full revamp with quick-add from day cells. The Gantt view now exports to PDF, and we shipped a universal CSV import so you can bring in work from anywhere — not just Trello. Board settings got reorganized into Data, Integrations, and Workflow panels so finding the knob you actually want is finally easy.

  • NewUniversal CSV import — bring in work from any source.
  • NewCalendar view revamp with quick-add cards from day cells.
  • NewGantt view PDF export with filters, members, and due dates.
  • ImprovedBoard settings reorganized into Data / Integrations / Workflow panels.
  • NewPinnable floating keyboard shortcuts reference with a two-column grid.
  • NewCompare and Trust pages for evaluating Gryphin vs other tools.
  • NewBrand page with design tokens.
  • FasterSnappier drag animation; created-at timestamp on card footers.

Server-side feature flags and global shortcuts

We're rolling out feature flags everywhere so we can ship dark and turn things on per-cohort. Server-side gating now covers API routes, and the admin toggle invalidates cache properly. Power users get global keyboard shortcuts that work from anywhere in the app — no more clicking through three menus to create a card.

  • NewServer-side feature flag gating for API routes with a client status hook.
  • NewGlobal keyboard shortcuts wired to focus and create events.
  • ImprovedExpanded board list view and card details dialog.
  • FixedMembers popover no longer stuck on "Loading members..."
  • FixedImproved Turnstile retry handling and login button state.
  • InfraBeta check-in cron and new activation events.

Beta signup is live

The public beta waitlist is open. The signup flow has analytics wired up end to end, admins have a waitlist dashboard for approvals, and we've started building toward the launch. If you're reading this, you're early — thanks for being here.

  • NewBeta signup flow with PostHog analytics and waitlist updates.
  • NewAdmin waitlist management dashboard with Resend sync.
  • NewUp/down arrow buttons on cards for keyboard-free reordering.

See something missing? Tell us.

The roadmap is shaped by what users actually ask for. If there's a gap, the fastest way to close it is to say so.