LEGAL

Privacy Policy

CNHOLIC ("we", "us", or "the Company") is committed to protecting the privacy of users ("you") of the Timingle service. This Privacy Policy describes how we collect, use, share, and safeguard your personal information, in compliance with the Personal Information Protection Act of the Republic of Korea and applicable international laws.

⚠️ This page is generated — do not edit it by hand

The text on this page comes from docs/legal/privacy-policy/en-v1.md. scripts/build_legal_web.sh builds this page from that source. Any edit made here is overwritten on the next deploy.

Published at https://timingle.app/en/privacy.html — https://timingle.app/legal/privacy-policy/v1 redirects to the version matching the reader's language.

timingle Privacy Policy (English version v1)

⚠️ LEGAL-UNREVIEWED — This is a draft. Do not publish it yet

  • No lawyer has reviewed this document. A legal review before launch is mandatory (constitution §3).
  • We have not re-verified the current text of the laws referred to here. United States privacy law is made mostly by individual states, it changes several times a year, and we have not checked any of the statutes named below against their current text. ADR 011 expressly prohibits citing country-specific legal requirements without fresh research, and that research has not been done for this version.
  • Curly braces { } mark values we do not know yet. This is not a finished document until every placeholder in the table below is filled in.
  • Remove this notice only after legal review is complete.

⚠️ Must be fixed before publishing — Article 6 (retention and deletion)

🔺 2026-08-11 · Spec 025 resolved part of this. That is why this block was rewritten rather than removed. 🔺 2026-08-15 · Spec 027 made the remaining half (anonymisation of plan data) a fact. This block is still not removed — 2 rows are still promises.

~~There is currently no code anywhere in this repository that actually enforces the retention periods stated in Article 6.~~ ~~→ Of the 7 rows in the Article 6 table, 4 are now actually enforced by code and 3 are not.~~ ~~→ Of the 7 rows in the Article 6 table, 5 are now actually enforced by code and 2 are not.~~ → Of the 8 rows in the Article 6 table, 6 are now actually enforced by code and 2 are not. 🔺 2026-09-25 · Spec 009C — report records were introduced, so a row "Report and moderation records — 1 year from when handling was finished" was added, and the same spec put that kind into the deletion command, so the row entered as a fact from the start.

Row in Article 6Status nowWho makes it true
Terminated accounts — 30 days✅ fact025
Consent history — 5 years✅ fact025
Expired sign-in sessions — 30 days✅ fact025
Date of birth change attempts — 90 days✅ fact025
Plan data — deleted with the account (but if other participants remain, only the departing user is made unidentifiable)✅ fact — 025 enforces the deletion; 027 enforces clearing only the creator's identity when other participants remain025 (deletion) · 027 (anonymisation)
Report and moderation records — 1 year from when handling was finished✅ fact — the deletion command removes reports whose handling finished more than a year ago, together with the moderation records attached to them. Reports not yet handled are never deleted009C
Service usage records · connection IP information — 3 months (🔺 old row: operational logs — 1 year)✅ fact — the server writes these records to one file per day and itself deletes files older than 90 days, at start-up and once a day065
Payment records — 5 years❌ still a promise — there is no payment featurepayment spec

~~Count: of 8 rows, 6 fully true · 0 half · 2 still a promise.~~ 🔺 2026-09-27 · Spec 065 — Count: of 8 rows, 7 fully true · 0 half · 1 still a promise. The "operational logs — 1 year" row became "service usage records · connection IP information — 3 months" (ADR 045), and because the server writes those records to daily files and itself deletes files older than 90 days, it became a true row from the start. The one remaining promise is payment records — 5 years. There are still 8 rows. ~~⚠️ The denominator is still 7. Spec 027 added no new kind of deletion — splitting a row to count 8 would break the count Spec 025 was approved on.~~ 🔺 2026-09-25 · 009C — the denominator went from 7 to 8. No existing row was split; a new record with its own retention period (1 year from when handling was finished) came into being. That Spec 027 added no new kind of deletion is still true.

⚠️ This does not mean "the deletion work is done, so we may publish." Two rows are still promises, and they were left unbuilt only because there is currently nothing to delete. The moment a subject appears (hosting, paid services) those rows become false immediately. This is structurally the same failure we already had with the location and marketing consent items — consent collected for something that did not exist. ⚠️ And even the 6 enforced rows do not delete anything by themselves. The deletion command must be run with its explicit "actually delete" flag, or the server's scheduled run must be switched on; both default to deleting nothing. Anonymisation happens only inside that same command — if nobody runs it, nothing is anonymised either. ⚠️ Remove this block only when the remaining 2 rows have become facts. 🔺 2026-09-27 · Spec 065 — the one remaining promise is payment records. The "server hosting" row above (operational logs) became a fact once the server started deleting those records itself after 90 days. Keep this block until the payment records row is a fact.

This matters more in the United States than in Korea. Several state privacy laws treat a materially inaccurate privacy notice as a deceptive practice in its own right, enforceable by the state attorney general and, in California, by regulation. Five rows of the retention section are now facts; two are still promises. Sources: docs/개인정보-대장.md §4-1 · Spec 025 §7-1 · Spec 027 §7-1 · the remaining work is item C15 in SPEC-PLAN.md.

⚠️ This version is written for the United States only

This English version is prepared on the basis of United States law. Users in the United Kingdom or the European Union are subject to UK GDPR / GDPR, which require additional disclosures not covered here — a separate version is required.

The disclosures missing for UK/EU users include, at minimum: a lawful basis for each processing purpose, the identity of a representative in the UK/EU, international transfer safeguards, the right to data portability, the right to object, rights relating to automated decision-making, and the right to lodge a complaint with a supervisory authority. None of that is in this document.

ADR 011 named the target market only as "English-speaking countries" and never narrowed it further. Which countries that phrase covers is still an open question.

⚠️ There is no single United States privacy law

The United States has no general federal privacy statute. Obligations come from a patchwork of state laws — California (CCPA as amended by CPRA), Virginia, Colorado, Connecticut, Utah, Texas and a growing number of others — plus sector-specific federal laws such as COPPA for children. Which rights you actually have depends on the state you live in, and the list of states changes every year.

We have written Article 10 to give every user the same set of rights, rather than tracking each state separately. That is the simpler and more protective approach, but it has not been checked against any individual state's requirements, and some states impose procedural duties (such as a formal appeals process) that this draft does not yet describe in full.

