[call-me] - add privacy policy

This commit is contained in:
Miroslav Pejic
2026-04-17 13:55:44 +02:00
parent 153fd27998
commit 11656e287d
6 changed files with 214 additions and 3 deletions
+8
View File
@@ -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
+2 -2
View File
@@ -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",
+1 -1
View File
@@ -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",
+4
View File
@@ -149,6 +149,10 @@
</button>
</div>
</div>
<div class="privacy-divider">
<span><a href="/privacy" class="privacy-link">Privacy Policy</a></span>
</div>
</div>
</div>
</div>
+101
View File
@@ -0,0 +1,101 @@
<!doctype html>
<html lang="en">
<head>
<title>Call-me - Privacy Policy</title>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
/>
<meta
name="description"
content="Call-me Privacy Policy learn how we handle your data with minimal collection and end-to-end encryption."
/>
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png" />
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<div class="privacy-container">
<div class="privacy-header">
<h1>Privacy Policy</h1>
</div>
<div class="privacy-body">
<p>
<strong>Minimal Data Collection</strong><br />
We collect only the minimal data required to provide real-time communication functionality in
<strong>Call-me</strong>.
</p>
<p>
<strong>Signaling Data</strong><br />
<strong>Call-me</strong> is a real-time peer-to-peer WebRTC application. Establishing a connection
requires temporary signaling data such as
<a
href="https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate"
target="_blank"
rel="noopener noreferrer"
>RTCICECandidates</a
>
and
<a
href="https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription"
target="_blank"
rel="noopener noreferrer"
>RTCSessionDescription</a
>. This data is used only to negotiate the connection between peers.
</p>
<p>
<strong>No Persistent Storage</strong><br />
This signaling data is not stored in any persistent database and is discarded immediately after the
session ends or the user leaves the call. <strong>Call-me</strong> does not retain chat, audio,
video, or file transfer content.
</p>
<p>
<strong>Encryption</strong><br />
Media streams are transmitted directly between peers using WebRTC and are encrypted using
<a
href="https://en.wikipedia.org/wiki/Secure_Real-time_Transport_Protocol"
target="_blank"
rel="noopener noreferrer"
>Secure Real-time Transport Protocol</a
>
(SRTP). Data channels used for chat and file sharing via
<a
href="https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel"
target="_blank"
rel="noopener noreferrer"
>RTCDataChannel</a
>
are secured using
<a
href="https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security"
target="_blank"
rel="noopener noreferrer"
>Datagram Transport Layer Security</a
>
(DTLS).
</p>
<p>
<strong>Peer-to-Peer Architecture</strong><br />
<strong>Call-me</strong> 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 <strong>Call-me</strong> servers.
</p>
<p>
<strong>Third-Party Services</strong><br />
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.
</p>
</div>
<div class="privacy-footer">
<a class="btn-agree" href="/">AGREE</a>
</div>
</div>
</body>
</html>
+98
View File
@@ -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);
}