# KopiMark — Full Documentation > KopiMark turns your Figma file into a workspace where designers, writers, and translators edit and approve copy on a live preview of the design. This file bundles every documentation page as Markdown so you can paste it into an LLM and ask questions about the product. _Generated from https://kopimark.com/docs/. Canonical HTML lives under the same paths._ --- # Documentation > Documentation, guides, and reference for KopiMark — edit, translate, and review copy directly on top of your Figma designs, without spreadsheets. _Source: https://kopimark.com/docs/_ Welcome to KopiMark. KopiMark turns your Figma file into a collaborative workspace where writers, designers, translators, and reviewers can edit copy and ship translations in context — on the live design — without ever opening a spreadsheet. These docs walk you from your first sign-in to the workflows your team will use every week. ## New here? Start with these - [Getting started](/docs/getting-started/) — sign in, open your demo project, and make your first edit in about five minutes. - [How KopiMark works](/docs/concepts/how-kopimark-works/) — the short version of projects, pages, text nodes, and how the Figma sync stays current. - [Connect Figma](/docs/guides/connect-figma/) — the trickiest part of setup, covered step by step. ## Most useful guides - [Translate with AI](/docs/guides/translate-with-ai/) — add languages and draft translations from inside the editor. - [Review with comments](/docs/guides/review-with-comments/) — pinned threads, mentions, and how reviewers sign off. - [Statuses and approvals](/docs/guides/statuses-and-approvals/) — build a review workflow that matches how your team already operates. - [A tour of Settings](/docs/settings/tour/) — the section most teams never open, even though it's where fonts, languages, glossary, and exports live. ## Reference - [Plans and limits](/docs/reference/plans-and-limits/) — what's included on Free, Starter, Team, and Business. - [Roles and workspaces](/docs/concepts/roles-and-workspaces/) — who can do what, and how guests differ from members. ## Need help? Email [hello@kopimark.com](mailto:hello@kopimark.com) — we reply within a business day. --- # Getting started > Get started with KopiMark in about five minutes — sign in, open your demo Figma project, and make your first copy edit live on the design. _Source: https://kopimark.com/docs/getting-started/_ This guide is the fastest path from "I just signed up" to "I've shipped a copy edit on a real Figma design." You don't need a Figma token for this — your demo project comes pre-loaded. > **Tip** — already past the demo? Jump to [Connect > Figma](/docs/guides/connect-figma/) to point KopiMark at your own files. ## 1. Sign in KopiMark uses passwordless email sign-in. There's no password to set. 1. Open [app.kopimark.com](https://app.kopimark.com) and click **Sign in**. 2. Enter your work email and submit. KopiMark emails you a one-time link. 3. Click the link from the same browser. You'll land on the Projects home. ## 2. Meet your demo project On your first sign-in, KopiMark creates a personal workspace and seeds it with a **demo project** — a real Figma design with sample pages, languages, statuses, and one example comment thread already on the canvas. The demo runs entirely from a pre-built cache, so it works before you've connected Figma. It's the safest place to click around. > _[image placeholder: Projects home with the demo project tile highlighted.]_ ## 3. Open a page in the editor 1. From the **Projects home**, click your demo project. 2. You'll see a grid of pages with thumbnails, language flags, and status indicators. Click any page tile to open the editor. 3. The editor loads the Figma design as a live, zoomable canvas on the left, with a side panel on the right. > _[image placeholder: Editor screenshot showing the live canvas on the left and the side panel on the right.]_ ## 4. Edit your first text 1. **Click any text** on the canvas. The node becomes selected and the side panel switches to the text editor. 2. **Type your change.** The canvas updates as you type — the design re-renders the new copy at the same size, font, and color. 3. **Click outside** to commit. The change saves automatically; there's no "save" button. The text you just edited is now versioned. You can see every prior revision in the **History** panel — and so can your teammates. > **Tip** — every edit auto-applies the project's default status (usually > something like *Needs review*). That's how teammates know there's > something to look at. ## 5. Leave a comment Comments in KopiMark are **pinned to the canvas**, not to a list. They're the fastest way to flag a sentence for review. 1. Click the **comment tool** in the toolbar, then click anywhere on the canvas to drop a pin. 2. Type your message. Use `@` to mention a teammate (once you've invited people). 3. Press **Comment** to post. The pin stays anchored to that spot until someone resolves the thread. > _[video placeholder: 30-second screen recording of dropping a pinned comment on the canvas and resolving it.]_ ## 6. Switch language The demo project ships with at least one extra language. To preview the translated version: 1. Open the **language switcher** in the editor toolbar. 2. Pick the target language. The canvas re-renders with translated copy in place; untranslated nodes fall back to the source. 3. Click a translated text node to edit the translation. To draft a fresh one with AI, see [Translate with AI](/docs/guides/translate-with-ai/). ## Next steps You've now done the four things 90% of KopiMark sessions involve: opened a page, edited text, left a comment, switched language. From here: - **Bring in your own Figma file** — [Connect Figma](/docs/guides/connect-figma/) walks through generating a personal access token and what it unlocks. - **Invite a teammate** — [Invite your team](/docs/guides/invite-your-team/) covers roles and guest access. - **Explore Settings** — most teams discover too late that fonts, glossary, exports, and custom statuses live here. [Take the tour](/docs/settings/tour/). --- # How KopiMark works > The mental model behind KopiMark — workspaces, projects, pages, text nodes, statuses, and how the Figma sync keeps your design and copy aligned. _Source: https://kopimark.com/docs/concepts/how-kopimark-works/_ KopiMark sits between your Figma file and your team. Designers keep working in Figma; everyone else (writers, translators, reviewers, PMs) works on the copy and assets inside KopiMark, on top of the same design. This page is the short explanation of how the pieces fit together. If you'd rather get hands-on first, start with [Getting started](/docs/getting-started/). ## The hierarchy KopiMark organises work in three nested layers: - **Workspace** — your team. Holds members, billing, glossary, and domain whitelist. Every account has at least one workspace. - **Project** — one body of work, usually mapped to one Figma file. Holds its own languages, statuses, fonts, members, and export config. - **Page** — one Figma page inside a project. This is the editor surface where copy and translations live. Inside a page, each text or image you see on the canvas is a **node** — imported from Figma and bound to its original Figma node id, so re-syncs match cleanly even when the file evolves. ## What lives where | Layer | What you manage there | |---|---| | Workspace | Members, roles, billing, workspace glossary, domain whitelist | | Project | Languages, statuses, custom fonts, translation settings, folders, API tokens, exports | | Page | The canvas itself: text edits, translations, comments, statuses on nodes | | Profile (yours) | Figma personal access token, cache-only toggle, your name and avatar | A common surprise: **fonts and glossary are project-level (or workspace-level)**, not editor-level. If a font isn't rendering the way you expect, the fix lives in [Project Settings → Fonts](/docs/guides/custom-fonts/), not in the editor. ## The Figma sync KopiMark doesn't run inside Figma; it reads Figma's API and renders its own copy of the design. That means two things matter: 1. **You import a Figma file once**, then re-sync when the design changes. KopiMark keeps the node structure (text, layout, images) but re-uses your existing copy edits and translations wherever the node ids still match. 2. **All renders are KopiMark's** — when a translator types a longer string, the canvas shows that longer string at the real font, size, and box. No "looks fine in the spreadsheet, breaks in Figma" surprises. Live syncs require a **Figma personal access token**. Without one, KopiMark falls back to a pre-built cache for the demo project, but you'll need a token to bring in your own files. See [Connect Figma](/docs/guides/connect-figma/). ## Text nodes and revisions Every text node on a page is independently versioned. When you edit, your new copy becomes the latest revision; the prior copy stays in History. Translations work the same way per language. This is what makes KopiMark safe for review: nothing is overwritten silently. A reviewer can always see what the previous wording was, who changed it, and when. ## Statuses Statuses are how KopiMark models "is this copy ready?". They're defined per project (so a marketing project and a product project can use different workflows). The first status is the default — newly-edited nodes pick it up automatically. Statuses are also the link between a node and a teammate: assigning a status to someone fires a notification, which is the most reliable way to hand work off. See [Statuses and approvals](/docs/guides/statuses-and-approvals/). ## Comments Comments are **pinned to canvas coordinates**, not attached to a node. That's intentional — a reviewer can flag the whitespace between two sections, or a button that isn't a text node, without forcing you to invent an anchor. Threads can be resolved, replied to, and mentioned in. Mentions trigger both an in-app bell notification and (by default) an email. See [Review with comments](/docs/guides/review-with-comments/). ## What KopiMark is not A few things KopiMark deliberately doesn't try to be: - It's **not a Figma plugin**. Designers don't need to install anything. - It's **not a translation memory or TMS**. It does AI drafting, glossary enforcement, and per-language review — but it doesn't store fuzzy matches across customers. - It's **not a CMS**. The export step is how copy reaches your codebase or CMS. ## Where to go next - [Figma sync and cache-only mode](/docs/concepts/figma-sync-and-cache/) — what changes when your Figma seat is limited. - [Roles and workspaces](/docs/concepts/roles-and-workspaces/) — who can do what. - [Connect Figma](/docs/guides/connect-figma/) — the setup most users stumble on. --- # Figma sync and cache-only mode > How KopiMark talks to the Figma API, why your Figma seat type triggers rate limits, and what cache-only mode lets you keep doing offline. _Source: https://kopimark.com/docs/concepts/figma-sync-and-cache/_ KopiMark fetches your designs from Figma's REST API using a **personal access token** that you provide. This page explains what that means in practice, when KopiMark will fall back to cache-only mode, and how your Figma seat type affects everything. If you just want to set the token up, jump to [Connect Figma](/docs/guides/connect-figma/) — this page is the *why*. ## Two states: live or cache-only Every account is in one of two modes at any given time: - **Live (Figma API on)** — KopiMark can fetch fresh node trees, images, and metadata from Figma whenever you import a page, re-sync, or open the editor. This is the default once you've added a token. - **Cache-only** — KopiMark won't call Figma at all. It only reads what's already in its own cache: node JSON, rendered images, screenshots. You can still edit copy, translate, comment, and export. You just can't pull in new Figma changes until you go back online. You can flip the toggle yourself from [Profile settings](/docs/settings/profile-settings/), or KopiMark may flip it for you (more on that below). ## When KopiMark turns on cache-only for you If a Figma API call from your token gets rate-limited (HTTP 429), KopiMark turns on cache-only mode automatically and shows a yellow banner on your profile: > We turned this on for you because Figma rate-limited a recent request > from your token. You can turn it back off below if you believe it was a > transient spike. This isn't a punishment — it's a safety valve. Repeatedly hammering an already-throttled token makes things worse. The toggle is yours to flip back the moment you think the spike is over. If you've **never added a Figma token**, cache-only mode is locked on (you'll see a gray banner instead of a yellow one). You can still use the demo project, since its cache was baked at signup. ## Why rate limits happen — the seat type Here's the part most teams don't realise until they hit it: **Figma's API rate limit depends on your Figma seat type, not your KopiMark plan**. In rough terms: - **Figma Editor / Full seat** — generous per-token API quota. Comfortable for any team size. - **Figma View seat** — much lower quota. Importing a large file or re-syncing a busy project can exhaust it. - **Figma Collab seat / Dev mode** — lower again. KopiMark works, but you should expect occasional cache-only switches under load. If you only have a View or Collab seat, you have three reasonable options: 1. **Ask the file owner** to generate a token from a paid Editor seat and use that one. Tokens belong to the person who issued them, not to the file. 2. **Stay in cache-only most of the time** and only flip live briefly to re-sync. 3. **Upgrade your Figma seat** to a paid Editor. There's more detail in [If your Figma seat is limited (View / Collab)](/docs/guides/figma-seat-and-rate-limits/). > _[image placeholder: Side-by-side comparison of Figma]_ ## What stays available in cache-only Everything that doesn't require fetching from Figma: - Open any cached page in the editor - Edit copy and translations (changes save to KopiMark, not back to Figma) - Post and resolve comments - Assign statuses and mention teammates - Export copy and translations - Use the AI translation tool — it doesn't call Figma at all ## What's blocked in cache-only Anything that needs a fresh fetch: - Importing a new Figma page into a project - Re-syncing a page after the designer changed it in Figma - Updating an image whose Figma source has changed If you try one of these, KopiMark will surface a clear error pointing back to your profile. ## What KopiMark caches For each page you've imported at least once, KopiMark stores: - The node tree (text, layout, hierarchy) as JSON - Rendered PNG and SVG of the page at the size shown in the grid - The screenshots used in language preview That's enough for everyone except the designer to keep working, which is why cache-only is a graceful fallback rather than a hard stop. ## See also - [Connect Figma](/docs/guides/connect-figma/) — generate and paste your token. - [If your Figma seat is limited](/docs/guides/figma-seat-and-rate-limits/) — workarounds if you can't use an Editor seat. - [Profile settings](/docs/settings/profile-settings/) — where the toggle lives. --- # Roles and workspaces > KopiMark's permission model — workspace roles, project roles, and how owners, admins, members, and guests differ across the team and per project. _Source: https://kopimark.com/docs/concepts/roles-and-workspaces/_ KopiMark separates "the team" (your workspace) from "the work" (each project). Permissions exist at both layers, which makes most setups feel natural once you know what each role can touch. ## The two layers - **Workspace roles** control who can manage the team, billing, and shared resources (glossary, fonts, member list). - **Project roles** control who can edit a specific project's content and settings. A teammate has a workspace role *and* a project role per project they can access. The project role is what gates editing in the editor itself. ## Workspace roles | Role | What they can do | |---|---| | **Owner** | Everything. Delete or rename the workspace, transfer ownership, manage billing, promote admins, manage the team. There's at least one. | | **Admin** | Invite and remove members, create projects, manage domains, manage billing. Cannot delete the workspace. | | **Member** | View workspace projects they've been added to. Create content inside projects where their project role allows it. Edit the workspace glossary. | | **Guest** | See only projects they've been explicitly invited to. They still count as a paid seat. Useful for freelancers and external reviewers. | Members get **implicit access** to new projects in the workspace — admins and owners always see every project; members are auto-added when they open one. Guests don't get implicit access; you must invite them per project. ## Project roles When you invite someone to a project (or they're auto-added as a workspace member), they get a project role: | Role | What they can do | |---|---| | **Owner** | Manage project members, change every setting, delete the project. There's one per project — created when the project is. | | **Content manager** | Manage members, change settings, delete pages, edit all content. Can't delete the project itself. | | **Editor** | Add and sync pages, edit copy and translations, comment, assign statuses. Can't change settings or remove pages. This is the default. | A workspace admin who only happens to be an editor on a particular project still can't change that project's languages — project role wins inside a project. ## What this means in practice - You hire a freelance copywriter → invite them as a **workspace guest**, then as an **editor** on the one project they're working on. - A localisation agency reviews translations → invite them as **workspace guests** with **editor** project access. They can't see your other work. - A new full-time hire → invite them as a **workspace member**. They'll auto-pick-up new projects as they open them. - A PM who only needs to read and comment → still a **member** or **guest** with **editor** project access. There's no read-only project role; the editor's status workflow is what gates "shipped vs not". ## Inviting people Workspace invites and role changes live in [Workspace Settings → People](/docs/settings/workspace-settings/). Project invites and role changes live in the **Share** dialog on any project page, and also in the project's settings. See [Invite your team](/docs/guides/invite-your-team/) for the step-by-step. ## Seats and billing - Every workspace member or guest counts as one paid seat. - The Free plan includes 2 seats total (owner + 1 other). - Pending invites count too — KopiMark won't let you hold a seat open by inviting people you never plan to confirm. See [Plans and limits](/docs/reference/plans-and-limits/) for the per-plan seat caps. ## See also - [Invite your team](/docs/guides/invite-your-team/) - [Workspace settings](/docs/settings/workspace-settings/) - [Project settings](/docs/settings/project-settings/) --- # Connect Figma > Generate a Figma personal access token, paste it into KopiMark, and start syncing your own Figma files for live copy edits and translations. _Source: https://kopimark.com/docs/guides/connect-figma/_ This is the setup step most teams stumble on, so the guide is detailed. Once you've done it once, you won't need to do it again unless you rotate your token. > **Before you start** — read [Figma sync and > cache-only mode](/docs/concepts/figma-sync-and-cache/) if you only have a > Figma View or Collab seat. Your seat affects what you can sync. ## What you'll need - A Figma account with access to the file you want to import. - About two minutes inside Figma's settings. You don't need a paid Figma plan to generate a token, but **your Figma seat type controls your API rate limit**. Editor seats are comfortable; View and Collab seats hit limits quickly. See [If your Figma seat is limited](/docs/guides/figma-seat-and-rate-limits/) for workarounds. ## 1. Generate a token in Figma 1. Open Figma in the browser and click your avatar (top right). 2. Choose **Settings**, then the **Security** tab. 3. Scroll to **Personal access tokens** and click **Generate new token**. 4. Give the token a name you'll recognise — `kopimark` is fine. Set an expiration that matches your team's security policy (KopiMark works with any duration). 5. For scopes, Figma's defaults are fine. KopiMark only needs file read access. 6. Click **Generate** and **copy the token** immediately. Figma only shows it once. Tokens look like `figd_…`. > _[image placeholder: Figma Settings → Personal access tokens with the Generate button highlighted.]_ > **Heads up** — a Figma token is tied to the person who created it, not to > the file. The person who generates the token is the identity KopiMark > uses to talk to Figma, so use a token from someone with reliable file > access. If they leave the team and the token rotates, sync stops. ## 2. Paste it into KopiMark 1. In KopiMark, open the user menu (top right) and choose **Profile**. 2. Find the section labelled **Figma personal access token**. 3. Paste the `figd_…` value into the field and click **Save & verify**. The button flips to **Verifying…** while KopiMark calls Figma with the token. 4. On success, you'll see a green confirmation with your Figma display name ("Connected as Jane Doe"). Saving a valid token automatically turns **cache-only mode** off. > _[image placeholder: KopiMark Profile page with the Figma token field and the Save & verify button.]_ If the token is invalid or has been revoked, KopiMark shows a red error under the field. Re-check that you copied the whole `figd_…` string with no whitespace. ## 3. Import your first Figma file 1. Go back to the **Projects** home and click **New project**. 2. Paste a Figma file URL (any link from Figma — `figma.com/file/…` or `figma.com/design/…` both work). 3. Pick the pages you want to import. You can always add more later. 4. Click **Create**. KopiMark fetches the file, renders the pages, and drops you on the project home. The first import is the slow one — KopiMark is downloading the node tree and rendering screenshots. Subsequent re-syncs only fetch the changed parts. ## Rotating or removing the token You can disconnect at any time from the same Profile section. Click **Disconnect**. KopiMark deletes the token, re-enables cache-only mode, and you keep access to everything you've already imported — you just can't re-sync until you reconnect. To rotate, disconnect first, generate a new token in Figma, and paste the new one. There's no in-place update. ## Common problems - **"Invalid token"** — usually a copy-paste issue. Make sure you copied the whole string and that the token hasn't expired in Figma. - **"Connected as someone else"** — the token belongs to that person's Figma account. If that's not what you want, disconnect and use your own. - **Sync fails with a 429 error** — Figma rate-limited the token. KopiMark will auto-switch to cache-only and show a banner; see [If your Figma seat is limited](/docs/guides/figma-seat-and-rate-limits/). - **Token revoked in Figma** — KopiMark won't know until the next sync attempt. Re-paste a new one in Profile. ## FAQ ### What permissions does KopiMark need on my Figma token? File read access only. Figma's default scopes when you generate a new token are sufficient — KopiMark never writes back to your Figma file. ### Will disconnecting Figma delete my imported pages? No. Disconnecting deletes the token and re-enables cache-only mode, but every page you've already imported stays accessible. You just can't re-sync from Figma until you reconnect. ### What's the difference between disconnecting in KopiMark and revoking in Figma? Disconnecting in KopiMark only removes the token from your KopiMark Profile. Revoking in Figma invalidates the token across every app that was using it — KopiMark won't know until the next sync attempt fails, at which point you'll need to paste a fresh token. ### Does KopiMark write anything back to my Figma file? No. KopiMark reads Figma's REST API to fetch the design, then renders its own copy of the canvas. Text edits, translations, comments, and statuses all stay in KopiMark. ## See also - [Figma sync and cache-only mode](/docs/concepts/figma-sync-and-cache/) - [If your Figma seat is limited (View / Collab)](/docs/guides/figma-seat-and-rate-limits/) - [Profile settings](/docs/settings/profile-settings/) --- # If your Figma seat is limited (View / Collab) > Workarounds for Figma View and Collab seats that keep hitting API rate limits in KopiMark, and what cache-only mode lets you keep doing offline. _Source: https://kopimark.com/docs/guides/figma-seat-and-rate-limits/_ KopiMark talks to Figma using *your* personal access token, which means *your* Figma seat type is what governs the API quota. Editor seats are generous. View and Collab seats are not. If you're seeing the yellow "we turned on cache-only mode" banner in your Profile more than once a week, this guide is for you. > **Background** — [Figma sync and > cache-only mode](/docs/concepts/figma-sync-and-cache/) explains *why* > this happens. This page is *what to do about it*. ## Quick triage 1. **Hit the banner on a busy import day?** It's probably a transient spike. Flip the toggle back to off, wait a few minutes, and try the re-sync again. 2. **Hitting it repeatedly across a week?** Your seat doesn't have enough quota for your usage. Use one of the workarounds below. 3. **You don't even have a token yet?** Cache-only is locked on by default. Connect Figma first; the demo project works without a token but your own files don't. ## Workaround 1 — use a teammate's Editor token The cleanest fix. Tokens are personal, so any teammate with a paid Editor seat can issue one for KopiMark to use. Pros: - KopiMark stops switching to cache-only on you. - You keep working from your own Figma seat in Figma itself. Cons: - The token identifies as the teammate inside KopiMark's sync logs. - If they leave the team or rotate the token, sync stops. Worth it if you're the lone Collab seat on a team of Editors. ## Workaround 2 — stay in cache-only most of the time Cache-only is more useful than it sounds. With the toggle on, you can: - Edit copy and translations on every page you've ever imported - Post comments, mention teammates, resolve threads - Assign and reorder statuses - Run AI translation (it doesn't call Figma) - Export You can't: - Import a new Figma page - Re-sync after a design change A reasonable pattern: keep cache-only **on** while you work, flip it **off** briefly when the designer says "the design is updated", run the re-sync, then flip it back on. KopiMark's toggle is a one-click thing. > _[image placeholder: Profile page cache-only section shown in both states — toggle off (live Figma sync) and toggle on (cache-only with banner).]_ ## Workaround 3 — upgrade your Figma seat If KopiMark is core to your weekly workflow and you're the only person on the team without an Editor seat, the math probably works out. Talk to whoever manages your Figma billing. ## How KopiMark behaves under rate limiting When a Figma API call from your token returns a 429: 1. KopiMark flips your cache-only toggle to **on** and stores the reason. 2. The next time you load your Profile, you see the yellow banner: *"We turned this on for you because Figma rate-limited a recent request from your token."* 3. Subsequent KopiMark requests skip Figma entirely until you turn the toggle off. The toggle is in [Profile settings](/docs/settings/profile-settings/). You can flip it back any time — the banner is information, not a lock. ## FAQ ### Can I use a teammate's Figma Editor token instead of my own? Yes. Figma tokens are personal, so any teammate with a paid Editor seat can generate one for KopiMark to use. The trade-off: the token identifies as that person inside KopiMark's sync logs, and if they leave the team or rotate the token, sync stops until you paste a new one. ### Does the demo project use my Figma API quota? No. The demo project runs from a pre-built cache that KopiMark bakes at signup, so it works without a token and doesn't consume any Figma API calls. ### Will I lose work if KopiMark switches me to cache-only mode? No. Cache-only only blocks fresh fetches from Figma. You can still edit copy and translations, post comments, assign statuses, run AI translation, and export — everything saves normally inside KopiMark. ### After an automatic cache-only switch, how long should I wait before flipping it back? A few minutes is usually enough for a transient spike. If you flip it off and the next re-sync still fails with a 429, your seat doesn't have enough quota for your usage pattern — use one of the workarounds above instead. ## See also - [Connect Figma](/docs/guides/connect-figma/) - [Figma sync and cache-only mode](/docs/concepts/figma-sync-and-cache/) - [Profile settings](/docs/settings/profile-settings/) --- # Invite your team > Invite teammates and external collaborators to your KopiMark workspace, pick the right role for each person, and set up domain auto-join on Business. _Source: https://kopimark.com/docs/guides/invite-your-team/_ KopiMark gets better the more people are in the same workspace — reviewers can sign off without leaving the canvas, mentions actually find the right person, and the activity feed becomes a real audit log. This guide covers inviting people, picking a role, and (on plans that support it) auto-joining anyone on your company domain. > **Background** — [Roles and > workspaces](/docs/concepts/roles-and-workspaces/) explains the > permission model. Skim that if you're not sure whether someone should > be a member or a guest. ## 1. Open the People settings 1. Click the workspace switcher in the top-left and pick the workspace you want to invite into. 2. Open the user menu (top right) and choose **Settings**, then **People**. (You need to be an admin or owner to see this section.) > _[image placeholder: Workspace Settings → People page with the members list and Invite people button.]_ ## 2. Send an invite 1. Click **Invite people**. 2. Type one or more email addresses. KopiMark accepts a comma- or newline-separated list. 3. Pick a **workspace role**: - **Member** for full-time teammates who'll work across projects. - **Guest** for freelancers and external collaborators who should only see specific projects. - **Admin** for trusted folks who'll manage members and billing. 4. Send. Each invitee gets an email with a one-time sign-in link. Invitees show up in the pending list until they accept. Pending invites **count against your seat cap** — KopiMark won't let you sit on a stack of unaccepted invites to claim more seats. ## 3. Give project access (guests only) Members are auto-added to any project they open. Guests are not — they only see projects you've explicitly shared. 1. Open the project you want the guest to access. 2. Click **Share** in the top-right of the project page. 3. Pick the guest from the workspace list, choose their **project role** (editor, content manager, or owner), and confirm. The guest now sees that project in their projects home. They still can't see any other project in the workspace. ## 4. (Optional) Auto-join your domain If you're on the **Business plan**, you can let anyone with a verified company email address join the workspace without an explicit invite. 1. Open **Settings → Domains**. 2. Add the domain (e.g. `acme.com`). KopiMark may ask you to verify ownership via a DNS record or email. 3. Choose what role new joiners should get. **Member** is the usual choice. ## Changing or removing a role In **Settings → People**, click the role badge next to someone's name to change it. The "remove" action is in the same row. Removing someone: - Revokes their workspace access immediately. - Doesn't delete their past comments or edits — those stay attributed to their (now-removed) name. - Frees up a seat in your plan. The workspace **owner** can't be removed without first transferring ownership. ## What invitees actually see A new teammate clicking the email link lands directly on the workspace projects home — no extra workspace-creation step. They'll see only the projects their role grants access to, and their Profile is pre-populated with their email. If they've never connected Figma, the demo project will be there to play in. (See [Getting started](/docs/getting-started/) — you might want to send them that link.) ## See also - [Roles and workspaces](/docs/concepts/roles-and-workspaces/) - [Workspace settings](/docs/settings/workspace-settings/) - [Plans and limits](/docs/reference/plans-and-limits/) --- # Translate with AI > Add target languages, draft translations with AI directly on the Figma design, and steer the model with your glossary, tone, and project context. _Source: https://kopimark.com/docs/guides/translate-with-ai/_ KopiMark drafts translations directly on the canvas. The AI picks up your project's tone, your glossary, and the surrounding design context — so the output is closer to "good first draft" than to a literal word-for-word swap. This guide covers the three things you need to know: adding a language, running a translation, and steering the model. ## 1. Add a target language Languages are project-level. Open the project, then go to **Project Settings → Languages**. 1. Click **Add language** and pick a target locale (e.g. `fr-FR`, `de-DE`). 2. Optionally rename it for display — useful if you ship one set of copy to multiple regions. 3. Save. The new language now appears in the editor's language switcher and in the page-grid filters. ## 2. Switch the editor to that language In the editor toolbar, open the **language switcher** and pick your target. The canvas re-renders with whatever translated copy already exists; untranslated nodes fall back to the source text in a slightly muted tone, so it's easy to see what still needs work. > _[image placeholder: Editor toolbar language switcher dropdown listing the project]_ ## 3. Draft translations with AI You can translate one node at a time or in bulk. ### One node at a time 1. Click a text node on the canvas with the target language active. 2. In the side panel, click **Translate with AI**. 3. KopiMark generates a draft using your glossary, project context, and any tone notes. The draft lands in the editor as a normal revision — review it like any other edit and tweak as needed. ### Multiple nodes at once 1. Open the **Bulk actions** panel (in the editor's right rail). 2. Choose **Translate**. 3. Pick the language(s) and the scope: current page, selected nodes, or everything untranslated. The progress bar shows "Translated: X / Y" as it goes, with errors counted separately if any fail. Bulk runs are budget-aware — KopiMark stops cleanly if you'd exceed your plan's AI translation allowance and shows what remains. > **AI translations are metered per month.** Free includes 50 / month, > Starter 1,500, Team 5,000, Business 15,000. The counter resets on your > billing renewal date. See [Plans and > limits](/docs/reference/plans-and-limits/). ## 4. Steer the model Three places to make the AI sound more like your brand: ### Project translation settings **Project Settings → Translation** is where you set: - **Product context** — one paragraph describing what your product is. Used as a system hint on every translation. - **Tone** — short notes like "warm, second-person, no exclamation marks". The model treats these as constraints. - **Glossary toggles** — which glossary terms apply to this project. These settings apply to every AI translation in the project. Tweak them and re-run a single node to see the effect before bulk-translating. ### Workspace glossary Bigger picture: your **workspace glossary** (Settings → Glossary) holds terms shared across every project — brand names, product names, words that should *never* be translated. The AI honours these as hard constraints, not suggestions. Glossary terms can specify per-language translations or be marked as "keep in source language" (the typical choice for a brand name). ### Per-cell context For a single tricky string, the editor's translation side-panel has a **Context** field where you can paste a one-line hint just for that node. It's a great way to disambiguate UI labels where the source is too short for the model to guess (e.g. *"Save"* meaning *commit a change*, not *rescue*). ## 5. Review and approve Translations are statuses too. Set up a status flow like *Drafted → Reviewed → Shipped* and assign the *Drafted* nodes to your reviewer. KopiMark sends them an in-app and email notification with a deep link to the exact node. See [Statuses and approvals](/docs/guides/statuses-and-approvals/). ## FAQ ### Does editing an AI draft count as a new AI translation? No. AI translations are metered against successful AI completions only. Tweaking a draft, retyping it, or reverting to a previous revision doesn't burn additional quota. ### Can I undo an AI translation I don't like? Yes. AI drafts land as normal revisions in the History panel, so you can roll back to the previous translation (or to the source) the same way you'd undo any manual edit. ### How does the AI handle glossary terms marked "keep in source language"? As a hard constraint. The model is instructed never to translate those terms, which is the typical setting for brand names and product names. Per-language translations work the same way — if a glossary term has a target translation, the model uses it verbatim. ### What if the source string is too short for the AI to guess the meaning? Use the **Context** field in the editor's translation side-panel. A one-line hint (e.g. *"Save" meaning commit a change, not rescue*) is usually enough to disambiguate UI labels where the source alone is ambiguous. ## See also - [Statuses and approvals](/docs/guides/statuses-and-approvals/) - [Project settings](/docs/settings/project-settings/) - [Plans and limits](/docs/reference/plans-and-limits/) --- # Review with comments > Drop pinned comment threads on the live Figma canvas in KopiMark, mention teammates, resolve threads, and keep notifications useful during copy review. _Source: https://kopimark.com/docs/guides/review-with-comments/_ Comments in KopiMark are how reviewers flag issues without leaving the canvas. They're **pinned to canvas coordinates** — not to a node — so you can comment on any part of the design, including the whitespace. The events log shows comments are by far the most-used collaboration surface in KopiMark. This guide makes sure you're getting the most out of them. ## Start a thread 1. In the editor, click the **comment tool** in the toolbar (or press the keyboard shortcut shown on the icon's tooltip). 2. Click anywhere on the canvas. A pin appears at that spot and a composer opens. 3. Type your message. You can format with markdown shortcuts (`**bold**`, `_italic_`). 4. Press **Comment** to post. The pin stays anchored — pan, zoom, or scroll, and it tracks the same spot on the design. > _[image placeholder: KopiMark editor with a pinned comment thread open on the canvas.]_ ## Mention a teammate Mentions are how you make sure someone actually sees a thread. They fire both an in-app bell notification and (by default) an email. 1. In the composer, type `@` followed by the start of the teammate's name. 2. A dropdown shows matching members. Click one, or use arrow keys and enter. 3. Post the comment. The mentioned person gets: - A bell badge in KopiMark (top-right of the header). - An email with a deep link to that thread (unless they've turned mention emails off in their profile). You can only mention people who are members or guests of the workspace. KopiMark doesn't fire mention emails to outsiders. ## Reply to a thread Click any existing pin (or use the **Comments** side panel — the speech bubble icon, top-right of the editor) to open the thread. Type in the reply box and post. Reply notifications are off by default to keep noise down. Each user can turn them on in [Notifications settings](/docs/settings/profile-settings/). ## Resolve a thread When a thread's done, click **Resolve**. The pin disappears from the canvas but the thread is preserved — open the Comments side panel to see resolved threads, reopen them, or filter them. Resolving a thread doesn't ping anyone. It's a cleanup action, not a publish action. ## The Comments side panel The speech-bubble icon in the editor toolbar opens a side list of every thread on the current page. From here you can: - Filter by **unresolved** / **resolved** / **mine** / **mentioning me**. - Click any thread to **jump to its pin** on the canvas. - See the **unread badge** — the same count shown in the header bell. Two patterns this enables that aren't obvious: - **Quick sweep before a sync** — open the panel, filter by *unresolved*, scroll. Faster than re-opening every pin. - **Audit a teammate's review** — filter by *mentioning me* to find every spot a reviewer flagged for your attention. ## Notifications, in brief Comments produce three kinds of notifications: - **Mention** — when someone `@`-mentions you. Bell + email by default. - **Reply** — when someone replies to a thread you've posted in. Bell only by default; email is opt-in. - **Assignment** — when someone assigns a status that has *you* as the assignee (statuses can carry an assignee — see [Statuses and approvals](/docs/guides/statuses-and-approvals/)). Bell + email by default. Email toggles live in your **Profile** under **Notification settings**. The bell is always on; you can't opt out of in-app notifications. ## What not to do - **Don't paste secrets** in comments. Comments are visible to anyone with project access. - **Don't use comments as a task tracker.** Statuses and assignments do that job better — comments are for the discussion, the status carries the state. ## See also - [Statuses and approvals](/docs/guides/statuses-and-approvals/) - [Notifications](/docs/settings/profile-settings/) - [How KopiMark works](/docs/concepts/how-kopimark-works/) --- # Statuses and approvals > Define a per-project copy status workflow in KopiMark, assign text and image nodes to teammates, and use statuses to drive review, approvals, and shipping. _Source: https://kopimark.com/docs/guides/statuses-and-approvals/_ Statuses are how KopiMark tracks "is this copy ready?". They sit on every text and image node, and they're how a writer hands work off to a reviewer, a reviewer hands off to a stakeholder, and so on. Most teams under-use this feature because the default works fine — the first time you customise it, the editor becomes a real review tool rather than a glorified text box. ## How statuses work - Statuses are **defined per project** (Marketing and Product can use different flows). - The **first status is the default** — every newly-edited node picks it up automatically, so you never have to remember to set it. - The first status **cannot be deleted**, but it can be renamed and recoloured. - Statuses appear as small coloured pills in the editor, the page grid, and the activity log. A common pattern: ``` Draft → Needs review → Reviewed → Approved → Shipped ``` You can have as many as you want. Three to six tends to be the sweet spot. ## Create or edit your statuses 1. Open a project and go to **Project Settings → Statuses**. 2. Click **New status**. 3. Give it a name and pick a colour from the swatch picker. 4. Click **Add**. To edit an existing status, click its name to rename inline (Enter to confirm), or click the colour swatch to recolour. Use the up/down arrows on each row to reorder. > **The first status is the default and can't be deleted.** Re-ordering > changes which status is the default. If you want a different default, > drag the new one to the top first. > _[image placeholder: Project Settings → Statuses with the colour swatch picker open on a status row.]_ ## Assign a status to a node On the canvas: 1. Click a text or image node. 2. In the side panel, click the **status pill** under the node title. 3. Pick a status from the list. The change is instant. To change many at once, use the **Bulk actions** panel and choose **Set status**. You can scope it to the page, to a selection, or to nodes filtered by language/current-status. ## Assign a node to a teammate Statuses can carry an **assignee**. This is the most under-used feature in KopiMark, and the one that turns the tool into a real handoff system. 1. Set a node's status (e.g. *Needs review*). 2. In the same picker, click **Assign…** and choose a workspace member. 3. They receive a notification — bell + email by default — with a deep link straight to that node. The status pill now shows their avatar. When they open the editor, the **Edited list** in the side panel can be filtered to *Assigned to me*, giving them a clean queue. > **Assignment notifications honour each user's email preferences.** If > someone has turned assignment emails off in their profile, they still > see the bell badge — they just won't get the email copy. ## Filter the page grid by status The project page grid (where you see all the pages in a project) has a **status filter** at the top. Use it to: - Find every page with *Approved* nodes ready to ship. - Spot pages still in *Draft* before a deadline. - Audit your reviewer's pending queue. Statuses also flow into export filters — see [Export copy](/docs/guides/export-copy/) to ship only Approved nodes to your codebase. ## A workflow that works Most KopiMark teams settle on something like this: 1. **Writer** edits a text node. It auto-picks-up *Draft*. 2. Writer flips it to *Needs review*, assigns to a reviewer. 3. Reviewer gets a notification, opens the deep link, comments if needed or flips status to *Approved*. 4. Localisation lead bulk-translates the *Approved* nodes, sets *Drafted* on the translations. 5. Each language reviewer flips to *Reviewed* per language. 6. Engineer exports everything in *Reviewed* status. It's not the only flow that works, but if you're not sure where to start, copy this one. ## See also - [Review with comments](/docs/guides/review-with-comments/) - [Translate with AI](/docs/guides/translate-with-ai/) - [Export copy](/docs/guides/export-copy/) --- # Custom fonts > Upload .woff2 or .otf brand fonts to KopiMark so the editor renders your copy in the real typeface from the Figma design, not a generic fallback sans. _Source: https://kopimark.com/docs/guides/custom-fonts/_ Figma renders text with whichever fonts your local machine has installed. KopiMark renders text on its own servers, so unless you tell it about your brand fonts, it'll fall back to a generic sans. Uploading the real font means the canvas (and exported screenshots) look exactly like the design. ## What you'll need - The font file(s), in `.woff2` (preferred) or `.otf`. - The Figma family name the file should override (e.g. `Inter`, `Söhne`). You'll usually want one file per weight you actually use. KopiMark doesn't subset or compress your font — upload the same files you ship to your website. ## Upload a font 1. Open a project and go to **Project Settings → Fonts**. 2. Click **Upload font**. 3. Pick the `.woff2` or `.otf` file from your computer. 4. Choose the **weight** (100 through 900) that the file represents. 5. Confirm. KopiMark stores the file, links it to the matching Figma family, and re-renders the affected pages. > _[image placeholder: Project Settings → Fonts with the upload modal open and the weight picker visible.]_ Repeat for each weight you use in the design. A typical brand setup is three to five files: regular, medium, semibold, bold, and maybe italic. ## Verify it worked 1. Open any page that uses the family you just uploaded. 2. The canvas should re-render with the real font. If a node still looks off, check that the weight matches — designers sometimes use *Semibold* where you uploaded *Bold*. 3. If you don't see the change, hard-refresh the page. KopiMark aggressively caches rendered screenshots, but new font uploads invalidate them on the next view. ## Delete or replace a font In the same Fonts section, each uploaded font row has a delete action. Deleting a font reverts those weights to the fallback. To replace, delete the existing file and upload the new one. There's no in-place update — the upload is the source of truth. ## Font scope Uploaded fonts are **project-scoped**: each project has its own font library. There's no workspace-level font store yet. If you have one brand across many projects, you'll re-upload per project. Most teams accept this because different projects sometimes use different licensed weights. ## Licensing You're responsible for having the right to use any font you upload. KopiMark stores font files privately to your workspace — they're not shared between workspaces, and they're not served at predictable public URLs — but please don't upload fonts you don't own a licence for. ## See also - [Project settings](/docs/settings/project-settings/) - [Plans and limits](/docs/reference/plans-and-limits/) --- # Export copy > Export your finalised copy and translations from KopiMark as JSON, CSV, or XML — or pull them live via the read-only API into your codebase or CMS. _Source: https://kopimark.com/docs/guides/export-copy/_ KopiMark is where copy is *made*; your codebase or CMS is where it *lives*. Exports are how you bridge the two. You can export manually as a download, or — on the right plan — pull live from KopiMark's read API. ## Export formats KopiMark exports in three formats. Pick whichever your codebase already speaks: - **JSON** — best for most product codebases. Keys map to text node ids (or your custom export keys), values are the localised strings. - **CSV** — best for handing copy to non-engineers or for spreadsheet review. - **XML** — best for some legacy localisation pipelines. ## Manual export (every plan) 1. Open the project and go to **Project Settings → Developer**. 2. Pick the format (JSON, CSV, or XML) and any options: - **Pretty-print** — readable indentation, slightly larger file. - **Flat shape** — a flat key→value map, vs the default nested shape. 3. Pick a **language filter** if you only want one locale at a time. Leave it empty to export all. 4. Click **Download**. That's it for the manual flow. You can filter the export to only include nodes in specific statuses — usually *Approved* or *Shipped* — so drafts don't leak into your codebase. > _[image placeholder: Project Settings → Developer with the format picker and the live endpoint URL preview.]_ ## API export (Team and Business plans) If you'd rather pull live, every project has a read-only API endpoint that returns the same payload. Your build script can fetch it on every deploy. ### Generate a token 1. **Project Settings → Developer**, scroll to **API tokens**. 2. Click **Generate new token**. KopiMark shows the token once — copy it immediately. 3. Store the token in your build environment, not in source control. The Developer page shows the live endpoint URL with your current filters baked in (format, pretty-print, flat shape, language) — copy that as the base URL for your client. ### Use it from a build The endpoint accepts your token as a bearer header. Hit it the same way you'd hit any read-only JSON API; cache it however your build expects. We've kept the API minimal on purpose. There's a more detailed write-up in [API and developer tokens](/docs/guides/api-and-developer-tokens/). ## Status-filtered exports The most common mistake teams make on their first export is shipping copy that's still in *Draft*. Two ways to avoid it: - **Filter by status at export time.** The download dialog lets you pick which statuses count. - **Only the last status counts as "shipped".** Some teams configure their status list with *Shipped* (or *Approved*) as the final state, and export only that one. Either pattern works. The export *defaults* to all statuses, so an explicit filter is wise. ## See also - [API and developer tokens](/docs/guides/api-and-developer-tokens/) - [Statuses and approvals](/docs/guides/statuses-and-approvals/) - [Plans and limits](/docs/reference/plans-and-limits/) --- # API and developer tokens > Generate a per-project API token and pull KopiMark copy and translations from your build pipeline via the read-only JSON, CSV, or XML endpoint. _Source: https://kopimark.com/docs/guides/api-and-developer-tokens/_ Most teams start by exporting copy as a manual download, then graduate to fetching it on every deploy. The KopiMark read API exists for that second step — your build script asks KopiMark for the current copy, and ships whatever the latest *Approved* (or whichever statuses you pick) revisions are. ## Where the API lives Every project has its own read-only API endpoint. Tokens are scoped to a single project — so a leaked token can only read that project's copy, not your whole workspace. You manage tokens at **Project Settings → Developer**. ## 1. Generate a token 1. Open the project and go to **Project Settings → Developer**. 2. Find the **API tokens** section and click **Generate new token**. 3. KopiMark shows the new token **once**. Copy it now — there's no way to retrieve it again. The settings page only stores the prefix and the creation date, so you can tell tokens apart later. 4. Store the token in your build environment as a secret (`KOPIMARK_API_TOKEN` or whatever convention you use). Don't commit it to source control. If you lose a token, generate a new one and revoke the old one — KopiMark lets you have multiple active tokens per project, so rotating doesn't require downtime. ## 2. Configure the export shape The Developer page has a **format builder** that previews the exact URL your client should hit: - **Format** — `json`, `csv`, or `xml`. - **Pretty-print** — readable JSON; turn off for production. - **Flat shape** — a flat key→value map, vs the default nested shape. - **Language filter** — single locale, or empty for all locales. - **Status filter** — usually *Approved* or *Shipped* only. The preview pane shows the live URL with every option baked in. Copy that URL as your base. > _[image placeholder: Project Settings → Developer showing the API token block and the export URL builder.]_ ## 3. Pull from your build Hit the URL with your token as a bearer header. The response shape follows your format and options choices. A few notes: - Responses include a **weak ETag** so a build can short-circuit when nothing has changed. - Tokens are **read-only**. There's no write API yet — KopiMark stays the source of truth for editing. - Rate limits are generous enough for build-time pulls. If you're hitting this from request-time code, cache aggressively. ## Revoking a token In the same Developer section, each token row has a **Revoke** action. Revoked tokens stop working immediately. Anyone with the old token sees 401 on their next request. There's no grace period, by design. Rotate by generating the new token first, deploying it, and only then revoking the old. ## Project export keys The default export keys are KopiMark's internal node ids. They're stable across re-syncs, but they're not meaningful to a human reader. If you want **named keys** like `home.hero.headline`, you can assign them per node in the editor. The editor's text panel has an **Export key** field; KopiMark also has a bulk-assign tool that suggests keys based on the design hierarchy. Once keys are assigned, your export uses them instead of the internal ids — which means your codebase keys don't change when a designer restructures the Figma file. ## FAQ ### Can one API token access multiple projects? No. Tokens are scoped to a single project by design, so a leaked token can only read that one project's copy. Generate a separate token for each project your build pipeline needs to read. ### Is there a write API for pushing copy back into KopiMark? Not yet. The API is read-only — KopiMark stays the source of truth for editing, and your build pulls the latest approved copy from it. ### What happens to deployed builds if I revoke a token? They start getting 401s on the next request, immediately. There's no grace period, so the safe rotation pattern is to generate the new token first, deploy it, and only then revoke the old one. ### How aggressively should I cache API responses? Build-time pulls are fine without extra caching — rate limits are generous for that pattern. If you're hitting the endpoint from request-time code, cache aggressively and use the weak ETag in responses to short-circuit when nothing has changed. ## See also - [Export copy](/docs/guides/export-copy/) - [Project settings](/docs/settings/project-settings/) - [Plans and limits](/docs/reference/plans-and-limits/) --- # A tour of Settings > A tour of every KopiMark Settings section — Profile, Workspace, and Project — so you know what you can configure before you actually need it. _Source: https://kopimark.com/docs/settings/tour/_ The Settings area is the most under-visited part of KopiMark, and the one that quietly affects everything you do — your fonts, your statuses, your glossary, your team, your billing. This page is a one-stop tour so you know what's in there before you need it. There are **three places** with settings, each scoped differently: - **Profile settings** — yours. Your Figma token, your notification preferences, your name and avatar. - **Workspace settings** — your team's. Members, billing, glossary, domains. - **Project settings** — one project's. Languages, statuses, fonts, translation, API tokens, exports. If you only remember one thing from this page: **the cogwheel in the project sidebar opens Project Settings, and the user menu in the header opens Profile and Workspace Settings**. Both are easy to miss. > _[image placeholder: Annotated screenshot of the KopiMark header showing both Settings entry points — the user menu and the project sidebar cogwheel.]_ ## How to get there | What | Where | |---|---| | **Profile** | User menu (top right) → *Profile* | | **Notifications** | User menu (top right) → *Notification settings* | | **Workspace Settings** | User menu (top right) → *Settings* | | **Project Settings** | Inside a project → cogwheel icon, or *Project home* → *Settings* | ## What lives in Profile Just you — no team scope. - **Name and avatar** — what teammates see in mentions and comments. - **Figma personal access token** — the gateway to live Figma sync. See [Connect Figma](/docs/guides/connect-figma/). - **Figma cache-only mode** — the safety valve that turns off Figma API calls. See [Figma sync and cache-only mode](/docs/concepts/figma-sync-and-cache/). - **Notification preferences** — which events email you. The in-app bell is always on. Full reference: [Profile settings](/docs/settings/profile-settings/). ## What lives in Workspace Settings Anything that affects the team. - **General** — workspace name, leave workspace. - **People** — invite members and guests, change roles, view pending invites. - **Domains** — auto-join anyone with a verified company email address. *Business plan.* - **Glossary** — shared terms the AI translator honours as hard constraints. Workspace-wide. - **Billing** — current plan, usage meters, upgrade / downgrade, cancel. - **Danger zone** — delete or transfer the workspace. *Owner only.* Full reference: [Workspace settings](/docs/settings/workspace-settings/). ## What lives in Project Settings Anything scoped to one project. - **General** — project name and archived state. - **Languages** — add or remove target locales. *Free caps at 2; paid plans unlimited.* - **Statuses** — your review workflow. See [Statuses and approvals](/docs/guides/statuses-and-approvals/). - **Translation** — product context, tone notes, glossary toggles. The knobs that steer the AI translator. - **Folders** — organise pages into folders for browsing. - **Fonts** — upload `.woff2` / `.otf` files. *Starter plan and above.* - **Developer** — API tokens and the export URL builder. *API access is Team plan and above; manual download is on every plan.* - **Danger zone** — delete the project. *Owner only.* Full reference: [Project settings](/docs/settings/project-settings/). ## A short checklist for new workspaces If you've just signed up and you want to set things up properly before you bring teammates in, here's the order most teams find useful: 1. **Profile → Figma token** — without this, you can only use the demo project. 2. **Workspace → Glossary** — five minutes adding brand names and product names saves hours of AI re-translation later. 3. **Project → Statuses** — change the default *Draft → Needs review → Approved* if it doesn't match how your team operates. 4. **Project → Fonts** — upload your real brand fonts (paid plans) so the canvas isn't a fallback sans. 5. **Project → Translation** — paste a one-paragraph product context. Every AI translation in the project will be better. 6. **Workspace → People** — invite the team last, so they walk into a project that already looks right. ## See also - [Profile settings](/docs/settings/profile-settings/) - [Workspace settings](/docs/settings/workspace-settings/) - [Project settings](/docs/settings/project-settings/) --- # Profile settings > Your KopiMark Profile — Figma personal access token, cache-only toggle, email notification preferences, display name, and avatar settings. _Source: https://kopimark.com/docs/settings/profile-settings/_ Your Profile is scoped to *you*, not the team. Open it from the **user menu → Profile** in the top-right header. ## Name and avatar What teammates see in mentions, comments, the members row at the top of the project page, and the activity log. - **Display name** — defaults to whatever's in the local part of your email. Editable. - **Avatar** — defaults to a generated initials avatar with a deterministic colour. Upload a square image to replace it. ## Figma personal access token The most important setting in your profile. Without a token, you can only use the demo project. With one, you can import and re-sync any Figma file you have access to. - **Section title:** *Figma personal access token* - **Field:** paste your `figd_…` token. - **Save & verify** button — calls Figma to confirm the token works and shows the connected display name on success. - **Disconnect** button — removes the token and re-enables cache-only mode. Full setup walkthrough in [Connect Figma](/docs/guides/connect-figma/). > **Saving a valid token automatically turns off cache-only mode.** You > can turn it back on manually if you want to stay offline (see below). ## Figma cache-only mode The toggle that controls whether KopiMark calls the Figma API at all. Possible states: - **Off (use Figma API)** — default once a token is connected. KopiMark syncs live. - **On (cache-only)** — KopiMark only reads from its own cache. You can still edit, translate, comment, and export. - **Locked on (no token)** — gray banner. You haven't added a Figma token yet, so live sync isn't possible. Add a token in the section above to unlock the toggle. - **Auto-turned-on after a rate limit** — yellow banner: *"We turned this on for you because Figma rate-limited a recent request from your token."* This is informational; flip it back off when you're ready. The deeper explanation is in [Figma sync and cache-only mode](/docs/concepts/figma-sync-and-cache/). The workarounds for restrictive Figma seats are in [If your Figma seat is limited](/docs/guides/figma-seat-and-rate-limits/). > _[image placeholder: Profile page screenshot with both Figma sections visible — the personal access token field and the cache-only mode toggle.]_ ## Notification preferences The email side of notifications. The bell icon in the header is always on; these toggles only control whether KopiMark also emails you. - **Email me when I'm invited** to a workspace or project — on by default. - **Email me when I'm mentioned** in a comment — on by default. - **Email me when a status is assigned to me** — on by default. - **Email me when someone replies** to a thread I've posted in — *off* by default. Each toggle is independent. There's no master switch; if you want fewer emails, turn the specific ones off. In-app bell notifications include the same events plus a few that don't get emails (billing alerts, for example). The bell shows an unread count badge; clicking it opens the comments side panel or jumps you to the latest notification. ## Sign out At the bottom of the Profile page. Signs out of this device only. ## See also - [Connect Figma](/docs/guides/connect-figma/) - [Figma sync and cache-only mode](/docs/concepts/figma-sync-and-cache/) - [If your Figma seat is limited](/docs/guides/figma-seat-and-rate-limits/) - [Review with comments](/docs/guides/review-with-comments/) --- # Workspace settings > Reference for every KopiMark Workspace Settings section — People, Domains, Glossary, Billing, and Danger zone — and which workspace roles can see them. _Source: https://kopimark.com/docs/settings/workspace-settings/_ Workspace settings live under the **user menu → Settings**. They affect your whole team — members, billing, shared glossary, domain whitelist. This page is the reference; for *what to actually do* in each section, follow the linked how-to guides. ## Who can see what Visibility on the sidebar depends on your workspace role: - **Owner** sees everything. - **Admin** sees everything except *Danger zone*. - **Member** sees *General* (read-only) and *Glossary*. - **Guest** sees *General* (read-only) only. See [Roles and workspaces](/docs/concepts/roles-and-workspaces/) for the full role model. ## General Set the **workspace name**. Owners can also transfer ownership (the **Danger zone** has the full removal flow). Members can use this section to **Leave workspace**. ## People The team list, by role. From here you can: - **Invite** new members and guests by email. - **Change someone's role** by clicking the role badge in their row. - **Remove** a teammate. Their past work stays attributed to their name. - See **pending invites** — anyone who hasn't accepted yet. Pending invites count against your seat cap. Step-by-step in [Invite your team](/docs/guides/invite-your-team/). ## Domains Add a verified domain (e.g. `acme.com`) and anyone signing in with an email at that domain joins your workspace automatically. Useful for big teams where you don't want to chase invite acceptance. ## Glossary The workspace-wide glossary. Add terms that should be translated a specific way — or *never* translated at all (the typical setting for brand names and product names). - Terms apply across every project in the workspace. - Each term can have per-language translations or be marked "keep in source". - The AI translator treats glossary entries as **hard constraints**, not suggestions. Guests can't edit the glossary. Owners and admins always can. Members can edit it by default. The cap is **50 terms per workspace** on every plan. Most teams need far fewer — the glossary is for the ten or twenty terms that matter, not your entire copy deck. ## Billing Current plan, usage meters, the upgrade / downgrade controls, and a link to your Stripe customer portal for invoices and payment methods. Usage meters show: - **Members** used vs allowance. - **Projects** used vs allowance. - **Pages** used vs allowance. - **AI translations** used this period vs allowance, with the renewal date. The plan picker lets you change tier mid-cycle; Stripe prorates the difference automatically. Downgrades take effect at the end of the current period (with the seat / project counts that downgrade would require flagged for you to fix first). ## Danger zone **Owner only.** Two actions: - **Delete workspace** — irreversible. Deletes every project, page, comment, and exported asset. KopiMark prompts for the workspace name to confirm. - **Transfer ownership** — pick a current admin or member. They become the owner, you become an admin. Useful when someone leaves. ## See also - [A tour of Settings](/docs/settings/tour/) - [Roles and workspaces](/docs/concepts/roles-and-workspaces/) - [Invite your team](/docs/guides/invite-your-team/) - [Plans and limits](/docs/reference/plans-and-limits/) --- # Project settings > Reference for every KopiMark Project Settings section — languages, statuses, translation, folders, fonts, and developer API — and which plan unlocks each one. _Source: https://kopimark.com/docs/settings/project-settings/_ Project settings sit on each project — open the project, then click the cogwheel in the project sidebar (or **Project home → Settings**). They control everything specific to that project: languages, statuses, fonts, translation, exports. ## Who can see what - **Owner** of the project — full access. - **Content manager** — everything except *Danger zone*. - **Editor** — read-only on settings, but they're still the role that does the day-to-day editing in the canvas. A workspace admin who's only an editor on this project still can't change settings here — project role wins inside a project. ## General Project **name** and **archived** state. Archiving hides the project from the projects home and pauses any scheduled syncs. It doesn't delete data — un-archive to bring it back. ## Statuses Define your review workflow. - The first status is the **default** — new edits auto-pick-up this status. - The default **can't be deleted**, but renaming, recolouring, and reordering are fine. Reorder to change which status is the default. - Each status has a name and a color swatch. The swatch shows up as a pill in the editor and the page grid. Full walkthrough in [Statuses and approvals](/docs/guides/statuses-and-approvals/). ## Languages Add and remove target languages. - The source language is set when you create the project and is immutable. - Target locales are standard codes (`fr-FR`, `de-DE`, `ja-JP`, …) with a custom display name if you want one. > **Free plan caps projects at 2 languages** (source + 1 target). > Starter plan and above are unlimited. See [Plans and > limits](/docs/reference/plans-and-limits/). ## Translation The knobs that steer the AI translator for this project. - **Product context** — one paragraph describing what the product is. The model uses it as a system hint on every translation. - **Tone** — short notes like "warm, second-person, no exclamation marks". The model treats these as constraints. - **Glossary toggles** — which workspace glossary entries apply to this project. Mostly you'll leave them all on. Step-by-step in [Translate with AI](/docs/guides/translate-with-ai/). ## Folders Group pages into folders for browsing inside the project home. Folders are presentational — they don't affect exports, statuses, or anything else. Useful when a project has 30+ pages. Optional for everyone else. ## Fonts Upload `.woff2` or `.otf` font files so the canvas renders text in your real brand typeface instead of a generic sans fallback. Each upload is linked to a Figma font family and a specific weight. > **Custom fonts require Starter plan or above.** Free workspaces see > this section but the upload button is hidden. See [Custom > fonts](/docs/guides/custom-fonts/) and [Plans and > limits](/docs/reference/plans-and-limits/). ## Developer API tokens for read-only access, plus the export URL builder. - **Format builder** — pick JSON / CSV / XML, pretty-print, flat shape, language filter, and status filter. The page shows the live URL with every option baked in. - **API tokens** — generate, view (prefix + creation date), and revoke. Tokens are shown in full *once* at generation; copy then. - **Manual download** — works on every plan. - **API access (the token block)** — Team plan and above. Full walkthrough in [API and developer tokens](/docs/guides/api-and-developer-tokens/) and [Export copy](/docs/guides/export-copy/). ## Danger zone **Project owner only.** Two actions: - **Delete project** — irreversible. Deletes every page, comment, and translation. KopiMark prompts for the project name to confirm. - **Transfer ownership** — pick another project member to become owner. ## See also - [A tour of Settings](/docs/settings/tour/) - [Statuses and approvals](/docs/guides/statuses-and-approvals/) - [Translate with AI](/docs/guides/translate-with-ai/) - [Custom fonts](/docs/guides/custom-fonts/) - [Export copy](/docs/guides/export-copy/) - [Plans and limits](/docs/reference/plans-and-limits/) --- # Plans and limits > Seats, projects, pages, languages, AI translation allowances, and features included on each KopiMark plan — Free, Starter, Team, and Business. _Source: https://kopimark.com/docs/reference/plans-and-limits/_ KopiMark has four public plans: **Free**, **Starter**, **Team**, and **Business**. Pricing on this page reflects monthly billing on the [pricing page](https://kopimark.com/pricing); annual billing is discounted via Stripe at checkout. For the live prices, the **pricing page** on kopimark.com is the source of truth — this docs page focuses on what's *included* on each plan. ## At a glance | Limit | Free | Starter | Team | Business | |---|:---:|:---:|:---:|:---:| | Seats (members + guests + pending) | 2 | 5 | 12 | 25 | | Projects per workspace | 3 | 10 | 20 | Unlimited | | Pages across all projects | 10 | 150 | 300 | Unlimited | | AI translations / month | 50 | 1,500 | 5,000 | 15,000 | | Target languages per project | 1 | Unlimited | Unlimited | Unlimited | | Custom fonts | — | ✓ | ✓ | ✓ | | Read-only API | — | — | ✓ | ✓ | | Priority support | — | — | ✓ | ✓ | | Domain auto-join | — | — | — | ✓ | | Workspace glossary terms | 50 | 50 | 50 | 50 | A few notes on the columns: - **Seats include pending invites.** KopiMark won't let you stack unaccepted invites to claim more seats. - **Target languages per project** doesn't count the source language. Free gets source + 1 target = 2 total. - **AI translations** are counted as successful AI completions. Manual edits don't count. - **Workspace glossary** caps at 50 terms on every plan. Most teams need fewer. ## What each limit means in practice ### Seats Every workspace member or guest counts. The owner counts too. Free fits a founder + one collaborator. Starter fits a small product team. Team and Business scale up from there. If you hit the seat cap, KopiMark blocks new invites with a clear message and a link to the billing page. ### Projects and pages A *project* is usually one Figma file (or one body of work). A *page* is one Figma page imported into a project. Pages are the unit that's metered, not Figma files — a 50-page Figma file imported as one project counts as 50 pages. Trial workspaces often start by importing a single project's worth of pages, then add more as the team grows comfortable. ### AI translations The 50 / month free allowance is enough to translate a small landing page once. The Starter allowance of 1,500 covers most product copy updates. Team and Business scale into ongoing localisation work. If you exhaust the allowance mid-period, bulk runs stop cleanly and show what remains. The counter resets on your renewal date. ### Custom fonts Upload `.woff2` or `.otf` files so the canvas renders text in your real brand typeface. **Starter and above.** See [Custom fonts](/docs/guides/custom-fonts/). ### Read-only API A token-authenticated endpoint per project that returns your latest copy and translations. Use it from your build pipeline. **Team and above.** Manual download works on every plan. See [API and developer tokens](/docs/guides/api-and-developer-tokens/). ### Priority support Faster response on the help email (`hello@kopimark.com`). **Team and above.** ### Domain auto-join Anyone signing in with a verified company email joins your workspace automatically. **Business only.** See [Invite your team](/docs/guides/invite-your-team/). ## What's *not* limited A few things sometimes mistaken for plan features: - **Comments and threads** — unlimited on every plan. - **Statuses** — define as many per project as you want, every plan. - **Folders** — unlimited. - **Revision history** — every edit is versioned forever, every plan. - **Cache-only mode and the Figma token setup** — same UX on every plan. ## Where to manage billing **Workspace Settings → Billing**: - Current plan with usage meters. - Plan picker for upgrading or downgrading. - A link into your Stripe customer portal for invoices and payment methods. Downgrades take effect at the end of the current period. KopiMark flags you to fix any "would exceed the new caps" situations *before* the downgrade locks in. ## FAQ ### What happens if I hit my AI translation limit mid-month? Bulk translation runs stop cleanly and show what's remaining, rather than failing partway through. Your existing translations stay intact, and the counter resets on your billing renewal date. ### Can I change my plan mid-cycle? Yes. Upgrades take effect immediately and Stripe prorates the difference automatically. Downgrades take effect at the end of the current period, and KopiMark flags any seat, project, or page counts that would exceed the new caps before the downgrade locks in. ### Do pending invites count against my seat cap? Yes. KopiMark counts every unaccepted invite against the seat allowance for your plan, so you can't hold seats open by stacking invitations you never confirm. ### Are comments, revision history, and statuses metered? No. Comments and threads, revision history, statuses, and folders are unlimited on every plan, including Free. ## See also - [Workspace settings](/docs/settings/workspace-settings/) - [Translate with AI](/docs/guides/translate-with-ai/) - [Custom fonts](/docs/guides/custom-fonts/) - [API and developer tokens](/docs/guides/api-and-developer-tokens/) --- # Keyboard and canvas > Keyboard shortcuts and canvas navigation in the KopiMark editor — pan, zoom, select text and image nodes, switch languages, and run bulk actions. _Source: https://kopimark.com/docs/reference/keyboard-and-canvas/_ The KopiMark editor is built around the canvas. This page is a reference for moving around inside it efficiently. > **Heads up** — keyboard shortcuts evolve as the editor does. If a > shortcut here disagrees with the tooltip you see in the app, **trust > the app**. The app is the source of truth; this page is a snapshot. ## Canvas navigation | Action | How | |---|---| | Pan the canvas | Hold spacebar and drag, or middle-mouse drag | | Zoom in / out | `Cmd` / `Ctrl` + scroll, or pinch on a trackpad | | Zoom to fit | Double-click empty canvas (or use the toolbar **Fit** button) | | Reset zoom to 100% | Toolbar **100%** button | ## Selecting nodes - **Click** a node to select it. The side panel switches to the text or image editor for that node. - **Click again** on the same node to enter inline edit mode (text only). - **Click empty canvas** to deselect. You can drag-select a region for multi-select, then use the **Bulk actions** panel for set-status, translate, or assign actions. ## Inside the text editor When a text node is selected and the side panel shows its editor: - **Type** to edit. The canvas reflows live. - **Enter** to commit. **Escape** to discard your draft. - Newlines are supported; the rendered design honours line breaks. The text-revision list (the History panel) shows every prior wording with who edited it and when. ## Comments - **Click the comment tool** in the toolbar, then click anywhere on the canvas to drop a pin. - **Click a pin** to open its thread. - The **Comments side panel** (speech-bubble icon, top of the editor) is a faster way to scan every thread on the page. ## Language switching The language switcher is in the editor toolbar (a flag or locale code). Use it any time to flip what the canvas renders. When a target language is active: - Untranslated nodes fall back to the source with a slightly muted visual. - The side panel shows both source and target so you can edit either. ## Status pill Each selected node shows its current status as a coloured pill in the side panel. Click the pill to change the status; click the **Assign** control next to it to hand the node to a teammate. See [Statuses and approvals](/docs/guides/statuses-and-approvals/). ## What the page-grid keyboard does In the project home (the grid of pages): - **Type** to search by page name. The grid filters live. - **Click a status chip** at the top to filter the grid by status. - **Click a page tile** to open it in the editor. ## See also - [Getting started](/docs/getting-started/) - [How KopiMark works](/docs/concepts/how-kopimark-works/) - [Review with comments](/docs/guides/review-with-comments/) ---