A modern web dashboard for tracking and managing your Beeminder goals. This application provides a clean, organized interface to view your goals, track progress, and manage datapoints.
- Goal Organization: Goals are automatically grouped into:
- Pinned: Goals you've marked as important
- Today: Goals with deadlines today
- Next: Upcoming goals
- Later: Future goals
- Smart Filtering: Search goals by slug/name
- Detail View: Click any goal to see detailed information in a modal
- Keyboard Navigation:
a- Navigate to previous goald- Navigate to next goalEscape- Close modal
- Real-time Updates: Automatically refreshes when goals are queued (every 3 seconds) or periodically (every 60 seconds)
- Datapoint Management: Create and delete datapoints directly from the interface
- Framework: Preact - Fast, lightweight React alternative
- Language: TypeScript
- Build Tool: Vite
- State Management: TanStack Query for server state
- Routing: TanStack Router
- Package Manager: pnpm
- Testing: Vitest
- Node.js (version specified in
.nvmrc) - pnpm
- Clone the repository
- Install dependencies:
pnpm install
Run the development server:
pnpm devThe app will be available at http://localhost:5174
Build for production:
pnpm buildPreview the production build:
pnpm previewRun tests:
pnpm testCheck for linting errors:
pnpm lintFix linting errors automatically:
pnpm lint:fixCheck TypeScript types:
pnpm checkTsThe app uses Beeminder API authentication. You'll need:
- Your Beeminder username
- Your Beeminder API token (available in your Beeminder settings)
These are stored in browser localStorage for convenience.
This application is deployed via Render.com as a static site at:
The deployment configuration is defined in render.yaml.
src/
├── components/ # React/Preact components
├── services/ # API service layer (Beeminder integration)
├── lib/ # Utility functions
├── auth.ts # Authentication logic
├── useGoals.ts # Custom hook for fetching goals
├── queryClient.ts # TanStack Query configuration
└── main.tsx # Application entry point
See LICENSE file for details.