For AI agents: use /llms.txt for the Nakafa content index.
Last updated: October 18, 2026
This Privacy Policy explains how PT NAKAFA TEKNO KREATIF ("Nakafa," "we," "us," or "our") collects, uses, and discloses Personal Data when you access or use our websites, applications, and related services, including Nakafa School (collectively, the "Services").
Your use of the Services is at all times subject to our Terms of Service, which incorporates this Privacy Policy.
This Privacy Policy covers how we treat Personal Data that we gather when you access or use the Services.
When a School uses Nakafa School, the School decides how the Personal Data of its students, staff, and Guardians is processed there, and Nakafa processes that data on the School's behalf. The Nakafa School section below explains how that processing works.
This Privacy Policy does not cover the practices of companies we do not own or control, or people we do not manage, including third-party services you may access through the Services. For information about third-party services' data practices, please refer to their respective privacy policies linked throughout this document.
Nakafa uses the third-party services named in this Policy to run the Services. Each service processes Personal Data under its own terms and privacy policy, which this Policy links.
Polar acts as the Merchant of Record and authorized reseller for checkout transactions. Polar collects and processes checkout data under its own terms and privacy policy, while Nakafa receives the customer, checkout, and subscription information needed to provide and manage access to the purchased Service. Nakafa also sends Polar your name, email address, and account identifiers when you create an account and whenever your profile details change, so that Polar holds the customer record used at checkout.
For School Data, the School is the controller and Nakafa is its processor. The Service Providers named in this Policy process School Data for Nakafa as sub-processors under the data processing agreement between Nakafa and the School.
We limit disclosures to the data needed for the stated purpose. The provider links below identify the terms that govern their processing and may be updated by those providers.
The table below summarizes categories of Personal Data we collect, why we collect it, and the categories of third parties with whom we disclose it. Details are explained in the sections that follow.
| Category of Personal Data (examples) | Purpose(s) for collection | Recipients and service roles |
|---|---|---|
| Profile or contact data (name, email address, the username Nakafa gives your account, an optional one-line bio, the username a School creates for a student, optional profile image, the mascot Nakafa assigns to your account, and optional role) | Account creation, support, and service delivery | Convex (database/hosting) - Privacy Policy, DPA; Vercel (hosting) - Privacy Policy; Resend receives the email address needed to deliver the emails described in Emails and notifications - Privacy Policy; Polar receives your name, email address, and account identifiers for the customer record used at checkout - Privacy Policy |
| Account and session data (authentication identifiers, the Google account linked to your account, and sign-in sessions with the IP address and browser user agent of the request) | Authentication and account security | Convex (database/hosting); Vercel (hosting); Google (Google sign-in) - Privacy Policy |
| Device and usage data (IP address, browser/OS, security logs, and consented usage events) | Security and service reliability; product improvement only after consent | Vercel (hosting/security logs); Convex (rate limits for the public API and MCP server, counted under a one-way hash of the IP address); PostHog (consent-based product analytics) - Privacy Compliance |
| Pseudonymous pageview counts (page path without query strings or fragments; your IP address is used once to compute a daily rotating server-side hash that can link same-day views, and is not stored for analytics) | Counting visits and diagnosing service problems without an account, cookies, or browser storage | PostHog (EU-hosted, reached through our first-party proxy) |
| Operational error data (sanitized stack frames, bounded technical context such as the route pattern and the HTTP method, the browser user agent of the request that failed, and a random identifier for that one report, without an account or product-analytics identifier) | Diagnosing failures and maintaining service reliability and security | PostHog (identity-free operational error reporting) |
| Content view records (the content page you read, its language and section, when you first and last read it, a random device identifier stored in your browser after you allow analytics, and your account if you are signed in) | Counting a view once per account or device, ranking popular content, and showing your recently viewed content | Convex (database/hosting) |
| Approximate location for weather (coordinates that Vercel derives from your IP address when you open the page for starting a new chat with Nina) | Showing the current weather near you | Vercel (IP-based location and server logs); OpenWeather (weather data) - Privacy Policy |
| Education and activity data (onboarding choices such as learning focus, region, and role; preferred curriculum and try-out country; assessment attempts, answers, time spent, and scores; AI credit balance and usage) | Operating learning features and personalization | Convex (database/hosting); Vercel (hosting) |
| User Content (chat messages, files and images attached to a chat, comments, prompts, related conversation context, conversation summaries, generated responses, Nina memories, and the portrait that Nakafa writes from them) | Providing interactive features and AI responses, including remembering what you tell Nina and finding lessons | Convex (database/hosting and AI routing through the Convex AI gateway, which also serves the decision model Jev for Nina's memory and the embedding model for lesson search) - Privacy Policy, AI gateway, Subprocessors; OpenRouter (AI model routing as Convex's subprocessor) - Privacy Policy; Anthropic (Claude model processing) - Commercial Terms, Privacy Policy; Amazon Web Services (Amazon Bedrock model processing) - Privacy Notice; Microsoft (Azure model processing) - Privacy Statement; Google (embedding model processing through the Gemini API) - Gemini API Additional Terms, Privacy Policy; Google Cloud (Vertex AI model processing) - Cloud Terms; Firecrawl (web search and page retrieval for research features) - Privacy Policy |
| Google connector data, when connectors are available (files you pick in Google Drive, forms you pick in Google Forms, Google Classroom courses, rosters, and coursework, upcoming Google Calendar events, and the Google tokens for the connector) | Giving Nina context, importing files and quizzes, and moving and syncing Google Classroom classes | Google (Google APIs) - Privacy Policy; Convex (database/hosting); the AI routes listed for User Content when Nina uses connector data or Nakafa reads and indexes connector files |
| School Data (the school's settings, units, periods, class groups, roster people and their placements, invitations, and audit record, as described in Nakafa School) | Providing Nakafa School to the School | Convex (database/hosting); Vercel (hosting); Resend (invitations) |
| Notification data (the email address and web push subscription that notifications go to) | Delivering the emails and notifications you receive | Resend (email delivery); the push service your browser uses, for example Google for Chrome, Mozilla for Firefox, or Apple for Safari (web push delivery) |
| Payment and subscription data (customer, checkout, and subscription identifiers and related metadata) | Checkout, subscription management, and compliance | Polar (Merchant of Record and authorized reseller) - Privacy Policy, Checkout Buyer Terms; Convex (subscription records); Vercel (hosting) |
We checked the data-flow statements for the features available today against Nakafa commit 6dbc43b76cbd0d8d59b6d4fb79c77712c2305f82. The chat sealing and the message fingerprint are the exceptions. We checked them at the later commit named at the end of this section. Nakafa School under a written agreement with a School, accounts a School creates, Guardian sign-in, exam integrity signals, learning estimates, School integrations, School assignments, assessments, grades, and report cards, AI drafts and second opinions in Nakafa School, the narratives Guardians see, Google connectors, account mascots, and web push notifications are not available to users yet. Nakafa stores no Google connector data or token today. The statements about those features describe how they will process data, and they apply from the day each feature becomes available. Before each of these features becomes available, we check these statements against its implementation and update this Policy where they differ.
At that commit, packages/backend/confect/auth/client.ts stores and synchronizes account profile data in Convex and schedules the Polar customer synchronization, which sends the name, email address, and account identifiers through packages/backend/confect/customers/sync/impl.ts. Google sign-in is configured in packages/backend/confect/auth/runtime.ts, and its options in packages/backend/confect/auth/tokens.ts ask Google for the openid, email, and profile scopes and for the account chooser, but not for offline access, so Google issues no refresh token. The hooks in that file keep every token that Google issues out of the account table, and packages/backend/confect/auth/routes.ts answers 404 for the routes that once returned a stored token. The authentication schema in packages/backend/components/betterAuth/schema.ts keeps sessions with the request IP address and user agent, and each account with its linked Google account. The authentication boundary is exposed in apps/www/app/api/auth/[...all]/route.ts. apps/www/vercel.ts runs the web app's Vercel functions in the United States region iad1, beside the Convex production deployment in US East. The welcome message goes through Resend to the recipient email address in packages/backend/confect/emails/welcome/internal.ts.
The same revision defines the current notice version and separate anonymous and account decisions in packages/analytics/consent.ts, loads the browser SDK on every visit and counts pseudonymous baseline pageviews until a grant admits identified analytics in packages/analytics/posthog/browser.ts, and checks the current account grant both before queuing and around backend delivery in packages/backend/confect/analytics/capture.ts. Identity-free operational exceptions pass through a bounded property contract in packages/analytics/posthog/exception.ts, which admits the HTTP method and the browser user agent of the request that failed, and the route pattern it failed in, as its only request-derived values. Account deletion removes consent records through packages/backend/confect/auth/cleanup/consents.ts and starts erasure of the PostHog person and related events through packages/backend/confect/customers/deletion/cleanup.ts and packages/backend/confect/analytics/erasure/action.ts. The public API and MCP server count requests under a SHA-256 hash of the client IP address in packages/backend/confect/routes/agent/limit.ts.
AI requests follow the same pinned revision. packages/backend/confect/gateway/model.ts sets anthropic/claude-haiku-5.5 as the one language model, typesafe/jev-1.13 as the decision model, and google/gemini-embedding-2 as the embedding model, and packages/backend/confect/gateway/live.ts sends those identifiers through the Convex AI gateway provider, authenticated with a short-lived token of the Convex deployment. Every Nina model call goes through the one handle that packages/backend/confect/gateway/handle.ts builds, including answer generation in packages/backend/confect/nina/generation.ts, memory capture in packages/backend/confect/nina/memory/capture.ts, the portrait in packages/backend/confect/nina/portrait/build.ts, conversation summaries in packages/backend/confect/nina/summary.ts, the decisions about your words in packages/backend/confect/nina/judgment/ask.ts, and the embedding of a lesson search phrase in packages/backend/confect/contents/sections/search.ts. On every language model call that handle sends two flags, data_collection: "deny" and zdr: true, which ask for zero data retention. On every decision request it sends zdr: true, the only flag that the decision model of the provider carries. Every embedding request sends zdr: true, the one retention parameter that the provider's embedding model carries. It sends no other provider or routing option, because Convex selects how each request is served and rejects such options. Nakafa's code sends a request to no other gateway, and none of your words to any model other than these three. After that point Convex routes the request, and Convex lists OpenRouter as its subprocessor for AI model routing. The research flow in packages/backend/confect/nina/research/agent.ts uses no search grounding by a model provider. It sends search queries and page addresses to Firecrawl in packages/backend/confect/nina/research/search/provider.ts and packages/backend/confect/nina/research/tools/scrape.ts. Nina's calculations go to Nakafa's own calculation service through packages/math/service.ts, which apps/cas/vercel.ts deploys on Vercel. Research results show each source's icon from Google's favicon service or from the icon address that the source page declares, as packages/design-system/components/ai/source.tsx shows.
Prompts and their attached files are saved to the Convex conversation thread in packages/backend/confect/nina/turns.impl.ts, uploads are stored in packages/backend/confect/nina/uploads.impl.ts, and Nina memory is read, written, edited, deleted, turned off, and deleted all at once in packages/backend/confect/nina/memory.impl.ts, which checks only that a memory is not empty and that its title and text are not too long. packages/backend/confect/nina/memory/recall.ts picks the at most 8 memories that fit your message and the page you have open, packages/backend/confect/nina/prompt/recall.ts cuts each of them to 300 characters and the list to 700 tokens for the text that goes in front of your message, which Nakafa does not store, and packages/backend/confect/nina/memory/tool.ts runs the memory search, which finds at most 6 memories for Nina and keeps their words out of the chat. packages/backend/confect/nina/memory/decision.ts asks the decision model whether your newest message holds something lasting, and whether a proposed memory is your own note and holds nothing private. packages/backend/confect/nina/judgment/ask.ts sends it only that message, or that sentence with your quote, cut to 1,000 tokens, and packages/backend/confect/nina/judgment/catalog.ts holds the three questions. packages/backend/confect/nina/memory/capture.ts gives the language model your message, at most 12 of your memories that match it, and your account facts, and asks it for at most three memories, packages/backend/confect/nina/memory/check.ts keeps a proposal only when its quote is in your message, and packages/backend/confect/nina/memory/write.ts writes the proposals that remain, or confirms a memory you already have when a proposal says the same. packages/backend/confect/nina/portrait/build.ts asks the language model in the background for your portrait, from the memories it has not read yet, at most 40 at a time, and packages/backend/confect/nina/portrait/store.ts takes the text of the portrait out when you delete or edit a memory. packages/backend/confect/nina/memory/store.ts records the moment you choose "Delete all", so that nothing reads those memories from then on, deletes the portrait, and deletes the memories in batches. packages/backend/confect/vault/cipher.ts and packages/backend/confect/vault/keys.ts encrypt the title and the text of each memory with the key of your account, packages/backend/confect/nina/portrait/save.ts does the same for the portrait, and packages/backend/confect/chats/title.ts and packages/backend/confect/nina/summaries/text.ts do the same for chat titles and conversation summaries. The account facts and the portrait that Nina reads are formatted in packages/backend/confect/nina/prompt/learner.ts, and your role and curriculum preference enter Nina's context through packages/backend/confect/nina/contract/turn.ts. Deleting a chat runs packages/backend/confect/triggers/chats/chats.ts, which deletes the chat's messages through the Agent component and deletes no memory. The component then releases the files those messages referenced, and daily jobs in packages/backend/confect/crons.ts run packages/backend/confect/storage.impl.ts, which deletes from Convex storage every file that no message has referenced for 24 hours, and the expire function in packages/backend/confect/nina/memory.impl.ts, which deletes the situations whose end date has passed, and your portrait when that leaves you with no memory. The weather route in apps/www/app/api/weather/route.ts reads Vercel's IP-based location and logs the coordinates, and apps/www/lib/weather/client.ts sends those coordinates to OpenWeather.
Checkout and subscription handling also follow the pinned revision. packages/backend/confect/customers/actions/sessions.impl.ts requires an authenticated account and creates a Polar checkout session, packages/backend/confect/routes/polar.ts verifies Polar webhook signatures before processing events, and packages/backend/confect/customers/polar/webhook.ts accepts supported customer and subscription events through internal Convex mutations. The exact subscription fields stored in Convex are defined in packages/backend/confect/tables/subscriptions.ts. Account deletion deletes the Polar customer with anonymization through packages/backend/confect/customers/polar/live.ts and removes Nakafa's subscription and customer records through packages/backend/confect/customers/deletion/billingState.ts.
The listed learning and account-activity records are stored in domain-owned Convex schemas at the same revision. School records, such as each school's profile and settings, its units, its people and their class placements, its invitations, and its audit journal, are defined in packages/backend/confect/tenancy/schema.ts, packages/backend/confect/tenancy/placement.ts, and packages/backend/confect/journal/schema.ts, assessment answers in packages/backend/confect/tables/tryoutResponses.ts, onboarding choices in packages/backend/confect/onboarding/schema.ts, and content view records in packages/backend/confect/tables/learningViews.ts. apps/www/lib/content/views/device.ts creates the random device identifier for those view records in the browser only when analytics consent is granted, and apps/www/components/analytics/consent/provider.tsx removes it when no analytics consent is in effect. packages/backend/confect/contents/views/impl.ts records a signed-in view without that identifier for the account alone and records nothing for a signed-out view without it. That revision stores no notification records.
The bounded account-deletion coordinator runs each domain-owned cleanup program in packages/backend/confect/auth/cleanup/impl.ts and deletes the key of your account only after all of them have finished. Those programs remove assessment attempts, answers, and scores through tryouts.ts, comments, chats, pending Nina uploads, and Nina memory with its portrait through social.ts, and onboarding choices, preferences, credit records, content view records, and recently viewed content through learning.ts. Finalizing the deletion releases each School person that your account holds, one batch at a time, as release.ts shows: the person stays on its school's roster with its name and status but no longer links to your account, and the invitation that you accepted is revoked.
The chat sealing and the message fingerprint in the paragraph on chat encryption under Nina's memory, files, and context are checked at a later Nakafa commit, dff28a804ecead9bef045d92630c895b7d212852. At that commit, packages/backend/confect/nina/sealed/save.ts seals each learner message before the Agent component stores it, and packages/backend/confect/nina/turns.impl.ts calls that writer when a turn starts. packages/backend/confect/nina/uploads.impl.ts seals each file name when it reserves an upload, through packages/backend/confect/nina/sealed/file.ts. When a turn settles, packages/backend/confect/nina/settlement.ts schedules the seal that packages/backend/confect/nina/sealed/turn.ts performs, which seals the turn's replies and tool steps and deletes its streamed text. packages/backend/confect/nina/sweep.ts and packages/backend/confect/nina/sealed/drain.ts seal the older settled turns in the background, oldest first. packages/backend/confect/nina/fingerprint.ts computes the keyed fingerprint. ADR 0024 lists which messages and file names stay plain until the migration it plans under Old Messages.
Polar is Nakafa's Merchant of Record and authorized reseller. When you complete checkout, you purchase the applicable product from Polar and enter a payment agreement with Polar under the Polar Checkout Buyer Terms. Polar, or its payment processor, collects and processes the payment details needed for the transaction under the Polar Privacy Policy.
Nakafa does not collect your full payment-card number. We receive the customer, checkout, subscription, product, status, and related metadata needed to grant access, manage your subscription, provide support, and meet legal obligations. Before any checkout, Polar already holds the customer record that Nakafa creates with your name, email address, and account identifiers when you create an account.
We collect and use Personal Data to operate, maintain, and improve the Services. This includes providing account and learning features, providing Nakafa School to Schools, running the Google connectors you choose, supporting subscriptions, sending the emails and notifications described below, counting content views, showing local weather, maintaining security and reliability, preventing abuse and scraping, and complying with legal obligations. We use optional identified product analytics only after you consent. Separately, every visit is counted once as a pseudonymous daily count, as described below.
If you are in the EU/EEA, we process Personal Data under one or more of the following legal bases:
When Nakafa processes School Data, the School determines the legal basis, and Nakafa processes that data on the School's documented instructions.
We disclose Personal Data in the following circumstances:
Nina uses one language model, Claude Haiku 5.5, which Anthropic makes, and you do not choose a model. Nakafa routes Nina's language-model requests through the Convex AI gateway only to that model. Convex selects how each request is served, and Nakafa cannot choose the provider: Anthropic serves the model, also on the Claude Platform on AWS, which Anthropic runs, and Amazon Bedrock, Google Cloud Vertex AI, and Microsoft Azure host it too. Convex lists OpenRouter as its subprocessor for AI model routing and states that it enforces zero data retention on every gateway request and routes only to providers under a zero data retention agreement. Nakafa's own language-model requests also ask for zero data retention: every one carries data_collection: "deny" and zdr: true. Two more models run through the same gateway: a decision model that helps decide what Nina remembers, and an embedding model that helps find lessons. The sections "Nina's memory, files, and context" and "Lesson search" describe them. When you use an AI feature, the prompt, related conversation context, and technical metadata needed to process the request are sent to Convex and the providers it selects. The generated response is returned to Nakafa and may be stored with the conversation so that the feature works and the conversation remains available to you. When Nina calculates, it sends the mathematical expressions it needs to evaluate to Nakafa's own calculation service, which runs on Vercel.
Research features send search queries derived from your request, and the addresses of pages they read, to Firecrawl, which returns search results and page content.
Do not include government identifiers, financial-account numbers, highly sensitive health information, or other sensitive Personal Data in an AI prompt. AI output can be inaccurate and must not be treated as professional advice or as the sole basis for an important decision.
Convex routes these requests as its AI gateway page, Privacy Policy, and list of subprocessors describe; Anthropic processes the language model's requests under its Commercial Terms of Service and Privacy Policy, or the cloud that hosts the model processes them under its own terms; and Google processes the embedding model's requests under the Gemini API Additional Terms or the Google Cloud Terms.
You can attach images, PDF files, and plain-text files of up to 8 MiB each to a message for Nina. The PDF and plain-text files in one message can total at most 10 MiB. Nakafa stores an attached file in Convex and sends it to the AI route with your message. For long conversations, Nina keeps a summary of the earlier messages, which a model on the same AI routes writes and Nakafa stores with the conversation.
Nina memory is on for every account. A memory that Nina saves is a short statement about how you study: your grade or study level, your goal, how you like to learn, a topic you find hard, or a situation with an end date, such as an exam day. You can turn memory off with one switch in Settings, AI, Memory. Turning it off pauses memory and keeps every memory. While it is off, Nina saves nothing new and reads none of your memories, and no model reads your messages to look for memories.
After each reply, a decision model reads the text of your newest message and answers whether it says something that will still matter in later study sessions, such as your grade or level, a goal, how you like to learn, something you find hard, or a situation with a date, such as an exam. The decision model is Jev (typesafe/jev-1.13), the model from TypeSafe AI, Inc. Here Nakafa reaches it through the Convex AI gateway, not through Vercel AI Gateway, and Convex selects how the request is served. The message is cut to 1,000 tokens (a token is a short piece of text, a few characters long), and the request asks for zero data retention. The model receives no name, no account identifier, and nothing else from the conversation. A message of only spaces goes to no model for this purpose, and neither does any message while memory is off.
Only a message that the decision model judges to hold something lasting goes on to the language model, which looks for memories in it. Besides your message, cut to 1,000 tokens, the language model reads at most 12 of your memories, the ones that best match your message and the page you have open, so that it can tell a new memory from one you already have. It reads at most the first 240 characters of each memory, its title and text together. It also reads your learning focus and region from onboarding, your preferred try-out country, and the result of your latest finished try-out, so that it does not save them again.
The language model proposes at most three memories. Each is one sentence of at most 280 characters, with a quote of your exact words as proof. Nakafa's code keeps a proposal only when the quote is in your message, and a situation also needs an end date of today or later. The decision model then reads each remaining proposal in a request of its own, with the same request for zero data retention, and answers two questions: whether the sentence reads as your own note, and whether it, with its quote, holds something private, meaning contact details, a home address, an identity or account number, a password, or information about health, religion, ethnicity, political views, or money. It receives only the proposed sentence and your quote, cut to 1,000 tokens, and no name or identifier. Nakafa drops a proposal that is not your own note or that holds something private, and does not rewrite it. A model makes these two decisions, and a model can be wrong: it can keep something private or drop a note that was fine. If a decision cannot be made, Nina saves nothing from that message. The language model is also instructed not to save information about your health, religion, ethnicity, political views, finances, contact details, or addresses.
A memory has text of up to 2,000 characters and an optional title of up to 80 characters that only you write. Nakafa sets no limit on how many memories you keep. In Settings, AI, Memory you can read every memory, write your own, edit and delete each one, and delete all of them at once. "Delete all" takes effect at once: from that moment no device and no later answer from Nina reads those memories, and Nakafa then deletes them from its database in batches. Nakafa does not run the checks above on a memory that you write or edit yourself, and it goes to the AI routes like any other memory. Do not put contact details or other sensitive Personal Data in a memory.
Nina reads your memories in three ways. First, for each answer, Nakafa recalls the memories that fit your message and the page you have open: at most 8, the best match first. When fewer than 3 fit, the memories you wrote, edited, or said again most recently fill the list up to 3. Each memory is cut to its first 300 characters, title and text together, and the whole list to 700 tokens. The list goes to the language model in front of your message, and Nakafa does not store it. Second, Nina reads your portrait for each answer, if you have one. Nakafa cuts it to 300 tokens. Third, Nina can search your memories itself, with a search phrase of at most 200 characters, when you point back to something you told it or when a good answer depends on a personal fact that is probably saved. The search finds at most 6 memories, each cut to 800 characters, within 1,500 tokens. Nina is instructed to search at most twice for one answer.
The words that the memory search finds go to the language model for that answer only. The chat does not store them: it keeps the search phrase and a note that memories matched. An answer that Nina has already written can quote a memory, and deleting the memory does not change that answer. It stays until you delete the chat.
The portrait is a short text about you that Nakafa writes in the background from your memories, with the same language model. It says who you are, what you aim for, how you like to learn, and what you find hard, in plain sentences, and it leaves out anything with an end date. It has at most 1,200 characters. To write it, the model reads the current portrait and the memories it has not read yet, 40 at a time, the oldest first, at most the first 400 characters of each. When you delete or edit a memory, Nakafa removes the text of the portrait at once and then writes a new one from the memories you still have. "Delete all" and deleting your account delete the portrait too, and so does the daily job when it deletes the last memory you have. While memory is off, Nakafa builds no portrait and Nina reads none. Settings do not show the portrait: you change it by changing your memories.
A memory is independent of your chats: deleting a chat deletes no memory and no portrait. A daily job deletes a situation after its end date passes. Nina does not change the words of a memory you wrote or edited. If a later message of yours repeats such a memory and gives it an end date, such as an exam day, Nina can turn it into a situation, and the daily job then deletes it after that date.
Nakafa encrypts the title and the text of each memory, and the text of the portrait, in its database with a key that belongs to your account (AES-256-GCM). The account key is itself encrypted with a key that only the Convex deployment environment holds. Deleting your account deletes your memories and your portrait, and then that account key. The rest of a memory's record is not encrypted: who wrote it, its kind (a grade or level, a goal, a way of learning, a hard topic, or a situation), its end date, when it was saved and last said again, the pages of Nakafa you had open when you said it, at most 8, and a search index of keyed hashes of the first six characters of each word. Only your account key can make these hashes.
Nakafa encrypts chat titles, conversation summaries, the names of files you upload, and the messages of a chat in its database with the same account key. Your messages are encrypted when they are saved. Nina's replies and the steps she takes with her tools are encrypted once her answer ends, whether it completes, fails, or is stopped. While Nina is writing, her reply is stored as plain text. Replies from before October 17, 2026 are being encrypted in the background. Messages you sent and names of files you uploaded before October 17, 2026 are not encrypted in this way. Nakafa stores a fingerprint of each new message you send to Nina. It is made from the chat, the message text, the files you attached, and the page context you sent with it, with a key of your account. This means the fingerprint cannot be used to confirm a guessed message. Nakafa uses the fingerprint to check that a repeated request is the same message.
Nina's context also includes the page you are reading when you ask and these account facts: your learning focus and region from onboarding, your role and preferred curriculum, your preferred try-out country, and the result of your latest finished try-out. Nakafa does not add your name or email address to that context.
Nina searches Nakafa's lessons, articles, and Quran passages by meaning as well as by words. For the search by meaning, Nakafa sends the short search phrase that Nina writes from your request through the Convex AI gateway to an embedding model, google/gemini-embedding-2, which turns it into a list of numbers. Nakafa compares those numbers with the numbers of its own text and does not store them. The request holds only the search phrase: no name, no account identifier, and no other part of your conversation. Unlike a language model request, which carries both of Nakafa's zero data retention flags, it carries only zdr: true, so it relies on the statement of Convex that it enforces zero data retention on every gateway request. Convex selects how the request is served.
Nakafa School is the part of the Services that a School uses for its classes, assignments, assessments, grades, report cards, and communication with Guardians. The School is the controller of its School Data, and Nakafa processes School Data only on the School's documented instructions under a data processing agreement. That agreement describes the processing, the Service Providers that take part in it, where the data is stored, and how long it is kept. Nakafa remains the controller of your personal Nakafa account and of the data it needs to operate, secure, and bill the Services.
Your personal Nakafa data stays separate from School Data, and Nakafa does not share it with your School today.
When a School invites a person by email, the invitation names that person's place on the School's roster. Nakafa links an account to that place without any step from the account holder, and Nakafa offers no way to refuse the link. The link is made when an account is created with a verified email address, or when its address becomes verified, while an invitation for that address is waiting. It is also made moments after a School sends an invitation to an address that an existing account already holds as verified. When the School has set allowed email domains, the domain of the address must be one of them. An invitation that no account links expires after 14 days. Staff who can view the School's people see whether each person's account is linked.
A School can create username accounts for students who have no email address or whose Google account the School restricts. The School creates and manages these accounts, and its instructions govern them. When Nakafa staff need to open a School's data in Nakafa School to support the School or keep the Services secure, they use a temporary grant that is recorded in the School's audit log.
A Guardian signs in with a one-time code that Resend delivers to the email address the School has on record. Law No. 27 of 2022 on Personal Data Protection requires the consent of a parent or guardian to process a child's Personal Data, and Government Regulation No. 33 of 2026, which implements that Law from January 16, 2027, requires that consent to be verified and documented. When a Guardian gives consent in Nakafa School, Nakafa records how and when it was given, the version of this Policy that applied, and the evidence of verification. A Guardian sees only the information the School releases to Guardians, such as assignments, released grades, announcements, report cards, and progress summaries that a teacher has approved.
During a School exam, Nakafa School records integrity signals, such as leaving the exam page or full-screen mode, copying or pasting, opening the exam on a second device, and long disconnections. It can also report unusual patterns, such as very similar answers. Proctors and teachers see these signals. A web page cannot lock a device, so the signals point to possible problems, and the School decides how to respond.
Nakafa School can estimate each student's mastery of the School's learning objectives and the chance of reaching a learning target. It uses the student's work in the School and, only with the student's permission, personal Nakafa practice and the topics of the student's questions to Nina. Teachers can see how each estimate was reached, and Nakafa makes no automated decision with a significant effect on a student.
In Nakafa School, AI output is a suggestion. Other AI features can draft a report card description, summarize a student's progress, or give a teacher a written second opinion on an answer, using the AI routes described in AI processing. Teachers decide exam grades, report cards, and the narratives that Guardians see.
A School can connect Nakafa School to its other systems, for example to import data from Dapodik or CSV files, or to send data out through exports, an API, or webhooks. Nakafa then transfers School Data as the School instructs.
If you are a student, staff member, or Guardian at a School and your request concerns School Data, send it to your School. If you contact us instead, we will pass the request to the School and help it respond.
Google connectors let you connect Google Drive, Google Forms, Google Classroom, and Google Calendar to Nakafa. Nakafa uses a Google authorization for connectors that is separate from Google sign-in. Disconnecting a connector does not sign you out of Nakafa, and signing in again does not change what a connector can access. Nakafa does not offer a Gmail connector.
| Connector | Access Nakafa requests | What Nakafa uses it for |
|---|---|---|
| Google Drive | Only the files you choose in the Google Picker (drive.file) | Copying the files you choose into Nakafa, keeping those copies up to date, letting Nina find passages in them, and adding them to a Nakafa School library |
| Google Forms | Forms you choose, read through the Google Forms API with the same drive.file access | Importing a quiz's questions, answer keys, and points into a question bank |
| Google Classroom | Read-only access to courses, rosters, student coursework, coursework materials, announcements, and topics. Students grant read-only access to their own coursework. Teachers and administrators who invite roster members by email can also grant read-only access to members' email addresses. | Moving a class to Nakafa School once, keeping it in sync, and showing a student's coursework to Nina |
| Google Calendar | Read-only access to your calendar events | Keeping a copy of the upcoming events in your primary calendar so that Nina can answer questions about your schedule |
Google classifies the Calendar access and the Classroom email access as sensitive. Nakafa requests each kind of access only when you first use a feature that needs it, and you can refuse it or revoke it later.
The Google Picker is a Google interface that runs in your browser. Google processes your use of it under the Google Privacy Policy. When connectors are available, Nakafa will encrypt the tokens Google issues for a connector, keep them apart from your other account data, and give your browser only a short-lived access token while the Picker is open. Nakafa reads data from Google when it imports or syncs a connector and stores the result in Convex. Nina reads that stored copy and does not call Google during a conversation. Each connector has a switch that decides whether Nina may use its data. When Nina uses connector data, the relevant content goes to the AI route described in AI processing. Only that route processes connector data with AI, including when Nakafa reads a PDF file or builds the search index that lets Nina find passages in the files you choose.
When you disconnect a connector, Nakafa stops syncing it and offers to delete the data you imported through it. When no connector uses a Google account any more, Nakafa will revoke its Google authorization and delete the stored tokens. You can also remove Nakafa's access in your Google Account, as Google explains in Manage links between your Google Account & apps from other developers. A School administrator can turn connectors off for particular roles.
Nakafa's use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy and the Google Workspace user data and developer policy, including the Limited Use requirements. In particular, for the data Nakafa receives through Google connectors:
Resend delivers the emails Nakafa sends. Today this is the welcome email, which Nakafa sends after you create an account and complete onboarding. In Nakafa School, Resend also delivers invitations. Sign-in codes for Guardians and notifications about School activity are not available yet.
If you allow web push notifications in your browser, Nakafa stores the push subscription your browser provides and sends notifications through the push service your browser uses, for example Google for Chrome, Mozilla for Firefox, or Apple for Safari. You can turn push notifications off in your browser settings at any time. Nakafa does not send notifications through WhatsApp.
We separate storage that is necessary to operate the Services from optional product analytics.
Vercel may still process request and security logs as our hosting provider, and Nakafa may report service exceptions without an advertising or product-analytics identifier. We process those limited records only to operate and secure the Services. We do not use them to build a product-usage profile.
For information about PostHog's processing, review its Privacy Compliance documentation. PostHog processes analytics data as our processor under a data processing agreement that includes the EU Standard Contractual Clauses.
We retain Personal Data for as long as necessary to provide the Services and for legitimate business purposes, including compliance, dispute resolution, and enforcement of agreements.
Retention depends on the type and purpose of the data:
If you request deletion, we will delete or de-identify Personal Data unless we are required or permitted to retain it for legal or legitimate business reasons.
We use reasonable administrative, technical, and organizational measures designed to protect Personal Data against unauthorized access, loss, misuse, alteration, and destruction.
Nakafa does not store the tokens that Google issues when you sign in with Google. It deleted the tokens that earlier sign-ins had stored on October 14, 2026.
No security program can eliminate all risk. You are responsible for keeping your account credentials confidential and for using a secure password and device practices.
Nakafa is based in Indonesia, but it stores and processes the Services' data outside Indonesia. Convex stores the Services' database and files in the United States. Vercel delivers the Services through its global network, and the server functions of the Nakafa web app run in the United States. Other Service Providers, including the AI providers described in AI processing, process the Personal Data described in this Policy in the United States and the other countries where they operate. For example, PostHog processes analytics data in the EU. Using the Services therefore transfers your Personal Data from Indonesia to the United States and to other countries.
Law No. 27 of 2022 on Personal Data Protection allows a transfer of Personal Data outside Indonesia when the recipient's country provides protection equivalent to or higher than Indonesian law, when adequate and binding safeguards are in place, or, when neither applies, with the consent of the person the data is about. Government Regulation No. 33 of 2026, which implements that Law from January 16, 2027, sets out how these transfers are assessed and documented. When you sign in, you accept this Privacy Policy, including these transfers. Nakafa protects transferred data with the safeguards in place today: each Service Provider processes it under its own terms, which this Policy links, the data travels over encrypted connections, and access controls limit who can reach it. For School Data, the School, as controller, decides on these transfers, and the data processing agreement with the School records where the data is stored. Contact nakafaai@gmail.com for more information about these transfers.
For personal Nakafa accounts, the Services are not intended for children under 13 years of age. If you are under 13, do not create a personal account or submit Personal Data.
If you are under 18, you may use the Services, including AI features, only with the permission of a parent, legal guardian, or teacher. When you sign in, you accept this Privacy Policy and our Terms of Service and confirm that you have that permission.
AI features, meaning Nina and other features that use AI models on your prompts, answers, or data, are available to every user, including in Nakafa School.
In Nakafa School, a School can provide accounts to students of any age, including children under 13. The School is responsible for the lawful basis for that processing and arranges the consent of Guardians. Where the School uses the Guardian consent flow, Nakafa records that consent as described in Nakafa School.
If we learn that we collected Personal Data from a child under 13 outside Nakafa School, we will take steps to delete that information.
Your rights depend on where you live.
If you are in Indonesia, you may have rights under Indonesia’s Personal Data Protection Law, including rights to access, correct, and delete your Personal Data, to withdraw consent, to object to a decision based only on automated processing, including profiling, that has legal effects or a significant impact on you, and other rights provided by applicable law. A parent or guardian can also make a request for a child.
If you are in the EU/EEA, you may have the following rights:
If you are a resident of a US state with a comprehensive privacy law (for example California and certain other states), you may have rights such as:
This Policy commits Nakafa not to sell Personal Data or use it for cross-context behavioral or targeted advertising. Before changing that commitment, we will update this Policy and provide any notice or opt-out required by applicable law.
To exercise your privacy rights, contact us at nakafaai@gmail.com. You can also change or withdraw product-analytics consent through the privacy controls in the Services, turn Nina memory off, read, edit, or delete your memories in your settings (the portrait follows your changes), delete a chat, and disconnect a Google connector at any time. For School Data, send your request to your School first.
To protect users, we will verify your identity before processing certain requests. Verification may require access to the email address associated with your account or other information needed to confirm your identity.
If you are making a GDPR-related request, include “GDPR Request” in the subject line.
PT NAKAFA TEKNO KREATIF, Taman Sukahati Permai Blok H-6, Sukahati, Cibinong, Kabupaten Bogor, Jawa Barat 16913, Indonesia
Email: nakafaai@gmail.com