
A low-friction front door.
A workspace-specific public form collects a useful signal without asking the customer to understand the internal system behind it.
PARIS, FRANCEFEEDBACK INTELLIGENCE WORKSPACE
From scattered customer feedback to a decision room product teams can actually operate.

Role and scope are stated above. This short map isolates the system shape, its hardest invariant, the decision that protects it and the exact proof.
Product, support and leadership teams hear useful signals every day, but those signals arrive through forms, calls, messages and informal notes. The evidence gets separated from the decisions it should inform.
I designed and built SignalDesk as a shared operating layer: capture feedback, qualify it with consistent context, discuss it, decide what happens next and preserve the reasoning.
BUILT FOR
Four connected views make the workflow legible without turning it into a dashboard maze.

A workspace-specific public form collects a useful signal without asking the customer to understand the internal system behind it.
Source, status, priority, tags and customer context make Signals comparable. Searchable, shareable filters let teams return to the same operational view.


The detail view keeps qualification, discussion and an immutable activity log together. The outcome is traceable, not trapped in a meeting.
The Control Room summarizes active volume, high-priority pressure and recently resolved Signals without replacing the evidence underneath.

The activity timeline is a product promise, not a best-effort side effect.
A comment or status change could persist even if its activity event failed, leaving the collaboration history incomplete.
Rails services write the business record and its ActivityEvent inside the same database transaction.
The invariant lives on the server: both records commit or both roll back, and a service spec exercises the failure path.
Audit availability becomes part of write availability: a failed audit insert rejects the action instead of accepting an untraceable change.
Next.js owns rendering and interaction. Rails owns domain behavior and authorization. Supabase owns identity and PostgreSQL infrastructure. The browser never queries business tables directly.
App Router and typed interface states
SSR sessions and ES256 tokens
Validation, services and Pundit policies
Relational constraints and tenant-aware persistence
Independent deploys from one monorepo
SSR session to bearer token to Rails policy scope to constrained relational data.
VERIFIED BYRequest specs: 401 without a token · 403 for an insufficient role · 404 outside the current workspaceOrigin checks, strict field limits, honeypot and rate limiting before Signal creation.
VERIFIED BYPublic request specs: disabled form → 404 · honeypot → no write · repeated submissions → 429Domain services commit each state change with its audit event in one transaction.
VERIFIED BYService spec: failed audit event → raised error · partial comment → 0The goal was not to simulate infinite scale. It was to make strong boundaries visible while keeping the service surface proportionate to a real product prototype.
The hardest part was keeping identity, tenant scope and mutation feedback coherent across two runtimes without duplicating domain rules.
Three verification levels cover access boundaries, transactional integrity and critical browser journeys.
Authentication, role permissions, workspace isolation and public intake protections.
Audit events stay aligned with business records; a failed audit write leaves no partial comment.
Playwright + Axe cover the real local stack; Brakeman and bundler-audit run in CI.
SignalDesk now connects public intake, team qualification, collaboration, decision history and operational visibility in one deployed workflow. Its strongest result is coherence: each screen reinforces the same domain model and trust boundaries.
The build clarified a principle I carry into product work: expressive visual identity can coexist with serious operational software, but only when states, permissions and information architecture are quieter than the brand around them.
Every screen is shown without cropping, with a detailed preview that preserves interface readability.
The Control Room summarizes active volume, high-priority pressure and recently resolved Signals without replacing the evidence underneath.
A workspace-specific public form collects a useful signal without asking the customer to understand the internal system behind it.
Source, status, priority, tags and customer context make Signals comparable. Searchable, shareable filters let teams return to the same operational view.
The detail view keeps qualification, discussion and an immutable activity log together. The outcome is traceable, not trapped in a meeting.
Next, I would validate the qualification model with a real product-support team, then measure time to triage and decision consistency before expanding automation.