Releases: innotelinc/zapit
Release list
zapit v1.4.2
zapit is the TransferOps edge utility of the Innotel Platform Stack — ephemeral, peer-to-peer file transfer with no storage layer.
v1.4.1
The real-iPhone-icon release 📱✨ — ZapIt on your Home Screen finally shows the logo instead of a screenshot.
What's new
- Proper iOS app icon — iOS ignores SVG
apple-touch-icons (and manifest icons), so iPhone/iPad installs fell back to a blurry page snapshot. The logo is now rasterized to a real 180×180 PNG (icon-180.png) and wired into the head as theapple-touch-icon, with a matching PNG favicon and service-worker cache entry. Re-add to Home Screen to pick up the new icon (delete the old tile first if the snapshot is cached).
Notes
- Icon rendered from
public/icon.svgvia librsvg — no visual redesign, same bolt. - Web app shell cache bumped to include the new icon.
- Tests: smoke 44/44.
- Images:
ghcr.io/innotelinc/zapit:1.4.1(also:latest).
Full Changelog: v1.4.0...v1.4.1
v1.4.0
The install-on-iPhone + leave-room release 📱 — ZapIt now guides iPhone users onto their Home Screen and lets you disconnect cleanly.
What's new
- Install works on iPhone/iPad now — Safari never shows an automatic install prompt, which is why the button only appeared on desktop/Android. ZapIt now detects iOS and keeps the header Install button visible, with a tap-by-tap Share → Add to Home Screen guide (it hides itself once you're running from the Home Screen). Desktop/Android keep the native browser prompt.
- ✕ Leave room — disconnect cleanly when you're done: peers are told you left, the rotation countdown stops, the QR drops back to the bare app address, the
?room=param leaves the URL — and you can pair a new code anytime. No more force-closing the tab.
Notes
- Wire protocol unchanged — safe in-place upgrade.
- Server untouched (peer-left already broadcast on socket close); this is client-side only.
- Tests: browser-sim 28/28, smoke 44/44, infisical 8/8.
- Images:
ghcr.io/innotelinc/zapit:1.4.0(also:latest).
Full Changelog: v1.3.1...v1.4.0
v1.3.1
The scan-and-join release 📲 — the QR code now tracks your room, so a phone scan joins instantly without typing the code.
What's new
- Room-aware QR code — previously the QR always encoded the bare app address; anyone scanning still had to type the room code. Now the QR refreshes automatically the moment a code is entered or paired (typing, Pair, Random, New code, and automatic room rotation) and encodes
?room=<code>, so a scan lands already paired. The QR, the Share button, and the address bar URL always agree. /api/lanaccepts?room=— the server sanitizes the code exactly like the WebSocket join (lowercase,[a-z0-9-]only, 24-char cap) and bakes it into the encoded target, with the same QR customization rules (PUBLIC_URL/QR_URL) respected.
Notes
- Client-side zero-dependency — QR generation stays server-side via the existing
qrcodepackage. - Wire protocol unchanged — safe in-place upgrade.
- Images:
ghcr.io/innotelinc/zapit:1.3.1(also:latest).
Full Changelog: v1.3.0...v1.3.1
zapit v1.3.0
The secret-ops + installable release ⚡📲 — Infisical-backed secrets, an installable PWA, and one stack that runs the landing page and the app together.
Highlights
- Infisical (SecretOps) integration —
ADMIN_PASSWORDandAUTHENTIK_CLIENT_SECRETnow acceptinfisical://references, resolved at boot before the admin hash is computed; plain values are mirrored up to Infisical on startup. Zero-dependency client (zapit/infisical.js) with unit tests; theINFISICAL_*env contract is documented in the stack doc. - Installable phone app (PWA) —
manifest.webmanifest+sw.jsapp shell make ZapIt installable to an iPhone or Android home screen (standalone window). New Share and Install buttons in the header: room-link sharing via the Web Share API with clipboard fallback; install prompt capture with an Add-to-Home-Screen hint. Mobile CSS pass with safe-area insets and 44px touch targets. - Landing + app in one Docker stack —
deploy/docker-compose.prod.ymlnow builds and runs both the static landing page (zapit.innotel.us, nginx on 8080) and the ZapIt app (zapp.innotel.us, WebSockets on 5150) from this repo. The app's canonical origin moved to zapp.innotel.us; QR codes, OIDC redirect URIs, and the Authentik blueprint all follow. - Container startup fix — the image previously crashed at boot (
Cannot find module './infisical') because the Dockerfile never copied the new module; CI only ran live-node tests so the broken image shipped.infisical.jsis now in the image and the prod stack boots healthy. - Droppy remnants removed — legacy
DROPPY_DATA_DIRfallback and README compatibility notes are gone. - Repo standardized to the portfolio — attribution guard, themed landing page (TransferOps ⚡), stack role doc, Infisical setup scripts, Pages workflow, and badges all match the other Innotel repos.
Notes
- App origin change: the transfer app now lives at
https://zapp.innotel.us;zapit.innotel.usserves only the landing page. Re-point any bookmarks/shortcuts, and re-apply the Authentik blueprint if you used SSO (redirect URI changed). - The prod compose builds from source (
up -d --build) rather than pulling the GHCR image. - Wire protocol unchanged since v1.2.1 — safe in-place upgrade.
- Images:
ghcr.io/innotelinc/zapit:1.3.0(also:latest).
Full Changelog: v1.2.1...v1.3.0
zapit v1.2.1
The gold lightning release ⚡⚡ — Zeus-mode branding across every surface.
Highlights
- Golden ZAPIT wordmark — uppercase with authority: bold 800 weight, wide tracking,
gold-sheen shimmer and a breathing glow. - The bolt of Zeus — heavier jag with a deep-gold gradient (champagne
#fffbeb→
amber#f59e0b→ bronze#92400e), glow-pulse, and crackling lightning-tick sparks. - App icon — rounded-square tile (
/icon.svg) with the golden bolt; wired as the
favicon everywhere and as the Open Graph / Twitter card image. - Gold action surface — Zap it, Pair, and Save all as ZIP wear gold gradients with
breathing glow; Zing it, Random, and ↻ New code glint gold on hover; the room input
focuses with a gold ring. - Drop zone — the folder emoji is now the animated bolt with lightning ticks; the
zone flashes gold on drag-over. - QR code — framed in a glowing gold border with a lightning bolt twinkling in each
corner; the enlarged modal gets a gold rim too. - Admin page — the card wears the same gold frame with corner lightning, gold Unlock
button, gold links/inputs — zero cyan remains anywhere. - Wordmark logo — standalone animated
logo.svg(served at/logo.svg) embedded in
the READMEs; motion tuned weightier (slower pulse, softer glow ceiling). - All animation continues to respect
prefers-reduced-motion.
Notes
- UI/branding only — no wire-protocol changes from v1.2.0; safe drop-in upgrade.
- Images:
ghcr.io/innotelinc/zapit:1.2.1(also:latest).
Full Changelog: v1.2.0...v1.2.1
zapit v1.2.0
The zing release ⚡ — flashy new identity, a zing-native wire protocol, and real-world deploy docs.
Highlights
- Flashy bolt logo — hand-drawn gradient SVG (yellow → cyan → indigo → purple) with a
glow-pulse animation, twinkling sparks, and a shimmering wordmark on the app and admin
pages. Matching gradient-bolt favicons. All motion respectsprefers-reduced-motion. - Zing UI — the text flow is now zing-native: Zap a Zing, Zap it to send
(breathing glow), Zing it to copy (hover glint). - Wire protocol — the
'text'message type is renamed to'zing'
({type:'zing', text, from}; the payload field staystext). Server, client, and tests
updated together — mixed old-client/new-server rooms are not supported. - Deploy bundle — rewritten for the real cross-host topology: zapit publishes 5150 on
its own host, NPM on a separate box forwards over the LAN by IP (no shared docker
network, noNPM_NETWORK), including NPM proxy-host/cert instructions and the live
QR_URLexample.
Upgrade notes
- Breaking: wire protocol
'text'→'zing'— refresh all open tabs when upgrading. - New image:
ghcr.io/innotelinc/zapit:1.2.0(also:latest). - Deploy docs: if you used the old
NPM_NETWORKcompose, switch to the new bundle
(published port + NPM forward-host by LAN IP).
Full Changelog: v1.1.0...v1.2.0
zapit v1.1.0
zapit is the new name for droppy ⚡ — same zero-login, P2P file zapping, new identity.
Highlights
- Renamed droppy → zapit across the app, UI, package metadata, Docker images
(ghcr.io/innotelinc/zapit), CI, Authentik blueprints, and docs. - Customizable QR code — new
QR_URLenv var sets the link address the QR code
encodes (vanity domain, alternate proxy entry, pre-filled join link…). Defaults to
PUBLIC_URLor the LAN URL; the caption and tooltip follow it. DROPPY_DATA_DIRis still honored as a fallback forZAPIT_DATA_DIR, so existing
deployments keep their state across the upgrade.
Upgrade notes
- New image name:
ghcr.io/innotelinc/zapit(CI now publishes there on every push). - Authentik blueprint env var renamed:
DROPPY_CLIENT_ID→ZAPIT_CLIENT_ID
(blueprint default client id:zapit). - Docker compose service/volume renamed to
zapit; re-rundocker compose up -dto pick
up the new container name (olddroppy-datavolumes are not migrated automatically). - Deploy bundle: set
PUBLIC_URL=https://zapit.innotel.us(or your domain) and update
the Nginx Proxy Manager host + DNS to match the new name.
Full Changelog: v1.0.0...v1.1.0
droppy v1.0.0
First public release. ⚡
Highlights
- Zero-login transfers — open the URL on two devices, same room code, drop files
- P2P via WebRTC with automatic server-relay fallback; live
mode: p2p/mode: relayindicator - Multi-file & folder drops arrive as one ZIP, assembled in the browser (zero dependencies)
- Text snippets alongside files
- Room expiry — codes auto-rotate when idle; manual ↻ New code button
- QR pairing with
PUBLIC_URLsupport (advertise your canonical domain, e.g. https://droppy.innotel.us) - Optional Authentik SSO (OIDC + PKCE) with an admin kill-switch persisted across restarts
- One-click Authentik blueprint —
GET /api/authentik/blueprintorauthentik/blueprint.yamlfor GitOps - Docker: non-root image, healthcheck, multi-arch (amd64/arm64) builds to GHCR, tests gate every build
Usage
docker run -d -p 5150:5150 -e ADMIN_PASSWORD=secret ghcr.io/innotelinc/droppy:latestFull docs: droppy/README.md