Skip to content

Commit b4b33d7

Browse files
Add landing page and APK download docs (GitHub Pages)
1 parent 2f81043 commit b4b33d7

9 files changed

Lines changed: 308 additions & 0 deletions

docs/apk/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# APK releases
2+
3+
Drop the signed `InstaReplyBot.apk` here and the landing page download button
4+
(`index.html` → "Download APK") will serve it directly.
5+
6+
The public build pipeline also publishes releases at:
7+
https://github.com/nandandas2407-web/InstaReplyBot/releases/latest
149 KB
Loading
89 KB
Loading
167 KB
Loading
175 KB
Loading
89.9 KB
Loading
89.6 KB
Loading
83.2 KB
Loading

docs/index.html

Lines changed: 301 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,301 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>InstaReply Bot — Automated Instagram DM replies, no login required</title>
7+
<meta name="description" content="InstaReply Bot watches your Instagram notifications and replies with AI. Runs on Android, needs no Instagram login, and works with free AI models.">
8+
<link rel="preconnect" href="https://fonts.googleapis.com">
9+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10+
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=IBM+Plex+Sans:wght@400;500;600&display=swap" rel="stylesheet">
11+
<style>
12+
:root{
13+
--paper:#f6f3ec;
14+
--surface:#ffffff;
15+
--ink:#1c1b19;
16+
--muted:#6b655c;
17+
--accent:#e8482b;
18+
--accent-dark:#c9381f;
19+
--border:#e4ddd0;
20+
--line:#efe9dc;
21+
--radius:10px;
22+
--radius-sm:6px;
23+
--maxw:1120px;
24+
}
25+
*{box-sizing:border-box;margin:0;padding:0}
26+
html{scroll-behavior:smooth}
27+
body{
28+
font-family:"IBM Plex Sans",system-ui,sans-serif;
29+
background:var(--paper);
30+
color:var(--ink);
31+
line-height:1.6;
32+
-webkit-font-smoothing:antialiased;
33+
}
34+
h1,h2,h3,h4{font-family:"Fraunces",Georgia,serif;font-weight:600;line-height:1.12;letter-spacing:-0.01em}
35+
a{color:inherit;text-decoration:none}
36+
img{max-width:100%;display:block}
37+
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}
38+
.muted{color:var(--muted)}
39+
40+
/* top bar */
41+
header{
42+
position:sticky;top:0;z-index:50;
43+
background:rgba(246,243,236,.86);
44+
backdrop-filter:saturate(160%) blur(10px);
45+
border-bottom:1px solid var(--border);
46+
}
47+
.nav{display:flex;align-items:center;justify-content:space-between;height:64px}
48+
.brand{display:flex;align-items:center;gap:10px;font-weight:600;font-family:"Fraunces",serif;font-size:18px}
49+
.brand img{width:30px;height:30px;border-radius:7px}
50+
.nav-links{display:flex;gap:28px;align-items:center}
51+
.nav-links a{font-size:14px;color:var(--muted);transition:color .15s}
52+
.nav-links a:hover{color:var(--ink)}
53+
.btn{
54+
display:inline-flex;align-items:center;gap:8px;
55+
font-family:"IBM Plex Sans",sans-serif;font-weight:600;font-size:14px;
56+
padding:11px 18px;border-radius:var(--radius-sm);border:1px solid transparent;
57+
cursor:pointer;transition:background .15s,border-color .15s,transform .1s;
58+
}
59+
.btn-primary{background:var(--accent);color:#fff}
60+
.btn-primary:hover{background:var(--accent-dark)}
61+
.btn-primary:active{transform:translateY(1px)}
62+
.btn-ghost{background:transparent;border-color:var(--border);color:var(--ink)}
63+
.btn-ghost:hover{border-color:var(--ink)}
64+
65+
/* hero */
66+
.hero{padding:72px 0 56px}
67+
.hero-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:48px;align-items:center}
68+
.eyebrow{
69+
display:inline-block;font-size:12px;letter-spacing:.14em;text-transform:uppercase;
70+
color:var(--accent);font-weight:600;margin-bottom:18px;
71+
}
72+
.hero h1{font-size:clamp(38px,5.4vw,62px);margin-bottom:20px}
73+
.hero p.lead{font-size:18px;color:var(--muted);max-width:46ch;margin-bottom:32px}
74+
.hero-cta{display:flex;gap:14px;flex-wrap:wrap}
75+
.hero-fact{margin-top:28px;display:flex;gap:30px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
76+
.hero-fact b{display:block;font-family:"Fraunces",serif;font-size:20px;color:var(--ink)}
77+
.hero-visual{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
78+
.hero-visual img{width:100%}
79+
80+
/* section frame */
81+
section.block{padding:72px 0;border-top:1px solid var(--line)}
82+
.sec-head{max-width:620px;margin-bottom:44px}
83+
.sec-head .eyebrow{margin-bottom:12px}
84+
.sec-head h2{font-size:clamp(28px,3.4vw,40px);margin-bottom:14px}
85+
.sec-head p{font-size:17px;color:var(--muted)}
86+
87+
/* how it works */
88+
.flow{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center}
89+
.flow-img{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
90+
.steps{list-style:none;display:flex;flex-direction:column;gap:22px}
91+
.steps li{display:grid;grid-template-columns:34px 1fr;gap:16px;align-items:start}
92+
.steps .n{
93+
width:34px;height:34px;border-radius:50%;background:var(--ink);color:#fff;
94+
display:grid;place-items:center;font-family:"Fraunces",serif;font-size:15px;font-weight:600;
95+
}
96+
.steps h4{font-family:"IBM Plex Sans",sans-serif;font-size:16px;font-weight:600;margin-bottom:2px}
97+
.steps p{font-size:14px;color:var(--muted)}
98+
99+
/* feature split */
100+
.feature{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;margin-bottom:64px}
101+
.feature:last-child{margin-bottom:0}
102+
.feature.rev .feature-text{order:2}
103+
.feature-text h3{font-size:26px;margin-bottom:12px}
104+
.feature-text p{color:var(--muted);font-size:16px;margin-bottom:18px}
105+
.feature-list{list-style:none;display:flex;flex-direction:column;gap:10px}
106+
.feature-list li{display:flex;gap:10px;font-size:15px;align-items:flex-start}
107+
.feature-list .dot{margin-top:8px;width:6px;height:6px;border-radius:50%;background:var(--accent);flex:none}
108+
.shot{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
109+
.shot img{width:100%}
110+
111+
/* download */
112+
.download{background:var(--ink);color:#f6f3ec;border-top:none}
113+
.download .wrap{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;padding-top:72px;padding-bottom:72px}
114+
.download h2{font-size:clamp(28px,3.4vw,40px);color:#fff;margin-bottom:14px}
115+
.download p{color:#c9c3b8;font-size:17px;max-width:42ch}
116+
.dl-card{background:#26241f;border:1px solid #3a372f;border-radius:var(--radius);padding:28px}
117+
.dl-card .row{display:flex;justify-content:space-between;align-items:center;padding:14px 0;border-bottom:1px solid #3a372f}
118+
.dl-card .row:last-child{border-bottom:none}
119+
.dl-card .k{font-size:14px;color:#c9c3b8}
120+
.dl-card .v{font-size:14px;color:#fff;font-weight:500}
121+
.dl-steps{margin-top:24px;display:flex;flex-direction:column;gap:14px;list-style:none}
122+
.dl-steps li{display:flex;gap:12px;font-size:14px;color:#e7e2d7;align-items:flex-start}
123+
.dl-steps .n{width:22px;height:22px;border-radius:5px;background:var(--accent);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:600;flex:none;margin-top:1px}
124+
125+
/* footer */
126+
footer{border-top:1px solid var(--border);padding:40px 0}
127+
.foot{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px;font-size:14px;color:var(--muted)}
128+
.foot a:hover{color:var(--ink)}
129+
130+
@media(max-width:860px){
131+
.hero-grid,.flow,.feature,.download .wrap{grid-template-columns:1fr;gap:32px}
132+
.feature.rev .feature-text{order:0}
133+
.nav-links{display:none}
134+
.hero{padding:48px 0 40px}
135+
section.block{padding:56px 0}
136+
}
137+
</style>
138+
</head>
139+
<body>
140+
141+
<header>
142+
<div class="wrap nav">
143+
<a class="brand" href="#top">
144+
<img src="images/IMG-20260812-WA0006.jpg" alt="InstaReply Bot app icon">
145+
InstaReply Bot
146+
</a>
147+
<nav class="nav-links">
148+
<a href="#how">How it works</a>
149+
<a href="#features">Features</a>
150+
<a href="#download">Download</a>
151+
<a href="https://github.com/nandandas2407-web/InstaReplyBot" target="_blank" rel="noopener">GitHub</a>
152+
</nav>
153+
<a class="btn btn-primary" href="#download">Get the APK</a>
154+
</div>
155+
</header>
156+
157+
<main id="top">
158+
<section class="hero">
159+
<div class="wrap hero-grid">
160+
<div>
161+
<span class="eyebrow">Android · AI · No login</span>
162+
<h1>Replies to your Instagram DMs, written while you sleep.</h1>
163+
<p class="lead">InstaReply Bot reads your incoming Instagram notifications and answers them with an AI model you choose. It runs entirely on your phone and never asks for your Instagram password.</p>
164+
<div class="hero-cta">
165+
<a class="btn btn-primary" href="#download">Download APK</a>
166+
<a class="btn btn-ghost" href="https://github.com/nandandas2407-web/InstaReplyBot" target="_blank" rel="noopener">View source</a>
167+
</div>
168+
<div class="hero-fact">
169+
<div><b>0</b> passwords required</div>
170+
<div><b>Free</b> AI tiers work</div>
171+
<div><b>Android 8+</b> supported</div>
172+
</div>
173+
</div>
174+
<div class="hero-visual">
175+
<img src="images/IMG-20260812-WA0000.jpg" alt="InstaReply Bot product banner showing the app answering Instagram messages automatically">
176+
</div>
177+
</div>
178+
</section>
179+
180+
<section class="block" id="how">
181+
<div class="wrap">
182+
<div class="sec-head">
183+
<span class="eyebrow">How it works</span>
184+
<h2>Four steps, no screen required</h2>
185+
<p>The app uses Android's notification system, the same mechanism you already use when you reply from the lock screen.</p>
186+
</div>
187+
<div class="flow">
188+
<div class="flow-img">
189+
<img src="images/IMG-20260812-WA0003.jpg" alt="Diagram showing how InstaReply Bot detects a message, matches a rule, generates a reply, and sends it">
190+
</div>
191+
<ol class="steps">
192+
<li><span class="n">1</span><div><h4>Detect</h4><p>A notification listener picks up the incoming Instagram DM on your device.</p></div></li>
193+
<li><span class="n">2</span><div><h4>Match</h4><p>Your rules decide who gets answered, using keyword, regex, or contact filters.</p></div></li>
194+
<li><span class="n">3</span><div><h4>Generate</h4><p>The chosen AI provider writes a reply in the tone you configured.</p></div></li>
195+
<li><span class="n">4</span><div><h4>Send</h4><p>The reply is delivered through Instagram's own notification Reply action.</p></div></li>
196+
</ol>
197+
</div>
198+
</div>
199+
</section>
200+
201+
<section class="block" id="features">
202+
<div class="wrap">
203+
<div class="sec-head">
204+
<span class="eyebrow">Inside the app</span>
205+
<h2>What you control</h2>
206+
<p>Every part of the reply flow is configurable from the dashboard. These are real screens from the app.</p>
207+
</div>
208+
209+
<div class="feature">
210+
<div class="feature-text">
211+
<h3>Your inbox, at a glance</h3>
212+
<p>The dashboard shows reply activity, active rules, and live status so you always know the bot is working.</p>
213+
<ul class="feature-list">
214+
<li><span class="dot"></span>Daily reply counts and recent activity</li>
215+
<li><span class="dot"></span>Toggles for notification and accessibility access</li>
216+
<li><span class="dot"></span>Last-attempt status for quick debugging</li>
217+
</ul>
218+
</div>
219+
<div class="shot">
220+
<img src="images/IMG-20260812-WA0001.jpg" alt="InstaReply Bot dashboard showing reply statistics and controls">
221+
</div>
222+
</div>
223+
224+
<div class="feature rev">
225+
<div class="feature-text">
226+
<h3>Rules that fit your inbox</h3>
227+
<p>Decide who gets an answer and how. Match on exact text, a pattern, or a sender list, and cap replies per day.</p>
228+
<ul class="feature-list">
229+
<li><span class="dot"></span>Trigger types: contains, exact, starts/ends with, regex, any</li>
230+
<li><span class="dot"></span>Per-rule AI provider and optional fixed template</li>
231+
<li><span class="dot"></span>Human-like delay and daily reply limits</li>
232+
</ul>
233+
</div>
234+
<div class="shot">
235+
<img src="images/IMG-20260812-WA0005.jpg" alt="InstaReply Bot rule editor with trigger patterns and provider selection">
236+
</div>
237+
</div>
238+
239+
<div class="feature">
240+
<div class="feature-text">
241+
<h3>Pick the AI you trust</h3>
242+
<p>Connect a free provider or a paid one. Keys are stored locally on the device and sent only to the provider you choose.</p>
243+
<ul class="feature-list">
244+
<li><span class="dot"></span>Free: Groq, OpenCode Zen, Gemini (no card)</li>
245+
<li><span class="dot"></span>Paid: OpenRouter, NVIDIA NIM, OpenAI, custom</li>
246+
<li><span class="dot"></span>Built-in model lists and key validation</li>
247+
</ul>
248+
</div>
249+
<div class="shot">
250+
<img src="images/IMG-20260812-WA0004.jpg" alt="InstaReply Bot AI provider settings with Groq, Gemini, and other providers">
251+
</div>
252+
</div>
253+
254+
<div class="feature rev">
255+
<div class="feature-text">
256+
<h3>One reply, every time</h3>
257+
<p>Duplicate notifications can't produce duplicate replies. The engine deduplicates by sender and message, and remembers what it already sent.</p>
258+
<ul class="feature-list">
259+
<li><span class="dot"></span>60-second in-memory dedupe</li>
260+
<li><span class="dot"></span>Persisted reply log that survives restarts</li>
261+
<li><span class="dot"></span>Single send per message, by design</li>
262+
</ul>
263+
</div>
264+
<div class="shot">
265+
<img src="images/IMG-20260812-WA0002.jpg" alt="InstaReply Bot feature overview showing multiple screens and supported AI providers">
266+
</div>
267+
</div>
268+
</div>
269+
</section>
270+
271+
<section class="block download" id="download">
272+
<div class="wrap">
273+
<div>
274+
<h2>Install InstaReply Bot</h2>
275+
<p>Download the APK, grant two permissions, connect a free AI key, and your first automated reply is seconds away.</p>
276+
<a class="btn btn-primary" href="apk/InstaReplyBot.apk" style="margin-top:24px" download>Download APK</a>
277+
</div>
278+
<div class="dl-card">
279+
<div class="row"><span class="k">Platform</span><span class="v">Android 8.0 and above</span></div>
280+
<div class="row"><span class="k">Size</span><span class="v">~12 MB</span></div>
281+
<div class="row"><span class="k">License</span><span class="v">MIT</span></div>
282+
<div class="row"><span class="k">Source</span><span class="v">Public on GitHub</span></div>
283+
<ol class="dl-steps">
284+
<li><span class="n">1</span><div>Install the APK and allow unknown sources when prompted.</div></li>
285+
<li><span class="n">2</span><div>Grant Notification Access and (optionally) the Accessibility service.</div></li>
286+
<li><span class="n">3</span><div>Add a free provider key in Settings and create your first rule.</div></li>
287+
</ol>
288+
</div>
289+
</div>
290+
</section>
291+
</main>
292+
293+
<footer>
294+
<div class="wrap foot">
295+
<span>InstaReply Bot — built with Kotlin for Android.</span>
296+
<span><a href="https://github.com/nandandas2407-web/InstaReplyBot" target="_blank" rel="noopener">GitHub</a> · <a href="https://github.com/nandandas2407-web/InstaReplyBot/blob/main/LICENSE" target="_blank" rel="noopener">MIT License</a></span>
297+
</div>
298+
</footer>
299+
300+
</body>
301+
</html>

0 commit comments

Comments
 (0)