# BoardMark > BoardMark (by I C Develop) is an md-first issue board for software companies with three board types — Scrum (sprints, drag-and-drop backlog planning, optional parallel sprints), Kanban (with a Backlog column) and Delivery pipeline (columns per delivery environment) — operated by I C Develop Company Limited (Head Office), Bangkok, Thailand. Every project, issue, comment and sprint is a Markdown file, written in a rich-text editor that saves Markdown; AI agents work through MCP with exactly the rights of the user who connected them (never admin or billing); company admins control seats, access and billing. English and Thai throughout. Pricing: ฿249 per seat per month (excl. 7% VAT), the first 2 seats of every company always free. Website: https://www.boardmark.ai/ · Web app: https://app.boardmark.ai · MCP endpoint: https://mcp.boardmark.ai/mcp The site is in English (default, https://www.boardmark.ai/) and Thai (https://www.boardmark.ai/th — same paths under /th, e.g. https://www.boardmark.ai/th/pricing). Thai pages: https://www.boardmark.ai/th, https://www.boardmark.ai/th/pricing, https://www.boardmark.ai/th/signup, https://www.boardmark.ai/th/mcp, https://www.boardmark.ai/th/about, https://www.boardmark.ai/th/contact, https://www.boardmark.ai/th/docs (and /th/docs/). ## What it does - Three board types, chosen per project: Scrum (sprints, story points, burndown), Kanban (a Backlog column first, optional WIP limits per status) and Delivery pipeline (Kanban-style, no sprints; 1–10 environments in order, each with a "Testing (env)" and "Passed (env)" column between Dev Done and Done, plus Test Rejected; project admins add, rename and reorder environments) - Backlog planning (Scrum): running and planned sprints plus the backlog as sections; drag and drop between them and within them, multi-select move, create an issue inside a section; create, edit, start and complete sprints there. New sprint dates default to the day after the latest sprint (same length; overlap allowed). Start opens a form to edit name, duration, dates and goal. With no sprint running, the board shows the next planned sprint locked, with Start - Parallel sprints: a per-project switch, off by default; when on, several sprints run at once with a sprint selector on the board and a burndown per sprint - Projects dashboard after sign-in: a card per project (board type, your role, running sprints and progress, open issues, assigned to you, last update), starred and recently opened projects, search / filter / sort, cards or list; My work = open issues assigned to you across all projects; Assign to me on cards, menus, the issue drawer and the I key - Issues: epic, task, subtask, bug; status, assignee, reporter, points, sprint, labels, parent, links (blocks / blocked by, relates, duplicates, clones), rank. Rich-text (WYSIWYG) editor for descriptions and comments — headings, lists, checklists, tables, code, mermaid, inline images — always saved as Markdown, with a raw Markdown tab - Attachments table per issue (name, date, size, uploader, type filters, preview, download); comment replies in threads (one level deep); comments are append-only - Email notifications (English and Thai in one email): assigned to you, new comment on an issue you are assigned to or reported, reply to your comment; invoices, reminders and payment confirmations for company admins - Real-time boards; drag and drop between columns and from the backlog strip into a column; long-press drag on phones; keyboard moves - md-first: one issue = one .md file with JSON Schema-validated frontmatter; the database is a rebuildable index; every write is a commit with history and diffs - Optimistic locking: every write sends the file version; conflicts return 409 version_conflict and the user chooses Keep mine / Take theirs / Merge - AI agents over MCP (Streamable HTTP) with user parity: an agent has exactly its user's rights; MCP never exposes users, teams, seats, permissions, billing, creating projects, project settings & environments - Accounts: individual (one person, cannot invite) or juristic company (members, teams) - Roles: Company admin (always project admin everywhere), Company member; per project: Project admin, Member, Viewer — given to people or whole teams under Members & access - Company admins enable, suspend or deactivate seats; only enabled seats can use the board and are billed - English and Thai throughout the site and apps, never mixed on one screen; the choice is remembered ## Not available yet - Automatic charging of a saved card (each invoice is paid in the app by card, PromptPay QR or bank transfer) - e-Tax invoices (documents are PDF), outbound webhooks and integrations with code hosting or chat tools — planned - Editing a comment after sending, custom statuses in the UI (statuses come from project.md) ## Pricing (THB, post-paid monthly) - Seat: ฿249 per seat per month, excluding VAT 7% - First 2 seats of every company are always free: billable_seats = max(0, Σ seat_days / days_in_month − 2), rounded to 2 decimals; seats counted daily at 00:00 Asia/Bangkok - Free tier: ≤ 2 enabled users, ≤ 2 projects and ≤ 10 GB of files → no invoice. Enabling the 3rd user, creating the 3rd project or storing more than 10 GB requires a verified email and a complete tax profile (no card needed) - Storage: 10 GB free per company; above that (paid companies only) the month's peak is rounded up to 10 GB blocks at ฿70 each; ceiling 1 TB per company by default, raised on request - Tax: VAT 7% on the subtotal; juristic companies with a complete tax profile may withhold 3% of the subtotal (any payment method) and upload the WHT certificate (50 ทวิ) (PDF/JPG/PNG) - Invoices on the 1st of the month for the previous month, due in 15 days; PDF invoice, then PDF receipt / tax invoice (Thai tax-invoice format) once paid - Payment: each invoice in the app by card (can be kept on file; 3-D Secure) or PromptPay QR, or bank transfer to the account printed on the invoice - Late payment: reminder emails; more than 30 days past due → company read-only; more than 60 days → suspended - AI agents are not seats ## MCP (AI agents) - Endpoint: https://mcp.boardmark.ai/mcp (Streamable HTTP) - Browser sign-in (OAuth 2.1 with PKCE; recommended): `claude mcp add --transport http boardmark https://mcp.boardmark.ai/mcp` — Claude Code opens a browser to sign in and choose the company; signed-in apps can be signed out in the web app (Agent & MCP access) - Personal access token (CI, headless): prefix board_pat_, 30–365 days, shown once, sent as `Authorization: Bearer `: `claude mcp add --transport http boardmark https://mcp.boardmark.ai/mcp --header "Authorization: Bearer $BOARD_PAT"` - Rules: every write must send `version`; call get_issue before update_issue; 600 requests/minute per token by default; writes made via MCP record the agent token in the commit and are badged in the app - Resources: board://{project_key}/project.md, board://{project_key}/issues/{key} - Tools (31): ### Projects & my work - `list_projects`: Projects you can access, optionally with an overview (open issues, running sprints and their progress) in one call - `list_my_issues`: Issues assigned to you across every project, in one call - `get_project`: project.md: board type, statuses, workflow, environments and your role ### Issues - `search_issues`: Search by status, assignee, sprint, type, label, text, parent (paginated) - `get_issue`: Read an issue with its current version - `create_issue`: Create an issue (one .md file) - `update_issue`: Change any number of fields in one call — requires version - `delete_issue`: Delete an issue — requires version - `transition_issue`: Move to another status (including each environment's statuses on a pipeline) - `rank_issue`: Order an issue (before/after another) - `assign_issue`: Set the assignee - `link_issues`: Link issues (blocks, relates, duplicates, clones) - `unlink_issues`: Remove a link ### Comments & attachments - `list_comments`: Comments on an issue, with reply threads - `add_comment`: Add a Markdown comment or reply to one - `request_upload`: Get a presigned upload URL - `attach_file`: Attach an uploaded file to an issue - `list_attachments`: An issue's attachments: name, size, date and uploader - `get_download_url`: Presigned download URL for an attachment ### Sprints - `list_sprints`: Sprints of a project (several may be active) - `create_sprint` (project_admin): Create a sprint - `update_sprint` (project_admin): Rename a sprint or change its dates or goal - `move_to_sprint`: Move issues into or out of a sprint - `start_sprint` (project_admin): Start a sprint - `close_sprint` (project_admin): Close a sprint and move unfinished work - `get_burndown`: Sprint burndown (Scrum) ### The md tree - `read_file`: Read an .md file - `write_file`: Write an .md file through the same validator as the UI - `list_dir`: List files in the md tree - `get_history`: Commit history: who changed what, and through which agent token - `diff`: Diff two versions ## Signup API (same origin as the site) - `POST https://www.boardmark.ai/api/v1/auth/signup` JSON `{ email, password (8–128 chars), name, company?: { type: "individual" | "juristic", name } }` → 202 (also returned for an already-registered email). `company` may be omitted for an invited email; invite links look like `https://www.boardmark.ai/signup?email=…&invited=1` - `POST https://www.boardmark.ai/api/v1/auth/verify-email` JSON `{ token }` → 204, or 400 `token_invalid` (links last 72 hours) - Errors: `{ "error": { "code", "message", "details" } }`; 429 when rate limited - Accounts can sign in immediately at https://app.boardmark.ai; email verification is needed only to leave the free tier ## Company - I C Develop Company Limited (Head Office) — บริษัท ไอ ซี ดีเวลลอป จำกัด (สำนักงานใหญ่) - Tax ID: 0105560011770 - Head Office (registered address): 524 Niamklamsamakkhi, Soi Prasertmanukit 29 sub 8, Prasertmanukit Rd., Chorakhebua, Ladprao, Bangkok 10230 - สำนักงานใหญ่ (ที่อยู่จดทะเบียน): 524 หมู่บ้านเนียมกล่ำสามัคคี ซอยประเสริฐมนูกิจ 29 แยก 8 ถนนประเสริฐมนูกิจ แขวงจรเข้บัว เขตลาดพร้าว กรุงเทพมหานคร 10230 - Office (visit or contact us): The Rice Tower, 1467/8, Room 1208, 12th Floor, Phaya Thai, Phaya Thai, Bangkok 10400 · Phone +66 2 165 0338 · Map: https://www.google.com/maps/search/?api=1&query=The%20Rice%20Tower%201467%2F8%20Phaya%20Thai%20Bangkok%2010400 - สำนักงาน (ติดต่อ): The Rice Tower 1467/8 ห้อง 1208 ชั้น 12 แขวงพญาไท เขตพญาไท กรุงเทพฯ 10400 · โทร 02-165-0338 - Documents sent by post (e.g. the withholding tax certificate, 50 ทวิ) go to the Head Office (registered address), not the office - Phone: +66 2 162 0801, +66 2 165 0338, +66 88 027 1407 - Email: support@i-c-develop.com - Website: https://www.i-c-develop.com ## FAQ ### What is BoardMark? BoardMark is a SaaS issue board for software companies, operated by I C Develop Company Limited in Bangkok, with three board types: Scrum, Kanban and Delivery pipeline. Every project, issue, comment and sprint is a Markdown (.md) file, AI agents work through MCP with exactly the rights of the user who connected them, and company admins control seats, permissions and billing. It is fully available in English and Thai. ### Which board types are there? Scrum: sprints, a drag-and-drop backlog planning page, story points and a burndown. Kanban: continuous flow that starts in a Backlog column, with optional WIP limits. Delivery pipeline: a Kanban board whose columns follow your environments — Testing and Passed for develop, UAT, production and so on — so you see where every issue is on its way to release. ### What does md-first mean? All work content lives as .md files in object storage — one issue is one file, with frontmatter validated by JSON Schema and a Markdown body. You write in a rich-text editor, but it is always saved as Markdown. The database is only an index that can be rebuilt from the files, and every change is recorded as a commit. ### What can an AI agent do on the board? An agent connects over MCP by signing in through your browser or with a personal access token, so it sees and edits only the projects you can access: search, create, update and transition issues, comment and reply, attach files, list your work across projects and manage sprints within your role. Every agent write is recorded with the token that made it. ### Can an agent reach admin or billing? No. MCP has no tools for users, teams, seats, permissions, billing, creating projects or project settings. Those stay in the web app, for the people whose role allows them. ### Does BoardMark work with Claude Code and MCP? Yes. BoardMark has a built-in MCP server (Streamable HTTP). Add it to Claude Code with one command and sign in through your browser, or use a personal access token with other MCP clients and CI. 31 tools cover projects, issues, comments, attachments, sprints and the .md files. ### Who operates BoardMark? I C Develop Company Limited (Head Office), Tax ID 0105560011770, 524 Niamklamsamakkhi, Soi Prasertmanukit 29 sub 8, Prasertmanukit Rd., Chorakhebua, Ladprao, Bangkok 10230, Thailand. Phone +66 2 162 0801, email support@i-c-develop.com. ### Who enables seats and gives access to projects? The company admin enables seats — a user can open the board only while their seat is enabled; suspended or deactivated seats have no access and are not billed. Project access is given to people or whole teams, as Project admin, Member or Viewer. ### What is the difference between an individual and a company account? An individual account belongs to one person and cannot invite anyone — it is for personal use. A juristic (company) account invites its team, creates teams and gives project access. Both start free right away. ### Is BoardMark available in Thai? Yes. The site and the apps are complete in both English and Thai, never mixed on one screen. Switch on any page and your choice is remembered. Notification emails carry both languages. ### Which email notifications are sent? When an issue is assigned to you, when someone comments on an issue you are assigned to or reported, when someone replies to your comment, and — for company admins — invoices, payment reminders and payment confirmations. You are never emailed about your own actions. ### Do I have to verify my email before using it? No. You can sign in right after signing up. A verified email is needed only when you go beyond the free tier. ### How much does BoardMark cost? ฿249 per seat per month, excluding 7% VAT. The first 2 seats of every company are always free. Billing is post-paid, monthly, in Thai baht. ### Is there a free plan? Yes. A company with at most 2 enabled users, at most 2 projects and up to 10 GB of files is on the free tier and gets no invoice. Before enabling a 3rd user, creating a 3rd project or going over 10 GB, verify your email and complete your tax profile — no card required. ### Do you bill for the days actually used? Yes. Enabled seats are counted every day (seat-days) and averaged over the month: billable seats = max(0, total seat-days ÷ days in month − 2), rounded to 2 decimals. ### Do AI agents count as seats? No. An agent uses the rights of the user who connected it and costs nothing extra. ### How is file storage billed? Every company gets 10 GB of attachment storage free. Free-tier companies are capped at 10 GB; once a company has left the free tier, the month's peak above 10 GB is rounded up to 10 GB blocks at ฿70 per block, up to a ceiling of 1 TB per company by default (it can be raised on request). ### Can a juristic company withhold tax? Yes. A juristic company with a complete tax profile can choose 3% withholding tax, deducted from the pre-VAT amount with any payment method, then upload the WHT certificate (50 ทวิ) as a PDF or image on the invoice page. ### Which payment methods are supported? Pay each invoice in the app by card (the card can be kept on file for next time) or PromptPay QR, or by bank transfer to the account printed on the invoice. Invoices are issued on the 1st of the following month and are due within 15 days. ### How are invoices and tax invoices handled in Thailand? Prices are in Thai baht plus 7% VAT. You get a PDF invoice for every month with a charge, and a PDF receipt / tax invoice in the Thai tax-invoice format once it is paid, issued by I C Develop Company Limited with your tax profile as the buyer. Download them from the invoice page; emails tell you when an invoice is issued and when it is paid. ### What happens if an invoice is paid late? Reminder emails go out before and after the due date. More than 30 days after the due date the company becomes read-only, and after 60 days it is suspended. Company admins can always open their invoices and pay. ### How do I connect an AI agent to BoardMark? The easiest way: add the MCP server in Claude Code, then sign in through your browser and choose the company — no token to copy. For CI or machines without a browser, create a personal access token in the app and send it as the header Authorization: Bearer . ### Can an agent safely edit an issue someone else is editing? Yes. Every write sends the version of the file it read. If someone changed it first, the server answers 409 version_conflict instead of overwriting, so agents should always call get_issue before update_issue. ### How do I see what an agent changed? Every agent write records the token in its commit. In the app, cards and attachments changed or uploaded by an agent carry a badge, and the Agent & MCP page lists your agents' recent commits. ### Is there a rate limit? Yes — 600 requests per minute per token by default. ## Docs: Getting started Sign up, pick an account type, create your first project, invite your team, enable seats, choose a language and connect an AI agent. ### How do I sign up? Open the signup page, enter your name, email and a password (8–128 characters), and choose an account type. The account is created at once and you can sign in to the app right away. The verification email does not block anything, but a verified email is needed to go beyond the free tier. Account type | For | Limits Individual | Just you, freelancers | Always one member; cannot invite anyone Juristic (company) | Companies, partnerships, teams | Invite members, create teams, give project access Both start free right away, and both can leave the free tier the same way when they need a 3rd project or more than 10 GB of files. ### How do I create the first project? A company admin clicks Create project on the projects dashboard, picks a short project key such as APP, which prefixes every issue (APP-1, APP-2, …), and chooses a board type. - Scrum — work in sprints, with a backlog planning page - Kanban — continuous flow starting in a Backlog column - Delivery pipeline — list your environments in order (such as develop, UAT, production) and the columns are created for you Projects are created in the web app only; AI agents cannot create projects. ### How do I invite my team and enable seats? In the admin console, admins invite members by email. Invitees without an account sign up from the invite link (copyable from the invitations list) without creating a company of their own. The admin then enables their seat — only enabled seats can open the board — and gives them project access under Members & access. - The first 2 seats of every company are always free - Free tier: up to 2 users, up to 2 projects and up to 10 GB of files - Before a 3rd user, a 3rd project or more than 10 GB, verify your email and complete your tax profile — no card needed - Roles and access are explained in Teams & access ### Which languages can I use? English and Thai, across the site, the app and the admin console. Every screen is entirely in one language. Switch with the language button at the top; the choice is remembered for a year, and links from the site open the app in the same language. Notification emails carry both languages, and tax documents are bilingual. ### How do I connect an AI agent? Add BoardMark as an MCP server in Claude Code and sign in through your browser — or use a personal access token for CI. The full steps and the tool list are on the MCP page. ## Docs: Dashboard & My work The projects dashboard you land on after signing in: sprint progress, starred and recent projects, My work across projects, and Assign to me. ### What does the projects dashboard show? After signing in you see a card for every project you can access: key, name, board type, your role, running sprints with a progress bar and days left, open issues, issues assigned to you, and when it last changed. - Star the projects you use most so they stay on top, and see the ones you opened recently (remembered in this browser) - Search by name or key, filter by board type, sort by recent activity, name or most assigned to you - Switch between cards and a compact list - Company admins create projects from here - Open a board from its card, the project menu at the top left, or ⌘K ### What is My work? My work lists every open issue assigned to you across all projects, grouped by project, with status, story points and sprint. Show done issues too, and load more when the list is long. AI agents read the same list over MCP (list_my_issues). ### What is the fastest way to take an issue? - Press the Assign to me button on a card (shown on hover or focus, always on phones) - Choose Assign to me in the ⋯ menu of backlog-strip and planning rows - Use the button under Assignee in the issue drawer - Press I on a focused card or row, or in the open drawer A toast confirms it with Undo. Viewers, and companies in read-only mode, do not get the button. ## Docs: Boards: Scrum, Kanban & Delivery pipeline The three board types in BoardMark — Scrum, Kanban and Delivery pipeline: statuses, workflow, WIP limits, environments, dragging cards and concurrent edits. ### How do the board types differ? Board | Sprints | Best for Scrum | Yes | Teams working in iterations, with story points, a burndown and a backlog planning page Kanban | No | Continuous work such as operations or support; starts in a Backlog column, optional WIP limits Delivery pipeline | No | Teams that need to know which environment every issue is on; Testing and Passed columns per environment ### How does the Kanban Backlog column work? Kanban projects have a Backlog status as the first column, before To Do. New issues start in Backlog and are dragged to To Do when the team is ready. The Backlog lane can be collapsed. Kanban projects created before this existed get a one-time Add Backlog column button for project admins. WIP limits per status are set in project.md; columns over their limit are highlighted. ### How does a Delivery pipeline work? When creating the project, list 1–10 environments in delivery order. The board gets Backlog · To Do · Test Rejected · Developing · Dev Done, then Testing and Passed for each environment, then Done. Each environment's columns sit under one header band. - An issue that fails testing on any environment moves to Test Rejected and goes back to development - Project admins add, rename or reorder environments later in Project settings - An environment can be removed only when none of its columns hold issues — the blocking issues are listed - Delivery pipelines have no sprints ``` --- key: REL name: Releases board_type: pipeline environments: # 1–10, in delivery order - { id: develop, name: develop } - { id: uat, name: UAT } - { id: prod, name: production } statuses: # generated from the environments - { id: backlog, name: "Backlog", category: todo } - { id: todo, name: "To Do", category: todo } - { id: test_rejected, name: "Test Rejected", category: in_progress } - { id: developing, name: "Developing", category: in_progress } - { id: dev_done, name: "Dev Done", category: in_progress } - { id: testing_develop, name: "Testing (develop)", category: in_progress } - { id: passed_develop, name: "Passed (develop)", category: in_progress } - { id: testing_uat, name: "Testing (UAT)", category: in_progress } - { id: passed_uat, name: "Passed (UAT)", category: in_progress } - { id: testing_prod, name: "Testing (production)", category: in_progress } - { id: passed_prod, name: "Passed (production)", category: in_progress } - { id: done, name: "Done", category: done } --- ``` ### Where do statuses and workflow come from? From each project's project.md. Every status has a category (todo, in_progress, done), and transitions are either any-to-any or an explicit list. New projects get To Do, In Progress, In Review, Test Rejected and Done. ``` --- key: APP name: Mobile App board_type: scrum statuses: - { id: todo, name: "To Do", category: todo } - { id: in_progress, name: "In Progress", category: in_progress } - { id: in_review, name: "In Review", category: in_progress } - { id: test_rejected, name: "Test Rejected", category: in_progress } - { id: done, name: "Done", category: done } transitions: any # any | explicit list parallel_sprints: false # Scrum only; off by default --- ``` ### How do I move cards? - Drag a card to another column to change its status, or up and down to reorder - Drag an issue from the backlog strip straight into a column — it joins the running sprint with that status - On phones, long-press then drag, or change the status in the issue drawer - From the keyboard: ⇧← / ⇧→ moves between columns, ⇧↑ / ⇧↓ reorders Everyone viewing the board sees the change in real time. ### What happens when two people edit the same issue? Every save sends the version it read. If someone saved first, nothing is overwritten: you see the difference and choose Keep mine, Take theirs or Merge — even when the changes do not overlap. ## Docs: Backlog planning & sprints Drag-and-drop backlog planning, creating, starting and closing sprints, parallel sprints, story points and the burndown in BoardMark. ### What can I do on the backlog planning page? Scrum projects have a Board tab and a Backlog tab. The Backlog tab shows the running and planned sprints as sections — with dates, issue count and points — followed by the backlog. - Drag issues between sprints and the backlog, or reorder within a section - Select several (checkbox or shift-click) and move them together - Use Create issue at the end of a section to add straight into it - Create, edit, start and complete sprints from here - Move a row with ⇧↑ / ⇧↓ or its ⋯ menu; on phones, long-press and drag ### How do I create and start a sprint? A new sprint's dates default to the day after the latest sprint ends, with the same length. You can always change them, and date ranges may overlap. Every Start opens the Start sprint form: edit the name, duration (1–4 weeks or custom), start, end and goal, and check the issue count, points and warnings (no issues, no points, overlap with a running sprint). A planned start in the past becomes today, keeping the length. Confirm and you land on that sprint's board. When no sprint is running, the board shows the next planned sprint locked — cards open, but nothing moves — with Start sprint for project admins. ### Can several sprints run at once? Yes, when a project admin turns on Parallel sprints in Project settings. It is off by default: a sprint can start only while no other sprint is running, and the Start sprint form explains why when it cannot. - The board gets a sprint selector: all running sprints (the default) or one at a time - On all sprints, cards show a sprint chip, and dropping from the backlog asks which sprint - The burndown and points follow the selected sprint - An issue is in one sprint at a time, and sprints are closed one by one - Turning the switch off while several run lets them finish, but no new one starts until one is left ### Where does unfinished work go when a sprint closes? When closing, choose where unfinished issues go: the backlog, a new sprint (dated right after the latest one) or a planned sprint — never into a sprint that is already running. ### Who can manage sprints? - Project admin: create, rename or re-date, set the goal, start and close sprints, and switch parallel sprints - Member: move issues into or out of sprints and reorder them - Viewer: read only ### How are sprints stored, and how is the burndown calculated? A sprint is one .md file in the project's sprints/ folder, with state planned, active or closed. The burndown uses the story points of the sprint's issues, recorded daily — one sprint at a time, in the app or over MCP (get_burndown). ``` --- id: S-12 name: Sprint 12 state: active # planned | active | closed start: 2026-09-15 end: 2026-09-29 goal: Ship login and session for QA --- ``` ## Docs: Issues, rich text, attachments & replies Write issues in a rich-text editor that saves Markdown, add inline images, manage attachments, reply to comments in threads, and get email notifications. ### What does an issue have? - Type: epic, task, subtask (needs a parent) or bug - Status, assignee, reporter, story points, sprint, labels and parent - Links: blocks / blocked by, relates, duplicates and clones — the inverse link is written on the other issue for you - A rank: its order on the board and in the backlog Change several fields and save once — that is one new version. ### How do I write descriptions and comments? In a WYSIWYG editor: headings, bold, italic, strikethrough, code, lists, checklists, tables, links, quotes, code blocks (including mermaid) and dividers. Markdown shortcuts work as you type, and images you paste, drop or insert show inline at once while they upload. Everything is saved as Markdown in the .md file — parts you did not touch are written back byte for byte. Prefer raw Markdown? Open the Markdown tab, or view the whole .md file. ### How are attachments handled? Attach with the button or by dropping files; they upload straight to object storage. Each issue's attachments table shows a thumbnail, name, date added, size and uploader (badged when uploaded over MCP), filters All, Images, Documents, Videos and Other, and offers preview and download. Storage counts per company, with 10 GB free; see your usage in the admin console. ### How do comment replies work? Press Reply under any comment and the composer opens under its thread. Replies are grouped under the top-level comment (one level deep); a reply to a reply shows whom it answers with a short quote. Threads over 3 replies collapse, and every comment has its own link. Comments are append-only: they cannot be edited once sent. ### When do I get emails? - When an issue is assigned to you - When someone comments on an issue you are assigned to or reported - When someone replies to your comment - Never about your own actions, and never two emails for one event Emails carry English and Thai in one message, and say when the change came from an AI agent. ## Docs: Teams & access Company and project roles, seats, invitations, teams, and giving people or whole teams access to each project with Members & access in BoardMark. ### Which roles are there? Scope | Role | Can Company | Company admin | Users, seats, invitations, teams, permissions, billing, tax profile, creating projects — always a project admin everywhere Company | Company member | Sees only projects they were given access to Project | Project admin | Project settings, environments, parallel sprints, members & access, managing sprints Project | Member | Create, edit, move and assign issues, comment and attach files Project | Viewer | Sees the board and issues but cannot change anything ### How do seats work? - Enabled — can open the board and counts as a seat - Suspended — no access, not billed; can be enabled again - Deactivated — no longer used, not billed - AI agents are never seats ### How do I give access to a project? Open Project settings → Members & access (or the admin console's Project members tab), search for a person or pick a team, and give Project admin, Member or Viewer. Change roles or remove access in the same list. - A team grant covers everyone in the team, now and later - Each person's effective role is the highest of their own and every team they are in; the list shows which team it comes from - Company admins are always project admins - The last project admin cannot be demoted or removed - Everyone else sees the list read-only ### What are teams for? Company admins create teams in the admin console; a person can be in several teams. Give a project to a team once instead of person by person. Individual accounts have one member, so they have no teams. ## Docs: Billing, invoices & payments Free tier, seat-days, storage, tax profile, 3% withholding and the WHT certificate (50 ทวิ), invoices and tax invoices, card, PromptPay or transfer, late payment. ### What is the free tier, and how do I leave it? A company with at most 2 enabled users, at most 2 projects and up to 10 GB of files is free and gets no invoice. Before a 3rd user, a 3rd project or more than 10 GB, verify your email and complete your tax profile — the app tells you what is missing. No card needed. ### How is the bill calculated? - Seats: enabled seats are counted daily at 00:00 and averaged over the month — billable seats = max(0, total seat-days ÷ days in month − 2), rounded to 2 decimals - Storage: the month's peak above 10 GB, rounded up to 10 GB blocks, up to 1 TB per company by default (more on request) - VAT 7% on the subtotal - The admin console shows this month's estimate from the days counted so far ### How do the tax profile and withholding work? Fill in the buyer on the Tax profile card of the admin console — juristic: name, 13-digit tax ID, head office or branch, address and document email; individual: full name, address and, optionally, national ID. A juristic company with a complete tax profile can choose 3% withholding: amount due = total incl. VAT − 3% of the pre-VAT subtotal, with any payment method. After paying, upload the WHT certificate (50 ทวิ) as a PDF, JPG or PNG up to 10 MB on the invoice page, then wait for review. ### When do I get invoices and tax documents? Invoices are issued on the 1st for the previous month and are due in 15 days; company admins get an email. The Invoices page of the admin console shows lines, VAT, withholding, amount due and payments, with the invoice PDF always and the receipt / tax invoice PDF once paid, in the Thai tax-invoice format. Members do not see it. ### How can I pay? - Card: pay on the invoice page and optionally keep the card on file for next time; 3-D Secure supported; card data never reaches our servers - PromptPay: scan the QR on the invoice page; the status updates by itself once paid - Bank transfer: to the account printed on the invoice, with copy buttons for the account number, amount and reference; our staff record the payment - Each invoice is paid in the app — there is no automatic card charge yet ### What if an invoice is paid late? Reminder emails go out before and after the due date. More than 30 days after it, the company becomes read-only (a banner on every screen, no changes); after 60 days it is suspended (all seats suspended, billing stops). The admin console, invoices and payment keep working, and paying restores access. ## Docs: md files How BoardMark stores work as Markdown: project.md, issues, comments and sprints, with frontmatter, versions and history. ### Why store work as md files? md files are readable by people and AI alike, work with ordinary tools and keep a full change history. The database is only an index for search and boards, and can always be rebuilt from the files. Data that is not work content — members, teams, access, seats, billing — lives in the database as usual. ### How are the files laid out? ``` /c/{company_id}/p/{project_key}/ project.md # config, board type, statuses, workflow sprints/S-{n}.md issues/{KEY}-{n}.md # 1 issue = 1 file issues/{KEY}-{n}/comments/{seq:04d}.md ``` ### What does an issue file look like? The frontmatter is validated by the same JSON Schema for the web app and MCP; the body is Markdown, written in the rich-text editor or edited directly. ``` --- id: APP-101 type: task # epic | task | subtask | bug status: in_progress # must be one of project.md statuses assignee: usr_01H... # user id or null reporter: usr_01H... points: 3 # nullable sprint: S-12 # nullable (Kanban and pipeline = null) parent: APP-90 # nullable; a subtask needs a parent links: - { type: blocks, id: APP-77 } - { type: relates, id: APP-80 } labels: [frontend] rank: a0V # order on the board and in the backlog created_at: 2026-09-23T09:00:00+07:00 updated_at: 2026-09-23T10:12:00+07:00 version: 14 # optimistic lock, +1 on every write --- # Login page Written in the rich-text editor, saved as Markdown: mermaid, code, tables, checklists and images. ``` ### How are comments stored? One comment is one file. When it came from an AI agent, the agent field names the token used. A reply stores reply_to (the thread's top-level comment) and in_reply_to (the exact comment answered). ``` --- seq: 5 author: usr_01H... agent: tok_01H... # null when a person wrote it; set when it came through MCP created_at: 2026-09-23T10:12:00+07:00 reply_to: 3 # the thread's top-level comment; null on a top-level comment in_reply_to: 4 # the exact comment answered attachments: - attachments/APP-101/8f2a-spec.png --- Fixed in the attached build, please re-test. ``` ### How do versions and history work? - Every write sends the version it read (optimistic locking) - Every write creates one commit: who, which agent token, which files - History and diffs are available over MCP (get_history, diff); in the app, issues changed by an agent are badged and the Agent & MCP page lists your agents' recent commits