A modern, self-hosted goal tracking and task management system built with TypeScript, React, and PostgreSQL.
Goal Tracker is a comprehensive personal productivity system that combines goal management with task planning. Track yearly, monthly, and weekly goals while managing daily tasks in an integrated calendar view. Built as a monorepo with separate API and web applications, designed for easy self-hosting via Docker.
- π― Hierarchical Goal System: Create yearly goals with monthly/weekly sub-goals
- β Task Management: Separate task entities with size estimation and scheduling
- π Integrated Planner: Calendar view combining goals and tasks
- π Progress Tracking: Multiple modes (task-based, manual, habit tracking)
- π Goal-Task Linking: Many-to-many relationships between goals and tasks
- π± PWA Support: Install as a standalone app on any device
- β¨οΈ Keyboard Accessibility: Optimized keyboard navigation and mobile keyboard handling
- π³ Docker Deployment: Complete containerized stack with GitHub Actions CI/CD
- β‘ Performance Optimized: Efficient API calls with server-side data fetching
- Docker and Docker Compose installed
- Node.js 18+ and pnpm (for local development)
- PostgreSQL 15 (or use Docker container)
# Clone the repository
git clone https://github.com/YOUR_USERNAME/goal-tracker.git
cd goal-tracker
# Create environment file
cp .env.example .env
# Edit .env with your settings
# Start all services
docker compose up -d
# Access the application
# Web UI: http://localhost:5173
# API: http://localhost:3000# Install dependencies
pnpm install
# Set up database
cd apps/api
cp .env.example .env
# Configure DATABASE_URL in .env
# Run migrations
pnpm prisma migrate dev
# Start development servers (from root)
pnpm dev
# Access at:
# Web: http://localhost:5173
# API: http://localhost:3000goal-tracker/
βββ apps/
β βββ api/ # Express.js REST API
β β βββ prisma/ # Database schema & migrations
β β βββ src/ # Route handlers & services
β βββ web/ # React + Vite frontend
β βββ src/ # Components, pages, hooks
βββ packages/shared/ # Shared utilities & types
βββ scripts/ # Deployment helpers
βββ docs/ # Documentation
βββ docker-compose.yml # Docker configuration
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, TailwindCSS |
| Backend | Node.js, Express, Prisma ORM |
| Database | PostgreSQL 15 |
| Build Tools | Vite, pnpm workspaces |
| DevOps | Docker, GitHub Actions |
| UI Library | shadcn/ui, Radix UI |
Goals are long-term objectives with measurable progress:
- Yearly, Monthly, Weekly, or Standalone scopes
- Progress modes: Task-based, Manual Total, or Habit tracking
- Example: "Read 12 books this year"
Tasks are actionable work items:
- Can link to multiple goals
- Have size estimation (in days)
- Schedule on specific dates
- Example: "Read Chapter 1" (size: 1 day)
- Task-Based: Progress calculated from completed linked tasks
- Manual Total: Directly increment progress amount
- Habit: Binary completion tracking (done or not done)
Setup:
-
Create Docker Hub account and GitHub secrets:
DOCKER_USERNAME,DOCKER_PASSWORDSSH_PRIVATE_KEY,SERVER_HOST,SERVER_USERDATABASE_URL
-
Run server setup script:
curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/goal-tracker/main/scripts/server-setup.sh | bash -
Push to main branch - deployment starts automatically
# Build Docker images
docker compose -f docker-compose.prod.yml build
# Deploy
docker compose -f docker-compose.prod.yml up -dOption A: Dedicated PostgreSQL (default)
# Use included PostgreSQL container
docker compose up -dOption B: Shared PostgreSQL (existing database)
# Use docker-compose.shared-network.yml
docker compose -f docker-compose.shared-network.yml up -dAPI (apps/api/.env):
DATABASE_URL=postgresql://user:pass@localhost:5432/goaltracker
AUTH0_ISSUER=https://your-auth0-domain/
AUTH0_AUDIENCE=https://your-api-audienceWeb (apps/web/.env):
VITE_API_URL=http://localhost:3000/api
VITE_AUTH0_DOMAIN=your-auth0-domain
VITE_AUTH0_CLIENT_ID=your-client-id
VITE_AUTH0_AUDIENCE=https://your-api-audiencecd apps/api
# Create new migration
pnpm prisma migrate dev --name migration_name
# Check status
pnpm prisma migrate status
# View data UI
pnpm prisma studio- Quick Start - Get started in 5 minutes
- Deployment Guide - Production setup details
- Database Setup - PostgreSQL options
- HTTPS Setup - SSL with Tailscale
- Code Style - Formatting conventions
- PWA Setup - Progressive Web App config
- Architecture Notes - Design decisions
For authentication implementation details, see
.copilot-instructions.md
- Core CRUD operations
- Calendar planner with drag-and-drop
- Goal hierarchy & progress rollup
- Bulk task creation
- Docker deployment
- GitHub Actions CI/CD
- PWA support
- Keyboard accessibility (useKeyboardHeight hook)
- API performance optimization
- TypeScript & Prisma fixes
- React Query migration
- TypeScript strict mode
- Component library extraction
- Testing suite (Vitest + RTL)
- Advanced search & filtering
- Mobile UX improvements
We welcome contributions! Please follow these steps:
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Commit with conventional messages
- Push and open a Pull Request
# Format code
pnpm format
# Check types
pnpm type-check
# Run linter
pnpm lint
# Build
pnpm build- Self-hosted: No cloud dependencies
- Single-user: Designed for personal use
- Network: Run behind VPN/firewall for extra security
- HTTPS: Optional but recommended with Tailscale
For security issues: security@example.com
MIT License - see LICENSE file
Built with shadcn/ui, Prisma, Tailwind CSS, React, and Vite
Made with β€οΈ for productivity enthusiasts