[{"data":1,"prerenderedAt":1111},["ShallowReactive",2],{"navigation":3,"changelog":156,"/changelog":167},[4,23,83,103,118,133,141],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"What is TaskView","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick Start","/docs/getting-started/usage","docs/1.getting-started/3.usage","i-lucide-rocket",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"Features","/docs/features","docs/2.features",[28,33,38,43,48,53,58,63,68,73,78],{"title":29,"path":30,"stem":31,"icon":32},"Projects and Lists","/docs/features/projects-and-lists","docs/2.features/1.projects-and-lists","i-lucide-folder",{"title":34,"path":35,"stem":36,"icon":37},"Organizations","/docs/features/organizations","docs/2.features/10.organizations","i-lucide-building-2",{"title":39,"path":40,"stem":41,"icon":42},"SSO (Single Sign-On)","/docs/features/sso","docs/2.features/11.sso","i-lucide-shield-check",{"title":44,"path":45,"stem":46,"icon":47},"Tasks","/docs/features/tasks","docs/2.features/2.tasks","i-lucide-check-square",{"title":49,"path":50,"stem":51,"icon":52},"Kanban Board","/docs/features/kanban","docs/2.features/3.kanban","i-lucide-columns-3",{"title":54,"path":55,"stem":56,"icon":57},"Dependency Graph","/docs/features/graph","docs/2.features/4.graph","i-lucide-git-branch",{"title":59,"path":60,"stem":61,"icon":62},"Dashboard","/docs/features/dashboard","docs/2.features/5.dashboard","i-lucide-layout-dashboard",{"title":64,"path":65,"stem":66,"icon":67},"Notifications","/docs/features/notifications","docs/2.features/6.notifications","i-lucide-bell",{"title":69,"path":70,"stem":71,"icon":72},"Webhooks","/docs/features/webhooks","docs/2.features/7.webhooks","i-lucide-webhook",{"title":74,"path":75,"stem":76,"icon":77},"API Tokens","/docs/features/api-tokens","docs/2.features/8.api-tokens","i-lucide-key-round",{"title":79,"path":80,"stem":81,"icon":82},"Sessions & Devices","/docs/features/sessions","docs/2.features/9.sessions","i-lucide-monitor-smartphone",{"title":84,"icon":22,"path":85,"stem":86,"children":87,"page":22},"Integrations","/docs/integrations","docs/3.integrations",[88,93,98],{"title":89,"path":90,"stem":91,"icon":92},"GitHub & GitLab Setup","/docs/integrations/setup","docs/3.integrations/1.setup","i-lucide-git-pull-request",{"title":94,"path":95,"stem":96,"icon":97},"MCP Server","/docs/integrations/mcp","docs/3.integrations/2.mcp","i-lucide-bot",{"title":99,"path":100,"stem":101,"icon":102},"Telegram & Slack Setup","/docs/integrations/messaging","docs/3.integrations/3.messaging","i-lucide-send",{"title":104,"icon":22,"path":105,"stem":106,"children":107,"page":22},"Configuration","/docs/configuration","docs/4.configuration",[108,113],{"title":109,"path":110,"stem":111,"icon":112},"Environment Variables","/docs/configuration/environment-variables","docs/4.configuration/1.environment-variables","i-lucide-settings",{"title":114,"path":115,"stem":116,"icon":117},"Authentication","/docs/configuration/authentication","docs/4.configuration/2.authentication","i-lucide-lock",{"title":119,"icon":22,"path":120,"stem":121,"children":122,"page":22},"Collaboration","/docs/collaboration","docs/5.collaboration",[123,128],{"title":124,"path":125,"stem":126,"icon":127},"Team Members","/docs/collaboration/members","docs/5.collaboration/1.members","i-lucide-users",{"title":129,"path":130,"stem":131,"icon":132},"Roles and Permissions","/docs/collaboration/roles-and-permissions","docs/5.collaboration/2.roles-and-permissions","i-lucide-shield",{"title":134,"path":135,"stem":136,"children":137,"icon":22},"FAQ","/docs/faq","docs/6.faq/1.index",[138],{"title":139,"path":135,"stem":136,"icon":140},"Frequently Asked Questions","i-lucide-circle-help",{"title":142,"icon":22,"path":143,"stem":144,"children":145,"page":22},"Guides","/docs/guides","docs/7.guides",[146,151],{"title":147,"path":148,"stem":149,"icon":150},"Deploy TaskView on a VPS with Nginx","/docs/guides/deploy-vps-nginx","docs/7.guides/1.deploy-vps-nginx","i-lucide-server",{"title":152,"path":153,"stem":154,"icon":155},"TaskView for Freelancers","/docs/guides/taskview-for-freelancers","docs/7.guides/2.taskview-for-freelancers","i-lucide-briefcase",{"id":157,"title":158,"body":159,"description":159,"extension":160,"meta":161,"navigation":162,"path":163,"seo":164,"stem":165,"__hash__":166},"changelog/4.changelog.yml","Changelog",null,"yml",{},{"icon":21},"/changelog",{"title":158},"4.changelog","QZrtcPpQnPx2boj8KlgOLuK4WE_8FYjfVff8rIBKfx8",[168,258,330,416,520,792,845,871,947,980,1022,1042],{"id":169,"title":170,"body":171,"date":249,"description":250,"extension":251,"image":246,"meta":252,"navigation":253,"path":254,"seo":255,"stem":256,"__hash__":257},"versions/4.changelog/12.v1.44.0.md","v1.44.0",{"type":172,"value":173,"toc":245},"minimark",[174,181,218,223,231,236],[175,176,177],"p",{},[178,179,180],"strong",{},"Task sorting:",[182,183,184,188],"ul",{},[185,186,187],"li",{},"The task list view now lets you sort tasks by creation date or priority, with a direction toggle (newest/oldest, highest/lowest). The sort field and direction are grouped into a single control in the toolbar.",[185,189,190,194,195,198,199,202,203,206,207,210,211,214,215,217],{},[191,192,193],"code",{},"list_tasks"," (MCP) gained ",[191,196,197],{},"sortBy"," (",[191,200,201],{},"date","/",[191,204,205],{},"priority",") and ",[191,208,209],{},"descending"," parameters; ",[191,212,213],{},"taskview-api"," exposes a matching ",[191,216,197],{}," option.",[175,219,220],{},[178,221,222],{},"UI customization:",[182,224,225,228],{},[185,226,227],{},"Drag-and-drop to rearrange analytics blocks on the dashboard.",[185,229,230],{},"Drag-and-drop to reorder fields in the task dialog — arrange the task layout to your liking. Your layout is saved per user.",[175,232,233],{},[178,234,235],{},"Better MCP guidance for AI agents:",[182,237,238],{},[185,239,240,241,244],{},"Server instructions now clarify that a \"goal\" is a project, describe the data model (Organization → Project → List → Task), and note that IDs must be resolved via the ",[191,242,243],{},"list_*"," tools.",{"title":246,"searchDepth":247,"depth":247,"links":248},"",2,[],"2026-05-25T00:00:00.000Z","Task sorting by date or priority, drag-and-drop UI customization for analytics blocks and task dialog fields, and clearer MCP guidance for AI agents.","md",{},true,"/changelog/v1.44.0",{"title":170,"description":250},"4.changelog/12.v1.44.0","y1ny9ccG9mlwTDDsoKS2uGwULnZhqk9ZwE9AyNBq3S4",{"id":259,"title":260,"body":261,"date":323,"description":324,"extension":251,"image":246,"meta":325,"navigation":253,"path":326,"seo":327,"stem":328,"__hash__":329},"versions/4.changelog/11.v1.43.0.md","v1.43.0",{"type":172,"value":262,"toc":321},[263,268,273,278],[175,264,265],{},[178,266,267],{},"Time tracking:",[182,269,270],{},[185,271,272],{},"Track work time directly on tasks: start a timer with one click or log entries manually after the fact, mark entries as billable, and view summary reports by project, by member, and by day.",[175,274,275],{},[178,276,277],{},"Analytics:",[182,279,280],{},[185,281,282,283],{},"A new analytics dashboard with KPI cards and charts grouped into productivity, workload, quality, usage, and financial views. Available sections:\n",[182,284,285,291,297,303,309,315],{},[185,286,287,290],{},[178,288,289],{},"KPIs"," - created tasks, completed tasks, overdue, income, expense, net profit, planned income/expense, amount coverage.",[185,292,293,296],{},[178,294,295],{},"Productivity"," - created vs completed, priority mix over time.",[185,298,299,302],{},[178,300,301],{},"Workload"," - workload by assignee, tasks blocked by dependencies.",[185,304,305,308],{},[178,306,307],{},"Quality"," - overdue by age, stale tasks.",[185,310,311,314],{},[178,312,313],{},"Usage"," - status distribution, active vs dead projects.",[185,316,317,320],{},[178,318,319],{},"Financial"," - income and expense per month, per project, and per tag, plus top projects by amount.",{"title":246,"searchDepth":247,"depth":247,"links":322},[],"2026-05-16T00:00:00.000Z","Time tracking on tasks with billable hours and summary reports, plus a new analytics dashboard with KPIs and charts.",{},"/changelog/v1.43.0",{"title":260,"description":324},"4.changelog/11.v1.43.0","oKF5s7LqsytkTfk19vskEADnD9OVXcBVxBPNQu5VeTw",{"id":331,"title":332,"body":333,"date":409,"description":410,"extension":251,"image":246,"meta":411,"navigation":253,"path":412,"seo":413,"stem":414,"__hash__":415},"versions/4.changelog/10.v1.42.5.md","v1.42.5",{"type":172,"value":334,"toc":407},[335,340,375,380,404],[175,336,337],{},[178,338,339],{},"New features:",[182,341,342,348,354,360,370],{},[185,343,344,347],{},[178,345,346],{},"SSO - SAML 2.0 & OpenID Connect"," - connect your identity provider (Okta, Azure AD, Google Workspace, Keycloak) and let your team sign in with existing corporate credentials. Supports metadata URL auto-sync, request signing, and email domain routing. One domain = one SSO config.",[185,349,350,353],{},[178,351,352],{},"SCIM 2.0 provisioning"," - automatically add and remove users when they join or leave your identity provider. No manual user management needed. Bearer token authentication with SHA-256 hashed storage.",[185,355,356,359],{},[178,357,358],{},"Organizations & multi-tenancy"," - create multiple organizations on a single TaskView instance. Each org has its own projects, members, and settings. Switch between orgs instantly. Three roles: Owner, Admin, Member.",[185,361,362,365,366,369],{},[178,363,364],{},"MCP server"," - Model Context Protocol server for AI integration. Connect Claude Desktop, Cursor, or Claude Code to TaskView. Create tasks, list projects, manage work - all from your AI assistant using natural language. Ships as an npm package (",[191,367,368],{},"taskview-mcp",").",[185,371,372,374],{},[178,373,69],{}," - get notified when tasks, projects, or lists change. Send events to Slack, Discord, or your own services. Webhook secrets are encrypted at rest.",[175,376,377],{},[178,378,379],{},"Documentation:",[182,381,382,388,394],{},[185,383,384,385,387],{},"Added SSO documentation (",[191,386,40],{},") - SAML 2.0 and OIDC setup guides, email domain routing, user provisioning, replay attack protection, API reference.",[185,389,390,391,393],{},"Added Organizations documentation (",[191,392,35],{},") - creation, member management, roles, multi-tenancy.",[185,395,396,397,399,400,403],{},"Updated Environment Variables (",[191,398,110],{},") - ",[191,401,402],{},"ENCRYPTION_KEY"," now required for SSO and integrations.",[405,406],"hr",{},{"title":246,"searchDepth":247,"depth":247,"links":408},[],"2026-04-21T00:00:00.000Z","SSO (SAML 2.0 & OIDC), SCIM user provisioning, MCP server for AI integration, organizations with multi-tenancy, webhooks, and major security hardening.",{},"/changelog/v1.42.5",{"title":332,"description":410},"4.changelog/10.v1.42.5","IkrnhmQFqAbnqlCux4gDeF9LRkOdJEKytwop16Ky0W4",{"id":417,"title":418,"body":419,"date":513,"description":514,"extension":251,"image":246,"meta":515,"navigation":253,"path":516,"seo":517,"stem":518,"__hash__":519},"versions/4.changelog/9.v1.41.0.md","v1.41.0",{"type":172,"value":420,"toc":511},[421,425,456,461,478,482,499,501,506],[175,422,423],{},[178,424,339],{},[182,426,427,440,446],{},[185,428,429,432,433,436,437,369],{},[178,430,431],{},"API tokens"," - create tokens for programmatic API access with ",[191,434,435],{},"tvk_"," prefix and SHA-256 hashed storage. Tokens support permission scoping (restrict which operations a token can perform), project scoping (restrict access to specific projects), and optional expiration. Manage tokens from Account Settings. The full token is shown only once at creation. Tokens cannot manage other tokens. Available as both UI and API (",[191,438,439],{},"/module/api-tokens",[185,441,442,445],{},[178,443,444],{},"Session management"," - users can view all active sessions with device name, IP and timestamps, revoke individual sessions, or sign out of all other devices at once.",[185,447,448,451,452,455],{},[178,449,450],{},"Real-time project sync"," - projects update instantly via Centrifugo when a user is added to, removed from, or has roles changed in a project. Built on a new ",[191,453,454],{},"RealtimeDispatcher"," with typed frontend event handler map, designed to scale for future real-time features. Auto-redirect to home when the current project becomes inaccessible.",[175,457,458],{},[178,459,460],{},"Fixes:",[182,462,463,469],{},[185,464,465,468],{},[178,466,467],{},"Collaboration user lookup case mismatch"," - adding a user to a project by email failed if the registered email had uppercase characters. Email is now lowercased before resolving the auth user.",[185,470,471,472],{},"List changing issue ",[473,474,475],"a",{"href":475,"rel":476},"https://github.com/Gimanh/taskview-community/issues/41",[477],"nofollow",[175,479,480],{},[178,481,379],{},[182,483,484,493],{},[185,485,486,487,489,490,492],{},"Added API Tokens documentation (",[191,488,75],{},") - token format, authentication, permission scoping, project restrictions, usage example with ",[191,491,213],{}," package.",[185,494,495,496,498],{},"Added Sessions & Devices documentation (",[191,497,80],{},") - session lifecycle, device listing, remote logout.",[405,500],{},[175,502,503],{},[178,504,505],{},"Migration notes:",[182,507,508],{},[185,509,510],{},"Run database migration container.",{"title":246,"searchDepth":247,"depth":247,"links":512},[],"2026-03-29T00:00:00.000Z","Real-time project sync, API token project scoping, session management, login-by-code fix, and documentation.",{},"/changelog/v1.41.0",{"title":418,"description":514},"4.changelog/9.v1.41.0","RFwy5synhcSw2t1WURSzPhJsLb7ZN4ZDVnqvHAQgD7c",{"id":521,"title":522,"body":523,"date":785,"description":786,"extension":251,"image":246,"meta":787,"navigation":253,"path":788,"seo":789,"stem":790,"__hash__":791},"versions/4.changelog/8.v1.32.0.md","v1.32.0",{"type":172,"value":524,"toc":783},[525,529,584,588,669,674,713,717,734,736,740],[175,526,527],{},[178,528,339],{},[182,530,531,550,556,570],{},[185,532,533,535,536,539,540,539,543,539,546,549],{},[178,534,69],{}," - receive HTTP POST notifications when events happen in your projects. Configure webhook URLs, select events (",[191,537,538],{},"task.created",", ",[191,541,542],{},"task.updated",[191,544,545],{},"task.deleted",[191,547,548],{},"task.assigneesChanged","), and verify payloads with HMAC-SHA256 signatures. Includes automatic retries (3 attempts with exponential backoff), delivery history with payload viewer, status filtering, manual retry for failed deliveries, secret rotation, and test delivery. Webhooks auto-deactivate after 10 consecutive failures.",[185,551,552,555],{},[178,553,554],{},"Kanban & Graph filters"," - filter tasks by lists and assignees on both Kanban board and Graph views. Multiple lists and multiple users can be selected simultaneously. Filters are applied server-side for Kanban (query params on API) and client-side for Graph. Filter toolbar with reset button, responsive layout (inline on desktop, separate row on mobile).",[185,557,558,561,562,565,566,569],{},[178,559,560],{},"Markdown rendering in notes"," - task notes from GitHub/GitLab integrations now render as formatted markdown instead of plain text with raw symbols. Uses Nuxt UI Editor with ",[191,563,564],{},"content-type=\"markdown\""," when task has a ",[191,567,568],{},"sourceUrl",".",[185,571,572,575,576,579,580,583],{},[178,573,574],{},"Centrifugo v6 support"," - updated real-time notification configuration for Centrifugo v6 nested config format. Replaced ",[191,577,578],{},"CENTRIFUGO_PUBLIC_PORT"," with ",[191,581,582],{},"CENTRIFUGO_PUBLIC_URL"," for flexible WebSocket URL configuration, enabling nginx proxy setup without exposing separate ports.",[175,585,586],{},[178,587,460],{},[182,589,590,608,617,627,641,655],{},[185,591,592,595,596,599,600,603,604,607],{},[178,593,594],{},"Kanban order conflict on task move"," - fixed unique constraint violation ",[191,597,598],{},"(goal_id, kanban_order)"," when moving tasks between columns from the task detail panel. The server now assigns a new unique ",[191,601,602],{},"kanbanOrder"," when ",[191,605,606],{},"statusId"," changes.",[185,609,610,613,614,616],{},[178,611,612],{},"Kanban order conflict on drag to filtered empty column"," - when filters made a column appear empty, dragging a task into it could assign a conflicting ",[191,615,602],{},". Fixed by calculating order based on the entire project scope, not just the visible column.",[185,618,619,622,623,626],{},[178,620,621],{},"Task not moving between kanban columns"," - when changing a task's column from the task detail overlay, the kanban board didn't reflect the change until page reload. ",[191,624,625],{},"syncTask"," now detects column changes and moves the task between columns in the local store.",[185,628,629,632,633,636,637,640],{},[178,630,631],{},"Subtask description reverting on completion"," - toggling a subtask's completion checkbox could revert its description to the original text from creation. Fixed by updating the full subtask object from server response instead of only the ",[191,634,635],{},"complete"," field, and by correctly updating subtask descriptions in the parent task's ",[191,638,639],{},"subtasks"," array.",[185,642,643,646,647,650,651,654],{},[178,644,645],{},"Goal lists not loading on kanban page"," - the list filter dropdown was empty on kanban because ",[191,648,649],{},"useProjectDataLoader"," didn't fetch goal lists. Added ",[191,652,653],{},"goalListsStore.fetchLists()"," to the shared data loader.",[185,656,657,660,661,664,665,668],{},[178,658,659],{},"Centrifugo connection token crash"," - ",[191,662,663],{},"CentrifugoClient.generateConnectionToken()"," used dynamic ",[191,666,667],{},"require('jsonwebtoken')"," which wasn't included in the production bundle. Replaced with static import.",[175,670,671],{},[178,672,673],{},"Infrastructure:",[182,675,676,701,710],{},[185,677,678,679,682,683,686,687,690,691,686,694,697,698,569],{},"Added ",[191,680,681],{},"Dispatcher"," interface for event dispatchers - standardized ",[191,684,685],{},"register()"," and ",[191,688,689],{},"registerWorkers()"," contract. Both ",[191,692,693],{},"NotificationDispatcher",[191,695,696],{},"WebhooksDispatcher"," implement it. New dispatchers are registered via a single array in ",[191,699,700],{},"all-events.ts",[185,702,678,703,706,707,709],{},[191,704,705],{},"goalId"," to ",[191,708,545],{}," event in EventBus for webhook delivery routing.",[185,711,712],{},"Docker Compose configuration for Centrifugo with nginx WebSocket proxy setup.",[175,714,715],{},[178,716,379],{},[182,718,719,725,731],{},[185,720,721,722,724],{},"Added webhooks documentation (",[191,723,70],{},") - setup, payload format, signature verification with code example, retry behavior, auto-deactivation, secret rotation, local testing script.",[185,726,727,728,730],{},"Updated notifications documentation with ",[191,729,582],{}," and Centrifugo v6 config format.",[185,732,733],{},"Updated environment variables documentation with Centrifugo v6 config example and nginx proxy setup.",[405,735],{},[175,737,738],{},[178,739,505],{},[182,741,742,756,771],{},[185,743,744,745,748,749,686,752,755],{},"Run database migration ",[191,746,747],{},"1.32.0"," - creates ",[191,750,751],{},"tasks.webhooks",[191,753,754],{},"tasks.webhook_deliveries"," tables.",[185,757,758,759,579,761,763,764,767,768,369],{},"Replace ",[191,760,578],{},[191,762,582],{}," in ",[191,765,766],{},".env.taskview"," (e.g. ",[191,769,770],{},"wss://api.example.com/centrifugo/connection/websocket",[185,772,773,774,539,777,539,780,369],{},"If using Centrifugo, update config to v6 format (nested keys: ",[191,775,776],{},"client.token.hmac_secret_key",[191,778,779],{},"http_api.key",[191,781,782],{},"client.allowed_origins",{"title":246,"searchDepth":247,"depth":247,"links":784},[],"2026-03-22T00:00:00.000Z","Webhooks, kanban & graph filters, markdown notes, Centrifugo v6 support, and bug fixes.",{},"/changelog/v1.32.0",{"title":522,"description":786},"4.changelog/8.v1.32.0","_oNar76ZBo4oqERY5W8wbyq0FImANhbUhRZpPBfpxFg",{"id":793,"title":794,"body":795,"date":838,"description":839,"extension":251,"image":246,"meta":840,"navigation":253,"path":841,"seo":842,"stem":843,"__hash__":844},"versions/4.changelog/7.v1.24.0.md","v1.24.0",{"type":172,"value":796,"toc":836},[797,801,821,825],[175,798,799],{},[178,800,339],{},[182,802,803,809,815],{},[185,804,805,808],{},[178,806,807],{},"GitHub & GitLab integrations"," — connect repositories to your projects and sync issues as tasks. Supports OAuth authorization, webhook-based updates, and issue-to-task mapping. Works with GitHub Enterprise and self-hosted GitLab instances.",[185,810,811,814],{},[178,812,813],{},"Date quick actions"," — new \"This week\" and \"This month\" shortcuts when setting task deadlines",[185,816,817,820],{},[178,818,819],{},"Server-side graph permissions"," — dependency graph operations are now checked on the server, not just in the UI",[175,822,823],{},[178,824,460],{},[182,826,827,830,833],{},[185,828,829],{},"Fixed task completion checkbox being disabled on the main screen when no project is selected",[185,831,832],{},"Fixed task detail panel showing lists from the wrong project",[185,834,835],{},"Various UI improvements and polish",{"title":246,"searchDepth":247,"depth":247,"links":837},[],"2026-03-08T00:00:00.000Z","GitHub & GitLab integrations, graph permissions, and UI improvements.",{},"/changelog/v1.24.0",{"title":794,"description":839},"4.changelog/7.v1.24.0","7admxWpP4F8QQ0f12hWNLM0iFGwi4_11eaawv7pkNNw",{"id":846,"title":847,"body":848,"date":864,"description":865,"extension":251,"image":246,"meta":866,"navigation":253,"path":867,"seo":868,"stem":869,"__hash__":870},"versions/4.changelog/6.v1.20.7.md","v1.20.7",{"type":172,"value":849,"toc":862},[850,854],[175,851,852],{},[178,853,460],{},[182,855,856,859],{},[185,857,858],{},"Fixed subtask duplication when adding subtasks in certain scenarios",[185,860,861],{},"Fixed Kanban board not loading root tasks correctly for columns",{"title":246,"searchDepth":247,"depth":247,"links":863},[],"2026-03-01T00:00:00.000Z","Subtask and Kanban fixes.",{},"/changelog/v1.20.7",{"title":847,"description":865},"4.changelog/6.v1.20.7","MbrjDEqx0QxmQnqh7lgAu-SVDEl34Mmxvbx2QPS7Bv4",{"id":872,"title":873,"body":874,"date":940,"description":941,"extension":251,"image":246,"meta":942,"navigation":253,"path":943,"seo":944,"stem":945,"__hash__":946},"versions/4.changelog/5.v1.20.4.md","v1.20.4",{"type":172,"value":875,"toc":938},[876,880,917,921],[175,877,878],{},[178,879,339],{},[182,881,882,888,900],{},[185,883,884,887],{},[178,885,886],{},"Login with Apple"," — sign in with your Apple ID",[185,889,890,893,894,899],{},[178,891,892],{},"Redesigned web client"," — migrated to ",[473,895,898],{"href":896,"rel":897},"https://ui.nuxt.com/",[477],"Nuxt UI"," for a modern, polished interface",[185,901,902,905,906,686,911,916],{},[178,903,904],{},"Mobile app improvements"," — fixed build issues and updated ",[473,907,910],{"href":908,"rel":909},"https://apps.apple.com/ee/app/taskview/id6499107867",[477],"iOS",[473,912,915],{"href":913,"rel":914},"https://play.google.com/store/apps/details?id=com.handscreamgnl.taskview.app",[477],"Android"," versions",[175,918,919],{},[178,920,460],{},[182,922,923,926,929,932,935],{},[185,924,925],{},"Fixed external auth redirect handling",[185,927,928],{},"Fixed locale not being saved between sessions",[185,930,931],{},"Fixed tag validation — tags and tasks now properly checked for same-project membership",[185,933,934],{},"Fixed start screen loading issues",[185,936,937],{},"Various type fixes and URL corrections",{"title":246,"searchDepth":247,"depth":247,"links":939},[],"2026-02-22T00:00:00.000Z","New UI, Apple login, and mobile improvements.",{},"/changelog/v1.20.4",{"title":873,"description":941},"4.changelog/5.v1.20.4","shGn0hZQ2K_2Ja9mMhGEG0LMah_TPw1sXdy6MeACwfM",{"id":948,"title":949,"body":950,"date":973,"description":974,"extension":251,"image":246,"meta":975,"navigation":253,"path":976,"seo":977,"stem":978,"__hash__":979},"versions/4.changelog/4.v1.19.6.md","v1.19.6",{"type":172,"value":951,"toc":971},[952,957],[175,953,954],{},[178,955,956],{},"Fixes and improvements:",[182,958,959,962,965,968],{},[185,960,961],{},"Fixed cookie handling for authentication sessions",[185,963,964],{},"Added Docker build script for easier image management",[185,966,967],{},"Extended app internals for better customization support",[185,969,970],{},"Updated dependencies",{"title":246,"searchDepth":247,"depth":247,"links":972},[],"2026-01-23T00:00:00.000Z","Cookie-based auth fix and Docker build improvements.",{},"/changelog/v1.19.6",{"title":949,"description":974},"4.changelog/4.v1.19.6","9vh-AGIbHc8H6F_SnNxrPDSLCPzwapr9WUBXqVqWH1o",{"id":981,"title":982,"body":983,"date":1015,"description":1016,"extension":251,"image":246,"meta":1017,"navigation":253,"path":1018,"seo":1019,"stem":1020,"__hash__":1021},"versions/4.changelog/3.v1.19.0.md","v1.19.0",{"type":172,"value":984,"toc":1013},[985,989,1003],[175,986,987],{},[178,988,339],{},[182,990,991,997],{},[185,992,993,996],{},[178,994,995],{},"Login with Google"," — sign in with your Google account via OAuth",[185,998,999,1002],{},[178,1000,1001],{},"Login with GitHub"," — sign in with your GitHub account via OAuth",[175,1004,1005,1006,1009,1010,1012],{},"Both providers work alongside the existing email/password login. Configure them in your ",[191,1007,1008],{},".env"," file — see the ",[473,1011,114],{"href":115}," docs for setup instructions.",{"title":246,"searchDepth":247,"depth":247,"links":1014},[],"2026-01-12T00:00:00.000Z","Login with Google and GitHub.",{},"/changelog/v1.19.0",{"title":982,"description":1016},"4.changelog/3.v1.19.0","RJaZNw-kBO4Js43OR2Wib1bppCcw-yonTWYXU4fD4hw",{"id":1023,"title":1024,"body":1025,"date":1035,"description":1036,"extension":251,"image":246,"meta":1037,"navigation":253,"path":1038,"seo":1039,"stem":1040,"__hash__":1041},"versions/4.changelog/2.v1.18.2.md","v1.18.2",{"type":172,"value":1026,"toc":1033},[1027],[175,1028,1029,1032],{},[178,1030,1031],{},"Bug fix:"," History records for related entities (goals, goal lists, tasks) are now properly deleted when an entity is removed. Previously, removing a goal or list could leave orphaned history entries in the database.",{"title":246,"searchDepth":247,"depth":247,"links":1034},[],"2026-01-08T00:00:00.000Z","Bug fix for history record deletion.",{},"/changelog/v1.18.2",{"title":1024,"description":1036},"4.changelog/2.v1.18.2","2J1g334u_BiCo1g4yZfcVprkNahUsLFGFAzt_ZTH1PQ",{"id":1043,"title":1044,"body":1045,"date":1104,"description":1105,"extension":251,"image":246,"meta":1106,"navigation":253,"path":1107,"seo":1108,"stem":1109,"__hash__":1110},"versions/4.changelog/1.launch.md","v1.18.0 — Public Launch",{"type":172,"value":1046,"toc":1102},[1047,1056,1059],[175,1048,1049,1050,1055],{},"TaskView is now publicly available. The source code has been published on ",[473,1051,1054],{"href":1052,"rel":1053},"https://github.com/Gimanh/taskview-community",[477],"GitHub",", and Docker images are available on Docker Hub.",[175,1057,1058],{},"This is the first public release, and it includes everything you need to run a self-hosted task management platform:",[182,1060,1061,1064,1067,1070,1073,1076,1079,1082,1091,1099],{},[185,1062,1063],{},"Projects, lists, tasks, and subtasks",[185,1065,1066],{},"Kanban boards with custom statuses",[185,1068,1069],{},"Task dependency graphs",[185,1071,1072],{},"Role-based access control with granular permissions",[185,1074,1075],{},"Team collaboration with user invitations",[185,1077,1078],{},"Dashboard with smart widgets",[185,1080,1081],{},"Dark mode",[185,1083,1084,1085,686,1088],{},"Mobile apps for ",[473,1086,910],{"href":908,"rel":1087},[477],[473,1089,915],{"href":913,"rel":1090},[477],[185,1092,1093,1098],{},[473,1094,1097],{"href":1095,"rel":1096},"https://app.taskview.tech/",[477],"Web app"," available at app.taskview.tech",[185,1100,1101],{},"Docker deployment with automated migrations",{"title":246,"searchDepth":247,"depth":247,"links":1103},[],"2026-01-03T00:00:00.000Z","TaskView source code is now publicly available on GitHub.",{},"/changelog/launch",{"title":1044,"description":1105},"4.changelog/1.launch","Ww9HtWrwnGxQ5LrO4upxw4nAag-KLZEo1GqvcLhUi-o",1783289462108]