ToS and privacy policy update
All checks were successful
Deploy to Server / deploy (push) Successful in 1m31s

This commit is contained in:
rocord01 2025-08-12 21:47:54 -04:00
parent 6b6994baa7
commit 217ac0029a
7 changed files with 637 additions and 177 deletions

154
src/app/privacy/page.jsx Normal file
View file

@ -0,0 +1,154 @@
import Header from '@/components/header';
import Footer from '@/components/footer';
import Link from 'next/link';
import ReactMarkdown from 'react-markdown';
import { readFileSync, statSync } from 'fs';
import { join } from 'path';
import { execSync } from 'child_process';
export const metadata = {
title: 'Privacy Policy | LiteNet',
description: 'Privacy Policy for LiteNet PBX services.',
};
function getFileLastModified(filePath) {
try {
// Try to get the last commit date for this specific file
const gitDate = execSync(`git log -1 --format=%ci -- "${filePath}"`, {
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore'] // Suppress stderr to avoid build errors
}).trim();
const gitHashShort = execSync(`git log -1 --format=%h -- "${filePath}"`, {
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore']
}).trim();
const gitHashFull = execSync(`git log -1 --format=%H -- "${filePath}"`, {
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore']
}).trim();
if (gitDate && gitHashShort && gitHashFull) {
return {
date: new Date(gitDate).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }),
hash: gitHashShort,
fullHash: gitHashFull,
source: 'git'
};
}
} catch {
// Fall back to file system timestamp if git fails (e.g., in build environment)
}
try {
const stats = statSync(filePath);
return {
date: stats.mtime.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }),
hash: null,
fullHash: null,
source: 'filesystem'
};
} catch {
// Final fallback
return {
date: 'Unknown',
hash: null,
fullHash: null,
source: 'fallback'
};
}
}
export default function PrivacyPage() {
// Read the markdown file at build time
const privacyPath = join(process.cwd(), 'src', 'data', 'privacy.md');
const privacyContent = readFileSync(privacyPath, 'utf8');
// Remove the header section from markdown content
const cleanedContent = privacyContent.replace(/^# Privacy Policy[\s\S]*?(?=^## 1\. Information We Collect)/m, '');
const fileInfo = getFileLastModified(privacyPath);
return (
<>
<Header />
<main className="flex-grow">
<div className="container py-12 px-4">
<div className="max-w-4xl mx-auto">
<div className="mb-8">
<Link href="/" className="text-blue-500 hover:underline text-sm">
Back to home
</Link>
</div>
<header className="mb-8">
<h1 className="text-4xl font-bold text-white mb-4">Privacy Policy</h1>
<p className="text-gray-400">
Last updated: {fileInfo.date}
{fileInfo.hash && fileInfo.fullHash && (
<span className="ml-1">
(commit <a
href={`https://git.chrischro.me/LiteNet/litenet-website/commit/${fileInfo.fullHash}`}
target="_blank"
rel="noopener noreferrer"
className="text-blue-400 hover:text-blue-300 underline"
>
<code className="text-xs bg-gray-800 px-1 rounded">{fileInfo.hash}</code>
</a>)
</span>
)}
</p>
<p className="text-gray-400 mt-2">
LiteNet is committed to protecting your privacy. This Privacy Policy explains our practices regarding the collection, use, and disclosure of your information when you use our services.
</p>
</header>
<div className="prose prose-invert max-w-none">
<ReactMarkdown
components={{
h1: ({ children }) => <h1 className="text-4xl font-bold text-white mb-8">{children}</h1>,
h2: ({ children }) => {
const text = typeof children === 'string' ? children : children?.join?.('') || '';
if (text.includes('ACKNOWLEDGMENT')) {
return null; // Don't render the header separately, handle in the wrapper
}
return <h2 className="text-2xl font-semibold mb-4 text-white mt-8">{children}</h2>;
},
h3: ({ children }) => <h3 className="text-xl font-semibold mb-3 text-white">{children}</h3>,
p: ({ children }) => {
const text = typeof children === 'string' ? children : children?.toString?.() || '';
const isAcknowledgment = text.includes('By using LiteNet\'s services, you acknowledge');
if (isAcknowledgment) {
return (
<div className="bg-gray-900/50 border border-gray-700 rounded-lg p-6 mt-8">
<p className="font-semibold text-white mb-4">ACKNOWLEDGMENT</p>
<p className="text-gray-300 mb-0">{children}</p>
</div>
);
}
return <p className="mb-4">{children}</p>;
},
ul: ({ children }) => <ul className="list-disc pl-6 mb-4">{children}</ul>,
ol: ({ children }) => <ol className="list-decimal pl-6 mb-4">{children}</ol>,
li: ({ children }) => <li className="mb-1">{children}</li>,
a: ({ href, children }) => (
<Link href={href} className="text-blue-400 hover:text-blue-300 underline">
{children}
</Link>
),
strong: ({ children }) => <strong className="font-bold">{children}</strong>,
hr: () => <hr className="border-gray-700 my-8" />,
}}
>
{cleanedContent}
</ReactMarkdown>
</div>
</div>
</div>
</main>
<Footer />
</>
);
}

194
src/app/terms/page.jsx Normal file
View file

@ -0,0 +1,194 @@
import Header from '@/components/header';
import Footer from '@/components/footer';
import Link from 'next/link';
import ReactMarkdown from 'react-markdown';
import { readFileSync, statSync } from 'fs';
import { join } from 'path';
import { execSync } from 'child_process';
export const metadata = {
title: 'Terms of Service | LiteNet',
description: 'Terms of Service for LiteNet PBX services.',
};
function EmergencyDisclaimer() {
return (
<div className="bg-red-950/50 border border-red-500/50 rounded-lg p-6 mb-8">
<h2 className="text-2xl font-semibold mb-4 text-red-300 flex items-center gap-2 mt-0">
MANDATORY NOTICE: NO 911 OR EMERGENCY CALLING ON THIS PBX SYSTEM
</h2>
<h3 className="text-xl font-semibold mb-3 text-red-200">Emergency Calls Not Supported</h3>
<p className="mb-4 text-red-100">
This PBX phone system does <strong>NOT</strong> provide access to emergency services (911, police, fire, medical, or any other emergency services).
If you dial 911 from this system, the call <strong>WILL NOT connect to any emergency dispatch center.</strong>
</p>
<h3 className="text-xl font-semibold mb-3 text-red-200">Not a Replacement for Regular Phone Service</h3>
<p className="mb-4 text-red-100">
This service is for community communications and educational purposes <strong>ONLY.</strong> It is <strong>NOT a replacement for a regular telephone and MUST NOT be relied upon for emergency calling.</strong>
</p>
<h3 className="text-xl font-semibold mb-3 text-red-200">What to Do in an Emergency:</h3>
<p className="mb-4 text-red-100">
Use your mobile phone, landline, or another phone service with verified 911 access to contact emergency services.
</p>
<h3 className="text-xl font-semibold mb-3 text-red-200">Required Disclosure:</h3>
<p className="text-red-100 mb-2">
By using this PBX system, you acknowledge and agree that:
</p>
<ul className="list-disc pl-6 mb-4 text-red-100">
<li>No 911 or emergency services are available through this system under any circumstances</li>
<li>You have been advised to maintain an alternative method of calling emergency services</li>
<li>You will not rely on this system for emergency communications</li>
<li>Continued use of this system constitutes your agreement to these terms and acknowledgment of the absence of 911 service</li>
<li>LiteNet bears no responsibility for any inability to contact emergency services through this system</li>
</ul>
</div>
);
}
function getFileLastModified(filePath) {
try {
// Try to get the last commit date for this specific file
const gitDate = execSync(`git log -1 --format=%ci -- "${filePath}"`, {
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore'] // Suppress stderr to avoid build errors
}).trim();
const gitHashShort = execSync(`git log -1 --format=%h -- "${filePath}"`, {
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore']
}).trim();
const gitHashFull = execSync(`git log -1 --format=%H -- "${filePath}"`, {
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore']
}).trim();
if (gitDate && gitHashShort && gitHashFull) {
return {
date: new Date(gitDate).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }),
hash: gitHashShort,
fullHash: gitHashFull,
source: 'git'
};
}
} catch {
// Fall back to file system timestamp if git fails (e.g., in build environment)
}
try {
const stats = statSync(filePath);
return {
date: stats.mtime.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }),
hash: null,
fullHash: null,
source: 'filesystem'
};
} catch {
// Final fallback
return {
date: 'Unknown',
hash: null,
fullHash: null,
source: 'fallback'
};
}
}
export default function TermsPage() {
// Read the markdown file at build time
const termsPath = join(process.cwd(), 'src', 'data', 'terms.md');
const termsContent = readFileSync(termsPath, 'utf8');
// Remove the entire header section from markdown content including title and metadata
const cleanedContent = termsContent.replace(/^# Terms of Service[\s\S]*?(?=^## 1\. Acceptance of Terms)/m, '');
const fileInfo = getFileLastModified(termsPath);
return (
<>
<Header />
<main className="flex-grow">
<div className="container py-12 px-4">
<div className="max-w-4xl mx-auto">
<div className="mb-8">
<Link href="/" className="text-blue-500 hover:underline text-sm">
Back to home
</Link>
</div>
<header className="mb-8">
<h1 className="text-4xl font-bold text-white mb-4">Terms of Service</h1>
<p className="text-gray-400">
Last updated: {fileInfo.date}
{fileInfo.hash && fileInfo.fullHash && (
<span className="ml-1">
(commit <a
href={`https://git.chrischro.me/LiteNet/litenet-website/commit/${fileInfo.fullHash}`}
target="_blank"
rel="noopener noreferrer"
className="text-blue-400 hover:text-blue-300 underline"
>
<code className="text-xs bg-gray-800 px-1 rounded">{fileInfo.hash}</code>
</a>)
</span>
)}
</p>
<p className="text-gray-400 mt-2">
Please read our Terms of Service carefully before using LiteNet services.
</p>
</header>
<EmergencyDisclaimer />
<div className="prose prose-invert max-w-none">
<ReactMarkdown
components={{
h1: ({ children }) => <h1 className="text-4xl font-bold text-white mb-8">{children}</h1>,
h2: ({ children }) => {
const text = typeof children === 'string' ? children : children?.join?.('') || '';
if (text.includes('ACKNOWLEDGMENT')) {
return null; // Handle acknowledgment separately
}
return <h2 className="text-2xl font-semibold mb-4 text-white mt-8">{children}</h2>;
},
h3: ({ children }) => <h3 className="text-xl font-semibold mb-3 text-white">{children}</h3>,
p: ({ children }) => {
const text = typeof children === 'string' ? children : children?.toString?.() || '';
const isAcknowledgment = text.includes('By using LiteNet\'s services, you acknowledge');
if (isAcknowledgment) {
return (
<div className="bg-gray-900/50 border border-gray-700 rounded-lg p-6 mt-8">
<p className="font-semibold text-white mb-4">ACKNOWLEDGMENT</p>
<p className="text-gray-300 mb-0">{children}</p>
</div>
);
}
return <p className="mb-4">{children}</p>;
},
ul: ({ children }) => <ul className="list-disc pl-6 mb-4">{children}</ul>,
ol: ({ children }) => <ol className="list-decimal pl-6 mb-4">{children}</ol>,
li: ({ children }) => <li className="mb-1">{children}</li>,
a: ({ href, children }) => (
<Link href={href} className="text-blue-400 hover:text-blue-300 underline">
{children}
</Link>
),
strong: ({ children }) => <strong className="font-bold">{children}</strong>,
hr: () => <hr className="border-gray-700 my-8" />,
}}
>
{cleanedContent}
</ReactMarkdown>
</div>
</div>
</div>
</main>
<Footer />
</>
);
}

View file

@ -1,5 +1,3 @@
import { TermsOfServiceModal } from './terms-of-service-modal'
import { PrivacyPolicyModal } from './privacy-policy-modal'
import Link from 'next/link'
export default function Footer() {
@ -56,8 +54,14 @@ export default function Footer() {
{/* Legal links */}
<div className="flex flex-col gap-4 items-center text-sm sm:flex-row sm:gap-6">
<TermsOfServiceModal />
<PrivacyPolicyModal />
<Link href="/terms" className="hover:text-blue-400 transition-colors duration-300 relative group">
Terms of Service
<span className="absolute bottom-0 left-0 w-0 h-0.5 bg-blue-400 transition-all duration-300 group-hover:w-full" />
</Link>
<Link href="/privacy" className="hover:text-blue-400 transition-colors duration-300 relative group">
Privacy Policy
<span className="absolute bottom-0 left-0 w-0 h-0.5 bg-blue-400 transition-all duration-300 group-hover:w-full" />
</Link>
</div>
</div>
</div>

View file

@ -1,104 +1,28 @@
"use client";
import React, { useState, useEffect } from 'react'
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
import { ScrollArea } from "@/components/ui/scroll-area"
import { AnimatePresence, motion } from "framer-motion"
export function PrivacyPolicyModal() {
const [open, setOpen] = useState(false);
const router = useRouter();
useEffect(() => {
if (window.location.hash === '#privacy') {
document.getElementById('privacy-trigger').click();
router.push('/privacy');
}
}, []);
}, [router]);
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<button id="privacy-trigger" className="text-sm underline underline-offset-4">Privacy Policy</button>
<Link href="/privacy" className="text-sm underline underline-offset-4">Privacy Policy</Link>
</DialogTrigger>
<AnimatePresence>
{open && (
<DialogContent
className="sm:max-w-[625px] bg-black text-white border border-gray-800 p-0 gap-0"
onEscapeKeyDown={() => setOpen(false)}
onPointerDownOutside={() => setOpen(false)}
forceMount
>
<motion.div
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -10 }}
transition={{ duration: 0.2 }}
className="p-6 flex flex-col max-h-[90vh]"
>
<DialogHeader className="px-0 pb-4">
<DialogTitle className="text-2xl font-bold">Privacy Policy</DialogTitle>
<DialogDescription className="text-gray-400">
LiteNet is committed to protecting your privacy. This Privacy Policy explains our practices regarding the collection, use, and disclosure of your information.
</DialogDescription>
</DialogHeader>
<ScrollArea className="flex-grow border border-gray-800 rounded-md p-4">
<h2 className="text-lg font-semibold mb-2">1. Information Collection and Use</h2>
<p className="mb-4">
Privacy is a primary goal of LiteNet. We collect and maintain only necessary information to ensure the safety and functionality of our system.
</p>
<h2 className="text-lg font-semibold mb-2">2. Call Detail Records (CDR) Logs</h2>
<p className="mb-4">
CDR Logs are accessible only by authorized personnel. These logs are used solely for system debugging purposes and to identify and block malicious callers. Access to these logs is strictly controlled and monitored.
</p>
<h2 className="text-lg font-semibold mb-2">3. Call Recording</h2>
<p className="mb-4">
Inbound and outbound calls (not between extensions) on LiteNet are recorded and may be listened to by the staff team if either party requests it or if a dire situation presents itself (such as abuse, harassment, or legal compliance). Recordings are stored securely and are only accessed when necessary for moderation, safety, or legal reasons.
</p>
<p className="mb-4">
Individuals may record their calls via their own methods provided it's legal in their jurisdiction. If you record your calls we ask you announce it before a conversation.
</p>
<h2 className="text-lg font-semibold mb-2">4. Voicemail Privacy</h2>
<p className="mb-4">
LiteNet does not track or monitor voicemails. Users can expect an inherent level of privacy when using the voicemail system. Voicemail messages are accessible only by the owner of the extension.
</p>
<h2 className="text-lg font-semibold mb-2">5. Data Deletion</h2>
<p className="mb-4">
Users have the right to request the deletion of their data at any time. This can be done by using the "Delete your extension" function within the user interface. Upon deletion, all relevant user information, including but not limited to login credentials, voicemail messages, and voicemail PIN numbers, will be immediately and permanently removed from our system.
</p>
<h2 className="text-lg font-semibold mb-2">6. Data Security</h2>
<p className="mb-4">
We implement a variety of security measures to maintain the safety of your personal information. However, no method of transmission over the Internet or method of electronic storage is 100% secure.
</p>
<h2 className="text-lg font-semibold mb-2">7. Changes to This Privacy Policy</h2>
<p className="mb-4">
We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page and updating the "last updated" date.
</p>
<h2 className="text-lg font-semibold mb-2">8. Contact Us</h2>
<p className="mb-4">
If you have any questions or concerns regarding this Privacy Policy, please contact our staff members. They are available to assist you with any privacy-related inquiries.
</p>
<p className="mt-4 font-semibold">
By using LiteNet's services, you acknowledge that you have read and understood this Privacy Policy and agree to its terms.
</p>
</ScrollArea>
</motion.div>
</DialogContent>
)}
</AnimatePresence>
</Dialog>
)
}

View file

@ -1,113 +1,27 @@
"use client";
import React, { useState, useEffect } from 'react'
import { useRouter } from 'next/navigation';
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog"
import { ScrollArea } from "@/components/ui/scroll-area"
import { AnimatePresence, motion } from "framer-motion"
export function TermsOfServiceModal() {
const [open, setOpen] = useState(false);
const router = useRouter();
useEffect(() => {
if (window.location.hash === '#tos') {
document.getElementById('tos-trigger').click();
router.push('/terms');
}
}, []);
}, [router]);
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>
<button id="tos-trigger" className="text-sm underline underline-offset-4">Terms of Service</button>
<a href="/terms" className="text-sm underline underline-offset-4">Terms of Service</a>
</DialogTrigger>
<AnimatePresence>
{open && (
<DialogContent
className="sm:max-w-[625px] bg-black text-white border border-gray-800 p-0 gap-0"
onEscapeKeyDown={() => setOpen(false)}
onPointerDownOutside={() => setOpen(false)}
forceMount
>
<motion.div
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -10 }}
transition={{ duration: 0.2 }}
className="p-6 flex flex-col max-h-[90vh]"
>
<DialogHeader className="px-0 pb-4">
<DialogTitle className="text-2xl font-bold">Terms of Service</DialogTitle>
<DialogDescription className="text-gray-400">
Please read our Terms of Service carefully.
</DialogDescription>
</DialogHeader>
<ScrollArea className="flex-grow border border-gray-800 rounded-md p-4">
<h2 className="text-lg font-semibold mb-2">1. Acceptance of Terms</h2>
<p className="mb-4">
By accessing or using LiteNet's services, you agree to comply with and be bound by these Terms of Service. If you do not agree to these terms, please do not use our services.
</p>
<h2 className="text-lg font-semibold mb-2">2. Discord Community Rules</h2>
<ul className="list-disc pl-5 mb-4">
<li>External drama is strictly prohibited.</li>
<li>Discrimination of any kind, including but not limited to sexism, racism, homophobia, and transphobia, is not tolerated.</li>
<li>Users must use common sense in all channels. Spamming and posting NSFW content are prohibited.</li>
<li>Chain paging is not allowed at any time. Keep them brief, especially in major page groups.</li>
<li>Spam calling external numbers is explicitly prohibited, and will result in termination.</li>
<li>Staff reserve the right to delete messages, warn, mute, kick, and ban users for any reason, within reason.</li>
</ul>
<h2 className="text-lg font-semibold mb-2">3. Fax Usage Rules</h2>
<ul className="list-disc pl-5 mb-4">
<li>NSFW content is prohibited in faxes.</li>
<li>Faxes that would take an excessive amount of time to send are not allowed.</li>
<li>Extremely long faxes are prohibited.</li>
<li>Sending faxes that waste ink excessively is not permitted.</li>
<li>Users should not send faxes they wouldn't want to receive themselves.</li>
</ul>
<p className="mb-4">
Note: These fax rules can be waived with prior consent from the recipient.
</p>
<h2 className="text-lg font-semibold mb-2">4. Conduct</h2>
<p className="mb-4">
Users are expected to behave in a respectful and lawful manner. The absence of a specific written rule does not imply that an action is permitted. LiteNet reserves the right to determine what constitutes appropriate behavior.
</p>
<h2 className="text-lg font-semibold mb-2">5. Modifications to Terms</h2>
<p className="mb-4">
These Terms of Service are subject to change. LiteNet will make an announcement whenever changes occur. It is the user's responsibility to review these terms periodically.
</p>
<h2 className="text-lg font-semibold mb-2">6. Termination of Service</h2>
<p className="mb-4">
LiteNet reserves the right to terminate or suspend access to our services, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms of Service.
</p>
<h2 className="text-lg font-semibold mb-2">7. Limitation of Liability</h2>
<p className="mb-4">
LiteNet shall not be liable for any indirect, incidental, special, consequential or punitive damages, or any loss of profits or revenues, whether incurred directly or indirectly, or any loss of data, use, goodwill, or other intangible losses, resulting from your access to or use of or inability to access or use the services.
</p>
<h2 className="text-lg font-semibold mb-2">8. Governing Law</h2>
<p className="mb-4">
These Terms shall be governed and construed in accordance with the laws of the jurisdiction in which LiteNet operates, without regard to its conflict of law provisions.
</p>
<p className="mt-4 font-semibold">
By using LiteNet's services, you acknowledge that you have read, understood, and agree to be bound by these Terms of Service.
</p>
</ScrollArea>
</motion.div>
</DialogContent>
)}
</AnimatePresence>
</Dialog>
)
}

121
src/data/privacy.md Normal file
View file

@ -0,0 +1,121 @@
# Privacy Policy
LiteNet is committed to protecting your privacy. This Privacy Policy explains our practices regarding the collection, use, and disclosure of your information when you use our services.
---
## 1. Information We Collect
### 1.1 Information You Provide
- Discord account information (username, user ID, avatar) when you register
- Voice communications and call data when using our PBX services
- Voicemail messages you record or receive
- Fax transmissions and content
- Any information you voluntarily provide in our Discord server or other communications
### 1.2 Information We Automatically Collect
- Call Detail Records (CDR) including call duration, timestamps, caller/callee information, and call quality metrics
- Device information and SIP registration data
- IP addresses and network information
- System logs and usage statistics
- Website usage data and analytics
## 2. How We Use Your Information
We use the collected information for the following purposes:
- Providing and maintaining our PBX and communication services
- Processing and routing voice calls, faxes, and other communications
- System debugging, maintenance, and performance optimization
- Identifying and preventing abuse, fraud, and malicious activity
- Enforcing our Terms of Service and community guidelines
- Responding to support requests and technical issues
- Improving our services and developing new features
- Complying with legal obligations and law enforcement requests
## 3. Call Recording and Monitoring
**Important:** Inbound and outbound calls (excluding calls between LiteNet extensions) are recorded for quality assurance, security, and moderation purposes. Additionally, some users may have call recording enabled on their individual extensions, which can record internal calls between LiteNet extensions when this PBX feature is activated.
These recordings may be accessed by authorized staff members in the following circumstances:
- When either party to the call requests review for dispute resolution
- When abuse, harassment, or violations of our Terms of Service are reported
- For legal compliance or law enforcement purposes
- When necessary to investigate security incidents or system issues
Call recordings are stored securely and access is strictly controlled and logged. If you record calls using your own equipment, you are responsible for complying with applicable recording consent laws in your jurisdiction and should announce recording to all parties as required by law.
**Note:** Users with call recording enabled on their extensions should be aware that their internal calls within the LiteNet system may be recorded automatically by the PBX system. This is a configurable feature that some users have enabled for their own purposes.
**Elevator Phone Notice:** Users connecting elevator emergency phones or similar devices must ensure these devices are properly reconfigured to disable automatic emergency dialing features before connection to LiteNet. Any emergency calls from such devices will not reach emergency services and may be recorded and monitored like other calls on our system.
## 4. Voicemail Privacy and Security
Voicemail messages are private to the extension owner and are not monitored or accessed by LiteNet staff under normal circumstances. However, voicemail data may be accessed if required for technical support, system maintenance, legal compliance, or when investigating reported violations of our Terms of Service. All voicemail access is logged and restricted to authorized personnel only.
## 5. Data Sharing and Disclosure
We do not sell, trade, or otherwise transfer your personal information to third parties except in the following circumstances:
- With your explicit consent
- To comply with legal obligations, court orders, or law enforcement requests
- To protect our rights, property, or safety, or that of our users or the public
- In connection with a merger, acquisition, or sale of assets (with notice to users)
- With service providers who assist in operating our services (under strict confidentiality agreements)
- When necessary to investigate or prevent illegal activities or violations of our Terms
## 6. Data Retention
We retain your information for the following periods:
- **Call recordings:** Up to 90 days, or longer if required for ongoing investigations
- **Call Detail Records:** Up to 2 years for billing and system analysis purposes
- **Voicemail messages:** Until deleted by the user or account termination
- **Account information:** Until account deletion or service termination
- **System logs:** Up to 1 year for security and debugging purposes
## 7. Your Rights and Choices
You have the following rights regarding your personal information:
- **Access:** Request information about what personal data we have about you
- **Correction:** Request correction of inaccurate or incomplete information
- **Deletion:** Request deletion of your account and associated data
- **Portability:** Request a copy of your data in a machine-readable format
- **Objection:** Object to certain processing of your data
- **Restriction:** Request restriction of processing under certain circumstances
To exercise these rights, contact our staff through official channels. Please note that some data may be retained for legal compliance or legitimate business purposes even after deletion requests.
## 8. Data Security
We implement industry-standard security measures to protect your personal information, including encryption of data in transit and at rest, access controls, regular security audits, and staff training. However, no method of transmission over the Internet or electronic storage is 100% secure, and we cannot guarantee absolute security. We will notify users of any significant data breaches as required by applicable law.
## 9. International Data Transfers
Your information may be transferred to and processed in countries other than your country of residence. These countries may have different data protection laws than your jurisdiction. When we transfer your information internationally, we ensure appropriate safeguards are in place to protect your privacy rights.
## 10. Children's Privacy
Our services are not directed to children under 13 years of age. We do not knowingly collect personal information from children under 13. If we become aware that we have collected personal information from a child under 13, we will take steps to delete such information promptly. Parents or guardians who believe their child has provided us with personal information should contact us immediately.
## 11. Cookies and Tracking Technologies
Our website may use cookies and similar tracking technologies to enhance user experience, analyze usage patterns, and improve our services. You can control cookie preferences through your browser settings, though disabling cookies may affect website functionality.
## 12. Changes to This Privacy Policy
We may update this Privacy Policy from time to time to reflect changes in our practices, technology, legal requirements, or other factors. We will notify users of material changes through our Discord server, website announcements, or email. The "Last updated" date at the top of this policy indicates when the most recent changes were made. Your continued use of our services after such changes constitutes acceptance of the updated Privacy Policy.
## 13. Contact Us
If you have any questions, concerns, or requests regarding this Privacy Policy or our data practices, please contact us through our official communication channels available on our Discord server or website. For privacy-specific inquiries or to exercise your privacy rights, please clearly indicate "Privacy Request" in your communication.
---
## ACKNOWLEDGMENT
By using LiteNet's services, you acknowledge that you have read, understood, and agree to the collection, use, and disclosure of your information as described in this Privacy Policy.

