{"id":51520630,"url":"https://github.com/essedev/plannerinator","last_synced_at":"2026-07-08T15:03:28.804Z","repository":{"id":324700824,"uuid":"1081440594","full_name":"essedev/plannerinator","owner":"essedev","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-02T16:42:12.000Z","size":9758,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-02T19:56:09.774Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/essedev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-22T19:36:42.000Z","updated_at":"2026-03-02T16:42:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/essedev/plannerinator","commit_stats":null,"previous_names":["essedotdev/plannerinator","essedev/plannerinator"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/essedev/plannerinator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essedev%2Fplannerinator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essedev%2Fplannerinator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essedev%2Fplannerinator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essedev%2Fplannerinator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/essedev","download_url":"https://codeload.github.com/essedev/plannerinator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essedev%2Fplannerinator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35268561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-08T15:03:27.783Z","updated_at":"2026-07-08T15:03:28.797Z","avatar_url":"https://github.com/essedev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Plannerinator\n\nComplete life management system for tasks, events, notes, projects, and custom collections.\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/)\n[![Next.js](https://img.shields.io/badge/Next.js-15-black.svg)](https://nextjs.org/)\n[![Better Auth](https://img.shields.io/badge/Better%20Auth-1.3-green.svg)](https://better-auth.com/)\n\n## 🎯 Philosophy\n\n**Flexibility without chaos** - Plannerinator adopts a hybrid multi-model approach:\n\n- **Rigid core entities** (tasks, events, notes, projects) with specific, type-safe fields\n- **Universal linking system** to connect any entity to any other\n- **JSONB metadata** for custom fields without sacrificing performance\n- **Dynamic collections** for custom lists (books, services, research, etc.)\n\n## ✨ Core Entities\n\n### Tasks\n\nThings to do, with or without deadlines, assignable to projects, linkable to notes/events.\n\n**Core fields**: title, description, due date, duration, status, priority, subtasks\n\n### Events\n\nTime-based events, viewable in calendar or list format.\n\n**Core fields**: title, description, start/end time, location, all-day flag, calendar type\n\n### Notes\n\nNotes, documents, research, knowledge base with markdown support.\n\n**Core fields**: title, content (markdown), type (note/document/research/idea)\n\n### Projects\n\nLogical containers to organize tasks, events, and notes.\n\n**Core fields**: name, description, status, dates, color, icon\n\n### Collections\n\nCustom lists with user-definable schemas (e.g., freelance services, books, clients).\n\n**Schema editor**: Visual builder for defining custom fields per collection\n\n## 🔗 Universal Features\n\n- **Linking System**: Connect any entity to any other (task → project, task → note, etc.)\n- **Tags**: Flexible organization with colored tags\n- **Comments**: Discussion threads on any entity\n- **Search**: Full-text search across all content\n- **Activity Log**: Complete change history (future)\n- **Sharing**: Collaborate with other users (future)\n\n## 🛠️ Tech Stack\n\n### Core\n\n- **Next.js 15** - App Router, Server Components, Server Actions\n- **React 19** - Latest React features\n- **TypeScript** - Strict mode for full type safety\n- **Tailwind CSS 4** - Utility-first styling\n- **shadcn/ui** - Beautiful, accessible components\n\n### Database \u0026 Auth\n\n- **Drizzle ORM** - TypeScript-first ORM with edge support\n- **Neon PostgreSQL** - Serverless Postgres\n- **Better Auth** - Modern authentication with RBAC\n\n### Deployment\n\n- **Cloudflare Workers** - Edge deployment\n- **OpenNext** - Next.js adapter for Cloudflare\n\n### Developer Experience\n\n- **Turbopack** - Fast development builds\n- **ESLint + Prettier** - Code quality\n- **React Hook Form + Zod** - Type-safe form validation\n\n## 🚀 Quick Start\n\n### 1. Clone \u0026 Install\n\n```bash\ngit clone https://github.com/essedev/plannerinator.git\ncd plannerinator\npnpm install\n```\n\n### 2. Environment Setup\n\nCreate `.env` file:\n\n```bash\n# Database (Neon PostgreSQL)\nDATABASE_URL=\"postgresql://...\"\n\n# Better Auth\nBETTER_AUTH_URL=\"http://localhost:3000\"\nBETTER_AUTH_SECRET=\"run: openssl rand -base64 32\"\nNEXT_PUBLIC_APP_URL=\"http://localhost:3000\"\n\n# Email (optional - mock by default)\nADMIN_EMAIL=\"admin@yourdomain.com\"\n# RESEND_API_KEY=\"re_xxxxx\" # Uncomment to enable real emails\n```\n\nGenerate Better Auth secret:\n\n```bash\nopenssl rand -base64 32\n```\n\n### 3. Database Setup\n\n```bash\n# Generate migration\npnpm db:generate\n\n# Push to database\npnpm db:push\n\n# Open Drizzle Studio (optional)\npnpm db:studio\n```\n\n### 4. Run Development Server\n\n```bash\npnpm dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000)\n\n## 📁 Project Structure\n\n```\nsrc/\n├── app/                    # Next.js App Router\n│   ├── (auth)/            # Auth pages (login, register)\n│   ├── dashboard/         # Protected dashboard\n│   └── api/auth/          # Better Auth handler\n├── components/\n│   ├── ui/                # shadcn/ui components\n│   ├── layout/            # Navbar, Footer, Sidebar\n│   ├── tasks/             # Task components (future)\n│   ├── events/            # Event components (future)\n│   └── notes/             # Note components (future)\n├── features/\n│   ├── auth/              # Authentication logic\n│   ├── profile/           # Profile management\n│   ├── users/             # User management (admin)\n│   ├── tasks/             # Task management (future)\n│   └── events/            # Event management (future)\n├── lib/\n│   ├── auth.ts            # Better Auth config\n│   ├── auth-client.ts     # Client auth hooks\n│   └── permissions.ts     # RBAC helpers\n├── db/\n│   ├── schema.ts          # Drizzle schema\n│   └── index.ts           # Database client\n└── types/                 # TypeScript types\n```\n\n## 📜 Available Scripts\n\n```bash\n# Development\npnpm dev              # Start dev server\npnpm build            # Production build\npnpm start            # Start production server\n\n# Code Quality\npnpm lint             # Run ESLint\npnpm format           # Format with Prettier\npnpm format:check     # Check formatting\npnpm typecheck        # TypeScript checking\n\n# Database\npnpm db:generate      # Generate migrations\npnpm db:push          # Push schema to database\npnpm db:studio        # Open Drizzle Studio\n\n# Deployment\npnpm deploy           # Deploy to Cloudflare\npnpm preview          # Preview Cloudflare build\n```\n\n## 🗺️ Project Status\n\n**Current Phase:** Phase 1 In Progress\n\n**Overall Progress:** ~26%\n\n### ✅ Phase 0: Foundation (100% Complete)\n\n- ✅ Better Auth with email/password, password reset, email verification\n- ✅ RBAC system (user/admin roles)\n- ✅ Complete database schema for all entities (tasks, events, notes, projects, collections, links, tags, comments)\n- ✅ Type-safe validation (Zod schemas, branded types, type guards)\n- ✅ Dashboard shell with responsive navigation\n- ✅ Profile \u0026 user management\n\n### 🚧 Phase 1: Core Entities (35% Complete)\n\n**Completed:**\n\n- ✅ Database schemas for all entities\n- ✅ Zod validation schemas\n- ✅ TypeScript type definitions\n- ✅ **Task Management CRUD** (2025-01-21)\n  - ✅ Server Actions (create, update, delete, bulk operations)\n  - ✅ Database queries (filters, search, relations)\n  - ✅ Task list page with filters\n  - ✅ Task detail/edit page\n  - ✅ Task creation page\n  - ✅ Components (TaskCard, TaskList, TaskForm, TaskFilters)\n  - ✅ Features: completion, priority badges, overdue detection, project assignment\n\n**In Progress:**\n\n- ⏳ Event Management CRUD\n- ⏳ Note Management CRUD\n- ⏳ Project Management CRUD\n- ⏳ Universal features (tags, comments, links, search)\n\n**Next Steps:**\n\n1. Setup testing infrastructure (Vitest) for Task Management\n2. Implement Event Management (Server Actions + UI components)\n3. Implement Notes with markdown editor\n4. Implement Projects with stats dashboard\n\n### 📋 Future Phases\n\n- **Phase 2:** Collections system with dynamic schemas\n- **Phase 3:** Activity timeline, advanced search, data export/import\n- **Phase 4:** Collaboration \u0026 sharing\n- **Phase 5:** AI Assistant with natural language commands\n\nSee [ROADMAP.md](./docs/plannerinator/ROADMAP.md) for detailed feature breakdown and timeline estimates.\n\n## 📚 Documentation\n\n### Core Documentation\n\n- 📍 **[ROADMAP.md](./docs/plannerinator/ROADMAP.md)** - Complete roadmap with progress tracking\n- 🏗️ **[ARCHITECTURE.md](./docs/plannerinator/ARCHITECTURE.md)** - Application architecture\n- 🗄️ **[DATABASE_SCHEMA.md](./docs/plannerinator/DATABASE_SCHEMA.md)** - Complete database schema\n\n### Technical Docs\n\n- 🎨 **[UI_PATTERNS.md](./docs/plannerinator/UI_PATTERNS.md)** - UI/UX patterns\n- ⚡ **[API_DESIGN.md](./docs/plannerinator/API_DESIGN.md)** - Server Actions design\n- 🔐 **[AUTHENTICATION.md](./docs/AUTHENTICATION.md)** - Better Auth setup\n- 👥 **[RBAC.md](./docs/RBAC.md)** - Role-based access control\n- 📧 **[EMAIL_SYSTEM.md](./docs/EMAIL_SYSTEM.md)** - Email configuration\n\n## 🚢 Deployment\n\n### Cloudflare Workers\n\n```bash\n# First-time setup\npnpm wrangler login\n\n# Set secrets\npnpm wrangler secret put DATABASE_URL\npnpm wrangler secret put BETTER_AUTH_SECRET\n\n# Deploy\npnpm deploy\n```\n\nConfiguration in `wrangler.jsonc`\n\n## 🤝 Contributing\n\nThis is a personal project, but contributions are welcome! Please open an issue first to discuss proposed changes.\n\n## 📝 License\n\nMIT License - feel free to use this for your own projects.\n\n## 🙏 Credits\n\nBuilt with:\n\n- [Next.js](https://nextjs.org)\n- [Drizzle ORM](https://orm.drizzle.team)\n- [Better Auth](https://better-auth.com)\n- [shadcn/ui](https://ui.shadcn.com)\n- [Tailwind CSS](https://tailwindcss.com)\n- [Cloudflare Workers](https://workers.cloudflare.com)\n\n---\n\nMade with ❤️ by [@essedev](https://github.com/essedev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fessedev%2Fplannerinator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fessedev%2Fplannerinator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fessedev%2Fplannerinator/lists"}