Project plan
v1 (this repo)
- Windows tray app: drop or browse or paste (files, screenshot, text), Explorer Send to, LAN HTTP server, QR, optional pairing PIN, NIC picker, Bonjour advertise + browse (
_droptophone._tcp), send to a named nearby phone, copy URL, test-in-browser, firewall helper, transfer/transcode progress, start with Windows / start in tray, choose receive folder, zip update check. - Safari/HTML receiver for iPhone Camera and for testing on the Windows PC (gallery + zip download).
- SwiftUI iOS app in
src/DropToPhone.iOS(Xcode project + GitHub Actions simulator build): poll/current, gallery, Photos vs Files, download progress, peer discovery, foreground peer host + Show my QR, Send/Connect to Nearby devices. TestFlight uses Fastlane Match on GitHub Actions. - Kotlin Android app in
src/DropToPhone.Android(Gradle + GitHub Actions debug APK): same LAN HTTP contract, NSD discovery + foreground host, MediaStore vs Files, Send/Connect to Nearby. Google Play: PLAY_STORE.md. - App Store: Plan B (paid iOS, free Windows). Follow App Store one step at a time. Play Store: paid Android client, same model.
- About screens are short: what it is, one LAN privacy line, links (website, support, privacy,
support@welchsoftware.net). Each About names the other devices (Windows: iPhone and Android; iPhone: Windows and Android; Android: Windows and iPhone). Get the free Windows app opens the website home (https://droptophone.welchsoftware.net/), never the zip, so a phone can email or text the site to a PC. How-to copy lives on Support, not restated on About. - Desktop preview uses vector chevron icons, not
</>text. - Version is
MAJOR.MINOR.PATCH.REVISIONinversion.json. A local pre-commit hook bumps REVISION; promote-to-main bumps PATCH. Pushes todevthat skip the hook still get a revision bump in Publish Windows zip. See Testing.
Docs and markup
Source of truth is markdown. Paired HTML is generated and copied onto the public site.
| Piece | Role |
|---|---|
scripts/distribution-docs.txt |
Markdown files that must have a sibling .html |
scripts/markdown-to-html.ps1 |
Converts those files (and optionally the rest of the tree) |
scripts/build-site.ps1 |
Converts distribution docs, copies HTML into site/, rewrites .md links, embeds SVG figures |
.github/workflows/ci.yml → Markdown Docs Sync |
Fails if generated HTML is stale (git diff --exit-code) |
After you edit a listed .md file, run:
pwsh -File scripts/build-site.ps1
Commit both the markdown and the generated HTML (docs/*.html, README.html, site/*.html, iOS/Android README.html).
Public / DEV pages today: README, Architecture, this plan, Support, Privacy, TestFlight, App Store, Play Store, iOS setup, Android setup, Testing, Progress, and Charging.
Unit testing
Started. CI must keep these green.
| Suite | Where | CI |
|---|---|---|
| Windows | src/DropToPhone.Windows.Tests (xUnit) — file kinds, version labels, brand URLs |
dotnet test DropToPhone.sln in Build Windows app |
| Android | src/DropToPhone.Android/app/src/test (JUnit) — Brand URLs / email / zip |
./gradlew testDebugUnitTest in Build Android app |
Still to add: iOS XCTest (version / Brand URLs), more Windows coverage (LAN address picking, token format), and a PowerShell test for scripts/bump-version-on-commit.ps1. Details: TESTING.md.
Later
- HTTPS with a trust-on-first-use cert (painful on iOS). PIN-on-QR shipped; café Wi-Fi is still not a substitute for TLS.
- Store-signed MSIX if you ever want Microsoft Store distribution. The zip already includes Install.cmd (Start menu + Send to + one UAC firewall prompt).
- App Store / Play binaries on
main: set GitHub variablesTESTFLIGHT_ENABLED,APP_STORE_SUBMIT,PLAY_PUBLISH_ENABLEDafter the store listings exist. See TESTFLIGHT.md and PLAY_STORE.md. - iOS unit tests in the Xcode scheme / CI simulator job.
- Expand Android tests beyond Brand / PIN / hints.
Foreground-only receive on phones is kept. Do not add a background HTTP server.
Non-goals
- Recreating Windows “Send a file” over Bluetooth to iPhone.
- Cloud relay.