{"id":31532622,"url":"https://github.com/brindashree/align","last_synced_at":"2026-04-07T21:31:46.116Z","repository":{"id":317661316,"uuid":"1047313695","full_name":"brindashree/align","owner":"brindashree","description":"Align is a collaborative task management tool with workspace-based projects, team member roles, tasks, and built-in analytics for productivity insights.","archived":false,"fork":false,"pushed_at":"2025-10-02T07:44:37.000Z","size":947,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-02T09:26:37.705Z","etag":null,"topics":["appwrite","hono","nextjs","nuqs","shadcn-ui","tailwindcss","tanstack-query","tanstack-table","zod"],"latest_commit_sha":null,"homepage":"https://align-mu.vercel.app","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/brindashree.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-08-30T06:20:36.000Z","updated_at":"2025-10-02T07:44:41.000Z","dependencies_parsed_at":"2025-10-02T09:26:41.165Z","dependency_job_id":null,"html_url":"https://github.com/brindashree/align","commit_stats":null,"previous_names":["brindashree/align"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/brindashree/align","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brindashree%2Falign","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brindashree%2Falign/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brindashree%2Falign/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brindashree%2Falign/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brindashree","download_url":"https://codeload.github.com/brindashree/align/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brindashree%2Falign/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31530641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["appwrite","hono","nextjs","nuqs","shadcn-ui","tailwindcss","tanstack-query","tanstack-table","zod"],"created_at":"2025-10-04T03:56:42.700Z","updated_at":"2026-04-07T21:31:46.078Z","avatar_url":"https://github.com/brindashree.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ALIGN\n\n**ALIGN** is a collaborative task management tool with **workspace-based projects**, **team member roles**, **tasks**, and **built-in analytics** for productivity insights.\n\nIt is designed to help teams organize tasks, manage members, and measure project performance with real-time statistics.\n\n---\n\n## 🚀 Features\n\n### 🔑 Authentication \u0026 User Management\n\n- **Register \u0026 Login**: Create an account or log in with email/password.\n- **Session Management**: Secure cookie-based session handling.\n- **Logout**: Invalidate user sessions safely.\n- **Get Current User**: Fetch logged-in user details.\n\n### 👥 Workspace Members\n\n- **List Members**: Retrieve all members of a workspace with enriched user details (name, email, role).\n- **Delete Member**: Remove a member from a workspace (with role-based authorization).\n- **Update Member Role**: Change a member’s role (e.g., ADMIN, MEMBER).\n- **Role-based Authorization**:\n  - Only Admins can update or remove other members.\n  - Prevents removing the last member in a workspace.\n\n### 📂 Workspaces\n\n- **List Workspaces**: Get all workspaces a user belongs to.\n- **Get Workspace**: Retrieve details of a workspace.\n- **Create Workspace**: Create a new workspace (with optional image upload).\n- **Update Workspace**: Edit workspace name or image (admin-only).\n- **Delete Workspace**: Delete a workspace (admin-only).\n- **Reset Invite Code**: Generate a new invite code for joining.\n- **Join Workspace**: Join using an invite code.\n- **Workspace Analytics**: Productivity insights across all projects in a workspace.\n\n### 📂 Projects\n\n- **Create Project**: Add a new project within a workspace (supports project images).\n- **List Projects**: Get all projects for a workspace.\n- **Get Project**: Fetch details of a specific project.\n- **Update Project**: Edit project name or image.\n- **Delete Project**: Remove a project (with member authorization).\n- **Project Analytics**: Reporting on tasks and productivity inside a project.\n\n### ✅ Tasks\n\n- **List Tasks**: Retrieve tasks with filters:\n  - `workspaceId` (required)\n  - `projectId` (optional)\n  - `assigneeId` (optional)\n  - `status` (optional, e.g. `TODO`, `IN_PROGRESS`, `DONE`)\n  - `search` (optional, by task name)\n  - `dueDate` (optional, ISO string)\n- **Get Task**: Retrieve a specific task with its project and assignee populated.\n- **Create Task**: Add a new task (with auto-calculated position).\n- **Update Task**: Modify task details (name, description, dueDate, status, projectId, assigneeId).\n- **Delete Task**: Remove a task (workspace membership required).\n- **Bulk Update Tasks**: Update multiple tasks at once (status and position).\n- **Task + Relations**:\n  - Each task can reference a **project** and an **assignee** (workspace member).\n  - Returned tasks include enriched project and user details.\n\n### 📊 Analytics\n\n- **Workspace-level Analytics**:\n  - Total tasks, assigned tasks, completed, incomplete, overdue.\n  - Month-over-month comparisons.\n- **Project-level Analytics**:\n  - Similar breakdown, scoped to a single project.\n\n## 🛠️ Tech Stack\n\n### **Frontend**\n\n- [Next.js 14](https://nextjs.org/) – React framework for app routing \u0026 server components\n- [Lucide React](https://lucide.dev/) – icon set\n- [TanStack Query](https://tanstack.com/query) – server state management\n- [TanStack Table](https://tanstack.com/table) – data tables\n- [React Hook Form](https://react-hook-form.com/) – form handling\n- [React Big Calendar](https://github.com/jquense/react-big-calendar) – calendar \u0026 scheduling\n- [ShadcnUI](https://ui.shadcn.com/) - customizable tailwind components\n\n### **Backend**\n\n- [Hono](https://hono.dev/) – lightweight web framework\n- [Zod](https://zod.dev/) – schema validation\n- [Appwrite](https://appwrite.io/) – authentication, database, and file storage\n- [node-appwrite](https://www.npmjs.com/package/node-appwrite) – Appwrite SDK\n- [date-fns](https://date-fns.org/) – date \u0026 time utilities\n\n### **Utilities**\n\n- [nuqs](https://nuqs.vercel.app/) – URL state synchronization\n- [dotenv](https://github.com/motdotla/dotenv) – environment variable handling\n\n### **Developer Tooling**\n\n- [TypeScript](https://www.typescriptlang.org/) – type safety\n- [ESLint](https://eslint.org/) – linting\n- [PostCSS](https://postcss.org/) – CSS processing\n\n---\n\n## 📌 API Overview\n\n### Auth Routes (`/auth`)\n\n- `POST /login` – Login with email \u0026 password\n- `POST /register` – Create new account \u0026 auto-login\n- `GET /current` – Get current logged-in user\n- `POST /logout` – End session\n\n### Member Routes (`/members`)\n\n- `GET /?workspaceId={id}` – List all workspace members\n- `DELETE /:memberId` – Remove member (admin-only)\n- `PATCH /:memberId` – Update member role\n\n### Workspace Routes (`/workspaces`)\n\n- `GET /` – List all workspaces for the current user\n- `GET /:workspaceId` – Get workspace details\n- `POST /` – Create new workspace (supports image upload)\n- `PATCH /:workspaceId` – Update workspace (admin-only)\n- `DELETE /:workspaceId` – Delete workspace (admin-only)\n- `POST /:workspaceId/reset-invite-code` – Reset invite code (admin-only)\n- `POST /:workspaceId/join` – Join workspace using invite code\n- `GET /:workspaceId/analytics` – Get workspace analytics\n\n### Project Routes (`/projects`)\n\n- `POST /` – Create project\n- `GET /?workspaceId={id}` – List all projects\n- `GET /:projectId` – Get project details\n- `PATCH /:projectId` – Update project details\n- `DELETE /:projectId` – Delete project\n- `GET /:projectId/analytics` – Get project analytics\n\n### Task Routes (`/tasks`)\n\n- `GET /?workspaceId={id}\u0026projectId={id}\u0026status={status}\u0026assigneeId={id}\u0026search={string}\u0026dueDate={date}` – List tasks with filters\n- `GET /:taskId` – Get task details (with project + assignee)\n- `POST /` – Create new task\n- `PATCH /:taskId` – Update task\n- `DELETE /:taskId` – Delete task\n- `POST /bulk-update` – Update multiple tasks (status + position)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrindashree%2Falign","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrindashree%2Falign","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrindashree%2Falign/lists"}