mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-12 22:13:05 +00:00
chore: public release tip — All Rights Reserved, sanitize field material
Remove interview audio/transcripts/sheets from the tree, add LICENSE (UNLICENSED), /private/ convention for local-only sensitive docs, and public-clean CUSTOMER + session summaries for cloud agents.
This commit is contained in:
parent
8dd60cf962
commit
0b69d2b91d
16 changed files with 283 additions and 19 deletions
22
.gitignore
vendored
22
.gitignore
vendored
|
|
@ -56,14 +56,16 @@ next-env.d.ts
|
||||||
# IBGE demographics download cache (pnpm build:demographics)
|
# IBGE demographics download cache (pnpm build:demographics)
|
||||||
/data/demographics/
|
/data/demographics/
|
||||||
|
|
||||||
# Transcription intermediates (source audio lives under docs/)
|
# Local-only sensitive material (agents may read; never commit content)
|
||||||
output/**/*.wav
|
/private/**
|
||||||
|
!/private/README.md
|
||||||
|
|
||||||
# Playwright
|
# Former tracked sensitive locations — never re-add
|
||||||
node_modules/
|
/docs/general-coordinator-interview/
|
||||||
/test-results/
|
/docs/sheets/
|
||||||
/playwright-report/
|
/output/
|
||||||
/blob-report/
|
|
||||||
/playwright/.cache/
|
# Audio / media field captures
|
||||||
/.playwright-cli/
|
*.m4a
|
||||||
.aider*
|
*.mp3
|
||||||
|
*.webm
|
||||||
|
|
|
||||||
11
LICENSE
Normal file
11
LICENSE
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
Copyright (c) 2026 Francisco Ignácio Fontoura Solla. All Rights Reserved.
|
||||||
|
|
||||||
|
This software and associated documentation files (the "Software") are the
|
||||||
|
proprietary property of the copyright holder.
|
||||||
|
|
||||||
|
No permission is granted to use, copy, modify, merge, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the Software without prior written
|
||||||
|
permission from the copyright holder.
|
||||||
|
|
||||||
|
For licensing inquiries: fsolla@pm.me
|
||||||
|
Governing law / venue: Brazil.
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
# Teqo
|
# Teqo
|
||||||
|
|
||||||
|
> **License:** proprietary — **All Rights Reserved** (© Francisco Ignácio Fontoura Solla). Portfolio / demonstration only. **Not** open source. Use, copy, or redistribution requires prior written permission (`fsolla@pm.me`). See [`LICENSE`](LICENSE).
|
||||||
|
>
|
||||||
|
> **Sensitive field material** belongs in `/private/` on local checkouts (gitignored). Cloud agents: use public-clean docs; report sensitive deliverables in chat — do not commit them.
|
||||||
|
|
||||||
> **Cheatsheet de operação agentic (humanos)** — o fluxo em 5 linhas:
|
> **Cheatsheet de operação agentic (humanos)** — o fluxo em 5 linhas:
|
||||||
>
|
>
|
||||||
> 1. O agente roda `pnpm agent:claim` e pega a próxima Issue `ready` por prioridade (`prio:P0..P3`).
|
> 1. O agente roda `pnpm agent:claim` e pega a próxima Issue `ready` por prioridade (`prio:P0..P3`).
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ Fast gate local do agente (iteração): `pnpm gate:fast` (lint + typecheck + tes
|
||||||
|
|
||||||
## Stage DB — runbook de refresh (semanal, humano)
|
## Stage DB — runbook de refresh (semanal, humano)
|
||||||
|
|
||||||
1. `export NEON_API_KEY=…` (console.neon.tech → API keys; projeto `jorgesolla` / `lively-math-34249863`).
|
1. `export NEON_API_KEY=…` (console.neon.tech → API keys; projeto Neon da campanha (id via `NEON_PROJECT_ID`; não hardcodar no repo público)).
|
||||||
2. `pnpm db:refresh:stage` — deleta a branch `stage` velha, cria nova do snapshot de prod, faz swap do secret `STAGE_DATABASE_URL` no Environment `stage`. `--dry-run` inspeciona.
|
2. `pnpm db:refresh:stage` — deleta a branch `stage` velha, cria nova do snapshot de prod, faz swap do secret `STAGE_DATABASE_URL` no Environment `stage`. `--dry-run` inspeciona.
|
||||||
3. Próximo `ci-stage` já usa o snapshot novo. Preview Vercel da branch `stage` (`jorgesolla-git-stage-solla.vercel.app`) aponta para o mesmo banco via envs `Preview (stage)` — **atenção**: o endpoint muda a cada refresh; rode também `vercel env add DATABASE_URL preview stage` com a URL nova (o script imprime a URL mascarada; pegue a completa no console Neon ou rode `vercel env pull`).
|
3. Próximo `ci-stage` já usa o snapshot novo. Preview Vercel da branch `stage` (`jorgesolla-git-stage-solla.vercel.app`) aponta para o mesmo banco via envs `Preview (stage)` — **atenção**: o endpoint muda a cada refresh; rode também `vercel env add DATABASE_URL preview stage` com a URL nova (o script imprime a URL mascarada; pegue a completa no console Neon ou rode `vercel env pull`).
|
||||||
|
|
||||||
|
|
@ -92,3 +92,14 @@ Supervisor **remoto** que mantém até 5 Cursor Cloud Agents rodando `work-issue
|
||||||
## Leitura always-on (ordem)
|
## Leitura always-on (ordem)
|
||||||
|
|
||||||
`AGENTS.md` (fatiado 2026-07-30) → `.cursor/rules/codebase-map.mdc` → `.cursor/rules/engineering-standards.mdc` → esta página → kernels [`PRODUCT.md`](../PRODUCT.md) / [`DESIGN.md`](../DESIGN.md) / [`CUSTOMER.md`](CUSTOMER.md) (kernel no topo). Histórico: [`CHANGELOG-AGENTS.md`](CHANGELOG-AGENTS.md). Referência Payload sob demanda: [`PAYLOAD-REFERENCE.md`](PAYLOAD-REFERENCE.md).
|
`AGENTS.md` (fatiado 2026-07-30) → `.cursor/rules/codebase-map.mdc` → `.cursor/rules/engineering-standards.mdc` → esta página → kernels [`PRODUCT.md`](../PRODUCT.md) / [`DESIGN.md`](../DESIGN.md) / [`CUSTOMER.md`](CUSTOMER.md) (kernel no topo). Histórico: [`CHANGELOG-AGENTS.md`](CHANGELOG-AGENTS.md). Referência Payload sob demanda: [`PAYLOAD-REFERENCE.md`](PAYLOAD-REFERENCE.md).
|
||||||
|
|
||||||
|
## Material sensível: `/private/` (local) vs cloud
|
||||||
|
|
||||||
|
O repo GitHub é **público** e proprietário (All Rights Reserved). Discovery de campo com áudio, transcrição bruta, nomes reais, deltas operacionais de voto e planilhas de projeção **não** sobem no tip público.
|
||||||
|
|
||||||
|
| Quem | Onde grava | O que faz |
|
||||||
|
|------|------------|-----------|
|
||||||
|
| **Agente local** | `/private/` (gitignored; só `private/README.md` versionado) | Lê/escreve notas sensíveis aí. Publica em `docs/` só uma **versão limpa** (JTBD/insights sem PII operacional). Nunca `git add` de áudio/transcribe/sheets/notas verbatim. |
|
||||||
|
| **Agente cloud** (Cursor Cloud, Devin, etc.) | Clone **sem** `/private/` | Baseia-se em `docs/CUSTOMER.md` e planos públicos limpos. Se o entregável for sensível, **informa no chat** e **não commitá** — o humano salva em `/private/` no checkout local. |
|
||||||
|
|
||||||
|
Regra de ouro: o que um cloud agent não deveria ver no GitHub público também não deve ser commitado por um agente local.
|
||||||
|
|
|
||||||
109
docs/CUSTOMER.md
Normal file
109
docs/CUSTOMER.md
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
# Customer
|
||||||
|
|
||||||
|
> **Public-clean version.** Field recordings, raw transcripts, named actors, and operational vote deltas live only under `/private/` on local checkouts (gitignored). Cloud agents: use this document; if a task would produce sensitive deliverables, report them in chat and do not commit them.
|
||||||
|
|
||||||
|
## Kernel (day-to-day)
|
||||||
|
|
||||||
|
- **Who:** the General Coordinator of a federal-deputy campaign in Bahia (~45 days, scarce resources, information scattered across WhatsApp / spreadsheets / memory). Job: one shared, current operational picture so limited effort goes to the right territories and people.
|
||||||
|
- **Mental model (observed use):** **Action → Place → Who** — never entity-first. The coordinator does not scroll by instinct; an invisible confirmation (Save / Approve) means the action was not completed; a fragmented form means abandonment.
|
||||||
|
- **Relative reading of the board:** **% of the candidate’s own vote** (concentration of own capture) is the hard priority criterion — absolute statewide % is an anti-metric. Projected floor is on the order of prior-cycle performance with a stretch target above it.
|
||||||
|
- **Threat #1:** friendly fire inside the same party (a co-religionist ahead). Real team channel: WhatsApp 1:1 without dated audit trail.
|
||||||
|
- **Dominant constraint:** “legs” / field structure, not money.
|
||||||
|
- **Competence anxiety** (“I can’t handle the tool”) is the worst emotional problem — the product must give a sense of control, not only data.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Job Statement
|
||||||
|
|
||||||
|
When I am coordinating a statewide federal-deputy campaign across dozens of Bahia municipalities in roughly 45 days, with scarce resources and information scattered across advisors and local leaderships, I want a shared, current operational picture so I can put limited effort into precise mobilization instead of reconciling WhatsApp, spreadsheets, and memory.
|
||||||
|
|
||||||
|
(PT, field language:)
|
||||||
|
Quando preciso coordenar uma campanha de deputado federal pelo estado da Bahia — votos e estrutura em dezenas de municípios, ~45 dias, pouco recurso, informação espalhada entre assessores e lideranças — quero enxergar o mesmo quadro operacional e agir no território/pessoas certas sem caçar atualizações, para transformar esforço limitado em mobilização precisa.
|
||||||
|
|
||||||
|
## Job Dimensions
|
||||||
|
|
||||||
|
| Dimension | Description | Where the app underdelivers today |
|
||||||
|
| ---------- | ----------- | --------------------------------- |
|
||||||
|
| Functional | See municipalities (predefined territories), base, declared-vs-estimated votes, and agenda in one place; record updates and decide the next action | Entity-first screens invert the **Action → Place → Who** model; discovery requires scroll; confirmations invisible; fragmented forms. Hit: filtered “no advisor” lists × prior-cycle votes. Jargon still blocks. |
|
||||||
|
| Emotional | Feel in control and trust that the picture is current | **Worst today.** Competence anxiety (“I can’t see / handle it”), not only stale data. Without action-first flows, Little Hire does not start. |
|
||||||
|
| Social | Be seen as serious, aligned coordination | Real work still “wins” on WhatsApp; tool users can look bureaucratic while informal channels set the pace |
|
||||||
|
|
||||||
|
## Competing Alternatives
|
||||||
|
|
||||||
|
| Alternative | Why hired today | Weakness |
|
||||||
|
| ----------- | --------------- | -------- |
|
||||||
|
| WhatsApp groups / 1:1 | Fast, everyone is already there | Fragments; no analysis; useful history disappears |
|
||||||
|
| Spreadsheets (projection maps) | Flexible; one advisor’s “source of truth” | Divergent versions; weak on phone |
|
||||||
|
| Notebook / memory / phone calls | Zero tool friction | Doesn’t scale; doesn’t share |
|
||||||
|
| Other campaign platforms (past attempts) | Promise of a single system | Team stops updating → stale data → abandonment |
|
||||||
|
| Non-consumption | Avoids another login | Burns the 45-day window |
|
||||||
|
|
||||||
|
## Big Hire vs Little Hire
|
||||||
|
|
||||||
|
| Moment | What it is here | Status / intervention |
|
||||||
|
| ------ | --------------- | --------------------- |
|
||||||
|
| Big Hire | First login, trust the system enough to start | Mitigated offline: in-person onboarding; seed initial data when needed |
|
||||||
|
| Little Hire | Come back and update so the shared picture stays alive | **Primary leak.** Past tools died here. Reduce emotional cost of “updating again today” |
|
||||||
|
|
||||||
|
## Forces of Progress
|
||||||
|
|
||||||
|
| Force | Notes |
|
||||||
|
| ----- | ----- |
|
||||||
|
| Push | Fragmentation; statewide scope; 45-day crunch; cannot follow dynamics by hand |
|
||||||
|
| Pull | One operational picture; smarter targeting; instrument the team can update; territory dossier before agenda |
|
||||||
|
| Habit | WhatsApp + spreadsheet as default — “Zap is the field”; projection sheet is the morning ritual |
|
||||||
|
| Anxiety | “If others don’t update, I’m wasting time”; competence anxiety; LGPD / real-data hold; “legs” constraint |
|
||||||
|
|
||||||
|
## Opportunity Solution Tree (sanitized)
|
||||||
|
|
||||||
|
```
|
||||||
|
Outcome: weekly Little Hire
|
||||||
|
├── O1 I don’t trust others updated → anxiety / abandonment
|
||||||
|
├── O2 Day’s delta (call/Zap) does not enter the decision queue
|
||||||
|
├── O3 Jargon + opaque AI block action
|
||||||
|
├── O4 Updating on phone is slower than voice on Zap
|
||||||
|
├── O5 “Truth” still lives in the projection spreadsheet
|
||||||
|
├── O6 Arrive in territory without a dossier
|
||||||
|
├── O7 Vote gains/losses lack dated / auditable record
|
||||||
|
├── O8 Team in isolated islands — information does not circulate
|
||||||
|
├── O9 Action-first mental model vs entity-first UI
|
||||||
|
├── O10 Discovery must be above-the-fold — no instinctive scroll
|
||||||
|
└── O11 Invisible confirmation / commit (Save / Approve / Done)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Product direction:** tables = bulk bank management; redesign daily UX as **continuous linear flows**. Observed-session originals: `private/plans/` (local only).
|
||||||
|
|
||||||
|
## Leap-of-Faith Assumptions
|
||||||
|
|
||||||
|
| Assumption | Type | Cheap test | Success if |
|
||||||
|
| ---------- | ---- | ---------- | ---------- |
|
||||||
|
| Seeded picture + onboarding → returns within 7 days | Desirability / Little Hire | Count logins + ≥1 real update after action-first redesign | ≥1 spontaneous update in 7 days |
|
||||||
|
| Action queues answer “where do I start?” | Usability | Filtered “no advisor” × prior-cycle votes | Finds queue/action without help |
|
||||||
|
| Entity-first “edit where you see” is discoverable | Usability | Observed: editable cells not discovered in free exploration | Opens vote adjust without demo — **FAILED**; pivot O9 |
|
||||||
|
| Inline glossary / plain language cuts confusion | Usability | Field jargon needed live translation | Zero “what is…?” in 2nd session after copy |
|
||||||
|
|
||||||
|
## Discovery method (no raw evidence here)
|
||||||
|
|
||||||
|
Field discovery used Mom Test story blocks + observed product use. Full verbatim transcripts, audio, and named operational deltas are **not** in this public tree. Local agents: see `private/customer/CUSTOMER.md`, `private/transcribe/`, `private/general-coordinator-interview/`. Cloud agents: stay on this clean doc; escalate sensitive outputs in chat.
|
||||||
|
|
||||||
|
### Validated patterns (safe to build on)
|
||||||
|
|
||||||
|
- Priority is **share of the candidate’s own capture**, not local electorate %.
|
||||||
|
- Leadership value is often political representativeness, not raw vote count.
|
||||||
|
- Friendly fire (same-party competitor) is the named #1 threat class.
|
||||||
|
- Channel of truth for day deltas is voice/Zap without dated tool trail — until the product wins Little Hire.
|
||||||
|
- Dominant constraint named in field: structure/“legs”, with money as instrument — not always the binding constraint.
|
||||||
|
- Map is briefing/panel, not the daily operating surface; filtered lists for “who is unmonitored” are the observed value hit.
|
||||||
|
- Tables remain for bulk; day-delta work needs action-first chassis.
|
||||||
|
|
||||||
|
## Segments & Best-Fit Customer
|
||||||
|
|
||||||
|
- Primary: `coordinator` ("Coordenador Geral"), `candidate` ("Candidato"), and `advisor` ("Assessor") operating `/campanha` under time pressure — advisor scoped to administered municipalities.
|
||||||
|
- Secondary: `leader` ("Liderança") in the field (PWA) — phone-first supporter contact tool only.
|
||||||
|
- Out of scope for this improve cycle: public site visitors / donors.
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- Architecture / campaign model: [`ARCHITECTURE.md`](ARCHITECTURE.md)
|
||||||
|
- Agent ops (incl. `/private/` rules): [`AGENT-OPS.md`](AGENT-OPS.md)
|
||||||
|
- Local sensitive originals: `private/` (gitignored; local checkouts only)
|
||||||
|
|
@ -63,8 +63,8 @@ Statuses: pending · in-progress · awaiting-evidence · done · deferred: \<rea
|
||||||
- [x] Fase 1 → `docs/CUSTOMER.md` (2026-07-19)
|
- [x] Fase 1 → `docs/CUSTOMER.md` (2026-07-19)
|
||||||
- [x] Fase 2 deferred até evidência de quarta
|
- [x] Fase 2 deferred até evidência de quarta
|
||||||
- [x] continuous-discovery → cadência + OST + roteiro em `CUSTOMER.md` (2026-07-19)
|
- [x] continuous-discovery → cadência + OST + roteiro em `CUSTOMER.md` (2026-07-19)
|
||||||
- [x] Rodar sessão âncora (Mom Test) → Interview Evidence + Snapshot preenchidos (2026-07-23; transcrição diarizada em `output/transcribe/general-coordinator-interview-20260723/`)
|
- [x] Rodar sessão âncora (Mom Test) → Interview Evidence + Snapshot preenchidos (2026-07-23; transcrição diarizada em `private/transcribe/general-coordinator-interview-20260723/`)
|
||||||
- [x] Bloco B / uso observado — sessão 2026-07-29 (substitui áudio perdido); snapshot em `docs/plans/sessao-observada-coordenador-2026-07-29-snapshot.md`; transcrição em `output/transcribe/general-coordinator-observed-use-20260729/`
|
- [x] Bloco B / uso observado — sessão 2026-07-29 (substitui áudio perdido); snapshot em `docs/plans/sessao-observada-coordenador-2026-07-29-snapshot.md`; transcrição em `private/transcribe/general-coordinator-observed-use-20260729/`
|
||||||
- [ ] Cobrar o compromisso: planilha/tabela de prioridades prometida pelo coordenador geral ("Eu te passo em uma tabela")
|
- [ ] Cobrar o compromisso: planilha/tabela de prioridades prometida pelo coordenador geral ("Eu te passo em uma tabela")
|
||||||
- [ ] Little Hire: **não** medir no build atual — medir ≥1 update espontâneo nos 7 dias **após** o primeiro fluxo ação-primeiro em produção (meta soft: antes/na onda 03/08)
|
- [ ] Little Hire: **não** medir no build atual — medir ≥1 update espontâneo nos 7 dias **após** o primeiro fluxo ação-primeiro em produção (meta soft: antes/na onda 03/08)
|
||||||
- [ ] Abrir item de roadmap + plano: **fluxos ação-primeiro** (O9–O11) — Início com ações; wizard contínuo “Ajustar votos” / “Ajustar liderança” / …; listas permanecem para bulk; mapa desce a briefing · **rascunho:** `docs/plans/fluxos-acao-primeiro-inicio.md` (UX-1 no roadmap)
|
- [ ] Abrir item de roadmap + plano: **fluxos ação-primeiro** (O9–O11) — Início com ações; wizard contínuo “Ajustar votos” / “Ajustar liderança” / …; listas permanecem para bulk; mapa desce a briefing · **rascunho:** `docs/plans/fluxos-acao-primeiro-inicio.md` (UX-1 no roadmap)
|
||||||
|
|
|
||||||
|
|
@ -148,5 +148,5 @@ Componentes:
|
||||||
- `src/components/campaign/PledgeEstimateForm.tsx`, `PlazaListExpectedVotesControl.tsx`, `PlazaMapPanel.tsx`, `DeclareVotesForm.tsx`
|
- `src/components/campaign/PledgeEstimateForm.tsx`, `PlazaListExpectedVotesControl.tsx`, `PlazaMapPanel.tsx`, `DeclareVotesForm.tsx`
|
||||||
- AGENTS.md — staff-only estimates, naming, migrations, overrideAccess
|
- AGENTS.md — staff-only estimates, naming, migrations, overrideAccess
|
||||||
- `PRODUCT.md` / `DESIGN.md` — Field Desk; princípio 5 (métricas locais)
|
- `PRODUCT.md` / `DESIGN.md` — Field Desk; princípio 5 (métricas locais)
|
||||||
- Feedback coordenação geral 2026-07-23 (áudio em `docs/general-coordinator-interview/` / `CUSTOMER.md` Interview Snapshot)
|
- Feedback coordenação geral 2026-07-23 (áudio em `private/general-coordinator-interview/` / `CUSTOMER.md` Interview Snapshot)
|
||||||
- Revisão auditoria 2026-07-23: path `voteGoals` corrigido; seletor de cenário → estado local (Ano/Escala não são URL); actions reais = `estimateVotes` / `setPlazaExpectedVotes`.
|
- Revisão auditoria 2026-07-23: path `voteGoals` corrigido; seletor de cenário → estado local (Ano/Escala não são URL); actions reais = `estimateVotes` / `setPlazaExpectedVotes`.
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ Brief compacto:
|
||||||
|
|
||||||
## Contexto
|
## Contexto
|
||||||
|
|
||||||
Reunião 2026-07-23 com coordenador geral e deputado Jorge Solla ([CUSTOMER.md](../CUSTOMER.md), entrevista `output/transcribe/general-coordinator-interview-20260723/`). A remodelagem Praças (R0–R5) está em código mas **não deployada** — janela para rename destrutivo barato.
|
Reunião 2026-07-23 com coordenador geral e deputado Jorge Solla ([CUSTOMER.md](../CUSTOMER.md), entrevista `private/transcribe/general-coordinator-interview-20260723/`). A remodelagem Praças (R0–R5) está em código mas **não deployada** — janela para rename destrutivo barato.
|
||||||
|
|
||||||
Mudanças acordadas:
|
Mudanças acordadas:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Observed session — General Coordinator (2026-07-29) — public summary
|
||||||
|
|
||||||
|
> **Public-clean.** Full notes, transcript, and named operational detail: `private/plans/` and `private/transcribe/` on local checkouts only.
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Hands-on observed use (Bloco B): coordinator drives Teqo as on a normal coordination day; team notes where discovery and commit fail.
|
||||||
|
|
||||||
|
## Safe learnings (build on these)
|
||||||
|
|
||||||
|
- Mental model is **Action → Place → Who**, not entity-first edit-in-place.
|
||||||
|
- Discovery must be **above-the-fold** — no instinctive scroll.
|
||||||
|
- Invisible Save/Approve/Done = action not completed.
|
||||||
|
- Filtered “no advisor × prior-cycle votes” lists were the value hit; map was not the daily operating surface.
|
||||||
|
- Competence anxiety (“I can’t see / handle it”) blocked Little Hire more than stale data.
|
||||||
|
- Product direction: tables for bulk bank management; day-to-day = linear action-first flows.
|
||||||
|
|
||||||
|
## For agents
|
||||||
|
|
||||||
|
- Cloud: use this summary + [`docs/CUSTOMER.md`](../CUSTOMER.md). Do not invent named municipalities, vote deltas, or verbatim quotes from the private session.
|
||||||
|
- Local: full snapshot under `private/plans/sessao-observada-coordenador-2026-07-29-snapshot.md`.
|
||||||
18
docs/plans/sessao-observada-coordenador-2026-07-30.md
Normal file
18
docs/plans/sessao-observada-coordenador-2026-07-30.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Observed session — General Coordinator (2026-07-30) — public summary
|
||||||
|
|
||||||
|
> **Public-clean.** Full session notes: `private/plans/` on local checkouts only.
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Follow-up observed / planning session after the 2026-07-29 hands-on; refine action-first home flows and next product bets.
|
||||||
|
|
||||||
|
## Safe learnings
|
||||||
|
|
||||||
|
- Reinforces Action → Place → Who and above-the-fold discovery from 29/07.
|
||||||
|
- Prefer continuous linear flows for day deltas; keep list/table chassis for bulk portfolio work.
|
||||||
|
- Details that name people, municipalities with operational numbers, or interview verbatim stay offline.
|
||||||
|
|
||||||
|
## For agents
|
||||||
|
|
||||||
|
- Cloud: [`docs/CUSTOMER.md`](../CUSTOMER.md) + this summary.
|
||||||
|
- Local: `private/plans/sessao-observada-coordenador-2026-07-30.md`.
|
||||||
32
docs/plans/sessao-observada-coordenador-cheatsheet.md
Normal file
32
docs/plans/sessao-observada-coordenador-cheatsheet.md
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Notary cheatsheet — CG observed session (public template)
|
||||||
|
|
||||||
|
> **Public template only.** Filled sheets with real names/events: `private/plans/` (local).
|
||||||
|
|
||||||
|
One-page notary sheet for observed-use sessions. Print or keep on tablet. One line per relevant event.
|
||||||
|
|
||||||
|
**Date:** ____/____/2026 · **Start:** __:__ · **End:** __:__
|
||||||
|
**Facilitator:** ________ · **Notary:** ________ · **Recording:** [ ] screen+audio OK
|
||||||
|
|
||||||
|
## Quick codes
|
||||||
|
|
||||||
|
| Symbol | Meaning |
|
||||||
|
| ------ | ------- |
|
||||||
|
| `?` | hesitated / asked what something is |
|
||||||
|
| `✗` | wrong path / backed out |
|
||||||
|
| `✓` | found alone |
|
||||||
|
| `Z` | talked about going back to WhatsApp |
|
||||||
|
| `P` | talked about going back to spreadsheet |
|
||||||
|
| `J` | jargon (note the word) |
|
||||||
|
| `→` | navigated to |
|
||||||
|
|
||||||
|
**Screens (generic):** Home · Map · Municipality list · Municipality detail · Dossier · Leaderships · Suggestions · Territories · Phone
|
||||||
|
|
||||||
|
## Block 1 — Free exploration (10–12′)
|
||||||
|
|
||||||
|
First click: ________ · Within ≤2′ reached municipality/map? [ ] yes [ ] no
|
||||||
|
|
||||||
|
Notes: …
|
||||||
|
|
||||||
|
## For agents
|
||||||
|
|
||||||
|
Do not commit filled cheatsheets with real participant data — save under `private/plans/`.
|
||||||
25
docs/plans/sessao-observada-coordenador-convite-whatsapp.md
Normal file
25
docs/plans/sessao-observada-coordenador-convite-whatsapp.md
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# WhatsApp invite — Teqo hands-on session (public template)
|
||||||
|
|
||||||
|
> **Public template.** Do not commit messages that name a real coordinator or private logistics beyond placeholders. Filled copies: `private/plans/` (local).
|
||||||
|
|
||||||
|
Tone: direct, no product pitch. Adjust day/time/place.
|
||||||
|
|
||||||
|
## Short version (recommended)
|
||||||
|
|
||||||
|
Oi, [Nome] — amanhã a gente tem a sessão prática do Teqo (~1h15).
|
||||||
|
|
||||||
|
Não é apresentação: você usa a ferramenta como num dia normal de coordenação e a gente só observa onde trava.
|
||||||
|
|
||||||
|
Pode ser no seu notebook. Dados sensíveis de apoiadores reais ainda não entram (jurídico); o mapa e a projeção seedada já estão.
|
||||||
|
|
||||||
|
**Quando:** [dia], [hora]
|
||||||
|
**Onde:** [local]
|
||||||
|
Confirma?
|
||||||
|
|
||||||
|
## Even shorter
|
||||||
|
|
||||||
|
[Nome], amanhã [hora] — ~1h15 de uso prático do Teqo (você dirige, a gente anota). Sem slide. Confirma em [local]?
|
||||||
|
|
||||||
|
## If they ask what to bring
|
||||||
|
|
||||||
|
Só você e o celular (se der). Conta e senha a gente já deixa prontas. Se puder, traz na cabeça o último município que mudou de número esta semana — a gente recria esse caso com dado seedado.
|
||||||
|
|
@ -84,7 +84,7 @@ flowchart TD
|
||||||
## Referências
|
## Referências
|
||||||
|
|
||||||
- `docs/roadmap.md` — Trilha D; Fora de escopo (Business API / massa)
|
- `docs/roadmap.md` — Trilha D; Fora de escopo (Business API / massa)
|
||||||
- Entrevista CG 2026-07-23 (`output/transcribe/general-coordinator-interview-20260723/`) — “ZAP é o campo”
|
- Entrevista CG 2026-07-23 (`private/transcribe/general-coordinator-interview-20260723/`) — “ZAP é o campo”
|
||||||
- `docs/IMPROVE-APP-PLAN.md` — Little Hire / leak WhatsApp
|
- `docs/IMPROVE-APP-PLAN.md` — Little Hire / leak WhatsApp
|
||||||
- `PRODUCT.md` §1 soberania + atalho pragmático; §5 humano no loop
|
- `PRODUCT.md` §1 soberania + atalho pragmático; §5 humano no loop
|
||||||
- `docs/plans/notifications.md` (D2) — complementar
|
- `docs/plans/notifications.md` (D2) — complementar
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
"url": "https://github.com/fsolla/teqo/issues"
|
"url": "https://github.com/fsolla/teqo/issues"
|
||||||
},
|
},
|
||||||
"author": "Francisco Solla",
|
"author": "Francisco Solla",
|
||||||
"license": "MIT",
|
"license": "UNLICENSED",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "cross-env NODE_OPTIONS=\"--no-deprecation --conditions=react-server\" payload migrate && cross-env NODE_OPTIONS=\"--no-deprecation --max-old-space-size=8000\" next build",
|
"build": "cross-env NODE_OPTIONS=\"--no-deprecation --conditions=react-server\" payload migrate && cross-env NODE_OPTIONS=\"--no-deprecation --max-old-space-size=8000\" next build",
|
||||||
|
|
@ -173,5 +173,6 @@
|
||||||
"unrs-resolver"
|
"unrs-resolver"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977"
|
"packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977",
|
||||||
|
"private": true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
27
private/README.md
Normal file
27
private/README.md
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
# private/ (local only)
|
||||||
|
|
||||||
|
This directory is gitignored except for this README.
|
||||||
|
|
||||||
|
Put field recordings, transcripts, session notes, operational spreadsheets,
|
||||||
|
and other campaign-sensitive material here so **local** agents can collaborate
|
||||||
|
without publishing them to the public GitHub repository.
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
- **Local agents:** write sensitive discovery/field docs under `/private/`. Never
|
||||||
|
commit audio, raw transcripts, operational spreadsheets, or notes with real
|
||||||
|
names / vote deltas / interview verbatim into the public tree. Publish only a
|
||||||
|
cleaned public version under `docs/` when cloud agents need the context.
|
||||||
|
- **Cloud agents:** clones do **not** include `/private/`. Base work on the
|
||||||
|
public-clean docs (e.g. `docs/CUSTOMER.md`). If a task would produce a
|
||||||
|
sensitive deliverable, **report it in chat** and do **not** commit it — ask
|
||||||
|
the human to save it under `/private/` on a local checkout.
|
||||||
|
- Do not `git add` anything under this folder other than this README.
|
||||||
|
|
||||||
|
## Layout (examples)
|
||||||
|
|
||||||
|
- `private/customer/` — full customer/discovery notes
|
||||||
|
- `private/plans/` — observed-session notes
|
||||||
|
- `private/general-coordinator-interview/` — interview audio
|
||||||
|
- `private/transcribe/` — transcripts / diarization
|
||||||
|
- `private/sheets/` — operational vote-projection spreadsheets
|
||||||
|
|
@ -24,7 +24,10 @@ import { dieWithLabel } from './lib/cli.mjs'
|
||||||
const LABEL = 'refresh:stage'
|
const LABEL = 'refresh:stage'
|
||||||
const die = dieWithLabel(LABEL)
|
const die = dieWithLabel(LABEL)
|
||||||
|
|
||||||
const PROJECT_ID = process.env.NEON_PROJECT_ID ?? 'lively-math-34249863'
|
const PROJECT_ID = process.env.NEON_PROJECT_ID
|
||||||
|
if (!PROJECT_ID) {
|
||||||
|
die('Set NEON_PROJECT_ID (Neon console → project id).')
|
||||||
|
}
|
||||||
const DATABASE_NAME = 'neondb'
|
const DATABASE_NAME = 'neondb'
|
||||||
const ROLE_NAME = 'neondb_owner'
|
const ROLE_NAME = 'neondb_owner'
|
||||||
const API = 'https://console.neon.tech/api/v2'
|
const API = 'https://console.neon.tech/api/v2'
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue