Aplicação web full-stack para gerenciamento de rotina pessoal e organização semanal de tarefas. O calendário sempre inicia na segunda-feira, termina no domingo e suporta atividades fixas recorrentes e atividades únicas por data.
- Frontend: Vite, React, TypeScript, TailwindCSS, Framer Motion, TanStack Query, React Hook Form, Zustand e shadcn/ui.
- Backend: Go, Fiber, REST API, GORM e SQLite.
- Package manager: Bun.
- Calendário semanal responsivo com navegação entre semanas.
- Destaque visual do dia atual.
- CRUD de atividades fixas e não fixas.
- Ordenação automática por horário crescente no backend e na interface.
- Drag and drop entre dias da semana.
- Modal de criação/edição com validação.
- Confirmação antes de excluir.
- Marcação de tarefa concluída.
- Filtro por categoria e busca textual.
- Estatísticas semanais e progresso diário.
- Dark mode persistente.
- Skeleton loading, toasts e microinterações.
- Cache local simples para leitura offline da última semana consultada.
- Bun 1.1+
- Go 1.23+
bun installbun run go -- -C backend mod downloadPara iniciar frontend e backend juntos:
bun run devPara iniciar separadamente:
bun run dev:apibun run dev:webFrontend: http://localhost:5173
Backend: http://localhost:8080
O SQLite é criado automaticamente em:
backend/data/myroutine.db
É possível alterar o caminho com:
DATABASE_PATH=backend/data/dev.db bun run dev:apiO backend aceita PORT, variável definida automaticamente pelo Render. Configure o serviço apontando para a pasta backend ou usando comandos com -C backend.
Variáveis de ambiente:
DATABASE_PATH=data/myroutine.db
ALLOW_ORIGINS=https://seu-front.vercel.appSe usar disco persistente no Render, aponte o SQLite para o caminho montado, por exemplo:
DATABASE_PATH=/var/data/myroutine.dbConfigure a URL pública da API com o prefixo /api:
VITE_API_URL=https://seu-backend.onrender.com/apiSem essa variável, o frontend usa /api, útil apenas quando frontend e backend estão no mesmo domínio/proxy.
Base URL: /api
GET /healthGET /activities?weekStart=YYYY-MM-DD&query=&category=POST /activitiesPUT /activities/:idPATCH /activities/:id/completePATCH /activities/:id/moveDELETE /activitiesDELETE /activities/:idGET /study/topicsPOST /study/topicsPOST /study/topics/:id/subtopicsPATCH /study/subtopics/:id/completeDELETE /study/topics/:idDELETE /study/subtopics/:id
Exemplo de payload:
{
"title": "Treino funcional",
"description": "Rotina de força e mobilidade",
"startTime": "08:00",
"durationMinutes": 60,
"type": "fixed",
"weekdays": [1, 3, 5],
"color": "#38bdf8",
"category": "Saúde",
"priority": "high"
}frontend/src
components
activity
calendar
ui
hooks
lib
store
styles
types
backend
cmd/api
internal
config
database
dto
handlers
middleware
models
repositories
services
bun run typecheckbun run go -- -C backend test ./...