MCPcopy Index your code
hub / github.com/dohsimpson/HabitTrove

github.com/dohsimpson/HabitTrove @v0.2.31

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.31 ↗ · + Follow
354 symbols 1,185 edges 134 files 2 documented · 1%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

HabitTrove

cover

HabitTrove is a gamified habit tracking application that helps you build and maintain positive habits by rewarding you with coins, which you can use to exchange for rewards.

Also, try TaskTrove:

tasktrove-banner

Try the Demo

Want to try HabitTrove before installing? Visit the public demo instance to experience all features without any setup required. (do not store personal info. Data on the demo instance is reset daily)

Features

  • 🎯 Create and track daily habits
  • 🏆 Earn coins for completing habits
  • 💰 Create a wishlist of rewards to redeem with earned coins
  • 📊 View your habit completion streaks and statistics
  • ✏️ Add freehand drawings to habits and wishlist items for visual reminders
  • 📅 Calendar heatmap to visualize your progress (WIP)
  • 🌍 Multi-language support (English, Español, Català, Deutsch, Français, Русский, 简体中文, 한국어, 日本語)
  • 🌙 Dark mode support
  • 📲 Progressive Web App (PWA) support
  • 💾 Automatic daily backups with rotation

Usage

  1. Creating Habits: Click the "Add Habit" button to create a new habit. Set a name, description, and coin reward.

  2. Tracking Habits: Mark habits as complete on your dashboard. Each completion earns you the specified coins.

  3. Wishlist: Add rewards to your wishlist that you can redeem with earned coins.

  4. Statistics: View your progress through the heatmap and streak counters.

Docker Deployment

HabitTrove can be run using Docker in several ways, depending on your needs:

Using Pre-built Images

The easiest way to run HabitTrove is using our pre-built Docker images from DockerHub:

  1. First, prepare the data directory with correct permissions:
mkdir -p data backups
chown -R 1001:1001 data backups # Required for the nextjs user in container
  1. Then run using either method:
# Generate a secure authentication secret
export AUTH_SECRET=$(openssl rand -base64 32)
echo $AUTH_SECRET

# Using docker-compose (recommended)
## Update the AUTH_SECRET environment variable in docker-compose.yaml
nano docker-compose.yaml
## Start the container
docker compose up -d

# Or using docker run directly
docker run -d \
  -p 3000:3000 \
  -v ./data:/app/data \
  -v ./backups:/app/backups \ # Add this line to map the backups directory
  -e AUTH_SECRET=$AUTH_SECRET \
  dohsimpson/habittrove

Available image tags:

  • latest: Stable release version, recommended for most users
  • vX.Y.Z (e.g., v0.1.4): Specific version for reproducible deployments and rollbacks
  • dev: Latest development build from the main branch, may contain unstable features

Choose your tag based on needs:

  • Use latest for general production use
  • Use version tags (e.g., v0.2.9) for reproducible deployments
  • Use dev for testing new features

Note on Volumes: The application stores user data in /app/data and backups in /app/backups inside the container. The examples above map ./data and ./backups from your host machine to these container directories. Ensure these host directories exist and have the correct permissions (chown -R 1001:1001 data backups).

Building Locally

If you want to build the image locally (useful for development):

# Build the Docker image
npm run docker-build

# Run the container
npm run docker-run

The application data will be persisted in the data directory in both cases.

Building the Project

To contribute to HabitTrove, you'll need to set up a development environment. Here's how to get started:

Prerequisites

  • Node.js 20 or later
  • npm package manager
  • Git (for version control)
  • bun (for running tests)

Setting Up the Development Environment

  1. Clone the repository and navigate to the project directory:
git clone https://github.com/dohsimpson/habittrove.git
cd habittrove
  1. Install project dependencies:
npm install --force
  1. Set up the development environment:
npm run setup:dev
  1. Start the development server:
npm run dev
  1. Open http://localhost:3000 in your browser to access the development version.

Running Tests

Before contributing, make sure to run the test suite:

npm test

Building for Production

To build the project for production:

npm run build

This will create an optimized production build in the .next directory.

Code Quality Tools

The project uses several tools to maintain code quality:

  • ESLint for linting: npm run lint
  • TypeScript type checking: npm run typecheck

Run these commands regularly during development to catch issues early.

Contributing

We welcome feature requests and bug reports! Please open an issue. We do not accept pull request at the moment.

License

This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.

Support

If you encounter any issues or have questions, please file an issue on the GitHub repository.

Extension points exported contracts — how you extend this code

StartupPermissionResult (Interface)
* Checks startup permissions for the data directory
lib/startup-checks.ts
Session (Interface)
(no doc)
types/next-auth.d.ts
PasswordEntryFormProps (Interface)
(no doc)
components/PasswordEntryForm.tsx
HabitContextMenuItemsProps (Interface)
(no doc)
components/HabitContextMenuItems.tsx
EmptyStateProps (Interface)
(no doc)
components/EmptyState.tsx
UpcomingItemsProps (Interface)
(no doc)
components/DailyOverview.tsx
HabitStreakProps (Interface)
(no doc)
components/HabitStreak.tsx
HabitHeatmapProps (Interface)
(no doc)
components/HabitHeatmap.tsx

Core symbols most depended-on inside this repo

cn
called by 106
lib/utils.ts
toast
called by 42
hooks/use-toast.ts
roundToInteger
called by 23
lib/utils.ts
t2d
called by 23
lib/utils.ts
getTodayInTimezone
called by 22
lib/utils.ts
getNow
called by 20
lib/utils.ts
isHabitDue
called by 17
lib/utils.ts
convertHumanReadableFrequencyToMachineReadable
called by 16
lib/utils.ts

Shape

Function 291
Interface 60
Class 2
Method 1

Languages

TypeScript100%

Modules by API surface

lib/utils.ts41 symbols
app/actions/data.ts31 symbols
lib/types.ts20 symbols
components/DrawingCanvas.tsx11 symbols
components/PomodoroTimer.tsx10 symbols
hooks/useWishlist.tsx9 symbols
hooks/useHabits.tsx9 symbols
hooks/use-toast.ts9 symbols
components/UserSelectModal.tsx9 symbols
components/DailyOverview.tsx8 symbols
components/UserForm.tsx6 symbols
components/CoinsManager.tsx6 symbols

For agents

$ claude mcp add HabitTrove \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page