Linked consent record: legal_terms.key = privacy_policy (required consent) Source of record: docs/개인정보-대장.md — the data listed in this policy corresponds one-to-one with the 129 items that data actually flows into today in that inventory. 🔺 2026-08-10 — spec 023 raised that count from 51 to 56. The five additions are the applicable country (jurisdiction), the basis on which it was determined, and when it was determined (Article 2-3), plus the applicable country now recorded alongside each consent record and each consent history entry. 🔺 2026-08-15 — spec 007 raised that count from 56 to 63. All seven additions belong to the plan participant roster — which plan · who is on it · their role in that plan · the state of their invitation · whether they confirmed attendance · when they were added to the roster · when they answered the invitation (Article 2-3 and the "Providing the plans feature" row of Article 4). Collecting something without writing it down is an omission, so this policy was updated in the same change that created the roster. 🔺 2026-08-15 — spec 008 raised that count from 63 to 67. All four additions belong to invite links — which plan the link is for · who created it · the value used to match the link's secret · when the link was created (Article 2-3 and the "Providing the plans feature" row of Article 4). ⚠️ This spec also widened, for the first time, who can see what. Someone who receives an invite link is not yet a participant, yet they can see the plan's title, place and time, the creator's display name, and how many people are on it. Article 5 was rewritten accordingly. That is the whole of it — the participant list itself is not shown. ✅ Three things invite links did not add: which link someone came in through · when and where a link was opened (access logs) · why a join was refused. None of them exist, so the Article 6 table still has 7 rows. 🔺 2026-08-16 — spec 028 widened Article 5 a second time, and Article 5 is the only article that spec changed. Someone holding an invite link now includes a person who is not yet a member (someone who has never signed up and so has never agreed to this policy), and that person is not shown any profile picture. ⚠️ The count stays at 67 and Articles 2, 3, 4 and 6 are unchanged to the letter — no personal information is newly collected (no new tables, no new columns, and the invite secret held during sign-up is never stored on our servers · ADR 021). Rate limiting counts per link only and reads no IP or device, so Article 3 remains true. ⚠️ Widening Article 5 is exactly the kind of change a lawyer must review. It lets a person who has never agreed to any terms see a third party's display name, and this draft has had no legal review (see LEGAL-UNREVIEWED above · SPEC-PLAN C11). 🔺 2026-08-17 — spec 012 raised that count from 67 to 69. Both additions belong to block records — who blocked · who was blocked (Article 2-3 and the "Blocking people you do not want in your plans" row of Article 4). ⚠️ We do not collect when a block was made, when it was lifted, or why — there is no column to hold any of them. ✅ Blocking widens nothing, so Article 5 is unchanged to the letter — blocking narrows what is visible (people you block disappear from each other's "people you have met" list). The Article 6 table also still has 7 rows, because a block record disappears together with the account and has no retention period of its own. ✅ Three things blocking did not add: when you blocked · when you unblocked · why you blocked. None of them have a place to be stored, and the blocked person is never notified. 🔺 2026-08-19 — spec 009 raised that count from 69 to 73. All four additions belong to conversations inside a plan — which plan the message belongs to · who wrote it · the message text · when it was sent (Article 2-2 and 2-3, and the "Providing the plans feature" row of Article 4). ⚠️⚠️ This is the first time the Service stores a sentence a user wrote. A message is free text: whatever you type is stored exactly as you typed it, and we say so in Article 2-2 in the same way we say it for a plan's place. ⚠️ It also widened who can see what — message text is visible to the other participants in the same plan. Article 5 was updated accordingly. Someone who only holds an invite link cannot see it (see the table in Article 5). ✅ Four things conversations did not add: who read a message and when (read receipts) · unread counts · any history of edits or deletions · any connection or device details. None of them have a place to be stored. Article 3 did not change by a single word. ✅ A conversation belongs to its plan. When the plan is deleted, its messages are deleted with it (they follow the "Plan data" row in Article 6 and have no separate retention period). So the Article 6 table still has 7 rows. 🔺 2026-08-20 — spec 009B raised that count from 73 to 78. The five additions are three that make up the notice a plan leaves in its conversation when it changes and two that record how far you have read — what happened · the values that came with it · who did it · how far you have read (time) · how far you have read (message number) (Article 2-3, and the "Providing the plans feature" row of Article 4). ⚠️ "Who did it" holds an account number, not a name, and the field is cleared if that person closes their account — exactly as Conversation — who wrote it already works. 🔺 2026-08-20 — spec 010 raised that count from 78 to 82. All four additions are reactions placed on a message — which message · who reacted · what they chose · when they reacted (Article 2-3, and the "Providing the plans feature" row of Article 4). ⚠️ "What they chose" is not a free-text field — only one of six fixed choices is stored, which makes it different in kind from message text. ⚠️ The range of "who can see it" widened as well — which message you reacted to, and with which emoji, is visible to the other participants in the same plan. We amended Article 5 accordingly. ⚠️ Reactions from someone you have blocked are left out of the count, so the same message can show a different count to different people — that is the result of blocking, not an error. ✅ Three things reactions did not create: a channel for reporting a reaction · emoji outside the six · a history of edited reactions. We built neither the fields nor the paths for any of them. Article 3 is unchanged, to the letter. 🔺 2026-08-29 — this line used to read "four", and the first item was a list of names of who reacted; spec 010B built it, so the count is now three (see the 2026-08-29 entry below). ⚠️ Left as it was, this policy would claim we did not build something we did build. ✅ A reaction belongs to both the message and the account. It is deleted with the message when the plan is deleted, and if the person who reacted closes their account, the reactions they placed are deleted with it. So the table in Article 6 still has 7 rows and no row was added to Article 7 (processing entrusted to others). ⚠️ Whether a reaction counts as "Content" under the Terms of Service was not decided in this spec. Spec 010 did not change a single character of the three Terms documents. That determination needs legal review (SPEC-PLAN C11; see LEGAL-UNREVIEWED at the top of this document). ⚠️ It also widened who can see what — and this time in a different direction. Someone who leaves a plan, or is removed from it, is no longer a participant in it, yet their display name stays visible to the participants who remain, in the notice that announced it. The older sentence ("people taking part in the same plan") does not cover that case, so we added a line to Article 5. ✅ Three things notices did not add: the content before and after a change (the old title, place or time) · who read a message and when (read receipts) · a separate table for notices. None of them have a place to be stored. Article 3 did not change by a single word. ✅ Both a notice and "how far you have read" belong to the plan. A notice sits in the same place as the conversation, so it is deleted when the plan is deleted; how far you have read sits on one row of the participant roster, so it disappears with that row when you leave. So the Article 6 table still has 7 rows and no row was added to Article 7 (processors) either. ✅ We run the real-time delivery software ourselves — it is not handed to another company, so no row was added to Article 7 (processors). ⚠️ We have not confirmed that this reading is correct as a matter of law — it needs legal review (SPEC-PLAN C11), and this draft has not had it (see LEGAL-UNREVIEWED at the top). 🔺 2026-08-21 — spec 016A rewrote the "Device identifier" line in Article 2-3, and that line is the only thing this spec changed in this policy. Before 016A the app invented a new device identifier every time it started, which is why this policy carried a sentence saying the value was created afresh on each launch. 016A made the app keep that value in the device's secure storage, so the sentence stopped being true — and we do not leave an untrue sentence standing, so all three language versions were corrected in the same piece of work. ⚠️ Why we made it persist: under the old behaviour, signing out sent the name of a device that had never existed, so the sign-in key on the server was not actually revoked. Keeping the value on the device is what makes a sign-out really end the session, and it stops the device record from growing by one row on every sign-in. ✅ 016A collects no new personal information — no new tables, no new columns, no migrations, and the item count stays at 82. No new consent is taken, the deletion table in Article 6 still has 7 rows, and no row was added to Article 7 (service providers). ⚠️ The retention period for the 8 devices columns is still undecided — 016A did not decide it (deciding it would make Article 6 an 8-row table). ⚠️ What changed is not what we collect but what kind of value it is. The purpose is unchanged — managing your sign-in state across your devices and knowing where to send notifications — and we do not use it for advertising or tracking and do not hand it to anyone outside the company. The moment we go beyond that, this policy becomes untrue again. ⚠️ Whether a value that now persists on the device counts as a "persistent identifier" is a question for legal review (SPEC-PLAN C11; see LEGAL-UNREVIEWED at the top of this document). ✅ 016A did not change a single character of the three Terms of Service documents. In particular, Article 8(2) of the Terms ("there is no account deletion menu inside the app at present") remains true — 016A did not add any way to delete an account to the settings screen. 🔺 2026-08-22 — spec 011 raised that count from 82 to 88. All eight additions belong to the change history of a plan — which plan it happened on · who did it · who it was done to · what happened · when it happened · which field changed · the value before · the value after (Article 2-3, and the "Providing the plans feature" row of Article 4). ⚠️ "Who" and "to whom" hold account numbers, not names; if that person closes their account those fields are cleared while the history row itself remains — exactly as Conversation — who wrote it already works. ⚠️ 009B listed "the content before and after a change" among the things it did not build; spec 011 built it. It is not inside the conversation, however — the notice left in the conversation still does not carry those values, and a separate change history carries them. ⚠️ Editing a plan therefore leaves the old title and the old place standing in that history. ⚠️ Who can see what did not widen — but one line 009B already widened now covers one more place. The display name of someone who left a plan, or was removed from it, now stays visible in the change history as well as in the conversation notice. We widened that existing line of Article 5 rather than adding a new one. ✅ Five things the change history did not add: a field holding a name · a field holding a finished sentence · an invite link address or its secret · a record of turning attendance on and off · a record of declining an invitation. None of them have a place to be stored. Article 3 did not change by a single word. ✅ The change history belongs to its plan. When the plan is deleted, the history is deleted with it (it follows the "Plan data" row in Article 6 and has no separate retention period), so the Article 6 table still has 7 rows and no row was added to Article 7 (processors). Spec 011 did not change a single character of the three Terms of Service documents. 🔺 2026-08-29 — spec 010B widened Article 5, and Article 5 is the only article this spec changed. Pressing the reaction count under a message now shows who pressed that reaction — their display name and profile picture — and when they pressed it, to the other participants in the same plan. ⚠️ No new personal information is collected and the item count stays at 88 — no new tables, no new columns, no migrations. Two fields we already held, Reaction — who reacted and Time of the reaction (Article 2-3), leave our servers for the first time, and what widened is who can see it, not what we collect. ⚠️⚠️ That is why we rewrote the ✅ line dated 2026-08-20 — the first of the "four things reactions did not create" was a list of names of who reacted, and 010B created it. That line now reads three, and the remaining three (a channel for reporting a reaction · emoji outside the six · a history of edited reactions) are still true. ✅ 010B created no new place to hold anything — the table in Article 6 still has 7 rows, no row was added to Article 7 (processors) (we added no outside service), and the three Terms of Service documents are unchanged, to the letter. ⚠️ Someone you have blocked does not appear in that list either — exactly the same range as being left out of the count — and the app does not say on screen that anyone was left out (saying so would reveal that a block exists). ⚠️ Widening Article 5 is a place a lawyer must look at again — this time participants come to see each other's display names and the times they pressed. This draft has still not had legal review (see LEGAL-UNREVIEWED at the top of this document and SPEC-PLAN C11). We deleted none of those markers. 🔺 2026-09-25 · Spec 009C raised the item count from 107 to 129. The twenty-two new items are eight in report records (who reported · the reported message · the reported person · reason · description · handling status · when it was reported · when handling was finished), nine in moderation records (what was done · who did it · which report it followed · which message · whom it concerned · reason · operator note · hiding period · when it was done), three on a message's state (its current state · when hiding ends · when the state last changed) and two on a notification (the moderation outcome and its reason) (Article 2, 2-3 · Article 4 "Handling reports and moderating content"). ✅ The person who reported is never revealed to the person reported — see Article 5. The table in Article 6 went from 7 rows to 8 — report and moderation records belong neither to a plan nor to an account and have their own retention period (1 year from when handling was finished). Article 3 and Article 7 (processors) are unchanged to the letter — these records hold no connection address or device information, and nothing is entrusted to an outside company. ✅ The two sentences in Article 2 saying a sent message or picture could never be deleted were rewritten to match the facts — the sender can now delete their own messages and pictures (editing still does not exist). 🔺 2026-09-27 · Spec 065 · ADR 045 — the server now keeps a "service usage record" and your "connection IP address" for every request. So the "IP addresses" and "Access logs" rows were removed from Article 3, "Information collected automatically" was added under Article 2-3, one purpose row was added to Article 4, and the Article 6 "operational logs — 1 year" row became "service usage records · connection IP information — 3 months" (still 8 rows). ⚠️ The 008 and 028 notes above — we did not create "when and where a link was opened (access logs)" and "Article 3 is still true because we read no IP or device" — were true at the time. Opening a link is now recorded like every other request, as one service usage record kept for 3 months (the link's secret is not written). The burst limit still does not use IP addresses. ✅ These records live in the server's log files, not in the database, so they are not counted in the item count at the top (129) — that number is tied to the database columns in the personal data ledger. The Terms of Service did not change by a single character. ⚠️ We have not checked whether the law requires keeping these records, whether they may be collected without consent, or whether they fall under access requests — this is an internal review, not a lawyer's (ADR 041 · ADR 045).


