Skip to content

Backend for project and workflow management built with Node.js, Express, and MongoDB, including secure authentication and REST APIs

Notifications You must be signed in to change notification settings

aryanghugare/TaskStack

Repository files navigation

TaskStack

License Build Status Coverage Docs

A modern, scalable task & workflow platform — TaskStack provides a full-featured backend and developer-friendly APIs to build collaborative task-driven applications. This README presents the depth of the project: architecture, key features, API patterns, deployment & testing guidance, and extension points.

Table of contents

Why TaskStack?

TaskStack is designed for product teams that need:

  • A consistent API for tasks, subtasks, assignments, comments, labels and workflows.
  • Auditability and history for critical task operations.
  • Scalable architecture that supports millions of tasks and thousands of users.
  • Pluggable integrations (webhooks, sync adapters, third-party auth).

Core Features

  • Task lifecycle management (create, update, assign, progress, complete, archive).
  • Subtasks and dependencies (blocking & blocked relationships).
  • Labels, priorities, due dates, and flexible custom fields.
  • Role-based access control and team membership.
  • Audit trail, activity feed, and events for every meaningful change.
  • Webhooks and background jobs for integrations.
  • Search & filtering with paginated endpoints.
  • Rate-limited, authenticated RESTful API with API keys / JWT.

Architecture Overview

  • API Layer: RESTful JSON over HTTPS, pagination, consistent error format.
  • Auth: JWT & OAuth2 support + API keys for service integrations.
  • Services: Modular microservices / monolith with clear boundaries (Tasks, Users, Notifications, Search).
  • Persistence: Primary relational store (Postgres) for transactional data + Redis for caching & locking.
  • Async: Message queue (RabbitMQ / Kafka) for background processing and integration events.
  • Indexing: ElasticSearch (or hosted equivalent) for fast full-text search.
  • Observability: Structured logging, metrics (Prometheus), distributed tracing (Jaeger).

Simple ASCII diagram:

Client -> API Gateway -> Task Service -> Postgres
                       \-> Auth Service
                       \-> Worker (queue)
                       \-> Search Index

Data Model (high level)

  • User { id, name, email, role, created_at }
  • Team { id, name, members[] }
  • Task { id, title, description, status, priority, assignees[], labels[], meta, created_at, updated_at }
  • Subtask (Task referencing parent)
  • Comment { id, author_id, task_id, body, created_at }
  • AuditEvent { id, entity_type, entity_id, action, meta, user_id, timestamp }

Public API (summary)

All endpoints return JSON. Authentication: Bearer token (JWT) or API-Key header.

Common patterns:

  • Standard HTTP status codes for success & errors.
  • Pagination: ?page=1&per_page=25 (Link header included)
  • Filtering: ?status=open&assigned=userid
  • Sorting: ?sort=due_date:asc

Example endpoints (detailed specs and Postman collection will be added):

  • POST /api/v1/auth/login -> returns { token }
  • GET /api/v1/tasks -> list tasks
  • POST /api/v1/tasks -> create task
  • GET /api/v1/tasks/{id} -> get task
  • PATCH /api/v1/tasks/{id} -> update task
  • POST /api/v1/tasks/{id}/comments -> add comment
  • POST /api/v1/tasks/{id}/subtasks -> create subtask
  • POST /api/v1/webhooks -> register webhook

Example request

curl -X POST "https://api.taskstack.app/api/v1/tasks" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Design onboarding flow",
    "description": "Create wireframes & specs",
    "priority": "high",
    "assignees": ["user_123"],
    "labels": ["ux", "backend"],
    "due_date": "2025-12-01T12:00:00Z"
  }'

Getting Started

Prerequisites

  • Node >= 18 / Python 3.10 / Go 1.20 (depending on chosen stack) — adjust to repo stack.
  • PostgreSQL >= 13
  • Redis
  • Message broker (RabbitMQ / Kafka) for background jobs
  • ElasticSearch (optional for search)

Quick start (example for a Node/Express setup)

# clone
git clone https://github.com/<owner>/TaskStack.git
cd TaskStack

# copy env
cp .env.example .env
# edit .env to point to your DB, Redis, and secret keys

# install
npm install

# run migrations
npm run migrate

# start dev server
npm run dev

Environment variables

  • DATABASE_URL=postgres://user:pass@localhost:5432/taskstack
  • REDIS_URL=redis://localhost:6379
  • JWT_SECRET=super-secret-key
  • PORT=4000
  • ELASTICSEARCH_URL=http://localhost:9200

Run tests

# unit & integration tests
npm test

# run linters & type checks
npm run lint
npm run typecheck

Development & Contributing

We welcome contributions. Suggested workflow:

  • Open an issue describing the enhancement / bug.
  • Create a branch feature/ or fix/.
  • Add tests for new behavior and ensure all tests pass.
  • Open a pull request with a clear description & related issue link.

Please follow:

  • Commit message convention: feat|fix|chore(scope): short summary
  • Code style: follow ESLint / Prettier rules used in the repo
  • Tests: aim for meaningful unit & integration coverage

Testing & API Contract

I will add a comprehensive Postman collection and exported environment that covers:

  • Authentication flows (login, token refresh)
  • CRUD for tasks, comments, subtasks
  • Webhook lifecycle & retry semantics
  • Role-based access & permission edge cases
  • Performance smoke tests for bulk operations

When you provide the Postman exports, I will integrate them into the repository (e.g., in /postman) and add CI validations that run Newman (Postman CLI) against a staging stack in CI.

Deployment & Scaling

  • Containerized with Docker; multi-stage builds for slim images.
  • Use Kubernetes for horizontal scaling; set up HPA on CPU/memory or request rate.
  • Database: primary + read replicas, use connection pooling.
  • Caching: Redis for hot data & distributed locks (e.g., to handle task claim races).
  • Workers: autoscaling consumer group for background jobs.
  • Use blue-green or canary deployments for zero-downtime releases.

Security & Best Practices

  • Validate & sanitize all inputs; prefer parameterized queries or ORM.
  • Rate-limit public endpoints and protect write routes with CSRF-safe patterns where applicable.
  • Audit events for sensitive changes (status change, assignee change, permission updates).
  • Rotate secrets regularly; use Vault / secret manager for production.
  • Use HTTPS everywhere; set strict CORS and CSP policies for any frontend assets.

Observability

  • Structured logs (JSON) with request IDs.
  • Metrics via Prometheus + Grafana (request latency, error rates, queue depth).
  • Distributed tracing (OpenTelemetry) to trace requests through API -> workers -> downstream services.
  • Alerts for service errors, high latency, queue backlog & DB connection exhaustion.

Roadmap

Planned high-value items:

  • Full Postman collection & CI integration (Newman).
  • GraphQL layer for efficient client queries.
  • Multi-tenant support with strict isolation.
  • SSO (SAML & enterprise OAuth providers).
  • Mobile SDKs & webhooks marketplace for easy integrations.

License

This project is MIT licensed — see the LICENSE file for details.

Contact

Maintainer: @aryanghugare Project: TaskStack — https://github.com//TaskStack

Appendix: Useful patterns & conventions

  • Error body:
{
  "error": {
    "code": "task_not_found",
    "message": "Task not found",
    "meta": {}
  }
}
  • Idempotency: Provide Idempotency-Key header for POSTs that create resources to avoid duplicates on retries.
  • Webhook retries: Use exponential backoff and deliver with at-least-once semantics.

About

Backend for project and workflow management built with Node.js, Express, and MongoDB, including secure authentication and REST APIs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published