Full-stack calendar and admin platform with recurrence rules, ICS import/export, authentication, audit logs, and PostgreSQL-backed scheduling workflows.
Repository: bhedanikhilkumar-code/Planora
Planora is a portfolio-grade scheduling product. It shows how a calendar app becomes a real system when it handles recurrence, import/export, authentication, admin oversight, audit trails, and database-backed event workflows.
| Signal | Details |
|---|---|
| Product domain | Scheduling, event operations, recurrence, calendar interoperability, admin workflows |
| Frontend | React, TypeScript, Vite, Tailwind CSS, FullCalendar, protected routes |
| Backend | Express, Prisma, PostgreSQL, JWT auth, Zod validation, Jest/Supertest |
| Best review angle | Time/domain complexity: recurrence rules, ICS flows, admin tooling, role boundaries, and persistence |
| Status | Local demo screenshot available; tests and build scripts are included for both apps |
| Calendar workspace |
|---|
![]() |
Screenshot captured from the local frontend so reviewers can understand the product experience before installing the project.
| Area | What is implemented or represented |
|---|---|
| Calendar workspace | Month/week/day/list calendar views, event forms, filters, reminders, attachments, and drawer-based review |
| Recurrence logic | Recurrence service, occurrence expansion, recurring event APIs, and date-range workflows |
| ICS interoperability | Import .ics files, validate calendar data, and export event ranges for external calendar tools |
| Auth + security | Login/register, protected routes, JWT middleware, rate limiting, Helmet, validation, and error handling |
| Admin operations | Admin dashboard, user detail pages, event management, settings, and audit log review |
| Quality foundation | Backend Jest/Supertest tests, frontend Vitest setup, Prisma schema, seed script, Docker Compose support |
flowchart LR
User[Planner / Admin] --> Frontend[React + FullCalendar Frontend]
Frontend --> Api[Express API]
Api --> Auth[JWT Auth + Zod Validation]
Api --> Services[Event, Recurrence, ICS, Audit Services]
Services --> Prisma[Prisma Client]
Prisma --> Postgres[(PostgreSQL)]
Api --> Storage[Attachment Storage Adapter]
sequenceDiagram
participant U as User
participant UI as Calendar UI
participant API as Express API
participant R as Recurrence Service
participant DB as PostgreSQL
U->>UI: Create or import event
UI->>API: Submit event payload
API->>R: Validate recurrence / ICS rules
R->>DB: Persist event and occurrences
DB-->>API: Return calendar-ready data
API-->>UI: Render updated schedule and admin state
git clone https://github.com/bhedanikhilkumar-code/Planora.git
cd Planora
npm installcopy apps\backend\.env.example apps\backend\.env
copy apps\frontend\.env.example apps\frontend\.env.localBackend variables from apps/backend/.env.example:
| Variable | Purpose |
|---|---|
PORT |
Backend API port, default 4000 |
DATABASE_URL |
PostgreSQL connection string used by Prisma |
JWT_ACCESS_SECRET |
Access-token signing secret for local auth |
JWT_REFRESH_SECRET |
Refresh-token signing secret for local auth |
FRONTEND_URL |
Allowed frontend origin, usually http://localhost:5173 |
Frontend variables from apps/frontend/.env.example:
| Variable | Purpose |
|---|---|
VITE_API_BASE_URL |
Frontend API endpoint, usually http://localhost:4000 |
docker compose up db -dnpm run prisma:generate -w @planora/backend
npm run prisma:migrate -w @planora/backend
npm run prisma:seed -w @planora/backendnpm run devDefault local URLs:
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend | http://localhost:4000 |
| PostgreSQL | localhost:5432 |
# Build both workspaces
npm run build
# Run backend and frontend tests
npm run testCurrent quality status:
| Check | Status |
|---|---|
| Backend tests | Jest/Supertest configured in apps/backend/tests |
| Frontend tests | Vitest configured in apps/frontend |
| Database model | Prisma schema and migrations-ready workflow included |
| Repository health workflow | Runs on push through GitHub Actions |
Planora/
├── apps/
│ ├── backend/ # Express, Prisma, PostgreSQL, auth, tests
│ │ ├── prisma/ # Schema and seed data
│ │ ├── src/ # API routes, middleware, services, config
│ │ └── tests/ # Supertest coverage for API behavior
│ └── frontend/ # React, Vite, FullCalendar UI
│ └── src/ # Admin, API client, components, context, pages
├── docs/ # Architecture, case study, quality, roadmap, review docs
├── docker-compose.yml # PostgreSQL + app service setup
└── package.json # Workspace scripts
- Harden timezone and recurrence edge-case coverage
- Expand ICS import/export validation and error states
- Add richer admin analytics for event activity and audit logs
- Add hosted demo deployment with safe demo credentials
- Improve attachment storage for production-ready object storage
- Add CI build/test checks for both workspaces
| Document | Purpose |
|---|---|
| Architecture | System layers, workflow, data/state model, and extension points. |
| Case Study | Product framing, decisions, tradeoffs, and portfolio story. |
| Roadmap | Practical next steps for turning the project into a stronger product. |
| Quality Standard | Repository health checks, review standards, and quality gates. |
| Review Checklist | Final share/recruiter review checklist for a stronger GitHub impression. |
| Contributing | Branching, commit, review, and quality guidelines. |
| Security | Responsible disclosure and safe configuration notes. |
| Support | How to ask for help or report issues clearly. |
| Code of Conduct | Collaboration expectations for respectful project activity. |
Use the .env.example files as templates only. Keep real database URLs, JWT secrets, and deployment credentials in local .env files or hosting-provider secret storage.
This project is released under the MIT License.