Placeholders — this document cannot be published until these are filled in

The placeholder names below are deliberately left in Korean and are identical across the Korean, English and Japanese versions. Do not translate them. If the names differ between versions, whoever fills them in will miss one.

PlaceholderWhat it isWho decidesNotes
{상호}Legal name of the company or sole proprietorUser✅ Decided 2026-09-25 — 씨엔홀릭 (applied in the body)
{문의 이메일}Address for enquiries, complaints, and access and deletion requestsUser⚠️ Account deletion moved into the app on 2026-08-22 and access and copies on 2026-08-28 (Article 10(2)); only partial deletion still arrives here. ⚠️ For anyone who cannot sign in, this address is also the only route to closing an account ✅ Decided 2026-08-22 — help@timingle.app (applied throughout)
{보호책임자 성명}Name of the person accountable for personal data — for a sole proprietor, the ownerUserA Korean statutory requirement (PIPA art. 30(1)6 · art. 31(2)). 🔺 2026-09-25 · ADR 041, decision 6 — the representative's name, business address, business telephone and the officer's title, email and telephone placeholders were removed: not legally required while the Service is free, and we keep the owner's personal details to the minimum. The single contact is help@timingle.app (Article 12) ✅ Decided 2026-09-25 — 김신정 (applied in the body)
{클라우드 업체}The company that will host our servers and databaseUser✅ Decided (reflected 2026-09-25) — we run the servers ourselves in the Republic of Korea (ADR 026). 🔺 2026-09-25 · spec 002B — the placeholder is gone from the Article 7 table, replaced by the sentence above the table (run ourselves, Republic of Korea) and the NAVER Cloud row (applied in the body)
{리전}The region our servers and database will sit inUser✅ Republic of Korea (ADR 026)
{백업 보관 위치}Where backups are storedUser✅ NAVER Cloud Corp. · Republic of Korea · deleted automatically after 14 days (ADR 027). Not a cross-border transfer
{시행일}Date this policy takes effectUserMust match legal_terms.effective_at ✅ Decided 2026-09-25 — 2026-11-01 (applied in the body) ⚠️ The DB seed still says 2026-01-01 (migration 002) — aligning it is a follow-up spec
{공고일}Date this policy was first announcedUser✅ Decided 2026-09-25 — 2026-10-01 (applied in the body)

Note on the 보호책임자 placeholder

Korean law requires a named, publicly identified officer accountable for personal data; for a sole proprietor that is the owner. US law generally does not require an equivalent role to be published, although naming a contact is normal practice and helps users exercise their rights. Since 2026-09-25 only the name remains as a placeholder; the contact address is help@timingle.app in every version (ADR 041, decision 6).

⚠️ Why {클라우드 업체} and {리전} matter so much

🔺 2026-09-25 — settled: we run the servers ourselves in the Republic of Korea, and only encrypted backups go to NAVER Cloud, also in Korea. Neither of these is a cross-border transfer. 🔺 The owner confirmed Cloudflare on 2026-09-25 — a processor row and a "Cross-border transfer" section were added to Article 7 under Korea's PIPA art. 28-8(1)3 (disclosure in this policy, no separate consent — ADR 041, decision 3). Actually attaching it is TODO B-4. 🔺 2026-09-25 · spec 002B replaced the placeholder row in the Article 7 table with the NAVER Cloud row.

Why these two values mattered: where the servers sit decides what this policy must disclose. For a US audience several states require a privacy notice to disclose the categories of recipients, and if data about US users is stored outside the United States, users reasonably expect to be told — it is: our servers are in the Republic of Korea (Article 7). If the servers move or a new provider is engaged, Article 7 must be updated again.

⚠️ Because the servers are in Korea, the Korean-version obligations attach to US users' data as well. That direction has not been analysed.

Not placeholders, but check these before publishing

ItemCurrent status
Minimum ageThis version uses 14. COPPA covers children under 13, so our floor sits above it — but see Article 8, which explains why that alone is not a compliance answer.<br>🔺 2026-08-10 — spec 023 made the server's minimum signup age a per-country value. Korea is 14; a country we have not registered gets 16. ⚠️ The United States is not an open jurisdiction today — no US terms and no US age row exist, so US devices are stopped before the consent screen. The number in this draft must be confirmed per state/country by counsel (C11) before this version is used anywhere.
Article 9 (payments)Written conditionally, as "if you use a paid service". There is no payment functionality today. It must be checked against the real implementation when payment work begins
Article 6 retention periods🔺 2026-08-11 · Spec 025 + 🔺 2026-08-15 · Spec 027 + 🔺 2026-09-25 · Spec 009C — of the 8 rows, 6 are now enforced by code (terminated accounts 30 days · consent history 5 years · expired sessions 30 days · date-of-birth change attempts 90 days · plan data — deletion by 025, anonymisation by 027 · report and moderation records 1 year — 009C), 0 are half and 2 are still promises (operational logs · payment records). See the warning above. 🔺 2026-09-27 · Spec 065 — the operational logs row became "service usage records · connection IP information — 3 months" and is now a fact (the server deletes files older than 90 days) — 7 facts · 1 still a promise (payment records)
State-by-state rightsArticle 10 gives everyone the same rights instead of splitting by state. Not verified against any individual state law

Article 1. About This Policy

씨엔홀릭 ("we", "us", or "the Company") takes your privacy seriously.

This Privacy Policy explains, for timingle ("the Service") — which we provide as a mobile app and in a web browser — what personal information we collect, what we use it for, how long we keep it, and when we delete it.

Article 2. What Personal Information We Collect

We collect only what we need to run the Service. What we collect falls into three groups, depending on how it reaches us.

2-1. Information Google or Apple sends us automatically when you sign in

When you sign in with a Google or Apple account, that company passes us the following.

ItemDescription
Name (display name)The name shown in the Service
Email addressIf you use Apple's "Hide My Email", we receive a relay address Apple generates instead of your real one, or no address at all
Profile picture URLOnly when you sign in with Google does it arrive by this route. Apple does not provide a profile picture. 🔺 2026-08-26 — spec 017A: a picture you upload yourself also lands in this same field (see 2-2). Once you upload one, the URL Google gave us is replaced by an address pointing at the picture stored on our server; until then the URL from Google stays as it is
Which provider you usedGoogle or Apple
The account identifier the provider assigned youA unique number Google or Apple attaches to you. We use it to recognise you as the same person the next time you sign in

2-2. Information you enter yourself

