A beautiful, gamified productivity app where focus sessions grow your digital garden
- 🎮 Isometric Garden View - Beautiful 3D isometric garden that grows as you complete focus sessions
- ⏱️ Focus Timer - Pomodoro-style focus sessions to boost productivity
- 🌻 Plant Collection - Unlock and collect various plants by completing sessions
- 👤 User Profiles - Create your unique garden space with custom username
- 💳 Premium Features - Support the project with optional premium subscription
- 🔐 Secure Authentication - Google OAuth integration for easy sign-in
- 📊 Progress Tracking - Track your focus sessions and garden growth over time
- Node.js 18+
- npm or yarn
- An InstantDB account
- Google OAuth credentials (for authentication)
- Stripe account (optional, for payment features)
-
Clone the repository
git clone https://github.com/yourusername/growdoro.git cd growdoro -
Install dependencies
npm install # or yarn install -
Set up environment variables
Create a
.env.localfile in the root directory:# InstantDB Configuration NEXT_PUBLIC_INSTANT_APP_ID=your_instant_app_id INSTANT_ADMIN_TOKEN=your_instant_admin_token # Google OAuth NEXT_PUBLIC_GOOGLE_CLIENT_ID=your_google_client_id NEXT_PUBLIC_GOOGLE_CLIENT_NAME=your_app_name # Stripe (Optional) STRIPE_SECRET_KEY=your_stripe_secret_key STRIPE_WEBHOOK_SECRET=your_stripe_webhook_secret NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key # Application URL NEXT_PUBLIC_APP_URL=http://localhost:3000
-
Set up InstantDB schema
npx instant-cli push
-
Run the development server
npm run dev # or yarn dev -
Open your browser
Navigate to http://localhost:3000
- Framework: Next.js 15 with App Router
- Language: TypeScript
- Database: InstantDB - Real-time database
- Styling: Tailwind CSS v4
- Authentication: Google OAuth via InstantDB Auth
- Payments: Stripe
- Animations: Motion
- Icons: Phosphor Icons
growdoro/
├── app/ # Next.js app directory
│ ├── (public)/ # Public user profiles
│ ├── api/ # API routes
│ ├── components/ # React components
│ ├── contexts/ # React contexts
│ └── constants/ # App constants
├── lib/ # Utility functions
├── public/ # Static assets
│ ├── blocks/ # Block textures
│ └── plants/ # Plant images
├── instant.schema.ts # InstantDB schema
└── instant.perms.ts # InstantDB permissions
npm run dev # Start development server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLintIsometricGarden- Main garden view componentAuthButton- Authentication flow handlerProfileCreationModal- New user onboardingBlockSlideover- Plant selection interfaceMainSlideover- Session timer and controls
The app uses InstantDB with the following main entities:
- profiles - User profiles with usernames
- blocks - Garden blocks and plants
- sessions - Focus session records
- $users - InstantDB user accounts
We love contributions! Please see our Contributing Guide for details on:
- Development process
- How to submit pull requests
- Coding standards
- Testing guidelines
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Found a bug or have a feature idea? Please check if it's already been reported in our issues, then feel free to create a new issue with:
- Bug Reports: Clear description, steps to reproduce, expected vs actual behavior
- Feature Requests: Clear description, use case, potential implementation ideas
This project is licensed under the MIT License - see the LICENSE file for details.
- Plant artwork and sprites from [source]
- Isometric engine inspiration from [source]
- Community contributors and supporters
- Discord: Join our community
- Twitter: @yourhandle
- Email: support@growdoro.com
- Farm-type plants (strawberries, tomatoes, etc.)
Made with 💚 by Hyperaide Labs