Skip to main content

Overview

Estudo Organizado provides extensive configuration options to customize your study experience. All settings are automatically saved to localStorage/IndexedDB and synced across devices when Google Drive sync is enabled.

Configuration Storage

Settings are stored in the state.config object:
// Example configuration structure
state.config = {
  tema: 'dark',                    // Theme name
  darkMode: true,                  // Dark mode toggle
  primeirodiaSemana: 1,           // Week start day (0=Sunday, 1=Monday)
  frequenciaRevisao: [1, 7, 30, 90], // Revision intervals in days
  metas: {                         // Weekly study goals
    horasSemana: 20,
    questoesSemana: 150
  },
  dataProva: '2026-06-15',        // Exam date
  silentModeStart: 22,            // Notification quiet hours start
  silentModeEnd: 8                // Notification quiet hours end
}

Calendar Settings

View Mode

The calendar supports two view modes:
Displays a full month grid with:
  • All days of the month
  • Events shown as chips (up to 3 per day)
  • Overflow indicator (“+N mais”)
  • Previous/next month filling
// Set in views.js
export let calViewMode = 'mes';
export function setCalViewMode(mode) {
  calViewMode = mode;
  renderCurrentView();
}
Displays 7 consecutive days with:
  • Current week based on calDate
  • All events for each day
  • Quick add button per day
  • More space for event details

Week Start Day

Customize which day starts the week:
// Configuration in state.config.primeirodiaSemana
// 0 = Sunday (Domingo)
// 1 = Monday (Segunda) - Default
// 2 = Tuesday (Terça)
// ... etc

// Used in calendar rendering (views.js:496)
const startDow = (firstDay.getDay() - (state.config.primeirodiaSemana || 1) + 7) % 7;
The default week starts on Monday (value: 1). This affects calendar display, weekly statistics, and study cycle planning.

Calendar Navigation

Navigate through dates:
// views.js:481-488
export function calNavigate(dir) {
  if (calViewMode === 'mes') {
    calDate.setMonth(calDate.getMonth() + dir);
  } else {
    calDate.setDate(calDate.getDate() + dir * 7);
  }
  renderCurrentView();
}

Study Goals (Metas)

Set weekly targets to track your progress:

Configuring Goals

Use the prompt function to set goals:
// app.js:213-247
export function promptMetas() {
  const horas = state.config.metas?.horasSemana || 20;
  const quest = state.config.metas?.questoesSemana || 150;
  
  // Shows modal with inputs for:
  // - Meta de Horas (por semana)
  // - Meta de Questões (por semana)
  
  // Saves to state.config.metas
  state.config.metas = {
    horasSemana: h,
    questoesSemana: q
  };
}

Default Values

GoalDefaultDescription
Hours per week20hTotal study time target
Questions per week150Practice questions target

Goal Tracking

Goals are tracked and displayed on the Home dashboard:
// views.js:54-61 - Goal calculation
const metaHoras = state.config.metas?.horasSemana || 20;
const metaQuest = state.config.metas?.questoesSemana || 150;

const horasFeitas = weekStats.totalSeconds / 3600;
const percHoras = Math.min(100, Math.round((horasFeitas / metaHoras) * 100));

const questFeitas = weekStats.totalQuestions;
const percQuest = Math.min(100, Math.round((questFeitas / metaQuest) * 100));
Goal progress bars are shown on the Home view with real-time completion percentages.

Exam Date Configuration

Setting Your Exam Date

Configure your target exam date for countdown tracking:
// app.js:183-211
export function promptDataProva() {
  const atual = state.config.dataProva || '';
  
  // Input format: YYYY-MM-DD
  // Example: "2026-06-15"
  
  if (nova.trim() === '') {
    state.config.dataProva = null;  // Remove date
  } else {
    if (/^\d{4}-\d{2}-\d{2}$/.test(nova)) {
      state.config.dataProva = nova;
    }
  }
}

Countdown Display