ItemDescription
Date of birthYou enter it yourself at registration. We do not pre-fill it from your social account
Plan titleFree text, up to 100 characters
Plan placeFree text, up to 200 characters. We do not store coordinates or map data — only the text you typed
Plan start time, end time, and time zoneThe end time is optional
Message textWhat participants write to each other inside a plan. Free text, up to 2,000 characters per message. We store exactly the characters you typed
Pictures sent in a conversationPicture files a participant sends inside a plan (one at a time, up to 10MB, JPEG or PNG). 🔺 2026-08-26 — spec 017A. We do not keep the file you sent: we redraw the pixels and store only that — so the shooting information a camera writes into a photo (EXIF: the coordinates of where it was taken, the camera, the time, the owner's name, the embedded thumbnail) is not present in the stored file at all (see Article 3)
Profile pictureA picture file you upload yourself from "My information" (up to 5MB, JPEG or PNG). 🔺 2026-08-26 — spec 017A. It goes through exactly the same redraw as a conversation picture, so no shooting information survives. When you upload a new one, the previous file is deleted rather than kept
Repeat settingsThe values stored when you set a plan to repeat — "every Tuesday at 7pm, 12 times": how often (weekly, every other week, monthly) · which days of the week · how it ends (a number of occurrences or a date) · how many occurrences · until when. Five items. 🔺 2026-08-27 — spec 018A. ⚠️ These values describe a pattern of your life — "this person does something every Tuesday evening". If you do not set a plan to repeat, nothing is stored here at all

✅ Repeat settings are not a free text field. 🔺 2026-08-27 — spec 018A: you pick from fixed choices, so nothing you typed is stored verbatim, and one repeating plan may hold between 2 and 52 occurrences. ⚠️ Repeat settings cannot be changed afterwards — the only route is to cancel the remaining occurrences and create a new plan. ⚠️ The plan place is a free text field. If you type something sensitive, such as your home address, it is stored exactly as you typed it. Please enter only what you need to. ⚠️ Message text is a free text field too. If you type something sensitive, such as a phone number or an address, it is stored exactly as you typed it and it is visible to the other participants in the same plan (see Article 5). Please enter only what you need to. ⚠️ The sender can delete their own messages and pictures, but cannot edit them. 🔺 2026-09-25 — spec 009C: once deleted, a message disappears from the screens of all participants in the plan, leaving only a "deleted message" mark, and for a picture the picture file on our server is deleted too. However, it stays in our encrypted database backups for up to 14 days before being removed automatically (Article 7). ⚠️ Messages in a plan you have already left cannot be deleted in the app — please ask us at help@timingle.app. A message you do not delete disappears when the plan itself is deleted (Article 6). ⚠️ Pictures follow the same rule as messages. 🔺 2026-08-26 — spec 017A: if a picture shows a face, or a recognisable place near your home, the other participants in the same plan see it exactly as sent (see Article 5). Please send only what you need to. ✅ Pictures are kept only on servers we run ourselves in the Republic of Korea. We use no outside picture-hosting service, so Article 7 (processors) gains no row for pictures. Like all other traffic, however, pictures travel between your device and our servers through Cloudflare, described under "Cross-border transfer" in Article 7 (it relays them and does not keep them).

2-3. Information created and recorded automatically as you use the Service

ItemDescription
Account identifierThe internal number the Service assigns you
Account statusActive / suspended / deleted
Language settingWhich language we show the Service in
Time you registered, completed registration, and terminated your agreement
Time you signed in, last connected, and signed out
Device identifierA value the app generates and keeps on that device. It differs from device to device, stays the same when you close and reopen the app or the browser, and is created anew if you delete the app or clear the data your browser has stored. We use it only to manage your sign-in state across your devices and to know where to send notifications, and we do not use it for advertising or tracking and do not hand it to anyone outside the company
Device typeiOS, Android, or a web browser
The device's language settingRefreshed at each sign-in
When a device was first registered, and when it last signed in
Push notification tokenThis value is not currently stored. 🔺 2026-08-25 — spec 014A added an in-app notification inbox, but that inbox does not use this value. This value is only used for notifications that appear on your lock screen without opening the app, and we have not built that yet. We will update this policy before we start using it
Applicable country (jurisdiction)Which country's terms and which country's minimum signup age we apply to you. We do not ask you for this — we read the country setting your phone already reports
Basis for the applicable countryWhat we looked at when we decided it. Today the only value is "the device's country setting"
Time the applicable country was decidedWhen we decided it, so that a wrong determination can be traced back later
Consent recordsWhich version of which consent item you agreed to — and for which country's terms — whether you agreed or declined, and when
Consent historyA record written whenever consent is given, declined or withdrawn. The country whose terms it relates to is recorded with it. This record is designed so that it cannot later be altered or deleted (see Article 6)
Date of birth change attemptsWhich device, which account, when, and the outcome. This exists to stop people evading the age limit
Plan creation time, deletion time, and plan status
Plan — which repeat series it belongs toWhich repeating series a single occurrence belongs to. 🔺 2026-08-27 — spec 018A. For a plan that does not repeat this is empty
Plan — its position within that seriesThe value behind "3/12" on screen, and the one that decides where "this and all following" starts when you edit or cancel. 🔺 2026-08-27 — spec 018A
Plan — which plan it was cloned fromWhich past plan a new plan was made from, when you create one by copying a finished plan. 🔺 2026-08-27 — spec 018B. For a plan that was not cloned this is empty. If the original plan is deleted this field is cleared and the new plan stays
Plan participant roster — which planWhich plan a roster entry belongs to
Plan participant roster — who is on itThe account identifier of a user on that plan
Role in the planWhether the person created the plan (host) or was invited to it (guest)
State of the invitationWhether they are still to answer, or have joined
Attendance confirmationWhether they have marked that they will actually attend. They can set and unset it
Time added to the rosterWhen they were invited. For the person who created the plan, this is when the plan was created
Time they answered the invitationEmpty until they answer
Invite link — which plan it is forWhich plan a link belongs to
Invite link — who created itThe account identifier of the user who made the link. If they close their account this field is cleared, and the link itself survives as long as the plan does
Invite link matching valueThe secret at the end of a link address, converted into a form that cannot be turned back. We do not store the secret itself; we use this only to match an address we receive against a link
Time the invite link was createdUsed to show when a link was made and how long it can still be used
Block record — who blockedThe account identifier of the user who blocked. The blocker is always you; there is no way to block in someone else's name
Block record — who was blockedThe account identifier of the blocked user
Conversation — which plan it belongs toWhich plan a message belongs to. We do not create a separate "chat room": the plan itself is the unit of conversation
Conversation — who wrote itThe account identifier of the user who wrote the message. If they close their account this field is cleared and the message itself remains (see Article 6)
Time a message was sentThe time our server stored it. We do not accept a clock value from your device
Record of a change to a plan — what happenedWhich of eight things happened: the plan was edited, confirmed, cancelled or completed, or someone accepted an invitation, joined by link, left, or was removed. It is not a finished sentence but a marker pointing at one of the eight; the sentence you see on screen is built by the app in your device's language
Record of a change to a plan — the values that came with itThe values kept alongside that event. All we store today is the names of the fields that changed (title, place, time); we do not store the content before or after the change
Record of a change to a plan — who did itThe account identifier of the user who did it. It is an account number, not a name, and if that person closes their account this field is cleared while the notice itself remains (see Article 6)
How far you have read — timeHow far into a plan's conversation you have looked, as a time. We use it only to count how many messages you have not read. ⚠️ There is one per person, not one per device
How far you have read — message numberThe other half of the same field. A time alone cannot separate messages stored in the same instant, so the two are kept together
Reaction — which messageWhich message a reaction line is attached to
Reaction — who reactedThe account identifier of the user who reacted. ⚠️ If that person closes their account the field is not cleared — the reaction row itself is deleted, the exact opposite of "Conversation — who wrote it" (see Article 6)
Reaction — what they choseOne of six fixed choices (like, love, laugh, celebrate, wow, sad). ⚠️ It is not a free-text field, and values outside the six are never stored
Time of the reactionWhen that user pressed that reaction
Change history — which planWhich plan a history row belongs to
Change history — who did itThe account identifier of the user who did it. It is an account number, not a name, and if that person closes their account this field is cleared while the history row itself remains (see Article 6)
Change history — who it was done toThe account identifier of the person who was invited or removed. It is an account number, not a name, and this field is cleared too if that person closes their account, while the history row itself remains (see Article 6). ⚠️ For events with no counterpart (creating or editing a plan) it is left empty
Change history — what happenedWhether the plan was created, edited, confirmed, cancelled or completed; whether a participant was invited, accepted an invitation, joined by link, left, or was removed; whether an invite link was created or revoked. It is not a finished sentence but a marker pointing at one of twelve fixed values; the sentence you see on screen is built by the app in your device's language
Change history — when it happenedThe time our server recorded the event. We do not take the clock value from your device
Change history — which field changedWhen a plan is edited, which of five fields changed: title, start time, end time, time zone, place. ⚠️ Nothing outside those five is ever stored — we closed off any path for a value naming a person to land in this field
Change history — the value before⚠️ The old title or the old place, exactly as the user typed it. Editing a plan leaves the old value standing in the history
Change history — the value afterThe other half of the same pair: the title, place or time after the edit
Notification — whose inbox it belongs toWhich user's notification inbox the line is placed in. It is an account number, not a name, and if that person closes their account their whole inbox is deleted (see Article 6)
Notification — which plan it is aboutWhich plan the event happened in. Tapping the line opens that plan
Notification — who caused itThe account identifier of the user who did it. It is an account number, not a name, and if that person closes their account this field is cleared while the notification row itself remains (see Article 6)
Notification — what happenedWhether a plan was cancelled, edited or confirmed; whether an invitation arrived; whether an invitation was accepted or declined; whether someone was removed; whether someone joined through a link; whether an invite link was revoked; whether the person who created the plan left. It is not a finished sentence but a marker pointing at one of eleven fixed kinds; the sentence you see on screen is built by the app in your device's language. 🔺 2026-09-25 · Spec 009C — two kinds were added, making thirteen: "my message was hidden or deleted" · "a report I made was handled". ⚠️ These two cannot be switched off in the notification settings, and their "who caused it" field is always empty — so that the person who reported is never revealed
Notification — when it arrivedThe time our server recorded the notification. We do not take the clock value from your device
Notification — when it was readThe time you read that notification. If it is empty the notification is unread, and we use it to show the unread count to you only
Notification settings — whether each kind is receivedWhether plan notifications, people notifications and invite-link notifications are received, one switch each. Turning one off means that kind does not pile up inside the app either
Notification settings — when they were last changedThe time you last changed those settings. For someone who has never changed them this row is not created at all — having no row means everything is on
Uploaded picture — who uploaded itThe account identifier of the user who uploaded a picture. It is an account number, not a name, and if that person closes their account every picture they uploaded — profile picture and conversation pictures alike — is deleted down to the file (see Article 6)
Uploaded picture — where the file sitsThe name of the place the picture file occupies on our server. We build that name ourselves and use no part of the file name you gave — a file name can carry a person's name — and we do not store the name of the file you uploaded
Uploaded picture — when it was uploadedWhen that picture was uploaded
Message — which picture it carriesWhich picture a message line is attached to. If the picture is deleted this field is cleared and the message itself remains, and the screen shows a "deleted picture" placeholder (see Article 6)
Message — its current state🔺 2026-09-25 · Spec 009C. One of normal · hidden · deleted by the sender · deleted by an operator, together with when hiding ends (hidden messages only · at most 30 days) and when the state last changed. A deleted message has its text and picture emptied at once; only the sender, the time it was sent and the fact that it was deleted remain
Report records🔺 2026-09-25 · Spec 009C. Who reported (account identifier · empty for reports received by email) · what was reported (the reported message, or the account identifier of the reported person) · reason (one of five fixed reasons) · description (optional · up to 300 characters · a free-text field) · handling status (waiting · acted on · closed) · when it was reported · when handling was finished. We do not copy the text or picture of the reported message
Moderation records🔺 2026-09-25 · Spec 009C. What we did while handling a report — what was done (hide · unhide · delete · close · automatic hiding · hiding period ended · profile picture removed · account terminated) · who did it (the operator's name · "system" when automatic) · which report it followed · which message · whom it concerned (account identifiers) · reason · operator note · hiding period · when it was done. Once written, a row cannot be edited, even by us
Notification — moderation outcome and reason🔺 2026-09-25 · Spec 009C. Held only in a "my message was hidden or deleted" notification: whether it was hidden or deleted and the reason (one of five fixed reasons). Nothing that points at the person who reported is stored

Information collected automatically — service usage records and connection IP address 🔺 2026-09-27 · Spec 065

① While you use the Service, the following information may be generated and collected automatically.

  • Service usage records: account identification number, date and time of the request, type of request, feature used, processing result
  • Connection information: connection IP address

② This information does not include the content of posts, the content of conversations, sign-in credentials, or device information.

✅ Requests made without signing in carry no account identification number. The purposes are in Article 4 and the retention period and deletion in Article 6. ⚠️ Unlike the table above, this information is kept in the server's log files, not in the database. It is therefore not counted in the item count at the top of this policy.

✅ Report and moderation records belong neither to a plan nor to an account. 🔺 2026-09-25 · Spec 009C — they are kept for 1 year from when handling was finished and then deleted (Article 6), and reports not yet handled are never deleted. If the account or the plan is deleted first, the record remains and only the field that pointed at that person or message is cleared. ⚠️ A report's description is a free-text field. Please write only what is needed to judge the report. We do not write this description into our server's operational logs.

⚠️ A "record of a change to a plan" is a notice we generate, not something a user wrote. It is a single line the app draws to say what happened — "the host changed the time" — and it sits in the same place as the conversation. ⚠️ We do not store the content before or after the change (the old title, place or time): storing it would copy free text a user typed into the conversation a second time, and that copy would survive later edits to the plan. 🔺 2026-08-22 — spec 011 created a place for those values outside the conversation — the eight "Change history" rows in the table above — and the notice left in the conversation still does not carry them. ✅ A notice belongs to its plan too. When the plan is deleted, the notice is deleted with it (it follows the "Plan data" row in Article 6 and has no separate retention period), and how far you have read hangs off the participant roster, so it disappears with that row when you leave the plan. ✅ We did not build read receipts — who read this message and when. All that is kept is one "how far have I looked" per person, and other participants cannot see it; we use it only to show you your own unread count.

⚠️ A notification is visible only to the person who received it. We built no screen and no path that shows who received what notification to anyone else — this is where notifications differ from conversation notices and plan change history, which are visible to every participant of that plan (see Article 5). ✅ A notification holds no name, no finished sentence, and no copy of the plan title. We built no field for any of them — the sentence you see is composed by the app in the reader's own language each time. ✅ A notification belongs to both the plan and the account. When the plan is deleted, the notifications about that plan are deleted with it (the "Plan data" row in Article 6), and if you close your account your whole inbox and your notification settings are deleted (the "Account information" row in Article 6). Neither has a retention period of its own. ✅ Notifications you had switched off are not created later when you switch them back on. While a kind is off we do not create the row at all. ✅ Messages do not create notifications. Unread messages are still counted only on the conversation side, and nothing piles up in the notification inbox.

✅ Repeat settings belong to the plan as well. 🔺 2026-08-27 — spec 018A: once no occurrence of a series is left, the repeat settings of that series disappear with them (they follow the "plan data" row of Article 6 and have no retention period of their own). So the table in Article 6 stays at seven rows and Article 7 (processors) gains no row. ⚠️ An uploaded picture belongs to both the plan and the account. 🔺 2026-08-26 — spec 017A: when the plan is deleted, the picture files in that plan's conversation are deleted with it (the "Plan data" row in Article 6), and if you close your account your profile picture and every picture you sent into a conversation are deleted down to the file (the "Account information" row in Article 6). Neither has a retention period of its own. ✅ We store neither the width and height of a picture nor the name of the file you uploaded. We built no field for either. ⚠️ If a picture file cannot be deleted we do not record that erasure as successful; the next run tries again. This is to stop a file surviving on our server while the record says "deleted."

⚠️ The change history records what became what. It sits in a different place from the notice left in the conversation (the three "Record of a change to a plan" rows above), and it carries the values before and after that the notice does not. ⚠️ Once a row is written we cannot alter it — a record of edits that can itself be edited means nothing. ✅ The change history belongs to its plan. When the plan is deleted, the history is deleted with it (it follows the "Plan data" row in Article 6 and has no separate retention period). ✅ Turning attendance on and off, declining an invitation, messages and reactions are not written to the history. We built no place to hold them — doing so would pile up "when did they change their mind" and add one more piece of personal information. ✅ We built no field holding a name, no field holding a finished sentence, and no field holding an invite link address or its secret.

⚠️ A reaction is one of six fixed choices. It is not a field you type into but a choice among like, love, laugh, celebrate, wow and sad, and nothing outside those is stored. What stays on screen is a count per emoji and whether you pressed it yourself — nothing more. ✅ We did not build a list of names of who reacted. The account identifier is stored, but there is no screen and no path that turns it into a name. ✅ A reaction belongs to both the message and the account. It is deleted with the message when the plan is deleted (the "Plan data" row in Article 6), and if the person who reacted closes their account, the reactions they placed are deleted with it (the "Account information" row in Article 6). Neither has a retention period of its own.

⚠️ An invite link belongs to its plan. When the plan is deleted, its links are deleted with it (they follow the "Plan data" row in Article 6; they have no separate retention period). ✅ We do not store which link someone came in through. A person who joins by link appears on the roster as one row exactly like everyone else's, with no record of how they arrived. ✅ We do not create a separate record for each link; like every other request, a service usage record is kept for 3 months ("Information collected automatically" above · Article 6). The link's secret is not written into that record. The counter that limits bursts of requests lives only in server memory, is never stored, and does not use the requester's IP address. 🔺 2026-09-27 · Spec 065

⚠️ A block record is two fields and nothing more. Only who blocked and who was blocked are kept; when you blocked, when you unblocked, and why you blocked are neither collected nor stored. Lifting a block deletes the record rather than flagging it. ✅ The blocked person is never notified. We have built no channel that tells anyone "you have been blocked." ✅ A block record belongs to the accounts it names. If either account is closed and erased, both the record of blocking and the record of being blocked are deleted with it (it follows the "Account information" row in Article 6 and has no separate retention period).

⚠️ The participant roster is a record of relationships between users. It records who is on which plan with whom, and everyone on the same plan can see each other's display name and profile picture (see Article 5). We do not provide any way to search for another user by name or handle. ✅ If someone declines, is removed, or leaves, their row is deleted from the roster. We still do not store who declined an invitation. 🔺 2026-08-22 — spec 011 changed the other half of this sentence. Leaving and being removed are now left as a line in the plan's change history (see the "Change history" rows above), and that line records who removed whom. Declining is still recorded nowhere.

Article 3. What We Do Not Collect

We do not collect the following. These are the items people most often assume we collect, so we state them plainly.

We do not collectDescription
Browser or device details (User-Agent)We do not read it
Location data or coordinatesThe app has no location permission, and a plan's place is stored only as the text you typed
Analytics tools, advertising identifiers, or crash reporting toolsThere is not one of these in the app. We do not track your behaviour in the app, and we do not profile you for advertising
Payment credentials (card numbers, bank accounts and so on)See Article 9

🔺 2026-09-27 · Spec 065 — IP addresses and access logs are no longer in this table. We keep service usage records and your connection IP address (Article 2-3, "Information collected automatically") and delete them after 3 months under the Article 6 row "operational logs — service usage records · connection IP information". These records hold no browser or device details. Also, Cloudflare, which relays traffic in front of our servers, sees your IP address on its own equipment — see "Cross-border transfer" in Article 7.

We do not sell your personal information, and we do not share it for cross-context behavioural advertising. In the language used by California and several other state privacy laws, we do not "sell" or "share" personal information, and we have never done so. There is therefore no "Do Not Sell or Share My Personal Information" mechanism to offer — because there is nothing to opt out of. ⚠️ We have not verified whether a state requires the link to be displayed even when nothing is sold.

Article 4. Why We Use Your Personal Information

We use what we collect only for the purposes below. If a purpose changes, we will tell you first and obtain your consent.

PurposeInformation used
Registration and account managementName, email address, profile picture URL, which provider you used and its account identifier, our account identifier, account status, registration / completion / termination times
Keeping you signed in, and confirming it is youAccount identifier, device identifier, sign-in / last connection / sign-out times
Providing the plans featurePlan title, place, start time, end time, time zone, status, who created it, creation and deletion times, and the participant roster (which plan, who is on it, their role, the state of their invitation, attendance confirmation, when they were added, and when they answered), the repeat settings (how often, which days of the week, how it ends, how many occurrences, until when) which series an occurrence belongs to and its position in it, and which plan a plan was cloned from. 🔺 2026-08-27 — spec 018A · 018B — ⚠️ no new purpose was added; the same purpose now uses more items
Gathering people through invite linksInvite links (which plan the link is for, who created it, the matching value for its secret, and when it was created). We use these to show someone who receives a link what the plan is, and to add them to the participant roster if they join
Letting participants talk inside a planConversations (which plan the message belongs to, who wrote it, the message text, when it was sent). We use them to show your messages to the other participants in the same plan, and to fill in what you missed when a dropped connection comes back
Exchanging pictures inside a plan, and using profile picturesUploaded pictures (who uploaded them, where the file sits, when it was uploaded) and the picture a message points at. We use them to show a picture to the other participants in the same plan, and to show a profile picture wherever that person appears (as the creator of a plan, on a roster, in a conversation). 🔺 2026-08-26 — spec 017A
Blocking people you do not want in your plansBlock records (who blocked, who was blocked). We use them to stop a blocked person from joining your plans through an invite link, to stop the two of you from inviting each other, and to hide you from each other's "people you have met" list
Enforcing the minimum ageDate of birth, date of birth change attempts (device identifier, account identifier, time, outcome), applicable country
Applying the terms and the age threshold of the right countryApplicable country, the basis on which it was determined, and when
Managing and evidencing consent as the law requiresConsent records and consent history (including the applicable country)
Showing the Service in your languageYour account's language setting, your device's language setting
Managing use across multiple devicesDevice identifier, device type, device registration and last sign-in times
Responding to abuse and restricting useAccount status, sign-in / last connection / sign-out times, date of birth change attempts
Providing the Service reliably, finding the cause of errors and responding to outages, preventing abuse, and securityService usage records (account identification number · date and time of the request · type of request · feature used · processing result), connection IP address. 🔺 2026-09-27 · Spec 065
Handling reports and moderating contentReport records (who · what · reason · description · when · handling status · when handling was finished), moderation records, a message's state (hidden · deleted · when hiding ends · when the state last changed), and the moderation outcome and reason in a notification. We use them to receive reports and have an operator review them, to hide or delete content under the Terms of Service (Article 7), and to tell the author and the reporter the outcome. 🔺 2026-09-25 · Spec 009C
Answering your enquiriesEmail address, account identifier

Sensitive personal information. Several state laws define a special category of "sensitive" personal information. We do not collect precise geolocation, racial or ethnic origin, religious beliefs, health data, sexual orientation, biometric data, or government identifiers. ⚠️ We have not confirmed how each state classifies a date of birth.

Article 5. Disclosure to Others

We do not sell, rent, or otherwise provide your personal information to other people or companies.

Two points cause frequent confusion, so we address them directly.

  • We do not send your personal information to Google or Apple. Social sign-in happens between the app on your device and Google or Apple; our server only checks that the resulting token is genuine. There is no path by which your data travels from us to Google or Apple.
  • We do not pass your information to any company for advertising or analytics.

We may disclose information in the following cases:

  1. Where you have consented in advance;
  2. Where a law specifically requires it;
  3. Where a law enforcement authority requests it through the procedure the law prescribes.

When people taking part in the same plan — and, as far as is needed to decide whether to join, someone who has received an invite link to it — can see the plan's title, place and time and participants' display names, that is the Service working as intended, not disclosure to a third party.

Message text is visible to the other participants in the same plan. Everything written inside a plan is shown to everyone on that plan's roster, including participants who have not yet answered their invitation (asking "should I go?" is the first thing a conversation is for). ⚠️ Someone who only holds an invite link cannot see it — exactly as the "They cannot see" column of the table below says.

Even after someone leaves a plan or is removed from it, their display name stays visible — in the notice that announced it — to the participants who remain. When someone leaves or is removed, that fact is left in the conversation as a single line, and that line carries their display name. 🔺 2026-08-22 — spec 011 added one more such place. The same event is also left as a single line in the plan's change history, and that line likewise shows their display name to the participants of that plan. So even once they are no longer a participant in the plan, the people still on it keep seeing that name in two places: the conversation notice and the change history. ⚠️ The sentence above — "people taking part in the same plan" — does not cover this case, which is why we state it separately here. If they close their account, the field is cleared (Article 2-3 and Article 6).

A notification is visible only to the person who received it. 🔺 2026-08-25 — spec 014A. Who received what notification is not visible to the other participants in the same plan either. ⚠️ Conversation notices and a plan's change history are visible to every participant of that plan, but notifications are not — a notification lives in one inbox per person, and we built no screen and no path that shows someone else's inbox. The unread count is likewise visible only to you.

Pictures sent into a conversation are visible to the other participants in the same plan. 🔺 2026-08-26 — spec 017A — a picture is shown to everyone on that plan's roster, including participants who have not yet answered their invitation (the same range as message text). ⚠️ Holding the address is not enough to open it — if you are not signed in, or not a participant in that plan, you get exactly the answer you would get for a picture that does not exist. ⚠️ Pictures from someone you have blocked are hidden in the same way.

A profile picture is visible only to users who are members. 🔺 2026-08-26 — spec 017A — someone who merely holds an invite link and has not signed up is not shown any profile picture (exactly as stated above).

Which message you reacted to, and with which emoji, is visible to the other participants in the same plan. Reactions appear beneath the message as a count per emoji, and each participant also sees which one they pressed themselves. ⚠️ Reactions from someone you have blocked are left out of that count — so the same message can show a different count to different people, and the app does not explain why on screen (explaining it would reveal that a block exists).

Who pressed which reaction, and when, is visible to the other participants in the same plan. 🔺 2026-08-29 — spec 010B — pressing the emoji count under a message opens a list showing the display name, the profile picture and the time of every person who pressed that emoji, and pressing a name in that list shows that person's display name and profile picture in a larger view (both were already visible inside the same plan; nothing new was added). ⚠️ Someone you have blocked does not appear in that list — exactly the same range as being left out of the count — and the app does not say on screen that anyone was left out (saying so would reveal that a block exists). ⚠️ We collect nothing new here — Reaction — who reacted and Time of the reaction (Article 2-3) were already held, and this is the first time they are shown to other participants.

The person who reported is never revealed to the person reported. 🔺 2026-09-25 — spec 009C: no screen, notification or copy of your data that the reported person receives says who made the report. The reporter sees only that they reported and how it was handled. A hidden or deleted message appears to every participant in the plan without its content, and the content of a hidden message is visible only to its author.

⚠️ Two users who have blocked each other do not see each other's messages. If either one blocks the other, neither sees the other's messages, and messages written before the block are hidden too. Unblocking brings them back — they are hidden, not deleted. ✅ The blocked person is not told. Their message is sent normally; it is hidden only on the receiving side.

What someone holding an invite link can see is listed below. That person is not yet a participant in the plan.

⚠️ This includes someone who is not yet a member. A person who receives the link can see the range below without signing up — that is, before agreeing to this policy or to the Terms of Service. That person is not shown any profile picture; they see the creator's display name only.

Who is lookingThey can seeThey cannot see
A member (signed in)The plan's title, place, start and end times; the display name and profile picture of whoever created it; how many people are on itThe participant list (who is on it) · the plan's chat · its change history
⚠️ Someone not yet a memberThe plan's title, place, start and end times; the display name of whoever created it; how many people are on itEverything in the row above, plus the profile picture — someone who is not yet a member is not shown any profile picture

⚠️ Anyone holding the link can see this. We do not check who is holding a link, so if the link is forwarded, whoever receives it can see the above. The person who made the link can narrow this themselves — by setting an expiry and a limit on how many people may join, or by revoking the link at any time.

Service providers

We run our servers and database ourselves in the Republic of Korea. We entrust only two things to outside providers — storing encrypted database backups (NAVER Cloud, Republic of Korea) and relaying traffic (Cloudflare) — see Article 7. A service provider acting on our instructions is not a sale or a share of your information.

🔺 18 August 2026 — spec 029 adds one more thing here, and it is visible without anyone opening the link.

When an invite link is posted in a messenger or on social media, the messenger reads the address in advance and builds a link preview card (the small box that appears under the link). That card carries the display name of whoever sent the invitation. So, for anyone who can see the link in that conversation, the display name of whoever sent the invitation is visible without anyone opening the link. We do not know who is in that conversation.

The plan's title, time and place remain visible only to someone who opens the link. The card carries three things and no more — the display name of whoever sent the invitation, the name of the app, and the app's default image. The plan's title, time and place, the number of participants, and profile pictures are not in the card at all.

⚠️ The card is built by the messenger company, not by us. It reads a link that a user posted, and the messenger company's servers read that name and may keep it for some time. We have not engaged that company to handle personal information on our behalf — our own servers draw what the card shows, and the messenger company only reads the result. ⚠️ We have not determined whether this amounts to disclosure to a third party under the applicable law. That is a question for legal review, and this policy has not had one (see LEGAL-UNREVIEWED at the top of this document).

⚠️ Narrowing what leaves us is the defence available to us today. We narrowed what the card carries to a single name, and the response for that page asks anything in between not to store it (Cache-Control: no-store). Even so, once a card has been built we have no way to take it back — where a link is posted is decided by the person posting it.

Article 6. How Long We Keep Your Information, and How We Delete It

We delete personal information without delay once its purpose is fulfilled. The retention periods are:

DataRetention period
Terminated accountsFully deleted 30 days after termination
Consent history5 years
Plan dataDeleted together with your account. However, if other participants remain in a plan, we keep the plan so that they do not lose their record, and make only the departing user unidentifiable
Operational logs — service usage records · connection IP information3 months from collection — to keep the Service stable and prevent abuse. Information past its retention period is destroyed without delay, and information in electronic files is deleted in a way that cannot be recovered
Expired sign-in sessions30 days after expiry
Date of birth change attempts90 days
Payment records (if you used a paid service)5 years
Report and moderation records1 year from when handling was finished. A report not yet handled is kept until handling is finished

Why we wait 30 days after termination: it is the minimum period we need to process the termination request, deal with enquiries or objections raised around that time, and check for abuse. Your account cannot be restored during this period, and after 30 days it is deleted irreversibly.

⚠️ Retention required by law

Where the law requires us to retain information, we keep it for that period separately. In that case we use it only for the retention purpose and keep it apart from other information.

For example, if you used a paid service and then closed your account, records of payment and of the contract must still be kept for the period the law requires, which takes precedence over the 30-day rule above. ⚠️ The 5-year figure in the table comes from Korean commerce law and has not been checked against United States federal or state requirements. Confirm it before any paid service launches.

How we delete

Personal information held electronically is deleted in a way that cannot be recovered. Any personal information printed on paper is shredded or incinerated.

Some records cannot be deleted

Consent history is designed so that it cannot later be altered or deleted. A record of who agreed to what and when protects both you and us if a dispute arises later, and it is only meaningful if it cannot be changed after the fact. We delete these records once the period in the table above (5 years) has passed.

🔺 2026-09-25 · Spec 009C — moderation records cannot be edited either. What we did while handling a report is the basis for checking any later objection, so once a row is written even we cannot edit it, and only rows older than one year can be deleted. If an account or a plan is deleted, however, only the field that pointed at that person or message is cleared.

⚠️ This creates a tension with your deletion rights under state privacy law. Most of those laws allow an exception where information must be kept to comply with a legal obligation or to establish a legal claim. We have not verified that our 5-year consent history falls within that exception in any particular state. See Article 10, paragraph 4.

⚠️ Draft-only note (delete before publishing) — which rows of this Article are facts today: 🔺 2026-08-11 · Spec 025 · 🔺 2026-08-15 · Spec 027 Count: of 8 rows, 6 are facts · 0 half · 2 still a promise. 🔺 2026-09-25 · Spec 009C — the sixth fact is report and moderation records, 1 year. The same spec put that kind into the deletion command, which removes reports whose handling finished more than a year ago together with the moderation records attached to them (a moderation record with no report is removed one year after it was made). Reports not yet handled are never deleted. Now facts (5): terminated accounts 30 days · consent history 5 years · expired sign-in sessions 30 days · date-of-birth change attempts 90 days · plan data. The "How we delete" and "Some records cannot be deleted" paragraphs above now match the actual behaviour — consent history cannot be altered at all, regardless of age, cannot be emptied wholesale, and only records older than 5 years can be deleted. How the plan-data row became a fact: when an account is erased, each plan that account created is checked for other remaining participants. If any remain, the plan is kept and only the creator's identity is cleared (anonymisation — the departing person's name, email address and profile picture are left nowhere in that plan). If none remain, the plan is erased together with the account. The two steps run in a single transaction, so no half-deleted state is left behind. ⚠️ One paragraph of the old draft note was deleted here on 2026-08-15. It said, in effect, that there was nothing to anonymise yet; spec 007 (plan participant roster), shipped the same day, let a plan hold several people and made that claim untrue. Spec 027 removed the paragraph and wrote the real behaviour above instead. It is not a sentence to restore — restoring it would mean removing the participant roster. 🔺 2026-08-20 — spec 009B added notices and "how far you have read", and this table still has 7 rows. The "Plan data" row covers both of them — a notice sits in the same place as the conversation and is deleted when the plan is deleted; how far you have read sits on one row of the participant roster and disappears with that row when you leave. Neither has a retention period of its own. ⚠️ No new deletion category was created — one would have made this table 8 rows and changed the denominator of the "5 of 7" the user approved in spec 025. ⚠️ If the person who caused a notice closes their account, the notice stays and only the "who did it" field is cleared — the same thing spec 027 already does for plans and spec 009 for messages. 🔺 2026-08-19 — spec 009 added conversations, and this table still has 7 rows. The "Plan data" row covers conversations — a message belongs to its plan, so it is deleted when the plan is deleted and has no retention period of its own. ⚠️ No new deletion category was created — one would have made this table 8 rows and changed the denominator of the "5 of 7" the user approved in spec 025. ⚠️ If the person who wrote a message closes their account, the message stays and only the author field is cleared — the same thing spec 027 already does for plans. 🔺 2026-08-20 — spec 010 added reactions on messages, and this table still has 7 rows. The "Plan data" row covers reactions — a reaction hangs off a message and a message hangs off a plan, so deleting the plan deletes the reactions with it. ⚠️ And the "Account information" row covers the other half — if the person who reacted closes their account, the reactions they placed are deleted with it. Neither has a retention period of its own. ⚠️ No new deletion category was created — one would have made this table 8 rows and changed the denominator of the "5 of 7" the user approved in spec 025. ⚠️⚠️ This is the exact opposite of a message: when an author closes their account the message stays and only the name is cleared, but a reaction has nothing left once the name is gone, so the row itself disappears and the count on that message goes down. ~~Still promises (2): operational logs 1 year (…) · payment records 5 years (no payment feature).~~ 🔺 2026-09-27 · Spec 065 — Still a promise (1): payment records 5 years (no payment feature). Count: of 8 rows, 7 are facts · 0 half · 1 still a promise. The seventh fact is "operational logs — service usage records · connection IP information, 3 months" — the server writes these records to a fixed folder (/var/lib/timingle/access-log) as one file per day and deletes files older than 90 days at start-up and once a day. These records are not written to the server's general log (which is cut only by a 20 MB size cap). ⚠️ If this folder is backed up, the copy outlives the 90 days and this row becomes false — we do not back it up. This is an internal review, not a lawyer's (ADR 041 · ADR 045). ⚠️ The second reason given above for the 30-day wait (stopping people from evading restrictions by re-registering) does not hold in the current design — when a sign-up is refused on age grounds the social link is severed immediately, so re-registration is possible the next moment (spec 024). Rewording is legal counsel's call (C11) and was deliberately not done here. 🔺 2026-08-22 — spec 016B: ⚠️⚠️ the first reason (giving someone who closed their account by mistake a chance to undo it) no longer holds inside the app either. Spec 016B added Delete account to the Settings screen but did not build any way to undo it — signing in again with the same social account creates a new account instead of restoring the old one (exactly as spec 025 decided when it chose not to build restoration). ⚠️⚠️ So neither of the two reasons written above for the 30-day wait holds. ⚠️ The body of Article 6 (the table and its text) was still not changed by a single character — the 30 days really do work that way, and how the sentence should be reworded is legal counsel's call (C11), so 016B only records the fact here and hands it over. 🔺 2026-09-25 — the "why we wait 30 days" wording above was corrected (ADR 041, decision 5 · Claude's internal review, not a lawyer's). It now matches the fact that there is no way to restore an account; the 30-day behaviour itself is unchanged. ⚠️ Whether a 30-day hold with no restore sits comfortably with "delete without delay" (PIPA art. 21) is open question 9 in ADR 041.

Article 7. Service Providers and Where Your Data Is Stored

We run the Service's servers and database ourselves in the Republic of Korea, and entrust only the following work to outside providers.

ProviderWhat they do
NAVER Cloud Corp.Storing encrypted database backup files — in the Republic of Korea
Cloudflare, Inc.Relaying and protecting the traffic between you and our servers (attack mitigation) — in the United States and other countries where Cloudflare operates equipment. See "Cross-border transfer" below
  1. When we engage a provider, we set out in the contract what they must do to keep personal information safe, and we monitor whether they do it.
  2. If a provider or the work we entrust to one changes, we will update this policy.

Cross-border transfer

To protect the Service from internet attacks, the traffic between you and our servers is relayed through equipment operated by Cloudflare, Inc. (United States). That equipment is partly outside the Republic of Korea, so under Article 28-8(1)3 of Korea's Personal Information Protection Act (processing entrusted in order to perform our contract with you) we disclose the following. Cloudflare relays and protects the traffic on our instructions only; it does not use the content for its own purposes.

ItemDetail
RecipientCloudflare, Inc. (101 Townsend St., San Francisco, CA 94107, USA · privacy enquiries: privacy@cloudflare.com)
CountriesThe United States and the countries where Cloudflare operates relay equipment
When and howEach time you connect to the Service, over encrypted internet connections
Data transferredYour IP address and the traffic exchanged while you use the Service (it passes through in transit; it is not stored outside our servers)
PurposeRelaying traffic; attack mitigation and security
Retention by the recipientFor as long as relaying requires; security logs for the period set in Cloudflare's privacy policy
How to refuse, and the effectThis transfer is a necessary part of delivering the Service, so it cannot be refused separately. If you do not wish it, you may choose not to use the Service

⚠️ Draft note — delete before publishing: 🔺 The owner confirmed Cloudflare on 2026-09-25, and this section was added at that point (ADR 041, decision 5 · wording from review ② §2-⑥). ⚠️ Cloudflare's address, contact and retention period must be checked against Cloudflare's privacy policy before publishing. ⚠️ Publishing before Cloudflare is actually in front of the servers (TODO B-4) would make this section untrue — publish after it is attached.

⚠️ Draft note — delete before publishing: 🔺 2026-09-25 · ADR 041, decision 5 — the values are settled. We run the servers and database ourselves in the Republic of Korea (ADR 026); only encrypted database backups are entrusted to NAVER Cloud Corp. (Republic of Korea) and deleted after 14 days (ADR 027). 🔺 2026-09-25 · spec 002B — the placeholder row in the table above now states that fact ("NAVER Cloud Corp. — storing encrypted database backup files — in the Republic of Korea"), and the sentence above the table says we run the servers ourselves in the Republic of Korea. 🔺 The owner confirmed Cloudflare on 2026-09-25, so a processor row and a "Cross-border transfer" section were added (attaching it is TODO B-4). Under Korea's PIPA art. 28-8(1)3 (in force 2023-09-15) a transfer for processing or storage is disclosed in this policy rather than consented to separately.

Article 8. Children

  1. Our Service is not available to anyone under 14. We do not knowingly collect personal information from anyone under 14.
  2. We check your age using the date of birth you enter yourself. We do not independently verify it; we rely on what you tell us.
  3. If the age you give is below our threshold, we refuse registration and close any account created during that process.
  4. If we learn that someone under 14 registered with a date of birth that was not true, we will delete that account and its personal information without delay. If you believe this has happened, please tell us at help@timingle.app.
  5. We stop people evading paragraph 1 by editing their age repeatedly in two ways. (1) We limit how many times a date of birth that has already been entered can be changed from the same device within 24 hours, and we log the attempts. (2) If registration is refused because the age is below our threshold, the app keeps a single "date from which you can register again" only on that device (or, if you used a web browser, only in that browser), and that device will not accept a date of birth again until that date. This date is not sent to us, and the date of birth itself is not kept. It disappears once that date passes, when you delete the app, or when you clear the data stored in your browser.

⚠️ How this relates to COPPA — read before publishing

The Children's Online Privacy Protection Act (COPPA) protects children under 13. Our threshold of 14 sits above that line, so on its face no child COPPA covers can register.

That does not by itself make us compliant. COPPA turns on whether a service is directed to children and on what the operator actually knows — not only on a stated age limit — and we accept a self-declared date of birth that we never verify. ADR 015 removed children from the first release and relies on this age gate as the defence, but that decision was made without legal advice. SPEC-PLAN.md item C11 records the open question directly: whether a self-declared age gate is sufficient in each jurisdiction, and what evidence is needed to show that we do not target children.

We have not re-verified COPPA's current requirements. ADR 005 records that a 2025 amendment took full effect on 2026-04-22, expanding the definition of personal information to include biometric data and adding separate consent requirements for targeted advertising and AI training. Confirm the current rule before publishing.

Separately, several state laws give additional protection to minors under 16 or 18 — for example limits on profiling and on targeted advertising. We do neither, but we have not surveyed those laws.

Article 9. Payment Information, If You Use a Paid Service

The Service has no paid features today. What follows applies once paid services exist.

  1. If you pay for a paid service, the payment is handled by the Apple App Store or Google Play.
  2. We neither receive nor store your card number, expiry date, CVC, bank account number or billing address. All of that is handled by Apple and Google and never reaches our servers.
  3. The only things we receive from Apple or Google and retain are:
    1. A receipt or purchase token, used to verify that a purchase is genuine;
    2. A transaction identifier;
    3. Subscription status and expiry date;
    4. A history of purchases, renewals, cancellations and refunds.
  4. We use this information only to confirm payment, manage subscription status, handle refunds and disputes, and keep the records the law requires.
  5. Retention follows the "Payment records" row in Article 6.

Article 10. Your Rights and How to Exercise Them

We give the same rights to every user, wherever you live. Some of these rights come from the privacy law of particular states; rather than asking you to work out which apply to you, we apply them all.

  1. You may at any time ask us to:
    1. Know and access — tell you what personal information we hold about you, where we got it, what we use it for, and who we disclose it to;
    2. Correct — fix information that is inaccurate;
    3. Delete — erase your information, including by closing your account;
    4. Obtain a copy — receive a copy of the information you provided to us;
    5. Restrict processing — ask us to stop using your information;
    6. Withdraw consent — take back consent you previously gave;
    7. Opt out of sale, sharing, or targeted advertising — there is nothing to opt out of, because we do none of these (Article 3);
    8. Not be discriminated against — we will not deny you the Service, charge you a different price, or give you a lower quality of service because you exercised a right.
  2. You can close your account yourself, in the app's Settings screen. Choosing Delete account there ends the agreement, and your personal information is then destroyed after the period set out in Article 6. You can see your consent history — when you agreed to which terms — in the app's Settings screen, and you can download a copy of the information we hold about you from that same screen. The one thing there is still no screen for is deleting only part of your information. To exercise those rights, please email help@timingle.app. Once we have confirmed your identity, we will act on your request and tell you the outcome within 10 days of receiving it. If you cannot sign in and therefore cannot reach the Settings screen, you may ask us to close your account at the same address.

    ⚠️ Ten days is our own commitment, taken from the Korean version. It has not been checked against the response deadlines US state laws impose, which are commonly longer (often 45 days, extendable). Our shorter period is more favourable to you, but whether the procedure around it satisfies each state has not been verified.

    Of the screens we said we were building, the half that lets you delete your account inside the app now exists. The other half — viewing your information and downloading a copy of it inside the app — exists as of 28 August 2026: Settings now has Download my information, which hands you the whole thing as a single file. We said we would update this policy when that screen existed, and this paragraph is that update.

    ⚠️ Four things are not in that copy. ① Anything other people wrote — messages written by the other participants in your plans, and reactions other people placed, are left out (they are those people's records too). ② Who blocked you — people you blocked are included; who blocked you is not. ③ The picture files themselves — the copy lists the pictures you uploaded and their addresses, but not the files. ④ Reports about you — reports you made, and actions taken on your own messages (hidden or deleted), are included; who reported you, when, and for what reason is not (to protect the person who reported).

    What is still missing is a screen for deleting only part of your information, and we will update this policy when it exists.

  3. You may exercise these rights through an authorised agent. If you do, we will ask for proof that you authorised them, and we may still ask you to verify your own identity.
  4. We may refuse a request, and will tell you why if we do, where:
    1. The law requires us to keep the information (see "Retention required by law" in Article 6, and the note about consent history);
    2. Complying would risk someone's life or physical safety, or unfairly harm another person's property or interests;
    3. We cannot verify that the request comes from you or from someone you authorised.
  5. If we refuse, you may ask us to reconsider by replying to the same address. We will review the decision and respond with the outcome and our reasons.

    ⚠️ Several state privacy laws require a formal appeals process with defined deadlines, and some require us to tell you how to complain to the state attorney general if the appeal fails. This paragraph does not yet meet those requirements in detail. Confirm before publishing.

  6. Deleting your personal information means you can no longer use the Service. Deletion cannot be undone, so please consider it carefully.

Article 11. How We Keep Your Information Safe

  1. Administrative measures — Access to personal information is limited to the people who genuinely need it (today, the representative), and access rights are granted only to them.
  2. We do not store sign-in tokens in their original form. They are converted into a form that cannot be reversed, so a stored value is useless to anyone who obtains it.
  3. We never receive a password at all. Sign-in is handled by Google and Apple, so there is no password here to leak.
  4. We encrypt data in transit (TLS) so that it cannot be intercepted.
  5. Sign-in tokens expire, and you can sign out of individual devices.
  6. Backups are locked. Database backup files are encrypted with a public key so that only we can open them, stored with a storage service inside the Republic of Korea, and deleted automatically 14 days after they are made. The key that opens a backup is never kept on the server.

⚠️ Most US states require notification if personal information is exposed in a security breach, and the deadlines and thresholds differ by state. We have no breach notification procedure written down. This is not something the policy text can fix; it needs a procedure. Flagged for legal review.

Article 12. Contact Us

Under Article 31 of Korea's Personal Information Protection Act we designate a person accountable for personal data. As a small business under Article 32 of the Act's Enforcement Decree, that person is our representative.

Legal name씨엔홀릭
Privacy contact (representative)김신정
Emailhelp@timingle.app
Access, correction, deletion and suspension requests, and any other enquiryhelp@timingle.app — received and handled through the same channel

We handle enquiries by email. We do not operate a customer support telephone line.

Article 13. Complaining to a Regulator

If you are not satisfied with how we handled your personal information, you may complain to the attorney general of the state where you live. The Federal Trade Commission also accepts consumer privacy complaints.

⚠️ We have deliberately not listed contact details for these bodies, because we have not verified them. The Korean version lists four Korean agencies; those agencies have no authority over US users and have been removed here. Confirm the correct US bodies and their current contact details before publishing.

Article 14. Changes to This Policy

  1. If this policy changes, we will publish the change and its effective date inside the Service, or at the web address we tell you about, at least 7 days before it takes effect.
  2. Where the change materially affects your rights — for example if we begin collecting new information, use it for a new purpose, or start disclosing it to a third party — we will give at least 30 days' notice and, where necessary, ask for your consent again.
  3. We keep previous versions of this policy available for you to read.

Supplementary Provisions

This Privacy Policy takes effect on 2026-11-01.

Announced: 2026-10-01 Effective: 2026-11-01 Version: v1

Business Information

ItemDetail
Legal name씨엔홀릭
Enquirieshelp@timingle.app

We handle enquiries and complaints by email only. When we start offering paid services, we will add the representative's name, business address, telephone number and business registration number here, as Korea's Act on Consumer Protection in Electronic Commerce requires.