|
| 1 | + |
| 2 | +<!DOCTYPE html> |
| 3 | +<html lang="en"> |
| 4 | +<head> |
| 5 | + <meta charset="utf-8" /> |
| 6 | + <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| 7 | + <title>Sweepify — Telegram Group Guardian</title> |
| 8 | + <meta name="description" content="Sweepify keeps Telegram groups clean by auto-deleting abusive messages, optionally blocking promotional spam, and tidying join/left messages." /> |
| 9 | + <meta name="theme-color" content="#0160BF" /> |
| 10 | + |
| 11 | + <style> |
| 12 | + :root{ |
| 13 | + --brand:#0160BF; |
| 14 | + --brand2:#0ea5e9; |
| 15 | + --bg:#0b1220; |
| 16 | + --surface:#0e1528; |
| 17 | + --text:#e7eef8; |
| 18 | + --muted:#9fb2c7; |
| 19 | + --border:rgba(255,255,255,.09); |
| 20 | + --radius:16px; |
| 21 | + --shadow:0 10px 32px rgba(0,0,0,.35); |
| 22 | + --shadow-sm:0 6px 18px rgba(0,0,0,.25); |
| 23 | + --grad:radial-gradient(900px 600px at 8% 10%, rgba(1,96,191,.25), transparent 60%), |
| 24 | + radial-gradient(900px 600px at 88% 30%, rgba(14,165,233,.18), transparent 60%), |
| 25 | + linear-gradient(180deg, #0b1220, #0b1220); |
| 26 | + } |
| 27 | + *{box-sizing:border-box} |
| 28 | + html,body{margin:0} |
| 29 | + body{ |
| 30 | + font-family: system-ui, -apple-system, Segoe UI, Roboto, Inter, Helvetica, Arial, sans-serif; |
| 31 | + background:var(--bg); color:var(--text); -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; |
| 32 | + } |
| 33 | + a{color:inherit; text-decoration:none} |
| 34 | + .container{max-width:1120px; margin:0 auto; padding:0 20px} |
| 35 | + |
| 36 | + /* NAV */ |
| 37 | + .nav{position:sticky; top:0; z-index:50; backdrop-filter:blur(10px); |
| 38 | + background:color-mix(in oklab, var(--surface) 82%, transparent); border-bottom:1px solid var(--border)} |
| 39 | + .nav-inner{display:flex; align-items:center; justify-content:space-between; height:70px; gap:12px} |
| 40 | + .brand{display:flex; align-items:center; gap:.8rem} |
| 41 | + .logo{width:40px; height:40px; border-radius:12px; background:linear-gradient(135deg,var(--brand),var(--brand2)); box-shadow:var(--shadow-sm)} |
| 42 | + .brand-txt{display:flex; flex-direction:column; line-height:1.05} |
| 43 | + .brand-title{font-weight:800; letter-spacing:.2px} |
| 44 | + .brand-sub{font-size:.8rem; color:var(--muted)} |
| 45 | + .links{display:flex; align-items:center; gap:.5rem} |
| 46 | + .links a{padding:.6rem .8rem; border-radius:10px; color:var(--muted)} |
| 47 | + .links a:hover{background:rgba(255,255,255,.06); color:var(--text)} |
| 48 | + .btn{display:inline-flex; align-items:center; gap:.55rem; padding:.85rem 1.05rem; border-radius:12px; font-weight:700; |
| 49 | + background:linear-gradient(135deg,var(--brand),var(--brand2)); color:#fff; border:1px solid rgba(255,255,255,.08); box-shadow:var(--shadow-sm); transition:.18s transform ease, .2s box-shadow ease} |
| 50 | + .btn:hover{transform:translateY(-2px); box-shadow:var(--shadow)} |
| 51 | + .btn.secondary{background:transparent; color:var(--text); border:1px solid var(--border)} |
| 52 | + .toggle{display:none; width:40px; height:40px; border:1px solid var(--border); border-radius:10px; background:transparent; position:relative; cursor:pointer} |
| 53 | + .toggle span{position:absolute; left:9px; right:9px; height:2px; background:currentColor; border-radius:2px; transition:.2s} |
| 54 | + .toggle span:nth-child(1){top:12px} .toggle span:nth-child(2){top:19px} .toggle span:nth-child(3){top:26px} |
| 55 | + .toggle[aria-expanded="true"] span:nth-child(1){top:19px; transform:rotate(45deg)} |
| 56 | + .toggle[aria-expanded="true"] span:nth-child(2){opacity:0} |
| 57 | + .toggle[aria-expanded="true"] span:nth-child(3){top:19px; transform:rotate(-45deg)} |
| 58 | + @media(max-width:900px){ |
| 59 | + .toggle{display:block} |
| 60 | + .links{position:absolute; top:70px; left:0; right:0; display:grid; gap:6px; padding:14px 18px; |
| 61 | + background:color-mix(in oklab, var(--surface) 94%, transparent); border-bottom:1px solid var(--border); |
| 62 | + transform:translateY(-12px); opacity:0; pointer-events:none; transition:transform .2s, opacity .2s} |
| 63 | + .links.open{transform:translateY(0); opacity:1; pointer-events:auto} |
| 64 | + .links a{padding:1rem; border-radius:12px} |
| 65 | + .links .btn{width:100%; justify-content:center} |
| 66 | + } |
| 67 | + |
| 68 | + /* HERO */ |
| 69 | + .hero{background:var(--grad); border-bottom:1px solid var(--border); padding:80px 0 56px} |
| 70 | + .hero-grid{display:grid; grid-template-columns:1.1fr .9fr; gap:28px; align-items:center} |
| 71 | + .hero h1{font-size:2.6rem; line-height:1.08; margin:0 0 .6rem} |
| 72 | + .hero p{color:var(--muted); font-size:1.08rem; margin:0 0 1.1rem} |
| 73 | + .hero .cta{display:flex; gap:12px; flex-wrap:wrap} |
| 74 | + .panel{ |
| 75 | + min-height:320px; border-radius:16px; border:1px solid var(--border); background: |
| 76 | + radial-gradient(260px 240px at 70% 20%, rgba(14,165,233,.28), transparent 60%), |
| 77 | + radial-gradient(260px 240px at 25% 80%, rgba(1,96,191,.28), transparent 60%), |
| 78 | + linear-gradient(180deg, #0d152a, #0d152a); |
| 79 | + display:flex; align-items:center; justify-content:center; font-weight:800; font-size:1.8rem; letter-spacing:.4px; box-shadow:var(--shadow-sm) |
| 80 | + } |
| 81 | + @media(max-width:960px){ .hero-grid{grid-template-columns:1fr} .hero h1{font-size:2.2rem} } |
| 82 | + |
| 83 | + /* SECTION */ |
| 84 | + section{padding:56px 0; border-bottom:1px solid var(--border)} |
| 85 | + .head{display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:18px} |
| 86 | + .muted{color:var(--muted)} |
| 87 | + .grid{display:grid; gap:16px} |
| 88 | + .grid.cols-3{grid-template-columns:repeat(3,1fr)} |
| 89 | + .grid.cols-2{grid-template-columns:repeat(2,1fr)} |
| 90 | + @media(max-width:960px){.grid.cols-3{grid-template-columns:1fr 1fr}} |
| 91 | + @media(max-width:720px){.grid.cols-3,.grid.cols-2{grid-template-columns:1fr}} |
| 92 | + |
| 93 | + .card{background:var(--surface); border:1px solid var(--border); border-radius:16px; box-shadow:var(--shadow-sm); padding:16px} |
| 94 | + .pill{display:inline-flex; align-items:center; gap:.45rem; padding:.35rem .65rem; border-radius:999px; border:1px solid var(--border); background:rgba(255,255,255,.04); color:var(--muted); font-size:.86rem} |
| 95 | + .kbd{font-family:ui-monospace,Menlo,Consolas,monospace; background:#0b1020; border:1px solid #1f2a44; border-radius:8px; padding:.18rem .45rem} |
| 96 | + |
| 97 | + /* FOOTER */ |
| 98 | + footer{padding:28px 0; color:var(--muted); text-align:center} |
| 99 | + footer a{color:#b9d9ff; text-decoration:underline} |
| 100 | + </style> |
| 101 | +</head> |
| 102 | +<body> |
| 103 | + |
| 104 | + <!-- NAV --> |
| 105 | + <nav class="nav"> |
| 106 | + <div class="container nav-inner"> |
| 107 | + <a class="brand" href="#top" aria-label="Sweepify home"> |
| 108 | + <div class="logo" aria-hidden="true"></div> |
| 109 | + <div class="brand-txt"> |
| 110 | + <span class="brand-title">Sweepify</span> |
| 111 | + <span class="brand-sub">Telegram Group Guardian</span> |
| 112 | + </div> |
| 113 | + </a> |
| 114 | + |
| 115 | + <button class="toggle" aria-expanded="false" aria-controls="navmenu" aria-label="Open menu"> |
| 116 | + <span></span><span></span><span></span> |
| 117 | + </button> |
| 118 | + |
| 119 | + <div id="navmenu" class="links"> |
| 120 | + <a href="#features">Features</a> |
| 121 | + <a href="#how">How it works</a> |
| 122 | + <a href="#commands">Commands</a> |
| 123 | + <a class="btn" href="https://t.me/SweepifyBot?startgroup=true" target="_blank" rel="noopener">➕ Add to Group</a> |
| 124 | + </div> |
| 125 | + </div> |
| 126 | + </nav> |
| 127 | + |
| 128 | + <!-- HERO --> |
| 129 | + <header class="hero" id="top"> |
| 130 | + <div class="container hero-grid"> |
| 131 | + <div> |
| 132 | + <h1>Keep your Telegram group clean & safe 🛡️</h1> |
| 133 | + <p>Sweepify automatically removes abusive or harmful messages. You can optionally enable promotional spam deletion. It also tidies join/left messages and skips linked-channel forwards.</p> |
| 134 | + <div class="cta"> |
| 135 | + <a class="btn" href="https://t.me/SweepifyBot?startgroup=true" target="_blank" rel="noopener">➕ Add to Group</a> |
| 136 | + <a class="btn secondary" href="https://t.me/PhoneInfoFamily" target="_blank" rel="noopener">🌐 Community</a> |
| 137 | + </div> |
| 138 | + </div> |
| 139 | + <div class="panel"><img src="https://raw.githubusercontent.com/AmitDas4321/Sweepify/main/assets/Sweepify%20Banner.gif" alt="Sweepify Banner"></div> |
| 140 | + </div> |
| 141 | + </header> |
| 142 | + |
| 143 | + <!-- FEATURES (only what exists) --> |
| 144 | + <section id="features"> |
| 145 | + <div class="container"> |
| 146 | + <div class="head"> |
| 147 | + <h2>Features</h2> |
| 148 | + <span class="pill">Requires: <span class="kbd">Delete messages</span> + <span class="kbd">Restrict members</span></span> |
| 149 | + </div> |
| 150 | + |
| 151 | + <div class="grid cols-3"> |
| 152 | + <div class="card"> |
| 153 | + <div class="pill">🧼 Abuse filter</div> |
| 154 | + <h3 style="margin:.4rem 0 .3rem">Abusive/hate/profanity deletion</h3> |
| 155 | + <p class="muted">Automatically deletes messages containing profanity, hate speech, or abusive language.</p> |
| 156 | + </div> |
| 157 | + |
| 158 | + <div class="card"> |
| 159 | + <div class="pill">🧲 Optional</div> |
| 160 | + <h3 style="margin:.4rem 0 .3rem">Promotional spam toggle</h3> |
| 161 | + <p class="muted">You decide if promotions/ads should be deleted. Leave it off for open discussions.</p> |
| 162 | + </div> |
| 163 | + |
| 164 | + <div class="card"> |
| 165 | + <div class="pill">👋 Noise cleanup</div> |
| 166 | + <h3 style="margin:.4rem 0 .3rem">Join/left message removal</h3> |
| 167 | + <p class="muted">Silently removes the default “joined” and “left” notices to keep chats readable.</p> |
| 168 | + </div> |
| 169 | + |
| 170 | + <div class="card"> |
| 171 | + <div class="pill">🔗 Linked channel aware</div> |
| 172 | + <h3 style="margin:.4rem 0 .3rem">Skip channel forwards</h3> |
| 173 | + <p class="muted">Ignores automatic forwards and messages from a linked channel.</p> |
| 174 | + </div> |
| 175 | + |
| 176 | + <div class="card"> |
| 177 | + <div class="pill">🛡️ Role respect</div> |
| 178 | + <h3 style="margin:.4rem 0 .3rem">Admins are never auto-deleted</h3> |
| 179 | + <p class="muted">Creator/Administrators are not moderated by the bot.</p> |
| 180 | + </div> |
| 181 | + |
| 182 | + <div class="card"> |
| 183 | + <div class="pill">⚙️ Setup helper</div> |
| 184 | + <h3 style="margin:.4rem 0 .3rem">One-time permission reminder</h3> |
| 185 | + <p class="muted">If required rights are missing, Sweepify posts a one-time checklist message.</p> |
| 186 | + </div> |
| 187 | + </div> |
| 188 | + </div> |
| 189 | + </section> |
| 190 | + |
| 191 | + <!-- HOW IT WORKS --> |
| 192 | + <section id="how"> |
| 193 | + <div class="container"> |
| 194 | + <div class="head"> |
| 195 | + <h2>How it works</h2> |
| 196 | + <span class="pill">Takes ~30 seconds</span> |
| 197 | + </div> |
| 198 | + <div class="grid cols-2"> |
| 199 | + <div class="card"> |
| 200 | + <h3>1) Add & make admin</h3> |
| 201 | + <p class="muted">Add <a href="https://t.me/SweepifyBot?startgroup=true" target="_blank" rel="noopener">@SweepifyBot</a> to your group and grant <span class="kbd">Delete messages</span> and <span class="kbd">Restrict members</span>.</p> |
| 202 | + </div> |
| 203 | + <div class="card"> |
| 204 | + <h3>2) Type <span class="kbd">/start</span></h3> |
| 205 | + <p class="muted">Send once in the group. Sweepify confirms “Guardian active” and moderates quietly.</p> |
| 206 | + </div> |
| 207 | + </div> |
| 208 | + </div> |
| 209 | + </section> |
| 210 | + |
| 211 | + <!-- COMMANDS (only what exists) --> |
| 212 | + <section id="commands"> |
| 213 | + <div class="container"> |
| 214 | + <div class="head"> |
| 215 | + <h2>Commands</h2> |
| 216 | + <span class="pill">Simple by design</span> |
| 217 | + </div> |
| 218 | + <div class="grid cols-2"> |
| 219 | + <div class="card"> |
| 220 | + <h3>/start</h3> |
| 221 | + <p class="muted">Shows a short confirmation and enables protection in the group.</p> |
| 222 | + </div> |
| 223 | + <div class="card"> |
| 224 | + <h3 class="muted">No extra commands</h3> |
| 225 | + <p class="muted">All moderation runs automatically in the background.</p> |
| 226 | + </div> |
| 227 | + </div> |
| 228 | + </div> |
| 229 | + </section> |
| 230 | + |
| 231 | + <!-- FINAL CTA --> |
| 232 | + <section> |
| 233 | + <div class="container"> |
| 234 | + <div class="card" style="display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:14px"> |
| 235 | + <div> |
| 236 | + <div class="muted">Ready to tidy up your chats?</div> |
| 237 | + <h3 style="margin:.2rem 0 0">Add Sweepify to your Telegram group</h3> |
| 238 | + </div> |
| 239 | + <div> |
| 240 | + <a class="btn" href="https://t.me/SweepifyBot?startgroup=true" target="_blank" rel="noopener">➕ Add to Group</a> |
| 241 | + <a class="btn secondary" style="margin-left:8px" href="https://t.me/PhoneInfoFamily" target="_blank" rel="noopener">🌐 Community</a> |
| 242 | + </div> |
| 243 | + </div> |
| 244 | + </div> |
| 245 | + </section> |
| 246 | + |
| 247 | + <!-- FOOTER --> |
| 248 | + <footer> |
| 249 | + <div class="container"> |
| 250 | + © <span id="year"></span> Sweepify · Community: <a href="https://t.me/PhoneInfoFamily" target="_blank" rel="noopener">@PhoneInfoFamily</a> · Support: <a href="https://t.me/PhoneInfo_Helpbot" target="_blank" rel="noopener">@PhoneInfo_Helpbot</a> |
| 251 | + </div> |
| 252 | + </footer> |
| 253 | + |
| 254 | + <script> |
| 255 | + // year |
| 256 | + document.getElementById('year').textContent = new Date().getFullYear(); |
| 257 | + |
| 258 | + // mobile menu |
| 259 | + const btn = document.querySelector('.toggle'); |
| 260 | + const menu = document.getElementById('navmenu'); |
| 261 | + if (btn && menu) { |
| 262 | + btn.addEventListener('click', () => { |
| 263 | + const open = btn.getAttribute('aria-expanded') === 'true'; |
| 264 | + btn.setAttribute('aria-expanded', String(!open)); |
| 265 | + menu.classList.toggle('open', !open); |
| 266 | + }); |
| 267 | + menu.querySelectorAll('a').forEach(a => a.addEventListener('click', () => { |
| 268 | + btn.setAttribute('aria-expanded', 'false'); menu.classList.remove('open'); |
| 269 | + })); |
| 270 | + } |
| 271 | + </script> |
| 272 | +</body> |
| 273 | +</html> |
0 commit comments