The exam date is displayed on the Home dashboard:
// views.js:64-80 - Countdown calculation
const dataProva = state.config.dataProva;
if (dataProva) {
  const today = new Date();
  const provaDate = new Date(dataProva + 'T00:00:00');
  const diffTime = provaDate - today;
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
  
  if (diffDays > 0) {
    // Shows "X dias para a prova"
  } else if (diffDays === 0) {
    // Shows "É hoje! Boa sorte! 🍀"
  } else {
    // Shows "Prova já foi realizada há X dias"
  }
}

Revision Frequency

Configure spaced repetition intervals:
// Default revision schedule (in days)
state.config.frequenciaRevisao = [1, 7, 30, 90];

// This creates review reminders:
// - 1st review: 1 day after completion
// - 2nd review: 7 days after completion
// - 3rd review: 30 days after completion
// - 4th review: 90 days after completion

How It Works

When you mark a subject as completed:
  1. System calculates revision dates based on frequenciaRevisao
  2. Adds completion date + each interval
  3. Displays on Revisões view with countdown
  4. Sends notifications when reviews are due
// logic.js - calcRevisionDates function
function calcRevisionDates(dataConclusao, revisoesFetas, adiamentos) {
  const intervals = state.config.frequenciaRevisao || [1, 7, 30, 90];
  const numRevsDone = revisoesFetas.length;
  
  if (numRevsDone >= intervals.length) return [];  // All revisions done
  
  const nextInterval = intervals[numRevsDone];
  const baseDate = new Date(dataConclusao);
  baseDate.setDate(baseDate.getDate() + nextInterval + (adiamentos || 0));
  
  return [formatDateStr(baseDate)];
}
Revision frequencies are displayed on the Revisões dashboard and can be customized to match your learning style.

Notification Settings

See Notification System for detailed notification configuration including silent hours.

Dashboard Period Filter

Control the time range for dashboard statistics:
// views.js:653
export let dashPeriod = 7; // default: last 7 days

// Available options:
// 7   - Last 7 days
// 30  - Last 30 days
// 90  - Last 3 months
// null - All time

export function setDashPeriod(p) {
  dashPeriod = p;
  renderCurrentView();
}
This filters:
  • Study time statistics
  • Question counts
  • Habit tracking
  • Chart displays

Persistence and Syncing

All settings are automatically saved:

Local Storage

// Triggered after any config change
import { scheduleSave } from './store.js';

// Debounced save (500ms delay)
scheduleSave();

Cloud Sync

Settings sync across devices when enabled:
  • Google Drive: Full state backup including all config
  • Cloudflare: Fast sync on startup (if configured)
Configuration changes take effect immediately but are saved with a 500ms debounce to optimize performance.

Configuration Examples

Medical Student Setup

state.config = {
  tema: 'light',
  primeirodiaSemana: 1,  // Monday
  frequenciaRevisao: [1, 3, 7, 14, 30, 60],  // More frequent reviews
  metas: {
    horasSemana: 35,      // Higher study hours
    questoesSemana: 300   // More practice questions
  },
  dataProva: '2027-01-15',
  silentModeStart: 23,
  silentModeEnd: 7
}

Working Professional Setup

state.config = {
  tema: 'dark',
  primeirodiaSemana: 0,  // Sunday (weekend planning)
  frequenciaRevisao: [1, 7, 30, 90],  // Standard intervals
  metas: {
    horasSemana: 15,      // Realistic for working schedule
    questoesSemana: 75
  },
  dataProva: '2026-11-20',
  silentModeStart: 22,
  silentModeEnd: 8
}

Advanced Configuration

Predictive Statistics Parameters

The system uses your goals to predict weekly performance:
// logic.js - getPredictiveStats
const metaHoras = state.config.metas?.horasSemana || 20;

// Calculates:
// - Burn rate (daily average)
// - Projected completion percentage
// - Status (verde/amarelo/vermelho)
// - Suggestions for improvement
Status thresholds:
  • Verde (Green): Projected ≥ 90% of goal
  • Amarelo (Yellow): Projected 70-89% of goal
  • Vermelho (Red): Projected < 70% of goal

Build docs developers (and LLMs) love