mirror of
https://github.com/lucasrcsantana/story-generator.git
synced 2025-12-17 05:47:52 +00:00
feat: Documentação do Analytics
This commit is contained in:
parent
41a225d460
commit
98411b2aa1
265
src/components/analytics/README.md
Normal file
265
src/components/analytics/README.md
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
# 📊 Sistema de Analytics
|
||||||
|
|
||||||
|
Este diretório contém a implementação do sistema de analytics do Leiturama, utilizando Rudderstack como principal ferramenta de tracking.
|
||||||
|
|
||||||
|
## 📦 Componentes
|
||||||
|
|
||||||
|
### PageTracker
|
||||||
|
Componente responsável pelo tracking automático de visualizações de página.
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
// App.tsx
|
||||||
|
<PageTracker />
|
||||||
|
```
|
||||||
|
|
||||||
|
### GoogleTagManager
|
||||||
|
Componente para integração com Google Tag Manager.
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
// App.tsx
|
||||||
|
<GoogleTagManager gtmId="GTM-XXXXXX" />
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 Hooks Disponíveis
|
||||||
|
|
||||||
|
### useButtonTracking
|
||||||
|
|
||||||
|
Hook para rastreamento de interações com botões e elementos clicáveis.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const { trackButtonClick } = useButtonTracking({
|
||||||
|
category?: string; // Categoria do evento (default: 'interaction')
|
||||||
|
location?: string; // Localização do botão (default: pathname atual)
|
||||||
|
});
|
||||||
|
|
||||||
|
// Uso:
|
||||||
|
trackButtonClick('button-id', {
|
||||||
|
label: 'Botão de Login',
|
||||||
|
variant: 'primary',
|
||||||
|
position: 'header',
|
||||||
|
section: 'auth'
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### useFormTracking
|
||||||
|
|
||||||
|
Hook para rastreamento de interações com formulários.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const {
|
||||||
|
trackFormStarted,
|
||||||
|
trackFormStepCompleted,
|
||||||
|
trackFormSubmitted,
|
||||||
|
trackFormError,
|
||||||
|
trackFormAbandoned,
|
||||||
|
trackFieldInteraction
|
||||||
|
} = useFormTracking({
|
||||||
|
formId: string; // ID único do formulário
|
||||||
|
formName: string; // Nome descritivo do formulário
|
||||||
|
category?: string; // Categoria (default: 'form')
|
||||||
|
});
|
||||||
|
|
||||||
|
// Exemplos de Uso:
|
||||||
|
// Início do formulário
|
||||||
|
trackFormStarted();
|
||||||
|
|
||||||
|
// Completou um passo
|
||||||
|
trackFormStepCompleted('dados-pessoais', true);
|
||||||
|
|
||||||
|
// Submeteu o formulário
|
||||||
|
trackFormSubmitted(true, {
|
||||||
|
user_type: 'student'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Erro no formulário
|
||||||
|
trackFormError('validation', 'Email inválido', 'email');
|
||||||
|
|
||||||
|
// Abandonou o formulário
|
||||||
|
trackFormAbandoned('payment');
|
||||||
|
|
||||||
|
// Interação com campo
|
||||||
|
trackFieldInteraction('email', 'focus');
|
||||||
|
```
|
||||||
|
|
||||||
|
### useStudentTracking
|
||||||
|
|
||||||
|
Hook especializado para rastreamento de atividades do estudante.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const {
|
||||||
|
trackStoryGenerated,
|
||||||
|
trackAudioRecorded,
|
||||||
|
trackExerciseCompleted,
|
||||||
|
trackInterestAdded,
|
||||||
|
trackInterestRemoved
|
||||||
|
} = useStudentTracking();
|
||||||
|
|
||||||
|
// Exemplo: Rastrear geração de história
|
||||||
|
trackStoryGenerated({
|
||||||
|
story_id: 'story-123',
|
||||||
|
theme: 'aventura',
|
||||||
|
prompt: 'Uma história sobre...',
|
||||||
|
generation_time: 2.5,
|
||||||
|
word_count: 300,
|
||||||
|
student_id: 'student-123'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Exemplo: Rastrear exercício completado
|
||||||
|
trackExerciseCompleted({
|
||||||
|
exercise_id: 'ex-123',
|
||||||
|
story_id: 'story-123',
|
||||||
|
student_id: 'student-123',
|
||||||
|
exercise_type: 'pronunciation',
|
||||||
|
score: 85,
|
||||||
|
time_spent: 120
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### useErrorTracking
|
||||||
|
|
||||||
|
Hook para rastreamento de erros e exceções.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const {
|
||||||
|
trackError,
|
||||||
|
trackErrorBoundary,
|
||||||
|
trackApiError
|
||||||
|
} = useErrorTracking({
|
||||||
|
category?: string; // Categoria (default: 'error')
|
||||||
|
userId?: string; // ID do usuário
|
||||||
|
userEmail?: string; // Email do usuário
|
||||||
|
});
|
||||||
|
|
||||||
|
// Exemplo: Rastrear erro genérico
|
||||||
|
trackError(error, {
|
||||||
|
componentName: 'LoginForm',
|
||||||
|
action: 'submit',
|
||||||
|
metadata: { attempt: 2 }
|
||||||
|
});
|
||||||
|
|
||||||
|
// Exemplo: Rastrear erro de API
|
||||||
|
trackApiError(error, '/api/login', 'POST', {
|
||||||
|
email: 'user@example.com'
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 Padrões de Nomenclatura
|
||||||
|
|
||||||
|
### Eventos
|
||||||
|
|
||||||
|
- Use snake_case para nomes de eventos
|
||||||
|
- Formato: `{objeto}_{ação}`
|
||||||
|
- Exemplos:
|
||||||
|
- `button_clicked`
|
||||||
|
- `form_submitted`
|
||||||
|
- `story_generated`
|
||||||
|
- `exercise_completed`
|
||||||
|
|
||||||
|
### Propriedades
|
||||||
|
|
||||||
|
- Use snake_case para nomes de propriedades
|
||||||
|
- Categorize propriedades por namespace:
|
||||||
|
```typescript
|
||||||
|
{
|
||||||
|
// Propriedades de página
|
||||||
|
page_url: string;
|
||||||
|
page_title: string;
|
||||||
|
|
||||||
|
// Propriedades de usuário
|
||||||
|
user_id: string;
|
||||||
|
user_type: string;
|
||||||
|
|
||||||
|
// Propriedades de elemento
|
||||||
|
element_type: string;
|
||||||
|
element_id: string;
|
||||||
|
|
||||||
|
// Propriedades de formulário
|
||||||
|
form_id: string;
|
||||||
|
form_name: string;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Categorias
|
||||||
|
|
||||||
|
Categorias predefinidas disponíveis em `EVENT_CATEGORIES`:
|
||||||
|
- `page`: Eventos de visualização de página
|
||||||
|
- `user`: Eventos relacionados ao usuário
|
||||||
|
- `story`: Eventos de histórias
|
||||||
|
- `exercise`: Eventos de exercícios
|
||||||
|
- `interaction`: Eventos de interação do usuário
|
||||||
|
- `error`: Eventos de erro
|
||||||
|
- `subscription`: Eventos de assinatura
|
||||||
|
- `auth`: Eventos de autenticação
|
||||||
|
- `navigation`: Eventos de navegação
|
||||||
|
- `form`: Eventos de formulário
|
||||||
|
|
||||||
|
## 🔨 Exemplos de Implementação
|
||||||
|
|
||||||
|
### Botão com Tracking
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<Button
|
||||||
|
trackingId="signup-button"
|
||||||
|
variant="primary"
|
||||||
|
size="lg"
|
||||||
|
trackingProperties={{
|
||||||
|
category: EVENT_CATEGORIES.AUTH,
|
||||||
|
action: 'signup_click',
|
||||||
|
label: 'homepage_hero',
|
||||||
|
position: 'hero_section'
|
||||||
|
}}
|
||||||
|
onClick={handleSignup}
|
||||||
|
>
|
||||||
|
Cadastre-se Agora
|
||||||
|
</Button>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Formulário com Tracking
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<Form
|
||||||
|
formId="signup-form"
|
||||||
|
formName="student-signup"
|
||||||
|
trackingProperties={{
|
||||||
|
category: EVENT_CATEGORIES.AUTH,
|
||||||
|
user_type: 'student',
|
||||||
|
source: 'homepage'
|
||||||
|
}}
|
||||||
|
onSubmit={handleSubmit}
|
||||||
|
>
|
||||||
|
{/* campos do formulário */}
|
||||||
|
</Form>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Link com Tracking
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
<Link
|
||||||
|
to="/dashboard"
|
||||||
|
trackingId="dashboard-link"
|
||||||
|
trackingProperties={{
|
||||||
|
category: EVENT_CATEGORIES.NAVIGATION,
|
||||||
|
section: 'sidebar',
|
||||||
|
position: 'top'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Dashboard
|
||||||
|
</Link>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tracking de Erro em Try/Catch
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
try {
|
||||||
|
await submitForm(data);
|
||||||
|
} catch (error) {
|
||||||
|
errorTracking.trackError(error, {
|
||||||
|
componentName: 'SignupForm',
|
||||||
|
action: 'submit',
|
||||||
|
metadata: {
|
||||||
|
formData: data,
|
||||||
|
attempt: retryCount
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
```
|
||||||
Loading…
Reference in New Issue
Block a user