Passa al contenuto principale

PlayRoll Contributor Portal

Il Contributor Portal è la superficie di onboarding pubblica e su invito per i contributor di Pilot1. È un'app statica Vite, React e TypeScript con backend su Supabase Auth, Supabase Postgres e row-level security. Viene distribuita su Cloudflare Pages all'indirizzo https://playroll.extrinsiccognition.com.

Il portale è volutamente ristretto. Gestisce l'intake, l'identità email verificata, l'accettazione dei documenti legali, l'accettazione di data minimization, la readiness del receiving-method e l'identity link canonico tra un contributor del portale e un utente dell'app Playroll. Non esegue pagamenti, non valida il gameplay, non genera ricevute, non gestisce il recorder e non fornisce una coda admin.

Sorgenti

Repository: C:\EC\playroll-contributor-portal
App entry: src/App.tsx
Flow state: src/features/portal/usePortalFlow.ts
Supabase browser API: src/lib/portalApi.ts
Generated documents: src/lib/generatedDocuments.ts
Supabase migrations: supabase/migrations/
Identity link function: supabase/functions/activate-contributor-app-link/index.ts
Operational docs: docs/

Product Ownership

Il portale attualmente possiede:

  • l'intake pubblico di candidature Pilot1
  • la verifica email Supabase tramite magic-link o conferma di signup
  • i link di onboarding per inviti e referral
  • i dati di profilo del contributor necessari prima dell'accesso al recorder
  • documenti testuali generati per incarico, accettazione privacy e dichiarazione fiscale
  • l'evidenza di accettazione documenti con versione del pacchetto, versioni dei documenti, timestamp, email verificata, auth user id e hash SHA-256 dei documenti
  • l'accettazione differita dei dati sensibili
  • la cattura del receiving-method SEPA IBAN intestato al contributor con validazione browser e database
  • la conferma via email per i receiving-method SEPA
  • la richiesta di manual review quando il contributor non può fornire un IBAN SEPA supportato
  • l'attivazione dell'app identity dopo gli accordi richiesti e l'IBAN SEPA confermato
  • la sincronizzazione minimale di una proiezione di contributor verificato verso il progetto Supabase dell'app Playroll

Il portale attualmente non possiede:

  • operazioni generali backend/service-role al di fuori della Edge Function dell'identity link
  • pagine interne di review admin
  • bucket di storage per PDF firmati o capture di gameplay
  • la firma immutabile dei PDF
  • la validazione delle sessioni
  • la generazione di time-credit PlayRoll
  • l'esecuzione dello sblocco dei milestone
  • la creazione di richieste di payout
  • l'esecuzione del provider di pagamento
  • la generazione di ricevute o value sheet
  • la gestione dei pagamenti falliti

Regole di Identità Legale

Usa Extrinsic Cognition, Inc. come legal counterparty, controller, committente e payor. Usa PlayRoll soltanto come nome del prodotto recorder e Contributor Portal.

Evita un linguaggio che faccia apparire la superficie come rapporto di lavoro, busta paga, marketplace di task o piattaforma di stage. I testi rivolti al contributor non devono lasciare intendere turni fissi, esclusività, ranking disciplinari, penalità automatiche o accettazione obbligatoria delle sessioni.

Implementazione Attuale

L'app del browser è un sottile mode switcher:

loading -> email-sent -> public -> onboarding -> rewards -> status

src/App.tsx renderizza un workspace per modalità. usePortalFlow gestisce il bootstrap della sessione, il parsing dei callback Supabase, l'invio della application, l'invio dell'onboarding, il salvataggio del receiving-method di payout, la conferma email del payout e la sincronizzazione opzionale dell'app identity link quando è presente un parametro di query link_intent o intent_id.

Principali superfici UI:

  • PublicApplicationPage: login via email e form iniziale di candidatura
  • OnboardingWorkspace: profilo, review documenti, accettazione e review in sola lettura
  • RewardsWorkspace: stato rewards a saldo zero e configurazione del receiving-method
  • StatusView: stato del candidato di ritorno

Il portale attiva l'app/contributor link soltanto dopo aver completato il proprio gate di contributor. L'app può richiedere un signed link intent, ma non può creare da sola un contributor link attivo.

App identity:
playroll_supa_new.playroll_users.user_id

Portal identity:
playroll_contributor_portal.contributors.id

Portal source table:
playroll_contributor_portal.public.contributor_app_links

App read model:
playroll_supa_new.public.contributor_status_projection

Vedi Identity Link con l'App Playroll per il flusso completo, il gate di attivazione, i controlli di accettazione e2e e l'observability.

Gate di Produzione

Nessun contributor deve ricevere accesso al recorder finché non sono completi tutti i gate pre-recorder:

contract_signed = true
privacy_notice_accepted = true
tax_status_valid = true
data_minimization_acknowledged = true
verified_email is present

Nessun contributor deve ricevere denaro o valore finché non sono completi tutti i gate di pagamento:

payout_method_verified = true
session_validated = true
milestone_reward_available = true
rolling_12mo_projected_total <= 4000
receipt_or_payment_statement_generated = true
payment_approved_by_founder = true

Confine dei Dati Sensibili

Prima dell'accesso al recorder, il portale non deve raccogliere:

codice fiscale
full residential address
date of birth
identity document
IBAN
payout method

L'attuale insert di onboarding salva campi di compatibilità vuoti per alcune colonne legacy, ma il flusso visibile nel browser differisce queste classi di dati. Il workspace rewards può raccogliere un receiving-method soltanto per ricevere denaro o ricompense da Extrinsic Cognition, Inc.