DevPinger
May 18, 2026 · View on GitHub
GitHub pull requests and Jira issues, delivered to one Telegram inbox.
Currently in preorder — 30 lifetime seats at $9. After that $19/mo. See preorder.devpinger.com.
Open the bot → @dev_pinger_bot
Tap /start, connect GitHub, optionally connect Jira. Events arrive in your
personal chat with inline buttons to approve, comment, view diff, transition,
snooze, or mute.
What V1 ships
| Surface | What you get |
|---|---|
| Sources | GitHub (PRs, reviews, comments, issues, releases, CI failures, direct pushes to default branch) and Jira Cloud (issues, comments, status changes, worklogs, mentions). |
| Delivery | A single Telegram bot — @dev_pinger_bot. |
| Inline actions | GitHub: approve, comment, view diff, snooze, mute. Jira: comment, transition, reply to comment, snooze, mute. |
| Provider write capability | The adapters can additionally request changes, merge, close, reopen, assign, and reply to review/issue comments — wired into callback handlers but not surfaced as keyboard buttons in V1. Extensions can attach custom button rows via the per-event actions slot. |
| Filtering | Mute by source, repo, project, or event type. Self-suppression (your own actions don't echo back, toggle with /notify_self). |
| Auth | Telegram /start + OAuth flows opened from the bot for GitHub and Jira. Tokens are stored AES-256-GCM encrypted. |
| Privacy | /unsubscribe, /export, /forget_event for GDPR rights. Plan-driven event retention. |
Quick start
The fastest path is the managed bot — just open @dev_pinger_bot in Telegram.
If you want to run your own copy, you need Node 22, pnpm 10, Docker (or another way to run Postgres 16 + Redis 7), and a publicly reachable URL for OAuth callbacks (Cloudflare Tunnel works well in development).
git clone https://github.com/Guck111/devpinger.git
cd devpinger
cp .env.example .env # fill in TELEGRAM_*, GITHUB_*, JIRA_*, ENCRYPTION_KEY
pnpm install
docker compose up postgres redis -d
pnpm db:migrate
pnpm dev
Detailed setup (Cloudflare Tunnel, GitHub/Jira OAuth apps, generating
ENCRYPTION_KEY) lives in docs/LOCAL_SETUP.md.
How it's built
apps/
server/ Fastify HTTP server + grammy Telegram bot
worker/ BullMQ workers (notifications, snooze, cleanup, oauth-state sweep, jira-webhook-refresh)
packages/
core/ SourceAdapter, DestinationAdapter, NormalizedEvent, plans, PlanGate
crypto/ AES-256-GCM cipher
db/ Drizzle schema + migrations
i18n/ en/ru translations
shared/ env schema, redact, mutes engine
sources/
github/ OAuth + Octokit + actions + normalize + adapter
jira/ OAuth (3LO) + REST client + actions + normalize + adapter
destinations/
telegram/ grammy wrapper + format + adapter
The split between apps/server/src/server.ts (createApp({extensions})),
registries.ts (source / destination registries), and services/ingest.ts
(the webhook -> normalize -> persist -> queue pipeline) is what makes the
codebase extensible without forks. See
docs/ARCHITECTURE.md for the long form.
Adding a new source or destination
- Implement
SourceAdapter(orDestinationAdapter) from@devpinger/corein a new package underpackages/sources/(orpackages/destinations/). - Register it in
apps/server/src/registries.tsandapps/worker/src/registries.ts. - Add the OAuth route (if applicable) and the webhook route to
apps/server/src/routes/. The webhook route should callservices/ingest.tsand let the adapter handle verify + normalize.
Contributions welcome — see CONTRIBUTING.md.
Self-hosting
Production deployment is documented in
docs/SELF_HOSTING.md. The shipped
infra/docker-compose.prod.yml brings up redis + server + worker behind
Caddy (TLS) and is what infra/deploy.sh drives; Postgres is expected
to be a managed service (Supabase, Neon, etc.). Provider-specific
guides:
Privacy
What we store, how long, how to delete: docs/PRIVACY.md.
TL;DR — /unsubscribe removes everything, /export gives you a JSON dump,
/forget_event <id> forgets one event. OAuth tokens are AES-256-GCM at rest.
Roadmap
V1.5 brings Microsoft Teams as a source. V2 layers on AI digests, email
delivery, web inbox, and recurring Stripe billing (subscriptions,
plan-gate enforcement, /billing UI) in a separate private repo that
consumes @devpinger/* packages from here. The public repo additionally
contains the preorder smoke-test surface (/v1/stripe/webhook for
checkout.session.completed, the preorders table) used for the
$9 lifetime preorder on preorder.devpinger.com. The full plan is in
docs/ROADMAP.md.
License
MIT — see LICENSE.