149
src/data/terms.md Normal file
View file

@ -0,0 +1,149 @@
# Terms of Service
Please read our Terms of Service carefully before using LiteNet services.
---
## 1. Acceptance of Terms
By accessing, using, or registering for LiteNet's services (including but not limited to our PBX system, Discord server, website, and related services), you agree to comply with and be bound by these Terms of Service ("Terms"). If you do not agree to these terms, you must immediately cease all use of our services. These Terms constitute a legally binding agreement between you and LiteNet.
## 2. Service Description
LiteNet provides a community-based PBX (Private Branch Exchange) system for educational and hobbyist purposes. Our services include:
- SIP-based telephone extensions for registered users
- Voice calling between extensions and external numbers
- Voicemail services
- Conference calling capabilities
- Fax transmission services
- Related community features and support
## 3. User Conduct and Community Rules
### 3.1 General Conduct
Users must conduct themselves in a lawful, respectful, and appropriate manner. Prohibited activities include but are not limited to:
- Harassment, bullying, or threatening other users
- Discrimination based on race, religion, gender, sexual orientation, nationality, disability, or any other protected characteristic
- Posting or transmitting illegal, obscene, defamatory, or harmful content
- Attempting to gain unauthorized access to systems or other users' accounts
- Using the service for any illegal activities or purposes
- Impersonating other individuals or entities
- Spamming, advertising, or soliciting without authorization
### 3.2 Discord Community Rules
- External drama and personal conflicts from other platforms are strictly prohibited
- Keep discussions relevant to the appropriate channels
- No NSFW (Not Safe For Work) content in any form
- Spam messages, excessive emoji use, or message flooding is prohibited
- Use of selfbots or automated tools acting on your behalf is not allowed
- Voice channels must be used respectfully; excessive noise or disruptive behavior is prohibited
### 3.3 Voice Call Rules
- Prank calling, spam calling, or harassing calls are strictly prohibited
- Chain paging (rapidly paging multiple extensions) is not permitted
- Calls to emergency services, toll numbers, or premium rate numbers are blocked and prohibited
- Recording calls without announcing to all parties may violate local laws - users are responsible for compliance
- Some users may have call recording enabled on their extensions for internal LiteNet calls - this is a PBX feature that records calls automatically when enabled
- Excessive call volume that impacts system performance may result in restrictions
- **Elevator Phone Users:** If you are connecting an elevator emergency phone or similar device to LiteNet, you must first reconfigure or disable any built-in emergency dialing features that automatically connect to elevator monitoring services or emergency providers. These devices must be properly configured to prevent automatic emergency calls before being connected to the LiteNet system.
## 4. Fax Usage Rules
- Faxes containing NSFW, illegal, or offensive content are strictly prohibited
- Faxes exceeding 25 pages or taking longer than 15 minutes to transmit are prohibited
- Sending faxes intended to waste recipient resources (ink, paper, time) is not permitted
- Users must only send faxes they would reasonably want to receive
- Spam faxing or sending unsolicited commercial faxes is prohibited
**Note:** These fax rules may be waived only with explicit prior written consent from the recipient and notification to LiteNet staff.
## 5. Account Registration and Security
To use LiteNet services, you must register through our Discord server and follow the provided registration process. You are responsible for:
- Providing accurate and complete registration information
- Maintaining the security of your account credentials
- Notifying us immediately of any unauthorized use of your account
- All activities that occur under your account
- Complying with any age restrictions (users must be 13 years or older)
## 6. Privacy and Data Protection
Your privacy is important to us. Please review our [Privacy Policy](/privacy), which explains how we collect, use, and protect your information. By using our services, you also consent to our Privacy Policy.
## 7. Intellectual Property
LiteNet and its associated trademarks, logos, and content are owned by LiteNet or its licensors. You may not use, reproduce, or distribute any copyrighted material without proper authorization. Users retain ownership of their own content but grant LiteNet a license to use, store, and transmit such content as necessary to provide services.
## 8. Service Availability and Modifications
LiteNet provides services on an "as available" basis. We do not guarantee continuous, uninterrupted access to our services. We reserve the right to modify, suspend, or discontinue any aspect of our services at any time without prior notice. We may also impose usage limits or restrictions on certain features.
## 9. Prohibited Uses
In addition to the conduct rules above, the following uses are strictly prohibited:
- Using the service for any unlawful purpose or in violation of any applicable laws
- Attempting to reverse engineer, hack, or compromise our systems
- Using the service to transmit malware, viruses, or other harmful code
- Interfering with or disrupting our services or networks
- Creating multiple accounts to circumvent restrictions or bans
- Using the service for commercial purposes without express written permission
- Violating any applicable telecommunications regulations
## 10. Enforcement and Sanctions
LiteNet staff reserve the right to take any of the following actions for violations of these Terms:
- Issue warnings or temporary restrictions
- Suspend or terminate user accounts
- Remove or block content
- Report illegal activities to appropriate authorities
- Take legal action when necessary
The absence of a specific written rule does not imply that an action is permitted. LiteNet reserves sole discretion in determining what constitutes appropriate behavior and may take action for any conduct deemed harmful to the community or service.
## 11. Termination
LiteNet reserves the right to terminate or suspend your access to our services immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach these Terms. Upon termination, your right to use the services will cease immediately, and any data associated with your account may be deleted.
## 12. Disclaimers and Limitation of Liability
**DISCLAIMER OF WARRANTIES:** LiteNet services are provided "AS IS" and "AS AVAILABLE" without any warranties of any kind, either express or implied, including but not limited to implied warranties of merchantability, fitness for a particular purpose, or non-infringement.
**LIMITATION OF LIABILITY:** To the fullest extent permitted by law, LiteNet shall not be liable for any indirect, incidental, special, consequential, or punitive damages, or any loss of profits, revenues, data, use, goodwill, or other intangible losses, resulting from your access to or use of or inability to access or use the services, even if LiteNet has been advised of the possibility of such damages.
## 13. Indemnification
You agree to defend, indemnify, and hold harmless LiteNet, its officers, directors, employees, and agents from and against any claims, damages, obligations, losses, liabilities, costs, or debt, and expenses (including but not limited to attorney's fees) arising from your use of and access to the services, your violation of these Terms, or your violation of any third-party rights.
## 14. Dispute Resolution
Any disputes arising out of or relating to these Terms or the services shall be resolved through binding arbitration in accordance with the rules of the American Arbitration Association. The arbitration shall take place in the state where LiteNet is headquartered. You waive any right to a jury trial and agree that any disputes will be resolved on an individual basis (no class actions).
## 15. Modifications to Terms
LiteNet reserves the right to modify these Terms at any time. We will provide notice of material changes through our Discord server, website, or email. Your continued use of the services after such modifications constitutes acceptance of the updated Terms. It is your responsibility to review these Terms periodically.
## 16. Governing Law and Jurisdiction
These Terms shall be governed and construed in accordance with the laws of the State of Montana, United States, without regard to its conflict of law provisions. Any legal action or proceeding relating to these Terms shall be brought exclusively in the federal or state courts located in Montana.
## 17. Severability
If any provision of these Terms is held to be invalid or unenforceable, the remaining provisions shall remain in full force and effect. The invalid or unenforceable provision shall be replaced with a valid provision that most closely approximates the intent of the original provision.
## 18. Contact Information
If you have any questions about these Terms of Service, please contact us through our Discord server or other official communication channels. For legal notices, please use our designated contact methods available on our website.
---
## ACKNOWLEDGMENT
By using LiteNet's services, you acknowledge that you have read, understood, and agree to be bound by these Terms of Service, including the emergency services disclaimer. You understand that these Terms constitute a legally binding agreement between you and LiteNet.