From 11656e287d1b2be4b13486b976b657852b590fa4 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Fri, 17 Apr 2026 13:55:44 +0200 Subject: [PATCH] [call-me] - add privacy policy --- app/server.js | 8 ++++ package-lock.json | 4 +- package.json | 2 +- public/index.html | 4 ++ public/privacy.html | 101 ++++++++++++++++++++++++++++++++++++++++++++ public/style.css | 98 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 public/privacy.html diff --git a/app/server.js b/app/server.js index da484ec..e784f46 100755 --- a/app/server.js +++ b/app/server.js @@ -26,6 +26,9 @@ const PUBLIC_DIR = path.join(__dirname, '../', 'public'); // Home page/client const HOME = path.join(PUBLIC_DIR, '/index.html'); +// Privacy page +const PRIVACY = path.join(PUBLIC_DIR, '/privacy.html'); + // Locales directory location const LOCALES_DIR = path.join(__dirname, 'locales'); @@ -212,6 +215,11 @@ app.get('/', (req, res) => { res.sendFile(HOME); }); +// Serve the privacy policy page +app.get('/privacy', (req, res) => { + res.sendFile(PRIVACY); +}); + // Get Random Background Images app.get('/randomImage', async (req, res) => { if (config.randomImageUrl === '') return; // Keep client default bg image diff --git a/package-lock.json b/package-lock.json index 4ac74b2..2509f4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "call-me", - "version": "1.3.37", + "version": "1.3.38", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "call-me", - "version": "1.3.37", + "version": "1.3.38", "license": "AGPLv3", "dependencies": { "@ngrok/ngrok": "1.7.0", diff --git a/package.json b/package.json index c4e2b6c..cb132a5 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "call-me", - "version": "1.3.37", + "version": "1.3.38", "description": "Your Go-To for Instant Video Calls", "author": "Miroslav Pejic - miroslav.pejic.85@gmail.com", "license": "AGPLv3", diff --git a/public/index.html b/public/index.html index 33723a9..bd114a9 100755 --- a/public/index.html +++ b/public/index.html @@ -149,6 +149,10 @@ + +
+ Privacy Policy +
diff --git a/public/privacy.html b/public/privacy.html new file mode 100644 index 0000000..5e0b837 --- /dev/null +++ b/public/privacy.html @@ -0,0 +1,101 @@ + + + + Call-me - Privacy Policy + + + + + + + + + + + + +
+
+

Privacy Policy

+
+ +
+

+ Minimal Data Collection
+ We collect only the minimal data required to provide real-time communication functionality in + Call-me. +

+

+ Signaling Data
+ Call-me is a real-time peer-to-peer WebRTC application. Establishing a connection + requires temporary signaling data such as + RTCICECandidates + and + RTCSessionDescription. This data is used only to negotiate the connection between peers. +

+

+ No Persistent Storage
+ This signaling data is not stored in any persistent database and is discarded immediately after the + session ends or the user leaves the call. Call-me does not retain chat, audio, + video, or file transfer content. +

+

+ Encryption
+ Media streams are transmitted directly between peers using WebRTC and are encrypted using + Secure Real-time Transport Protocol + (SRTP). Data channels used for chat and file sharing via + RTCDataChannel + are secured using + Datagram Transport Layer Security + (DTLS). +

+

+ Peer-to-Peer Architecture
+ Call-me does not act as an intermediary for user communications. Audio, video, chat + messages, and file transfers are exchanged directly between users and are not routed through or + stored on Call-me servers. +

+

+ Third-Party Services
+ We do not use third-party analytics, advertising, or tracking services. Our focus is on providing a + secure and private communication platform without compromising user privacy. +

+
+ + +
+ + diff --git a/public/style.css b/public/style.css index c217835..e74868f 100644 --- a/public/style.css +++ b/public/style.css @@ -3250,3 +3250,101 @@ z-index: right: var(--spacing-xs); } } + +/* Privacy link in sign-in divider */ + +.privacy-divider { + display: flex; + align-items: center; + justify-content: center; + margin-top: var(--spacing-md); + color: var(--text-muted); + font-size: var(--font-size-sm); +} + +.privacy-divider .privacy-link { + color: var(--text-muted); + text-decoration: none; + transition: color 0.2s ease; +} + +.privacy-divider .privacy-link:hover { + color: var(--primary-color); + text-decoration: underline; +} + +/* Privacy Policy Page */ + +.privacy-container { + background: var(--glass-bg-strong); + border: 1px solid var(--glass-border); + border-radius: var(--border-radius-lg); + padding: 40px 36px 32px; + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + box-shadow: var(--shadow-xl); + width: 100%; + max-width: 720px; + margin: 60px auto; +} + +.privacy-header { + text-align: center; + margin-bottom: 32px; +} + +.privacy-header h1 { + font-size: 1.6rem; + font-weight: 700; + color: var(--text-color); + margin: 0; +} + +.privacy-body p { + color: var(--text-secondary); + font-size: 0.92rem; + line-height: 1.7; + margin: 0 0 18px; +} + +.privacy-body strong { + color: var(--text-color); +} + +.privacy-body a { + color: var(--primary-light); + text-decoration: none; + transition: color 0.2s; +} + +.privacy-body a:hover { + color: var(--primary-color); + text-decoration: underline; +} + +.privacy-footer { + text-align: center; + margin-top: 32px; +} + +.privacy-footer .btn-agree { + display: inline-block; + padding: 12px 40px; + background: var(--primary-color); + color: #fff; + font-family: 'Comfortaa', sans-serif; + font-size: 0.95rem; + font-weight: 600; + border: none; + border-radius: var(--border-radius); + cursor: pointer; + text-decoration: none; + transition: + background 0.2s, + transform 0.15s; +} + +.privacy-footer .btn-agree:hover { + background: var(--primary-hover); + transform: translateY(-1px); +}