Artist Evolve
Content + analytics platform
A production content and analytics platform for creators — publishing workflows, large-range analytics timelines, real-time notifications, and cloud storage integrations.
- Software Engineer
- 2025
- Shipped
Overview
Artist Evolve is the product I work on day to day at Inicrea. It combines content publishing, scheduling and cross-platform analytics in one interface, which makes it a genuinely state-heavy frontend: long-range timelines that have to stay responsive across years of data, live notification streams, and third-party storage integrations that page through thousands of files.
Problem
Creators manage content across several platforms and had no single place to publish, schedule and measure it. The interface has to hold a lot of state at once — drafts, scheduled posts, live analytics and notifications — without becoming slow or confusing.
Approach
Treat it as a data-fetching problem first and a UI problem second. Server state lives in TanStack Query with explicit cache keys and optimistic updates; only genuinely local UI state goes to Zustand. That split keeps the components thin enough to reason about.
Architecture
Feature-scoped modules, each owning its queries, hooks and components. A shared WebSocket connection fans notifications out through a subscription hook rather than each feature opening its own socket.
Key interactions
- Long-range analytics timelines that stay responsive across large date spans
- Real-time notification delivery over a single shared WebSocket connection
- Google Drive integration with cursor pagination and infinite scrolling
- Optimistic updates on publish and schedule actions
- Content publishing workflow across multiple destination platforms
Technical decisions
Windowed rendering for the timeline
Rendering every node in a multi-year range stalled interaction. Rendering only the visible window, with the range computed from scroll position, kept it smooth regardless of span.
One socket, many subscribers
Per-feature sockets multiplied connections and made reconnection logic inconsistent. A single connection with a subscription hook centralised retry and backoff in one place.
What I took from it
- Cache key design is the architecture on a data-heavy product — get it wrong and every feature inherits the problem.
- Most perceived performance work was rendering strategy, not bundle size.