Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/src/features/catalog/AgencyGrid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const CATEGORIES: Category[] = [
"business",
"learning",
"finance",
"people",
];

/** A fixed color per role, so the mascots tell the cards apart. */
Expand Down
6 changes: 3 additions & 3 deletions app/src/features/catalog/agency.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ describe("the Bot agency", () => {

fireEvent.click(within(invite).getByRole("button", { name: "See all bots" }));
const dialog = await screen.findByRole("dialog", { name: "Bot agency" });
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(79);
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(86);
});

test("a crew with only its chief invites the owner to pick bots, and a click adds one", async () => {
Expand Down Expand Up @@ -82,7 +82,7 @@ describe("the Bot agency", () => {
await openCrewWithChief();
fireEvent.click(screen.getByRole("button", { name: "Bot agency" }));
const dialog = await screen.findByRole("dialog", { name: "Bot agency" });
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(79);
expect(await within(dialog).findAllByRole("listitem")).toHaveLength(86);

fireEvent.click(within(dialog).getByRole("button", { name: "Marketing & sales" }));
expect(within(dialog).getAllByRole("listitem")).toHaveLength(24);
Expand Down Expand Up @@ -129,7 +129,7 @@ describe("the Bot agency", () => {
expect(addCalls(fake)[0]).toMatchObject({ templateId: "code-reviewer" });

fireEvent.click(within(dialog).getByRole("button", { name: "Back to all bots" }));
expect(within(dialog).getAllByRole("listitem")).toHaveLength(79);
expect(within(dialog).getAllByRole("listitem")).toHaveLength(86);
});

test("the same role twice gets another name", async () => {
Expand Down
3 changes: 3 additions & 0 deletions app/src/i18n/en/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { engineering } from "./catalogEngineering";
import { finance } from "./catalogFinance";
import { marketing } from "./catalogMarketing";
import { paidMedia } from "./catalogPaidMedia";
import { people } from "./catalogPeople";
import { product } from "./catalogProduct";

// The Bot agency (spec 26): ready-made bots the owner adds to a crew. The
Expand Down Expand Up @@ -34,6 +35,7 @@ export const catalog = {
marketing: "Marketing & sales",
learning: "Learning",
finance: "Finance",
people: "People & HR",
},
none: "No bot matches that.",
loading: "Loading the bots…",
Expand Down Expand Up @@ -62,5 +64,6 @@ export const catalog = {
...design,
...finance,
...paidMedia,
...people,
},
};
76 changes: 76 additions & 0 deletions app/src/i18n/en/catalogPeople.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
// People & HR roles (spec 26.3): what the owner reads about each. None
// decides anything about a person; each says so.

export const people = {
"training-designer": {
name: "Training Designer",
role: "Designs training for a team: what people must learn, the lessons and exercises, and how to tell it worked",
summary:
"Designs training for your team, with lessons, exercises and a way to tell if it worked",
about:
"Starts from what people should do differently afterwards, not from the topic. Writes goals you can observe, short lessons with a practice for each, exercises with answers and notes for whoever teaches. It also says how you will know it worked a month later, and tells you if training is not what is missing.",
when: "When a team has to learn a new skill, tool or way of working, or a new hire has to get up to speed.",
pairs: "Change Manager, for rolling it out, and Presentation Designer, for the slides.",
},
"change-manager": {
name: "Change Manager",
role: "Plans how to bring a change to a team: who it affects, what to say and when, how to hear concerns and how to see if it took hold",
summary:
"Plans how to bring a change to your team: who it touches, what to say, when, and how to hear concerns",
about:
"Takes a change, such as a new tool or a new process, and plans how to bring it to the people it affects: who hears first and in what words, the questions to expect with honest answers, how concerns come back to you and the support afterwards. It does not announce anything itself, and it never spins the hard parts.",
when: "Before you introduce something that will change how people work.",
pairs: "Training Designer, for the learning, and Writer, for the messages.",
},
"performance-review-coach": {
name: "Performance Review Coach",
role: "Helps managers prepare fair, specific feedback and review conversations, from the facts and examples they bring",
summary:
"Helps you prepare fair, specific feedback and review conversations from the facts you bring",
about:
"Works from the examples you bring and writes feedback that is specific, about the work and balanced, then checks its own words for bias. It plans the conversation and sets goals you can check. Pay, promotion and warnings stay your decisions, and it never contacts the person.",
when: "Before a review, a hard conversation or a round of feedback.",
pairs: "Writer, to polish the wording, and Goals Coach, for next-period goals.",
},
"hr-policy-writer": {
name: "HR Policy Writer",
role: "Drafts clear workplace policies and an employee handbook in plain words, for a lawyer or advisor to check",
summary:
"Drafts clear workplace policies and a staff handbook in plain words, for a professional to check",
about:
"Drafts policies on time off, remote work, expenses, conduct and complaints, each with its purpose, rule and steps, plus a two-minute version. It does not state the law: passages that depend on labor law are marked as questions for a lawyer or an HR advisor in your country. Nothing it writes is legally checked.",
when: "When your team has grown and the rules live only in people's heads.",
pairs: "Editor, to polish, and Change Manager, to roll the policies out.",
},
"engagement-survey-analyst": {
name: "Engagement Survey Analyst",
role: "Designs short staff surveys and reads the answers, protecting anonymity, and turns them into a few clear actions",
summary:
"Designs short staff surveys, reads the answers while keeping people anonymous, and finds the actions",
about:
"Asks first whether you will act on the answers, then writes a short, neutral survey and says plainly who will see the results. It reads the answers by theme and never shows a result for a group so small that a person could be recognized. It ends with three to five actions and a message to the team.",
when: "When you want to know how your team really feels, and are ready to do something about it.",
pairs:
"Data Analyst, for a large set of answers, and Writer, for the message back to the team.",
},
"resume-tailor": {
name: "Resume Tailor",
role: "Rewrites your resume for a specific job, from your real experience, and prepares you for the interview",
summary:
"Rewrites your resume for a specific job from your real experience, and prepares you for the interview",
about:
"Reads the job post, matches each requirement to something you truly did and rewrites your resume and a short cover letter for that job. It asks for numbers and examples, prepares the likely interview questions with answers built from your own stories, and never invents a job, a degree, a skill or a number.",
when: "Whenever you apply for a job that matters.",
pairs: "Career Coach, for the bigger picture, and Editor, to proof the final texts.",
},
"career-coach": {
name: "Career Coach",
role: "Helps you think through your next step at work: what you want, what you are good at, the options and a small plan",
summary: "Helps you think through your next step at work and turn it into a small, doable plan",
about:
"Listens first, then helps you see what you want, what you are good at and two or three real options with what each one costs. It turns your choice into three small steps for the next month and helps you prepare a hard conversation, such as asking for a raise. It is not a therapist or an adviser, and the choice is yours.",
when: "When you are unsure about your next step at work, or facing a hard choice.",
pairs:
"Resume Tailor, for the application, and Researcher, for facts about a field or an employer.",
},
};
3 changes: 3 additions & 0 deletions app/src/i18n/es/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { engineering } from "./catalogEngineering";
import { finance } from "./catalogFinance";
import { marketing } from "./catalogMarketing";
import { paidMedia } from "./catalogPaidMedia";
import { people } from "./catalogPeople";
import { product } from "./catalogProduct";

export const catalog: Messages["catalog"] = {
Expand All @@ -31,6 +32,7 @@ export const catalog: Messages["catalog"] = {
marketing: "Marketing y ventas",
learning: "Aprendizaje",
finance: "Finanzas",
people: "Personas y RR. HH.",
},
none: "Ningún bot coincide con eso.",
loading: "Cargando los bots…",
Expand Down Expand Up @@ -59,5 +61,6 @@ export const catalog: Messages["catalog"] = {
...design,
...finance,
...paidMedia,
...people,
},
};
78 changes: 78 additions & 0 deletions app/src/i18n/es/catalogPeople.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import type { people as en } from "../en/catalogPeople";

export const people: typeof en = {
"training-designer": {
name: "Diseñador de formación",
role: "Diseña formación para un equipo: lo que la gente debe aprender, las lecciones y ejercicios, y cómo saber si funcionó",
summary:
"Diseña formación para tu equipo, con lecciones, ejercicios y una forma de saber si funcionó",
about:
"Parte de lo que la gente debe hacer distinto después, no del tema. Escribe objetivos que se pueden observar, lecciones cortas con una práctica cada una, ejercicios con respuestas y notas para quien enseña. También dice cómo sabrás que funcionó un mes después, y avisa si la formación no es lo que falta.",
when: "Cuando un equipo debe aprender una habilidad, herramienta o forma de trabajar, o un recién llegado tiene que ponerse al día.",
pairs:
"Gestor del cambio, para la implantación, y Diseñador de presentaciones, para las diapositivas.",
},
"change-manager": {
name: "Gestor del cambio",
role: "Planifica cómo llevar un cambio a un equipo: a quién afecta, qué decir y cuándo, cómo escuchar las dudas y ver si cuajó",
summary:
"Planifica cómo llevar un cambio a tu equipo: a quién afecta, qué decir, cuándo, y cómo escuchar las dudas",
about:
"Toma un cambio, como una herramienta o un proceso nuevo, y planifica cómo llevarlo a quienes afecta: quién lo sabe primero y con qué palabras, las preguntas esperadas con respuestas honestas, cómo vuelven las dudas a ti y el apoyo después. No anuncia nada por su cuenta y nunca disfraza las partes difíciles.",
when: "Antes de introducir algo que va a cambiar la forma de trabajar de la gente.",
pairs: "Diseñador de formación, para el aprendizaje, y Redactor, para los mensajes.",
},
"performance-review-coach": {
name: "Coach de evaluación de desempeño",
role: "Ayuda a los responsables a preparar comentarios justos y concretos y conversaciones de evaluación, con los hechos y ejemplos que traen",
summary:
"Te ayuda a preparar comentarios justos y concretos y conversaciones de evaluación, con los hechos que traes",
about:
"Trabaja con los ejemplos que traes y escribe un comentario concreto, sobre el trabajo y equilibrado, y luego revisa sus propias palabras en busca de sesgo. Planifica la conversación y fija metas que se pueden comprobar. El sueldo, el ascenso y la sanción siguen siendo decisiones tuyas, y nunca contacta a la persona.",
when: "Antes de una evaluación, una conversación difícil o una ronda de comentarios.",
pairs: "Redactor, para pulir el texto, y Coach de metas, para las metas del próximo periodo.",
},
"hr-policy-writer": {
name: "Redactor de políticas de RR. HH.",
role: "Redacta políticas de trabajo y un manual del empleado en palabras sencillas, para que un abogado o asesor lo revise",
summary:
"Redacta políticas de trabajo y un manual del equipo en palabras sencillas, para que un profesional lo revise",
about:
"Redacta políticas sobre días libres, trabajo remoto, gastos, conducta y quejas, cada una con su propósito, regla y pasos, más una versión de dos minutos. No afirma lo que dice la ley: los pasajes que dependen del derecho laboral quedan como preguntas para un abogado o asesor de RR. HH. de tu país. Nada de lo que escribe está revisado legalmente.",
when: "Cuando tu equipo ha crecido y las reglas solo existen en la cabeza de la gente.",
pairs: "Corrector de textos, para pulir, y Gestor del cambio, para implantar las políticas.",
},
"engagement-survey-analyst": {
name: "Analista de encuestas de clima laboral",
role: "Diseña encuestas cortas para el equipo y lee las respuestas, protegiendo el anonimato, y las convierte en pocas acciones claras",
summary:
"Diseña encuestas cortas para el equipo, lee las respuestas manteniendo el anonimato y encuentra las acciones",
about:
"Pregunta primero si vas a actuar con las respuestas, luego escribe una encuesta corta y neutral y dice con claridad quién verá los resultados. Lee las respuestas por tema y nunca muestra el resultado de un grupo tan pequeño que alguien pueda ser reconocido. Termina con tres a cinco acciones y un mensaje para el equipo.",
when: "Cuando quieres saber cómo se siente de verdad tu equipo y estás listo para hacer algo al respecto.",
pairs:
"Analista de datos, para muchas respuestas, y Redactor, para el mensaje de vuelta al equipo.",
},
"resume-tailor": {
name: "Adaptador de currículums",
role: "Reescribe tu currículum para un puesto concreto, a partir de tu experiencia real, y te prepara para la entrevista",
summary:
"Reescribe tu currículum para un puesto a partir de tu experiencia real y te prepara para la entrevista",
about:
"Lee la oferta de empleo, empareja cada requisito con algo que realmente hiciste y reescribe tu currículum y una carta breve para ese puesto. Te pide cifras y ejemplos, prepara las preguntas probables de la entrevista con respuestas hechas de tus propias historias y nunca inventa un empleo, un título, una habilidad ni una cifra.",
when: "Siempre que te presentes a un puesto que importa.",
pairs:
"Coach de carrera, para el panorama general, y Corrector de textos, para revisar los textos finales.",
},
"career-coach": {
name: "Coach de carrera",
role: "Te ayuda a pensar en tu próximo paso en el trabajo: lo que quieres, en qué eres bueno, las opciones y un plan pequeño",
summary:
"Te ayuda a pensar en tu próximo paso en el trabajo y a convertirlo en un plan pequeño y posible",
about:
"Escucha primero y luego te ayuda a ver lo que quieres, en qué eres bueno y dos o tres opciones reales con lo que cuesta cada una. Convierte tu elección en tres pasos pequeños para el próximo mes y ayuda a preparar una conversación difícil, como pedir un aumento. No es terapeuta ni asesor, y la elección es tuya.",
when: "Cuando dudas sobre tu próximo paso en el trabajo, o te enfrentas a una elección difícil.",
pairs:
"Adaptador de currículums, para la candidatura, e Investigador, para datos sobre un sector o una empresa.",
},
};
3 changes: 3 additions & 0 deletions app/src/i18n/pt-BR/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { engineering } from "./catalogEngineering";
import { finance } from "./catalogFinance";
import { marketing } from "./catalogMarketing";
import { paidMedia } from "./catalogPaidMedia";
import { people } from "./catalogPeople";
import { product } from "./catalogProduct";

export const catalog: Messages["catalog"] = {
Expand All @@ -31,6 +32,7 @@ export const catalog: Messages["catalog"] = {
marketing: "Marketing e vendas",
learning: "Aprendizado",
finance: "Finanças",
people: "Pessoas e RH",
},
none: "Nenhum bot combina com isso.",
loading: "Carregando os bots…",
Expand Down Expand Up @@ -59,5 +61,6 @@ export const catalog: Messages["catalog"] = {
...design,
...finance,
...paidMedia,
...people,
},
};
Loading
Loading