https://github.com/brindashree/align
Align is a collaborative task management tool with workspace-based projects, team member roles, tasks, and built-in analytics for productivity insights.
https://github.com/brindashree/align
appwrite hono nextjs nuqs shadcn-ui tailwindcss tanstack-query tanstack-table zod
Last synced: about 1 month ago
JSON representation
Align is a collaborative task management tool with workspace-based projects, team member roles, tasks, and built-in analytics for productivity insights.
- Host: GitHub
- URL: https://github.com/brindashree/align
- Owner: brindashree
- Created: 2025-08-30T06:20:36.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-10-02T07:44:37.000Z (8 months ago)
- Last Synced: 2025-10-02T09:26:37.705Z (8 months ago)
- Topics: appwrite, hono, nextjs, nuqs, shadcn-ui, tailwindcss, tanstack-query, tanstack-table, zod
- Language: TypeScript
- Homepage: https://align-mu.vercel.app
- Size: 925 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ALIGN
**ALIGN** is a collaborative task management tool with **workspace-based projects**, **team member roles**, **tasks**, and **built-in analytics** for productivity insights.
It is designed to help teams organize tasks, manage members, and measure project performance with real-time statistics.
---
## π Features
### π Authentication & User Management
- **Register & Login**: Create an account or log in with email/password.
- **Session Management**: Secure cookie-based session handling.
- **Logout**: Invalidate user sessions safely.
- **Get Current User**: Fetch logged-in user details.
### π₯ Workspace Members
- **List Members**: Retrieve all members of a workspace with enriched user details (name, email, role).
- **Delete Member**: Remove a member from a workspace (with role-based authorization).
- **Update Member Role**: Change a memberβs role (e.g., ADMIN, MEMBER).
- **Role-based Authorization**:
- Only Admins can update or remove other members.
- Prevents removing the last member in a workspace.
### π Workspaces
- **List Workspaces**: Get all workspaces a user belongs to.
- **Get Workspace**: Retrieve details of a workspace.
- **Create Workspace**: Create a new workspace (with optional image upload).
- **Update Workspace**: Edit workspace name or image (admin-only).
- **Delete Workspace**: Delete a workspace (admin-only).
- **Reset Invite Code**: Generate a new invite code for joining.
- **Join Workspace**: Join using an invite code.
- **Workspace Analytics**: Productivity insights across all projects in a workspace.
### π Projects
- **Create Project**: Add a new project within a workspace (supports project images).
- **List Projects**: Get all projects for a workspace.
- **Get Project**: Fetch details of a specific project.
- **Update Project**: Edit project name or image.
- **Delete Project**: Remove a project (with member authorization).
- **Project Analytics**: Reporting on tasks and productivity inside a project.
### β
Tasks
- **List Tasks**: Retrieve tasks with filters:
- `workspaceId` (required)
- `projectId` (optional)
- `assigneeId` (optional)
- `status` (optional, e.g. `TODO`, `IN_PROGRESS`, `DONE`)
- `search` (optional, by task name)
- `dueDate` (optional, ISO string)
- **Get Task**: Retrieve a specific task with its project and assignee populated.
- **Create Task**: Add a new task (with auto-calculated position).
- **Update Task**: Modify task details (name, description, dueDate, status, projectId, assigneeId).
- **Delete Task**: Remove a task (workspace membership required).
- **Bulk Update Tasks**: Update multiple tasks at once (status and position).
- **Task + Relations**:
- Each task can reference a **project** and an **assignee** (workspace member).
- Returned tasks include enriched project and user details.
### π Analytics
- **Workspace-level Analytics**:
- Total tasks, assigned tasks, completed, incomplete, overdue.
- Month-over-month comparisons.
- **Project-level Analytics**:
- Similar breakdown, scoped to a single project.
## π οΈ Tech Stack
### **Frontend**
- [Next.js 14](https://nextjs.org/) β React framework for app routing & server components
- [Lucide React](https://lucide.dev/) β icon set
- [TanStack Query](https://tanstack.com/query) β server state management
- [TanStack Table](https://tanstack.com/table) β data tables
- [React Hook Form](https://react-hook-form.com/) β form handling
- [React Big Calendar](https://github.com/jquense/react-big-calendar) β calendar & scheduling
- [ShadcnUI](https://ui.shadcn.com/) - customizable tailwind components
### **Backend**
- [Hono](https://hono.dev/) β lightweight web framework
- [Zod](https://zod.dev/) β schema validation
- [Appwrite](https://appwrite.io/) β authentication, database, and file storage
- [node-appwrite](https://www.npmjs.com/package/node-appwrite) β Appwrite SDK
- [date-fns](https://date-fns.org/) β date & time utilities
### **Utilities**
- [nuqs](https://nuqs.vercel.app/) β URL state synchronization
- [dotenv](https://github.com/motdotla/dotenv) β environment variable handling
### **Developer Tooling**
- [TypeScript](https://www.typescriptlang.org/) β type safety
- [ESLint](https://eslint.org/) β linting
- [PostCSS](https://postcss.org/) β CSS processing
---
## π API Overview
### Auth Routes (`/auth`)
- `POST /login` β Login with email & password
- `POST /register` β Create new account & auto-login
- `GET /current` β Get current logged-in user
- `POST /logout` β End session
### Member Routes (`/members`)
- `GET /?workspaceId={id}` β List all workspace members
- `DELETE /:memberId` β Remove member (admin-only)
- `PATCH /:memberId` β Update member role
### Workspace Routes (`/workspaces`)
- `GET /` β List all workspaces for the current user
- `GET /:workspaceId` β Get workspace details
- `POST /` β Create new workspace (supports image upload)
- `PATCH /:workspaceId` β Update workspace (admin-only)
- `DELETE /:workspaceId` β Delete workspace (admin-only)
- `POST /:workspaceId/reset-invite-code` β Reset invite code (admin-only)
- `POST /:workspaceId/join` β Join workspace using invite code
- `GET /:workspaceId/analytics` β Get workspace analytics
### Project Routes (`/projects`)
- `POST /` β Create project
- `GET /?workspaceId={id}` β List all projects
- `GET /:projectId` β Get project details
- `PATCH /:projectId` β Update project details
- `DELETE /:projectId` β Delete project
- `GET /:projectId/analytics` β Get project analytics
### Task Routes (`/tasks`)
- `GET /?workspaceId={id}&projectId={id}&status={status}&assigneeId={id}&search={string}&dueDate={date}` β List tasks with filters
- `GET /:taskId` β Get task details (with project + assignee)
- `POST /` β Create new task
- `PATCH /:taskId` β Update task
- `DELETE /:taskId` β Delete task
- `POST /bulk-update` β Update multiple tasks (status + position)
---