Goal Tracking & Daily Habit Building SaaS Platform
Transform your long-term goals into visual streaks, daily consistency heatmaps, and community accountability.
- Overview
- Key Features
- Tech Stack
- Database Schema & Architecture
- Getting Started
- Available Scripts
- Commit Hooks & Code Quality
- Documentation & Guides
- Community & Contributing
- License
Grova is a modern, high-performance web application designed to help individuals and teams track their habits, reach ambitious targets, and maintain daily accountability. Taking inspiration from activity contribution graphs, Grova turns progress into interactive color-coded heatmaps, streak tracking algorithms, and real-time social feeds.
Whether you're tracking coding hours, fitness routines, reading targets, or financial savings, Grova provides an intuitive dashboard with rich visual feedback.
Note
Simple & Easy to Self-Host: Grova is kept intentionally lightweight and straightforward so that anyone can quickly self-host and customize it. This is a personal/hobby project created for ease of deployment and simplicity.
- π© Contribution Heatmap Grid: Visual 365-day activity grid displaying your daily effort intensity across all active goals.
- π₯ Smart Streak Calculations: Real-time tracking of your current streak, longest streak, total contributions, and percentage completion rate.
- π― Flexible Goal Structures:
TOTAL_TARGET: Cumulative target tracking (e.g. read 24 books or code 500 hours over a year).DAILY_RECURRING: Daily habitual targets (e.g. meditate 20 mins every day).WEEKLY_RECURRING: Weekly goal checkpoints.
- π·οΈ Categorized Management: Group goals into Work, Study, Health, Mindfulness, Finance, Creative, Social, or custom categories.
- π Daily Logging & Quick Notes: Record daily progress, log partial or full completion status, and attach contextual quick notes to any day.
- π₯ Social Accountability Feed: Follow other achievers, explore public profiles, and stay inspired by community activity.
- π Intelligent Notifications: Receive alerts for streak milestones, goals at risk of falling behind, and friend achievements.
- π Modern Dark/Light UI: Built with Radix UI components, smooth Framer Motion micro-interactions, Tailwind CSS v4, and Lucide icons.
- π Enterprise-Grade Auth: NextAuth.js (Auth.js v5) integration supporting OAuth providers and secure session state.
- Framework: Next.js 16 (App Router)
- Library: React 19
- Language: TypeScript 5
- Database: Neon Serverless PostgreSQL
- ORM: Prisma ORM v7
- Auth Engine: NextAuth.js v5 (Auth.js) with
@auth/prisma-adapter - Schema Validation: Zod v4
- Styling: Tailwind CSS v4 & PostCSS
- UI Components: Radix UI Primitives &
class-variance-authority - Icons: Lucide React
- Animations: Framer Motion v12
- Charts & Graphs: Recharts
- Toast Notifications: Sonner
- Package Manager: pnpm v10
- Code Formatter: Prettier v3
- Linter: ESLint v9
- Commit Hooks: Husky v9 & lint-staged
- Commit Validation: Commitlint (Conventional Commits)
Grova's database architecture leverages relational PostgreSQL models with optimized indexes and denormalized counters for lightning-fast reads:
erDiagram
User ||--o{ Account : "authenticates via"
User ||--o{ Session : "maintains"
User ||--o{ Goal : "owns"
User ||--o{ DailyLog : "logs"
User ||--o{ QuickNote : "writes"
User ||--o{ Notification : "receives"
User ||--o{ Follow : "follows / followed by"
Goal ||--o{ DailyLog : "tracks progress in"
User {
string id PK
string email UK
string username UK
int currentStreak
int longestStreak
int totalContributions
float completionRate
}
Goal {
string id PK
string userId FK
string title
GoalType type
GoalStatus status
GoalCategory category
float targetAmount
float completedAmount
datetime startDate
datetime endDate
}
DailyLog {
string id PK
string userId FK
string goalId FK
date date
float completedAmount
LogStatus status
}
Ensure you have the following installed on your local development machine:
- Node.js:
v20.xor higher - pnpm:
v9.xorv10.x(npm i -g pnpm) - PostgreSQL: A running instance or a free Neon PostgreSQL database URL.
-
Clone the repository:
git clone https://github.com/RanitManik/Grova.git cd Grova -
Install project dependencies:
pnpm install
-
Configure Environment Variables: Create a
.envfile in the root directory by copying.env.example:cp .env.example .env
-
Initialize Database Schema: Generate Prisma Client and push schema to your database:
pnpm db:push
-
Start Development Server:
pnpm dev
Open http://localhost:3000 to view Grova running locally.
| Variable | Description | Example / Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string (Neon or standard Postgres) | postgresql://user:pass@ep-xxx.neon.tech/grova?sslmode=require |
NEXTAUTH_SECRET |
Secret token used to encrypt NextAuth JWT tokens | Generate via openssl rand -base64 32 |
NEXTAUTH_URL |
Base URL of your application | http://localhost:3000 (Dev) / https://yourdomain.com (Prod) |
AUTH_GITHUB_ID |
GitHub OAuth App Client ID | Obtained from GitHub Developer Settings |
AUTH_GITHUB_SECRET |
GitHub OAuth App Client Secret | Obtained from GitHub Developer Settings |
AUTH_GOOGLE_ID |
Google OAuth App Client ID | Obtained from Google Cloud Console |
AUTH_GOOGLE_SECRET |
Google OAuth App Client Secret | Obtained from Google Cloud Console |
In the project root, you can run the following scripts using pnpm:
| Command | Description |
|---|---|
pnpm dev |
Starts the Next.js development server with hot reloading. |
pnpm build |
Runs production migrations (prisma migrate deploy), generates Prisma client, and compiles Next.js for production. |
pnpm start |
Starts the Next.js production server. |
pnpm validate |
Full QA run: Tailwind class check, formatting, linting, type-checking & build test. |
pnpm format |
Auto-formats all codebase files using Prettier. |
pnpm format:check |
Verifies code formatting compliance without modifying files. |
pnpm lint |
Runs ESLint to catch syntax, import, and code style issues. |
pnpm type-check |
Performs strict TypeScript type checks (tsc --noEmit). |
pnpm db:generate |
Generates Prisma Client TypeScript definitions. |
pnpm db:push |
Pushes Prisma schema directly to the configured database. |
pnpm db:migrate |
Runs database migrations in development mode (prisma migrate dev). |
pnpm db:deploy |
Runs pending database migrations safely in production mode (prisma migrate deploy). |
pnpm db:reset |
Drops and resets the development database schema (prisma migrate reset). |
pnpm db:studio |
Launches Prisma Studio GUI at http://localhost:5555. |
Grova uses Husky, Commitlint, and lint-staged to enforce code standard consistency on every commit:
- Pre-commit Hook: Automatically formats and lints only staged files before code can be committed (
lint-staged). - Commit-msg Hook: Ensures commit messages follow the Conventional Commits specification (
feat: ...,fix: ...,docs: ...,refactor: ..., etc.).
Example of a valid commit:
git commit -m "feat(analytics): add monthly completion breakdown chart"If a commit message does not comply with the convention, the commit will be rejected with actionable feedback.
- System Architecture: Read our Technical Architecture & System Design guide for details on Next.js App Router patterns, RSC boundaries, and database schema mechanics.
- Deployment & Self-Hosting: For step-by-step instructions on Vercel deployment, Neon PostgreSQL configuration, and custom self-hosting (Docker/VPS/Node), read our full Deployment & Self-Hosting Guide.
- Automated CI/CD & Releases: For details on our GitHub Actions verification workflows, Dependabot auto-merge, Changeset versioning, and GitHub release automation, see the CI/CD Pipeline Documentation.
The easiest and recommended way to deploy Grova is using Vercel:
- Push your code to your GitHub repository.
- Import the repository into your Vercel Dashboard.
- Vercel will automatically detect Next.js.
- Set the Build Command to
pnpm build(ornpx prisma generate && next build). - Add all required Environment Variables (
DATABASE_URL,NEXTAUTH_SECRET,NEXTAUTH_URL, OAuth keys) in Vercel settings. - Click Deploy.
- Create a free account on Neon.tech.
- Create a new project named
grova-db. - Copy your Pooled & Direct Connection Strings.
- Set
DATABASE_URLin your Vercel environment settings. - Execute database schema sync:
pnpm db:push
We welcome and appreciate contributions of all kinds! Please read our community guidelines before opening an issue or pull request:
- Contributing Guide β Detailed steps on local setup, branch conventions, and PR workflow.
- Community Standards β Code quality checklists, architectural constraints, and review rules.
- Support Guidelines β How to get help, report bugs, ask questions, or request features.
- Project Governance β Maintainer responsibilities, decision-making, and release management.
- Code of Conduct β Community behavior standards and pledge.
- Security Policy β Guidelines for reporting security vulnerabilities.
- Pull Request Template β Checklist for submitting PRs.
This project is open-source software licensed under the MIT License.
